35
Анализ производительности сетевой подсистемы микроядерного окружения Genode Сартаков Василий , Александр Тарасиков {sartakov,tarasikov}@ksyslabs.org Tools & Methods of Program Analysis, 2013

TMPA-2013 Sartakov: Genode

Embed Size (px)

DESCRIPTION

Sartakov, V., Tarasikov, Aksys labs The Analysis of Performance of Genode Micro-core Environment Network Subsystem

Citation preview

Page 1: TMPA-2013 Sartakov: Genode

Анализ  производительности  сетевои  подсистемы  

микроядерного  окружения  Genode    

 Сартаков  Василий,  Александр  Тарасиков    

{sartakov,tarasikov}@ksyslabs.org  Tools  &  Methods  of  Program  Analysis,  2013  

Page 2: TMPA-2013 Sartakov: Genode

Agenda  

•  Intro  •  Микроядра  и  их  окружения  •  Пример  использования  –  Шлюз  •  Анализ  производительности  •  Заключение  

Page 3: TMPA-2013 Sartakov: Genode

Операционные  Систем  

•  Управляют  ресурсами  – Hardware    – Somware  

•  Предоставляет  интерфейс  к  ресурсам  •  Обеспечивает  изоляцию  и  совместное  использование  ресурсов  

Page 4: TMPA-2013 Sartakov: Genode

Монолитно-­‐модульный  Linux  

CPU    main    memory  

I/O  devices  

MC   bash   WM   apache  

FLV   PIDN  PID6   PID10  

HAL  

System-­‐Call  interface  

FS   IPC   NET   Drivers   Scheduler   Mem   Swap  

Page 5: TMPA-2013 Sartakov: Genode

Микроядро  

CPU    main    memory  

I/O  devices  

MC   bash   WM   apache  

Hardware  access   System-­‐Call  interface  

FS  

IPC  

NET   Drivers  

Scheduler  

Mem  Swap  

AS  Isola�on  

Page 6: TMPA-2013 Sartakov: Genode

История  

•  Первое  поколение:  Mach  (CMU  1985-­‐1994,  GNU/Mach,  OS  X)  

•  Второе  поколение:  Minix3  (VU  Amsterdam)  •  Третье  поколение:  Семейство  L4  – L4Ka::Pistachio  – L4/Fiasco  – Fiasco.OC  – SeL4  ….    

Page 7: TMPA-2013 Sartakov: Genode

Fiasco.OC  

•  C++  •  Object-­‐capability  uKernel  – Everything  is  an  object  – Capabili�es  (контролируемые  ссылки  на  объекты)  

•  Fiasco.OC  это  не  операционная  система,  она  требует  окружения:  – L4Re  – Genode  

Page 8: TMPA-2013 Sartakov: Genode

L4Re  

CPU    main    memory  

I/O  devices  

uCLibc  

Sigma0   Moe  

Ned  

Hardware  access   System-­‐Call  interface  

Hello  world  

IPC  

IPC  FW  

Scheduler  

Libstdc++  

AS  Isola�on  

Page 9: TMPA-2013 Sartakov: Genode

Genode  

Page 10: TMPA-2013 Sartakov: Genode

Компоненты  Окружений  

•  «Стандартные»  библиотеки  (uCLibc,  stdc++)  •  Драйвера:  iPXE_kit,  dde_kit  •  Паравиртуализированный  L4Linux    •  Компоненты  системы  (Ned,  IO,  Moe,  Sigma,  init)  

•  Портированные  приложения  –  Qt,  LwIP  

Page 11: TMPA-2013 Sartakov: Genode

Gateway  

Безопасная сеть

Шлюз Интернет

Page 12: TMPA-2013 Sartakov: Genode

Gateway::Монолит  

•  Уязвимость  в  драйвере:  Специально  сформированный  пакет  -­‐>  срыв  -­‐>  доступ  к  памяти  ядра  

•  «Умное»  устройство:  специально  сформированный  пакет  -­‐>  активация  закладки  в  сетевом  устройств  -­‐>  кража  данных  из  памяти  

•  И  это  все  не  смешно  

Page 13: TMPA-2013 Sartakov: Genode

Gateway  

Eth1  

Fiasco.OC  

DRV  

DRV  

Eth0  

vEth   vEth  

Firewall  

Tcp/IP   App  

Безопасная  среда  Внешняя  среда  

Page 14: TMPA-2013 Sartakov: Genode

Gateway  

Eth1  

Fiasco.OC  

DRV  DRV  

Eth0  

vEth   vEth  

Firewall  

Tcp/IP  

App  

Безопасная  среда  

App  

Tcp/IP  

L4Linux   L4Linux  

DRV   DRV  

Внешняя  среда  

Page 15: TMPA-2013 Sartakov: Genode

Упрощенная  схема  

L4Linux  DRV  DRV  

L4Linux  

Page 16: TMPA-2013 Sartakov: Genode

L4Linux  

vEth  DRV   TCP/IP  

APP1   netperf   APP2  

L4Linux  kernel  

Page 17: TMPA-2013 Sartakov: Genode

Netperf:  PC  <-­‐>  SRV  

PC1   SRV  Подключение  –  1gbps  

704/703  

Page 18: TMPA-2013 Sartakov: Genode

Netperf:  PC  <-­‐>  Linux  PC  <-­‐>SRV  

PC1   SRV  

Linux  

700/700  

DRV  DRV   TCP/IP  ip  route  

Page 19: TMPA-2013 Sartakov: Genode

PC  <-­‐>  DRV<-­‐>  L4LInux  <-­‐>  L4Linux  <-­‐>  DRV  <-­‐>  SRV  

L4Linux  DRV  DRV  

L4Linux  PC1   SRV  

64  

Nic  Bridge  

185  

~320  

Page 20: TMPA-2013 Sartakov: Genode

Первый  Анализ  

•  Отказ  от  Nic  Bridge.  Вместо  него  кольцевой  буффер  с  передачей  сигналов  напрямую  между  L4Linux.  

•  Одна  и  та  же  память  используется  в  DDE_iPXE  для  приема  и  отправки  данных.  

Page 21: TMPA-2013 Sartakov: Genode

PC  <-­‐>  DRV<-­‐>  L4LInux  <-­‐>  L4Linux  <-­‐>  DRV  <-­‐>  SRV  

L4Linux  DRV  DRV  

L4Linux  PC1   SRV  

402/89  

~700  

Page 22: TMPA-2013 Sartakov: Genode

Профилирование  

•  Два  подхода  к  профилированию:  – Oprofile,  Профилирование  на  уровне  ядра.    (kernel  +  userspace)    

– Gprof,  профилирование  программ  (gcc  +  lib)  

•  Первый  затратный  по  реализации,  бесполезен  (как  оказалось  в  будущем)  

•  Требует  POSIX  совместимости  

Page 23: TMPA-2013 Sartakov: Genode

Профилирование  

•  Профилировщик  как  внутрисистемный  (внутриядерный)  отладчик  –  измерение  частоты  (количества)  и  продолжительности    

•  Констатировал  частое  нахождения  в  функциях  связанных  с  системными  вызовами  

•  Использование  памяти  ядра,  поскольку  «микроядерный»  дизайн  профилировщика  негативно  сказывался  на  производительности  системы  –  вносил  большую  погрешность    

•  Разработали  профилировщик  для  окружения:  –  Линкуется  на  старте  –  Сохраняет  данные  в  памяти,  выгружает  по  h£p,  поскольку  в  системе  отсутствует  носитель  

Page 24: TMPA-2013 Sartakov: Genode

Результаты  (в  тиках  процессора)  Процедура   Тики  процессора   модуль  

dde_kit_sem_up     13   lib/nic.c  [dde_ipxe]  

dde_kit_sem_down     59   lib/nic.c  [dde_ipxe]  

memcpy     23   lib/nic.c  [dde_ipxe]  

get_acked     46   nic/component.h  [Nic]  

submit_packet     190-­‐160k   nic/component.h  [Nic]  

packed_descriptor     10   nic/component.h  [Nic]  

get_packet   8   lib/l4lx/genode_net.cc  [L4Linux]  

acknowledge_packet   254   lib/l4lx/genode_net.cc  [L4Linux]  

submit_packet   65   lib/l4lx/genode_net.cc  [L4Linux]  

memcpy   25   lib/l4lx/genode_net.cc  [L4Linux]  

Page 25: TMPA-2013 Sartakov: Genode

Анализ  

•  submit_packet  -­‐  помещает  пакет  в  циклический  буфер  и  делает  IPC  запрос  к  другому  процессу.  

•  Спародически  может  увеличить  время  выполнения  до  190K  

•  Возможные  причины  –  реализация  драйвера,  управления  памятью,  управление  процессами.    

Page 26: TMPA-2013 Sartakov: Genode

Причины::Драйвера  

•  Драйвера:  – Не  поддерживает  MSI-­‐X,  как  следствие  приходится  использовать  прерывание  PCIe,  возникает  конкуренция  с  другими  устройствами    

– Не  объясняет  задержки  в  выполнении  

Page 27: TMPA-2013 Sartakov: Genode

Причины::Память  

•  Netperf  последовательно  увеличивает  размер  пакетов.  Чем  дольше  работает  тест,  тем  больший  разброс  значений  в  submit_packet.    

•  Гипотеза:  – Медленная  аллокация  памяти,  зависящая  от  размеров  региона.    

Page 28: TMPA-2013 Sartakov: Genode

Genode::allocator  

•  SLAB  Allocator.    –  Список  регионов  по  1KB,  2KB,16KB  

•  Кольцевой  буфер  между  сервисами:    – При  освобождении  памяти  одним  регионом  происходит  добавление  его  в  список  свободных  регионов,  в  частности  доступный  второму  сервису.      

•  При  передаче  данных  от  одного  сервиса  другому  происходит  unmap  

•  И  в  этот  момент  показалось  что  проблема  найдена  

Page 29: TMPA-2013 Sartakov: Genode

Но  нет    

•  Причиной  всему  оказались  блокировки.  

Page 30: TMPA-2013 Sartakov: Genode

Genode::mutex  

•  SMP  реализация  отличается  от  реализации  для  однопроцессорной  системы  

•  mutex  +  messaging  =  slow    •   idle  30%  (?!?!)  

Page 31: TMPA-2013 Sartakov: Genode

Решения  

•  Хорошие  решения:  – Уменьшить  количество  threads  в  драйверах    – Lockless  environment  (WIP)  

•  Вместо  блокировок  –  использование  задержек  по  времени  на  подобии  Read-­‐Copy-­‐Update  

 •  Плохие  решения:  

• Dataspace  (shared  memory)  • Прямой  доступ  L4Linux  к  устройству  

Page 32: TMPA-2013 Sartakov: Genode

Lockless  L4Re  

L4Linux  DRV  DRV  

L4Linux  PC1   SRV  

880  

~2Gb  

910  

Page 33: TMPA-2013 Sartakov: Genode

Выводы  

•  Сами  по-­‐себе  переключения  контекста,  количество  которых  значительно  в  сравнении  с  монолитно-­‐модульными  ядрами,  не  всегда  приводят  к  деградации  производительности.    

•  L4  окружения  требуют  адаптацию  прикладного  ПО,  не  смотря  на  наличие  DDE  китов    

•  Нет  предела  совершенству    

Page 34: TMPA-2013 Sartakov: Genode

Future  work    

•  Lockless  окружение  •  Custom  userspace  tcp/ip  stack,  virtual  switch,  driver  kit  

Page 35: TMPA-2013 Sartakov: Genode

Спасибо.