Upgrade to Pro — share decks privately, control downloads, hide ads and more …

TMPA-2013 Sartakov: Genode

TMPA-2013 Sartakov: Genode

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

5206c19df417b8876825b5561344c1a0?s=128

Exactpro
PRO

October 11, 2013
Tweet

Transcript

  1. Анализ  производительности   сетевой  подсистемы   микроядерного  окружения   Genode

          Сартаков  Василий,  Александр  Тарасиков     {sartakov,tarasikov}@ksyslabs.org   Tools  &  Methods  of  Program  Analysis,  2013  
  2. Agenda   •  Intro   •  Микроядра  и  их  окружения

      •  Пример  использования  –  Шлюз   •  Анализ  производительности   •  Заключение  
  3. Операционные  Систем   •  Управляют  ресурсами   – Hardware    

    – Somware   •  Предоставляет  интерфейс  к  ресурсам   •  Обеспечивает  изоляцию  и  совместное   использование  ресурсов  
  4. Монолитно-­‐модульный  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  
  5. Микроядро   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  
  6. История   •  Первое  поколение:  Mach  (CMU  1985-­‐1994,   GNU/Mach,

     OS  X)   •  Второе  поколение:  Minix3  (VU  Amsterdam)   •  Третье  поколение:  Семейство  L4   – L4Ka::Pistachio   – L4/Fiasco   – Fiasco.OC   – SeL4   ….    
  7. Fiasco.OC   •  C++   •  Object-­‐capability  uKernel   – Everything

     is  an  object   – Capabili•es  (контролируемые  ссылки  на   объекты)   •  Fiasco.OC  это  не  операционная  система,  она   требует  окружения:   – L4Re   – Genode  
  8. 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  
  9. Genode  

  10. Компоненты  Окружений   •  «Стандартные»  библиотеки  (uCLibc,  stdc++)   • 

    Драйвера:  iPXE_kit,  dde_kit   •  Паравиртуализированный  L4Linux     •  Компоненты  системы  (Ned,  IO,  Moe,  Sigma,   init)   •  Портированные  приложения  –  Qt,  LwIP  
  11. Gateway   Безопасная сеть Шлюз Интернет

  12. Gateway::Монолит   •  Уязвимость  в  драйвере:  Специально   сформированный  пакет

     -­‐>  срыв  -­‐>  доступ  к   памяти  ядра   •  «Умное»  устройство:  специально   сформированный  пакет  -­‐>  активация   закладки  в  сетевом  устройств  -­‐>  кража   данных  из  памяти   •  И  это  все  не  смешно  
  13. Gateway   Eth1   Fiasco.OC   DRV   DRV  

    Eth0   vEth   vEth   Firewall   Tcp/IP   App   Безопасная  среда   Внешняя  среда  
  14. Gateway   Eth1   Fiasco.OC   DRV   DRV  

    Eth0   vEth   vEth   Firewall   Tcp/IP   App   Безопасная  среда   App   Tcp/IP   L4Linux   L4Linux   DRV   DRV   Внешняя  среда  
  15. Упрощенная  схема   L4Linux   DRV   DRV   L4Linux

     
  16. L4Linux   vEth   DRV   TCP/IP   APP1  

    netperf   APP2   L4Linux  kernel  
  17. Netperf:  PC  <-­‐>  SRV   PC1   SRV   Подключение

     –  1gbps   704/703  
  18. Netperf:  PC  <-­‐>  Linux  PC  <-­‐>SRV   PC1   SRV

      Linux   700/700   DRV   DRV   TCP/IP  ip  route  
  19. PC  <-­‐>  DRV<-­‐>  L4LInux  <-­‐>  L4Linux  <-­‐>  DRV  <-­‐>  SRV

      L4Linux   DRV   DRV   L4Linux   PC1   SRV   64   Nic  Bridge   185   ~320  
  20. Первый  Анализ   •  Отказ  от  Nic  Bridge.  Вместо  него

     кольцевой   буффер  с  передачей  сигналов  напрямую   между  L4Linux.   •  Одна  и  та  же  память  используется  в   DDE_iPXE  для  приема  и  отправки  данных.  
  21. PC  <-­‐>  DRV<-­‐>  L4LInux  <-­‐>  L4Linux  <-­‐>  DRV  <-­‐>  SRV

      L4Linux   DRV   DRV   L4Linux   PC1   SRV   402/89   ~700  
  22. Профилирование   •  Два  подхода  к  профилированию:   – Oprofile,  Профилирование

     на  уровне  ядра.     (kernel  +  userspace)     – Gprof,  профилирование  программ  (gcc  +  lib)   •  Первый  затратный  по  реализации,   бесполезен  (как  оказалось  в  будущем)   •  Требует  POSIX  совместимости  
  23. Профилирование   •  Профилировщик  как  внутрисистемный   (внутриядерный)  отладчик  –

     измерение  частоты   (количества)  и  продолжительности     •  Констатировал  частое  нахождения  в  функциях   связанных  с  системными  вызовами   •  Использование  памяти  ядра,  поскольку   «микроядерный»  дизайн  профилировщика   негативно  сказывался  на  производительности   системы  –  вносил  большую  погрешность     •  Разработали  профилировщик  для  окружения:   –  Линкуется  на  старте   –  Сохраняет  данные  в  памяти,  выгружает  по  h£p,   поскольку  в  системе  отсутствует  носитель  
  24. Результаты  (в  тиках  процессора)   Процедура   Тики  процессора  

    модуль   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]  
  25. Анализ   •  submit_packet  -­‐  помещает  пакет  в   циклический

     буфер  и  делает  IPC  запрос  к   другому  процессу.   •  Спародически  может  увеличить  время   выполнения  до  190K   •  Возможные  причины  –  реализация   драйвера,  управления  памятью,   управление  процессами.    
  26. Причины::Драйвера   •  Драйвера:   – Не  поддерживает  MSI-­‐X,  как  следствие

      приходится  использовать  прерывание  PCIe,   возникает  конкуренция  с  другими   устройствами     – Не  объясняет  задержки  в  выполнении  
  27. Причины::Память   •  Netperf  последовательно  увеличивает   размер  пакетов.  Чем

     дольше  работает  тест,   тем  больший  разброс  значений  в   submit_packet.     •  Гипотеза:   – Медленная  аллокация  памяти,  зависящая  от   размеров  региона.    
  28. Genode::allocator   •  SLAB  Allocator.     –  Список  регионов

     по  1KB,  2KB,16KB   •  Кольцевой  буфер  между  сервисами:     –  При  освобождении  памяти  одним  регионом   происходит  добавление  его  в  список  свободных   регионов,  в  частности  доступный  второму  сервису.       •  При  передаче  данных  от  одного  сервиса   другому  происходит  unmap   •  И  в  этот  момент  показалось  что  проблема   найдена  
  29. Но  нет     •  Причиной  всему  оказались  блокировки.  

  30. Genode::mutex   •  SMP  реализация  отличается  от  реализации   для

     однопроцессорной  системы   •  mutex  +  messaging  =  slow     •   idle  30%  (?!?!)  
  31. Решения   •  Хорошие  решения:   – Уменьшить  количество  threads  в

     драйверах     – Lockless  environment  (WIP)   •  Вместо  блокировок  –  использование  задержек  по   времени  на  подобии  Read-­‐Copy-­‐Update     •  Плохие  решения:   •  Dataspace  (shared  memory)   •  Прямой  доступ  L4Linux  к  устройству  
  32. Lockless  L4Re   L4Linux   DRV   DRV   L4Linux

      PC1   SRV   880   ~2Gb   910  
  33. Выводы   •  Сами  по-­‐себе  переключения  контекста,   количество  которых

     значительно  в  сравнении  с   монолитно-­‐модульными  ядрами,  не  всегда   приводят  к  деградации  производительности.     •  L4  окружения  требуют  адаптацию  прикладного   ПО,  не  смотря  на  наличие  DDE  китов     •  Нет  предела  совершенству    
  34. Future  work     •  Lockless  окружение   •  Custom

     userspace  tcp/ip  stack,  virtual  switch,   driver  kit  
  35. Спасибо.