100 M pakietów na sekundę dla każdego.

Redge Technologies
Redge TechnologiesRedge Technologies
100 mln pakietów na sekundę dla
każdego
ICWAT 2015.11.12
Paweł Małachowski
Michał Mirosław
2
Multimedia
Smart Grid
Cyberbezpieczeństwo
Phoenix-RTOS
Phoenix-PRIME
Hermes
Grupa Kapitałowa Atende Software
Wybrani klienci
http://antyweb.pl/odwiedzilismy-atende-software-to-dzieki-nim-mozecie-ogladac-iple-i-player-pl/
Szybko, szybciej…
Skąd taki temat?
5
Obecnie rozwijamy usługę redGuardian (anty DDoS) i chcemy
przybliżyćWam zagadnienie wydajnej obsługi ruchu IP na
platformie klasy PC.
Obsługa to routing, firewalling, load balancing, deep packet
inspection (DPI, IDS/IPS)…
… bez akceleracji aplikacji, bo to mógłby być osobny temat.
100 milionów? Ale pakietów…
Nasze realia:
• Ethernet 1 Gbit/s jest standardem
• Porty 10 Gbit/s on-board w serwerach
stają się coraz popularniejsze
• 40 Gbit/s i 100 Gbit/s – na razie
głównie w sieci szkieletowej
6
Policzmy:
• Miary: bps vs. pps
• 10 Gbit/s to inaczej
• 0,81 Mpps przy ramkach 1500B
• ~14,88 Mpps przy małych ramkach (64B + 20B luka i preambuła)
• Zatem 100 Mpps wymaga minimum 7 x 10G
Wydajna obsługa sieci vs. współczesny sprzęt klasy PC
• CPU i magistrala
– PCI Express 3.x: ~985 MB/s każda na linię
– współczesny Xeon na LGA 2011 ma 40 linii PCIe 3.0 czyli ~39GB/s (~315Gbit/s)
– uwaga na narzut magistrali
– a przecież można kupić płytę 2 x CPU
– do tego nawet 45MB cache L3
– Intel DDIO
• Pamięć operacyjna
– DDR4, np. PC-2133, 4 kanały po ~17GB/s
• Karty sieciowe
– bogata oferta Intel, Broadcom, Chelsio, Mellanox, Solarflare i innych
– sprzętowe wsparcie hashowania pakietów do wielu kolejek
– 1 x 10Gbit/s, 2 x 10Gbit/s, 4 x 10Gbit/s, 1 x 40Gbit/s, 2 x 40Gbit/s (oszukane)
– 100Gbit/s – nisza, ale wszystko jest kwestią czasu (i PCIe 4.x)
7
Już dziś serwer zdolny obsłużyć 200 Gbit/s jest w zasięgu ręki: kilkanaście tys. PLN
na PC + kilka tys. PLN na karty sieciowe.
Nasz LAB
8
Osiągi: oczekiwania kontra rzeczywistość
• aplikacyjny flooder:
– ~100-200 kpps per core
– ale z pomijaniem qdisc: ~1 Mpps per core
• in-kernel pktgen: ~5 Mpps per core
• prosty aplikacyjny sender+receiver:
– UDP lub HTTP z minimalnym responsem
– ~200-500 kpps per core
– trudne strojenie
• realnie z całej maszyny ciężko wyjść ponad
kilka Mpps na prostej aplikacji
9
źródła:
• badania własne
• https://blog.cloudflare.com/how-to-receive-a-million-packets/
Skomplikowany świat kernela: podsystemy
Sterownik NIC
Abstrakcja urządzenia
Warstwa 2
Bridge
Routing
Firewall
Kolejkowanie
Gniazda dla aplikacji
10
źródło: https://upload.wikimedia.org/wikipedia/commons/5/5b/Linux_kernel_map.png
Skomplikowany świat kernela: obsługa sieci
11
źródło: http://www.linuxfoundation.org/images/1/1c/Network_data_flow_through_kernel.png
Szybko, szybciej… a tu ściana.
Co można z tym zrobić?
Budżet mocy vs. koszty przetwarzania
• Aby uzyskać 14,8 Mpps potrzebujemy:
– 1277 ns na duży pakiet
– ~67,2 ns na mały pakiet
• daje to w uproszczeniu (pomijając zrównoleglanie) około 200 cykli
współczesnego 3GHz CPU
• Dla porównania:
– L2 cache: ~4 ns
– L3 cache: ~8 ns
– atomic lock+unlock: 16 ns
– cache miss: ~32ns
– syscall: 50–100 ns (uwaga na wpływ SELinux)
Źródła:
• „Network stack challenges at increasing speeds. The 100Gbit/s challenge”, RedHat 2015
• „HOW TO TEST 10 GIGABIT ETHERNET PERFORMANCE”, Spirent Whitepaper, 2012
13
Co robić, jak żyć?
Najlepiej:
• nie sięgać do pamięci operacyjnej, tylko do CPU cache
– prefetching
– małe struktury danych
• unikanie locków, struktury danych per core i lock-free
• NUMA awareness, CPU pinning
• minimalizowanie syscalli, brak context switchy
Ponadto:
• batchowanie pakietów
• polling zamiast przerwań
• kilka rdzeni CPU na port
• brak kopiowania danych (zero copy)
• prealokacja całej pamięci, huge pages (TLB friendly)
14
Kernel: panu już dziękujemy
• bezpośrednia obsługa karty sieciowej przez proces w
userspace
– PCI UIO
– sterowniki dla różnych kart
– współdzielenie karty z systemem
• brak stosu sieciowego
– tracimy firewall, kolejkowanie,TCP/IP socket API dla aplikacji
– dostajemy surowe ramki i wszystko robimy „na piechotę” (packet
forwarding, firewalling, sniffing itp.)
15
Userland dataplane – wybrane implementacje
• DPDK
– C, licencja BSD
– własne sterowniki
• Netmap
– C, licencja BSD
– zmodyfikowany sterownik jądra
• PF_RING ZC
– C, licencja LGPL (ale: licencjonowany moduł zero–copy)
– zmodyfikowany sterownik jądra
• Snabb switch
– LuaJIT, licencja Apache
– własne sterowniki
16
Case study
JAK ŁATWO
ZEPSUĆ WYDAJNOŚĆ
na przykładzie policera
ZADANIE
18
• ograniczenie przepustowości
(rate limiting, policing)
• bez kolejkowania pakietów
ZADANIE – LAB
19
WARUNKI LAB
• 4 – core 3 GHz
• 4 x 10GE
• 10GE / 64B ≈ 14,88 Mpps
• ~200 cykli/pakiet
• RX/TX: -100 cykli/pakiet
» 100 cykli?
DAMY RADĘ!
20
ALGORYTM
21
ALGORYTM
22
IMPLEMENTACJA #1
; %rsi = pktbuf, %rdi = policer_state
loop:RX...
movl bucket(%rdi), %eax
subl len(%rsi), %eax
jb loop ; drop
movl %eax, bucket(%rdi)
TX...
jmp loop
23
IMPLEMENTACJA #1 - SYMULACJA
*******************************************************************
Intel(R) Architecture Code Analyzer Mark Number 1
*******************************************************************
Throughput Analysis Report
--------------------------
Block Throughput: 1.00 Cycles
| Num Of | Ports pressure in cycles | |
| Uops | 0 - DV | 1 | 2 - D | 3 - D | 4 | 5 | 6 | 7 | |
---------------------------------------------------------------------------------
| 0* | | | | | | | | | | nop
| 1 | | | 1.0 1.0 | | | | | | CP | mov eax, dword ptr [rdi]
| 2^ | 0.5 | | | 1.0 1.0 | | | 0.5 | | CP | sub eax, dword ptr [rsi]
| 0F | | | | | | | | | | jb 0xfffffffffffffffb
| 2^ | | | | | 1.0 | | | 1.0 | CP | mov dword ptr [rdi], eax
Total Num Of Uops: 5
24
MULTI–CORE
CORE 1_ CORE 2_
movl bucket(%rdi), %eax ...
subl len(%rsi), %eax movl bucket(%rdi), %eax
jb loop ; drop subl len(%rsi), %eax
movl %eax, bucket(%rdi) jb loop ; drop
... movl %eax, bucket(%rdi)
25
MULTI–CORE
CORE 1_ CORE 2_
movl bucket(%rdi), %eax ...
subl len(%rsi), %eax movl bucket(%rdi), %eax
jb loop ; drop subl len(%rsi), %eax
movl %eax, bucket(%rdi) jb loop ; drop
... movl %eax, bucket(%rdi)
2 pakiety zamiast 1!
26
IMPLEMENTACJA #2
; %rsi = pktbuf, %rdi = policer_state
loop:RX...
movl bucket(%rdi), %eax
redo:movl %eax, %edx
subl len(%rsi), %edx
jb loop ; drop
lock cmpxchg %edx, bucket(%rdi)
jnz redo
TX...
jmp loop
27
IMPLEMENTACJA #2 - SYMULACJA
*******************************************************************
Intel(R) Architecture Code Analyzer Mark Number 2
*******************************************************************
Throughput Analysis Report
--------------------------
Block Throughput: 2.00 Cycles
| Num Of | Ports pressure in cycles | |
| Uops | 0 - DV | 1 | 2 - D | 3 - D | 4 | 5 | 6 | 7 | |
---------------------------------------------------------------------------------
| 0* | | | | | | | | | | nop
| 1 | | | 0.5 0.5 | 0.5 0.5 | | | | | | mov eax, dword ptr [rdi]
| 0* | | | | | | | | | | mov edx, eax
| 2^ | 0.6 | | 0.5 0.5 | 0.5 0.5 | | | 0.3 | | | sub eax, dword ptr [rsi]
| 0F | | | | | | | | | | jb 0xfffffffffffffff9
| 4^ | 0.2 | 1.2 | 0.5 0.5 | 0.5 0.5 | | 1.2 | 0.3 | | | lock cmpxchg [rdi], edx
| 1 | 0.4 | | | | | | 0.6 | | | jnz 0xfffffffffffffff6
Total Num Of Uops: 8
28
IMPLEMENTACJA #2 – SMOKE TEST
• 1 core → 10 Gbps DZIAŁA!
• 2 core → 19 Gbps
(to na pewno źle generator liczy)
• 4 core → 15 Gbps … ???
29
IMPLEMENTACJA #3
; %rsi = pktbuf, %rdi = policer_state
loop:RX...
movl bucket(%rdi), %eax
movl len(%rsi), %edx
subl %edx, %eax
js loop ; drop
lock subl %edx, bucket(%rdi)
TX...
jmp loop
30
IMPLEMENTACJA #3 - SYMULACJA
*******************************************************************
Intel(R) Architecture Code Analyzer Mark Number 3
*******************************************************************
Throughput Analysis Report
--------------------------
Block Throughput: 1.50 Cycles
| Num Of | Ports pressure in cycles | |
| Uops | 0 - DV | 1 | 2 - D | 3 - D | 4 | 5 | 6 | 7 | |
---------------------------------------------------------------------------------
| 0* | | | | | | | | | | nop
| 1 | | | 0.5 0.5 | 0.5 0.5 | | | | | CP | mov eax, dword ptr [rdi]
| 1 | | | 0.5 0.5 | 0.5 0.5 | | | | | CP | mov edx, dword ptr [rsi]
| 1 | 0.5 | | | | | | 0.5 | | | sub eax, edx
| 0F | | | | | | | | | | js 0xfffffffffffffff9
| 4^ | | 0.5 | 0.5 0.5 | 0.5 0.5 | 1.0 | 0.5 | | 1.0 | CP | lock sub [rdi], edx
Total Num Of Uops: 7
31
IMPLEMENTACJA #3 – SMOKE TEST
• 1 core → 10 Gbps
• 2 core → 20 Gbps
(a może jednak generator dobrze liczy?)
• 4 core → 25 Gbps
SKUCHA :-(
32
KONKURENCJA SMP
33
KONKURENCJA SMP
34
KONKURENCJA SMP
35
IMPLEMENTACJA #4 – POWRÓT DO POCZĄTKU
; %rsi = pktbuf, %rdi = policer_state
loop:RX...
movl bucket(%rdi), %eax
subl len(%rsi), %eax
jb loop ; drop
movl %eax, bucket(%rdi)
TX...
jmp loop
36
PO ¼ WIADERKA PER CORE
IMPLEMENTACJA #4 – SMOKE TEST
• 1 core → 10 Gbps
• 2 core → 20 Gbps
• 4 core → 40 Gbps
TAK MIAŁO BYĆ!
37
IMPLEMENTACJA #4 – CO DALEJ?
• Nie zadziała poprawnie przy nierównym podziale ruchu
– Musimy dynamicznie zmieniać podział
• Policerów potrzeba więcej niż jeden
– Nie możemy zmieniać wszystkich za każdym razem
• Potrzebujemy statystyk
– Dodatkowe obciążenieCPU cache
38
cdn.
Co nas czeka? Perspektywy rozwoju tej dziedziny
1. NFV: wydajniejsze wirtualne appliance (firewall, load balancer, NAT) w
postaci obrazówVM, które osiągają wydajność zbliżoną do sprzętu
2. Zwiększanie wydajności obsługi sieci w hypervisorach i ich wirtualnych
sieciach (zero copy)
3. Optymalizacje stosu sieciowego w systemach operacyjnych
(zapożyczanie technik)
4. Integracja z systemami operacyjnymi OOTB, np.
1. przyspieszenie firewalli
2. stosTCP/IP w userland, dołączany per proces
5. Sukcesywne wypieranie rozwiązań sprzętowych
6. Wzrost znaczenia otwartych architektur sprzętu sieciowego
39
Czytali
Paweł Małachowski
40
Michał Mirosław
Atende Software sp. z o.o.
Dział Systemów Bezpieczeństwa
Dziękujemy za uwagę!
http://atendesoftware.pl/career/aboutus
1 sur 41

Recommandé

100Mpps czyli jak radzić sobie z atakami DDoS? par
100Mpps czyli jak radzić sobie z atakami DDoS?100Mpps czyli jak radzić sobie z atakami DDoS?
100Mpps czyli jak radzić sobie z atakami DDoS?Redge Technologies
905 vues15 diapositives
Ochrona przed atakami DDoS na platformie x86. Czy można mieć jednocześnie wyd... par
Ochrona przed atakami DDoS na platformie x86. Czy można mieć jednocześnie wyd...Ochrona przed atakami DDoS na platformie x86. Czy można mieć jednocześnie wyd...
Ochrona przed atakami DDoS na platformie x86. Czy można mieć jednocześnie wyd...Redge Technologies
716 vues24 diapositives
SCAP – standaryzacja formatów wymiany danych w zakresie bezpieczeństwa IT par
SCAP – standaryzacja formatów wymiany danych w zakresie bezpieczeństwa ITSCAP – standaryzacja formatów wymiany danych w zakresie bezpieczeństwa IT
SCAP – standaryzacja formatów wymiany danych w zakresie bezpieczeństwa ITRedge Technologies
573 vues23 diapositives
PLNOG 9: Jacek Skowyra - Carrier Grad NAT par
PLNOG 9: Jacek Skowyra - Carrier Grad NATPLNOG 9: Jacek Skowyra - Carrier Grad NAT
PLNOG 9: Jacek Skowyra - Carrier Grad NATPROIDEA
7 vues42 diapositives
PLNOG 8: Łukasz Bromirski - IP Anycast - Ochrona i skalowanie usług sieciowych par
PLNOG 8: Łukasz Bromirski - IP Anycast - Ochrona i skalowanie usług sieciowych PLNOG 8: Łukasz Bromirski - IP Anycast - Ochrona i skalowanie usług sieciowych
PLNOG 8: Łukasz Bromirski - IP Anycast - Ochrona i skalowanie usług sieciowych PROIDEA
49 vues33 diapositives
PLNOG 9: Daniel Fenert - nazwa.pl - nieustanny rozwój par
PLNOG 9: Daniel Fenert - nazwa.pl - nieustanny rozwój PLNOG 9: Daniel Fenert - nazwa.pl - nieustanny rozwój
PLNOG 9: Daniel Fenert - nazwa.pl - nieustanny rozwój PROIDEA
10 vues25 diapositives

Contenu connexe

Tendances

PLNOG16: Wielopunktowy VPN, Piotr Głaska par
PLNOG16: Wielopunktowy VPN, Piotr GłaskaPLNOG16: Wielopunktowy VPN, Piotr Głaska
PLNOG16: Wielopunktowy VPN, Piotr GłaskaPROIDEA
209 vues36 diapositives
Złam zasady i stwórz wydajny stos IP przy użyciu DPDK par
Złam zasady i stwórz wydajny stos IP przy użyciu DPDKZłam zasady i stwórz wydajny stos IP przy użyciu DPDK
Złam zasady i stwórz wydajny stos IP przy użyciu DPDKSemihalf
811 vues33 diapositives
PLNOG16: Transport ruchu klientów - MPLS L2 i L3, Tomasz Jedynak par
PLNOG16: Transport ruchu klientów - MPLS L2 i L3, Tomasz JedynakPLNOG16: Transport ruchu klientów - MPLS L2 i L3, Tomasz Jedynak
PLNOG16: Transport ruchu klientów - MPLS L2 i L3, Tomasz JedynakPROIDEA
381 vues35 diapositives
Allegro Tech Talks Poznań #4: Jak przyspieszyć SOLRa w kilku prostych krokach. par
Allegro Tech Talks Poznań #4: Jak przyspieszyć SOLRa w kilku prostych krokach. Allegro Tech Talks Poznań #4: Jak przyspieszyć SOLRa w kilku prostych krokach.
Allegro Tech Talks Poznań #4: Jak przyspieszyć SOLRa w kilku prostych krokach. allegro.tech
1.8K vues70 diapositives
PLNOG 8: Przemysław Grygiel - Data Center Allegro wyboista droga L2 do autost... par
PLNOG 8: Przemysław Grygiel - Data Center Allegro wyboista droga L2 do autost...PLNOG 8: Przemysław Grygiel - Data Center Allegro wyboista droga L2 do autost...
PLNOG 8: Przemysław Grygiel - Data Center Allegro wyboista droga L2 do autost...PROIDEA
49 vues32 diapositives
GlusterFS par
GlusterFSGlusterFS
GlusterFSŁukasz Jagiełło
1.8K vues32 diapositives

Tendances(20)

PLNOG16: Wielopunktowy VPN, Piotr Głaska par PROIDEA
PLNOG16: Wielopunktowy VPN, Piotr GłaskaPLNOG16: Wielopunktowy VPN, Piotr Głaska
PLNOG16: Wielopunktowy VPN, Piotr Głaska
PROIDEA209 vues
Złam zasady i stwórz wydajny stos IP przy użyciu DPDK par Semihalf
Złam zasady i stwórz wydajny stos IP przy użyciu DPDKZłam zasady i stwórz wydajny stos IP przy użyciu DPDK
Złam zasady i stwórz wydajny stos IP przy użyciu DPDK
Semihalf811 vues
PLNOG16: Transport ruchu klientów - MPLS L2 i L3, Tomasz Jedynak par PROIDEA
PLNOG16: Transport ruchu klientów - MPLS L2 i L3, Tomasz JedynakPLNOG16: Transport ruchu klientów - MPLS L2 i L3, Tomasz Jedynak
PLNOG16: Transport ruchu klientów - MPLS L2 i L3, Tomasz Jedynak
PROIDEA381 vues
Allegro Tech Talks Poznań #4: Jak przyspieszyć SOLRa w kilku prostych krokach. par allegro.tech
Allegro Tech Talks Poznań #4: Jak przyspieszyć SOLRa w kilku prostych krokach. Allegro Tech Talks Poznań #4: Jak przyspieszyć SOLRa w kilku prostych krokach.
Allegro Tech Talks Poznań #4: Jak przyspieszyć SOLRa w kilku prostych krokach.
allegro.tech1.8K vues
PLNOG 8: Przemysław Grygiel - Data Center Allegro wyboista droga L2 do autost... par PROIDEA
PLNOG 8: Przemysław Grygiel - Data Center Allegro wyboista droga L2 do autost...PLNOG 8: Przemysław Grygiel - Data Center Allegro wyboista droga L2 do autost...
PLNOG 8: Przemysław Grygiel - Data Center Allegro wyboista droga L2 do autost...
PROIDEA49 vues
PLNOG 6: Łukasz Jagiełło - Wdrożenie skalowalnego systemu plików GlusterFS w ... par PROIDEA
PLNOG 6: Łukasz Jagiełło - Wdrożenie skalowalnego systemu plików GlusterFS w ...PLNOG 6: Łukasz Jagiełło - Wdrożenie skalowalnego systemu plików GlusterFS w ...
PLNOG 6: Łukasz Jagiełło - Wdrożenie skalowalnego systemu plików GlusterFS w ...
PROIDEA8 vues
PLNOG 4: Agata Malarczyk, Łukasz Nierychło - Jak urządzenia D-Link przenoszą ... par PROIDEA
PLNOG 4: Agata Malarczyk, Łukasz Nierychło - Jak urządzenia D-Link przenoszą ...PLNOG 4: Agata Malarczyk, Łukasz Nierychło - Jak urządzenia D-Link przenoszą ...
PLNOG 4: Agata Malarczyk, Łukasz Nierychło - Jak urządzenia D-Link przenoszą ...
PROIDEA27 vues
Qnap - rozwiązania, portfolio, zastosowanie par EIP Sp. z o.o.
Qnap  - rozwiązania, portfolio, zastosowanieQnap  - rozwiązania, portfolio, zastosowanie
Qnap - rozwiązania, portfolio, zastosowanie
EIP Sp. z o.o.111 vues
PLNOG 9: Krzysztof Mazepa - Dostęp szerokopasmowy IPv6 par PROIDEA
PLNOG 9: Krzysztof Mazepa - Dostęp szerokopasmowy IPv6PLNOG 9: Krzysztof Mazepa - Dostęp szerokopasmowy IPv6
PLNOG 9: Krzysztof Mazepa - Dostęp szerokopasmowy IPv6
PROIDEA51 vues
PLNOG15: IP services architecture with TDM quality in MPLS/IP networks - Mare... par PROIDEA
PLNOG15: IP services architecture with TDM quality in MPLS/IP networks - Mare...PLNOG15: IP services architecture with TDM quality in MPLS/IP networks - Mare...
PLNOG15: IP services architecture with TDM quality in MPLS/IP networks - Mare...
PROIDEA155 vues
PLNOG 9: Borys Owczarzak - Winogrady IPv6 ready par PROIDEA
PLNOG 9: Borys Owczarzak - Winogrady IPv6 ready PLNOG 9: Borys Owczarzak - Winogrady IPv6 ready
PLNOG 9: Borys Owczarzak - Winogrady IPv6 ready
PROIDEA12 vues
PLNOG 8: Lucjan Kisiel, Marcin Matyla - Router brzegowy z wydolnością 3 Gb ru... par PROIDEA
PLNOG 8: Lucjan Kisiel, Marcin Matyla - Router brzegowy z wydolnością 3 Gb ru...PLNOG 8: Lucjan Kisiel, Marcin Matyla - Router brzegowy z wydolnością 3 Gb ru...
PLNOG 8: Lucjan Kisiel, Marcin Matyla - Router brzegowy z wydolnością 3 Gb ru...
PROIDEA29 vues
PLNOG 21: Piotr Okupski - Wieloetapowe_filtrowanie_ruchu_DDoS_za_pomocą_Wangu... par PROIDEA
PLNOG 21: Piotr Okupski - Wieloetapowe_filtrowanie_ruchu_DDoS_za_pomocą_Wangu...PLNOG 21: Piotr Okupski - Wieloetapowe_filtrowanie_ruchu_DDoS_za_pomocą_Wangu...
PLNOG 21: Piotr Okupski - Wieloetapowe_filtrowanie_ruchu_DDoS_za_pomocą_Wangu...
PROIDEA45 vues
PLNOG 9: Łukasz Bromirski, Rafał Szarecki - MPLS VPN - Architektura i przeglą... par PROIDEA
PLNOG 9: Łukasz Bromirski, Rafał Szarecki - MPLS VPN - Architektura i przeglą...PLNOG 9: Łukasz Bromirski, Rafał Szarecki - MPLS VPN - Architektura i przeglą...
PLNOG 9: Łukasz Bromirski, Rafał Szarecki - MPLS VPN - Architektura i przeglą...
PROIDEA24 vues
Stosy sieciowe w przestrzeni użytkownika. par Semihalf
Stosy sieciowe w przestrzeni użytkownika.Stosy sieciowe w przestrzeni użytkownika.
Stosy sieciowe w przestrzeni użytkownika.
Semihalf439 vues
Efekt motyla w kodzie maszynowym. par Semihalf
Efekt motyla w kodzie maszynowym.Efekt motyla w kodzie maszynowym.
Efekt motyla w kodzie maszynowym.
Semihalf128 vues
PLONG 21: Marcel Guzenda - Chmura_prywatna_w_wydaniu_Hiperkonwergentnym par PROIDEA
PLONG 21: Marcel Guzenda - Chmura_prywatna_w_wydaniu_HiperkonwergentnymPLONG 21: Marcel Guzenda - Chmura_prywatna_w_wydaniu_Hiperkonwergentnym
PLONG 21: Marcel Guzenda - Chmura_prywatna_w_wydaniu_Hiperkonwergentnym
PROIDEA29 vues
PLNOG 21: Krzysztof Toczyski - Wdrożenie_protokołu_IPv6_w_sieci_MPLSv4_jako_6VPE par PROIDEA
PLNOG 21: Krzysztof Toczyski - Wdrożenie_protokołu_IPv6_w_sieci_MPLSv4_jako_6VPEPLNOG 21: Krzysztof Toczyski - Wdrożenie_protokołu_IPv6_w_sieci_MPLSv4_jako_6VPE
PLNOG 21: Krzysztof Toczyski - Wdrożenie_protokołu_IPv6_w_sieci_MPLSv4_jako_6VPE
PROIDEA39 vues

Similaire à 100 M pakietów na sekundę dla każdego.

Programowanie sterowników w Linuksie. par
Programowanie sterowników w Linuksie.Programowanie sterowników w Linuksie.
Programowanie sterowników w Linuksie.Semihalf
994 vues57 diapositives
CPU GHOST BUSTING. Semihalf Barcamp Special. par
CPU GHOST BUSTING. Semihalf Barcamp Special. CPU GHOST BUSTING. Semihalf Barcamp Special.
CPU GHOST BUSTING. Semihalf Barcamp Special. Semihalf
3.4K vues54 diapositives
PLNOG 6: Łukasz Bromirski, Rafał Szarecki - Przełączniki i Routery - co jest ... par
PLNOG 6: Łukasz Bromirski, Rafał Szarecki - Przełączniki i Routery - co jest ...PLNOG 6: Łukasz Bromirski, Rafał Szarecki - Przełączniki i Routery - co jest ...
PLNOG 6: Łukasz Bromirski, Rafał Szarecki - Przełączniki i Routery - co jest ...PROIDEA
77 vues50 diapositives
PLNOG19 - Jakub Słociński - Wieloprocesorowa platforma x86 a wydajny routing ... par
PLNOG19 - Jakub Słociński - Wieloprocesorowa platforma x86 a wydajny routing ...PLNOG19 - Jakub Słociński - Wieloprocesorowa platforma x86 a wydajny routing ...
PLNOG19 - Jakub Słociński - Wieloprocesorowa platforma x86 a wydajny routing ...PROIDEA
26 vues31 diapositives
PLNOG19 - Konrad Kulikowski - Segment Routing – okiem praktyka par
 PLNOG19 - Konrad Kulikowski - Segment Routing – okiem praktyka PLNOG19 - Konrad Kulikowski - Segment Routing – okiem praktyka
PLNOG19 - Konrad Kulikowski - Segment Routing – okiem praktykaPROIDEA
55 vues51 diapositives
Łukasz Bromirski - Najlepsze praktyki zabezpieczania sieci klasy operatorskiej par
Łukasz Bromirski - Najlepsze praktyki zabezpieczania sieci klasy operatorskiejŁukasz Bromirski - Najlepsze praktyki zabezpieczania sieci klasy operatorskiej
Łukasz Bromirski - Najlepsze praktyki zabezpieczania sieci klasy operatorskiejPROIDEA
45 vues96 diapositives

Similaire à 100 M pakietów na sekundę dla każdego. (20)

Programowanie sterowników w Linuksie. par Semihalf
Programowanie sterowników w Linuksie.Programowanie sterowników w Linuksie.
Programowanie sterowników w Linuksie.
Semihalf994 vues
CPU GHOST BUSTING. Semihalf Barcamp Special. par Semihalf
CPU GHOST BUSTING. Semihalf Barcamp Special. CPU GHOST BUSTING. Semihalf Barcamp Special.
CPU GHOST BUSTING. Semihalf Barcamp Special.
Semihalf3.4K vues
PLNOG 6: Łukasz Bromirski, Rafał Szarecki - Przełączniki i Routery - co jest ... par PROIDEA
PLNOG 6: Łukasz Bromirski, Rafał Szarecki - Przełączniki i Routery - co jest ...PLNOG 6: Łukasz Bromirski, Rafał Szarecki - Przełączniki i Routery - co jest ...
PLNOG 6: Łukasz Bromirski, Rafał Szarecki - Przełączniki i Routery - co jest ...
PROIDEA77 vues
PLNOG19 - Jakub Słociński - Wieloprocesorowa platforma x86 a wydajny routing ... par PROIDEA
PLNOG19 - Jakub Słociński - Wieloprocesorowa platforma x86 a wydajny routing ...PLNOG19 - Jakub Słociński - Wieloprocesorowa platforma x86 a wydajny routing ...
PLNOG19 - Jakub Słociński - Wieloprocesorowa platforma x86 a wydajny routing ...
PROIDEA26 vues
PLNOG19 - Konrad Kulikowski - Segment Routing – okiem praktyka par PROIDEA
 PLNOG19 - Konrad Kulikowski - Segment Routing – okiem praktyka PLNOG19 - Konrad Kulikowski - Segment Routing – okiem praktyka
PLNOG19 - Konrad Kulikowski - Segment Routing – okiem praktyka
PROIDEA55 vues
Łukasz Bromirski - Najlepsze praktyki zabezpieczania sieci klasy operatorskiej par PROIDEA
Łukasz Bromirski - Najlepsze praktyki zabezpieczania sieci klasy operatorskiejŁukasz Bromirski - Najlepsze praktyki zabezpieczania sieci klasy operatorskiej
Łukasz Bromirski - Najlepsze praktyki zabezpieczania sieci klasy operatorskiej
PROIDEA45 vues
PLNOG 22 - Krzysztof Załęski - Praktyczne zastosowanie narzędzi NetDevOps par PROIDEA
PLNOG 22 - Krzysztof Załęski - Praktyczne zastosowanie narzędzi NetDevOpsPLNOG 22 - Krzysztof Załęski - Praktyczne zastosowanie narzędzi NetDevOps
PLNOG 22 - Krzysztof Załęski - Praktyczne zastosowanie narzędzi NetDevOps
PROIDEA18 vues
PLNOG 13: Piotr Jabłoński: First Steps in Autonomic Networking par PROIDEA
PLNOG 13: Piotr Jabłoński: First Steps in Autonomic NetworkingPLNOG 13: Piotr Jabłoński: First Steps in Autonomic Networking
PLNOG 13: Piotr Jabłoński: First Steps in Autonomic Networking
PROIDEA439 vues
PLNOG 7: Bartosz Kiziukiewicz - Jak wykorzystać nowe rozwiązania firmy D-link... par PROIDEA
PLNOG 7: Bartosz Kiziukiewicz - Jak wykorzystać nowe rozwiązania firmy D-link...PLNOG 7: Bartosz Kiziukiewicz - Jak wykorzystać nowe rozwiązania firmy D-link...
PLNOG 7: Bartosz Kiziukiewicz - Jak wykorzystać nowe rozwiązania firmy D-link...
PROIDEA41 vues
Przemyslaw Misiak - Wdrazanie mechanizmow QoS w sieciach MPLS par PROIDEA
Przemyslaw Misiak -  Wdrazanie mechanizmow QoS w sieciach MPLSPrzemyslaw Misiak -  Wdrazanie mechanizmow QoS w sieciach MPLS
Przemyslaw Misiak - Wdrazanie mechanizmow QoS w sieciach MPLS
PROIDEA108 vues
Gluster FS par 3camp
Gluster FSGluster FS
Gluster FS
3camp667 vues
PLNOG15: BGP Route Reflector from practical point of view par PROIDEA
PLNOG15: BGP Route Reflector from practical point of viewPLNOG15: BGP Route Reflector from practical point of view
PLNOG15: BGP Route Reflector from practical point of view
PROIDEA215 vues
PLNOG 8: Bartłomiej Anszperger - MPLS - Co to jest? Z czym to gryźć? Jak i po... par PROIDEA
PLNOG 8: Bartłomiej Anszperger - MPLS - Co to jest? Z czym to gryźć? Jak i po...PLNOG 8: Bartłomiej Anszperger - MPLS - Co to jest? Z czym to gryźć? Jak i po...
PLNOG 8: Bartłomiej Anszperger - MPLS - Co to jest? Z czym to gryźć? Jak i po...
PROIDEA35 vues
Bootloadery i programy bare metal. par Semihalf
Bootloadery i programy bare metal.Bootloadery i programy bare metal.
Bootloadery i programy bare metal.
Semihalf1.3K vues
Hierarchia pamięci w systemach komputerowych. par Semihalf
Hierarchia pamięci w systemach komputerowych.Hierarchia pamięci w systemach komputerowych.
Hierarchia pamięci w systemach komputerowych.
Semihalf746 vues

Plus de Redge Technologies

[PL] DDoS na sieć ISP (KIKE 2023) par
[PL] DDoS na sieć ISP (KIKE 2023)[PL] DDoS na sieć ISP (KIKE 2023)
[PL] DDoS na sieć ISP (KIKE 2023)Redge Technologies
2 vues4 diapositives
BGP zombie routes par
BGP zombie routesBGP zombie routes
BGP zombie routesRedge Technologies
419 vues40 diapositives
100M pakietów na sekundę czyli jak radzić sobie z atakami DDoS par
100M pakietów na sekundę czyli jak radzić sobie z atakami DDoS100M pakietów na sekundę czyli jak radzić sobie z atakami DDoS
100M pakietów na sekundę czyli jak radzić sobie z atakami DDoSRedge Technologies
1.3K vues21 diapositives
BGP hijacks and leaks par
BGP hijacks and leaksBGP hijacks and leaks
BGP hijacks and leaksRedge Technologies
838 vues42 diapositives
Stress your DUT par
Stress your DUTStress your DUT
Stress your DUTRedge Technologies
2.9K vues43 diapositives
redGuardian DP100 large scale DDoS mitigation solution par
redGuardian DP100 large scale DDoS mitigation solutionredGuardian DP100 large scale DDoS mitigation solution
redGuardian DP100 large scale DDoS mitigation solutionRedge Technologies
1.6K vues19 diapositives

100 M pakietów na sekundę dla każdego.

  • 1. 100 mln pakietów na sekundę dla każdego ICWAT 2015.11.12 Paweł Małachowski Michał Mirosław
  • 5. Skąd taki temat? 5 Obecnie rozwijamy usługę redGuardian (anty DDoS) i chcemy przybliżyćWam zagadnienie wydajnej obsługi ruchu IP na platformie klasy PC. Obsługa to routing, firewalling, load balancing, deep packet inspection (DPI, IDS/IPS)… … bez akceleracji aplikacji, bo to mógłby być osobny temat.
  • 6. 100 milionów? Ale pakietów… Nasze realia: • Ethernet 1 Gbit/s jest standardem • Porty 10 Gbit/s on-board w serwerach stają się coraz popularniejsze • 40 Gbit/s i 100 Gbit/s – na razie głównie w sieci szkieletowej 6 Policzmy: • Miary: bps vs. pps • 10 Gbit/s to inaczej • 0,81 Mpps przy ramkach 1500B • ~14,88 Mpps przy małych ramkach (64B + 20B luka i preambuła) • Zatem 100 Mpps wymaga minimum 7 x 10G
  • 7. Wydajna obsługa sieci vs. współczesny sprzęt klasy PC • CPU i magistrala – PCI Express 3.x: ~985 MB/s każda na linię – współczesny Xeon na LGA 2011 ma 40 linii PCIe 3.0 czyli ~39GB/s (~315Gbit/s) – uwaga na narzut magistrali – a przecież można kupić płytę 2 x CPU – do tego nawet 45MB cache L3 – Intel DDIO • Pamięć operacyjna – DDR4, np. PC-2133, 4 kanały po ~17GB/s • Karty sieciowe – bogata oferta Intel, Broadcom, Chelsio, Mellanox, Solarflare i innych – sprzętowe wsparcie hashowania pakietów do wielu kolejek – 1 x 10Gbit/s, 2 x 10Gbit/s, 4 x 10Gbit/s, 1 x 40Gbit/s, 2 x 40Gbit/s (oszukane) – 100Gbit/s – nisza, ale wszystko jest kwestią czasu (i PCIe 4.x) 7 Już dziś serwer zdolny obsłużyć 200 Gbit/s jest w zasięgu ręki: kilkanaście tys. PLN na PC + kilka tys. PLN na karty sieciowe.
  • 9. Osiągi: oczekiwania kontra rzeczywistość • aplikacyjny flooder: – ~100-200 kpps per core – ale z pomijaniem qdisc: ~1 Mpps per core • in-kernel pktgen: ~5 Mpps per core • prosty aplikacyjny sender+receiver: – UDP lub HTTP z minimalnym responsem – ~200-500 kpps per core – trudne strojenie • realnie z całej maszyny ciężko wyjść ponad kilka Mpps na prostej aplikacji 9 źródła: • badania własne • https://blog.cloudflare.com/how-to-receive-a-million-packets/
  • 10. Skomplikowany świat kernela: podsystemy Sterownik NIC Abstrakcja urządzenia Warstwa 2 Bridge Routing Firewall Kolejkowanie Gniazda dla aplikacji 10 źródło: https://upload.wikimedia.org/wikipedia/commons/5/5b/Linux_kernel_map.png
  • 11. Skomplikowany świat kernela: obsługa sieci 11 źródło: http://www.linuxfoundation.org/images/1/1c/Network_data_flow_through_kernel.png
  • 12. Szybko, szybciej… a tu ściana. Co można z tym zrobić?
  • 13. Budżet mocy vs. koszty przetwarzania • Aby uzyskać 14,8 Mpps potrzebujemy: – 1277 ns na duży pakiet – ~67,2 ns na mały pakiet • daje to w uproszczeniu (pomijając zrównoleglanie) około 200 cykli współczesnego 3GHz CPU • Dla porównania: – L2 cache: ~4 ns – L3 cache: ~8 ns – atomic lock+unlock: 16 ns – cache miss: ~32ns – syscall: 50–100 ns (uwaga na wpływ SELinux) Źródła: • „Network stack challenges at increasing speeds. The 100Gbit/s challenge”, RedHat 2015 • „HOW TO TEST 10 GIGABIT ETHERNET PERFORMANCE”, Spirent Whitepaper, 2012 13
  • 14. Co robić, jak żyć? Najlepiej: • nie sięgać do pamięci operacyjnej, tylko do CPU cache – prefetching – małe struktury danych • unikanie locków, struktury danych per core i lock-free • NUMA awareness, CPU pinning • minimalizowanie syscalli, brak context switchy Ponadto: • batchowanie pakietów • polling zamiast przerwań • kilka rdzeni CPU na port • brak kopiowania danych (zero copy) • prealokacja całej pamięci, huge pages (TLB friendly) 14
  • 15. Kernel: panu już dziękujemy • bezpośrednia obsługa karty sieciowej przez proces w userspace – PCI UIO – sterowniki dla różnych kart – współdzielenie karty z systemem • brak stosu sieciowego – tracimy firewall, kolejkowanie,TCP/IP socket API dla aplikacji – dostajemy surowe ramki i wszystko robimy „na piechotę” (packet forwarding, firewalling, sniffing itp.) 15
  • 16. Userland dataplane – wybrane implementacje • DPDK – C, licencja BSD – własne sterowniki • Netmap – C, licencja BSD – zmodyfikowany sterownik jądra • PF_RING ZC – C, licencja LGPL (ale: licencjonowany moduł zero–copy) – zmodyfikowany sterownik jądra • Snabb switch – LuaJIT, licencja Apache – własne sterowniki 16
  • 17. Case study JAK ŁATWO ZEPSUĆ WYDAJNOŚĆ na przykładzie policera
  • 18. ZADANIE 18 • ograniczenie przepustowości (rate limiting, policing) • bez kolejkowania pakietów
  • 20. WARUNKI LAB • 4 – core 3 GHz • 4 x 10GE • 10GE / 64B ≈ 14,88 Mpps • ~200 cykli/pakiet • RX/TX: -100 cykli/pakiet » 100 cykli? DAMY RADĘ! 20
  • 23. IMPLEMENTACJA #1 ; %rsi = pktbuf, %rdi = policer_state loop:RX... movl bucket(%rdi), %eax subl len(%rsi), %eax jb loop ; drop movl %eax, bucket(%rdi) TX... jmp loop 23
  • 24. IMPLEMENTACJA #1 - SYMULACJA ******************************************************************* Intel(R) Architecture Code Analyzer Mark Number 1 ******************************************************************* Throughput Analysis Report -------------------------- Block Throughput: 1.00 Cycles | Num Of | Ports pressure in cycles | | | Uops | 0 - DV | 1 | 2 - D | 3 - D | 4 | 5 | 6 | 7 | | --------------------------------------------------------------------------------- | 0* | | | | | | | | | | nop | 1 | | | 1.0 1.0 | | | | | | CP | mov eax, dword ptr [rdi] | 2^ | 0.5 | | | 1.0 1.0 | | | 0.5 | | CP | sub eax, dword ptr [rsi] | 0F | | | | | | | | | | jb 0xfffffffffffffffb | 2^ | | | | | 1.0 | | | 1.0 | CP | mov dword ptr [rdi], eax Total Num Of Uops: 5 24
  • 25. MULTI–CORE CORE 1_ CORE 2_ movl bucket(%rdi), %eax ... subl len(%rsi), %eax movl bucket(%rdi), %eax jb loop ; drop subl len(%rsi), %eax movl %eax, bucket(%rdi) jb loop ; drop ... movl %eax, bucket(%rdi) 25
  • 26. MULTI–CORE CORE 1_ CORE 2_ movl bucket(%rdi), %eax ... subl len(%rsi), %eax movl bucket(%rdi), %eax jb loop ; drop subl len(%rsi), %eax movl %eax, bucket(%rdi) jb loop ; drop ... movl %eax, bucket(%rdi) 2 pakiety zamiast 1! 26
  • 27. IMPLEMENTACJA #2 ; %rsi = pktbuf, %rdi = policer_state loop:RX... movl bucket(%rdi), %eax redo:movl %eax, %edx subl len(%rsi), %edx jb loop ; drop lock cmpxchg %edx, bucket(%rdi) jnz redo TX... jmp loop 27
  • 28. IMPLEMENTACJA #2 - SYMULACJA ******************************************************************* Intel(R) Architecture Code Analyzer Mark Number 2 ******************************************************************* Throughput Analysis Report -------------------------- Block Throughput: 2.00 Cycles | Num Of | Ports pressure in cycles | | | Uops | 0 - DV | 1 | 2 - D | 3 - D | 4 | 5 | 6 | 7 | | --------------------------------------------------------------------------------- | 0* | | | | | | | | | | nop | 1 | | | 0.5 0.5 | 0.5 0.5 | | | | | | mov eax, dword ptr [rdi] | 0* | | | | | | | | | | mov edx, eax | 2^ | 0.6 | | 0.5 0.5 | 0.5 0.5 | | | 0.3 | | | sub eax, dword ptr [rsi] | 0F | | | | | | | | | | jb 0xfffffffffffffff9 | 4^ | 0.2 | 1.2 | 0.5 0.5 | 0.5 0.5 | | 1.2 | 0.3 | | | lock cmpxchg [rdi], edx | 1 | 0.4 | | | | | | 0.6 | | | jnz 0xfffffffffffffff6 Total Num Of Uops: 8 28
  • 29. IMPLEMENTACJA #2 – SMOKE TEST • 1 core → 10 Gbps DZIAŁA! • 2 core → 19 Gbps (to na pewno źle generator liczy) • 4 core → 15 Gbps … ??? 29
  • 30. IMPLEMENTACJA #3 ; %rsi = pktbuf, %rdi = policer_state loop:RX... movl bucket(%rdi), %eax movl len(%rsi), %edx subl %edx, %eax js loop ; drop lock subl %edx, bucket(%rdi) TX... jmp loop 30
  • 31. IMPLEMENTACJA #3 - SYMULACJA ******************************************************************* Intel(R) Architecture Code Analyzer Mark Number 3 ******************************************************************* Throughput Analysis Report -------------------------- Block Throughput: 1.50 Cycles | Num Of | Ports pressure in cycles | | | Uops | 0 - DV | 1 | 2 - D | 3 - D | 4 | 5 | 6 | 7 | | --------------------------------------------------------------------------------- | 0* | | | | | | | | | | nop | 1 | | | 0.5 0.5 | 0.5 0.5 | | | | | CP | mov eax, dword ptr [rdi] | 1 | | | 0.5 0.5 | 0.5 0.5 | | | | | CP | mov edx, dword ptr [rsi] | 1 | 0.5 | | | | | | 0.5 | | | sub eax, edx | 0F | | | | | | | | | | js 0xfffffffffffffff9 | 4^ | | 0.5 | 0.5 0.5 | 0.5 0.5 | 1.0 | 0.5 | | 1.0 | CP | lock sub [rdi], edx Total Num Of Uops: 7 31
  • 32. IMPLEMENTACJA #3 – SMOKE TEST • 1 core → 10 Gbps • 2 core → 20 Gbps (a może jednak generator dobrze liczy?) • 4 core → 25 Gbps SKUCHA :-( 32
  • 36. IMPLEMENTACJA #4 – POWRÓT DO POCZĄTKU ; %rsi = pktbuf, %rdi = policer_state loop:RX... movl bucket(%rdi), %eax subl len(%rsi), %eax jb loop ; drop movl %eax, bucket(%rdi) TX... jmp loop 36 PO ¼ WIADERKA PER CORE
  • 37. IMPLEMENTACJA #4 – SMOKE TEST • 1 core → 10 Gbps • 2 core → 20 Gbps • 4 core → 40 Gbps TAK MIAŁO BYĆ! 37
  • 38. IMPLEMENTACJA #4 – CO DALEJ? • Nie zadziała poprawnie przy nierównym podziale ruchu – Musimy dynamicznie zmieniać podział • Policerów potrzeba więcej niż jeden – Nie możemy zmieniać wszystkich za każdym razem • Potrzebujemy statystyk – Dodatkowe obciążenieCPU cache 38 cdn.
  • 39. Co nas czeka? Perspektywy rozwoju tej dziedziny 1. NFV: wydajniejsze wirtualne appliance (firewall, load balancer, NAT) w postaci obrazówVM, które osiągają wydajność zbliżoną do sprzętu 2. Zwiększanie wydajności obsługi sieci w hypervisorach i ich wirtualnych sieciach (zero copy) 3. Optymalizacje stosu sieciowego w systemach operacyjnych (zapożyczanie technik) 4. Integracja z systemami operacyjnymi OOTB, np. 1. przyspieszenie firewalli 2. stosTCP/IP w userland, dołączany per proces 5. Sukcesywne wypieranie rozwiązań sprzętowych 6. Wzrost znaczenia otwartych architektur sprzętu sieciowego 39
  • 40. Czytali Paweł Małachowski 40 Michał Mirosław Atende Software sp. z o.o. Dział Systemów Bezpieczeństwa