The OpenNET Project / Index page

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

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

Добившись возможности обрабатывать на штатном сетевом стеке ядра 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
Тип: Практикум
Ключевые слова: cloudflare, network, linux
При перепечатке указание ссылки на opennet.ru обязательно
Обсуждение Ajax/Линейный | Раскрыть все сообщения | 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 эти окаменелые древности из давно умершей ОС Неужели нет своих ин... весь текст скрыт [показать]
     
     
  • 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 +/
    Никто и не позволит ему окопаться в святом ядре Во всяком случае, при первой по... весь текст скрыт [показать]
     
     
  • 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 [^] [ответить]     [к модератору]  
  • +/
    Большое спасибо за статью Узнал для себя немало нового Но вот что касается Net... весь текст скрыт [показать]
     
     
  • 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 +/
    Да, удивительная каша в голове. Повторяю для закрепления материала: НЕВОЗМОЖНО взять BSD лицензированный код и превратить его в GPL лицензированный код без согласия АВТОРА(ов). Но бинарный файл микса кода BSD/GPL будет GPL, это верно. Не так давно меня просил один человек предоставить ему право пользоваться моим кодом не под BSD/MIT лицензией, а под public domain, чтобы не публиковать информацию о лицензии (он, к слову, мое согласие получил).

    Следующий момент: какие ограничения предполагается налагать на код, который авторы распространяют по BSD лицензии? Взять его, поменять и не поделиться? Да, это возможно. Но от этого не застрахован и GPL код, потому что тот же Microsoft может придти к автору и попросить его коммерческую лицензию, и *АВТОР* вправе это сделать. На чем, кстати, живет не одна сотня "opensource" контор. И BSD лицензия им, конечно, не подходит - ее не продать твоим любимым проприетарастам, а вот dual-license с GPL/royalty free - запросто.

     
     
  • 9.35, Школьник (ok), 18:06, 13/10/2015 [^] [ответить]    [к модератору]  
  • +/
    У кого каша - у тебя, бздоид?
    Читай, что здесь написано (там даже пример исходника есть с шапкой GPL над шапкой BSD)  https://www.softwarefreedom.org/resources/2007/gpl-non-gpl-collaboration.html

    Убрать шапку BSD может только лишь автор, это ежу понятно. Добавить сверху шапку GPL, не убирая при этом BSD, может любой и каждый, при этом все изменения в этот код с двумя шапками автоматически должны удовлетворять обеим лицензиям сразу. То есть, по сути должны удовлетворять GPL, плюс требование оставить шапку BSD на месте. А значит, бздюшатам кукиш, а не эти изменения, вот такая вот "радость" для них, ущербных! )))

     
  • 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:
    Заголовок:
    Текст:


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