Netzwerk Perfomance: Unterschied zwischen den Versionen

Aus Xinux Wiki
Zur Navigation springen Zur Suche springen
Zeile 88: Zeile 88:
  
 
iperf Done.
 
iperf Done.
 +
</pre>
 +
=Statistiken anzeigen mit Ethtool=
 +
*ethtool -S eth0
 +
<pre>
 +
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
 
</pre>
 
</pre>
  

Version vom 16. November 2019, 15:52 Uhr

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

Netzwerk-perfomance-1.jpg

  • 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