Download - Управление ресурсами в Linux и OpenVZ
![Page 2: Управление ресурсами в Linux и OpenVZ](https://reader034.vdocuments.site/reader034/viewer/2022052223/55cae586bb61eb39788b479f/html5/thumbnails/2.jpg)
Повестка дня (aka Agenda)• Зачем и какие ресурсы контролировать?
• Немного про контейнеры
• Существующие механизмы, их недостатки
• OpenVZ user beancounters, эксплойты
• CGroups и memory controller
• TODO
![Page 3: Управление ресурсами в Linux и OpenVZ](https://reader034.vdocuments.site/reader034/viewer/2022052223/55cae586bb61eb39788b479f/html5/thumbnails/3.jpg)
Повестка дня (aka Agenda)• Зачем и какие ресурсы контролировать?
• Немного про контейнеры
• Существующие механизмы, их недостатки
• OpenVZ user beancounters, эксплойты
• CGroups и memory controller
• TODO
![Page 4: Управление ресурсами в Linux и OpenVZ](https://reader034.vdocuments.site/reader034/viewer/2022052223/55cae586bb61eb39788b479f/html5/thumbnails/4.jpg)
Ресурсы: зачем контролировать?• Ресурсы не бесконечны
• Сервер один, задач и пользователей много
• Нужна статистика по использованию
• Нужна защита от DoS атак
• Нужно обеспечить качество сервиса– не только лимиты, но и гарантии
![Page 5: Управление ресурсами в Linux и OpenVZ](https://reader034.vdocuments.site/reader034/viewer/2022052223/55cae586bb61eb39788b479f/html5/thumbnails/5.jpg)
Ресурсы: что контролировать?• Процессор
• Оперативная память и подкачка (swap)
• Дисковое пространство
• Дисковый ввод-вывод (I/O bandwidth)
• Сеть (сокеты, буфера, bandwidth и т.п.)
• Прочее
![Page 6: Управление ресурсами в Linux и OpenVZ](https://reader034.vdocuments.site/reader034/viewer/2022052223/55cae586bb61eb39788b479f/html5/thumbnails/6.jpg)
ПроцессорПроцессорное время раздаётся процессам
маленькими временными отрезками
• Приоритеты (веса)
• Ограничения сверху (лимиты)
• Привязка к конкретным процессорам(для многопроцессорных систем)
![Page 7: Управление ресурсами в Linux и OpenVZ](https://reader034.vdocuments.site/reader034/viewer/2022052223/55cae586bb61eb39788b479f/html5/thumbnails/7.jpg)
Оперативная память• Память уровня пользователя
– Виртуальная (VM) и физическая (RSS)
– page cache
• Память ядра– Различные объекты / механизмы выделения
– Особый случай: сетевые буфера
• Пространство подкачки (swap)
![Page 8: Управление ресурсами в Linux и OpenVZ](https://reader034.vdocuments.site/reader034/viewer/2022052223/55cae586bb61eb39788b479f/html5/thumbnails/8.jpg)
Диск• Место
• Пропускная способность ввода-вывода– Чтение и запись
– Отображения памяти (mmap)
– Подкачка (swapin/swapout)
• Статистика ввода-вывода
![Page 9: Управление ресурсами в Linux и OpenVZ](https://reader034.vdocuments.site/reader034/viewer/2022052223/55cae586bb61eb39788b479f/html5/thumbnails/9.jpg)
Сеть• Тут всё уже решено, говорить не о чем
– ...более или менее
• TC: traffic control– Шейпинг, шедалинг, политики, ...
• iptables
![Page 10: Управление ресурсами в Linux и OpenVZ](https://reader034.vdocuments.site/reader034/viewer/2022052223/55cae586bb61eb39788b479f/html5/thumbnails/10.jpg)
Повестка дня (aka Agenda)• Зачем и какие ресурсы контролировать?
• Немного про контейнеры
• Существующие механизмы, их недостатки
• OpenVZ user beancounters, эксплойты
• CGroups и memory controller
• TODO
![Page 11: Управление ресурсами в Linux и OpenVZ](https://reader034.vdocuments.site/reader034/viewer/2022052223/55cae586bb61eb39788b479f/html5/thumbnails/11.jpg)
Контейнеры — это ...• такая легковесная виртуализация
• много контейнеров поверх единого ядра
• совсем как VM, только– одна ОС (хотя м.б. разные дистрибутивы)
– «родная» производительность
– высокая плотность размещения
– динамическое управление ресурсами
![Page 12: Управление ресурсами в Linux и OpenVZ](https://reader034.vdocuments.site/reader034/viewer/2022052223/55cae586bb61eb39788b479f/html5/thumbnails/12.jpg)
Примеры контейнеров• OpenVZ
• Parallels Virtuozzo Containers
• FreeBSD jails
• Linux-VServer
• Solaris Containers/Zones
• IBM AIX6 WPARs (Workload Partitions)
![Page 13: Управление ресурсами в Linux и OpenVZ](https://reader034.vdocuments.site/reader034/viewer/2022052223/55cae586bb61eb39788b479f/html5/thumbnails/13.jpg)
HP labs: OpenVZ vs Xen• Накладные расходы Xen больше
• Накладными расходами OpenVZзачастую можно пренебречь
• Под Xen работало 4 копии интернет-магазина и сервер уже был перегружен,под OpenVZ заработало 6 без перегрузки
![Page 14: Управление ресурсами в Linux и OpenVZ](https://reader034.vdocuments.site/reader034/viewer/2022052223/55cae586bb61eb39788b479f/html5/thumbnails/14.jpg)
Контейнеры: шаг в эволюции ОС• Многозадачные ОС
• Многопользовательские ОС
• Многоконтейнерные ОС
![Page 15: Управление ресурсами в Linux и OpenVZ](https://reader034.vdocuments.site/reader034/viewer/2022052223/55cae586bb61eb39788b479f/html5/thumbnails/15.jpg)
Контейнерыи управление ресурсами
• Обеспечить мирное сосуществование множества контейнеров
• С точки зрения управления ресурсами, контейнеры — это просто группы процессов!
![Page 16: Управление ресурсами в Linux и OpenVZ](https://reader034.vdocuments.site/reader034/viewer/2022052223/55cae586bb61eb39788b479f/html5/thumbnails/16.jpg)
Повестка дня (aka Agenda)• Зачем и какие ресурсы контролировать?
• Немного про контейнеры
• Существующие механизмы, их недостатки
• OpenVZ user beancounters, эксплойты
• CGroups и memory controller
• TODO
![Page 17: Управление ресурсами в Linux и OpenVZ](https://reader034.vdocuments.site/reader034/viewer/2022052223/55cae586bb61eb39788b479f/html5/thumbnails/17.jpg)
Процессор• Каждый процесс имеет nice value,
можно менять «по дороге» (nice/renice)
• Есть приоритет реального времени и отдельная очередь процессов для него
• Жёсткий лимит на процессорное время процесса (ulimit -c)
![Page 18: Управление ресурсами в Linux и OpenVZ](https://reader034.vdocuments.site/reader034/viewer/2022052223/55cae586bb61eb39788b479f/html5/thumbnails/18.jpg)
Место на диске• Стандартные UNIX квоты очень хороши
– квоты на точку монтирования
– для пользователей и для групп
– мягкие и жёсткие лимиты, грейс-период
– можно узнать текущие значения
– можно менять лимиты «по дороге»
– приложения ожидают отказов (или должны)
![Page 19: Управление ресурсами в Linux и OpenVZ](https://reader034.vdocuments.site/reader034/viewer/2022052223/55cae586bb61eb39788b479f/html5/thumbnails/19.jpg)
Всё остальное: 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
• Есть «мягкие» и «жёсткие» лимиты
![Page 20: Управление ресурсами в Linux и OpenVZ](https://reader034.vdocuments.site/reader034/viewer/2022052223/55cae586bb61eb39788b479f/html5/thumbnails/20.jpg)
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
![Page 21: Управление ресурсами в Linux и OpenVZ](https://reader034.vdocuments.site/reader034/viewer/2022052223/55cae586bb61eb39788b479f/html5/thumbnails/21.jpg)
У ulimit много проблем• Далеко не все ресурсы учитываются
• Нельзя посмотреть текущее использование
• Лимиты выставляются в текущем контексте
• Все лимиты выставляются на процесс– кроме NPROC, который на пользователя
• Лимиты на память в основном игнорируются
![Page 22: Управление ресурсами в Linux и OpenVZ](https://reader034.vdocuments.site/reader034/viewer/2022052223/55cae586bb61eb39788b479f/html5/thumbnails/22.jpg)
Повестка дня (aka Agenda)• Зачем и какие ресурсы контролировать?
• Немного про контейнеры
• Существующие механизмы, их недостатки
• OpenVZ user beancounters, эксплойты
• CGroups и memory controller
• TODO
![Page 23: Управление ресурсами в Linux и OpenVZ](https://reader034.vdocuments.site/reader034/viewer/2022052223/55cae586bb61eb39788b479f/html5/thumbnails/23.jpg)
OpenVZ beancounters• Контролирует группы процессов
• 20 различных параметров
• Все можно менять во время выполнения
• Для каждого параметра можно видеть:– Текущее значение, пиковое значение
– Счётчик отказов в выделении ресурса
![Page 24: Управление ресурсами в Linux и OpenVZ](https://reader034.vdocuments.site/reader034/viewer/2022052223/55cae586bb61eb39788b479f/html5/thumbnails/24.jpg)
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
![Page 25: Управление ресурсами в Linux и OpenVZ](https://reader034.vdocuments.site/reader034/viewer/2022052223/55cae586bb61eb39788b479f/html5/thumbnails/25.jpg)
Exploit 1: dcache eaterwhile(1) {
mkdir(“somedir”, S_IRWXU);
cd(“somedir”);
}
![Page 26: Управление ресурсами в Linux и OpenVZ](https://reader034.vdocuments.site/reader034/viewer/2022052223/55cae586bb61eb39788b479f/html5/thumbnails/26.jpg)
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();
![Page 27: Управление ресурсами в Linux и OpenVZ](https://reader034.vdocuments.site/reader034/viewer/2022052223/55cae586bb61eb39788b479f/html5/thumbnails/27.jpg)
Другие механизмы OpenVZ• “Честный” планировщик процессов
– веса (приоритеты) и жёсткие лимиты
• Двухуровневая дисковая квота
– I уровень: квоты на контейнер
– II уровень: квоты внутри контейнера
• Приоритет дискового ввода-вывода
![Page 28: Управление ресурсами в Linux и OpenVZ](https://reader034.vdocuments.site/reader034/viewer/2022052223/55cae586bb61eb39788b479f/html5/thumbnails/28.jpg)
Повестка дня (aka Agenda)• Зачем и какие ресурсы контролировать?
• Немного про контейнеры
• Существующие механизмы, их недостатки
• OpenVZ user beancounters, эксплойты
• CGroups и memory controller
• TODO
![Page 29: Управление ресурсами в Linux и OpenVZ](https://reader034.vdocuments.site/reader034/viewer/2022052223/55cae586bb61eb39788b479f/html5/thumbnails/29.jpg)
Control Groups aka CGroups• Универсальный механизм для группировки
процессов в иехархические группы
• Различные контроллеры ресурсов
• Можно иметь разные группы для разных контроллеров
• Управляется через файловую систему
![Page 30: Управление ресурсами в Linux и OpenVZ](https://reader034.vdocuments.site/reader034/viewer/2022052223/55cae586bb61eb39788b479f/html5/thumbnails/30.jpg)
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
![Page 31: Управление ресурсами в Linux и OpenVZ](https://reader034.vdocuments.site/reader034/viewer/2022052223/55cae586bb61eb39788b479f/html5/thumbnails/31.jpg)
Control Groups: история• Вначале были cpusets от Bull/SGI
– Для привязки групп задач к NUMA узлам
• Paul Menage из Google разделил cpusetsна инфраструктуру (группировки) и контроллеры– сpusets теперь просто один из контроллеров
– можно добавлять другие
![Page 32: Управление ресурсами в Linux и OpenVZ](https://reader034.vdocuments.site/reader034/viewer/2022052223/55cae586bb61eb39788b479f/html5/thumbnails/32.jpg)
Memory Controller• Контролирует память пользователя и page
cache
• Reclamation (утилизация? Переработка?)– как в try_to_free_pages()
• Out-of-memory killer
![Page 33: Управление ресурсами в Linux и OpenVZ](https://reader034.vdocuments.site/reader034/viewer/2022052223/55cae586bb61eb39788b479f/html5/thumbnails/33.jpg)
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....
![Page 34: Управление ресурсами в Linux и OpenVZ](https://reader034.vdocuments.site/reader034/viewer/2022052223/55cae586bb61eb39788b479f/html5/thumbnails/34.jpg)
Память пользователя
Возвраща-емые VMA(mmap'edfiles)
Неисполь-зуемые страницы
Исполь-зуемые страницы
Невозвра-щаемые VMA(private and anon)
Длина маппинговRSS
Адресное пространство процесса
![Page 35: Управление ресурсами в Linux и OpenVZ](https://reader034.vdocuments.site/reader034/viewer/2022052223/55cae586bb61eb39788b479f/html5/thumbnails/35.jpg)
Повестка дня (aka Agenda)• Зачем и какие ресурсы контролировать?
• Немного про контейнеры
• Существующие механизмы, их недостатки
• OpenVZ user beancounters, эксплойты
• CGroups и memory controller
• TODO
![Page 36: Управление ресурсами в Linux и OpenVZ](https://reader034.vdocuments.site/reader034/viewer/2022052223/55cae586bb61eb39788b479f/html5/thumbnails/36.jpg)
Светлое будущее (TODO)• Kernel memory controller (уже в -mm)
• Учёт длины маппингов
• «Честный» учёт разделяемых страниц
• Чекпоинтинг
• I/O controller
• Всё, что есть в OpenVZ, портировать в Linux
![Page 37: Управление ресурсами в Linux и OpenVZ](https://reader034.vdocuments.site/reader034/viewer/2022052223/55cae586bb61eb39788b479f/html5/thumbnails/37.jpg)
Вопросы?
http://wiki.openvz.org/UBC