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
•