This document discusses resource management in Linux and OpenVZ containers. It outlines several topics to be covered, including containers, existing resource management mechanisms and their shortcomings, OpenVZ user accounting, and the use of cgroups and memory controllers. Specific resources that can be controlled are also listed, such as CPU, memory, disk I/O, networking. Mechanisms for controlling these resources like process priorities, limits, accounting, and traffic control are also mentioned.
2. Повестка дня (aka Agenda)
Зачем и какие ресурсы контролировать?
•
Немного про контейнеры
•
Существующие механизмы, их недостатки
•
OpenVZ user beancounters, эксплойты
•
CGroups и memory controller
•
TODO
•
3. Повестка дня (aka Agenda)
Зачем и какие ресурсы контролировать?
•
Немного про контейнеры
•
Существующие механизмы, их недостатки
•
OpenVZ user beancounters, эксплойты
•
CGroups и memory controller
•
TODO
•
4. Ресурсы: зачем контролировать?
Ресурсы не бесконечны
•
Сервер один, задач и пользователей много
•
Нужна статистика по использованию
•
Нужна защита от DoS атак
•
Нужно обеспечить качество сервиса
•
– не только лимиты, но и гарантии
5. Ресурсы: что контролировать?
Процессор
•
Оперативная память и подкачка (swap)
•
Дисковое пространство
•
Дисковый ввод-вывод (I/O bandwidth)
•
Сеть (сокеты, буфера, bandwidth и т.п.)
•
Прочее
•
6. Процессор
Процессорное время раздаётся процессам
маленькими временными отрезками
• Приоритеты (веса)
• Ограничения сверху (лимиты)
• Привязка к конкретным процессорам
(для многопроцессорных систем)
7. Оперативная память
• Память уровня пользователя
– Виртуальная (VM) и физическая (RSS)
– page cache
• Память ядра
– Различные объекты / механизмы выделения
– Особый случай: сетевые буфера
• Пространство подкачки (swap)
8. Диск
• Место
• Пропускная способность ввода-вывода
– Чтение и запись
– Отображения памяти (mmap)
– Подкачка (swapin/swapout)
• Статистика ввода-вывода
9. Сеть
• Тут всё уже решено, говорить не о чем
– ...более или менее
• TC: traffic control
– Шейпинг, шедалинг, политики, ...
• iptables
10. Повестка дня (aka Agenda)
Зачем и какие ресурсы контролировать?
•
Немного про контейнеры
•
Существующие механизмы, их недостатки
•
OpenVZ user beancounters, эксплойты
•
CGroups и memory controller
•
TODO
•
11. Контейнеры — это ...
• такая легковесная виртуализация
• много контейнеров поверх единого ядра
• совсем как VM, только
– одна ОС (хотя м.б. разные дистрибутивы)
– «родная» производительность
– высокая плотность размещения
– динамическое управление ресурсами
13. HP labs: OpenVZ vs Xen
• Накладные расходы Xen больше
• Накладными расходами OpenVZ
зачастую можно пренебречь
• Под Xen работало 4 копии интернет-
магазина и сервер уже был перегружен,
под OpenVZ заработало 6 без перегрузки
15. Контейнеры
и управление ресурсами
• Обеспечить мирное сосуществование
множества контейнеров
• С точки зрения управления ресурсами,
контейнеры — это просто группы
процессов!
16. Повестка дня (aka Agenda)
Зачем и какие ресурсы контролировать?
•
Немного про контейнеры
•
Существующие механизмы, их недостатки
•
OpenVZ user beancounters, эксплойты
•
CGroups и memory controller
•
TODO
•
17. Процессор
• Каждый процесс имеет nice value,
можно менять «по дороге» (nice/renice)
• Есть приоритет реального времени и
отдельная очередь процессов для него
• Жёсткий лимит на процессорное время
процесса (ulimit -c)
18. Место на диске
• Стандартные UNIX квоты очень хороши
– квоты на точку монтирования
– для пользователей и для групп
– мягкие и жёсткие лимиты, грейс-период
– можно узнать текущие значения
– можно менять лимиты «по дороге»
– приложения ожидают отказов (или должны)
19. Всё остальное: ulimit
• Реализован системными вызовами
setrlimit() и getrlimit()
• Контролирует 16 разных параметров:
core file size, data segment size, scheduling priority, file size, pending signals,
max locked memory, max memory size, number of open files, pipe size,
POSIX message queues, real-time priority, stack size, cpu time, max user processes,
virtual memory, file locks
• Есть «мягкие» и «жёсткие» лимиты
20. ulimit
$ ulimit -a
core file size (blocks, -c) 0
data seg size (kbytes, -d) unlimited
scheduling priority (-e) 0
file size (blocks, -f) unlimited
pending signals (-i) 38400
max locked memory (kbytes, -l) 32
max memory size (kbytes, -m) unlimited
open files (-n) 1024
pipe size (512 bytes, -p) 8
POSIX message queues (bytes, -q) 819200
real-time priority (-r) 0
stack size (kbytes, -s) 10240
cpu time (seconds, -t) unlimited
max user processes (-u) 1024
virtual memory (kbytes, -v) unlimited
file locks (-x) unlimited
21. У ulimit много проблем
Далеко не все ресурсы учитываются
•
Нельзя посмотреть текущее использование
•
Лимиты выставляются в текущем контексте
•
Все лимиты выставляются на процесс
•
– кроме NPROC, который на пользователя
• Лимиты на память в основном игнорируются
22. Повестка дня (aka Agenda)
Зачем и какие ресурсы контролировать?
•
Немного про контейнеры
•
Существующие механизмы, их недостатки
•
OpenVZ user beancounters, эксплойты
•
CGroups и memory controller
•
TODO
•
23. OpenVZ beancounters
Контролирует группы процессов
•
20 различных параметров
•
Все можно менять во время выполнения
•
Для каждого параметра можно видеть:
•
– Текущее значение, пиковое значение
– Счётчик отказов в выделении ресурса
27. Другие механизмы OpenVZ
• “Честный” планировщик процессов
– веса (приоритеты) и жёсткие лимиты
• Двухуровневая дисковая квота
– I уровень: квоты на контейнер
– II уровень: квоты внутри контейнера
• Приоритет дискового ввода-вывода
28. Повестка дня (aka Agenda)
Зачем и какие ресурсы контролировать?
•
Немного про контейнеры
•
Существующие механизмы, их недостатки
•
OpenVZ user beancounters, эксплойты
•
CGroups и memory controller
•
TODO
•
29. Control Groups aka CGroups
• Универсальный механизм для группировки
процессов в иехархические группы
• Различные контроллеры ресурсов
• Можно иметь разные группы для разных
контроллеров
• Управляется через файловую систему
30. Control Groups: управление
mkdir /dev/cgroup
mount -t cgroup none /dev/cgroup
mkdir /dev/cgroup/0
cd /dev/cgroup/0
echo $$ > tasks
cat /proc/self/cgroup
/etc/init.d/httpd start
31. Control Groups: история
• Вначале были cpusets от Bull/SGI
– Для привязки групп задач к NUMA узлам
• Paul Menage из Google разделил cpusets
на инфраструктуру (группировки) и
контроллеры
– сpusets теперь просто один из контроллеров
– можно добавлять другие
32. Memory Controller
• Контролирует память пользователя и page
cache
• Reclamation (утилизация? Переработка?)
– как в try_to_free_pages()
• Out-of-memory killer
34. Память пользователя
Длина маппингов
RSS
Адресное пространство процесса
Возвраща- Неисполь- Исполь- Невозвра-
емые VMA зуемые зуемые щаемые
(mmap'ed страницы страницы VMA
files) (private and
anon)
35. Повестка дня (aka Agenda)
Зачем и какие ресурсы контролировать?
•
Немного про контейнеры
•
Существующие механизмы, их недостатки
•
OpenVZ user beancounters, эксплойты
•
CGroups и memory controller
•
TODO
•
36. Светлое будущее (TODO)
Kernel memory controller (уже в -mm)
•
Учёт длины маппингов
•
«Честный» учёт разделяемых страниц
•
Чекпоинтинг
•
I/O controller
•
Всё, что есть в OpenVZ, портировать в Linux
•