Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

Погружение в виртуальную память и большие страницы / Константин Новаковский (Selectel)

414 views

Published on

РИТ++ 2017, HighLoad Junior
Зал Сингапур, 5 июня, 12:00

Тезисы:
http://junior.highload.ru/2017/abstracts/2688.html

Современные приложения часто используют большое количество памяти, ещё чаще разработчики не задумываются, как именно приложение работает с памятью, и откуда она берётся. Просим ядро дать кусок памяти и начинаем с ним что-то делать... Но что за память нам выделяет ядро операционной системы? Память на самом деле виртуальная и делится на единицы, называемые страницами. Страницы бывают маленькими, бывают большими и очень большими.
...

Published in: Engineering
  • Be the first to comment

Погружение в виртуальную память и большие страницы / Константин Новаковский (Selectel)

  1. 1. Виртуальная память и большие страницы Константин Новаковский Selectel
  2. 2. Почему мы думаем о памяти 6 датацентров (6,5к м2) Аренда серверов / стоек / серверных помещений / волокон Виртуальное приватное облако Облачное хранилище / CDN Мониторинг Vscale Anycast DNS
  3. 3. Чуть-чуть истории
  4. 4. Intel® 80386 (1985 год) Защищенный режим Виртуальная память MMU https://en.wikipedia.org/wiki/Intel_80386
  5. 5. Virtual to Physical memory translation
  6. 6. Почти наши дни Размер Page Tables сервера с 12Гб ОЗУ и ядром 2.6.32: cat /proc/meminfo | grep PageTables 119792 kB = 116 mB
  7. 7. Наши дни Размер Page Tables сервера с 396Гб ОЗУ и ядром 4.4: cat /proc/meminfo | grep PageTables: 226788 kB = 221 mB
  8. 8. Enlarge your Pages! TLB разделён на несколько частей в зависимости от архитектуры: • 4KB страницы • 2MB страницы • 1GB страницы • нет предела совершенству TLB miss обрабатывается быстрее (-1 уровень)
  9. 9. Посмотри на мои TLB cpuid | grep -i 'tlb.*entries' instruction TLB: 4K, 8-way, 64 entries instruction TLB: 2M/4M pages, fully, 8 entries data TLB: 4K pages, 4-way, 64 entries data TLB: 1G pages, 4-way, 4 entries L2 TLB: 4K/2M pages, 8-way, 1024 entries
  10. 10. Как использовать? hugetlbpage - “Pure” Huge Pages khugepaged - Transparent Huge Pages
  11. 11. hugetlbpage - “Pure” Huge Pages sysctl vm.nr_hugepages=170000 или echo 170000 > /proc/sys/vm/nr_hugepages или kernel boot param: /vmlinuz hugepages=170000 ! 170000 * 2048 kB = 340000 mB = 332 gB
  12. 12. perf stat -e iTLB-load-misses,iTLB-loads,dTLB-load-misses,dTLB-loads -a -p <pid> -- sleep 10 perf
  13. 13. Without Huge Pages 10,969 iTLB-load-misses 5,945,847 iTLB-loads 26,007 dTLB-load-misses 3,815,595 dTLB-loads
  14. 14. Huge Pages 6,614 iTLB-load-misses 4,301,442 iTLB-loads 13,199 dTLB-load-misses 1,792,403 dTLB-loads
  15. 15. libhugetlbfs Позволяет использовать большие страницы через LD_PRELOAD Устарел
  16. 16. Transparent Huge Pages Может включаться автоматически Умеют свопится Действительно прозрачно Накладные ресурсы по обслуживанию - khugepaged
  17. 17. ДА - НЕ ЗНАЮ - НЕТ /sys/kernel/mm/transparent_hugepage/enabled: [always] [madvise] never Отключить и не использовать Использовать при явном запросе Always :)
  18. 18. Non posix madvise call int madvise(void *addr, size_t length, int advice); advices: MADV_HUGEPAGE MADV_NOHUGEPAGE
  19. 19. Transparent Huge Pages echo madvise > /sys/kernel/mm/transparent_hugepage/enabled Минусы: отваливаются THP для большинства приложений Плюсы: утечка памяти перестаёт нас так беспокоить
  20. 20. Ручки khugepaged alloc_sleep_millisecs 60000 pages_collapsed full_scans max_ptes_none max_ptes_swap
  21. 21. grep ^thp /proc/vmstat (4.4) thp_fault_alloc 43670 thp_fault_fallback 11685 thp_collapse_alloc 7899 thp_collapse_alloc_failed 2272 thp_split 2935 thp_zero_page_alloc 3 thp_zero_page_alloc_failed 0
  22. 22. И всё сразу быстро и шелковисто? не все альтернативные аллокаторы научились THP https://github.com/jemalloc/jemalloc/issues/243
  23. 23. Приложения Те кто не научились использовать “нативные” HP: отключить THP если есть “просадка” производительности Те кто научились (Oracle, Postgresql, Mysql, etc): отключить THP echo N > /sys/kernel/mm/nr_hugepages
  24. 24. TOP по большим страницам не существует TOP-like инструментов для отслеживания HP
  25. 25. grep … /proc/<pid>/smaps
  26. 26. 7f01d4c8d000-7f01dc000000 rw-p 00000000 00:00 0 Size: 118220 kB Rss: 116752 kB Pss: 116752 kB ... Private_Dirty: 116752 kB Referenced: 116752 kB Anonymous: 116752 kB AnonHugePages: 116736 kB Private_Hugetlb: 0 kB KernelPageSize: 4 kB MMUPageSize: 4 kB VmFlags: rd wr mr mw me ac sd Transparent Huge Pages
  27. 27. 7f01e3e00000-7f0203e00000 rw-p 00000000 00:25 1760066 Size: 524288 kB Rss: 0 kB Pss: 0 kB ... Private_Dirty: 0 kB Referenced: 0 kB Anonymous: 0 kB AnonHugePages: 0 kB Private_Hugetlb: 524288 kB KernelPageSize: 2048 kB MMUPageSize: 2048 kB VmFlags: rd wr mr mw me dc de ht sd Huge Pages
  28. 28. HugeTLB Не уходит в swap Уменьшает расходы ядра на обслуживание PageTable Приложение должно заботиться об этом Память зарезервирована и недоступна большинству приложений
  29. 29. THP Может уходить в swap Увеличивает расходы ядра на обслуживание Не все приложения готовы к такому повороту Контейнеры?
  30. 30. Что почитать? https://linux-mm.org/ https://www.kernel.org/doc/Documentation/vm/ https://www.kernel.org/doc/Documentation/vm/hugetlbpage.txt https://www.kernel.org/doc/Documentation/vm/transhuge.txt Intel® 64 and IA-32 Architectures Software Developer’s Manual https://www.kernel.org/doc/gorman/html/understand/understand006.html
  31. 31. Вопросы?

×