Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

Złam zasady i stwórz wydajny stos IP przy użyciu DPDK

712 views

Published on

W prezentacji znajdziesz opis zagadnienia przetwarzania pakietów w wysokowydajnych sieciach światłowodowych. Koncepcja przetwarzania ruchu sieciowego w przestrzeni użytkownika oparta jest na zastosowaniu frameworku DPDK na platformie Linux/x86.

Published in: Software
  • Login to see the comments

  • Be the first to like this

Złam zasady i stwórz wydajny stos IP przy użyciu DPDK

  1. 1. Złam zasady i stwórz wydajny stos IP przy użyciu DPDK Żeby złamac zasady najpierw trzeba je poznać Maciej Czekaj Kraków 2014
  2. 2. Plan 1. Po co nam kolejny stos? 1.1. Kiedy kernel nie daje rady? 1.2. Dlaczego Userspace 1.3. Łamiemy zasady 2. Omówienie DPDK 2.1. Jak działa aplikacja DPDK? 2.2. Struktury danych 2.3. Wątki i synchronizacja 2.4. Końcówki sieciowe: PMD i KNI 3. Przykład: Network Fast Path
  3. 3. Premature optimization is the root of all evil. Donald Knuth 1. Po co nam kolejny stos? 1.1.Kiedy kernel nie daje rady? 1.2.Dlaczego Userspace 1.3.Łamiemy zasady 2. Omówienie DPDK 2.1.Jak działa aplikacja DPDK? 2.2.Struktury danych 2.3.Wątki i synchronizacja 2.4.Końcówki sieciowe: PMD i KNI 3. Przykład: Network Fast Path
  4. 4. • Łacza optyczne >= 10Gb/s • 10Gb/s = 14,8 Mln 64B pakietów na sekunde • 67,2 ns na pakiet = 200 cykli dla 3Ghz • 200 cykli = 1 dostęp do RAM albo 200 cykli = 5 dostępów do L3*14 • Linux jako router robi ~1M pps :( Wyzwania infrastruktury w sieci *Intel Xeon 5500
  5. 5. • Przerwania (zmiana trybu CPU) 50 ns • Wątki (zmiana kontekstu) - 1000ns • Duża przepustowość systemu = duże opóźnienie • Router: ilość pracy ~ ilość pakietów • Serwer: ilość pracy ~ ilość danych Czemu linux nie daje rady? Kernel User Space Hardware NIC eth driver NICNIC Application IP Stack eth driver eth driver
  6. 6. User Space + Dedykowana pamięć - HugeTLB + Dedykowany rdzeń procesora + Nieograniczony polling - małe opóźnienienie + Biblioteki i narzędzia = Bezpośredni dostęp do sprzętu (DMA) – Brak interakcji z systemem Co daje Userspace Kernel Space Hardware NIC APP IP Stack eth driver eth driver driver stack NIC NIC
  7. 7. • Architektura warstwowa • Przenośność • Współdzielenie zasobów Łamiemy zasady
  8. 8. Inżynier wie, że osiągnął doskonałość nie wtedy, kiedy nie można nic już dodać, ale kiedy nie można nic już zabrać. Antoine de Saint-Exupery 1. Po co nam kolejny stos? 1.1.Kiedy kernel nie daje rady? 1.2.Dlaczego Userspace 1.3.Łamiemy zasady 2. Omówienie DPDK 2.1.Jak działa aplikacja DPDK? 2.2.Struktury danych 2.3.Wątki i synchronizacja 2.4.Końcówki sieciowe: PMD i KNI 3. Przykład: Network Fast Path
  9. 9. User Space • Prosta biblioteka do obsługi pakietów • Bezpośredni dostęp do karty sieciowej i DMA • Zero kopiowania • Interakcje ze stosem jądra przez moduł KNI Co to jest DPDK? Kernel Space Hardware DPDK APP KNI PMD DPDK Library UIO PMD IP Stack eth driver eth driver NIC NICNIC NIC
  10. 10. Aplikacja DPDK • Polling • Run to completion • Wątki przypięte do rdzeni (lcore) • Stała alokacja zasobów • Lokalne dane, lokalna pamięć Szybko = Prosto Hardware PMD lcore NIC PMD NIC PMD lcore NIC PMD NIC
  11. 11. Aplikacja DPDK while (true) { packets = poll(pmd) process(packets) xmit(packets) } Run to completion Hardware NIC NIC PMD NIC PMD NIC lcore PMD lcore PMD lcore
  12. 12. Modele pracy Run-to-Completion lcore 1: RX-forward-TX port port Pipeline lcore 1: RX and classify port port lcore 2: priority TX
  13. 13. 1. Po co nam kolejny stos? 1.1.Kiedy kernel nie daje rady? 1.2.Dlaczego Userspace 1.3.Łamiemy zasady 2. Omówienie DPDK 2.1.Jak działa aplikacja DPDK? 2.2.Struktury danych 2.3.Wątki i synchronizacja 2.4.Końcówki sieciowe: PMD i KNI 3. Przykład: Network Fast Path
  14. 14. rte_malloc Sterta z hugepage’y Składowe DPDK rte_eal Warstwa abstrakcji: uruchamianie, sterta, wątki, timery, PCI, log, debug etc. rte_ring Bezlockowe kolejki wskaźników rte_mempool Pule pamięci rte_mbuf Bufory pakietów/kontrolne. Używa puli pamięci. rte_cmdline Command line interface (CLI) rte_ether Poll mode driver rte_hash Tablica haszująca rte_kni Kernel NIC interface rte_lpm Longest prefix match (DIR-24-8) rte_meter + rte_sched Planista QoS i WRED rte_pmd_* Sterowniki PMD rte_timer Timer rte_net Protokoły (ARP, IP, TCP, UDP...)
  15. 15. rte_memzone_reserve(name, len, socket, size) rte_mempool_create(name, n, elt_size, ...) Zarządzanie pamięcią pamięć fizyczna ciągły obszar hugepage’y pamięć aplikacji mempoolring stertawolna rte_pktmbuf_alloc(mempool) rte_pktmbuf rte_mempool wolne ◌ wolne obiekty mbufwolne wolne mbuf mbuf mbuf prywatnewolne headroom tailroomdata następny lub NULL next
  16. 16. • Stały rozmiar obiektów • Minimalny czas alokacji/zwalniania • Bezpieczne dla wielu wątków (tylko lcore) • Stosowana do alokacji pakietów Pula pamięci a tradycyjna sterta rte_mempool wolne ◌ wolne obiekty mbufwolne wolne mbuf mbuf mbuf prywatnywolne wolne zajęte
  17. 17. Bufor pakietu: rte_mbuf 1. Zawiera dane lub informacje kontrolne 2. Alokowany z puli (rte_mempool) 3. Nagłówek to metadane (długość, port, flagi) 4. Pakiet może być klonowany (zliczanie referencji) rte_pktmbuf_alloc(mempool) rte_pktmbuf rte_mempool mbuf ◌ wolne objekty mbufmbuf mbuf mbuf mbuf mbuf prywatnembuf headroom tailroomdata next następny lub NULL
  18. 18. • Duże ramki Jumbo (> 1500 B) • Scatter-Gather IO (DMA) • Można bezkosztowo “doklejać” dane do ramek • Przydatne w enkapsulacji i łączeniu pakietów Długie bufory mbuf mbuf mbuf mbuf next next next NULL
  19. 19. • Cykliczna tablica o stałym rozmiarze - FIFO • Działa wielowątkowo bez locków • Można zakolejkować wiele obiektów na raz • Różne wersje, m.in: • multi-consumer/single-consumer • multi-producer/single-producer Kolejka cykliczna: rte_ring Cons Prod
  20. 20. 1. Po co nam kolejny stos? 1.1. Kiedy kernel nie daje rady? 1.2. Dlaczego Userspace 1.3. Łamiemy zasady 2. Omówienie DPDK 2.1. Jak działa aplikacja DPDK? 2.2. Struktury danych 2.3. Wątki i synchronizacja 2.4. Końcówki sieciowe: PMD i KNI 3. Przykład: Network Fast Path
  21. 21. Aplikacja DPDK lcore lcore PMD Wątki w DPDK mailbox (rte_ring) mailbox send mailbox (rte_ring) • Komunikacja za pomocą kolejek • Nieblokująca (polling) • rte_mempool używa kolejek do synchronizacji • Preferowany single-producer/single-consumer PMD PMD PMD
  22. 22. DPDK a wielowątkowość • Krytyczne dla wydajności funkcje nie są synchronizowane: hash, LPM... • Niekrytyczne funkcje są: malloc, memzone... • Szybkie i synchronizowane: kolejki i pule • Libc jest nie zalecane w DPDK! - syscalle lub locki • Można swtorzyć “wolny” wątek korzystajac z pthread i komunikować się przez kolejki z lcore’ami Aplikacja DPDK lcore lcore pthread
  23. 23. 1. Po co nam kolejny stos? 1.1. Kiedy kernel nie daje rady? 1.2. Dlaczego Userspace 1.3. Łamiemy zasady 2. Omówienie DPDK 2.1. Jak działa aplikacja DPDK? 2.2. Struktury danych 2.3. Wątki i synchronizacja 2.4. Końcówki sieciowe: PMD i KNI 3. Przykład: Network Fast Path
  24. 24. MempoolPMD Poll Mode Driver • Lekka abstrakcja urządzenia sieciowego • Udostępnia rejestry karty sieciowej do userspace • Transfer (DMA) pakietów • Zarządzanie buforami • Obsługa dodatkowych funkcji: MAC, link, statystyki, etc. Aplikacja NIC RX m m m m m m m m RX m TX TX m
  25. 25. • Intel 1Gb (igb), 10Gb (ixgbe) • virtio_net (QEMU) • ivshmem (QEMU) • Intel SR-IOV (igb, ixgbe) • libpcap (tcpdump) • … (komercyjne) Rodzaje interfejsów PMD
  26. 26. • Komunikacja ze stosem TCP/IP jądra • Pseudo-interfejs sieciowy (widoczny w ifconfig) • Pakiety są kopiowane 1. Interface with the kernel network stack Kernel Space rte_kni Kernel NIC Interface User Space Hardware NIC DPDK Poll Mode Driver KNI Driver stos TCP/IP vEth0 lcore 1: KNI port TX lcore 2: KNI port RX NIC vEth0
  27. 27. 1. Po co nam kolejny stos? 1.1. Kiedy kernel nie daje rady? 1.2. Dlaczego Userspace 1.3. Łamiemy zasady 2. Omówienie DPDK 2.1. Jak działa aplikacja DPDK? 2.2. Struktury danych 2.3. Wątki i synchronizacja 2.4. Końcówki sieciowe: PMD i KNI 3. Przykład: Network Fast Path
  28. 28. IP: 10.2.0.1 DMAC: A SMAC: ... Przykład: Network Fast Path Fast Path (aplikacja DPDK) Port BPort A Kernel (slow path) Next hop 10.1.0.1/16 10.2.0.1/16 IP: 10.2.0.1 SMAC: B DMAC: NH
  29. 29. input(packet) { flow = (src_ip,src_port,dst_ip,dst_port,proto) out_intf = routing_tbl.lookup(flow) if (! out_intf) kernel_intf.send(packet) else out_intf.send(packet) } output(out_intf, packet) { flow = (src_ip,src_port,dst_ip,dst_port,proto) routing_tbl.insert(flow, out_intf) out_intf.send(packet) } Algorytm Network Fast Path
  30. 30. TX RX Architektura Routera lcore 1 1 kolejka RX 1 kolejka TX na port lcore 2 1 kolejka RX 1 kolejka TX na port lcore 4 1 kolejka RX 1 kolejka TX na port ... port 0 q1 q2 q4... port 1 q1 q2 q4... port 2 q1 q2 q4... port 0 q1 q2 q4... port 1 q1 q2 q4... port 2 q1 q2 q4...
  31. 31. TX RX Architektura Routera lcore 1 1 kolejka RX 1 kolejka TX na port lcore 2 1 kolejka RX 1 kolejka TX na port port 0 q1 q2 q4... port 1 q1 q2 q4... port 1 q1 q2 q4...port 0 q1 q2 q4...
  32. 32. • www.dpdk.org • Prezentacja Intela http://www.intel.com/content/dam/www/public/us/en/documents/presentation/ dpdk-packet-processing-ia-overview-presentation.pdf • What Every Programmer Should Know About Memory http://www.akkadia.org/drepper/cpumemory.pdf • How long does it take to make a context switch? http://blog.tsunanet.net/2010/11/how-long-does-it-take-to-make-context.html Źródła
  33. 33. Pytania?

×