Добившись (https://www.opennet.me/opennews/art.shtml?num=42449) возможности обрабатывать на штатном сетевом стеке ядра Linux миллион пакетов в секунду, инженеры сети доставки контента CloudFlare продолжили (https://blog.cloudflare.com/single-rx-queue-kernel-bypass-wi.../) разработку методов увеличения скорости обработки трафика. На этот раз была предпринята попытка задействовать средства прямого взаимодействия с сетевым адаптером, позволяющие (https://blog.cloudflare.com/kernel-bypass/) в десять раз поднять скорость обработки пакетов по сравнению с использованием сетевого стека Linux.Для организации прямой обработки пакетов решено использовать фреймворк NetMap (http://info.iet.unipi.it/~luigi/netmap/), который разработан (https://www.opennet.me/opennews/art.shtml?num=31758) для FreeBSD, но также поддерживает Linux и Windows. Проблема оказалась в том, что NetMap осуществляет перенаправление обработки всех входящих (RX) очередей сетевой карты, отсоединяя их от штатного сетевого стека, в то время как была поставлена задача раздельной обработки очередей: при помощи NetMap планировалось обрабатывать только простейшие потоки трафика, связанные с вредоносной активностью, такой как UDP-флуд, а обработку обычного трафика необходимо было оставить как есть с использованием штатного сетевого стека Linux.
В итоге, компания CloudFlare присоединилась к разработке NetMap и подготовила набор изменений (https://github.com/luigirizzo/netmap/pull/87) с реализаций режима выборочной обработки RX-очередей пакетов, позволяющего связать с NetMap отдельные очереди пакетов, закрепив остальные за обработчиком в сетевом стеке ядра. Перенаравив в связанную с NetMap очередь специфичный трафик, появляется возможность его обработки специально оптимизированным приложением вне сетевого стека. Тестирование показало, что подобный обработчик в пространстве пользователя способен разбирать трафик со скоростью 5.8 млн пакетов в секунду, при сохранении неизменного процесса обработки ядром остальные сетевых потоков.<center><a href="https://blog.cloudflare.com/content/images/2015/10/RX_bypass... src="https://www.opennet.me/opennews/pics_base/0_1444540670.png&q... style="border-style: solid; border-color: #e9ead6; border-width: 15px;max-width:100%;" title="" border=0></a></center>
URL: https://blog.cloudflare.com/single-rx-queue-kernel-bypass-wi.../
Новость: http://www.opennet.me/opennews/art.shtml?num=43122
>попытка задействовать средства прямого взаимодействия с сетевым адаптеромНо всё это счастье будет работать лишь на некоторых сетевушках? Т.е. нужен модуль для ядра, и отдельный для юзерспейсного NetMap?
Возможно это имеет смысл для спец.прошивок для спец.оборудования, но в общем виде не вызывает особого энтузиазма.
Почти на всех 10-гигабитных адаптерах такое можно сделать.
Нужен свой NetMap-драйвер, на сегодня поддерживаются r8169, ixgbe, igb, e1000, e1000e и forcedeth.Пример, для Intel IXGBE:
insmod ./LINUX/netmap.ko
insmod ./LINUX/ixgbe/ixgbe.ko
(let CPU=0; cd /sys/class/net/eth3/device/msi_irqs/; for IRQ in *; do \
echo $CPU > /proc/irq/$IRQ/smp_affinity_list; let CPU+=1
done)
ethtool -K eth3 ntuple on
ethtool -X eth3 weight 1 1 1 1 0 1 1 1 1 1
ethtool -N eth3 flow-type udp4 dst-port 53 action 4
ethtool -K eth3 lro off gro off
taskset -c 15 ./nm_offload eth3 4
Мне больше это нравится - https://github.com/luigirizzo/netmap-ipfw
Реализация ipfw и dummynet работающая в пространстве пользователя поверх NetMap. По идее в Linux тоже можно запустить.
> Мне больше это нравится - https://github.com/luigirizzo/netmap-ipfw
> Реализация ipfw и dummynet работающая в пространстве пользователяА оно не будет тормозить и грузить проц, как squid например ?
Не будет, те то что оно юзерспейс не будет означать что всё упирается именно в пересылку трафика: юзерспейс-ядро.
по ходу, ipfw даже на вантузе запускали.
Что значит по ходу? wipfw был точно.
Непонятно, зачем сюда приплели этого графомана одинцова.
Ссылка на его недобложек битая.
Патч по гитхабовской ссылке тоже делал не он, там его вклад только в виде очередного идиотского комментария.
Патч по гитхабовской ссылке как раз делан мною - и именно поэтому Марек упомянул меня в статье, там же есть упоминание, что и код был написан мною :)Но за высокую оценку спасибо!
> Непонятно, зачем сюда приплели этого графомана одинцова.
> Ссылка на его недобложек битая.
> Патч по гитхабовской ссылке тоже делал не он, там его вклад только
> в виде очередного идиотского комментария.Я даже чуточку расширю свой пост. PoC изначально был вот здесь, https://github.com/pavel-odintsov/ixgbe-linux-netmap-single-... поиск по "CONFIG_NETMAP". Но код был влит не отдельны коммитом, а сразу всего кода, потому что я правил живой драйвер и честно говоря не думал что что-то выйдет, но оно собралось и даже заработало как ожидалось.
Марек уже собрал на базе этой очень черновой версии отличный удобный для применения патч - https://gist.github.com/majek/f7498fd15569dbb59ce3
Ребята из CloudFlare отлично поработали и процентов 80 работы сделано именно ими =) Теперь это не просто PoC - а готовый для применения стабильный подход.
P.S. зависть - это плохо =)
Зависть это хорошо для того кому завидут, и плохо для завидущего.
Ага, сглаживают люди завистью, так что плохо для обоих.
Зачем в Linux эти окаменелые древности из давно умершей ОС? Неужели нет своих инженеров у того же RedHat, SuSE, IBM (и кто там еще оплачивает разработку Linux), способных написать подобное? Зачем в Linux этот out-of-tree модуль, да еще и под жлобской несвободной 2-clause BSD-лицензией, а не под православной GPLv2? А если этот Luigi Rizzo закроет свой код, то это что, получится, что все пользователи NetMap под Linux, в том числе из CloudFlare, на дядю-проприераста поработали забесплатно?Я против подобных заигрываний, и думаю, что Торвальдс и Столлман (последний - своим авторитетным мнением) не позволят зайти этой инициативе слишком далеко.
> Зачем в Linux этот out-of-tree модуль, да еще и под жлобской несвободной 2-clause BSD-лицензией, а не под православной GPLv2? А если этот Luigi Rizzo закроет свой код, то это что, получится, что все пользователи NetMap под Linux, в том числе из CloudFlare, на дядю-проприераста поработали забесплатно?Очень показательно, что это говорит человек, не написавший ни строчки открытого кода. Под любой лицензией.
Мне интересно, а сколько нужно открыть ресторанов, чтобы утверждать, что какойто конкретный плохой, или может, чтобы утверждать что самолет не надежен нужно возглавить КБ, а разбиться на нем не достаточно?.. хватит бред нести
> Мне интересно, а сколько нужно открыть ресторанов, чтобы утверждать, что какойто конкретный плохойУтверждать что-либо может даже школьник, право на это закреплено Конституцией.
А вот какой вес будет иметь мнение человека - зависит от его статуса в социальной группе. Например если я в кругу друзей скажу, что КДЕ - отстой, со мной большая часть согласится. Если в универе - там вообще не поймут про что это почти все из группы, ибо виндузятники. Ну и т.д.
СМИ часто используют "говорящие головы" - экспертов, звезд и политиков для придания веса какому-то мнению правящих "элит".
> Я против подобных заигрываний, и думаю, что Торвальдс и Столлман (последний - своим авторитетным мнением) не позволят зайти этой инициативе слишком далеко.Никто и не позволит ему окопаться в святом ядре. Во всяком случае, при первой попытке сабмита автор линуксового порта был обвинен в ереси Дейвом Миллером, поскольку попытался утверждать что pps с netmap-ом получился в 2 раза выше, что очень оскорбило Дейва:
>> I can not get line rate output with pktgen on existing kernels today.
>Something is incredibly wrong if this is the case.http://marc.info/?l=linux-netdev&m=136640384802377&w=3
Сам тред с посыланием на йух нетмапа тут:
http://marc.info/?t=136639881600001&r=1&w=3
Шикарный тред, спасибо, анон!Еще вот это понравилось:
>If someone is showing you 10x improvement over what Linux gives you,
>then we are doing something wrong and we shouldnt be living in some
>parallel universe and claim theres nothing to see here.Похоже, им пора вызывать святую инквизицию и запасаться дровами.
> Зачем в Linux эти окаменелые древности из давно умершей ОС? Неужели нет
> своих инженеров у того же RedHat, SuSE, IBM (и кто там
> еще оплачивает разработку Linux), способных написать подобное? Зачем в Linux этот
> out-of-tree модуль, да еще и под жлобской несвободной 2-clause BSD-лицензией, а
> не под православной GPLv2? А если этот Luigi Rizzo закроет свой
> код, то это что, получится, что все пользователи NetMap под Linux,
> в том числе из CloudFlare, на дядю-проприераста поработали забесплатно?
> Я против подобных заигрываний, и думаю, что Торвальдс и Столлман (последний -
> своим авторитетным мнением) не позволят зайти этой инициативе слишком далеко.Аналогов в Linux NetMap'у нету, увы. Есть AF_PACKET, прочтите про него: habrahabr.ru/post/261161/ но он решительно больше жрет процессор и обеспечивает меньшие скорости захвата.
За ссылку на хабру сори =( Но в другом месте статьи нету.
Большое спасибо за статью! Узнал для себя немало нового.Но вот что касается NetMap, то мне кажется, что это в корне неверный подход - брать абсолютно чуждую для Линукса наработку как с технической точки зрения (тот же Stephen Hemminger это признает: "It still has all the BSD ugliness"), так и - и это ГЛАВНОЕ - с идеологической. Несвободному коду, равно как и коду, на нем основанному, не место в ядре, иначе Линукс превратится в еще одну проприерастную подстилку, как та же боязде, и рано или поздно закономерно повторит ее судьбу - кто вот сейчас помнит о боязде? Никто. И никакие временно достигнутые преимущества в скорости обработки пакетов не оправдывают использование несвободного кода под лицензией BSD.
Единственное, что тут можно сделать, чтобы хоть немного уменьшить ущерб - это добавить шапку GPLv2 в код из родительского репозитория NetMap, чтобы защитить возможные в будущем правки, сделанные в рамках Linux, от попадания обратно в репозиторий NetMap, который поддерживает Luigi Rizzo. Иначе эти правки рано или поздно, но точно попадут проприерастам в руки, и получится, что авторы правок станут соучастниками преступления. Жаль, конечно, что шапку BSD при этом убрать нельзя - того гляди, увидит потом, через время, кто-нибудь, что это неродной для Linux код, поищет его в гугле и обнаружит репозиторий Luigi Rizzo, да еще и чего доброго правки туда сделает, а не в Linux.
А вообще, я уверен, что направь Вы и инженеры из CloudFlare усилия на доработку существующих, родных для Линукса решений, у сообщества уже получилось бы довести их до уровня NatMap, и при этом не пришлось бы идти на сделку с совестью и прикасаться к зловонному коду под лицензией BSD.
Автор может сменить лицензию на свой код, невзирая на то, gpl она, bsd или вообще public domain. А вот "добавить шапку" gpl - это как раз нарушение авторских прав как в случае gpl, так и в случае gpl кода. Единственный тип лицензий, по которому можно "добавить шапку", - это public domain like (cc0, unlicense). Впрочем, я практически полностью уверен, что вы пытаетесь толсто троллить, потому что иначе существование настолько тупых людей противоречит моему мировоззрению.
А вот и бздюшное трололо пожаловало.Ну расскажи-ка мне, умный, где в 2-clause лицензии BSD запрет на убирание шапки? Там написано, что при любых обстоятельствах шапка должна остаться. Но никто и никогда не запретит ни мне, ни кому-либо еще добавить GPL-шапку над BSD-шной, чтобы ЗАЩИТИТЬ мои изменения, которые я сделал в файле, от тупого воровства со стороны проприерастов и их подстилок-бздюшников. Лицензия BSD (в отличие от GPL) не запрещает никаких дополнительных ограничений на исходный код, иначе она не была бы столь любима именно за это проприерастами. Так что кушай да не обляпайся, и смотри дальше, как Apple, Microsoft, NetApp и прочие будут пользоваться трудами бздюков АБСОЛЮТНО нахаляву.
Так и есть, но добавление gpl шапки влияет только на внесенные изменения, но не на исходный код. Поэтому, конечно, так никто не делает - люди с психическими отклонениями такого характера просто неспособны писать код, который стоило бы защищать GPL. Исходный же посыл был в том, что единственные люди, способные *менять* лицензию на код - это авторы этого кода во всех случаях, кроме случая public domain like лицензий.
>добавление gpl шапки влияет только на внесенные измененияЕстественно. К сожалению, никто ведь не запретит загуглить оригинал файла под лицензией BSD. Но в любом случае уже хорошо, что бздюки изменений не смогут получить.
>единственные люди, способные *менять* лицензию на код - это авторы этого кода во всех случаях
Нет, BSD не запрещает налагать дополнительные ограничения на исходный код и превращать его в GPL-лицензированный. Ты правда думаешь, что Microsoft у себя в репозитории не добавила проприетарную лицензию, когда дернула из BSD код TCP/IP-стека, "случайно" позабыв с бздюками поделиться?
Да, удивительная каша в голове. Повторяю для закрепления материала: НЕВОЗМОЖНО взять BSD лицензированный код и превратить его в GPL лицензированный код без согласия АВТОРА(ов). Но бинарный файл микса кода BSD/GPL будет GPL, это верно. Не так давно меня просил один человек предоставить ему право пользоваться моим кодом не под BSD/MIT лицензией, а под public domain, чтобы не публиковать информацию о лицензии (он, к слову, мое согласие получил).Следующий момент: какие ограничения предполагается налагать на код, который авторы распространяют по BSD лицензии? Взять его, поменять и не поделиться? Да, это возможно. Но от этого не застрахован и GPL код, потому что тот же Microsoft может придти к автору и попросить его коммерческую лицензию, и *АВТОР* вправе это сделать. На чем, кстати, живет не одна сотня "opensource" контор. И BSD лицензия им, конечно, не подходит - ее не продать твоим любимым проприетарастам, а вот dual-license с GPL/royalty free - запросто.
У кого каша - у тебя, бздоид?
Читай, что здесь написано (там даже пример исходника есть с шапкой GPL над шапкой BSD) https://www.softwarefreedom.org/resources/2007/gpl-non-gpl-c...Убрать шапку BSD может только лишь автор, это ежу понятно. Добавить сверху шапку GPL, не убирая при этом BSD, может любой и каждый, при этом все изменения в этот код с двумя шапками автоматически должны удовлетворять обеим лицензиям сразу. То есть, по сути должны удовлетворять GPL, плюс требование оставить шапку BSD на месте. А значит, бздюшатам кукиш, а не эти изменения, вот такая вот "радость" для них, ущербных! )))
> как Apple, Microsoft, NetApp и Школьник будут пользоваться трудами бздюков АБСОЛЮТНО нахаляву.гордись!
Ну вообще-то есть PF_RING, который используется в связки со Snort и Suricata для реализациии функциональности IDS/IPS в Linux
Есть и другие технологгии высокоскоросной обработки пакетов на чиная от UIO-DMA заканчивая INTEL PPDK.
Причем Intel DPDK гораздо перспективнее любой реализации хаков (netmap , pf_ring) минуя TCP/IP стек. Так как оптимизирован под конкретное железо.
Хотя нет, оно отметилось в виде ценного совета:We would like to thank Pavel Odintsov who suggested the possibility of using Netmap this way. He even prepared the initial hack we based our work on.
Ссылочку бы поправить - http://www.stableit.ru/2015/06/how-to-run-netmap-on-single-q...
> Ссылочку бы поправить - http://www.stableit.ru/2015/06/how-to-run-netmap-on-single-q...Да, ссылко верное :) Спасибо, надеюсь модераторы починят.