• Share
  • Email
  • Embed
  • Like
  • Save
  • Private Content
колышкин Rootconf 2009 Openvz
 

колышкин Rootconf 2009 Openvz

on

  • 1,843 views

 

Statistics

Views

Total Views
1,843
Views on SlideShare
1,742
Embed Views
101

Actions

Likes
0
Downloads
26
Comments
0

3 Embeds 101

http://www.rootconf.ru 61
http://rootconf.ru 38
http://www.slideshare.net 2

Accessibility

Categories

Upload Details

Uploaded via as Adobe PDF

Usage Rights

© All Rights Reserved

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Processing…
Post Comment
Edit your comment

    колышкин Rootconf 2009 Openvz колышкин Rootconf 2009 Openvz Presentation Transcript

    • Управление ресурсами в Linux и OpenVZ Кирилл Колышкин kir@openvz.org http://openvz.org/
    • Повестка дня (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 -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
    • У ulimit много проблем Далеко не все ресурсы учитываются • Нельзя посмотреть текущее использование • Лимиты выставляются в текущем контексте • Все лимиты выставляются на процесс • – кроме NPROC, который на пользователя • Лимиты на память в основном игнорируются
    • Повестка дня (aka Agenda) Зачем и какие ресурсы контролировать? • Немного про контейнеры • Существующие механизмы, их недостатки • OpenVZ user beancounters, эксплойты • CGroups и memory controller • TODO •
    • OpenVZ beancounters Контролирует группы процессов • 20 различных параметров • Все можно менять во время выполнения • Для каждого параметра можно видеть: • – Текущее значение, пиковое значение – Счётчик отказов в выделении ресурса
    • 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
    • Exploit 1: dcache eater while(1) { mkdir(“somedir”, S_IRWXU); cd(“somedir”); }
    • 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();
    • Другие механизмы OpenVZ • “Честный” планировщик процессов – веса (приоритеты) и жёсткие лимиты • Двухуровневая дисковая квота – I уровень: квоты на контейнер – II уровень: квоты внутри контейнера • Приоритет дискового ввода-вывода
    • Повестка дня (aka Agenda) Зачем и какие ресурсы контролировать? • Немного про контейнеры • Существующие механизмы, их недостатки • OpenVZ user beancounters, эксплойты • CGroups и memory controller • TODO •
    • Control Groups aka CGroups • Универсальный механизм для группировки процессов в иехархические группы • Различные контроллеры ресурсов • Можно иметь разные группы для разных контроллеров • Управляется через файловую систему
    • 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
    • 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_bytes 4194304 # cat memory.usage_in_bytes 172032 # cat memory.max_usage_in_bytes 294912 # cat memory.failcnt 0 # cat memory.stat ....
    • Память пользователя Длина маппингов RSS Адресное пространство процесса Возвраща- Неисполь- Исполь- Невозвра- емые VMA зуемые зуемые щаемые (mmap'ed страницы страницы VMA files) (private and anon)
    • Повестка дня (aka Agenda) Зачем и какие ресурсы контролировать? • Немного про контейнеры • Существующие механизмы, их недостатки • OpenVZ user beancounters, эксплойты • CGroups и memory controller • TODO •
    • Светлое будущее (TODO) Kernel memory controller (уже в -mm) • Учёт длины маппингов • «Честный» учёт разделяемых страниц • Чекпоинтинг • I/O controller • Всё, что есть в OpenVZ, портировать в Linux •
    • Вопросы? kir@openvz.org http://wiki.openvz.org/UBC containers@linux-foundation.org