The OpenNET Project / Index page

[ новости /+++ | форум | wiki | теги | ]

CloudFlare применил NetMap для повышения скорости обработки пакетов в Linux

11.10.2015 08:25

Добившись возможности обрабатывать на штатном сетевом стеке ядра Linux миллион пакетов в секунду, инженеры сети доставки контента CloudFlare продолжили разработку методов увеличения скорости обработки трафика. На этот раз была предпринята попытка задействовать средства прямого взаимодействия с сетевым адаптером, позволяющие в десять раз поднять скорость обработки пакетов по сравнению с использованием сетевого стека Linux.

Для организации прямой обработки пакетов решено использовать фреймворк NetMap, который разработан для FreeBSD, но также поддерживает Linux и Windows. Проблема оказалась в том, что NetMap осуществляет перенаправление обработки всех входящих (RX) очередей сетевой карты, отсоединяя их от штатного сетевого стека, в то время как была поставлена задача раздельной обработки очередей: при помощи NetMap планировалось обрабатывать только простейшие потоки трафика, связанные с вредоносной активностью, такой как UDP-флуд, а обработку обычного трафика необходимо было оставить как есть с использованием штатного сетевого стека Linux.

В итоге, компания CloudFlare присоединилась к разработке NetMap и, развив имеющиеся наработки Павла Одинцова, подготовила набор изменений с реализаций режима выборочной обработки RX-очередей пакетов, позволяющего связать с NetMap отдельные очереди пакетов, закрепив остальные за обработчиком в сетевом стеке ядра. Перенаправив в связанную с NetMap очередь специфичный трафик, появляется возможность его обработки специально оптимизированным приложением вне сетевого стека.

Данное NetMap-приложение выделяет в общем потоке нормальные запросы и возвращает их на обработку в обычный сетевой стек, отсеивая флуд (например, в результате DDoS-атаки через наводнение DNS-запросами). Тестирование показало, что подобный обработчик в пространстве пользователя способен разбирать трафик со скоростью 5.8 млн пакетов в секунду, при сохранении неизменного процесса обработки ядром остальных сетевых потоков.



  1. Главная ссылка к новости (https://blog.cloudflare.com/si...)
  2. OpenNews: Оценка способности сетевого стека Linux обрабатывать миллион пакетов в секунду
  3. OpenNews: Зафиксирована рекордная DDoS-атака с интенсивностью трафика в 400 Гбит/с (дополнено)
  4. OpenNews: На Spamhaus.org обрушилась крупнейшая в истории DDoS-атака
  5. OpenNews: Отчет о состоянии развития FreeBSD за второй квартал 2011 года
Лицензия: CC BY 3.0
Короткая ссылка: https://opennet.ru/43122-cloudflare
Ключевые слова: cloudflare, network, linux
При перепечатке указание ссылки на opennet.ru обязательно


Обсуждение (32) Ajax | 1 уровень | Линейный | +/- | Раскрыть всё | RSS
  • 1.1, A.Stahl (ok), 08:41, 11/10/2015 [ответить] [﹢﹢﹢] [ · · · ]  
  • –1 +/
    >попытка задействовать средства прямого взаимодействия с сетевым адаптером

    Но всё это счастье будет работать лишь на некоторых сетевушках? Т.е. нужен модуль для ядра, и отдельный для юзерспейсного NetMap?
    Возможно это имеет смысл для спец.прошивок для спец.оборудования, но в общем виде не вызывает особого энтузиазма.

     
     
  • 2.3, Аноним (-), 08:57, 11/10/2015 [^] [^^] [^^^] [ответить]  
  • +11 +/
    Почти на всех 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

     

  • 1.4, Аноним (-), 08:59, 11/10/2015 [ответить] [﹢﹢﹢] [ · · · ]  
  • –2 +/
    Мне больше это  нравится - https://github.com/luigirizzo/netmap-ipfw
    Реализация ipfw и dummynet работающая в пространстве пользователя поверх NetMap. По идее в Linux тоже можно запустить.
     
     
  • 2.5, Адекват (ok), 09:48, 11/10/2015 [^] [^^] [^^^] [ответить]  
  • +/
    > Мне больше это  нравится - https://github.com/luigirizzo/netmap-ipfw
    > Реализация ipfw и dummynet работающая в пространстве пользователя

    А оно не будет тормозить и грузить проц, как squid например ?

     
     
  • 3.11, Ivan_83 (?), 16:14, 11/10/2015 [^] [^^] [^^^] [ответить]  
  • –1 +/
    Не будет, те то что оно юзерспейс не будет означать что всё упирается именно в пересылку трафика: юзерспейс-ядро.
     
  • 2.6, Аноним (-), 09:54, 11/10/2015 [^] [^^] [^^^] [ответить]  
  • +/
    по ходу, ipfw даже на вантузе запускали.
     
     
  • 3.10, Аноним (-), 15:48, 11/10/2015 [^] [^^] [^^^] [ответить]  
  • +2 +/
    Что значит по ходу? wipfw был точно.
     

  • 1.12, gavrila pavlov (?), 23:24, 11/10/2015 [ответить] [﹢﹢﹢] [ · · · ]  
  • –1 +/
    Непонятно, зачем сюда приплели этого графомана одинцова.
    Ссылка на его недобложек битая.
    Патч по гитхабовской ссылке тоже делал не он, там его вклад только в виде очередного идиотского комментария.
     
     
  • 2.22, Pavel Odintsov (ok), 11:39, 12/10/2015 [^] [^^] [^^^] [ответить]  
  • +9 +/
    Патч по гитхабовской ссылке как раз делан мною - и именно поэтому Марек упомянул меня в статье, там же есть упоминание, что и код был написан мною  :)

    Но за высокую оценку спасибо!

     
  • 2.24, Pavel Odintsov (ok), 11:47, 12/10/2015 [^] [^^] [^^^] [ответить]  
  • +4 +/
    > Непонятно, зачем сюда приплели этого графомана одинцова.
    > Ссылка на его недобложек битая.
    > Патч по гитхабовской ссылке тоже делал не он, там его вклад только
    > в виде очередного идиотского комментария.

    Я даже чуточку расширю свой пост. PoC изначально был вот здесь, https://github.com/pavel-odintsov/ixgbe-linux-netmap-single-queue/blob/master/ поиск по "CONFIG_NETMAP".  Но код был влит не отдельны коммитом, а сразу всего кода, потому что я правил живой драйвер и честно говоря не думал что что-то выйдет, но оно собралось и даже заработало как ожидалось.

    Марек уже собрал на базе этой очень черновой версии отличный удобный для применения патч - https://gist.github.com/majek/f7498fd15569dbb59ce3

    Ребята из CloudFlare отлично поработали и процентов 80 работы сделано именно ими =) Теперь это не просто PoC - а готовый для применения стабильный подход.

    P.S. зависть - это плохо =)

     
     
  • 3.28, nik (??), 10:08, 13/10/2015 [^] [^^] [^^^] [ответить]  
  • +/
    Зависть это хорошо для того кому завидут, и плохо для завидущего.
     
     
  • 4.38, count0krsk (ok), 22:31, 18/11/2015 [^] [^^] [^^^] [ответить]  
  • +/
    Ага, сглаживают люди завистью, так что плохо для обоих.
     

  • 1.13, Школьник (ok), 23:29, 11/10/2015 [ответить] [﹢﹢﹢] [ · · · ]  
  • –4 +/
    Зачем в Linux эти окаменелые древности из давно умершей ОС? Неужели нет своих инженеров у того же RedHat, SuSE, IBM (и кто там еще оплачивает разработку Linux), способных написать подобное? Зачем в Linux этот out-of-tree модуль, да еще и под жлобской несвободной 2-clause BSD-лицензией, а не под православной GPLv2? А если этот Luigi Rizzo закроет свой код, то это что, получится, что все пользователи NetMap под Linux, в том числе из CloudFlare, на дядю-проприераста поработали забесплатно?

    Я против подобных заигрываний, и думаю, что Торвальдс и Столлман (последний - своим авторитетным мнением) не позволят зайти этой инициативе слишком далеко.

     
     
  • 2.16, anonymous (??), 00:31, 12/10/2015 [^] [^^] [^^^] [ответить]  
  • +1 +/
    > Зачем в Linux этот out-of-tree модуль, да еще и под жлобской несвободной 2-clause BSD-лицензией, а не под православной GPLv2? А если этот Luigi Rizzo закроет свой код, то это что, получится, что все пользователи NetMap под Linux, в том числе из CloudFlare, на дядю-проприераста поработали забесплатно?

    Очень показательно, что это говорит человек, не написавший ни строчки открытого кода. Под любой лицензией.

     
     
  • 3.18, cmp (??), 05:58, 12/10/2015 [^] [^^] [^^^] [ответить]  
  • +/
    Мне интересно, а сколько нужно открыть ресторанов, чтобы утверждать, что какойто конкретный плохой, или может, чтобы утверждать что самолет не надежен нужно возглавить КБ, а разбиться на нем не достаточно?.. хватит бред нести
     
     
  • 4.39, count0krsk (ok), 22:37, 18/11/2015 [^] [^^] [^^^] [ответить]  
  • +/
    > Мне интересно, а сколько нужно открыть ресторанов, чтобы утверждать, что какойто конкретный плохой

    Утверждать что-либо может даже школьник, право на это закреплено Конституцией.
    А вот какой вес будет иметь мнение человека - зависит от его статуса в социальной группе. Например если я в кругу друзей скажу, что КДЕ - отстой, со мной большая часть согласится. Если в универе - там вообще не поймут про что это почти все из группы, ибо виндузятники. Ну и т.д.
    СМИ часто используют "говорящие головы" - экспертов, звезд и политиков для придания веса какому-то мнению правящих "элит".

     
  • 2.17, Аноним (-), 01:11, 12/10/2015 [^] [^^] [^^^] [ответить]  
  • +1 +/
    > Я против подобных заигрываний, и думаю, что Торвальдс и Столлман (последний - своим авторитетным мнением) не позволят зайти этой инициативе слишком далеко.

    Никто и не позволит ему окопаться в святом ядре. Во всяком случае, при первой попытке сабмита автор линуксового порта был обвинен в ереси Дейвом Миллером, поскольку попытался утверждать что 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

     
     
  • 3.21, Школьник (ok), 10:30, 12/10/2015 [^] [^^] [^^^] [ответить]  
  • –1 +/
    Шикарный тред, спасибо, анон!

    Еще вот это понравилось:

    >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.

    Похоже, им пора вызывать святую инквизицию и запасаться дровами.

     
  • 2.25, Pavel Odintsov (ok), 11:49, 12/10/2015 [^] [^^] [^^^] [ответить]  
  • +1 +/
    > Зачем в 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/ но он решительно больше жрет процессор и обеспечивает меньшие скорости захвата.

    За ссылку на хабру сори =( Но в другом месте статьи нету.

     
     
  • 3.27, Школьник (ok), 13:47, 12/10/2015 [^] [^^] [^^^] [ответить]  
  • +/
    Большое спасибо за статью! Узнал для себя немало нового.

    Но вот что касается 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.

     
     
  • 4.29, cebka (?), 13:15, 13/10/2015 [^] [^^] [^^^] [ответить]  
  • +/
    Автор может сменить лицензию на свой код, невзирая на то, gpl она, bsd или вообще public domain. А вот "добавить шапку" gpl - это как раз нарушение авторских прав как в случае gpl, так и в случае gpl кода. Единственный тип лицензий, по которому можно "добавить шапку", - это public domain like (cc0, unlicense). Впрочем, я практически полностью уверен, что вы пытаетесь толсто троллить, потому что иначе существование настолько тупых людей противоречит моему мировоззрению.
     
     
  • 5.30, Школьник (ok), 15:50, 13/10/2015 [^] [^^] [^^^] [ответить]  
  • +1 +/
    А вот и бздюшное трололо пожаловало.

    Ну расскажи-ка мне, умный, где в 2-clause лицензии BSD запрет на убирание шапки? Там написано, что при любых обстоятельствах шапка должна остаться. Но никто и никогда не запретит ни мне, ни кому-либо еще добавить GPL-шапку над BSD-шной, чтобы ЗАЩИТИТЬ мои изменения, которые я сделал в файле, от тупого воровства со стороны проприерастов и их подстилок-бздюшников. Лицензия BSD (в отличие от GPL) не запрещает никаких дополнительных ограничений на исходный код, иначе она не была бы столь любима именно за это проприерастами. Так что кушай да не обляпайся, и смотри дальше, как Apple, Microsoft, NetApp и прочие будут пользоваться трудами бздюков АБСОЛЮТНО нахаляву.

     
     
  • 6.31, cebka (?), 16:09, 13/10/2015 [^] [^^] [^^^] [ответить]  
  • –2 +/
    Так и есть, но добавление gpl шапки влияет только на внесенные изменения, но не на исходный код. Поэтому, конечно, так никто не делает - люди с психическими отклонениями такого характера просто неспособны писать код, который стоило бы защищать GPL. Исходный же посыл был в том, что единственные люди, способные *менять* лицензию на код - это авторы этого кода во всех случаях, кроме случая public domain like лицензий.
     
     
  • 7.32, Школьник (ok), 16:40, 13/10/2015 [^] [^^] [^^^] [ответить]  
  • +/
    >добавление gpl шапки влияет только на внесенные изменения

    Естественно. К сожалению, никто ведь не запретит загуглить оригинал файла под лицензией BSD. Но в любом случае уже хорошо, что бздюки изменений не смогут получить.

    >единственные люди, способные *менять* лицензию на код - это авторы этого кода во всех случаях

    Нет, BSD не запрещает налагать дополнительные ограничения на исходный код и превращать его в GPL-лицензированный. Ты правда думаешь, что Microsoft у себя в репозитории не добавила проприетарную лицензию, когда дернула из BSD код TCP/IP-стека, "случайно" позабыв с бздюками поделиться?

     
     
  • 8.33, cebka (?), 17:12, 13/10/2015 [^] [^^] [^^^] [ответить]  
  • +1 +/
    Да, удивительная каша в голове Повторяю для закрепления материала НЕВОЗМОЖНО в... текст свёрнут, показать
     
     
  • 9.35, Школьник (ok), 18:06, 13/10/2015 [^] [^^] [^^^] [ответить]  
  • +/
    У кого каша - у тебя, бздоид Читай, что здесь написано там даже пример исходни... текст свёрнут, показать
     
  • 6.34, Нимано (?), 17:20, 13/10/2015 [^] [^^] [^^^] [ответить]  
  • +/
    > как Apple, Microsoft, NetApp и Школьник будут пользоваться трудами бздюков АБСОЛЮТНО нахаляву.

    гордись!

     
  • 3.36, sdaasd (?), 13:27, 15/10/2015 [^] [^^] [^^^] [ответить]  
  • +/
    Ну вообще-то есть PF_RING, который используется в связки со Snort и Suricata для реализациии функциональности IDS/IPS в Linux
    Есть и другие технологгии высокоскоросной обработки пакетов на чиная от UIO-DMA заканчивая INTEL PPDK.

     
     
  • 4.37, sdaasd (?), 13:31, 15/10/2015 [^] [^^] [^^^] [ответить]  
  • +/
    Причем Intel DPDK гораздо перспективнее любой реализации хаков (netmap , pf_ring) минуя TCP/IP стек. Так как оптимизирован под конкретное железо.
     

  • 1.14, gavrila pavlov (?), 23:36, 11/10/2015 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    Хотя нет, оно отметилось в виде ценного совета:

    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.

     
  • 1.15, Аноним (-), 00:23, 12/10/2015 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    Ссылочку бы поправить - http://www.stableit.ru/2015/06/how-to-run-netmap-on-single-queue-and.html
     
     
  • 2.23, Pavel Odintsov (ok), 11:40, 12/10/2015 [^] [^^] [^^^] [ответить]  
  • +/
    > Ссылочку бы поправить - http://www.stableit.ru/2015/06/how-to-run-netmap-on-single-queue-and.html

    Да, ссылко верное :) Спасибо, надеюсь модераторы починят.

     

     Добавить комментарий
    Имя:
    E-Mail:
    Текст:



    Партнёры:
    PostgresPro
    Inferno Solutions
    Hosting by Hoster.ru
    Хостинг:

    Закладки на сайте
    Проследить за страницей
    Created 1996-2024 by Maxim Chirkov
    Добавить, Поддержать, Вебмастеру