Dmitry Menshikov "Release after the year of development: fierce debug to the New Year’s clinking of glasses and 40 days of the search for the solution"
Usually, the last working day of the year means people raiding the shops and making last-minute purchases of presents for their loved ones, liquor and ingredients for all kinds of winter holiday foods. But that is a normal people story — people who don’t release the infrastructure update, that had been developed during the whole year 2017, on the year’s final week. And that is exactly what we did. We had 3 new services, a new stack of video streaming platform, new team members, and new hardware of all kinds. Not that I didn’t realize that it’s a bad idea, but if you’re taking responsibility for the result and pull anchor, you’ve got to be ready to accept the fate prepared for you by an iceberg.
And so it’s 31.12.2017, two days of fruitless troubleshooting of failing streams are over, and you’re looking at Champaign in a glass and thinking how to dig into this black box. The troubleshooting took days more and ended in a non-stop one-week long Go vs Node hackathon, which resulted in the complete rewriting of video streaming core, which was found out to be the problem.
"GenAI Apps: Our Journey from Ideas to Production Excellence",Danil TopchiiFwdays
More Related Content
Similar to Dmitry Menshikov "Release after the year of development: fierce debug to the New Year’s clinking of glasses and 40 days of the search for the solution"
Контроль качества и сопровождение программ в реальном времениSQALab
Similar to Dmitry Menshikov "Release after the year of development: fierce debug to the New Year’s clinking of glasses and 40 days of the search for the solution" (20)
"How to tame the dragon, or leadership with imposter syndrome", Oleksandr Zin...
Dmitry Menshikov "Release after the year of development: fierce debug to the New Year’s clinking of glasses and 40 days of the search for the solution"
1. Релиз после года разработки:
debug под новогодний звон бокалов и
40 дней поиска решения
Дмитрий Меньшиков
Aurora Technologies
25. Не все потоки на одном и том же Wowza ingest сервере испытывали
проблемы
Факты
26. Не все потоки на одном и том же Wowza ingest сервере испытывали
проблемы
На Wowza origin в логах
streamTimeout[origin/streamName]: Resetting connection:
wowz://10.2.1.174:1935/origin/streamName
Факты
27. Не все потоки на одном и том же Wowza ingest сервере испытывали
проблемы
На Wowza origin в логах
streamTimeout[origin/streamName]: Resetting connection:
wowz://10.2.1.174:1935/origin/streamName
У сапорта рост жалоб от партнеров на принудительное дисконнекты
стримеров
Факты
28. Не все потоки на одном и том же Wowza ingest сервере испытывали
проблемы
На Wowza origin в логах
streamTimeout[origin/streamName]: Resetting connection:
wowz://10.2.1.174:1935/origin/streamName
У сапорта рост жалоб от партнеров на принудительное дисконнекты
стримеров
В логах найдены SIGPIPE на транскодерах, что трактовали
как следствие обрыва на Wowza ingest
Факты
29. Не все потоки на одном и том же Wowza ingest сервере испытывали
проблемы
На Wowza origin в логах
streamTimeout[origin/streamName]: Resetting connection:
wowz://10.2.1.174:1935/origin/streamName
У сапорта рост жалоб от партнеров на принудительное дисконнекты
стримеров
В логах найдены SIGPIPE на транскодерах, что трактовали
как следствие обрыва на Wowza ingest
Количество дисконектов с ingest выросло на том же обьеме трафика
Факты
32. План действий
Восстановить карту всех
действий и везде: подключения,
отключения, просмотры, статусы
Diff Wowza модулей, фронтенда
клиентов, изменений настроек
HW/SW.
Еще раз пересмотреть метрики
Снифинг трафика и профайлинг
Проверить свою бизнес логику
Поспрашивать датацентр
33. Подозрение на сеть
Dec 28 15:08:34 w-e-3 consul[22751]: memberlist: Failed
TCP fallback ping: read tcp 10.2.0.229:39386-
>192.168.8.3:8301: i/o timeout...
36. Анализ FPS
1) Фреймы выкидываются пачками
2) Потом нет фреймов
3) Судя по DTS стримеры либо генерируют
плохой стрим, либо Wowza паузит прием
данных
52. Тюнинг TCP стека и OS
net.core.rmem_* и net.ipv4.tcp_rmem – память для буферов чтения
net.core.wmem_* и net.ipv4.tcp_wmem – память для буферов записи
net.core.somaxconn – размер очереди установленных соединений ожидающих обработки accept()
net.core.netdev_max_backlog – макс размер очереди фреймов после копирования с ring buffer
NIC
fs.file-max – макс количество открытых файлов
net.ipv4.tcp_sack, net.ipv4.tcp_dack, net.ipv4.tcp_fack – управление TCP
Acknowledgement
53. Тюнинг TCP стека и OS
http://bit.ly/2LKagvg - Performance Tuning on Linux —
TCP
https://red.ht/35aozRQ - Red Hat Enterprise Linux Network
Performance Tuning Guide
http://bit.ly/30Jimsr - Tuning Linux to reach maximum
performance on 10 Gbps network
54. NIC tuning, IRQ, SoftIRQ
/proc/interrupts - IRQ
SoftIRQ
NAPI
ksoftirqd
ethtool
Просто цикл статей года! http://bit.ly/2OgrKRQ
60. Чтение ядра и драйвера, %#$&
tg3 драйвер при проблемах DMA (direct memory access) не ведет статистику и
не пишет о проблемах
При ошибках DMA пакеты могут приходить битыми, теряться
DMA debug появился только в ядре Linux 3.9
perf показал, что много времени уходит на debug_dma_map_page
В коде драйвера много комментариев про известные и нерешенные
проблемы с DMA
Читать сорсы надо после психологической подготовки
61. Чтение ядра и драйвера, %#$&
tg3 драйвер при проблемах DMA (direct memory access) не ведет статистику и
не пишет о проблемах
При ошибках DMA пакеты могут приходить битыми, теряться
DMA debug появился только в ядре Linux 3.9
perf показал, что много времени уходит на debug_dma_map_page
В коде драйвера много комментариев про известные и нерешенные
проблемы с DMA
Читать сорсы надо после психологической подготовки
Братан, последню гривню бросаю, атвичаю!
Это все кривой NIC, DMA и драйвер!
62. А как дела на других системах?
Например, на EC2?
64. А как дела на других системах?
Например, на EC2?
Братан, ставь другую OS и карту!
Intel X540 10G, например, есть на складе!
65. X540 10G
У Intel X540 10G есть трекинг количества ошибок DMA
Ошибки видны в ethtool: rx_page_failed и tx_page_failed
Есть поддержка дебага, пишет в /sys/kernel/debug/ixgbe
Еще пишет в dmesg ”TX DMA map failed” при ошибках
70. Для замеров есть iperf, но
у него есть недостатки
sockperf гибче: кастомные размеры пакетов,
параметры соединений, например
TCP_NODELAY
Пакеты по 14 байт: 75 usec avg latency
Пакеты по 512 байт: 87 usec avg latency
71. Для замеров есть iperf, но
у него есть недостатки
sockperf гибче: кастомные размеры пакетов,
параметры соединений, например
TCP_NODELAY
Пакеты по 14 байт: 75 usec avg latency
Пакеты по 512 байт: 87 usec avg latency
79. На транскодере начинаем
перехватывать трафик (pcap)
Релизим обновленный транскодер
Ставим paranoid debug level на
транскодер, с записью пакетов даже
80.
81. [root@w-o-8.am /]# time curl vss-w-o-3:1935
real 0m0.109s
user 0m0.003s
sys 0m0.001s
[root@w-o-8.am /]# time curl vss-w-o-3:1935
real 0m7.008s
user 0m0.003s
sys 0m0.001s
Потыкали Wowza origin
84. Пазл сложился
Стало ясно почему на графиках обрыв произошел раньше чем
поток деградировал на ingest
SIGPIPE на транскодере возникали из-за origin
Стало понятно почему тюнинг Centos 7 не дал результат
92. Ретроспектива
Готовить инструменты для поиска проблем заранее
Перед серьезными релизами начинать собирать метрики до ввода в
эксплуатацию подсистем и смотреть на изменения метрик
93. Ретроспектива
Готовить инструменты для поиска проблем заранее
Перед серьезными релизами начинать собирать метрики до ввода в
эксплуатацию подсистем и смотреть на изменения метрик
Я забрался слишком глубоко, дойдя до кода драйверов. Оглядываться
стоит чаще.
94. Ретроспектива
Готовить инструменты для поиска проблем заранее
Перед серьезными релизами начинать собирать метрики до ввода в
эксплуатацию подсистем и смотреть на изменения метрик
Я забрался слишком глубоко, дойдя до кода драйверов. Оглядываться стоит
чаще.
Повышать квалификацию команды и больше инвестировать в обучение
95. Ретроспектива
Готовить инструменты для поиска проблем заранее
Перед серьезными релизами начинать собирать метрики до ввода в
эксплуатацию подсистем и смотреть на изменения метрик
Я забрался слишком глубоко, дойдя до кода драйверов. Оглядываться стоит
чаще.
Повышать квалификацию команды и больше инвестировать в обучение
Это был невероятный опыт и неимоверный трип
96. А как дела на других системах?
Например, на EC2?
Ах да…
Главный партнер получил прирост конверсии на
+57%