User Tools

Site Tools


informatique:linux:reseau

Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Both sides previous revisionPrevious revision
Next revision
Previous revision
informatique:linux:reseau [2020/12/04 15:47] – [Références] pteuinformatique:linux:reseau [2023/05/05 12:35] (current) – [Diagnostique] pteu
Line 190: Line 190:
   * [[https://www.kernel.org/doc/Documentation/networking/bonding.txt|Linux Ethernet Bonding Driver HOWTO]] sur kernel.org   * [[https://www.kernel.org/doc/Documentation/networking/bonding.txt|Linux Ethernet Bonding Driver HOWTO]] sur kernel.org
   * [[https://access.redhat.com/documentation/en-us/red_hat_enterprise_linux/7/html/networking_guide/sec-using_channel_bonding|Using Channel Bonding]] (Redhat.com)   * [[https://access.redhat.com/documentation/en-us/red_hat_enterprise_linux/7/html/networking_guide/sec-using_channel_bonding|Using Channel Bonding]] (Redhat.com)
 +
 +=====Diagnostique=====
 +
 +Afficher les infos globales de la carte réseau:
 +<code bash>
 +ifconfig eno0
 +eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
 +        inet 10.0.34.26  netmask 255.255.255.0  broadcast 10.0.34.255
 +        inet6 fe80::32d0:42ff:fe12:3456  prefixlen 64  scopeid 0x20<link>
 +        ether 30:d0:42:12:34:56  txqueuelen 1000  (Ethernet)
 +        RX packets 4963422  bytes 1239605132 (1.1 GiB)
 +        RX errors 0  dropped 208003  overruns 0  frame 0
 +        TX packets 4106056  bytes 4178402339 (3.8 GiB)
 +        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0
 +        device interrupt 16  memory 0x72180000-721a0000
 +</code>
 +Ici le compteur de paquets reçus supprimés (dropped) est important ; pourtant il n'indique __pas nécessairement__ un problème dans la mesure où le kernel décompte les paquets :
 +  * reçus avec un mauvais tag de VLAN
 +  * utilisant un protocole inconnu
 +  * utilisant une adresse multicast non enregistrée
 +  * reçus par un agrégat inactif
 +
 +Les commandes suivantes sont des alternatives équivalentes qui remontent les mêmes compteurs :
 +<code bash>
 +ip -s link
 +2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP mode DEFAULT group default qlen 1000
 +    link/ether 30:d0:42:12:34:56 brd ff:ff:ff:ff:ff:ff
 +    RX: bytes  packets  errors  dropped overrun mcast
 +    1239605132 4963422  0       208003  0       4807
 +    TX: bytes  packets  errors  dropped carrier collsns
 +    4178403021 4106057  0                   0
 +</code>
 +
 +<code bash>
 +netstat -i
 +Table d'interfaces noyau
 +Iface             MTU    RX-OK RX-ERR RX-DRP RX-OVR    TX-OK TX-ERR TX-DRP TX-OVR Flg
 +eth0             1500  4963422      0 208003 0       4106059      0      0      0 BMRU
 +</code>
 +
 +Il est plus pertinent de consulter les compteurs avec l'utilitaire ethtool (commande passée sur une autre machine) :
 +<code bash>
 +ethtool -S eth0
 +NIC statistics:
 +     rx_packets: 145743003
 +     tx_packets: 171911063
 +     rx_bytes: 51104241565
 +     tx_bytes: 222190909954
 +     rx_broadcast: 9278170
 +     tx_broadcast: 50
 +     rx_multicast: 3348219
 +     tx_multicast: 8
 +     rx_errors: 0
 +     tx_errors: 0
 +     tx_dropped: 0
 +     multicast: 3348219
 +     collisions: 0
 +     rx_length_errors: 0
 +     rx_over_errors: 0
 +     rx_crc_errors: 0
 +     rx_frame_errors: 0
 +     rx_no_buffer_count: 708691
 +     rx_missed_errors: 101954
 +     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: 0
 +     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_csum_offload_good: 132050209
 +     rx_csum_offload_errors: 284
 +     rx_header_split: 0
 +     alloc_rx_buff_failed: 0
 +     tx_smbus: 0
 +     rx_smbus: 0
 +     dropped_smbus: 0
 +     rx_dma_failed: 0
 +     tx_dma_failed: 0
 +     rx_hwtstamp_cleared: 0
 +     uncorr_ecc_errors: 0
 +     corr_ecc_errors: 0
 +     tx_hwtstamp_timeouts: 0
 +     tx_hwtstamp_skipped: 0
 +</code>
 +Dans cette dernière commande, le compteur **rx_missed_errors** indique des paquets perdus ; la cause est souvent la saturation du tampon de l'interface réseau, car trop de paquets sont reçus en même temps (à cause de burst, voir contrôle de flux), ou CPU trop lente/chargée pour les traiter.
 +
 +Il peut être utile d'augmenter la taille des buffers et de faire des tests ; en gardant à l'esprit que cela augmente aussi la latence :
 +<code bash>
 +# afficher les paramètres actuels et les max admis
 +ethtool -g eno0
 +Ring parameters for eno0:
 +Pre-set maximums:
 +RX:             4096
 +RX Mini:        0
 +RX Jumbo:       0
 +TX:             4096
 +Current hardware settings:
 +RX:             256
 +RX Mini:        0
 +RX Jumbo:       0
 +TX:             256
 +
 +# augmenter les buffers rx/tx
 +ethtool -G eno0 rx 4096 tx 4096
 +</code>
 +
 +=====Tips=====
 +
 +====Activer le TCP BBR====
 +
 +Pour remplacer l'algorithme de gestion des congestions TCP par défaut par le BBR :
 +- vérifier que votre kernel a été compilé avec les bons modules :
 +<code bash>
 +$ grep 'CONFIG_TCP_CONG_BBR=m' /boot/config-$(uname -r) \
 +&& grep 'CONFIG_NET_SCH_FQ' /boot/config-$(uname -r) \
 +&& grep -E 'CONFIG_TCP_CONG_BBR=m|CONFIG_NET_SCH_FQ' /boot/config-$(uname -r)
 +CONFIG_TCP_CONG_BBR=m
 +CONFIG_NET_SCH_FQ_CODEL=m
 +CONFIG_NET_SCH_FQ=m
 +CONFIG_TCP_CONG_BBR=m
 +CONFIG_NET_SCH_FQ_CODEL=m
 +CONFIG_NET_SCH_FQ=m
 +</code>
 +Si vous optenez ce résultat c'est bon ; sinon c'est qu'il est trop ancien (< 4.9) ou qu'il faut le recompiler avec les modules activés. Sous Debian 10 ça ne devrait pas poser de problème.
 +
 +Pour activer le TCP BRR, en root/sudo :
 +<code bash>
 +$ sudo echo -e "net.core.default_qdisc=fq\n net.ipv4.tcp_congestion_control=bbr" >> /etc/sysctl.d/10-custom-kernel-bbr.conf
 +</code>
 +
 +Pour prendre en compte ces paramètres :
 +<code bash>
 +$ sudo sysctl --system
 +# (ou reboot)
 +</code>
 +
 +Pour mesurer les améliorations, utiliser [[informatique:logiciels:iperf|iperf]] ou [[informatique:linux:commandes_linux#wget|wget]].
 +
 +src : [[https://www.cyberciti.biz/cloud-computing/increase-your-linux-server-internet-speed-with-tcp-bbr-congestion-control/|Increase Linux Internet speed with TCP BBR congestion control]] (nixCraft)
informatique/linux/reseau.1607096833.txt.gz · Last modified: 2020/12/04 15:47 by pteu