РИТ++ 2017, HighLoad Junior
Зал Сингапур, 5 июня, 12:00
Тезисы:
http://junior.highload.ru/2017/abstracts/2688.html
Современные приложения часто используют большое количество памяти, ещё чаще разработчики не задумываются, как именно приложение работает с памятью, и откуда она берётся. Просим ядро дать кусок памяти и начинаем с ним что-то делать... Но что за память нам выделяет ядро операционной системы? Память на самом деле виртуальная и делится на единицы, называемые страницами. Страницы бывают маленькими, бывают большими и очень большими.
...
8. Почти наши дни
Размер Page Tables сервера с 12Гб ОЗУ и ядром 2.6.32:
cat /proc/meminfo | grep PageTables
119792 kB = 116 mB
9. Наши дни
Размер Page Tables сервера с 396Гб ОЗУ и ядром 4.4:
cat /proc/meminfo | grep PageTables:
226788 kB = 221 mB
10. Enlarge your Pages!
TLB разделён на несколько частей в зависимости от архитектуры:
• 4KB страницы
• 2MB страницы
• 1GB страницы
• нет предела совершенству
TLB miss обрабатывается быстрее (-1 уровень)
19. Transparent Huge Pages
Может включаться автоматически
Умеют свопится
Действительно прозрачно
Накладные ресурсы по обслуживанию - khugepaged
20. ДА - НЕ ЗНАЮ - НЕТ
/sys/kernel/mm/transparent_hugepage/enabled:
[always] [madvise] never
Отключить и не использовать
Использовать при явном запросе
Always :)
21. Non posix madvise call
int madvise(void *addr,
size_t length,
int advice);
advices:
MADV_HUGEPAGE
MADV_NOHUGEPAGE
22. Transparent Huge Pages
echo madvise > /sys/kernel/mm/transparent_hugepage/enabled
Минусы: отваливаются THP для большинства приложений
Плюсы: утечка памяти перестаёт нас так беспокоить
25. И всё сразу быстро и шелковисто?
не все альтернативные аллокаторы научились THP
https://github.com/jemalloc/jemalloc/issues/243
26. Приложения
Те кто не научились использовать “нативные” HP:
отключить THP если есть “просадка” производительности
Те кто научились (Oracle, Postgresql, Mysql, etc):
отключить THP
echo N > /sys/kernel/mm/nr_hugepages
27. TOP по большим страницам
не существует TOP-like инструментов для отслеживания HP
31. HugeTLB
Не уходит в swap
Уменьшает расходы ядра на обслуживание PageTable
Приложение должно заботиться об этом
Память зарезервирована и недоступна большинству приложений
32. THP
Может уходить в swap
Увеличивает расходы ядра на обслуживание
Не все приложения готовы к такому повороту
Контейнеры?
Сразу об экономике и 200р за виртуалку с 512мб.Захерачим на 256гб столько-то виртуалок.
Не помешало бы добавить слайд с определениями основных понятий;
Когда будешь излагать историю, скажи пару слов про HugePages - когда, в какой версии ядра они появились
https://en.wikipedia.org/wiki/Intel_80386
TODO: добавить L1, L2, L3 caches
Упомянуть про тариф в 512мб, при 396 ГБ - 4гб на pagetables
Упомянуть про тариф в 512мб, при 396 ГБ - 4гб на pagetables
system wide
THP since 2.6.38, but was slow, improved in 3.11
можно какой-нибудь пример кода, где этот системный вызов используется
Сильно сократить