Тюним память и сетевой стек в Linux: история перевода...

Preview:

Citation preview

Тюним память и сетевой стек в 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 — кэша на SSD2 х 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

Дмитрий Самсоновdmitry.samsonov@odnoklassniki.ru

Recommended