Тюним память и сетевой стек в linux: история перевода...
TRANSCRIPT
Тюним память и сетевой стек в Linux:история перевода высоконагруженных серверов на свежий дистрибутив
Дмитрий Самсонов
OpenSuSE 10.2Release: 07.12.2006End of life: 30.11.2008
CentOS 7Release: 07.07.2014End of life: 30.06.2024
Видео раздача● 4 x 10 Гбит к пользователям
● 2 x 10 Гбит к хранилищу
● 256 Гбайт RAM — кэш в памяти
● 22 х 480 Гбайт SSD — кэша на SSD
● 2 х E5-2690 v2
Содержание● Память
○ 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 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 ...
Что происходит?OOM killer, скачки system CPU!
Фрагментация памятиПамять после загрузки сервера
Через некоторое время
Ещё через какое-то время
Почему это происходит?
● Мало свободной памяти● Memory pressure
Что делать с фрагментацией?
Увеличивать vm.min_free_kbytes!
High/low/min watermark.
/proc/zoneinfoNode 0, zone Normal pages free 2020543 min 1297238 low 1621547 high 1945857
Информация о текущей фрагментации
● /proc/buddyinfoNode 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
Почему это плохо повышать
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 0
3. Каждая зона
20*PAGE_SIZE21*PAGE_SIZE22*PAGE_SIZE23*PAGE_SIZE24*PAGE_SIZE25*PAGE_SIZE26*PAGE_SIZE27*PAGE_SIZE ...28*PAGE_SIZE ...29*PAGE_SIZE ...210*PAGE_SIZE ...
Неравномерное использование
памяти между нодами
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.77 75030.77...
Текущее распределение по нодам
Что делать с NUMA? Выключить NUMA
● Целиком для ядра:
numa=off
● Для процесса:
numactl —interleave=all <cmd>
Оптимизировать приложение
● Многопоточность во всём
● Node affinity
Сеть
Что уже должно быть сделано
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
СетьBroken pipe
Фон ошибок broken pipe.В tcpdump - half-duplex close sequence.
Что происходит?
OOOOut-of-order пакет, т.е. пакет неправильной очерёдности (с неправильным номером SEQ).
Что делать с OOO?Отсылать пакеты одного соединения по одному маршруту:
● Одно процессорное ядро● Одна сетевая карта● Одна очередь
Для этого:
● Привязывать триды/процессы к ядрам● Привязывать очереди сетевой карты к ядрам● Использовать RFS
Было/сталоКоличество broken pipe/s на сервер
Чем плохо строгое определение
“маршрутов”?Нагрузка на ядра процессора может быть не равномерной
СетьРаспределение сетевой нагрузки
по ядрам
CPU0 загружен на 100%
Почему это происходит?
1. Одна очередь - включить больше: ethtool -l/-L
2. Не распределены прерывания:○ распределить динамически -
запустить irqbalance/irqd/birq○ распределить статически -
настроить RSS
RSSCPU
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.txtRPS = Software RSS
XPS = RPS для исходящих пакетов
RFS? Учитывает номер ядра потребителя.
https://www.kernel.org/doc/Documentation/networking/scaling.txt
Почему RPS/RFS/XPS это плохо?
1. Нагрузка на ядра процессора может быть не равномерной.
2. Оверхед по CPU
Accelerated RFSЕсть у Mellanox, но после включения скорость не поднималась выше 5Gbit/s на 10G интерфейсах.
IntelSignature 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
SoftIRQNET_RXCPU0
RSS
Обработка HW interrupt завершена
Откуда берутся SoftIRQ
Network
eth0
Q0 Q...
CPU
C0 C... HW IRQ 42
SoftIRQNET_RXCPU0
RSS
NAPI poll
Обработка HW interrupt завершена
Что делать с высоким SoftIRQ?
Модерация прерыванийethtool -c/-C
Чем плоха модерация прерываний?
Надо выбирать между пропускной способностью и latency
Что происходит?Нелинейный рост
Минздрав предупреждает
ИЗМЕНЕНИЯ
ТЕСТЫ
ОТКАТ
ОСТАВИТЬ
Спасибо за внимание!● Блог Одноклассников на Хабре http://habrahabr.
ru/company/odnoklassniki/● Тестирование аварий / Андрей Губа
завтра, 3 зал, 17:30http://www.highload.ru/2015/abstracts/1913.html
Дмитрий Самсонов[email protected]