SlideShare a Scribd company logo
1 of 34
NETMAP (от Luigi Rizzo)
Простой и удобный открытый фреймворк для
обработки трафика на скоростях 10Gbit/s или
                 14 Mpps
              Евгений Ёрхов
               Компания IXI
Структура доклада
• Анализ проблемы производительности стеков
  TCP/IP в OS общего назначения
• Краткий обзор известных подходов по
  увеличению производительности на больших
  скоростях
• Быстрое введение в Netmap, архитектура,
  основные операции
• Примеры: генератор трафика, компонент
  подсистемы DDOS защиты
• Обзор производительности
Анализ overhead’ов в стеках OS общего назначения

ОСНОВНЫЕ ПРОБЛЕМЫ ПРИ
СКОРОСТНОЙ ОБРАБОТКЕ ПАКЕТОВ
Структуры данных NIC и их взаимосвязь со
         структурами данных OS
Вычисляем наносекунды
KERNEL SPACE                   USER SPACE
#define D(format, ...)         #define D(format, ...)
do {                           do {
 struct timespec __xxts;         if (!verbose) break;
 nanotime(&__xxts);               struct timespec _xxts;
 printf("%03d.%09d %s [%d]      clock_gettime(CLOCK_REALTIME,
  "format "n",                   &_xxts)
  (int)__xxts.tv_sec %          fprintf(stderr, "%03d.%09d %s
                                  [%d] " format
  1000, (int)__xxts.tv_nsec,
                                   "n”,(int)_xxts.tv_sec
  __FUNCTION__, __LINE__,
                                  %1000,  (int)_xxts.tv_nsec,
   ##__VA_ARGS__);
                                  __FUNCTION__, __LINE__,
} while (0)
                                  ##__VA_ARGS__);
                               } while (0)
Путешествие к центру ядра через API
File              Function / description                      Time ns   Delta ns
user_program      sendto() system call                        8         96
uipc_syscalls.c   sys_sendto()                                104
uipc_socket.c     sendit()                                    111       137
                  kern_sendit()                               118
                  sosend()                                    ---
                  sosend_dgram()                              146
                  sockbuf locking, mbuf allocation, copying
udp_usrreq.c      udp_send()
                  udp_output()                                273       57
ip_output.c       Ip_output()                                 330       198
                  Route lookup, ip header setup
if_ethersubr.c    Ether_output                                528       162
                  MAC header lookup and copy, loopback        690
                  ether_output_frame
ixgbe.c           ixgbe_mq_start()                            698
                  ixgbe_mq_start_locked()                     720       220
                  ixgbe_xmit                                  730
-                 On wire                                     950
Современные техники увеличения
       производительности
• Socket API: BPF (FreeBSD), AF_PACKET (Linux)
• Packet filter hooks: Netgraph (FreeBSD),
  Netfilter (Linux), Ndis miniport drivers (MS
  Windows)
• Direct buffer access: PF_RING_DNA (Linux),
  PACKET_MMAP (Linux), UIO-IXGBE (Linux)
Структуры данных, основные операции, примитивы и особенности

АРХИТЕКТУРА NETMAP
Подход NETMAP к обработке
   пакетов на больших скоростях
• Доступ к NIC в обход стека OS
• Защита памяти в хрупком kernel space
• Zero copy операции при форвардинге
  пакетов
• Линейные, лёгкие структуры данных
• pre-alloceted буферы для пакетов и
  метаданных
• Поддержка множественных очередей NIC
Схема взаимодействия NETMAP, NIC и OS

NIC пересылает данные между
сетью и оперативной памятью


ядро OS выполняет защиту
памяти

ядро OS обеспечивает
многозадачность и
синхронизацию

NETMAP обеспечивает
механизмы управления и доступа
к данным для приложения
Структуры данных NETMAP экспортируемые в
user space

Пакетные буферы
( packet buffers )

Кольцевые
буферы-очереди
( netmap rings )

Дескриптор
интерфейса
( netmap_if )
Разделение ответственности
Приложение user space         Ядерная часть
• Управляет слотами в         • NETMAP управляет
  «netmap_ring»                 границами в netmap_rings
• Управляет текущей           • NIC DMA engine
  позицией (номер слота) в      заполняет/читает пакетные
  «netmap_ring»                 буферы в позициях кроме
• Заполняет/читает              как начиная с
  пакетные буферы,              «cur» по «cur + avail»
  начиная с позиции           • NETMAP управляет
  «cur» по «cur + avail -1»     синхронизацией метаданных
• Управляет полем               в «netmap_rings» и структур
  «netmap_ring->avail»          NIC
NETMAP API Основные операции
• /dev/netmap
• ioctl(…, NIOCREGIF, arg)
• ioctl (…, NIOCTXSYNC) – синхронизация очередей
  (netmap rings) для отправки с соответствующими
  очередями сетевой карты, что эквивалентно
  отправке пакетов в сеть, синхронизация начинается
  с позиции cur
• ioctl (…, NIOCRXSYNC) – синхронизация очередей
  сетевой карты с соответствующими очередями
  netmap rings, для получения пакетов, поступивших
  из сети. Запись осуществляется начиная с позиции
  cur
Примитивы блокирования
Используются стандартные механизмы OS
• select()
• poll()

Результат:
• Отсутствие нагрузки на CPU
• Обработка несколько пакетов за
  проход
Дополнительные особенности

Поддержка множественных очередей NIC

Передача/приём пакетов в/из host stack

Защита памяти

Zero copy packet forwarding
Zero copy packet forwarding
...
ns_src = &src_nr_rx->slot[i]; /* locate src and dst slots */
ns_dst = &dst_nr_tx->slot[j];

/* swap the buffers */
tmp = ns_dst->buf_index;
ns_dst->buf_index = ns_src->buf_index;
ns_src->buf_index = tmp;

/* update length and flags */
ns_dst->len = ns_src->len;
ns_src->len = 0;

/* tell kernel to update addresses in the NIC rings */
ns_dst->flags = ns_src->flags = BUF_CHANGED;
dst_nr_tx->avail--; // Для большей ясности кода проверка
src_nr_rx->avail--; // avail > 0 не сделана
...
Прототипы: генератор трафика, компонент подсистемы очистки
трафика в системе DDOS защиты

NETMAP ПРИМЕРЫ
Прототип генератора трафика
fds.fd = open("/dev/netmap", O_RDWR);
strcpy(nmr.nm_name, "ix0");
ioctl(fds.fd, NIOCREG, &nmr);
p = mmap(0, nmr.memsize, fds.fd);
nifp = NETMAP_IF(p, nmr.offset);
fds.events = POLLOUT;
for (;;) {
   poll(fds, 1, -1);
   for (r = 0; r < nmr.num_queues; r++) {
      ring = NETMAP_TXRING(nifp, r);
      while (ring->avail-- > 0) {
         i = ring->cur;
         buf = NETMAP_BUF(ring, ring->slot[i].buf_index);
         //... store the payload into buf ...
         ring->slot[i].len = ... // set packet length
         ring->cur = NETMAP_NEXT(ring, i);
       }
   }
}
NETMAP API в подсистеме очистки
         трафика DDOS
  Основными требованиями к подсистеме
  очистки трафика выбраны
• возможность фильтрации пакетов на предельных
  скоростях
• возможности по обработке пакетов в системе
  фильтров, реализующие различные, известные на
  сегодняшний день техники противодействия
  DDOS атакам
Подготовка и включение режима
           NETMAP
struct nmreq nmr;
…
for (i=0, i < MAX_THREADS, i++) {
 …
 targ[i]->nmr.ringid = i | NETMAP_HW_RING;
 …
 ioctl(targ[i].fd, NIOCREGIF, &targ[i]->nmr);
 …
 targ[i]->mem = mmap(0, targ[i]->nmr.nr_memsize,
                 PROT_WRITE | PROT_READ, MAP_SHARED, targ[i].fd, 0);

 targ[i]->nifp = NETMAP_IF(targ[i]->mem, targ[i]->nmr.nr_offset);
 targ[i]->nr_tx = NETMAP_TXRING(targ[i]->nifp, i);
 targ[i]->nr_rx = NETMAP_RXRING(targ[i]->nifp, i);
 …
}
Открываем очереди для обмена с
           host stack
struct nmreq nmr;
…
  /* NETMAP ассоциирует   netmap   ring   с   наибольшим   ringid   с
сетевым стеком */

targ->nmr.ringid = stack_ring_id | NETMAP_SW_RING;
…
ioctl(targ.fd, NIOCREGIF, &targ->nmr);
…
Стартуем thread’ы каждая из которых
       работает со своей очередью
for ( i = 0; i < MAX_THREADS; i++ ) {
    /* start first rx thread */
    targs[i].used = 1;
    if (pthread_create(&targs[i].thread, NULL, rx_thread, &targs[i]) == -1) {

       D("Unable to create thread %d", i);
       exit(-1);
   }
}
…
/* Wait until threads will finish their loops */
for ( i = 0; i < MAX_THREAD; i++ ) {
    if( pthread_join(targs[i].thread, NULL) ) {
      ioctl(targs[i].fd, NIOCUNREGIF, &targs[i].nmr);
      close(targs[i].fd);
    }
    …
}
Ожидание пакетов в rx_thread()
while(targ->used) {
    ret = poll(fds, 2, 1 * 100);
    if (ret <= 0)
      continue;
  …
  /* run rings processing */
  for ( i = targ->begin; i < targ->end; i++) {
      ioctl(targ->fd, NIOCTXSYNC, 0);
      ioctl(targ->fd_stack, NIOCTXSYNC, 0);
      targ->rx = NETMAP_RXRING(targ->nifp, i);
      targ->tx = NETMAP_TXRING(targ->nifp, i);
      if (targ->rx->avail > 0)
      {
        …
      /* process ring */
      cnt = process_incoming(targ->id, targ->rx, targ->tx,
                              targ->stack_rx, targ->stack_tx);
       …
   }
}
Получение доступа к raw пакетам
           process_incoming()
limit = nic_rx->avail;
while ( limit-- > 0 ) {
    struct netmap_slot *rs = &nic_rx->slot[j]; // rx slot
    struct netmap_slot *ts = &nic_tx->slot[k]; // tx slot
    eth = (struct ether_header *)NETMAP_BUF(nic_rx,
             rs->buf_idx);
    if (eth->ether_type != htons(ETHERTYPE_IP)) {
      goto next_packet; // pass non-ip packet
    }
    /* get ip header of the packet */
    iph = (struct ip *)(eth + 1);
    …
}
ПРОИЗВОДИТЕЛЬНОСТЬ
Метрики
Per-bytes                    Per-packets
• Измерение                  • Измерение
  осуществляется на основе     осуществляется на основе
  отношения показателей к      отношения показателей к
  передаваемым полезным        количеству
  данным (payload)             обрабатываемых пакетов
• Поскольку NETMAP           • Интересно измерить
  использует zero copy         загрузку CPU в отношении
  forwarding – результат       к количеству
  очевиден                     обрабатываемых 64-
                               байтовых пакетов
Тестовое железо и OS

i7-870 4-core 2.93GHz CPU (3.2 GHz в режиме
turbo-boost), оперативная память на частоте
1.33GHz, в систему установлена двухпортовая
сетевая карта на базе чипсета Intel 82599



FreeBSD HEAD/amd64, Апрель 2012 г.
Скорость в зависимости от частоты
     процессора, ядер и т.п.
Загрузка процессора на одном ядре

      Частота   Средняя загрузка CPU
      900 MHz   100%
      1.2 GHz   80%
      3GHz      55%
Скорость передачи/приёма, в
зависимости от размера пакета
Скорость в зависимости от количества
  пакетов за один системный вызов
Скорости фильтрации flood-атак
   сервером очистки трафика RUSCREEN
Наименование атаки        Способ противодействия        Скорости обработки
(на случайном
распределении src_addr)
Synflood                  SYNCOOKIE                     12 883 408 pps
UDP flood                 PPS limiting, blacklisting,   13 854 096 pps
                          greylisting
ICMP flood                PPS limiting, blacklisting,   13 780 314 pps
                          greylisting
Смешанный flood           SYNCOOKIE, stateful           11 083 147 pps
                          inspection, PPS limiting,
                          blacklisting, greylisting
Заключение
• В докладе рассмотрены основные возможности NETMAP по
  обработке трафика на скоростях 10Gbit/s
• Сделан сравнительный анализ NETMAP с другими системами
  скоростной обработки пакетов
• Подтверждены тесты производительности, сделанные автором
  NETMAP – Luigi Rizzo
• Продемонстрированы основные приёмы использования
  NETMAP на примерах прототипов генератора трафика и
  подсистемы очистки трафика.

  Благодаря подходу, реализованному в NETMAP, автору доклада
  удалось добиться нужно производительности при фильтрации
  трафика в проекте DDOS-защиты RUSCREEN, позволяющей
  работать на скоростях 14Mpps.
БОЛЬШОЕ СПАСИБО ЗА ВНИМАНИЕ !

More Related Content

What's hot

Использование Time-Stamp Counter для измерения времени выполнения кода на пр...
Использование Time-Stamp Counter для измерения времени выполнения кода  на пр...Использование Time-Stamp Counter для измерения времени выполнения кода  на пр...
Использование Time-Stamp Counter для измерения времени выполнения кода на пр...Mikhail Kurnosov
 
Семинар 5. Многопоточное программирование на OpenMP (часть 5)
Семинар 5. Многопоточное программирование на OpenMP (часть 5)Семинар 5. Многопоточное программирование на OpenMP (часть 5)
Семинар 5. Многопоточное программирование на OpenMP (часть 5)Mikhail Kurnosov
 
Лекция 7: Многопоточное программирование: часть 3 (OpenMP)
Лекция 7: Многопоточное программирование: часть 3 (OpenMP)Лекция 7: Многопоточное программирование: часть 3 (OpenMP)
Лекция 7: Многопоточное программирование: часть 3 (OpenMP)Mikhail Kurnosov
 
Семинар 2. Многопоточное программирование на OpenMP (часть 2)
Семинар 2. Многопоточное программирование на OpenMP (часть 2)Семинар 2. Многопоточное программирование на OpenMP (часть 2)
Семинар 2. Многопоточное программирование на OpenMP (часть 2)Mikhail Kurnosov
 
ПВТ - осень 2014 - Лекция 6 - Атомарные операции. Внеочередное выполнение инс...
ПВТ - осень 2014 - Лекция 6 - Атомарные операции. Внеочередное выполнение инс...ПВТ - осень 2014 - Лекция 6 - Атомарные операции. Внеочередное выполнение инс...
ПВТ - осень 2014 - Лекция 6 - Атомарные операции. Внеочередное выполнение инс...Alexey Paznikov
 
ПВТ - весна 2015 - Лекция 3. Реентерабельность. Сигналы. Локальные данные пот...
ПВТ - весна 2015 - Лекция 3. Реентерабельность. Сигналы. Локальные данные пот...ПВТ - весна 2015 - Лекция 3. Реентерабельность. Сигналы. Локальные данные пот...
ПВТ - весна 2015 - Лекция 3. Реентерабельность. Сигналы. Локальные данные пот...Alexey Paznikov
 
Лекция 5. Основы параллельного программирования (Speedup, Amdahl's law, Paral...
Лекция 5. Основы параллельного программирования (Speedup, Amdahl's law, Paral...Лекция 5. Основы параллельного программирования (Speedup, Amdahl's law, Paral...
Лекция 5. Основы параллельного программирования (Speedup, Amdahl's law, Paral...Mikhail Kurnosov
 
Кулагин И.И., Пазников А.А., Курносов М.Г. Оптимизация информационных обменов...
Кулагин И.И., Пазников А.А., Курносов М.Г. Оптимизация информационных обменов...Кулагин И.И., Пазников А.А., Курносов М.Г. Оптимизация информационных обменов...
Кулагин И.И., Пазников А.А., Курносов М.Г. Оптимизация информационных обменов...Alexey Paznikov
 
Лекция 5. Основы параллельного программирования (Speedup, Amdahl's law, paral...
Лекция 5. Основы параллельного программирования (Speedup, Amdahl's law, paral...Лекция 5. Основы параллельного программирования (Speedup, Amdahl's law, paral...
Лекция 5. Основы параллельного программирования (Speedup, Amdahl's law, paral...Mikhail Kurnosov
 
Семинар 6. Многопоточное программирование на OpenMP (часть 6)
Семинар 6. Многопоточное программирование на OpenMP (часть 6)Семинар 6. Многопоточное программирование на OpenMP (часть 6)
Семинар 6. Многопоточное программирование на OpenMP (часть 6)Mikhail Kurnosov
 
Лекция 4. Векторизация кода (Code vectorization: SSE, AVX)
Лекция 4. Векторизация кода (Code vectorization: SSE, AVX)Лекция 4. Векторизация кода (Code vectorization: SSE, AVX)
Лекция 4. Векторизация кода (Code vectorization: SSE, AVX)Mikhail Kurnosov
 
CUDA Course 2010 at MSU
CUDA Course 2010 at MSUCUDA Course 2010 at MSU
CUDA Course 2010 at MSUlarhat
 
ПВТ - весна 2015 - Лекция 7. Модель памяти С++. Внеочередное выполнение инстр...
ПВТ - весна 2015 - Лекция 7. Модель памяти С++. Внеочередное выполнение инстр...ПВТ - весна 2015 - Лекция 7. Модель памяти С++. Внеочередное выполнение инстр...
ПВТ - весна 2015 - Лекция 7. Модель памяти С++. Внеочередное выполнение инстр...Alexey Paznikov
 
ПВТ - осень 2014 - Лекция 5 - Многопоточное программирование в языке С++. Р...
ПВТ - осень 2014 - Лекция 5 - Многопоточное программирование в языке С++.   Р...ПВТ - осень 2014 - Лекция 5 - Многопоточное программирование в языке С++.   Р...
ПВТ - осень 2014 - Лекция 5 - Многопоточное программирование в языке С++. Р...Alexey Paznikov
 
11 встреча — Введение в GPGPU (А. Свириденков)
11 встреча — Введение в GPGPU (А. Свириденков)11 встреча — Введение в GPGPU (А. Свириденков)
11 встреча — Введение в GPGPU (А. Свириденков)Smolensk Computer Science Club
 
Семинар 4. Многопоточное программирование на OpenMP (часть 4)
Семинар 4. Многопоточное программирование на OpenMP (часть 4)Семинар 4. Многопоточное программирование на OpenMP (часть 4)
Семинар 4. Многопоточное программирование на OpenMP (часть 4)Mikhail Kurnosov
 
Семинар 9. Параллельное программирование на MPI (часть 2)
Семинар 9. Параллельное программирование на MPI (часть 2)Семинар 9. Параллельное программирование на MPI (часть 2)
Семинар 9. Параллельное программирование на MPI (часть 2)Mikhail Kurnosov
 
Лекция 6. Стандарт OpenMP
Лекция 6. Стандарт OpenMPЛекция 6. Стандарт OpenMP
Лекция 6. Стандарт OpenMPMikhail Kurnosov
 
Лекция 1. Основные понятия стандарта MPI. Дифференцированные обмены
Лекция 1. Основные понятия стандарта MPI. Дифференцированные обменыЛекция 1. Основные понятия стандарта MPI. Дифференцированные обмены
Лекция 1. Основные понятия стандарта MPI. Дифференцированные обменыAlexey Paznikov
 
ПВТ - весна 2015 - Лекция 2. POSIX Threads. Основные понятия многопоточного п...
ПВТ - весна 2015 - Лекция 2. POSIX Threads. Основные понятия многопоточного п...ПВТ - весна 2015 - Лекция 2. POSIX Threads. Основные понятия многопоточного п...
ПВТ - весна 2015 - Лекция 2. POSIX Threads. Основные понятия многопоточного п...Alexey Paznikov
 

What's hot (20)

Использование Time-Stamp Counter для измерения времени выполнения кода на пр...
Использование Time-Stamp Counter для измерения времени выполнения кода  на пр...Использование Time-Stamp Counter для измерения времени выполнения кода  на пр...
Использование Time-Stamp Counter для измерения времени выполнения кода на пр...
 
Семинар 5. Многопоточное программирование на OpenMP (часть 5)
Семинар 5. Многопоточное программирование на OpenMP (часть 5)Семинар 5. Многопоточное программирование на OpenMP (часть 5)
Семинар 5. Многопоточное программирование на OpenMP (часть 5)
 
Лекция 7: Многопоточное программирование: часть 3 (OpenMP)
Лекция 7: Многопоточное программирование: часть 3 (OpenMP)Лекция 7: Многопоточное программирование: часть 3 (OpenMP)
Лекция 7: Многопоточное программирование: часть 3 (OpenMP)
 
Семинар 2. Многопоточное программирование на OpenMP (часть 2)
Семинар 2. Многопоточное программирование на OpenMP (часть 2)Семинар 2. Многопоточное программирование на OpenMP (часть 2)
Семинар 2. Многопоточное программирование на OpenMP (часть 2)
 
ПВТ - осень 2014 - Лекция 6 - Атомарные операции. Внеочередное выполнение инс...
ПВТ - осень 2014 - Лекция 6 - Атомарные операции. Внеочередное выполнение инс...ПВТ - осень 2014 - Лекция 6 - Атомарные операции. Внеочередное выполнение инс...
ПВТ - осень 2014 - Лекция 6 - Атомарные операции. Внеочередное выполнение инс...
 
ПВТ - весна 2015 - Лекция 3. Реентерабельность. Сигналы. Локальные данные пот...
ПВТ - весна 2015 - Лекция 3. Реентерабельность. Сигналы. Локальные данные пот...ПВТ - весна 2015 - Лекция 3. Реентерабельность. Сигналы. Локальные данные пот...
ПВТ - весна 2015 - Лекция 3. Реентерабельность. Сигналы. Локальные данные пот...
 
Лекция 5. Основы параллельного программирования (Speedup, Amdahl's law, Paral...
Лекция 5. Основы параллельного программирования (Speedup, Amdahl's law, Paral...Лекция 5. Основы параллельного программирования (Speedup, Amdahl's law, Paral...
Лекция 5. Основы параллельного программирования (Speedup, Amdahl's law, Paral...
 
Кулагин И.И., Пазников А.А., Курносов М.Г. Оптимизация информационных обменов...
Кулагин И.И., Пазников А.А., Курносов М.Г. Оптимизация информационных обменов...Кулагин И.И., Пазников А.А., Курносов М.Г. Оптимизация информационных обменов...
Кулагин И.И., Пазников А.А., Курносов М.Г. Оптимизация информационных обменов...
 
Лекция 5. Основы параллельного программирования (Speedup, Amdahl's law, paral...
Лекция 5. Основы параллельного программирования (Speedup, Amdahl's law, paral...Лекция 5. Основы параллельного программирования (Speedup, Amdahl's law, paral...
Лекция 5. Основы параллельного программирования (Speedup, Amdahl's law, paral...
 
Семинар 6. Многопоточное программирование на OpenMP (часть 6)
Семинар 6. Многопоточное программирование на OpenMP (часть 6)Семинар 6. Многопоточное программирование на OpenMP (часть 6)
Семинар 6. Многопоточное программирование на OpenMP (часть 6)
 
Лекция 4. Векторизация кода (Code vectorization: SSE, AVX)
Лекция 4. Векторизация кода (Code vectorization: SSE, AVX)Лекция 4. Векторизация кода (Code vectorization: SSE, AVX)
Лекция 4. Векторизация кода (Code vectorization: SSE, AVX)
 
CUDA Course 2010 at MSU
CUDA Course 2010 at MSUCUDA Course 2010 at MSU
CUDA Course 2010 at MSU
 
ПВТ - весна 2015 - Лекция 7. Модель памяти С++. Внеочередное выполнение инстр...
ПВТ - весна 2015 - Лекция 7. Модель памяти С++. Внеочередное выполнение инстр...ПВТ - весна 2015 - Лекция 7. Модель памяти С++. Внеочередное выполнение инстр...
ПВТ - весна 2015 - Лекция 7. Модель памяти С++. Внеочередное выполнение инстр...
 
ПВТ - осень 2014 - Лекция 5 - Многопоточное программирование в языке С++. Р...
ПВТ - осень 2014 - Лекция 5 - Многопоточное программирование в языке С++.   Р...ПВТ - осень 2014 - Лекция 5 - Многопоточное программирование в языке С++.   Р...
ПВТ - осень 2014 - Лекция 5 - Многопоточное программирование в языке С++. Р...
 
11 встреча — Введение в GPGPU (А. Свириденков)
11 встреча — Введение в GPGPU (А. Свириденков)11 встреча — Введение в GPGPU (А. Свириденков)
11 встреча — Введение в GPGPU (А. Свириденков)
 
Семинар 4. Многопоточное программирование на OpenMP (часть 4)
Семинар 4. Многопоточное программирование на OpenMP (часть 4)Семинар 4. Многопоточное программирование на OpenMP (часть 4)
Семинар 4. Многопоточное программирование на OpenMP (часть 4)
 
Семинар 9. Параллельное программирование на MPI (часть 2)
Семинар 9. Параллельное программирование на MPI (часть 2)Семинар 9. Параллельное программирование на MPI (часть 2)
Семинар 9. Параллельное программирование на MPI (часть 2)
 
Лекция 6. Стандарт OpenMP
Лекция 6. Стандарт OpenMPЛекция 6. Стандарт OpenMP
Лекция 6. Стандарт OpenMP
 
Лекция 1. Основные понятия стандарта MPI. Дифференцированные обмены
Лекция 1. Основные понятия стандарта MPI. Дифференцированные обменыЛекция 1. Основные понятия стандарта MPI. Дифференцированные обмены
Лекция 1. Основные понятия стандарта MPI. Дифференцированные обмены
 
ПВТ - весна 2015 - Лекция 2. POSIX Threads. Основные понятия многопоточного п...
ПВТ - весна 2015 - Лекция 2. POSIX Threads. Основные понятия многопоточного п...ПВТ - весна 2015 - Лекция 2. POSIX Threads. Основные понятия многопоточного п...
ПВТ - весна 2015 - Лекция 2. POSIX Threads. Основные понятия многопоточного п...
 

Viewers also liked

Александр Лямин. HOWTO. Высокий пакетрейт на x86-64: берем планку в 14,88 Mpps
Александр Лямин. HOWTO. Высокий пакетрейт на x86-64: берем планку в 14,88 MppsАлександр Лямин. HOWTO. Высокий пакетрейт на x86-64: берем планку в 14,88 Mpps
Александр Лямин. HOWTO. Высокий пакетрейт на x86-64: берем планку в 14,88 MppsPositive Hack Days
 
Александр Крижановский, NatSys Lab
Александр Крижановский, NatSys LabАлександр Крижановский, NatSys Lab
Александр Крижановский, NatSys LabOntico
 
Александр Крижановский (NatSys Lab)
Александр Крижановский (NatSys Lab)Александр Крижановский (NatSys Lab)
Александр Крижановский (NatSys Lab)Ontico
 
Phd2013 lyamin Высокий пакетрейт на x86-64, берем планку 14.88Mpps
Phd2013 lyamin  Высокий пакетрейт на  x86-64, берем планку 14.88MppsPhd2013 lyamin  Высокий пакетрейт на  x86-64, берем планку 14.88Mpps
Phd2013 lyamin Высокий пакетрейт на x86-64, берем планку 14.88MppsAlexander Lyamin
 
Flowinspect - A Network Inspection Tool
Flowinspect - A Network Inspection ToolFlowinspect - A Network Inspection Tool
Flowinspect - A Network Inspection ToolAnkur Tyagi
 
Общая концепция системы развёртывания серверного окружения на базе SaltStack ...
Общая концепция системы развёртывания серверного окружения на базе SaltStack ...Общая концепция системы развёртывания серверного окружения на базе SaltStack ...
Общая концепция системы развёртывания серверного окружения на базе SaltStack ...Positive Hack Days
 

Viewers also liked (6)

Александр Лямин. HOWTO. Высокий пакетрейт на x86-64: берем планку в 14,88 Mpps
Александр Лямин. HOWTO. Высокий пакетрейт на x86-64: берем планку в 14,88 MppsАлександр Лямин. HOWTO. Высокий пакетрейт на x86-64: берем планку в 14,88 Mpps
Александр Лямин. HOWTO. Высокий пакетрейт на x86-64: берем планку в 14,88 Mpps
 
Александр Крижановский, NatSys Lab
Александр Крижановский, NatSys LabАлександр Крижановский, NatSys Lab
Александр Крижановский, NatSys Lab
 
Александр Крижановский (NatSys Lab)
Александр Крижановский (NatSys Lab)Александр Крижановский (NatSys Lab)
Александр Крижановский (NatSys Lab)
 
Phd2013 lyamin Высокий пакетрейт на x86-64, берем планку 14.88Mpps
Phd2013 lyamin  Высокий пакетрейт на  x86-64, берем планку 14.88MppsPhd2013 lyamin  Высокий пакетрейт на  x86-64, берем планку 14.88Mpps
Phd2013 lyamin Высокий пакетрейт на x86-64, берем планку 14.88Mpps
 
Flowinspect - A Network Inspection Tool
Flowinspect - A Network Inspection ToolFlowinspect - A Network Inspection Tool
Flowinspect - A Network Inspection Tool
 
Общая концепция системы развёртывания серверного окружения на базе SaltStack ...
Общая концепция системы развёртывания серверного окружения на базе SaltStack ...Общая концепция системы развёртывания серверного окружения на базе SaltStack ...
Общая концепция системы развёртывания серверного окружения на базе SaltStack ...
 

Similar to Netmap (by luigi rizzo) простой и удобный opensource фреймворк для обработки трафика.(Евгений Ёрхов)

Евгений Крутько — Опыт внедрения технологий параллельных вычислений для повыш...
Евгений Крутько — Опыт внедрения технологий параллельных вычислений для повыш...Евгений Крутько — Опыт внедрения технологий параллельных вычислений для повыш...
Евгений Крутько — Опыт внедрения технологий параллельных вычислений для повыш...Yandex
 
Performance optimization of virtual network infrastructure (RUS, OpenStack Me...
Performance optimization of virtual network infrastructure (RUS, OpenStack Me...Performance optimization of virtual network infrastructure (RUS, OpenStack Me...
Performance optimization of virtual network infrastructure (RUS, OpenStack Me...Vadim Ponomarev
 
Root Conf2009 Fin
Root Conf2009 FinRoot Conf2009 Fin
Root Conf2009 FinLiudmila Li
 
Лекция 7: Фибоначчиевы кучи (Fibonacci heaps)
Лекция 7: Фибоначчиевы кучи (Fibonacci heaps)Лекция 7: Фибоначчиевы кучи (Fibonacci heaps)
Лекция 7: Фибоначчиевы кучи (Fibonacci heaps)Mikhail Kurnosov
 
Hacking PostgreSQL. Обзор исходного кода
Hacking PostgreSQL. Обзор исходного кодаHacking PostgreSQL. Обзор исходного кода
Hacking PostgreSQL. Обзор исходного кодаAnastasia Lubennikova
 
Архитектура и программирование потоковых многоядерных процессоров для научных...
Архитектура и программирование потоковых многоядерных процессоров для научных...Архитектура и программирование потоковых многоядерных процессоров для научных...
Архитектура и программирование потоковых многоядерных процессоров для научных...a15464321646213
 
Вебинар по отказоустойчивости, 13.04.2017
Вебинар по отказоустойчивости, 13.04.2017Вебинар по отказоустойчивости, 13.04.2017
Вебинар по отказоустойчивости, 13.04.2017S-Terra CSP
 
Руслан Гроховецкий "Как Python стал делать погоду в Яндексе"
Руслан Гроховецкий "Как Python стал делать погоду в Яндексе"Руслан Гроховецкий "Как Python стал делать погоду в Яндексе"
Руслан Гроховецкий "Как Python стал делать погоду в Яндексе"Yandex
 
как написать масштабируемую баннерокрутилку. денис бирюков, артем гавриченков...
как написать масштабируемую баннерокрутилку. денис бирюков, артем гавриченков...как написать масштабируемую баннерокрутилку. денис бирюков, артем гавриченков...
как написать масштабируемую баннерокрутилку. денис бирюков, артем гавриченков...rit2011
 
20130429 dynamic c_c++_program_analysis-alexey_samsonov
20130429 dynamic c_c++_program_analysis-alexey_samsonov20130429 dynamic c_c++_program_analysis-alexey_samsonov
20130429 dynamic c_c++_program_analysis-alexey_samsonovComputer Science Club
 
Лекция 3: Векторизация кода (Code vectorization, SIMD, SSE, AVX)
Лекция 3: Векторизация кода (Code vectorization, SIMD, SSE, AVX)Лекция 3: Векторизация кода (Code vectorization, SIMD, SSE, AVX)
Лекция 3: Векторизация кода (Code vectorization, SIMD, SSE, AVX)Mikhail Kurnosov
 
SAMag2007 Conference: PostgreSQL 8.3 presentation
SAMag2007 Conference: PostgreSQL 8.3 presentationSAMag2007 Conference: PostgreSQL 8.3 presentation
SAMag2007 Conference: PostgreSQL 8.3 presentationNikolay Samokhvalov
 
Лекция 3. Векторизация кода (Code vectorization: SSE, AVX)
Лекция 3. Векторизация кода (Code vectorization: SSE, AVX)Лекция 3. Векторизация кода (Code vectorization: SSE, AVX)
Лекция 3. Векторизация кода (Code vectorization: SSE, AVX)Mikhail Kurnosov
 
Вячеслав Бирюков - Linux инструменты системного администратора
Вячеслав Бирюков - Linux инструменты системного администратора Вячеслав Бирюков - Linux инструменты системного администратора
Вячеслав Бирюков - Linux инструменты системного администратора Yandex
 
Доклад в Mail.ru 01.11.12
Доклад в Mail.ru 01.11.12Доклад в Mail.ru 01.11.12
Доклад в Mail.ru 01.11.12Alex Tutubalin
 
Осваиваем Tarantool 1.6 / Евгений Шадрин (Sberbank Digital Ventures)
Осваиваем Tarantool 1.6 / Евгений Шадрин (Sberbank Digital Ventures)Осваиваем Tarantool 1.6 / Евгений Шадрин (Sberbank Digital Ventures)
Осваиваем Tarantool 1.6 / Евгений Шадрин (Sberbank Digital Ventures)Ontico
 
Организация сети и безопасность
Организация сети и безопасностьОрганизация сети и безопасность
Организация сети и безопасностьOpenStackRU
 

Similar to Netmap (by luigi rizzo) простой и удобный opensource фреймворк для обработки трафика.(Евгений Ёрхов) (20)

Евгений Крутько — Опыт внедрения технологий параллельных вычислений для повыш...
Евгений Крутько — Опыт внедрения технологий параллельных вычислений для повыш...Евгений Крутько — Опыт внедрения технологий параллельных вычислений для повыш...
Евгений Крутько — Опыт внедрения технологий параллельных вычислений для повыш...
 
Performance optimization of virtual network infrastructure (RUS, OpenStack Me...
Performance optimization of virtual network infrastructure (RUS, OpenStack Me...Performance optimization of virtual network infrastructure (RUS, OpenStack Me...
Performance optimization of virtual network infrastructure (RUS, OpenStack Me...
 
Root Conf2009 Fin
Root Conf2009 FinRoot Conf2009 Fin
Root Conf2009 Fin
 
Лекция 7: Фибоначчиевы кучи (Fibonacci heaps)
Лекция 7: Фибоначчиевы кучи (Fibonacci heaps)Лекция 7: Фибоначчиевы кучи (Fibonacci heaps)
Лекция 7: Фибоначчиевы кучи (Fibonacci heaps)
 
Hacking PostgreSQL. Обзор исходного кода
Hacking PostgreSQL. Обзор исходного кодаHacking PostgreSQL. Обзор исходного кода
Hacking PostgreSQL. Обзор исходного кода
 
Архитектура и программирование потоковых многоядерных процессоров для научных...
Архитектура и программирование потоковых многоядерных процессоров для научных...Архитектура и программирование потоковых многоядерных процессоров для научных...
Архитектура и программирование потоковых многоядерных процессоров для научных...
 
Вебинар по отказоустойчивости, 13.04.2017
Вебинар по отказоустойчивости, 13.04.2017Вебинар по отказоустойчивости, 13.04.2017
Вебинар по отказоустойчивости, 13.04.2017
 
Руслан Гроховецкий "Как Python стал делать погоду в Яндексе"
Руслан Гроховецкий "Как Python стал делать погоду в Яндексе"Руслан Гроховецкий "Как Python стал делать погоду в Яндексе"
Руслан Гроховецкий "Как Python стал делать погоду в Яндексе"
 
как написать масштабируемую баннерокрутилку. денис бирюков, артем гавриченков...
как написать масштабируемую баннерокрутилку. денис бирюков, артем гавриченков...как написать масштабируемую баннерокрутилку. денис бирюков, артем гавриченков...
как написать масштабируемую баннерокрутилку. денис бирюков, артем гавриченков...
 
20130429 dynamic c_c++_program_analysis-alexey_samsonov
20130429 dynamic c_c++_program_analysis-alexey_samsonov20130429 dynamic c_c++_program_analysis-alexey_samsonov
20130429 dynamic c_c++_program_analysis-alexey_samsonov
 
Лекция 3: Векторизация кода (Code vectorization, SIMD, SSE, AVX)
Лекция 3: Векторизация кода (Code vectorization, SIMD, SSE, AVX)Лекция 3: Векторизация кода (Code vectorization, SIMD, SSE, AVX)
Лекция 3: Векторизация кода (Code vectorization, SIMD, SSE, AVX)
 
SAMag2007 Conference: PostgreSQL 8.3 presentation
SAMag2007 Conference: PostgreSQL 8.3 presentationSAMag2007 Conference: PostgreSQL 8.3 presentation
SAMag2007 Conference: PostgreSQL 8.3 presentation
 
Лекция 3. Векторизация кода (Code vectorization: SSE, AVX)
Лекция 3. Векторизация кода (Code vectorization: SSE, AVX)Лекция 3. Векторизация кода (Code vectorization: SSE, AVX)
Лекция 3. Векторизация кода (Code vectorization: SSE, AVX)
 
OpenACC short review
OpenACC short reviewOpenACC short review
OpenACC short review
 
Вячеслав Бирюков - Linux инструменты системного администратора
Вячеслав Бирюков - Linux инструменты системного администратора Вячеслав Бирюков - Linux инструменты системного администратора
Вячеслав Бирюков - Linux инструменты системного администратора
 
введение в Gpu
введение в Gpuвведение в Gpu
введение в Gpu
 
Доклад в Mail.ru 01.11.12
Доклад в Mail.ru 01.11.12Доклад в Mail.ru 01.11.12
Доклад в Mail.ru 01.11.12
 
Осваиваем Tarantool 1.6 / Евгений Шадрин (Sberbank Digital Ventures)
Осваиваем Tarantool 1.6 / Евгений Шадрин (Sberbank Digital Ventures)Осваиваем Tarantool 1.6 / Евгений Шадрин (Sberbank Digital Ventures)
Осваиваем Tarantool 1.6 / Евгений Шадрин (Sberbank Digital Ventures)
 
Conflux: GPGPU .NET
Conflux: GPGPU .NETConflux: GPGPU .NET
Conflux: GPGPU .NET
 
Организация сети и безопасность
Организация сети и безопасностьОрганизация сети и безопасность
Организация сети и безопасность
 

More from Ontico

One-cloud — система управления дата-центром в Одноклассниках / Олег Анастасье...
One-cloud — система управления дата-центром в Одноклассниках / Олег Анастасье...One-cloud — система управления дата-центром в Одноклассниках / Олег Анастасье...
One-cloud — система управления дата-центром в Одноклассниках / Олег Анастасье...Ontico
 
Масштабируя DNS / Артем Гавриченков (Qrator Labs)
Масштабируя DNS / Артем Гавриченков (Qrator Labs)Масштабируя DNS / Артем Гавриченков (Qrator Labs)
Масштабируя DNS / Артем Гавриченков (Qrator Labs)Ontico
 
Создание BigData-платформы для ФГУП Почта России / Андрей Бащенко (Luxoft)
Создание BigData-платформы для ФГУП Почта России / Андрей Бащенко (Luxoft)Создание BigData-платформы для ФГУП Почта России / Андрей Бащенко (Luxoft)
Создание BigData-платформы для ФГУП Почта России / Андрей Бащенко (Luxoft)Ontico
 
Готовим тестовое окружение, или сколько тестовых инстансов вам нужно / Алекса...
Готовим тестовое окружение, или сколько тестовых инстансов вам нужно / Алекса...Готовим тестовое окружение, или сколько тестовых инстансов вам нужно / Алекса...
Готовим тестовое окружение, или сколько тестовых инстансов вам нужно / Алекса...Ontico
 
Новые технологии репликации данных в PostgreSQL / Александр Алексеев (Postgre...
Новые технологии репликации данных в PostgreSQL / Александр Алексеев (Postgre...Новые технологии репликации данных в PostgreSQL / Александр Алексеев (Postgre...
Новые технологии репликации данных в PostgreSQL / Александр Алексеев (Postgre...Ontico
 
PostgreSQL Configuration for Humans / Alvaro Hernandez (OnGres)
PostgreSQL Configuration for Humans / Alvaro Hernandez (OnGres)PostgreSQL Configuration for Humans / Alvaro Hernandez (OnGres)
PostgreSQL Configuration for Humans / Alvaro Hernandez (OnGres)Ontico
 
Inexpensive Datamasking for MySQL with ProxySQL — Data Anonymization for Deve...
Inexpensive Datamasking for MySQL with ProxySQL — Data Anonymization for Deve...Inexpensive Datamasking for MySQL with ProxySQL — Data Anonymization for Deve...
Inexpensive Datamasking for MySQL with ProxySQL — Data Anonymization for Deve...Ontico
 
Опыт разработки модуля межсетевого экранирования для MySQL / Олег Брославский...
Опыт разработки модуля межсетевого экранирования для MySQL / Олег Брославский...Опыт разработки модуля межсетевого экранирования для MySQL / Олег Брославский...
Опыт разработки модуля межсетевого экранирования для MySQL / Олег Брославский...Ontico
 
ProxySQL Use Case Scenarios / Alkin Tezuysal (Percona)
ProxySQL Use Case Scenarios / Alkin Tezuysal (Percona)ProxySQL Use Case Scenarios / Alkin Tezuysal (Percona)
ProxySQL Use Case Scenarios / Alkin Tezuysal (Percona)Ontico
 
MySQL Replication — Advanced Features / Петр Зайцев (Percona)
MySQL Replication — Advanced Features / Петр Зайцев (Percona)MySQL Replication — Advanced Features / Петр Зайцев (Percona)
MySQL Replication — Advanced Features / Петр Зайцев (Percona)Ontico
 
Внутренний open-source. Как разрабатывать мобильное приложение большим количе...
Внутренний open-source. Как разрабатывать мобильное приложение большим количе...Внутренний open-source. Как разрабатывать мобильное приложение большим количе...
Внутренний open-source. Как разрабатывать мобильное приложение большим количе...Ontico
 
Подробно о том, как Causal Consistency реализовано в MongoDB / Михаил Тюленев...
Подробно о том, как Causal Consistency реализовано в MongoDB / Михаил Тюленев...Подробно о том, как Causal Consistency реализовано в MongoDB / Михаил Тюленев...
Подробно о том, как Causal Consistency реализовано в MongoDB / Михаил Тюленев...Ontico
 
Балансировка на скорости проводов. Без ASIC, без ограничений. Решения NFWare ...
Балансировка на скорости проводов. Без ASIC, без ограничений. Решения NFWare ...Балансировка на скорости проводов. Без ASIC, без ограничений. Решения NFWare ...
Балансировка на скорости проводов. Без ASIC, без ограничений. Решения NFWare ...Ontico
 
Перехват трафика — мифы и реальность / Евгений Усков (Qrator Labs)
Перехват трафика — мифы и реальность / Евгений Усков (Qrator Labs)Перехват трафика — мифы и реальность / Евгений Усков (Qrator Labs)
Перехват трафика — мифы и реальность / Евгений Усков (Qrator Labs)Ontico
 
И тогда наверняка вдруг запляшут облака! / Алексей Сушков (ПЕТЕР-СЕРВИС)
И тогда наверняка вдруг запляшут облака! / Алексей Сушков (ПЕТЕР-СЕРВИС)И тогда наверняка вдруг запляшут облака! / Алексей Сушков (ПЕТЕР-СЕРВИС)
И тогда наверняка вдруг запляшут облака! / Алексей Сушков (ПЕТЕР-СЕРВИС)Ontico
 
Как мы заставили Druid работать в Одноклассниках / Юрий Невиницин (OK.RU)
Как мы заставили Druid работать в Одноклассниках / Юрий Невиницин (OK.RU)Как мы заставили Druid работать в Одноклассниках / Юрий Невиницин (OK.RU)
Как мы заставили Druid работать в Одноклассниках / Юрий Невиницин (OK.RU)Ontico
 
Разгоняем ASP.NET Core / Илья Вербицкий (WebStoating s.r.o.)
Разгоняем ASP.NET Core / Илья Вербицкий (WebStoating s.r.o.)Разгоняем ASP.NET Core / Илья Вербицкий (WebStoating s.r.o.)
Разгоняем ASP.NET Core / Илья Вербицкий (WebStoating s.r.o.)Ontico
 
100500 способов кэширования в Oracle Database или как достичь максимальной ск...
100500 способов кэширования в Oracle Database или как достичь максимальной ск...100500 способов кэширования в Oracle Database или как достичь максимальной ск...
100500 способов кэширования в Oracle Database или как достичь максимальной ск...Ontico
 
Apache Ignite Persistence: зачем Persistence для In-Memory, и как он работает...
Apache Ignite Persistence: зачем Persistence для In-Memory, и как он работает...Apache Ignite Persistence: зачем Persistence для In-Memory, и как он работает...
Apache Ignite Persistence: зачем Persistence для In-Memory, и как он работает...Ontico
 
Механизмы мониторинга баз данных: взгляд изнутри / Дмитрий Еманов (Firebird P...
Механизмы мониторинга баз данных: взгляд изнутри / Дмитрий Еманов (Firebird P...Механизмы мониторинга баз данных: взгляд изнутри / Дмитрий Еманов (Firebird P...
Механизмы мониторинга баз данных: взгляд изнутри / Дмитрий Еманов (Firebird P...Ontico
 

More from Ontico (20)

One-cloud — система управления дата-центром в Одноклассниках / Олег Анастасье...
One-cloud — система управления дата-центром в Одноклассниках / Олег Анастасье...One-cloud — система управления дата-центром в Одноклассниках / Олег Анастасье...
One-cloud — система управления дата-центром в Одноклассниках / Олег Анастасье...
 
Масштабируя DNS / Артем Гавриченков (Qrator Labs)
Масштабируя DNS / Артем Гавриченков (Qrator Labs)Масштабируя DNS / Артем Гавриченков (Qrator Labs)
Масштабируя DNS / Артем Гавриченков (Qrator Labs)
 
Создание BigData-платформы для ФГУП Почта России / Андрей Бащенко (Luxoft)
Создание BigData-платформы для ФГУП Почта России / Андрей Бащенко (Luxoft)Создание BigData-платформы для ФГУП Почта России / Андрей Бащенко (Luxoft)
Создание BigData-платформы для ФГУП Почта России / Андрей Бащенко (Luxoft)
 
Готовим тестовое окружение, или сколько тестовых инстансов вам нужно / Алекса...
Готовим тестовое окружение, или сколько тестовых инстансов вам нужно / Алекса...Готовим тестовое окружение, или сколько тестовых инстансов вам нужно / Алекса...
Готовим тестовое окружение, или сколько тестовых инстансов вам нужно / Алекса...
 
Новые технологии репликации данных в PostgreSQL / Александр Алексеев (Postgre...
Новые технологии репликации данных в PostgreSQL / Александр Алексеев (Postgre...Новые технологии репликации данных в PostgreSQL / Александр Алексеев (Postgre...
Новые технологии репликации данных в PostgreSQL / Александр Алексеев (Postgre...
 
PostgreSQL Configuration for Humans / Alvaro Hernandez (OnGres)
PostgreSQL Configuration for Humans / Alvaro Hernandez (OnGres)PostgreSQL Configuration for Humans / Alvaro Hernandez (OnGres)
PostgreSQL Configuration for Humans / Alvaro Hernandez (OnGres)
 
Inexpensive Datamasking for MySQL with ProxySQL — Data Anonymization for Deve...
Inexpensive Datamasking for MySQL with ProxySQL — Data Anonymization for Deve...Inexpensive Datamasking for MySQL with ProxySQL — Data Anonymization for Deve...
Inexpensive Datamasking for MySQL with ProxySQL — Data Anonymization for Deve...
 
Опыт разработки модуля межсетевого экранирования для MySQL / Олег Брославский...
Опыт разработки модуля межсетевого экранирования для MySQL / Олег Брославский...Опыт разработки модуля межсетевого экранирования для MySQL / Олег Брославский...
Опыт разработки модуля межсетевого экранирования для MySQL / Олег Брославский...
 
ProxySQL Use Case Scenarios / Alkin Tezuysal (Percona)
ProxySQL Use Case Scenarios / Alkin Tezuysal (Percona)ProxySQL Use Case Scenarios / Alkin Tezuysal (Percona)
ProxySQL Use Case Scenarios / Alkin Tezuysal (Percona)
 
MySQL Replication — Advanced Features / Петр Зайцев (Percona)
MySQL Replication — Advanced Features / Петр Зайцев (Percona)MySQL Replication — Advanced Features / Петр Зайцев (Percona)
MySQL Replication — Advanced Features / Петр Зайцев (Percona)
 
Внутренний open-source. Как разрабатывать мобильное приложение большим количе...
Внутренний open-source. Как разрабатывать мобильное приложение большим количе...Внутренний open-source. Как разрабатывать мобильное приложение большим количе...
Внутренний open-source. Как разрабатывать мобильное приложение большим количе...
 
Подробно о том, как Causal Consistency реализовано в MongoDB / Михаил Тюленев...
Подробно о том, как Causal Consistency реализовано в MongoDB / Михаил Тюленев...Подробно о том, как Causal Consistency реализовано в MongoDB / Михаил Тюленев...
Подробно о том, как Causal Consistency реализовано в MongoDB / Михаил Тюленев...
 
Балансировка на скорости проводов. Без ASIC, без ограничений. Решения NFWare ...
Балансировка на скорости проводов. Без ASIC, без ограничений. Решения NFWare ...Балансировка на скорости проводов. Без ASIC, без ограничений. Решения NFWare ...
Балансировка на скорости проводов. Без ASIC, без ограничений. Решения NFWare ...
 
Перехват трафика — мифы и реальность / Евгений Усков (Qrator Labs)
Перехват трафика — мифы и реальность / Евгений Усков (Qrator Labs)Перехват трафика — мифы и реальность / Евгений Усков (Qrator Labs)
Перехват трафика — мифы и реальность / Евгений Усков (Qrator Labs)
 
И тогда наверняка вдруг запляшут облака! / Алексей Сушков (ПЕТЕР-СЕРВИС)
И тогда наверняка вдруг запляшут облака! / Алексей Сушков (ПЕТЕР-СЕРВИС)И тогда наверняка вдруг запляшут облака! / Алексей Сушков (ПЕТЕР-СЕРВИС)
И тогда наверняка вдруг запляшут облака! / Алексей Сушков (ПЕТЕР-СЕРВИС)
 
Как мы заставили Druid работать в Одноклассниках / Юрий Невиницин (OK.RU)
Как мы заставили Druid работать в Одноклассниках / Юрий Невиницин (OK.RU)Как мы заставили Druid работать в Одноклассниках / Юрий Невиницин (OK.RU)
Как мы заставили Druid работать в Одноклассниках / Юрий Невиницин (OK.RU)
 
Разгоняем ASP.NET Core / Илья Вербицкий (WebStoating s.r.o.)
Разгоняем ASP.NET Core / Илья Вербицкий (WebStoating s.r.o.)Разгоняем ASP.NET Core / Илья Вербицкий (WebStoating s.r.o.)
Разгоняем ASP.NET Core / Илья Вербицкий (WebStoating s.r.o.)
 
100500 способов кэширования в Oracle Database или как достичь максимальной ск...
100500 способов кэширования в Oracle Database или как достичь максимальной ск...100500 способов кэширования в Oracle Database или как достичь максимальной ск...
100500 способов кэширования в Oracle Database или как достичь максимальной ск...
 
Apache Ignite Persistence: зачем Persistence для In-Memory, и как он работает...
Apache Ignite Persistence: зачем Persistence для In-Memory, и как он работает...Apache Ignite Persistence: зачем Persistence для In-Memory, и как он работает...
Apache Ignite Persistence: зачем Persistence для In-Memory, и как он работает...
 
Механизмы мониторинга баз данных: взгляд изнутри / Дмитрий Еманов (Firebird P...
Механизмы мониторинга баз данных: взгляд изнутри / Дмитрий Еманов (Firebird P...Механизмы мониторинга баз данных: взгляд изнутри / Дмитрий Еманов (Firebird P...
Механизмы мониторинга баз данных: взгляд изнутри / Дмитрий Еманов (Firebird P...
 

Netmap (by luigi rizzo) простой и удобный opensource фреймворк для обработки трафика.(Евгений Ёрхов)

  • 1. NETMAP (от Luigi Rizzo) Простой и удобный открытый фреймворк для обработки трафика на скоростях 10Gbit/s или 14 Mpps Евгений Ёрхов Компания IXI
  • 2. Структура доклада • Анализ проблемы производительности стеков TCP/IP в OS общего назначения • Краткий обзор известных подходов по увеличению производительности на больших скоростях • Быстрое введение в Netmap, архитектура, основные операции • Примеры: генератор трафика, компонент подсистемы DDOS защиты • Обзор производительности
  • 3. Анализ overhead’ов в стеках OS общего назначения ОСНОВНЫЕ ПРОБЛЕМЫ ПРИ СКОРОСТНОЙ ОБРАБОТКЕ ПАКЕТОВ
  • 4. Структуры данных NIC и их взаимосвязь со структурами данных OS
  • 5. Вычисляем наносекунды KERNEL SPACE USER SPACE #define D(format, ...) #define D(format, ...) do { do { struct timespec __xxts; if (!verbose) break; nanotime(&__xxts); struct timespec _xxts; printf("%03d.%09d %s [%d] clock_gettime(CLOCK_REALTIME, "format "n", &_xxts) (int)__xxts.tv_sec % fprintf(stderr, "%03d.%09d %s [%d] " format 1000, (int)__xxts.tv_nsec, "n”,(int)_xxts.tv_sec __FUNCTION__, __LINE__, %1000, (int)_xxts.tv_nsec, ##__VA_ARGS__); __FUNCTION__, __LINE__, } while (0) ##__VA_ARGS__); } while (0)
  • 6. Путешествие к центру ядра через API File Function / description Time ns Delta ns user_program sendto() system call 8 96 uipc_syscalls.c sys_sendto() 104 uipc_socket.c sendit() 111 137 kern_sendit() 118 sosend() --- sosend_dgram() 146 sockbuf locking, mbuf allocation, copying udp_usrreq.c udp_send() udp_output() 273 57 ip_output.c Ip_output() 330 198 Route lookup, ip header setup if_ethersubr.c Ether_output 528 162 MAC header lookup and copy, loopback 690 ether_output_frame ixgbe.c ixgbe_mq_start() 698 ixgbe_mq_start_locked() 720 220 ixgbe_xmit 730 - On wire 950
  • 7. Современные техники увеличения производительности • Socket API: BPF (FreeBSD), AF_PACKET (Linux) • Packet filter hooks: Netgraph (FreeBSD), Netfilter (Linux), Ndis miniport drivers (MS Windows) • Direct buffer access: PF_RING_DNA (Linux), PACKET_MMAP (Linux), UIO-IXGBE (Linux)
  • 8. Структуры данных, основные операции, примитивы и особенности АРХИТЕКТУРА NETMAP
  • 9. Подход NETMAP к обработке пакетов на больших скоростях • Доступ к NIC в обход стека OS • Защита памяти в хрупком kernel space • Zero copy операции при форвардинге пакетов • Линейные, лёгкие структуры данных • pre-alloceted буферы для пакетов и метаданных • Поддержка множественных очередей NIC
  • 10. Схема взаимодействия NETMAP, NIC и OS NIC пересылает данные между сетью и оперативной памятью ядро OS выполняет защиту памяти ядро OS обеспечивает многозадачность и синхронизацию NETMAP обеспечивает механизмы управления и доступа к данным для приложения
  • 11. Структуры данных NETMAP экспортируемые в user space Пакетные буферы ( packet buffers ) Кольцевые буферы-очереди ( netmap rings ) Дескриптор интерфейса ( netmap_if )
  • 12. Разделение ответственности Приложение user space Ядерная часть • Управляет слотами в • NETMAP управляет «netmap_ring» границами в netmap_rings • Управляет текущей • NIC DMA engine позицией (номер слота) в заполняет/читает пакетные «netmap_ring» буферы в позициях кроме • Заполняет/читает как начиная с пакетные буферы, «cur» по «cur + avail» начиная с позиции • NETMAP управляет «cur» по «cur + avail -1» синхронизацией метаданных • Управляет полем в «netmap_rings» и структур «netmap_ring->avail» NIC
  • 13. NETMAP API Основные операции • /dev/netmap • ioctl(…, NIOCREGIF, arg) • ioctl (…, NIOCTXSYNC) – синхронизация очередей (netmap rings) для отправки с соответствующими очередями сетевой карты, что эквивалентно отправке пакетов в сеть, синхронизация начинается с позиции cur • ioctl (…, NIOCRXSYNC) – синхронизация очередей сетевой карты с соответствующими очередями netmap rings, для получения пакетов, поступивших из сети. Запись осуществляется начиная с позиции cur
  • 14. Примитивы блокирования Используются стандартные механизмы OS • select() • poll() Результат: • Отсутствие нагрузки на CPU • Обработка несколько пакетов за проход
  • 15. Дополнительные особенности Поддержка множественных очередей NIC Передача/приём пакетов в/из host stack Защита памяти Zero copy packet forwarding
  • 16. Zero copy packet forwarding ... ns_src = &src_nr_rx->slot[i]; /* locate src and dst slots */ ns_dst = &dst_nr_tx->slot[j]; /* swap the buffers */ tmp = ns_dst->buf_index; ns_dst->buf_index = ns_src->buf_index; ns_src->buf_index = tmp; /* update length and flags */ ns_dst->len = ns_src->len; ns_src->len = 0; /* tell kernel to update addresses in the NIC rings */ ns_dst->flags = ns_src->flags = BUF_CHANGED; dst_nr_tx->avail--; // Для большей ясности кода проверка src_nr_rx->avail--; // avail > 0 не сделана ...
  • 17. Прототипы: генератор трафика, компонент подсистемы очистки трафика в системе DDOS защиты NETMAP ПРИМЕРЫ
  • 18. Прототип генератора трафика fds.fd = open("/dev/netmap", O_RDWR); strcpy(nmr.nm_name, "ix0"); ioctl(fds.fd, NIOCREG, &nmr); p = mmap(0, nmr.memsize, fds.fd); nifp = NETMAP_IF(p, nmr.offset); fds.events = POLLOUT; for (;;) { poll(fds, 1, -1); for (r = 0; r < nmr.num_queues; r++) { ring = NETMAP_TXRING(nifp, r); while (ring->avail-- > 0) { i = ring->cur; buf = NETMAP_BUF(ring, ring->slot[i].buf_index); //... store the payload into buf ... ring->slot[i].len = ... // set packet length ring->cur = NETMAP_NEXT(ring, i); } } }
  • 19. NETMAP API в подсистеме очистки трафика DDOS Основными требованиями к подсистеме очистки трафика выбраны • возможность фильтрации пакетов на предельных скоростях • возможности по обработке пакетов в системе фильтров, реализующие различные, известные на сегодняшний день техники противодействия DDOS атакам
  • 20. Подготовка и включение режима NETMAP struct nmreq nmr; … for (i=0, i < MAX_THREADS, i++) { … targ[i]->nmr.ringid = i | NETMAP_HW_RING; … ioctl(targ[i].fd, NIOCREGIF, &targ[i]->nmr); … targ[i]->mem = mmap(0, targ[i]->nmr.nr_memsize, PROT_WRITE | PROT_READ, MAP_SHARED, targ[i].fd, 0); targ[i]->nifp = NETMAP_IF(targ[i]->mem, targ[i]->nmr.nr_offset); targ[i]->nr_tx = NETMAP_TXRING(targ[i]->nifp, i); targ[i]->nr_rx = NETMAP_RXRING(targ[i]->nifp, i); … }
  • 21. Открываем очереди для обмена с host stack struct nmreq nmr; … /* NETMAP ассоциирует netmap ring с наибольшим ringid с сетевым стеком */ targ->nmr.ringid = stack_ring_id | NETMAP_SW_RING; … ioctl(targ.fd, NIOCREGIF, &targ->nmr); …
  • 22. Стартуем thread’ы каждая из которых работает со своей очередью for ( i = 0; i < MAX_THREADS; i++ ) { /* start first rx thread */ targs[i].used = 1; if (pthread_create(&targs[i].thread, NULL, rx_thread, &targs[i]) == -1) { D("Unable to create thread %d", i); exit(-1); } } … /* Wait until threads will finish their loops */ for ( i = 0; i < MAX_THREAD; i++ ) { if( pthread_join(targs[i].thread, NULL) ) { ioctl(targs[i].fd, NIOCUNREGIF, &targs[i].nmr); close(targs[i].fd); } … }
  • 23. Ожидание пакетов в rx_thread() while(targ->used) { ret = poll(fds, 2, 1 * 100); if (ret <= 0) continue; … /* run rings processing */ for ( i = targ->begin; i < targ->end; i++) { ioctl(targ->fd, NIOCTXSYNC, 0); ioctl(targ->fd_stack, NIOCTXSYNC, 0); targ->rx = NETMAP_RXRING(targ->nifp, i); targ->tx = NETMAP_TXRING(targ->nifp, i); if (targ->rx->avail > 0) { … /* process ring */ cnt = process_incoming(targ->id, targ->rx, targ->tx, targ->stack_rx, targ->stack_tx); … } }
  • 24. Получение доступа к raw пакетам process_incoming() limit = nic_rx->avail; while ( limit-- > 0 ) { struct netmap_slot *rs = &nic_rx->slot[j]; // rx slot struct netmap_slot *ts = &nic_tx->slot[k]; // tx slot eth = (struct ether_header *)NETMAP_BUF(nic_rx, rs->buf_idx); if (eth->ether_type != htons(ETHERTYPE_IP)) { goto next_packet; // pass non-ip packet } /* get ip header of the packet */ iph = (struct ip *)(eth + 1); … }
  • 26. Метрики Per-bytes Per-packets • Измерение • Измерение осуществляется на основе осуществляется на основе отношения показателей к отношения показателей к передаваемым полезным количеству данным (payload) обрабатываемых пакетов • Поскольку NETMAP • Интересно измерить использует zero copy загрузку CPU в отношении forwarding – результат к количеству очевиден обрабатываемых 64- байтовых пакетов
  • 27. Тестовое железо и OS i7-870 4-core 2.93GHz CPU (3.2 GHz в режиме turbo-boost), оперативная память на частоте 1.33GHz, в систему установлена двухпортовая сетевая карта на базе чипсета Intel 82599 FreeBSD HEAD/amd64, Апрель 2012 г.
  • 28. Скорость в зависимости от частоты процессора, ядер и т.п.
  • 29. Загрузка процессора на одном ядре Частота Средняя загрузка CPU 900 MHz 100% 1.2 GHz 80% 3GHz 55%
  • 31. Скорость в зависимости от количества пакетов за один системный вызов
  • 32. Скорости фильтрации flood-атак сервером очистки трафика RUSCREEN Наименование атаки Способ противодействия Скорости обработки (на случайном распределении src_addr) Synflood SYNCOOKIE 12 883 408 pps UDP flood PPS limiting, blacklisting, 13 854 096 pps greylisting ICMP flood PPS limiting, blacklisting, 13 780 314 pps greylisting Смешанный flood SYNCOOKIE, stateful 11 083 147 pps inspection, PPS limiting, blacklisting, greylisting
  • 33. Заключение • В докладе рассмотрены основные возможности NETMAP по обработке трафика на скоростях 10Gbit/s • Сделан сравнительный анализ NETMAP с другими системами скоростной обработки пакетов • Подтверждены тесты производительности, сделанные автором NETMAP – Luigi Rizzo • Продемонстрированы основные приёмы использования NETMAP на примерах прототипов генератора трафика и подсистемы очистки трафика. Благодаря подходу, реализованному в NETMAP, автору доклада удалось добиться нужно производительности при фильтрации трафика в проекте DDOS-защиты RUSCREEN, позволяющей работать на скоростях 14Mpps.