Тюним память
и сетевой стек в 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 — кэша на 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/zoneinfo
Node 0, zone Normal
pages free 2020543
min 1297238
low 1621547
high 1945857
Информация о текущей
фрагментации
/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
Почему это плохо
повышать
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_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 ...
Неравномерное
использование
памяти между нодами
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.
Что происходит?
OOO
Out-of-order пакет, т.е. пакет неправильной
очерёдности (с неправильным номером SEQ).
Что делать с OOO?
Отсылать пакеты одного соединения по одному
маршруту:
Одно процессорное ядро
Одна сетевая карта
Одна очередь
Для этого:
Привязывать триды/процессы к ядрам
Привязывать очереди сетевой карты к ядрам
Использовать RFS
Было/стало
Количество broken pipe/s на сервер
Чем плохо строгое
определение
“маршрутов”?
Нагрузка на ядра процессора
может быть не равномерной
Сеть
Распределение сетевой нагрузки
по ядрам
Тюним память и сетевой стек в Linux: история перевода высоконагруженных серверов на свежий дистрибутив/Д.Самсонов (Однокласники)
CPU0 загружен на 100%
Почему это
происходит?
1. Одна очередь - включить больше:
ethtool -l/-L
2. Не распределены прерывания:
○ распределить динамически -
запустить irqbalance/irqd/birq
○ распределить статически -
настроить RSS
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.org/doc/Documen
tation/networking/scaling.txt
Почему 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/
● Тестирование аварий / Андрей Губа
завтра, 3 зал, 17:30
http://www.highload.ru/2015/abstracts/1913.html
Дмитрий Самсонов
dmitry.samsonov@odnoklassniki.ru

More Related Content

PDF
Что особенного в СУБД для данных в оперативной памяти / Константин Осипов (Ta...
PDF
Современная операционная система: что надо знать разработчику / Александр Кри...
PDF
nginx.CHANGES.2015 / Игорь Сысоев, Валентин Бартенев (Nginx)
PPTX
Flashcache в mamba.ru / Яковлев Александр Юрьевич (ЗАО Мамба)
PDF
Механика DDoS (Александр Крижановский)
PPTX
Защита данных и датацентров от катастроф. Подход Nutanix / Максим Шапошников ...
PDF
Мониторинг ожиданий в PostgreSQL / Курбангалиев Ильдус (Postgres Professional)
PPTX
Chronicle Map — key-value хранилище для трейдинга на Java / Левентов Роман (C...
Что особенного в СУБД для данных в оперативной памяти / Константин Осипов (Ta...
Современная операционная система: что надо знать разработчику / Александр Кри...
nginx.CHANGES.2015 / Игорь Сысоев, Валентин Бартенев (Nginx)
Flashcache в mamba.ru / Яковлев Александр Юрьевич (ЗАО Мамба)
Механика DDoS (Александр Крижановский)
Защита данных и датацентров от катастроф. Подход Nutanix / Максим Шапошников ...
Мониторинг ожиданий в PostgreSQL / Курбангалиев Ильдус (Postgres Professional)
Chronicle Map — key-value хранилище для трейдинга на Java / Левентов Роман (C...

What's hot (20)

PPTX
Скорость с доставкой до пользователя
PDF
Реализация восстановления после аварий / Сергей Бурладян (Avito)
PDF
DPDK в виртуальном коммутаторе Open vSwitch / Александр Джуринский (Selectel)
PDF
Внутреннее устройство PostgreSQL: временные таблицы и фрагментация памяти / Г...
PPTX
За счет чего Tarantool такой оптимальный / Денис Аникин (Mail.Ru)
PPTX
DNS в условиях хостинг-провайдера / Константин Новаковский (Selectel)
PDF
Хранение данных на виниле / Константин Осипов (tarantool.org)
PDF
Строим сервисы на базе Nginx и Tarantool / Василий Сошников, Андрей Дроздов (...
PDF
Разработка высокопроизводительных серверных приложений для Linux/Unix (Алекса...
PDF
Франкенштейнизация Voldemort или key-value данные в Одноклассниках. Роман Ан...
PDF
Тюним память и сетевой стек в Linux: история перевода высоконагруженных серве...
PPTX
Mysql vs postgresql
PDF
Highload на GPU, опыт Vinci / Олег Илларионов (ВКонтакте)
PPTX
Что нового в nginx? / Максим Дунин (Nginx, Inc.)
PDF
Очереди и блокировки. Теория и практика / Александр Календарев (ad1.ru)
PDF
Дмитрий Новиков - Tarantool в Badoo
PDF
Девять кругов ада или PostgreSQL Vacuum / Алексей Лесовский (PostgreSQL-Consu...
PDF
Максим Дунин, Nginx, Inc.
PPT
Отказоустойчивый микрокластер своими руками, Виталий Гаврилов (Ленвендо)
PPTX
Как обслужить 60 миллионов абонентов, Артем Руфанов (ПЕТЕР-СЕРВИС)
Скорость с доставкой до пользователя
Реализация восстановления после аварий / Сергей Бурладян (Avito)
DPDK в виртуальном коммутаторе Open vSwitch / Александр Джуринский (Selectel)
Внутреннее устройство PostgreSQL: временные таблицы и фрагментация памяти / Г...
За счет чего Tarantool такой оптимальный / Денис Аникин (Mail.Ru)
DNS в условиях хостинг-провайдера / Константин Новаковский (Selectel)
Хранение данных на виниле / Константин Осипов (tarantool.org)
Строим сервисы на базе Nginx и Tarantool / Василий Сошников, Андрей Дроздов (...
Разработка высокопроизводительных серверных приложений для Linux/Unix (Алекса...
Франкенштейнизация Voldemort или key-value данные в Одноклассниках. Роман Ан...
Тюним память и сетевой стек в Linux: история перевода высоконагруженных серве...
Mysql vs postgresql
Highload на GPU, опыт Vinci / Олег Илларионов (ВКонтакте)
Что нового в nginx? / Максим Дунин (Nginx, Inc.)
Очереди и блокировки. Теория и практика / Александр Календарев (ad1.ru)
Дмитрий Новиков - Tarantool в Badoo
Девять кругов ада или PostgreSQL Vacuum / Алексей Лесовский (PostgreSQL-Consu...
Максим Дунин, Nginx, Inc.
Отказоустойчивый микрокластер своими руками, Виталий Гаврилов (Ленвендо)
Как обслужить 60 миллионов абонентов, Артем Руфанов (ПЕТЕР-СЕРВИС)
Ad

Viewers also liked (11)

PPTX
BGP Graceful Shutdown - IOS XR
PPTX
Мониторинг всех слоев web проекта / Сивко Николай (hh.ru)
PDF
Полнотекстовый поиск в PostgreSQL за миллисекунды (Олег Бартунов, Александр К...
PDF
Non-Relational Postgres / Bruce Momjian (EnterpriseDB)
PPTX
Собираем GPS-треки от водителей в такси раз в секунду, экономя трафик / Андре...
PDF
Как строить архитектуру для отказоустойчивой службы такси / Минкин Андрей (Na...
PDF
Новые возможности полнотекстового поиска в PostgreSQL / Олег Бартунов (Postgr...
PDF
Хочу знать, сколько уникальных посетителей было на моём сайте за произвольный...
PDF
Путь от монолита на PHP к микросервисам на Scala / Денис Иванов (2GIS)
PPTX
MySQL 5.7 - NoSQL - JSON, Protocol X, Document Store / Петр Зайцев (Percona)
PDF
Library Operating System for Linux #netdev01
BGP Graceful Shutdown - IOS XR
Мониторинг всех слоев web проекта / Сивко Николай (hh.ru)
Полнотекстовый поиск в PostgreSQL за миллисекунды (Олег Бартунов, Александр К...
Non-Relational Postgres / Bruce Momjian (EnterpriseDB)
Собираем GPS-треки от водителей в такси раз в секунду, экономя трафик / Андре...
Как строить архитектуру для отказоустойчивой службы такси / Минкин Андрей (Na...
Новые возможности полнотекстового поиска в PostgreSQL / Олег Бартунов (Postgr...
Хочу знать, сколько уникальных посетителей было на моём сайте за произвольный...
Путь от монолита на PHP к микросервисам на Scala / Денис Иванов (2GIS)
MySQL 5.7 - NoSQL - JSON, Protocol X, Document Store / Петр Зайцев (Percona)
Library Operating System for Linux #netdev01
Ad

More from Ontico (20)

PDF
One-cloud — система управления дата-центром в Одноклассниках / Олег Анастасье...
PDF
Масштабируя DNS / Артем Гавриченков (Qrator Labs)
PPTX
Создание BigData-платформы для ФГУП Почта России / Андрей Бащенко (Luxoft)
PDF
Готовим тестовое окружение, или сколько тестовых инстансов вам нужно / Алекса...
PDF
Новые технологии репликации данных в PostgreSQL / Александр Алексеев (Postgre...
PDF
PostgreSQL Configuration for Humans / Alvaro Hernandez (OnGres)
PDF
Inexpensive Datamasking for MySQL with ProxySQL — Data Anonymization for Deve...
PDF
Опыт разработки модуля межсетевого экранирования для MySQL / Олег Брославский...
PPTX
ProxySQL Use Case Scenarios / Alkin Tezuysal (Percona)
PPTX
MySQL Replication — Advanced Features / Петр Зайцев (Percona)
PDF
Внутренний open-source. Как разрабатывать мобильное приложение большим количе...
PPTX
Подробно о том, как Causal Consistency реализовано в MongoDB / Михаил Тюленев...
PPTX
Балансировка на скорости проводов. Без ASIC, без ограничений. Решения NFWare ...
PDF
Перехват трафика — мифы и реальность / Евгений Усков (Qrator Labs)
PPT
И тогда наверняка вдруг запляшут облака! / Алексей Сушков (ПЕТЕР-СЕРВИС)
PPTX
Как мы заставили Druid работать в Одноклассниках / Юрий Невиницин (OK.RU)
PPTX
Разгоняем ASP.NET Core / Илья Вербицкий (WebStoating s.r.o.)
PPTX
100500 способов кэширования в Oracle Database или как достичь максимальной ск...
PPTX
Apache Ignite Persistence: зачем Persistence для In-Memory, и как он работает...
PDF
Механизмы мониторинга баз данных: взгляд изнутри / Дмитрий Еманов (Firebird P...
One-cloud — система управления дата-центром в Одноклассниках / Олег Анастасье...
Масштабируя DNS / Артем Гавриченков (Qrator Labs)
Создание BigData-платформы для ФГУП Почта России / Андрей Бащенко (Luxoft)
Готовим тестовое окружение, или сколько тестовых инстансов вам нужно / Алекса...
Новые технологии репликации данных в PostgreSQL / Александр Алексеев (Postgre...
PostgreSQL Configuration for Humans / Alvaro Hernandez (OnGres)
Inexpensive Datamasking for MySQL with ProxySQL — Data Anonymization for Deve...
Опыт разработки модуля межсетевого экранирования для MySQL / Олег Брославский...
ProxySQL Use Case Scenarios / Alkin Tezuysal (Percona)
MySQL Replication — Advanced Features / Петр Зайцев (Percona)
Внутренний open-source. Как разрабатывать мобильное приложение большим количе...
Подробно о том, как Causal Consistency реализовано в MongoDB / Михаил Тюленев...
Балансировка на скорости проводов. Без ASIC, без ограничений. Решения NFWare ...
Перехват трафика — мифы и реальность / Евгений Усков (Qrator Labs)
И тогда наверняка вдруг запляшут облака! / Алексей Сушков (ПЕТЕР-СЕРВИС)
Как мы заставили Druid работать в Одноклассниках / Юрий Невиницин (OK.RU)
Разгоняем ASP.NET Core / Илья Вербицкий (WebStoating s.r.o.)
100500 способов кэширования в Oracle Database или как достичь максимальной ск...
Apache Ignite Persistence: зачем Persistence для In-Memory, и как он работает...
Механизмы мониторинга баз данных: взгляд изнутри / Дмитрий Еманов (Firebird P...

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

Editor's Notes

  • #2: Привет, админы и сочувствующие! Всегда приятно оказаться среди такого количества единомышленников. Меня зовут Дмитрий Самсонов, я работаю ведущим системным администратором в социальной сети Одноклассники.
  • #3: В конце прошлого года мы начали переводить наши сервера со старого Opensuse на новый Centos, потому что обновлять пакеты своими силами становилось всё труднее, разработчики требовали новые версии приложений и библиотек, а безопасники пугали уязвимостями.
  • #4: Благодаря качественному подготовительному процессу миграция пошла гладко и центос пополз по проду, пришла очередь серверов видео раздачи, самых мощных и нагруженным в проде таких серверов у нас больше 40 после раскатки мы столкнулись с чередой проблем, так же заодно мы решили разобраться и с некоторыми старыми проблемами
  • #5: о том как мы их решали и заново открывали для себя линукс и будет мой доклад Всего будет 5 частей - 2 про память и 3 про сеть. Итак, начнём.
  • #7: Ноды Зоны Чанки память доступна приложениям не как 1 кусок, а как много кусков разного размера сначала они большие, по мере выделения приложениям они режутся на более мелкие
  • #8: 18:00 до 12:00 час пик, ночь
  • #9: Фрагмантация есть всегда, но не всегда она мешает.
  • #10: Memory pressure - интенсивное использование памят мы столкнулись с memory pressure
  • #11: увеличивая шанс, что в ней будут свободными страницы нужного размера уровень (watermark) при котором начинается reclaim и в случае неудачи compaction (дефрагментация памяти) увеличивать пока проблемы не прекратятся, у нас 1Г, а по умолчанию высчитывает ядро по объёму памяти
  • #13: ни приложение, ни ядром даже под page cache Был случай, когда спасло только min_free_kbytes =10Г
  • #15: Кроме фрагментации. Может просто тормозить, или опять же съедать system time, т.к. свободные страницы будут на другой ноде. NUMA
  • #16: если хв и ос Numa-aware, то приложения будут получать память на той ноде на которой работают, будет выше cache hit и выше скорость
  • #17: у нас на серверах есть 1 большой tmpfs, который создаётс 1 тридом, поэтому в основном использовалась память одной ноды при высоком memory pressure ядро может решить, что засвопить часть страниц лучше, чем мигрировать их между нодами
  • #18: у нас на серверах есть 1 большой tmpfs, который создаётс 1 тридом, поэтому в основном использовалась память одной ноды
  • #19: Многопоточность, что бы не было какого-то элемента приложения, который будет висеть на одной ноде и пороть работу всего приложегния.
  • #20: Про сеть с высокой пропускной способностью!
  • #23: Проблема была ДО centos Первая сетевая проблема заключалась в фоне ошибок broken pipe. По дампу трафика было видно, что клиенты, связь с которыми завершается ошибкой Broken pipe, пред этим совершают быстрое закрытие TCP соединения - half-duplex close sequence. Почему это происходит?
  • #24: Приводит к некорректному (для отправителя данных) закрытию соединения - half-duplex tcp close sequence, т.е. отправитель просто получит RST. OOO, т.е. не тот SEQ. это плохо, потому что retransmit
  • #25: выбор очередей в карте выбор интерфейсов в бонде (в обоих направлениях) выбор ядра для очереди выбор ядра для процесса/триды про RFS будет дальше
  • #26: результат
  • #28: Поиск в гугле по повышенной нагрузке на CPU0 возвращает от 50 тысяч до 150 тысяч страниц. Как вы думаете сколько по CPU1? До миллиона, но ни одного релевантного.
  • #31: динамика распределяет неравномерно строго говоря, динамическое распределение может быть полезным, когда важна latency, т.к. демоны учитывают NUMA и соблюдают локальность данных
  • #32: Допустим мы это сделали CPU0 отпустило Пропускная способность выросла, но вскоре опять упёрлись в нагрузку по другим ядрам
  • #33: статическое распределение через RSS
  • #34: так МОЖЕТ выглядеть динамическое распределение через демоны как видно нагрузка по прежнему не равномерна
  • #36: RSS может распределить нагрузку только на 16 очередей
  • #37: мы это используем!
  • #38: т.к. отдельные соединения могут быть быстрее если тридов приложеня меньше, чем ядер
  • #40: Хуже распределяет нагрузку и допускает packet reordering
  • #41: мутная тема Не смотря на то что это раздача и исходящих пакетов больше, softirq net_rx прерываний значительно больше, об этом поговорим чуть позже.
  • #42: Что происходит при получении пакета: …
  • #43: генерируются на первый пакет,
  • #44: затем отключаются, выгребается N пакетов, затем включаются
  • #45: HW отключаются, выгребается N пакетов, затем включаются
  • #50: обязательно откатывайте те изменения, который вам не дали однозначного выигрыша! в противном случае рано или поздно они ухудшат производительность системы!
  • #51: На выполнение этой задачи было потрачено много времени, но мы решили и старые, и новые проблемы освоили новые технологии и углубили знания о линуксе и самое главное - получили бесценный опыт Подходите ко мне после доклада, задавайте вопросы, рассказывайте про ваши истории успеха и проблемы - мне это интересно!