колышкин Rootconf 2009 Openvz

1,172 views

Published on

Published in: Technology
0 Comments
0 Likes
Statistics
Notes
  • Be the first to comment

  • Be the first to like this

No Downloads
Views
Total views
1,172
On SlideShare
0
From Embeds
0
Number of Embeds
102
Actions
Shares
0
Downloads
28
Comments
0
Likes
0
Embeds 0
No embeds

No notes for slide

колышкин Rootconf 2009 Openvz

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

×