SlideShare a Scribd company logo
1 of 20
Download to read offline
Управление памятью
контейнеров в проекте OpenVZ
Управление памятью
контейнеров в проекте OpenVZ
Владимир Давыдов
ПланПлан
• Введение
• Исторический экскурс
• Новая концепция управления ресурсами
2
ВведениеВведение
• Контейнеры потребляют ресурсы ОС
• Необходим учёт и контроль
3
1-е поколение: User Beancounters1-е поколение: User Beancounters
• Изначально разрабатывались для upstream Linux, добавлены в Virtuozzo на заре
проекта
• Процессы объединяются в группы, группа = контейнер
• 22 ресурса (количество процессов, открытые файлы, 5 “типов” памяти, ...)
• Жесткие ограничения на потребление
• Нет явного контроля физической памяти
4
2-е поколение: SLM2-е поколение: SLM
• Разработан для Virtuozzo 3.0 (полностью закрытая разработка)
• Попытка отказаться от большого количества параметров
– один основной параметр slmmemorylimit
– SLM демон жонглирует ограничениями и пытается держать
процессы в рамках
– множество вспомогательных параметров для тонкой настройки
• Также нет контроля за физической памятью
5
3-е поколение: VSwap3-е поколение: VSwap
• OpenVZ 2.6.32, Virtuozzo 4.7, PCS 6
• “Вырос” из memory cgroup для upstream Linux
• Основной и единственный ресурс – физическая память
– Первое решение, управляющее и физической памятью тоже
• За несколько лет версия upstream и наша очень сильно разошлись в деталях
– Swap & OOM killer
– Использование свободной памяти хоста
– Балансировка памяти между контейнерами
6
4-е поколение: VCMMD4-е поколение: VCMMD
• Попытка перестать бесконечно изменять upstream контроллер, но
сохранить возможность настраивать поведение ядра для наших
клиентов
• VCMMD = memory cgroup (upstream kernel) + vcmmd (openvz
userspace)
– минимум изменений в ядре Linux
– бОльшая часть логики – в пространстве пользователя
• Один обязательный тип ресурса – физическая память, доступная
контейнеру
7
Управление памятью контейнеров: требуемые эффектыУправление памятью контейнеров: требуемые эффекты
• Контейнеры должны “чувствовать” себя как хост с аналогичным
количеством памяти
• Свободная память хоста (при наличии) должна использоваться для
временного хранения выкинутой из контейнеров памяти
• Долго неиспользуемая память контейнера должна со временем
освобождаться
• Короткие всплески в потреблении памяти должны удовлетворяться
• Возможность задать “гарантии” предоставления памяти
8
1-е приближение: Жесткое разграничение1-е приближение: Жесткое разграничение
●
У каждого контейнера есть жёсткий лимит
●
Недостатки:
– Свободная память хоста не используется
– Неиспользуемая память контейнеров не
перераспределяется
9
CleancacheCleancache
●
Инфраструктура для обработки вытесняемых чистых страниц
дискового кэша
– Предоставляет возможность регистрации callback-ов из модулей
ядра
– Является частью “ванильного” ядра Linux
10
2-е приближение: Жесткое разграничение + cleancache2-е приближение: Жесткое разграничение + cleancache
●
У каждого контейнера есть жёсткий лимит
●
Вытесняемые страницы файлового кэша контейнеров
копируются в cleancache
●
Недостатки:
– Свободная память хоста не используется
– Неиспользуемая память контейнеров не перераспределяется
– Cleancache “давит” на память всех контейнеров
11
Soft limitSoft limit
●
Аналог барьера в beancounters – может быть превышен
●
Во время глобальной нехватки памяти:
– в первую очередь выбрасывается память тех контейнеров,
которые превышают свой лимит
– если ни один контейнер не превышает лимита, выбрасывается
память всех контейнеров
●
Является частью “ванильного” ядра Linux
12
3-е приближение: Жесткое разграничение + cleancache + soft limit3-е приближение: Жесткое разграничение + cleancache + soft limit
●
У каждого контейнера есть жёсткий лимит
●
Вытесняемые страницы файлового кэша контейнеров копируются в cleancache
●
У каждого контейнера есть soft limit для защиты от давления cleancache
●
Недостатки:
– Cleancache “давит” на память всех контейнеров
– Soft limit должен меняться во времени непонятным образом
13
Во что выставлять soft limit?Во что выставлять soft limit?
●
Статически: soft limit = hard limit
– Неиспользуемая память контейнеров не перераспределяется
●
Статически: soft limit = memory guarantee
– В Virtuozzo никогда не было гарантий предоставления ресурсов
– Чему должно быть равно значение по умолчанию для гарантии?
– Если 0 (что логично), то по умолчанию получаем “2-е
приближение”
(cleancache “давит” на память всех контейнеров)
●
Динамически: memory guarantee ≤ soft limit ≤ hard limit
14
VCMMD: Virtuozzo Containers Memory Management
Daemon
VCMMD: Virtuozzo Containers Memory Management
Daemon
●
Работает в пространстве пользователя
●
Получает настройки контейнеров от vzctl
●
Наблюдает за состоянием контейнеров
●
Изменяет параметры memory cgroup контейнеров соответственно
текущей ситуации
15
Во что выставлять soft limit?Во что выставлять soft limit?
●
guarantee ≤ soft limit ≤ hard limit
●
soft limit ~ working set size (wss)
●
VCMMD динамически оценивает wss конейнеров на основе
– swapin, refault rate
– memory/swap usage
– memory access pattern
(Documentation/vm/idle_page_tracking.txt)
16
4-е поколение системы управления памятью OpenVZ4-е поколение системы управления памятью OpenVZ
• Ядро
– Групповой контроллер памяти (memory cgroup)
– Два ограничения – жёсткое и мягкое
– Интерфейс cleancache для работы с “выкинутым” дисковым кэшем
• Пространство пользователя – VCMMD
– Один обязательный конфигурационный параметр – размер памяти
контейнера
– Дополнительный параметр – гарантия предоставления памяти
– Динамическая конфигурация лимитов memory cgroup соответственно
текущим запросам контейнеров
17
VCMMD: Преимущества над VSwapVCMMD: Преимущества над VSwap
●
Легко поддерживать, поскольку изменения в ядре ОС
минимальны
●
Легко отлаживать, поскольку вся логика реализована в
пространстве пользователя
●
Возможность менять логику в зависимости от дистрибутива
или системы
●
Гарантия предоставления памяти контейнеру
18
VCMMDVCMMD
●
Исходный код доступен по адресу:
https://src.openvz.org/projects/OVZ/repos/vcmmd
●
Вопросы можно задавать по e-mail:
mailto:vdavydov@odin.com
19
Спасибо за вниманиеСпасибо за внимание

More Related Content

What's hot

Обзор архитектуры [файловой] системы Ceph
Обзор архитектуры [файловой] системы CephОбзор архитектуры [файловой] системы Ceph
Обзор архитектуры [файловой] системы CephOSLL
 
Разработка высокопроизводительных серверных приложений для Linux/Unix (Алекса...
Разработка высокопроизводительных серверных приложений для Linux/Unix (Алекса...Разработка высокопроизводительных серверных приложений для Linux/Unix (Алекса...
Разработка высокопроизводительных серверных приложений для Linux/Unix (Алекса...Ontico
 
ESXi 5.x CPU scheduler
ESXi 5.x CPU schedulerESXi 5.x CPU scheduler
ESXi 5.x CPU schedulerAnton Zhbankov
 
Пространства имен Linux (linux namespaces)
Пространства имен Linux (linux namespaces)Пространства имен Linux (linux namespaces)
Пространства имен Linux (linux namespaces)OSLL
 
Максим Дунин, Nginx, Inc.
Максим Дунин, Nginx, Inc.Максим Дунин, Nginx, Inc.
Максим Дунин, Nginx, Inc.Ontico
 
DPDK в виртуальном коммутаторе Open vSwitch / Александр Джуринский (Selectel)
DPDK в виртуальном коммутаторе Open vSwitch / Александр Джуринский (Selectel)DPDK в виртуальном коммутаторе Open vSwitch / Александр Джуринский (Selectel)
DPDK в виртуальном коммутаторе Open vSwitch / Александр Джуринский (Selectel)Ontico
 
Модификации KVM для работы в кластере, Андрей Шетухин
Модификации KVM для работы в кластере, Андрей ШетухинМодификации KVM для работы в кластере, Андрей Шетухин
Модификации KVM для работы в кластере, Андрей ШетухинOntico
 
Защита датацентров и данных от катастроф на базе технологий Nutanix / Максим ...
Защита датацентров и данных от катастроф на базе технологий Nutanix / Максим ...Защита датацентров и данных от катастроф на базе технологий Nutanix / Максим ...
Защита датацентров и данных от катастроф на базе технологий Nutanix / Максим ...Ontico
 
Эволюция High availability: Windows Server 2016 Failover Clustering
Эволюция High availability: Windows Server 2016 Failover ClusteringЭволюция High availability: Windows Server 2016 Failover Clustering
Эволюция High availability: Windows Server 2016 Failover ClusteringYuriy Denisov
 
Спасение 6 млн файлов в условиях полного хецнера (Даниил Подольский, Дмитрий ...
Спасение 6 млн файлов в условиях полного хецнера (Даниил Подольский, Дмитрий ...Спасение 6 млн файлов в условиях полного хецнера (Даниил Подольский, Дмитрий ...
Спасение 6 млн файлов в условиях полного хецнера (Даниил Подольский, Дмитрий ...Ontico
 
ZFS - файловая система будущего
ZFS - файловая система будущегоZFS - файловая система будущего
ZFS - файловая система будущегоAlex Chistyakov
 
TMPA-2015: Multi-Platform Approach to Reverse Debugging of Virtual Machines
TMPA-2015: Multi-Platform Approach to Reverse Debugging of Virtual MachinesTMPA-2015: Multi-Platform Approach to Reverse Debugging of Virtual Machines
TMPA-2015: Multi-Platform Approach to Reverse Debugging of Virtual MachinesIosif Itkin
 
Контейнеры в OpenStack: простое решение сложных проблем
Контейнеры в OpenStack: простое решение сложных проблемКонтейнеры в OpenStack: простое решение сложных проблем
Контейнеры в OpenStack: простое решение сложных проблемYandex
 
Механика DDoS (Александр Крижановский)
Механика DDoS (Александр Крижановский)Механика DDoS (Александр Крижановский)
Механика DDoS (Александр Крижановский)Ontico
 

What's hot (19)

Обзор архитектуры [файловой] системы Ceph
Обзор архитектуры [файловой] системы CephОбзор архитектуры [файловой] системы Ceph
Обзор архитектуры [файловой] системы Ceph
 
Разработка высокопроизводительных серверных приложений для Linux/Unix (Алекса...
Разработка высокопроизводительных серверных приложений для Linux/Unix (Алекса...Разработка высокопроизводительных серверных приложений для Linux/Unix (Алекса...
Разработка высокопроизводительных серверных приложений для Linux/Unix (Алекса...
 
ESXi 5.x CPU scheduler
ESXi 5.x CPU schedulerESXi 5.x CPU scheduler
ESXi 5.x CPU scheduler
 
Пространства имен Linux (linux namespaces)
Пространства имен Linux (linux namespaces)Пространства имен Linux (linux namespaces)
Пространства имен Linux (linux namespaces)
 
Multiplayer
MultiplayerMultiplayer
Multiplayer
 
Максим Дунин, Nginx, Inc.
Максим Дунин, Nginx, Inc.Максим Дунин, Nginx, Inc.
Максим Дунин, Nginx, Inc.
 
DPDK в виртуальном коммутаторе Open vSwitch / Александр Джуринский (Selectel)
DPDK в виртуальном коммутаторе Open vSwitch / Александр Джуринский (Selectel)DPDK в виртуальном коммутаторе Open vSwitch / Александр Джуринский (Selectel)
DPDK в виртуальном коммутаторе Open vSwitch / Александр Джуринский (Selectel)
 
Модификации KVM для работы в кластере, Андрей Шетухин
Модификации KVM для работы в кластере, Андрей ШетухинМодификации KVM для работы в кластере, Андрей Шетухин
Модификации KVM для работы в кластере, Андрей Шетухин
 
Защита датацентров и данных от катастроф на базе технологий Nutanix / Максим ...
Защита датацентров и данных от катастроф на базе технологий Nutanix / Максим ...Защита датацентров и данных от катастроф на базе технологий Nutanix / Максим ...
Защита датацентров и данных от катастроф на базе технологий Nutanix / Максим ...
 
os_deployment
os_deploymentos_deployment
os_deployment
 
Эволюция High availability: Windows Server 2016 Failover Clustering
Эволюция High availability: Windows Server 2016 Failover ClusteringЭволюция High availability: Windows Server 2016 Failover Clustering
Эволюция High availability: Windows Server 2016 Failover Clustering
 
Спасение 6 млн файлов в условиях полного хецнера (Даниил Подольский, Дмитрий ...
Спасение 6 млн файлов в условиях полного хецнера (Даниил Подольский, Дмитрий ...Спасение 6 млн файлов в условиях полного хецнера (Даниил Подольский, Дмитрий ...
Спасение 6 млн файлов в условиях полного хецнера (Даниил Подольский, Дмитрий ...
 
Myaso
MyasoMyaso
Myaso
 
ZFS - файловая система будущего
ZFS - файловая система будущегоZFS - файловая система будущего
ZFS - файловая система будущего
 
TMPA-2015: Multi-Platform Approach to Reverse Debugging of Virtual Machines
TMPA-2015: Multi-Platform Approach to Reverse Debugging of Virtual MachinesTMPA-2015: Multi-Platform Approach to Reverse Debugging of Virtual Machines
TMPA-2015: Multi-Platform Approach to Reverse Debugging of Virtual Machines
 
7812 hid
7812 hid7812 hid
7812 hid
 
Mercurial vs Git
Mercurial vs GitMercurial vs Git
Mercurial vs Git
 
Контейнеры в OpenStack: простое решение сложных проблем
Контейнеры в OpenStack: простое решение сложных проблемКонтейнеры в OpenStack: простое решение сложных проблем
Контейнеры в OpenStack: простое решение сложных проблем
 
Механика DDoS (Александр Крижановский)
Механика DDoS (Александр Крижановский)Механика DDoS (Александр Крижановский)
Механика DDoS (Александр Крижановский)
 

Similar to Управление памятью контейнеров в проекте OpenVZ -- Владимир Давыдов

Управление ресурсами в Linux и OpenVZ
Управление ресурсами в Linux и OpenVZ Управление ресурсами в Linux и OpenVZ
Управление ресурсами в Linux и OpenVZ OpenVZ
 
Linuxvirt seminar-csc-2015
Linuxvirt seminar-csc-2015Linuxvirt seminar-csc-2015
Linuxvirt seminar-csc-2015OSLL
 
Н. Иготти. Виртуализация и виртуальные машины. Лекция 02
Н. Иготти. Виртуализация и виртуальные машины. Лекция 02Н. Иготти. Виртуализация и виртуальные машины. Лекция 02
Н. Иготти. Виртуализация и виртуальные машины. Лекция 02Computer Science Club
 
Caching data outside Java Heap and using Shared Memory in Java
Caching data outside Java Heap and using Shared Memory in JavaCaching data outside Java Heap and using Shared Memory in Java
Caching data outside Java Heap and using Shared Memory in JavaAndrei Pangin
 
(1 часть) 1С-Битрикс. Как настроить двухуровневую конфигурацию веб-приложения...
(1 часть) 1С-Битрикс. Как настроить двухуровневую конфигурацию веб-приложения...(1 часть) 1С-Битрикс. Как настроить двухуровневую конфигурацию веб-приложения...
(1 часть) 1С-Битрикс. Как настроить двухуровневую конфигурацию веб-приложения...ForkConf
 
Консервация процессов в домашних условиях
Консервация процессов в домашних условияхКонсервация процессов в домашних условиях
Консервация процессов в домашних условияхOpenVZ
 
Оптимизация программ для современных процессоров и Linux, Александр Крижановс...
Оптимизация программ для современных процессоров и Linux, Александр Крижановс...Оптимизация программ для современных процессоров и Linux, Александр Крижановс...
Оптимизация программ для современных процессоров и Linux, Александр Крижановс...Ontico
 
VMUG Moscow 2014 Проблемы с дисками?
VMUG Moscow 2014 Проблемы с дисками?VMUG Moscow 2014 Проблемы с дисками?
VMUG Moscow 2014 Проблемы с дисками?Anton Zhbankov
 
Blockchain introduction
Blockchain introductionBlockchain introduction
Blockchain introductionDmitry Meshkov
 
Performance optimization effective interaction with virtual machine
Performance optimization effective interaction with virtual machinePerformance optimization effective interaction with virtual machine
Performance optimization effective interaction with virtual machineReturn on Intelligence
 
SETCON'18 - Vitali Fokin - Kubernetes 101
SETCON'18 - Vitali Fokin - Kubernetes 101SETCON'18 - Vitali Fokin - Kubernetes 101
SETCON'18 - Vitali Fokin - Kubernetes 101Nadzeya Pus
 
Building the Enterprise infrastructure with PostgreSQL as the basis for stori...
Building the Enterprise infrastructure with PostgreSQL as the basis for stori...Building the Enterprise infrastructure with PostgreSQL as the basis for stori...
Building the Enterprise infrastructure with PostgreSQL as the basis for stori...PavelKonotopov
 
TMPA-2013 Sartakov: Genode
TMPA-2013 Sartakov: GenodeTMPA-2013 Sartakov: Genode
TMPA-2013 Sartakov: GenodeIosif Itkin
 
Docker Containers orchestrators: Kubernetes vs. Swarm
Docker Containers orchestrators: Kubernetes vs. SwarmDocker Containers orchestrators: Kubernetes vs. Swarm
Docker Containers orchestrators: Kubernetes vs. SwarmDmitry Lazarenko
 
Современная операционная система: что надо знать разработчику / Александр Кри...
Современная операционная система: что надо знать разработчику / Александр Кри...Современная операционная система: что надо знать разработчику / Александр Кри...
Современная операционная система: что надо знать разработчику / Александр Кри...Ontico
 
Александр Чистяков - Практический опыт использования решений виртуализации в ...
Александр Чистяков - Практический опыт использования решений виртуализации в ...Александр Чистяков - Практический опыт использования решений виртуализации в ...
Александр Чистяков - Практический опыт использования решений виртуализации в ...HappyDev
 
Практический опыт применения виртуализации для web-систем
Практический опыт применения виртуализации для web-системПрактический опыт применения виртуализации для web-систем
Практический опыт применения виртуализации для web-системAlex Chistyakov
 
Что особенного в СУБД для данных в оперативной памяти / Константин Осипов (Ta...
Что особенного в СУБД для данных в оперативной памяти / Константин Осипов (Ta...Что особенного в СУБД для данных в оперативной памяти / Константин Осипов (Ta...
Что особенного в СУБД для данных в оперативной памяти / Константин Осипов (Ta...Ontico
 
Java Platform Performance BoF
Java Platform Performance BoFJava Platform Performance BoF
Java Platform Performance BoFDmitry Buzdin
 

Similar to Управление памятью контейнеров в проекте OpenVZ -- Владимир Давыдов (20)

Управление ресурсами в Linux и OpenVZ
Управление ресурсами в Linux и OpenVZ Управление ресурсами в Linux и OpenVZ
Управление ресурсами в Linux и OpenVZ
 
Linuxvirt seminar-csc-2015
Linuxvirt seminar-csc-2015Linuxvirt seminar-csc-2015
Linuxvirt seminar-csc-2015
 
Н. Иготти. Виртуализация и виртуальные машины. Лекция 02
Н. Иготти. Виртуализация и виртуальные машины. Лекция 02Н. Иготти. Виртуализация и виртуальные машины. Лекция 02
Н. Иготти. Виртуализация и виртуальные машины. Лекция 02
 
Caching data outside Java Heap and using Shared Memory in Java
Caching data outside Java Heap and using Shared Memory in JavaCaching data outside Java Heap and using Shared Memory in Java
Caching data outside Java Heap and using Shared Memory in Java
 
(1 часть) 1С-Битрикс. Как настроить двухуровневую конфигурацию веб-приложения...
(1 часть) 1С-Битрикс. Как настроить двухуровневую конфигурацию веб-приложения...(1 часть) 1С-Битрикс. Как настроить двухуровневую конфигурацию веб-приложения...
(1 часть) 1С-Битрикс. Как настроить двухуровневую конфигурацию веб-приложения...
 
Консервация процессов в домашних условиях
Консервация процессов в домашних условияхКонсервация процессов в домашних условиях
Консервация процессов в домашних условиях
 
Оптимизация программ для современных процессоров и Linux, Александр Крижановс...
Оптимизация программ для современных процессоров и Linux, Александр Крижановс...Оптимизация программ для современных процессоров и Linux, Александр Крижановс...
Оптимизация программ для современных процессоров и Linux, Александр Крижановс...
 
VMUG Moscow 2014 Проблемы с дисками?
VMUG Moscow 2014 Проблемы с дисками?VMUG Moscow 2014 Проблемы с дисками?
VMUG Moscow 2014 Проблемы с дисками?
 
An internal look at HotSpot JVM
An internal look at HotSpot JVMAn internal look at HotSpot JVM
An internal look at HotSpot JVM
 
Blockchain introduction
Blockchain introductionBlockchain introduction
Blockchain introduction
 
Performance optimization effective interaction with virtual machine
Performance optimization effective interaction with virtual machinePerformance optimization effective interaction with virtual machine
Performance optimization effective interaction with virtual machine
 
SETCON'18 - Vitali Fokin - Kubernetes 101
SETCON'18 - Vitali Fokin - Kubernetes 101SETCON'18 - Vitali Fokin - Kubernetes 101
SETCON'18 - Vitali Fokin - Kubernetes 101
 
Building the Enterprise infrastructure with PostgreSQL as the basis for stori...
Building the Enterprise infrastructure with PostgreSQL as the basis for stori...Building the Enterprise infrastructure with PostgreSQL as the basis for stori...
Building the Enterprise infrastructure with PostgreSQL as the basis for stori...
 
TMPA-2013 Sartakov: Genode
TMPA-2013 Sartakov: GenodeTMPA-2013 Sartakov: Genode
TMPA-2013 Sartakov: Genode
 
Docker Containers orchestrators: Kubernetes vs. Swarm
Docker Containers orchestrators: Kubernetes vs. SwarmDocker Containers orchestrators: Kubernetes vs. Swarm
Docker Containers orchestrators: Kubernetes vs. Swarm
 
Современная операционная система: что надо знать разработчику / Александр Кри...
Современная операционная система: что надо знать разработчику / Александр Кри...Современная операционная система: что надо знать разработчику / Александр Кри...
Современная операционная система: что надо знать разработчику / Александр Кри...
 
Александр Чистяков - Практический опыт использования решений виртуализации в ...
Александр Чистяков - Практический опыт использования решений виртуализации в ...Александр Чистяков - Практический опыт использования решений виртуализации в ...
Александр Чистяков - Практический опыт использования решений виртуализации в ...
 
Практический опыт применения виртуализации для web-систем
Практический опыт применения виртуализации для web-системПрактический опыт применения виртуализации для web-систем
Практический опыт применения виртуализации для web-систем
 
Что особенного в СУБД для данных в оперативной памяти / Константин Осипов (Ta...
Что особенного в СУБД для данных в оперативной памяти / Константин Осипов (Ta...Что особенного в СУБД для данных в оперативной памяти / Константин Осипов (Ta...
Что особенного в СУБД для данных в оперативной памяти / Константин Осипов (Ta...
 
Java Platform Performance BoF
Java Platform Performance BoFJava Platform Performance BoF
Java Platform Performance BoF
 

More from OpenVZ

PFcache - LinuxCon 2015
PFcache - LinuxCon 2015PFcache - LinuxCon 2015
PFcache - LinuxCon 2015OpenVZ
 
Speeding up ps and top
Speeding up ps and topSpeeding up ps and top
Speeding up ps and topOpenVZ
 
Live migration: pros, cons and gotchas -- Pavel Emelyanov
Live migration: pros, cons and gotchas -- Pavel EmelyanovLive migration: pros, cons and gotchas -- Pavel Emelyanov
Live migration: pros, cons and gotchas -- Pavel EmelyanovOpenVZ
 
Live migrating a container: pros, cons and gotchas -- Pavel Emelyanov
Live migrating a container: pros, cons and gotchas -- Pavel EmelyanovLive migrating a container: pros, cons and gotchas -- Pavel Emelyanov
Live migrating a container: pros, cons and gotchas -- Pavel EmelyanovOpenVZ
 
CRIU: time and space travel for Linux containers -- Kir Kolyshkin
CRIU: time and space travel for Linux containers -- Kir KolyshkinCRIU: time and space travel for Linux containers -- Kir Kolyshkin
CRIU: time and space travel for Linux containers -- Kir KolyshkinOpenVZ
 
Тестирование ПО, основанного на сторонних компонентах - Денис Силаков, SECR 2015
Тестирование ПО, основанного на сторонних компонентах - Денис Силаков, SECR 2015Тестирование ПО, основанного на сторонних компонентах - Денис Силаков, SECR 2015
Тестирование ПО, основанного на сторонних компонентах - Денис Силаков, SECR 2015OpenVZ
 
Живая миграция: плюсы, минусы и подводные камни - Павел Емельянов
Живая миграция: плюсы, минусы и подводные камни - Павел ЕмельяновЖивая миграция: плюсы, минусы и подводные камни - Павел Емельянов
Живая миграция: плюсы, минусы и подводные камни - Павел ЕмельяновOpenVZ
 
What's missing from upstream kernel containers? - Sergey Bronnikov
What's missing from upstream kernel containers? - Sergey BronnikovWhat's missing from upstream kernel containers? - Sergey Bronnikov
What's missing from upstream kernel containers? - Sergey BronnikovOpenVZ
 
Проблема фрагментации виртуальных дисков и способы её решения -- Дмитрий Монахов
Проблема фрагментации виртуальных дисков и способы её решения -- Дмитрий МонаховПроблема фрагментации виртуальных дисков и способы её решения -- Дмитрий Монахов
Проблема фрагментации виртуальных дисков и способы её решения -- Дмитрий МонаховOpenVZ
 
Развёртывание приложений Docker в контейнерах Virtuozzo -- Павел Тихомиров
Развёртывание приложений Docker в контейнерах Virtuozzo -- Павел ТихомировРазвёртывание приложений Docker в контейнерах Virtuozzo -- Павел Тихомиров
Развёртывание приложений Docker в контейнерах Virtuozzo -- Павел ТихомировOpenVZ
 
CRIU: ускорение запуска PHP в CloudLinux OS -- Руслан Купреев
CRIU: ускорение запуска PHP в CloudLinux OS  -- Руслан КупреевCRIU: ускорение запуска PHP в CloudLinux OS  -- Руслан Купреев
CRIU: ускорение запуска PHP в CloudLinux OS -- Руслан КупреевOpenVZ
 
LibCT и контейнеры на уровне приложений -- Александр Бурлука
	LibCT и контейнеры на уровне приложений -- Александр Бурлука	LibCT и контейнеры на уровне приложений -- Александр Бурлука
LibCT и контейнеры на уровне приложений -- Александр БурлукаOpenVZ
 
Живая миграция контейнеров: плюсы, минусы, подводные камни -- Павел Емельянов
Живая миграция контейнеров: плюсы, минусы, подводные камни -- Павел ЕмельяновЖивая миграция контейнеров: плюсы, минусы, подводные камни -- Павел Емельянов
Живая миграция контейнеров: плюсы, минусы, подводные камни -- Павел ЕмельяновOpenVZ
 
LibCT: one lib to rule them all -- Andrey Vagin
LibCT: one lib to rule them all -- Andrey VaginLibCT: one lib to rule them all -- Andrey Vagin
LibCT: one lib to rule them all -- Andrey VaginOpenVZ
 
Denser containers with PF cache - Pavel Emelyanov
Denser containers with PF cache - Pavel EmelyanovDenser containers with PF cache - Pavel Emelyanov
Denser containers with PF cache - Pavel EmelyanovOpenVZ
 
CGroups kernel memory controller -- Pavel Emelyanov
CGroups kernel memory controller -- Pavel EmelyanovCGroups kernel memory controller -- Pavel Emelyanov
CGroups kernel memory controller -- Pavel EmelyanovOpenVZ
 
What's missing from upstream kernel containers? - Kir Kolyshkin, Sergey Bronn...
What's missing from upstream kernel containers? - Kir Kolyshkin, Sergey Bronn...What's missing from upstream kernel containers? - Kir Kolyshkin, Sergey Bronn...
What's missing from upstream kernel containers? - Kir Kolyshkin, Sergey Bronn...OpenVZ
 
Not so brief history of Linux Containers - Kir Kolyshkin
Not so brief history of Linux Containers - Kir KolyshkinNot so brief history of Linux Containers - Kir Kolyshkin
Not so brief history of Linux Containers - Kir KolyshkinOpenVZ
 
Openvz booth
Openvz boothOpenvz booth
Openvz boothOpenVZ
 
Containers in a file
Containers in a fileContainers in a file
Containers in a fileOpenVZ
 

More from OpenVZ (20)

PFcache - LinuxCon 2015
PFcache - LinuxCon 2015PFcache - LinuxCon 2015
PFcache - LinuxCon 2015
 
Speeding up ps and top
Speeding up ps and topSpeeding up ps and top
Speeding up ps and top
 
Live migration: pros, cons and gotchas -- Pavel Emelyanov
Live migration: pros, cons and gotchas -- Pavel EmelyanovLive migration: pros, cons and gotchas -- Pavel Emelyanov
Live migration: pros, cons and gotchas -- Pavel Emelyanov
 
Live migrating a container: pros, cons and gotchas -- Pavel Emelyanov
Live migrating a container: pros, cons and gotchas -- Pavel EmelyanovLive migrating a container: pros, cons and gotchas -- Pavel Emelyanov
Live migrating a container: pros, cons and gotchas -- Pavel Emelyanov
 
CRIU: time and space travel for Linux containers -- Kir Kolyshkin
CRIU: time and space travel for Linux containers -- Kir KolyshkinCRIU: time and space travel for Linux containers -- Kir Kolyshkin
CRIU: time and space travel for Linux containers -- Kir Kolyshkin
 
Тестирование ПО, основанного на сторонних компонентах - Денис Силаков, SECR 2015
Тестирование ПО, основанного на сторонних компонентах - Денис Силаков, SECR 2015Тестирование ПО, основанного на сторонних компонентах - Денис Силаков, SECR 2015
Тестирование ПО, основанного на сторонних компонентах - Денис Силаков, SECR 2015
 
Живая миграция: плюсы, минусы и подводные камни - Павел Емельянов
Живая миграция: плюсы, минусы и подводные камни - Павел ЕмельяновЖивая миграция: плюсы, минусы и подводные камни - Павел Емельянов
Живая миграция: плюсы, минусы и подводные камни - Павел Емельянов
 
What's missing from upstream kernel containers? - Sergey Bronnikov
What's missing from upstream kernel containers? - Sergey BronnikovWhat's missing from upstream kernel containers? - Sergey Bronnikov
What's missing from upstream kernel containers? - Sergey Bronnikov
 
Проблема фрагментации виртуальных дисков и способы её решения -- Дмитрий Монахов
Проблема фрагментации виртуальных дисков и способы её решения -- Дмитрий МонаховПроблема фрагментации виртуальных дисков и способы её решения -- Дмитрий Монахов
Проблема фрагментации виртуальных дисков и способы её решения -- Дмитрий Монахов
 
Развёртывание приложений Docker в контейнерах Virtuozzo -- Павел Тихомиров
Развёртывание приложений Docker в контейнерах Virtuozzo -- Павел ТихомировРазвёртывание приложений Docker в контейнерах Virtuozzo -- Павел Тихомиров
Развёртывание приложений Docker в контейнерах Virtuozzo -- Павел Тихомиров
 
CRIU: ускорение запуска PHP в CloudLinux OS -- Руслан Купреев
CRIU: ускорение запуска PHP в CloudLinux OS  -- Руслан КупреевCRIU: ускорение запуска PHP в CloudLinux OS  -- Руслан Купреев
CRIU: ускорение запуска PHP в CloudLinux OS -- Руслан Купреев
 
LibCT и контейнеры на уровне приложений -- Александр Бурлука
	LibCT и контейнеры на уровне приложений -- Александр Бурлука	LibCT и контейнеры на уровне приложений -- Александр Бурлука
LibCT и контейнеры на уровне приложений -- Александр Бурлука
 
Живая миграция контейнеров: плюсы, минусы, подводные камни -- Павел Емельянов
Живая миграция контейнеров: плюсы, минусы, подводные камни -- Павел ЕмельяновЖивая миграция контейнеров: плюсы, минусы, подводные камни -- Павел Емельянов
Живая миграция контейнеров: плюсы, минусы, подводные камни -- Павел Емельянов
 
LibCT: one lib to rule them all -- Andrey Vagin
LibCT: one lib to rule them all -- Andrey VaginLibCT: one lib to rule them all -- Andrey Vagin
LibCT: one lib to rule them all -- Andrey Vagin
 
Denser containers with PF cache - Pavel Emelyanov
Denser containers with PF cache - Pavel EmelyanovDenser containers with PF cache - Pavel Emelyanov
Denser containers with PF cache - Pavel Emelyanov
 
CGroups kernel memory controller -- Pavel Emelyanov
CGroups kernel memory controller -- Pavel EmelyanovCGroups kernel memory controller -- Pavel Emelyanov
CGroups kernel memory controller -- Pavel Emelyanov
 
What's missing from upstream kernel containers? - Kir Kolyshkin, Sergey Bronn...
What's missing from upstream kernel containers? - Kir Kolyshkin, Sergey Bronn...What's missing from upstream kernel containers? - Kir Kolyshkin, Sergey Bronn...
What's missing from upstream kernel containers? - Kir Kolyshkin, Sergey Bronn...
 
Not so brief history of Linux Containers - Kir Kolyshkin
Not so brief history of Linux Containers - Kir KolyshkinNot so brief history of Linux Containers - Kir Kolyshkin
Not so brief history of Linux Containers - Kir Kolyshkin
 
Openvz booth
Openvz boothOpenvz booth
Openvz booth
 
Containers in a file
Containers in a fileContainers in a file
Containers in a file
 

Управление памятью контейнеров в проекте OpenVZ -- Владимир Давыдов

  • 1. Управление памятью контейнеров в проекте OpenVZ Управление памятью контейнеров в проекте OpenVZ Владимир Давыдов
  • 2. ПланПлан • Введение • Исторический экскурс • Новая концепция управления ресурсами 2
  • 3. ВведениеВведение • Контейнеры потребляют ресурсы ОС • Необходим учёт и контроль 3
  • 4. 1-е поколение: User Beancounters1-е поколение: User Beancounters • Изначально разрабатывались для upstream Linux, добавлены в Virtuozzo на заре проекта • Процессы объединяются в группы, группа = контейнер • 22 ресурса (количество процессов, открытые файлы, 5 “типов” памяти, ...) • Жесткие ограничения на потребление • Нет явного контроля физической памяти 4
  • 5. 2-е поколение: SLM2-е поколение: SLM • Разработан для Virtuozzo 3.0 (полностью закрытая разработка) • Попытка отказаться от большого количества параметров – один основной параметр slmmemorylimit – SLM демон жонглирует ограничениями и пытается держать процессы в рамках – множество вспомогательных параметров для тонкой настройки • Также нет контроля за физической памятью 5
  • 6. 3-е поколение: VSwap3-е поколение: VSwap • OpenVZ 2.6.32, Virtuozzo 4.7, PCS 6 • “Вырос” из memory cgroup для upstream Linux • Основной и единственный ресурс – физическая память – Первое решение, управляющее и физической памятью тоже • За несколько лет версия upstream и наша очень сильно разошлись в деталях – Swap & OOM killer – Использование свободной памяти хоста – Балансировка памяти между контейнерами 6
  • 7. 4-е поколение: VCMMD4-е поколение: VCMMD • Попытка перестать бесконечно изменять upstream контроллер, но сохранить возможность настраивать поведение ядра для наших клиентов • VCMMD = memory cgroup (upstream kernel) + vcmmd (openvz userspace) – минимум изменений в ядре Linux – бОльшая часть логики – в пространстве пользователя • Один обязательный тип ресурса – физическая память, доступная контейнеру 7
  • 8. Управление памятью контейнеров: требуемые эффектыУправление памятью контейнеров: требуемые эффекты • Контейнеры должны “чувствовать” себя как хост с аналогичным количеством памяти • Свободная память хоста (при наличии) должна использоваться для временного хранения выкинутой из контейнеров памяти • Долго неиспользуемая память контейнера должна со временем освобождаться • Короткие всплески в потреблении памяти должны удовлетворяться • Возможность задать “гарантии” предоставления памяти 8
  • 9. 1-е приближение: Жесткое разграничение1-е приближение: Жесткое разграничение ● У каждого контейнера есть жёсткий лимит ● Недостатки: – Свободная память хоста не используется – Неиспользуемая память контейнеров не перераспределяется 9
  • 10. CleancacheCleancache ● Инфраструктура для обработки вытесняемых чистых страниц дискового кэша – Предоставляет возможность регистрации callback-ов из модулей ядра – Является частью “ванильного” ядра Linux 10
  • 11. 2-е приближение: Жесткое разграничение + cleancache2-е приближение: Жесткое разграничение + cleancache ● У каждого контейнера есть жёсткий лимит ● Вытесняемые страницы файлового кэша контейнеров копируются в cleancache ● Недостатки: – Свободная память хоста не используется – Неиспользуемая память контейнеров не перераспределяется – Cleancache “давит” на память всех контейнеров 11
  • 12. Soft limitSoft limit ● Аналог барьера в beancounters – может быть превышен ● Во время глобальной нехватки памяти: – в первую очередь выбрасывается память тех контейнеров, которые превышают свой лимит – если ни один контейнер не превышает лимита, выбрасывается память всех контейнеров ● Является частью “ванильного” ядра Linux 12
  • 13. 3-е приближение: Жесткое разграничение + cleancache + soft limit3-е приближение: Жесткое разграничение + cleancache + soft limit ● У каждого контейнера есть жёсткий лимит ● Вытесняемые страницы файлового кэша контейнеров копируются в cleancache ● У каждого контейнера есть soft limit для защиты от давления cleancache ● Недостатки: – Cleancache “давит” на память всех контейнеров – Soft limit должен меняться во времени непонятным образом 13
  • 14. Во что выставлять soft limit?Во что выставлять soft limit? ● Статически: soft limit = hard limit – Неиспользуемая память контейнеров не перераспределяется ● Статически: soft limit = memory guarantee – В Virtuozzo никогда не было гарантий предоставления ресурсов – Чему должно быть равно значение по умолчанию для гарантии? – Если 0 (что логично), то по умолчанию получаем “2-е приближение” (cleancache “давит” на память всех контейнеров) ● Динамически: memory guarantee ≤ soft limit ≤ hard limit 14
  • 15. VCMMD: Virtuozzo Containers Memory Management Daemon VCMMD: Virtuozzo Containers Memory Management Daemon ● Работает в пространстве пользователя ● Получает настройки контейнеров от vzctl ● Наблюдает за состоянием контейнеров ● Изменяет параметры memory cgroup контейнеров соответственно текущей ситуации 15
  • 16. Во что выставлять soft limit?Во что выставлять soft limit? ● guarantee ≤ soft limit ≤ hard limit ● soft limit ~ working set size (wss) ● VCMMD динамически оценивает wss конейнеров на основе – swapin, refault rate – memory/swap usage – memory access pattern (Documentation/vm/idle_page_tracking.txt) 16
  • 17. 4-е поколение системы управления памятью OpenVZ4-е поколение системы управления памятью OpenVZ • Ядро – Групповой контроллер памяти (memory cgroup) – Два ограничения – жёсткое и мягкое – Интерфейс cleancache для работы с “выкинутым” дисковым кэшем • Пространство пользователя – VCMMD – Один обязательный конфигурационный параметр – размер памяти контейнера – Дополнительный параметр – гарантия предоставления памяти – Динамическая конфигурация лимитов memory cgroup соответственно текущим запросам контейнеров 17
  • 18. VCMMD: Преимущества над VSwapVCMMD: Преимущества над VSwap ● Легко поддерживать, поскольку изменения в ядре ОС минимальны ● Легко отлаживать, поскольку вся логика реализована в пространстве пользователя ● Возможность менять логику в зависимости от дистрибутива или системы ● Гарантия предоставления памяти контейнеру 18
  • 19. VCMMDVCMMD ● Исходный код доступен по адресу: https://src.openvz.org/projects/OVZ/repos/vcmmd ● Вопросы можно задавать по e-mail: mailto:vdavydov@odin.com 19