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.
Тюним память
и сетевой стек в Linux:
история перевода
высоконагруженных
серверов на свежий
дистрибутив
Дмитрий Самсонов
OpenSuSE 10.2
Release:
07.12.2006
End of life:
30.11.2008
CentOS 7
Release:
07.07.2014
End of life:
30.06.2024
Видео раздача
4 x 10 Гбит к пользователям
2 x 10 Гбит к хранилищу
256 Гбайт RAM — кэш в памяти
22 х 480 Гбайт SSD — кэша н...
Содержание
● Память
○ OOM killer
○ Swap
● Сеть
○ Broken pipe
○ Распределение сетевой нагрузки по
ядрам
○ SoftIRQ
Память
OOM killer
NODE 0
(CPU N0)
1. Вся физическая память
NODE 1
(CPU N1)
ZONE_DMA (0-
16MB)
ZONE_DMA32 (0-
4GB)
ZONE_NORMAL
(4+GB)
2. NODE...
Что происходит?
OOM killer, скачки system CPU!
Фрагментация памяти
Память после загрузки сервера
Через некоторое время
Ещё через какое-то время
Почему это
происходит?
Мало свободной памяти
Memory pressure
Что делать с
фрагментацией?
Увеличивать vm.min_free_kbytes!
High/low/min watermark.
/proc/zoneinfo
Node 0, zone Normal
pag...
Информация о текущей
фрагментации
/proc/buddyinfo
Node 0, zone DMA 0 0 1 0 ...
Node 0, zone DMA32 1147 980 813 450 ...
Nod...
Почему это плохо
повышать
min_free_kbytes?
Потому что часть памяти размером
с min_free_kbytes не может быть
использована
Память
Swap
Swap при 40GB свободной памяти
и vm.swappiness=0!
Что происходит?
NODE 0
(CPU N0)
1. Вся физическая память
NODE 1
(CPU N1)
ZONE_DMA (0-
16MB)
ZONE_DMA32 (0-
4GB)
ZONE_NORMAL
(4+GB)
2. NODE...
Неравномерное
использование
памяти между нодами
NODE 0
(CPU N0)
NODE 1
(CPU N1)
Free
Used
Free
Used
numastat -m <PID>
numastat -m
Node 0 Node 1 Total
--------------- --------------- ---------------
MemFree 51707.00 23323.7...
Что делать с NUMA?
Выключить NUMA
Целиком для ядра:
numa=off
Для процесса:
numactl —
interleave=all <cmd>
Оптимизировать
п...
Сеть
Что уже должно быть
сделано
Ring buffer: ethtool -g/-G
Transmit queue length: ip link/ip link set <DEV>
txqueuelen <PACKET...
Сеть
Broken pipe
Фон ошибок broken pipe.
В tcpdump - half-duplex close sequence.
Что происходит?
OOO
Out-of-order пакет, т.е. пакет неправильной
очерёдности (с неправильным номером SEQ).
Что делать с OOO?
Отсылать пакеты одного соединения по одному
маршруту:
Одно процессорное ядро
Одна сетевая карта
Одна оче...
Было/стало
Количество broken pipe/s на сервер
Чем плохо строгое
определение
“маршрутов”?
Нагрузка на ядра процессора
может быть не равномерной
Сеть
Распределение сетевой нагрузки
по ядрам
CPU0 загружен на 100%
Почему это
происходит?
1. Одна очередь - включить больше:
ethtool -l/-L
2. Не распределены прерывания:
○ распределить дина...
RSS
CPU
RSS
Network
eth0
Q0 Q1 Q2 Q3 Q4 Q5 Q6 Q7
0 1 2 3 4 5 6 7 8 9 10 11 12
CPU0 - CPU7 загружен
на 100%
Половина ядер
загружены на 100%
Нам нужно больше
очередей!
16 ядер загружены на
100%
scaling.txt
RPS = Software RSS
XPS = RPS для исходящих
пакетов
RFS? Учитывает номер ядра
потребителя.
https://www.kernel.o...
Почему RPS/RFS/XPS
это плохо?
1. Нагрузка на ядра процессора
может быть не равномерной.
2. Оверхед по CPU
Accelerated RFS
Есть у Mellanox, но после
включения скорость не
поднималась выше 5Gbit/s на 10G
интерфейсах.
Intel
Signature Filter (он же ATR -
Application Targeted Receive) -
аналог RPS+RFS.
Сеть
SoftIRQ
Откуда берутся
SoftIRQ
Network
eth0
Q0 Q...
Откуда берутся
SoftIRQ
Network
eth0
Q0 Q...
CPU
C0 C...
HW
IRQ
42
RSS
Откуда берутся
SoftIRQ
Network
eth0
Q0 Q...
CPU
C0 C...
HW
IRQ
42
SoftIRQ
NET_RX
CPU0
RSS
Обработка HW
interrupt завершена
Откуда берутся
SoftIRQ
Network
eth0
Q0 Q...
CPU
C0 C...
HW
IRQ
42
SoftIRQ
NET_RX
CPU0
RSS
NAPI
poll
Обработка HW
interrupt...
Что делать с
высоким SoftIRQ?
Модерация прерываний
ethtool -c/-C
Чем плоха модерация
прерываний?
Надо выбирать между пропускной
способностью и latency
Что происходит?
Нелинейный рост
Минздрав
предупреждает
ИЗМЕНЕНИЯ
ТЕСТЫ
ОТКАТ
ОСТАВИТЬ
Спасибо за внимание!
● Блог Одноклассников на Хабре
http://habrahabr.ru/company/odnoklassniki/
● Тестирование аварий / Анд...
Тюним память и сетевой стек в Linux: история перевода высоконагруженных серверов на свежий дистрибутив/Д.Самсонов (Однокла...
Upcoming SlideShare
Loading in …5
×

Тюним память и сетевой стек в Linux: история перевода высоконагруженных серверов на свежий дистрибутив/Д.Самсонов (Однокласники)

1,474 views

Published on

В процессе обновления высоконагруженных серверов раздачи видео (40Gbit/s с каждого сервера) со старого OpenSuSE 10.2 на новый CentOS 7 (время между релизами — 7 лет) мы столкнулись с рядом проблем — необъяснимый свопинг и запуски OOM killer, неравномерное распределение нагрузки по ядрам, обрывы соединений, скачки системной нагрузки на CPU.

В докладе будет рассказано о том, как мы боролись с этими проблемами и какие технологии для этого использовали.

Published in: Engineering
  • Be the first to comment

  • Be the first to like this

Тюним память и сетевой стек в Linux: история перевода высоконагруженных серверов на свежий дистрибутив/Д.Самсонов (Однокласники)

  1. 1. Тюним память и сетевой стек в Linux: история перевода высоконагруженных серверов на свежий дистрибутив Дмитрий Самсонов
  2. 2. OpenSuSE 10.2 Release: 07.12.2006 End of life: 30.11.2008 CentOS 7 Release: 07.07.2014 End of life: 30.06.2024
  3. 3. Видео раздача 4 x 10 Гбит к пользователям 2 x 10 Гбит к хранилищу 256 Гбайт RAM — кэш в памяти 22 х 480 Гбайт SSD — кэша на SSD 2 х E5-2690 v2
  4. 4. Содержание ● Память ○ OOM killer ○ Swap ● Сеть ○ Broken pipe ○ Распределение сетевой нагрузки по ядрам ○ SoftIRQ
  5. 5. Память OOM killer
  6. 6. NODE 0 (CPU N0) 1. Вся физическая память NODE 1 (CPU N1) ZONE_DMA (0- 16MB) ZONE_DMA32 (0- 4GB) ZONE_NORMAL (4+GB) 2. NODE 0 3. Каждая зона 20*PAGE_SIZE 21*PAGE_SIZE 22*PAGE_SIZE 23*PAGE_SIZE 24*PAGE_SIZE 25*PAGE_SIZE 26*PAGE_SIZE 27*PAGE_SIZE ... 28*PAGE_SIZE ... 29*PAGE_SIZE ... 210*PAGE_SIZE ...
  7. 7. Что происходит? OOM killer, скачки system CPU!
  8. 8. Фрагментация памяти Память после загрузки сервера Через некоторое время Ещё через какое-то время
  9. 9. Почему это происходит? Мало свободной памяти Memory pressure
  10. 10. Что делать с фрагментацией? Увеличивать vm.min_free_kbytes! High/low/min watermark. /proc/zoneinfo Node 0, zone Normal pages free 2020543 min 1297238 low 1621547 high 1945857
  11. 11. Информация о текущей фрагментации /proc/buddyinfo Node 0, zone DMA 0 0 1 0 ... Node 0, zone DMA32 1147 980 813 450 ... Node 0, zone Normal 55014 15311 1173 120 ... Node 1, zone Normal 70581 15309 2604 200 ... ... 2 1 1 0 1 1 3 ... 386 115 32 14 2 3 5 ... 5 0 0 0 0 0 0 ... 32 0 0 0 0 0 0
  12. 12. Почему это плохо повышать min_free_kbytes? Потому что часть памяти размером с min_free_kbytes не может быть использована
  13. 13. Память Swap
  14. 14. Swap при 40GB свободной памяти и vm.swappiness=0! Что происходит?
  15. 15. NODE 0 (CPU N0) 1. Вся физическая память NODE 1 (CPU N1) ZONE_DMA (0- 16MB) ZONE_DMA32 (0- 4GB) ZONE_NORMAL (4+GB) 2. NODE 0 3. Каждая зона 20*PAGE_SIZE 21*PAGE_SIZE 22*PAGE_SIZE 23*PAGE_SIZE 24*PAGE_SIZE 25*PAGE_SIZE 26*PAGE_SIZE 27*PAGE_SIZE ... 28*PAGE_SIZE ... 29*PAGE_SIZE ... 210*PAGE_SIZE ...
  16. 16. Неравномерное использование памяти между нодами NODE 0 (CPU N0) NODE 1 (CPU N1) Free Used Free Used
  17. 17. numastat -m <PID> numastat -m Node 0 Node 1 Total --------------- --------------- --------------- MemFree 51707.00 23323.77 75030.77 ... Текущее распределение по нодам
  18. 18. Что делать с NUMA? Выключить NUMA Целиком для ядра: numa=off Для процесса: numactl — interleave=all <cmd> Оптимизировать приложение Многопоточность во всём Node affinity
  19. 19. Сеть
  20. 20. Что уже должно быть сделано Ring buffer: ethtool -g/-G Transmit queue length: ip link/ip link set <DEV> txqueuelen <PACKETS> Receive queue length: net.core.netdev_max_backlog Socket buffer: net.core.<rmem_default|rmem_max> net.core.<wmem_default|wmem_max> net.ipv4.<tcp_rmem|udp_rmem> net.ipv4.<tcp_wmem|udp_wmem> net.ipv4.udp_mem Offload: ethtool -k/-K
  21. 21. Сеть Broken pipe
  22. 22. Фон ошибок broken pipe. В tcpdump - half-duplex close sequence. Что происходит?
  23. 23. OOO Out-of-order пакет, т.е. пакет неправильной очерёдности (с неправильным номером SEQ).
  24. 24. Что делать с OOO? Отсылать пакеты одного соединения по одному маршруту: Одно процессорное ядро Одна сетевая карта Одна очередь Для этого: Привязывать триды/процессы к ядрам Привязывать очереди сетевой карты к ядрам Использовать RFS
  25. 25. Было/стало Количество broken pipe/s на сервер
  26. 26. Чем плохо строгое определение “маршрутов”? Нагрузка на ядра процессора может быть не равномерной
  27. 27. Сеть Распределение сетевой нагрузки по ядрам
  28. 28. CPU0 загружен на 100%
  29. 29. Почему это происходит? 1. Одна очередь - включить больше: ethtool -l/-L 2. Не распределены прерывания: ○ распределить динамически - запустить irqbalance/irqd/birq ○ распределить статически - настроить RSS
  30. 30. RSS CPU RSS Network eth0 Q0 Q1 Q2 Q3 Q4 Q5 Q6 Q7 0 1 2 3 4 5 6 7 8 9 10 11 12
  31. 31. CPU0 - CPU7 загружен на 100%
  32. 32. Половина ядер загружены на 100%
  33. 33. Нам нужно больше очередей!
  34. 34. 16 ядер загружены на 100%
  35. 35. scaling.txt RPS = Software RSS XPS = RPS для исходящих пакетов RFS? Учитывает номер ядра потребителя. https://www.kernel.org/doc/Documen tation/networking/scaling.txt
  36. 36. Почему RPS/RFS/XPS это плохо? 1. Нагрузка на ядра процессора может быть не равномерной. 2. Оверхед по CPU
  37. 37. Accelerated RFS Есть у Mellanox, но после включения скорость не поднималась выше 5Gbit/s на 10G интерфейсах.
  38. 38. Intel Signature Filter (он же ATR - Application Targeted Receive) - аналог RPS+RFS.
  39. 39. Сеть SoftIRQ
  40. 40. Откуда берутся SoftIRQ Network eth0 Q0 Q...
  41. 41. Откуда берутся SoftIRQ Network eth0 Q0 Q... CPU C0 C... HW IRQ 42 RSS
  42. 42. Откуда берутся SoftIRQ Network eth0 Q0 Q... CPU C0 C... HW IRQ 42 SoftIRQ NET_RX CPU0 RSS Обработка HW interrupt завершена
  43. 43. Откуда берутся SoftIRQ Network eth0 Q0 Q... CPU C0 C... HW IRQ 42 SoftIRQ NET_RX CPU0 RSS NAPI poll Обработка HW interrupt завершена
  44. 44. Что делать с высоким SoftIRQ?
  45. 45. Модерация прерываний ethtool -c/-C
  46. 46. Чем плоха модерация прерываний? Надо выбирать между пропускной способностью и latency
  47. 47. Что происходит? Нелинейный рост
  48. 48. Минздрав предупреждает ИЗМЕНЕНИЯ ТЕСТЫ ОТКАТ ОСТАВИТЬ
  49. 49. Спасибо за внимание! ● Блог Одноклассников на Хабре http://habrahabr.ru/company/odnoklassniki/ ● Тестирование аварий / Андрей Губа завтра, 3 зал, 17:30 http://www.highload.ru/2015/abstracts/1913.html Дмитрий Самсонов dmitry.samsonov@odnoklassniki.ru

×