W trakcie wykładu poruszony zostanie temat użycia platform serwerowych na potrzeby wydajnego routingu pakietów. Mocne i słabe strony zastosowania architektury jedno- czy wieloprocesorowej pod kątem konfiguracji sieciowej, jej wypływ na wydajność oraz skalowalność rozwiązania.
8. NUMA
• NUMA (Non-Uniform Memory Access)
– Pojedyncza przestrzeń adresowa widoczna dla wszystkich CPU
– Szybki dostęp do lokalnej pamięci
– Wolniejszy dostęp do zdalnej pamięci lub zdalnych portów I/O
– Lepsza skalowalność ze względu na ilość CPU
• Dlaczego architektura jest istotna w kontekście sieci?
11. Wydajność
- PCIe 3.0
– 8 GT/s = 7,877 Gbps (na każdej linii sygnałowej)
– 40 PCIe linii: 315,08 Gbps na każdy CPU
- Pamięć [1]
– 90 GB/s = 720 Gbps (DDR4, Haswell E5-2670v3)
– Nowe CPU: do ~2.7 Tbps (EPYC) lub ~3.3 Tbps (MCDRAM, Knights Landing) !
- QPI/UPI oraz HT3 [2]
– QPI: 9,6 GT/s * 16 bit = 153,6 Gbps (19,2 GB/s w każdym kier.)
• 2 linki QPI w Skylake E5 oraz 3 linki dla E7
– UPI: 10,4 GT/s (3 linki w Skylake-SP Platinum oraz części Gold)
– HT3.1: 6,4 GT/s * 16 bit = 102,4 Gbps (12,8 Gbps w każdym kier.)
[1] src: https://www.karlrupp.net/2016/07/knights-landing-vs-knights-corner-haswell-ivy-bridge-and-sandy-bridge-stream-
benchmark-results/ , www.amd.com
[2] src: www.hardwaresecrets.com, www.intel.com
21. Pamiętajmy o podstawach
System / DPDK [1]
– Każdy slot DRAM – min. 4GB, maksymalna szybkość obsługiwana przez
płytę/CPU
– Ilość pamięci zależna od protokołów, interfejsów, tablic routingu czy L2
– Wybór wspieranej karty sieciowej, najlepiej Intel lub Mellanox
– Wyłącz oszczędzanie energii procesora oraz TurboBoost w BIOS (aby zapewnić
skalowanie wydajności relatywnie do użytych rdzeni)
– Sztywne określenie częstotliwości taktowania pamięci (max) zamiast auto
– Jeżeli nie potrzebujesz to wyłącz wirtualizację w BIOS
– Aktualizuj firmware BIOS/NIC!
[1] src: http://dpdk.org
25. PBR w służbie NUMA
• BIRD routing daemon
• Tablice routingu: main / numa0 / numa1
• Funkcje: if_numa0() / if_numa1()
• Protokoły sterowania
- direct_numa0/1: trasy do linków połączonych bezpośrednio (per-numa)
- kernel_numa0/1/main: synchronizacha tablic Bird <> kernel
- pipe_numa0/1: kopiowanie z main => numaX jeżeli if_numaX()
- pipe_xnuma0/1: kopiowanie main => numa1/0 (cross numa) + tag (brak BGP)
- bgp_numa0/1_peer1/2: sesja BGP z numa0/1 do peer’a 1 oraz 2
26.
27. NUMA: CP – DP
Numa0: Control Plane
Numa1: Data Plane
Zalety:
- Osobny CPU na potrzeby CP
- Wszystkie rdzenie CPU przypisane do Data Plane
- Unequal-CPU?
Wady:
- Cały ruch kontrolny (również ICMP!) przechodzi przez granicę NUMA
- Unequal-CPU nie (zawsze) działa (testowane na S2600CW)
28. NUMA: inne
- Interfejsy typu multi-host
- NumaSCALE i podobne
- Multi-CPU w ramach
jednego węzła NUMA:
AMD EPYC i Infinite Fabric
AMD Epyc 7601:
32c/64t @2.2-3.2 GHz,
64MB L3 cache, 2666MHz RAM
~4*300Gbps Infinite fabric
128x linii PCIe
src: www.amd.com
src: www.mellanox.com
30. Podsumowanie
- Świadomie wybierz sprzęt do potrzeb
- Pamiętaj że nie zawsze 2x40 = 80 [Gbps]
- Wybór i konfiguracja oprogramowania ma duże znaczenie
- NUMA pomaga skalować, ale nie licz na auto-konfigurację
- Brak standardu numeracji CPU/core/ht nie pomaga
- Pytaj producenta o techniczne szczegóły
- Miej dystans do narzędzi
- Bądź panem swojego sprzętu ☺