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.
Złam zasady i stwórz wydajny stos IP przy użyciu DPDK
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. 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. 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. • Ł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. • 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. 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
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. 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. 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. 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
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. 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. 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. • 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. 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. • 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. • 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. 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. 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. 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. 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. 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
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. 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. 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
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. 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. • 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