4. Plan
1. Co to jest stos sieciowy?
2. Ewolucja podejścia do oprogr. sieciowego
○ zmiany w architekturze syst. komputerowych
○ nowe paradygmaty programowania sieciowego
3. Wprowadzenie do aplikacji typu Dataplane
4. Przykładowy stos jako program użytkownika
○ OFP
5. Wyzwania i pułapki czekające na twórców stosów sieciowych
5. Plan
1. Co to jest stos sieciowy?
2. Ewolucja podejścia do oprogr. sieciowego
○ zmiany w architekturze syst. komputerowych
○ nowe paradygmaty programowania sieciowego
3. Wprowadzenie do aplikacji typu Dataplane
4. Przykładowy stos jako program użytkownika
○ OFP
5. Wyzwania i pułapki czekające na twórców stosów sieciowych
6. Zagadka #1
● Ile pakietów na sekundę musi przetworzyć system podł. do sieci 10Gb/s?
● Jaki budżet czasowy na 1 ramkę?
● Ramka = preambuła 8B + IFG 12B + ramka L2 min 60B + FCS 4B
● min ramka = 8+12+60+4 = 84B
○ f = 10e9/84*8 ~= 14,8 Mpps
○ t = 1/f ~= 60ns!
● IP MTU = 1500 => 8 + 12 + 14 (L2 hdr) + 1500 + 4 (FCS) = 1536 B
○ f = 10e9/1536*8 ~= 800Kpps
○ t ~= 1,2 us
7. Stos sieciowy - opis warstw
*http://www.slideshare.net/anil_pugalia/linux-network-management
9. Stos sieciowy - opis funkcjonalny
*https://en.wikipedia.org/wiki/Netfilter#/media/File:Netfilter-packet-flow.svg
10. Plan
1. Co to jest stos sieciowy?
2. Ewolucja podejścia do oprogr. sieciowego
○ zmiany w architekturze syst. komputerowych
○ nowe paradygmaty programowania sieciowego
3. Wprowadzenie do aplikacji typu Dataplane
4. Przykładowy stos jako program użytkownika
○ OFP
5. Wyzwania i pułapki czekające na twórców stosów sieciowych
11. Rozwój systemów komp. nie jest równomierny
*http://www.techdesignforums.com/practice/files/2013/02/tdf-snps-ARMcc-feb13-fig1lg.jpgc
13. Wydajność stosu Linuxa
Kernel
User Space
Hardware
NIC
eth
driver
NICNIC
Application
IP Stack
eth
driver
eth
driver
operacja czas (ns)
dostęp do L3 10
dostęp do ram 100
syscall 100
przeł. kontekstu 1000
14. Wnioski z trendów technologicznych
● Pasmo/1 CPU ~ stałe
● Skalowanie z ilością CPU (GPU, etc)
● Dedykowany krzem do:
○ grafiki
○ kryptografii
○ sieci
● Inwestycja w specjalizowany software
○ zero-copy
○ jednofunkcyjny
○ bazujący na możliwościach konkretnego sprzętu (brak abstrakcji, warstw itd)
15. Plan
1. Co to jest stos sieciowy?
2. Ewolucja podejścia do oprogr. sieciowego
○ zmiany w architekturze syst. komputerowych
○ nowe paradygmaty programowania sieciowego
3. Wprowadzenie do aplikacji typu Dataplane
4. Przykładowy stos jako program użytkownika
○ OFP
5. Wyzwania i pułapki czekające na twórców stosów sieciowych
16. Biblioteki i aplikacje Dataplane - co je wyróżnia
● Programowanie blisko sprzętu (jak firmware/bare metal)... ale w Linuksie
● Wszystko od zera:
○ nowe paradygmaty programowania
○ specjalne zarządzanie rdzeniami CPU
○ specjalne zarządzanie pamięcią
Aplikacja Dataplane
Hardware
DRV
Wątek Dataplane
na CPU
NIC
DRV
NIC
DRV
Wątek Dataplane
na CPU
NIC
DRV
NIC
17. Biblioteki i aplikacje Dataplane - wady
● Brak protokołów - trzeba je samemu realizować
● Dla każdego urządzenia sieciowego - nowy sterownik
● Trudności w:
○ zarządzaniu zużyciem energii
○ współdzieleniu zasobów systemu z innymi aplikacjami
○ w tym współdzieleniu dostępu do sieci
● Przykład:
○ brak ifconfig, tcpdump, etc.,
○ wątek Dataplane zawsze zużywa 100% CPU, net, jak nic nie robi*
18. Polling
get_packets(pkts [], n) {
avail = read_hw_regs(HEAD, TAIL); // read packet count from h/w
n = min(n, avail);
for (i=0; i < avail; i++)
read_hw_desc(HEAD+i, pkts[i]) // read packet descriptor from DMA ring
write_hw_reg(TAIL, avail); // signal received packet to h/w
return avail;
}
19. Run to completion
while (true) {
nb_rx = get_packets(pkts, burst_size)
nb_proc = process(pkts, nb_rx)
nb_tx = xmit(pkts, nb_proc)
for (i = nb_tx; i < nb_proc; i++)
free(pkts[i]);
}
20. Open Source biblioteki Dataplane
● DPDK
○ Największa społeczność
○ Platforma Intel, ARM, Power8
○ Duża ilość sterowników
● ODP
○ Konsorcjum pod Linaro Network Group
○ Platforma Octeon, ARM, Intel, NXP
○ Publiczne API + prywatne implementacje
● VPP
○ Środowisko tworzenia aplikacji Dataplane z komponentów
○ Współpracuje z DPDK ale też z innymi (nie z ODP)
21. Dataplane Development Kit
User Space Kernel Space
Hardware
DPDK APP
KNI
PMD
DPDK Library
UIO
PMD
IP Stack
eth driver eth driver
NIC NICNIC NIC
25. Plan
1. Co to jest stos sieciowy?
2. Ewolucja podejścia do oprogr. sieciowego
○ zmiany w architekturze syst. komputerowych
○ nowe paradygmaty programowania sieciowego
3. Wprowadzenie do aplikacji typu Dataplane
4. Przykładowy stos jako program użytkownika
○ OFP
5. Wyzwania i pułapki czekające na twórców stosów sieciowych
26. Stosy sieciowe Open Source
● lwIP
● mTCP
● OFP
● NetBSD Rump Kernel
● TLDK - tylko UDP (TCP w trakcie konstrukcji)
27. OFP - organizacja projektu
● Licencja BSD
● Kod przeniesiony z FreeBSD
● Główni uczestnicy: Nokia, Enea, ARM
○ + Cavium, NXP, …
● Bazuje na ODP
● Ścisła współpraca z Linaro
● http://www.openfastpath.org
35. Plan
1. Co to jest stos sieciowy?
2. Ewolucja podejścia do oprogr. sieciowego
○ zmiany w architekturze syst. komputerowych
○ nowe paradygmaty programowania sieciowego
3. Wprowadzenie do aplikacji typu Dataplane
4. Przykładowy stos jako program użytkownika
○ OFP
5. Wyzwania i pułapki czekające na twórców stosów sieciowych
36. Dataplane + stary kod = :<
● Stary kod nie zadziała szybciej tylko dlatego, że teraz nazywa się Dataplane
11.54% udp_fwd_socket [ofp] odp_rwlock_read_lock
10.73% udp_fwd_socket [ofp] odp_rwlock_read_unlock
5.43% udp_fwd_socket [ofp] ofp_in_pcblookup
4.94% udp_fwd_socket [ofp] udp_send
4.79% udp_fwd_socket [ofp] ofp_ip_output
4.26% udp_fwd_socket [drv] nicvf_qset_cq_handler
3.83% udp_fwd_socket [ofp] ofp_udp_input
3.82% udp_fwd_socket [ofp] ofp_in_pcbrele_rlocked
3.70% udp_fwd_socket [ofp] ofp_ip_output_add_eth
2.68% udp_fwd_socket [drv] nicvf_xmit
2.63% udp_fwd_socket [ofp] ofp_ipv4_processing
2.57% udp_fwd_socket [ofp] ofp_packet_input
2.44% udp_fwd_socket [ofp] ofp_eth_vlan_processing
1.90% udp_fwd_socket [ofp] ofp_ipv4_lookup_mac
1.86% udp_fwd_socket [ofp] in_pcblookup_hash_locked.isra.2
1.84% udp_fwd_socket [ofp] ofp_get_packet_hooks
1.76% udp_fwd_socket [ofp] ofp_udp_pkt_sendto
1.73% udp_fwd_socket [app]ofp_udp_packet_parse
37. Dataplane + stary kod = :<
● Stary kod nie zadziała szybciej tylko dlatego, że teraz nazywa się Dataplane
children self
- 92.49% 2.33% udp_fwd_socket udp_fwd_socket [.] ofp_packet_input
- 97.48% ofp_packet_input
- 93.18% ofp_ipv4_processing
- 83.57% ofp_udp_input
+ 43.33% udp_append.isra.1
- 19.20% ofp_in_pcblookup
6.14% odp_rwlock_read_lock
4.30% ofp_in_pcbrele_rlocked
2.01% in_pcblookup_hash_locked.isra.2
6.37% odp_rwlock_read_lock
5.66% odp_rwlock_read_unlock
38. Zasady wydajnych programów
● Lokalność
○ danych
○ kodu
○ wątków
● Brak niepotrzebnych abstrakcji
○ nie da się zrobić BSD sockets bez kopiowania danych!
● Run-to-completion
● Hurtowe przetwarzanie danych (SIMD, itd.)