колышкин rootconf 2009 openvz
TRANSCRIPT
Кирилл Колышкин[email protected]://openvz.org/
Управление ресурсамив Linux и OpenVZ
Повестка дня (aka Agenda)• Зачем и какие ресурсы контролировать?
• Немного про контейнеры
• Существующие механизмы, их недостатки
• OpenVZ user beancounters, эксплойты
• CGroups и memory controller
• TODO
Повестка дня (aka Agenda)• Зачем и какие ресурсы контролировать?
• Немного про контейнеры
• Существующие механизмы, их недостатки
• OpenVZ user beancounters, эксплойты
• CGroups и memory controller
• TODO
Ресурсы: зачем контролировать?• Ресурсы не бесконечны
• Сервер один, задач и пользователей много
• Нужна статистика по использованию
• Нужна защита от DoS атак
• Нужно обеспечить качество сервиса– не только лимиты, но и гарантии
Ресурсы: что контролировать?• Процессор
• Оперативная память и подкачка (swap)
• Дисковое пространство
• Дисковый ввод-вывод (I/O bandwidth)
• Сеть (сокеты, буфера, bandwidth и т.п.)
• Прочее
ПроцессорПроцессорное время раздаётся процессам
маленькими временными отрезками
• Приоритеты (веса)
• Ограничения сверху (лимиты)
• Привязка к конкретным процессорам(для многопроцессорных систем)
Оперативная память• Память уровня пользователя
– Виртуальная (VM) и физическая (RSS)
– page cache
• Память ядра– Различные объекты / механизмы выделения
– Особый случай: сетевые буфера
• Пространство подкачки (swap)
Диск• Место
• Пропускная способность ввода-вывода– Чтение и запись
– Отображения памяти (mmap)
– Подкачка (swapin/swapout)
• Статистика ввода-вывода
Сеть• Тут всё уже решено, говорить не о чем
– ...более или менее
• TC: traffic control– Шейпинг, шедалинг, политики, ...
• iptables
Повестка дня (aka Agenda)• Зачем и какие ресурсы контролировать?
• Немного про контейнеры
• Существующие механизмы, их недостатки
• OpenVZ user beancounters, эксплойты
• CGroups и memory controller
• TODO
Контейнеры — это ...• такая легковесная виртуализация
• много контейнеров поверх единого ядра
• совсем как VM, только– одна ОС (хотя м.б. разные дистрибутивы)
– «родная» производительность
– высокая плотность размещения
– динамическое управление ресурсами
Примеры контейнеров• OpenVZ
• Parallels Virtuozzo Containers
• FreeBSD jails
• Linux-VServer
• Solaris Containers/Zones
• IBM AIX6 WPARs (Workload Partitions)
HP labs: OpenVZ vs Xen• Накладные расходы Xen больше
• Накладными расходами OpenVZзачастую можно пренебречь
• Под Xen работало 4 копии интернет-магазина и сервер уже был перегружен,под OpenVZ заработало 6 без перегрузки
Контейнеры: шаг в эволюции ОС• Многозадачные ОС
• Многопользовательские ОС
• Многоконтейнерные ОС
Контейнерыи управление ресурсами
• Обеспечить мирное сосуществование множества контейнеров
• С точки зрения управления ресурсами, контейнеры — это просто группы процессов!
Повестка дня (aka Agenda)• Зачем и какие ресурсы контролировать?
• Немного про контейнеры
• Существующие механизмы, их недостатки
• OpenVZ user beancounters, эксплойты
• CGroups и memory controller
• TODO
Процессор• Каждый процесс имеет nice value,
можно менять «по дороге» (nice/renice)
• Есть приоритет реального времени и отдельная очередь процессов для него
• Жёсткий лимит на процессорное время процесса (ulimit -c)
Место на диске• Стандартные UNIX квоты очень хороши
– квоты на точку монтирования
– для пользователей и для групп
– мягкие и жёсткие лимиты, грейс-период
– можно узнать текущие значения
– можно менять лимиты «по дороге»
– приложения ожидают отказов (или должны)
Всё остальное: 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
• Есть «мягкие» и «жёсткие» лимиты
ulimit$ ulimit -acore file size (blocks, -c) 0data seg size (kbytes, -d) unlimitedscheduling priority (-e) 0file size (blocks, -f) unlimitedpending signals (-i) 38400max locked memory (kbytes, -l) 32max memory size (kbytes, -m) unlimitedopen files (-n) 1024pipe size (512 bytes, -p) 8POSIX message queues (bytes, -q) 819200real-time priority (-r) 0stack size (kbytes, -s) 10240cpu time (seconds, -t) unlimitedmax user processes (-u) 1024virtual memory (kbytes, -v) unlimitedfile locks (-x) unlimited
У ulimit много проблем• Далеко не все ресурсы учитываются
• Нельзя посмотреть текущее использование
• Лимиты выставляются в текущем контексте
• Все лимиты выставляются на процесс– кроме NPROC, который на пользователя
• Лимиты на память в основном игнорируются
Повестка дня (aka Agenda)• Зачем и какие ресурсы контролировать?
• Немного про контейнеры
• Существующие механизмы, их недостатки
• OpenVZ user beancounters, эксплойты
• CGroups и memory controller
• TODO
OpenVZ beancounters• Контролирует группы процессов
• 20 различных параметров
• Все можно менять во время выполнения
• Для каждого параметра можно видеть:– Текущее значение, пиковое значение
– Счётчик отказов в выделении ресурса
UBC DEMOcat /proc/user_beancounters uid resource held maxheld barrier limit failcnt 123: kmemsize 1736835 5504975 5505024 5872024 43 lockedpages 0 0 32 32 0 privvmpages 7550 29061 256000 270000 0 shmpages 45 45 8192 8192 0 dummy 0 0 0 0 0 numproc 27 28 75 75 0 physpages 4167 5318 0 2147483647 0 vmguarpages 0 0 6144 2147483647 0 oomguarpages 4167 5318 6144 2147483647 0 numtcpsock 4 5 80 80 0 numflock 3 4 100 110 0 numpty 2 2 16 16 0 numsiginfo 0 2 256 256 0 tcpsndbuf 0 29212 319488 524288 0 tcprcvbuf 0 8552 319488 524288 0 othersockbuf 26736 74712 15000000 16000000 0 dgramrcvbuf 0 0 132096 132096 0 numothersock 22 24 80 80 0 dcachesize 130340 2097676 2097152 2195456 1 numfile 616 656 4096 4096 0 numiptent 0 0 128 128 0
Exploit 1: dcache eaterwhile(1) {
mkdir(“somedir”, S_IRWXU);
cd(“somedir”);
}
Exploit 2: vmarea eaterprot = PROT_READ;
for (start = 0; start < 10000; start += 4096) {
mmap((void *)start, 4096, prot, MAP_PRIVATE | MAP_ANON, 0, 0);
prot = (prot == PROT_READ)? PROT_WRITE : PROT_READ;
}
for (i=1; i < 1024; i++) fork();
Другие механизмы OpenVZ• “Честный” планировщик процессов
– веса (приоритеты) и жёсткие лимиты
• Двухуровневая дисковая квота
– I уровень: квоты на контейнер
– II уровень: квоты внутри контейнера
• Приоритет дискового ввода-вывода
Повестка дня (aka Agenda)• Зачем и какие ресурсы контролировать?
• Немного про контейнеры
• Существующие механизмы, их недостатки
• OpenVZ user beancounters, эксплойты
• CGroups и memory controller
• TODO
Control Groups aka CGroups• Универсальный механизм для группировки
процессов в иехархические группы
• Различные контроллеры ресурсов
• Можно иметь разные группы для разных контроллеров
• Управляется через файловую систему
Control Groups: управлениеmkdir /dev/cgroupmount -t cgroup none /dev/cgroupmkdir /dev/cgroup/0cd /dev/cgroup/0echo $$ > taskscat /proc/self/cgroup/etc/init.d/httpd start
Control Groups: история• Вначале были cpusets от Bull/SGI
– Для привязки групп задач к NUMA узлам
• Paul Menage из Google разделил cpusetsна инфраструктуру (группировки) и контроллеры– сpusets теперь просто один из контроллеров
– можно добавлять другие
Memory Controller• Контролирует память пользователя и page
cache
• Reclamation (утилизация? Переработка?)– как в try_to_free_pages()
• Out-of-memory killer
MemCtrl: интерфейс# echo 4M > memory.limit_in_bytes# cat memory.limit_in_bytes4194304# cat memory.usage_in_bytes172032# cat memory.max_usage_in_bytes294912# cat memory.failcnt0# cat memory.stat....
Память пользователя
Возвраща-емые VMA(mmap'edfiles)
Неисполь-зуемые страницы
Исполь-зуемые страницы
Невозвра-щаемые VMA(private and anon)
Длина маппинговRSS
Адресное пространство процесса
Повестка дня (aka Agenda)• Зачем и какие ресурсы контролировать?
• Немного про контейнеры
• Существующие механизмы, их недостатки
• OpenVZ user beancounters, эксплойты
• CGroups и memory controller
• TODO
Светлое будущее (TODO)• Kernel memory controller (уже в -mm)
• Учёт длины маппингов
• «Честный» учёт разделяемых страниц
• Чекпоинтинг
• I/O controller
• Всё, что есть в OpenVZ, портировать в Linux
Вопросы?
http://wiki.openvz.org/UBC