37
Кирилл Колышкин [email protected] http://openvz.org/ Управление ресурсами в Linux и OpenVZ

Управление ресурсами в Linux и OpenVZ

  • Upload
    openvz

  • View
    105

  • Download
    7

Embed Size (px)

Citation preview

Page 1: Управление ресурсами в Linux и OpenVZ

Кирилл Колышкин[email protected]://openvz.org/

Управление ресурсамив Linux и OpenVZ

Page 2: Управление ресурсами в Linux и OpenVZ

Повестка дня (aka Agenda)• Зачем и какие ресурсы контролировать?

• Немного про контейнеры

• Существующие механизмы, их недостатки

• OpenVZ user beancounters, эксплойты

• CGroups и memory controller

• TODO

Page 3: Управление ресурсами в Linux и OpenVZ

Повестка дня (aka Agenda)• Зачем и какие ресурсы контролировать?

• Немного про контейнеры

• Существующие механизмы, их недостатки

• OpenVZ user beancounters, эксплойты

• CGroups и memory controller

• TODO

Page 4: Управление ресурсами в Linux и OpenVZ

Ресурсы: зачем контролировать?• Ресурсы не бесконечны

• Сервер один, задач и пользователей много

• Нужна статистика по использованию

• Нужна защита от DoS атак

• Нужно обеспечить качество сервиса– не только лимиты, но и гарантии

Page 5: Управление ресурсами в Linux и OpenVZ

Ресурсы: что контролировать?• Процессор

• Оперативная память и подкачка (swap)

• Дисковое пространство

• Дисковый ввод-вывод (I/O bandwidth)

• Сеть (сокеты, буфера, bandwidth и т.п.)

• Прочее

Page 6: Управление ресурсами в Linux и OpenVZ

ПроцессорПроцессорное время раздаётся процессам

маленькими временными отрезками

• Приоритеты (веса)

• Ограничения сверху (лимиты)

• Привязка к конкретным процессорам(для многопроцессорных систем)

Page 7: Управление ресурсами в Linux и OpenVZ

Оперативная память• Память уровня пользователя

– Виртуальная (VM) и физическая (RSS)

– page cache

• Память ядра– Различные объекты / механизмы выделения

– Особый случай: сетевые буфера

• Пространство подкачки (swap)

Page 8: Управление ресурсами в Linux и OpenVZ

Диск• Место

• Пропускная способность ввода-вывода– Чтение и запись

– Отображения памяти (mmap)

– Подкачка (swapin/swapout)

• Статистика ввода-вывода

Page 9: Управление ресурсами в Linux и OpenVZ

Сеть• Тут всё уже решено, говорить не о чем

– ...более или менее

• TC: traffic control– Шейпинг, шедалинг, политики, ...

• iptables

Page 10: Управление ресурсами в Linux и OpenVZ

Повестка дня (aka Agenda)• Зачем и какие ресурсы контролировать?

• Немного про контейнеры

• Существующие механизмы, их недостатки

• OpenVZ user beancounters, эксплойты

• CGroups и memory controller

• TODO

Page 11: Управление ресурсами в Linux и OpenVZ

Контейнеры — это ...• такая легковесная виртуализация

• много контейнеров поверх единого ядра

• совсем как VM, только– одна ОС (хотя м.б. разные дистрибутивы)

– «родная» производительность

– высокая плотность размещения

– динамическое управление ресурсами

Page 12: Управление ресурсами в Linux и OpenVZ

Примеры контейнеров• OpenVZ

• Parallels Virtuozzo Containers

• FreeBSD jails

• Linux-VServer

• Solaris Containers/Zones

• IBM AIX6 WPARs (Workload Partitions)

Page 13: Управление ресурсами в Linux и OpenVZ

HP labs: OpenVZ vs Xen• Накладные расходы Xen больше

• Накладными расходами OpenVZзачастую можно пренебречь

• Под Xen работало 4 копии интернет-магазина и сервер уже был перегружен,под OpenVZ заработало 6 без перегрузки

Page 14: Управление ресурсами в Linux и OpenVZ

Контейнеры: шаг в эволюции ОС• Многозадачные ОС

• Многопользовательские ОС

• Многоконтейнерные ОС

Page 15: Управление ресурсами в Linux и OpenVZ

Контейнерыи управление ресурсами

• Обеспечить мирное сосуществование множества контейнеров

• С точки зрения управления ресурсами, контейнеры — это просто группы процессов!

Page 16: Управление ресурсами в Linux и OpenVZ

Повестка дня (aka Agenda)• Зачем и какие ресурсы контролировать?

• Немного про контейнеры

• Существующие механизмы, их недостатки

• OpenVZ user beancounters, эксплойты

• CGroups и memory controller

• TODO

Page 17: Управление ресурсами в Linux и OpenVZ

Процессор• Каждый процесс имеет nice value,

можно менять «по дороге» (nice/renice)

• Есть приоритет реального времени и отдельная очередь процессов для него

• Жёсткий лимит на процессорное время процесса (ulimit -c)

Page 18: Управление ресурсами в Linux и OpenVZ

Место на диске• Стандартные UNIX квоты очень хороши

– квоты на точку монтирования

– для пользователей и для групп

– мягкие и жёсткие лимиты, грейс-период

– можно узнать текущие значения

– можно менять лимиты «по дороге»

– приложения ожидают отказов (или должны)

Page 19: Управление ресурсами в Linux и OpenVZ

Всё остальное: 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

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

У ulimit много проблем• Далеко не все ресурсы учитываются

• Нельзя посмотреть текущее использование

• Лимиты выставляются в текущем контексте

• Все лимиты выставляются на процесс– кроме NPROC, который на пользователя

• Лимиты на память в основном игнорируются

Page 22: Управление ресурсами в Linux и OpenVZ

Повестка дня (aka Agenda)• Зачем и какие ресурсы контролировать?

• Немного про контейнеры

• Существующие механизмы, их недостатки

• OpenVZ user beancounters, эксплойты

• CGroups и memory controller

• TODO

Page 23: Управление ресурсами в Linux и OpenVZ

OpenVZ beancounters• Контролирует группы процессов

• 20 различных параметров

• Все можно менять во время выполнения

• Для каждого параметра можно видеть:– Текущее значение, пиковое значение

– Счётчик отказов в выделении ресурса

Page 24: Управление ресурсами в Linux и OpenVZ

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

Exploit 1: dcache eaterwhile(1) {

mkdir(“somedir”, S_IRWXU);

cd(“somedir”);

}

Page 26: Управление ресурсами в Linux и OpenVZ

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

Другие механизмы OpenVZ• “Честный” планировщик процессов

– веса (приоритеты) и жёсткие лимиты

• Двухуровневая дисковая квота

– I уровень: квоты на контейнер

– II уровень: квоты внутри контейнера

• Приоритет дискового ввода-вывода

Page 28: Управление ресурсами в Linux и OpenVZ

Повестка дня (aka Agenda)• Зачем и какие ресурсы контролировать?

• Немного про контейнеры

• Существующие механизмы, их недостатки

• OpenVZ user beancounters, эксплойты

• CGroups и memory controller

• TODO

Page 29: Управление ресурсами в Linux и OpenVZ

Control Groups aka CGroups• Универсальный механизм для группировки

процессов в иехархические группы

• Различные контроллеры ресурсов

• Можно иметь разные группы для разных контроллеров

• Управляется через файловую систему

Page 30: Управление ресурсами в Linux и OpenVZ

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

Control Groups: история• Вначале были cpusets от Bull/SGI

– Для привязки групп задач к NUMA узлам

• Paul Menage из Google разделил cpusetsна инфраструктуру (группировки) и контроллеры– сpusets теперь просто один из контроллеров

– можно добавлять другие

Page 32: Управление ресурсами в Linux и OpenVZ

Memory Controller• Контролирует память пользователя и page

cache

• Reclamation (утилизация? Переработка?)– как в try_to_free_pages()

• Out-of-memory killer

Page 33: Управление ресурсами в Linux и OpenVZ

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

Память пользователя

Возвраща-емые VMA(mmap'edfiles)

Неисполь-зуемые страницы

Исполь-зуемые страницы

Невозвра-щаемые VMA(private and anon)

Длина маппинговRSS

Адресное пространство процесса

Page 35: Управление ресурсами в Linux и OpenVZ

Повестка дня (aka Agenda)• Зачем и какие ресурсы контролировать?

• Немного про контейнеры

• Существующие механизмы, их недостатки

• OpenVZ user beancounters, эксплойты

• CGroups и memory controller

• TODO

Page 36: Управление ресурсами в Linux и OpenVZ

Светлое будущее (TODO)• Kernel memory controller (уже в -mm)

• Учёт длины маппингов

• «Честный» учёт разделяемых страниц

• Чекпоинтинг

• I/O controller

• Всё, что есть в OpenVZ, портировать в Linux