Netzwerk Perfomance
Intention
- Router, Switche, Kabel wurden verbessert
- Microprozessoren hinken hinten dran
- Letztendlich muss das Betriebssystem die Daten verarbeiten
- Darum ist ein präzises Anpassen des Betriebssystem wichtig
Wie verarbeitet das Betriebssystem die Daten
- Daten werden von der Netzwerkkarte aufgenommen
- Danach werden sie im Ring Buffer für den Empfang (RX) gespeichert
- Es gibt auch einen Ring Buffer für das Senden (TX)
- Wenn der Kernel auf das Paket zugreifen kann löst der Treiber einen Software IRQ aus
- Dieser veranlasst einen Datenzugriff (DMA)
- Der Kernel bekommt die Daten in Datenstruktur sk_buff um das Paket bis zur MTU zu halten.
- Wenn die Kernel Buffer gefüllt sind gehen die Daten an die IP/TCP oder UDP Schicht.
- Früher löste ein Hard Interupt das Senden aus.
- Dies wurde durch den Soft Interrupt ersetzt.
- Dieser wird verwaltet von der New API.
Tools zum Monitoring und Diagnose des Systems
- ip
- netstat
- ss
- ethtool
Benchmarkprogramme vor dem Tunen
- netperf
- iperf
- iperf3
Grundlegendes vor Tunning
- Jedes System ist unterschiedlich (CPU,MEM,NIC,OS)
- Es gibt keine Universallösung
- Man braucht gute Kenntnisse des Systems
- Man muss den Flaschenhals finden
Pakete werden verworfen
Das Problem kann an folgenden Punkten liegen:
- NIC
- SOFT IRQ
- Kernel Buffer
- Netwerkschicht (IP,TCP,UDP)
Erster Perfomance Test mit Iperf3
Server
- iperf3 -s -p 1234
----------------------------------------------------------- Server listening on 1234 ----------------------------------------------------------- Accepted connection from 10.81.4.8, port 43630 [ 5] local 10.81.1.79 port 1234 connected to 10.81.4.8 port 43632 [ ID] Interval Transfer Bandwidth [ 5] 0.00-1.00 sec 2.35 GBytes 20.2 Gbits/sec [ 5] 1.00-2.00 sec 2.86 GBytes 24.6 Gbits/sec [ 5] 2.00-3.00 sec 2.83 GBytes 24.3 Gbits/sec [ 5] 3.00-4.00 sec 2.80 GBytes 24.0 Gbits/sec [ 5] 4.00-5.00 sec 2.86 GBytes 24.6 Gbits/sec [ 5] 5.00-6.00 sec 2.79 GBytes 24.0 Gbits/sec [ 5] 6.00-7.00 sec 2.88 GBytes 24.8 Gbits/sec [ 5] 7.00-8.00 sec 2.87 GBytes 24.6 Gbits/sec [ 5] 8.00-9.00 sec 2.72 GBytes 23.4 Gbits/sec [ 5] 9.00-10.00 sec 2.84 GBytes 24.4 Gbits/sec [ 5] 10.00-10.04 sec 106 MBytes 22.7 Gbits/sec - - - - - - - - - - - - - - - - - - - - - - - - - [ ID] Interval Transfer Bandwidth [ 5] 0.00-10.04 sec 0.00 Bytes 0.00 bits/sec sender [ 5] 0.00-10.04 sec 27.9 GBytes 23.9 Gbits/sec receiver ----------------------------------------------------------- Server listening on 1234 -----------------------------------------------------------
Client
- iperf3 -c 10.81.1.79 -p 1234
Connecting to host 10.81.1.79, port 1234 [ 4] local 10.81.4.8 port 43632 connected to 10.81.1.79 port 1234 [ ID] Interval Transfer Bandwidth Retr Cwnd [ 4] 0.00-1.00 sec 2.47 GBytes 21.2 Gbits/sec 0 3.11 MBytes [ 4] 1.00-2.00 sec 2.87 GBytes 24.6 Gbits/sec 0 3.11 MBytes [ 4] 2.00-3.00 sec 2.82 GBytes 24.2 Gbits/sec 0 3.11 MBytes [ 4] 3.00-4.00 sec 2.80 GBytes 24.0 Gbits/sec 0 3.11 MBytes [ 4] 4.00-5.00 sec 2.87 GBytes 24.7 Gbits/sec 0 3.11 MBytes [ 4] 5.00-6.00 sec 2.78 GBytes 23.9 Gbits/sec 0 3.11 MBytes [ 4] 6.00-7.00 sec 2.90 GBytes 24.9 Gbits/sec 0 3.11 MBytes [ 4] 7.00-8.00 sec 2.85 GBytes 24.5 Gbits/sec 0 3.11 MBytes [ 4] 8.00-9.00 sec 2.72 GBytes 23.4 Gbits/sec 0 3.11 MBytes [ 4] 9.00-10.00 sec 2.84 GBytes 24.4 Gbits/sec 0 3.11 MBytes - - - - - - - - - - - - - - - - - - - - - - - - - [ ID] Interval Transfer Bandwidth Retr [ 4] 0.00-10.00 sec 27.9 GBytes 24.0 Gbits/sec 0 sender [ 4] 0.00-10.00 sec 27.9 GBytes 24.0 Gbits/sec receiver iperf Done.
Statistiken anzeigen mit Ethtool
- ethtool -S eth0
NIC statistics:
rx_packets: 84
tx_packets: 86
rx_bytes: 25416
tx_bytes: 16356
rx_broadcast: 1
tx_broadcast: 2
rx_multicast: 0
tx_multicast: 8
rx_errors: 0
tx_errors: 0
tx_dropped: 0
multicast: 0
collisions: 0
rx_length_errors: 0
rx_over_errors: 0
rx_crc_errors: 0
rx_frame_errors: 0
rx_no_buffer_count: 0
rx_missed_errors: 0
tx_aborted_errors: 0
tx_carrier_errors: 0
tx_fifo_errors: 0
tx_heartbeat_errors: 0
tx_window_errors: 0
tx_abort_late_coll: 0
tx_deferred_ok: 0
tx_single_coll_ok: 0
tx_multi_coll_ok: 0
tx_timeout_count: 0
tx_restart_queue: 0
rx_long_length_errors: 0
rx_short_length_errors: 0
rx_align_errors: 0
tx_tcp_seg_good: 1
tx_tcp_seg_failed: 0
rx_flow_control_xon: 0
rx_flow_control_xoff: 0
tx_flow_control_xon: 0
tx_flow_control_xoff: 0
rx_long_byte_count: 25416
rx_csum_offload_good: 0
rx_csum_offload_errors: 0
alloc_rx_buff_failed: 0
tx_smbus: 0
rx_smbus: 0
dropped_smbus: 0
Quelle
process.jpg