URL: https://www.opennet.me/cgi-bin/openforum/vsluhboard.cgi
Форум: vsluhforumID3
Нить номер: 103147
[ Назад ]

Исходное сообщение
"Оценка способности сетевого стека Linux обрабатывать миллион..."

Отправлено opennews , 17-Июн-15 21:20 
Марек Майковски (Marek Majkowski), разработчик ядра Linux, работающий в компании CloudFlare, провёл (https://blog.cloudflare.com/how-to-receive-a-million-packets/) заслуживающий внимание эксперимент, пытаясь разобраться насколько быстр сетевой стек ядра Linux и возможно ли в Linux обеспечить работу пользовательского приложения, способного  обработать миллион UDP-пакетов в секунду на обычном сервере с шестиядерным CPU Xeon (2GHz) и сетевой картой 10G.


В эксперименте применялась связка из программы для отправки данных, использующая вызов sendmmsg для отправки информации порциями по 1024 пакета за раз, и программы для приема данных, использующая  системный вызов recvmmsg (http://man7.org/linux/man-pages/man2/recvmmsg.2.html),  более эффективный чем recv благодаря пакетной обработке данных.


Первый вариант приложения продемонстрировал производительность отправки данных в диапазоне от 197 до 350 тысяч пакетов в секунду. Непостоянство производительности объяснялось миграцией обработчиков между ядрами CPU. Жестко закрепив программу за одним ядром CPU возросла эффективность кэша и производительность стабилизировалась на отметке в 350 тысяч пакетов в секунду. Следующим шагом стало распараллеливание отправки в несколько нитей, генерация пакетов значительно возросла, но принимающая программа не смогла обработать больше чем при первой попытке, уперевшись в производительность  ядра CPU, выполняющего код приложения.


Данное ограничение удалось преодолеть при помощи задействования нескольких принимающих очередей (RX queue), привязанных к разным CPU и закреплённых за разными IP-адресами.  Распределение запросов по двум принимающим очередям увеличил производительность до 650 тысяч пакетов в секунду. Попытка дальнейшего увеличения числа RX-очередей привела к очередному узкому месту - несмотря на то, что сетевая карта справлялась с доставкой пакетов ядру, ядро оказалось не способно доставить их приложению, которое не успевало их принимать. Увеличение числа принимающих нитей, из-за ограниченного размера буфера UDP, не улучшило положение.


Справиться с ограничением помог флаг SO_REUSEPORT, позволяющий сразу нескольким слушающим сокетам подключиться к одному порту для приёма соединений. При этом каждый обработчик использует отдельный дескриптор сокета, т.е. свой отдельный принимающий буфер UDP. Запустив четыре обработчика производительность удалось довести до 1.1 млн пакетов в секунду. Привязав обработку RX-очереди и принимающее приложение к одному узлу NUMA производительность удалось поднять до 1.4 млн пакетов в секунду.

URL: https://blog.cloudflare.com/how-to-receive-a-million-packets/
Новость: http://www.opennet.me/opennews/art.shtml?num=42449


Содержание

Сообщения в этом обсуждении
"Оценка способности сетевого стека Linux обрабатывать миллион..."
Отправлено Аноним , 17-Июн-15 21:20 
udp/udp-lite прост, лучше бы провели тесты TCP...

"Оценка способности сетевого стека Linux обрабатывать миллион..."
Отправлено Pilat , 18-Июн-15 05:07 
> udp/udp-lite прост, лучше бы провели тесты TCP...

С подтверждением ? Это будет тест чего?


"Оценка способности сетевого стека Linux обрабатывать миллион..."
Отправлено A.Stahl , 17-Июн-15 21:20 
Пакеты, надо полагать, пустые?
С одной стороны это очень много и круто, но любопытно было бы сравнить с кем-то.
Что скажут BSDшники, которые всегда указывают на свой сетевой стек, когда заходит речь о полезности их системы. Может для BSD это вообще не масштаб?

"Оценка способности сетевого стека Linux обрабатывать миллион..."
Отправлено Аноним , 17-Июн-15 21:40 
Спроси у Netflix и NGinx (они контрибутят ядро BSD), линукс на свой страх и риск.

"Оценка способности сетевого стека Linux обрабатывать миллион..."
Отправлено Аноним , 18-Июн-15 19:53 
> Спроси у Netflix и NGinx (они контрибутят ядро BSD), линукс на свой страх и риск.

Так мы и спрашиваем: покажете 1М+ PPS на обычной машине? Отмазы про нжинкс и нетфликс - не есть циферки в бенчах.


"Оценка способности сетевого стека Linux обрабатывать миллион..."
Отправлено bOOster , 22-Июн-15 03:37 
С бумажкой на которых напечатаны эти циферки в бенче - можешь в толчок сходить и подтереться ими.
Эти бенчи приводят к появлению дыр в ядре, и все сообщество линуксоидов пердячим паром их ликвидирует…
ДАЖЕ если вдруг стек и не дотягивает до такой производительности - то уж он на голову стабильнее поделок под Линь.

"Оценка способности сетевого стека Linux обрабатывать миллион..."
Отправлено Аноним , 15-Авг-15 18:34 
>покажете 1М+ PPS на обычной машине?

Обычная такая машина с 10G и NUMA :) Попей уже водички ..

PS: Нововсти этой месяца 3 уже как, с разморозкой ! :)


"Оценка способности сетевого стека Linux обрабатывать миллион..."
Отправлено Аноним , 17-Июн-15 21:48 
http://wand.net.nz/pubs/211/pdf/p21.pdf

"Оценка способности сетевого стека Linux обрабатывать миллион..."
Отправлено A.Stahl , 17-Июн-15 21:55 
Ну этот документ стар и считает не пакеты, а килободы. И TCP, а не UDP.
Впрочем, если кому интересно, то вот оттуда данные:
TCP Implementation   Min     Mean  Max     SD
Linux 2.6.10        164.38 213.98 287.67 22.75
Linux 2.4.27        153.82 207.42 248.70 22.86
FreeBSD 5.3         136.77 176.20 225.01 17.11
FreeBSD 5.2.1       128.74 162.81 219.01 19.56
Windows XP SP2      89.90  137.31 191.00 21.67
OpenBSD 3.5         63.84  117.98 166.82 22.11

Как мы видим фряха отстаёт процентов на 15.
А опенБСД даже хуже винды.


"Оценка способности сетевого стека Linux обрабатывать миллион..."
Отправлено oopss , 17-Июн-15 22:01 
Бугога) Верни мне мой 2007й?

"Оценка способности сетевого стека Linux обрабатывать миллион..."
Отправлено Crazy Alex , 17-Июн-15 22:05 
Нет проблем, тащите свежие данные

"Оценка способности сетевого стека Linux обрабатывать миллион..."
Отправлено oopss , 18-Июн-15 08:24 
да данные такой давности даже упоминать глупо

"Оценка способности сетевого стека Linux обрабатывать миллион..."
Отправлено Sadok , 17-Июн-15 22:09 
> Ну этот документ стар и считает не пакеты, а килободы. И TCP,
> а не UDP.
> FreeBSD 5.3         136.77 176.20
> 225.01 17.11
> FreeBSD 5.2.1       128.74 162.81 219.01 19.56

Поперхнулся. 5.х, помнится, даже в продакшене нигде не жила. С 4 сразу на 6 прыгали

> Как мы видим фряха отстаёт процентов на 15.
> А опенБСД даже хуже винды.


"Оценка способности сетевого стека Linux обрабатывать миллион..."
Отправлено Аноним , 17-Июн-15 22:15 
>> Ну этот документ стар и считает не пакеты, а килободы. И TCP,
>> а не UDP.
>> FreeBSD 5.3         136.77 176.20
>> 225.01 17.11
>> FreeBSD 5.2.1       128.74 162.81 219.01 19.56
> Поперхнулся. 5.х, помнится, даже в продакшене нигде не жила. С 4 сразу
> на 6 прыгали
>> Как мы видим фряха отстаёт процентов на 15.
>> А опенБСД даже хуже винды.

Про производительность Multipath TCP for FreeBSD на 10GbE коробке тоже не слова...


"Оценка способности сетевого стека Linux обрабатывать миллион..."
Отправлено Аноним , 17-Июн-15 22:16 
>>> Ну этот документ стар и считает не пакеты, а килободы. И TCP,
>>> а не UDP.
>>> FreeBSD 5.3         136.77 176.20
>>> 225.01 17.11
>>> FreeBSD 5.2.1       128.74 162.81 219.01 19.56
>> Поперхнулся. 5.х, помнится, даже в продакшене нигде не жила. С 4 сразу
>> на 6 прыгали
>>> Как мы видим фряха отстаёт процентов на 15.
>>> А опенБСД даже хуже винды.
> Про производительность Multipath TCP for FreeBSD на 10GbE коробке тоже не слова...

100G


"Оценка способности сетевого стека Linux обрабатывать миллион..."
Отправлено Аноним , 18-Июн-15 19:55 
>> Про производительность Multipath TCP for FreeBSD на 10GbE коробке тоже не слова...
> 100G

Угу, покажи нам миллионы PPSов и 100Гбит.


"Оценка способности сетевого стека Linux обрабатывать миллион..."
Отправлено XoRe , 18-Июн-15 09:07 
> Поперхнулся. 5.х, помнится, даже в продакшене нигде не жила. С 4 сразу
> на 6 прыгали

Кое-где попала и в продакшен, кровь попортила изрядно.
Не только переходом на SMP, но и изменениями в портах.
А вообще да, странно, что в сравнении не взяли FreeBSD 4.9.


"Оценка способности сетевого стека Linux обрабатывать миллион..."
Отправлено t28 , 18-Июн-15 09:38 
> Ну этот документ стар и считает не пакеты, а килободы.

"Боды" — это вообще о чём вы? Вообще-то Бод — это единица измерения количества изменений модуляции (или манипуляции) в секунду.


"Оценка способности сетевого стека Linux обрабатывать миллион..."
Отправлено A.Stahl , 18-Июн-15 09:50 
Не ной. Да, некорректно использовал термин. Но идея ясна.

"Оценка способности сетевого стека Linux обрабатывать миллион..."
Отправлено Аноним , 22-Июн-15 02:23 
Вы бы внимательно перечитали документ, а конкретно размеры буфера и TCP-окна в Windows XP SP2. Что за замеры такие, когда тесты проводятся с параметрами по умолчанию?!

"Оценка способности сетевого стека Linux обрабатывать миллион..."
Отправлено iZEN , 17-Июн-15 23:10 
Можно здесь посмотреть некоторые соображения: https://calomel.org/network_performance.html

"способности сетевого стека Linux обрабатывать миллион"
Отправлено Andrey Mitrofanov , 18-Июн-15 09:18 
> Можно здесь посмотреть некоторые соображения: https://calomel.org/network_performance.html

""Соединение с calomel.org было неожиданно прервано. Возможно, также была прервана передача данных.""

Посмотрел. В ахе.


"способности сетевого стека Linux обрабатывать миллион"
Отправлено Аноним , 18-Июн-15 11:36 
> ""Соединение с calomel.org было неожиданно прервано. Возможно, также была прервана передача
> данных.""
> Посмотрел. В ахе.

Вот как-то так оно пакеты и обрабатывает.


"способности сетевого стека Linux обрабатывать миллион"
Отправлено Аноним , 18-Июн-15 13:21 
h2o и http/2.0 вас приветствует...

говорят у h2o 20% запросов это отказ


"Оценка способности сетевого стека Linux обрабатывать миллион..."
Отправлено Аноним , 18-Июн-15 20:06 
> Можно здесь посмотреть некоторые соображения: https://calomel.org/network_performance.html

Самое годное что там есть - фоновая картинка. Которая однако прозрачно намекает что основное время бояздэшники проводят в трублешутинге и твиках того, что у остальных сразу работает нормально.

А так - да, там отлично видно:
1) В качестве генератора пакетов на 10Гбит линк почему-то используются убунты. Наверное потому что они этот 10Гбит линк вообще могут прогрузить, для начала, в отличие от исследуемого на производительность предмета? :)
2) Коменты про отключение HT и однопоточность - улыбают. Да, очень круто когда 1 рубит а семеро в кулак трубят. Это оказывается было сказано про работу OpenBSD на восьмиядернике :)
3) Не надо быть семи пядей во лбу, чтобы заметить что твиков TCP/IP стека у обычной убунты - разика так в три поболее чем у бздюков. Так что когда что-то покрутить приспичило - это хотя-бы можно, для начала. Про то что у редхата еще больше настроек в их самопальных ядрах - я и вовсе молчу.


"Оценка способности сетевого стека Linux обрабатывать миллион..."
Отправлено Аноним , 19-Июн-15 12:28 
> А так - да, там отлично видно:
> 1) В качестве генератора пакетов на 10Гбит линк почему-то используются убунты. Наверное
> потому что они этот 10Гбит линк вообще могут прогрузить, для начала,
> в отличие от исследуемого на производительность предмета? :)

Ух ты! Так там, внезапно, вдруг, оказывается, исследуется производительность, т.е. это не просто пример твикалки огнестены меж двух бубунто-серверов?
Интересно, а почему же не используют сразу бубунту для всего? =)

> 3) Не надо быть семи пядей во лбу, чтобы заметить что твиков
> TCP/IP стека у обычной убунты - разика так в три поболее
> чем у бздюков.

Ну да, особенно, когда все твики идут вообще отдельно https://calomel.org/freebsd_network_tuning.html
*на третий день Фанатег Зоркий Глаз заметил ...*

А так, да, все верно :)


"Оценка способности сетевого стека Linux обрабатывать миллион..."
Отправлено AlexAT , 18-Июн-15 22:02 
А теперь в юзерспейсе.



"Оценка способности сетевого стека Linux обрабатывать миллион..."
Отправлено t28 , 18-Июн-15 09:33 
> Пакеты, надо полагать, пустые?
> С одной стороны это очень много и круто, но любопытно было бы

350 kpps — это мало и совсем не круто.
Уровень 1 Mpps достижим при отказе от сетевого стека ядра и реализации части драйвера сетевухи, IP-стека и собственно обработчика этих пакетов на уровне user-space приложения. Где-то была статья год назад на эту тему. Естественно, что такой подход позволяет выжать максимум из железа.


"Оценка способности сетевого стека Linux обрабатывать миллион..."
Отправлено Аноним , 18-Июн-15 11:46 
Это конечно же полный бред.

"Оценка способности сетевого стека Linux обрабатывать миллион..."
Отправлено Аноним , 18-Июн-15 20:08 
Вообще-то для х86 самого по себе - без дополнительых ухищрений очень сложно дернуться 350 000 раз в секунду. Прерывания на х86 довольно медленные, переключение контекста - дорогое. Все прелести. В результате навороченный 4-гигагерцевый кирпич может убить все время на телепание между контекстами, заваливание в прерывания и прочую сугубо техническую работу.

"Оценка способности сетевого стека Linux обрабатывать миллион..."
Отправлено AlexAT , 18-Июн-15 22:01 
Ну сетевухи уже давно не дёргают x86 на каждый пакет, тащемта.

"Оценка способности сетевого стека Linux обрабатывать миллион..."
Отправлено Аноним , 19-Июн-15 01:49 
> Ну сетевухи уже давно не дёргают x86 на каждый пакет, тaщeмта.

Ну да. Там всякие довольно жестокие изгаления по части interrupt mitigation, насколько я знаю.


"Оценка способности сетевого стека Linux обрабатывать миллион..."
Отправлено Dmitry , 18-Июн-15 10:13 
Миллион восемьсот пакетов в секунду при включенном fastforwarding

http://bsdrp.net/documentation/technical_docs/performance


"Оценка способности сетевого стека Linux обрабатывать миллион..."
Отправлено Аноним , 18-Июн-15 11:34 
Cкажите мне как художник художнику, вы читать умеете ?

"Оценка способности сетевого стека Linux обрабатывать миллион..."
Отправлено Аноним , 19-Июн-15 05:41 
Если в тексте написано что BSD как обычно вздрючило пингвина, и _подробно_ расписано как повторить опыт ... то для художников оно не читаемо? Ню-ню :)

"Оценка способности сетевого стека Linux обрабатывать миллион..."
Отправлено Аноним , 19-Июн-15 12:38 
> Если в тексте написано что BSD как обычно вздрючило пингвина, и _подробно_
> расписано как повторить опыт ... то для художников оно не читаемо?
> Ню-ню :)

Ну, вы ведь понимаете, что именно ЭТОТ конь -- абсолютно неправильной сферичности!
Ведь провели замер скорости пингвинообразной поняшки в вакууме -- а у "бздюков", точно таких же "тестов", нема! Значит что? Значит, они СЛИЛИСЯ! Уррра товарищи!!!
Причем, каждый третий норовит высказать свое "Фи" так, как будто он, как минимум, причастен к разработке  сетевого стека пингвина!
Детский сад, штаны на лямках :)



"Оценка способности сетевого стека Linux обрабатывать миллион..."
Отправлено Аноним , 18-Июн-15 20:10 
> Миллион восемьсот пакетов в секунду при включенном fastforwarding

Круто. А теперь попробуй получить 1.8М пакетов в секунду программой в юзерспейсе и расскажи как получилось.


"Оценка способности сетевого стека Linux обрабатывать миллион..."
Отправлено Dmitry , 19-Июн-15 11:01 
>> Миллион восемьсот пакетов в секунду при включенном fastforwarding
> Круто. А теперь попробуй получить 1.8М пакетов в секунду программой в юзерспейсе
> и расскажи как получилось.

Про netmap прямо здесь рассказывать ?


"Оценка способности сетевого стека Linux обрабатывать миллион..."
Отправлено svsd_val , 18-Июн-15 05:57 
Весьма и весьма не плохо, интересно аналогичные результаты можно достичь на мелко мягких ?

"Оценка способности сетевого стека Linux обрабатывать миллион..."
Отправлено Аноним , 18-Июн-15 08:13 
тут больше в само ядро упирается. чем в "трюки" вокруг него.
помнится, N2O, Yaws и cowboy - выдавали на стрекозе и QNX до в 30х и 8х раз больший траффик с того-же железа. а в линукс - просто ядро сатурировалось и ж-а наступала. ни сервисам ничего ни доставалось ни достучаться до него - низя было.
по той-же причине и hammerfs в linux не прикрутить - ведро с болтами это - не тянет такое.

"Оценка способности сетевого стека Linux обрабатывать миллион..."
Отправлено Аноним , 18-Июн-15 11:46 
Очередное творчество душевнобольных.

"Оценка способности сетевого стека Linux обрабатывать миллион..."
Отправлено YetAnotherOnanym , 18-Июн-15 14:13 
А что, Erlang на QNX уже считается пригодным для эксплуатации? Сами создатели эрланга на вопрос о работе под QNX отвечают "Там какой-то чувак пилит порт, спроси в рассылке".

"Оценка способности сетевого стека Linux обрабатывать миллион..."
Отправлено fleonis , 18-Июн-15 14:39 
что за тесты? есть ссылка?

"Оценка способности сетевого стека Linux обрабатывать миллион..."
Отправлено Аноним , 19-Июн-15 05:44 
> выдавали  QNX до в 30х и 8х раз больший траффик с того-же железа.

Сказочник грёбанный :))))
QNX - редкий тормоз в сетях, это я тебе как доктор говорю :)


"Оценка способности сетевого стека Linux обрабатывать миллион..."
Отправлено rob pike , 18-Июн-15 14:46 
Разбор полётов внутри ядра - где тормоза и куда пилить - https://lwn.net/Articles/629155/, http://people.netfilter.org/hawk/presentations/LCA2015/net_s...

"Оценка способности сетевого стека Linux обрабатывать миллион..."
Отправлено ArtemDPI , 19-Июн-15 10:46 
1M пакетов для 10G - это, всё же, мало.
Физический предел для такого интерфейса - около 15M фреймов в секунду (с минимальной полезной нагрузкой 64Б) и около 5M фреймов со средним размером полезной нагрузки в 256Б (сегодня в сетях примерно так). Учитывая, что интерфейсы дуплексные, умножаем на 2.
Соответственно, если мы хотим хотя бы близко подойти к использованию всех возможностей 10G интерфейса (про 40 и 100 молчу), сетевой стек Linux использовать нельзя.
Для этого и пилят всякие DPDK и Netmap'ы (там мы, правда, начинаем уже упираться в память, процессоры и интерконнект, но это уже другой вопрос).