Pull to refresh
34
0
Send message

Захват пакетов в Linux на скорости десятки миллионов пакетов в секунду без использования сторонних библиотек

Reading time8 min
Views86K
Моя статья расскажет Вам как принять 10 миллионов пакетов в секунду без использования таких библиотек как Netmap, PF_RING, DPDK и прочие. Делать мы это будем силами обычного Линукс ядра версии 3.16 и некоторого количества кода на С и С++.



Сначала я хотел бы поделиться парой слов о том, как работает pcap — общеизвестный способ захвата пакетов. Он используется в таких популярных утилитах как iftop, tcpdump, arpwatch. Кроме этого, он отличается очень высокой нагрузкой на процессор.

Итак, Вы открыли им интерфейс и ждете пакетов от него используя обычный подход — bind/recv. Ядро в свою очередь получает данные из сетевой карты и сохраняет в пространстве ядра, после этого оно обнаруживает, что пользователь хочет получить его в юзер спейсе и передает через аргумент команды recv, адрес буфера куда эти данные положить. Ядро покорно копирует данные (уже второй раз!). Выходит довольно сложно, но это не все проблемы pcap.

Кроме этого, вспомним, что recv — это системный вызов и вызываем мы его на каждый пакет приходящий на интерфейс, системные вызовы обычно очень быстры, но скорости современных 10GE интерфейсов (до 14.6 миллионов вызовов секунду) приводят к тому, что даже легкий вызов становится очень затратным для системы исключительно по причине частоты вызовов.

Также стоит отметить, что у нас на сервере обычно более 2х логических ядер. И данные могут прилететь на любое их них! А приложение, которое принимает данные силами pcap использует одно ядро. Вот тут у нас включаются блокировки на стороне ядра и кардинально замедляют процесс захвата — теперь мы занимаемся не только копированием памяти/обработкой пакетов, а ждем освобождения блокировок, занятых другими ядрами. Поверьте, на блокировки может зачастую уйти до 90% процессорных ресурсов всего сервера.

Хороший списочек проблем? Итак, мы их все геройски попробуем решить!
Читать дальше →
Total votes 113: ↑112 and ↓1+111
Comments77

Hakyll для начинающих

Reading time4 min
Views11K
Однажды вы, как и я какое-то время назад, решаете создать свою персональную страничку с блогом (ну или без). Существует множество способов достигнуть задуманного, в зависимости от вашего опыта программирования, уровня лени ну и степени гикнутости. Но лично мне кажется, что заводить хостинг и домен и создавать серьезный “взрослый” сайт просто чтобы показать себя как-то слишком избыточно. Потому для достижения данной цели вы можете пойти более простым путем — сделать статический сайт.

Статические сайты быстрые, безопасные, легкие в публикации и могут управляться через систему контроля версий. Jasper Van der Jeugt


Я надеюсь, что не нужно приводить доказательства сказанному Йеспером, так как все и так достаточно понятно.

В тот день, когда я принял решение сделать свою персональную страничку, я обнаружил что возможно разместить оную на github. Для публикации будет достаточно вызвать git push -u origin master из своего репозитория, так что все должно быть достаточно просто. Но для начала, нам нужно найти какой-нибудь builder статических сайтов, чтобы с его помощью одни раз все настроить, запушать и затем время от времени добавлять свои новые посты, информацию о проектах, ну и что бы вам там хотелось. Настроить популярнейшее решение Jekyll на моей Windows машине оказалось как-то слишком проблематично, потому немного полазив в интернете я нашел замечательную альтернативу — Hakyll. А так как у меня давно уже чесались руки попробовать что-нибудь сделать на Хаскелле я решил что стоит попробовать. Если вам интересно последовать по моим стопам, добро пожаловать.

Читать дальше →
Total votes 18: ↑17 and ↓1+16
Comments12

Melange — DSL для сетевых протоколов

Reading time8 min
Views16K
Всем программистам рано или поздно приходится передавать данные. Ни для кого не секрет, что библиотек сериализации в Java существует примерно >9000, а в C++ они вроде и есть, а вроде их и нет. К счастью для большинства, несколько лет назад появился Google Protobuf, который принёс достаточно удобный способ определять структуры данных и быстро завоевал всенародную любовь. Это была фактически первая, доступная широким массам библиотека, позволяющая гонять по сети готовые структуры данных, не связываясь при этом с чем-то вроде XML. На дворе был 2008 год.

Вернёмся немного назад. В 2006 году простой индийский программист (как бы подозрительно это ни звучало!) Анил Мадхавапедди, один из самых известных сейчас в мире OCaml-разработчиков и автор свежевышедшей книги Real World OCaml, защищал в Кембридже кандидатскую диссертацию. Именно о ней я сегодня вам и расскажу.

Анил сразу пошёл дальше, чем Google. Он сразу подумал, для чего люди обычно пересылают по сети какие-то формализованные структуры данных? Чтобы реализовать какой-то протокол. А что такое протокол? Это какой-то конечный автомат. А где мы можем взять хороший пример сложного, хорошо спроектированного и проверенного временем протокола? Да прямо в обычном сетевом стеке! Итак, были взяты набор сетевых структур данных и протоколов: Ethernet frame, IPv4, ICMP, TCP, UDP, SSH, DNS и DHCP и постановка задачи: большая часть этих протоколов (особенно SSH и DNS) реализуются, что называется «руками», а хочется, чтобы не было типичных для C переполнений буфера, все переходы совершались автоматически, это всё можно было верифицировать, и чтобы работало быстро, а не как обычно.

Поскольку никто не будет читать диссертацию, сразу скажу: это более чем удалось. По результатам работы были написаны референсные реализации DNS и SSH-сервера и произведено сравнение с BIND и OpenSSH. OCaml-реализации давали по сравнению с традиционными прирост производительности от незначительного, до почти двухкратного. Кроме того была найдена ошибка в RFC на SSH (рабочая группа была уведомлена и RFC исправлен). О том, что было сделано, и как с этим жить, читайте под катом.
Мне интересно.
Total votes 68: ↑68 and ↓0+68
Comments18

Красной таблетки не существует

Reading time5 min
Views128K

О чем это


Я долгое время был адептом идей о равенстве, свободе и братстве том, что существует красная таблетка.

— Что можно с помощью ООП решить все проблемы масштабирования программ;
— Что с помощью одной методологии можно выстроить разработку проектов;
— Что с помощью нескольких гениальных книг можно научиться проектировать интерфейсы.

На самом деле, после пары десятков проектов я пришел к выводу, что все это — не более чем заблуждения, и чудеса происходят только в книгах авторов, которые делают на своих бестселлерах миллионы. Или в головах консультантов, которые делают деньги, продавая вам фуфло в виде Agile, KPI и прочих умных слов.

Я не сделаю, возможно, в этом посте никаких открытий. Но сэкономлю вам пару лет, если вы решитесь поверить моему опыту.

Читать дальше →
Total votes 355: ↑326 and ↓29+297
Comments348

Сколько стоит SDN?

Reading time4 min
Views19K
Миллиард долларов наличными – именно столько VMware готов заплатить за один из самых «горячих» стартапов Силиконовой Долины – компанию Nicira. Общая сумма сделки будет составлять $1,26 млрд. Миллиардный стартап Nicira создали трое университетских преподавателей менее чем 5 лет назад. Nicira – это пионер в области программно-конфигурируемых сетей (ПКС, на английском – software defined networks, SDN).


Так выглядит миллиард наличными — просто для наглядности

Компания Nicira была основана в 2007 г. тремя преподавателями университетов: Мартином Касадо (Martin Casado) и Ником МакКьоуном (Nick McKeown) (Стэндфордский университет) и Скоттом Шенкером (Scott Shenker) из Беркли, одними из первых, начавших разработку технологии ПКС.


Мартин Касадо

Читать дальше →
Total votes 76: ↑70 and ↓6+64
Comments98

Information

Rating
Does not participate
Location
Россия
Registered
Activity