Auteur Sujet: TCP offload engine - Segmentation réalisée par la carte réseau  (Lu 46594 fois)

0 Membres et 1 Invité sur ce sujet

kgersen

  • Modérateur
  • Abonné Bbox fibre
  • *
  • Messages: 9 078
  • Paris (75)
TCP offload engine - Segmentation réalisée par la carte réseau
« Réponse #12 le: 03 août 2013 à 15:23:24 »
Je crois que sur des system type freebsd c'est un peu plus galère que ça
pour FreeBSD:
ifconfig | grep -i runningpour avoir le nom de l'interface. Celui ci a par défaut pour racine le nom du driver.
si c'est l'interface est em0 par exemple, alors le driver est 'em' (autre exemples de drivers: igb, bce)
Ensuite "sysctl hw.<driver>" ("sysctl hw.em" dans notre exemple) pour voir les paramètres possibles qu'on peut régler avec loader(8 )/loader.conf(5) au boot.
Certains paramètres sont modifiable en live avec sysctl:
sysctl dev.<driver>.<instance> pour voir la liste (donc dev.em.0 dans notre cas).
et
sysctl dev.<driver>.<instance>.<parametre>=<valeur> pour changer un parametre.

Un man 4 du driver ('man 4 em' dans notre exemple) donne les explications pour chaque parametre.
bce (man 4 bce) est un exemple qui supporte le TCP Offload Engine et l'Interrupt coalescing.

Enfin en théorie car en pratique j'ai jamais joué en prod avec ces paramètres de cartes ... ;)
Les cartes Intel récentes ont une adaptation automatique pour éviter de flooder des interruptions (Adaptive Interrupt Moderation).

kgersen

  • Modérateur
  • Abonné Bbox fibre
  • *
  • Messages: 9 078
  • Paris (75)
TCP offload engine - Segmentation réalisée par la carte réseau
« Réponse #13 le: 04 août 2013 à 08:38:54 »
petite précision sur le vocabulaire pour éviter les confusions:

TOE - TCP Offload Engine
et
TSO - TCP Segmentation Offload

ne sont pas du tout la meme chose. Cette discussion a pour titre "TCP offload engine - Segmentation réalisée par la carte réseau" mais parle de TSO.

Souvent on mélance les 2 notions, il ne faudrait pas...

TOE n'est pas supporté sur Linux et n'est pas globalement accepté comme une bonne technique. Le principe de TOE est que la carte sous traite bien plus de choses, notamment l'ouverture des connections, l'envoi des ack ou la fermeture des connections. TSO est une sous partie de TOE d'ou souvent la confusion de langage.
Voir le wikipedia de TOE pour plus d'info: https://en.wikipedia.org/wiki/TCP_offload_engine

Quelques définitions sur les autre options 'offload'(-k) de ethtool:

rx-checksumming: laisse le soin a la carte de vérifier la checksum. rejete le packet si pas la somme est pas bonne. le cpu n’est pas derangé pendant cette opération. gains cpu approx: 5% a 1500 MTU, 15% a 9000 MTU

tx-checksumming: le cpu met une valeur bidon pour la checksum et la carte calcule et met la bonne valeur avec d’envoyer le packet sur le réseau. gains approx idem rx.

scatter-gather: aussi appelé Vectored I/O. permet de d’échanger les données en les fragmentant/assemblant. En lecture (carte->cpu) on ‘scatter’ en eclatant un morceau de mémoire contigue (dans la carte) en plusieurs endroits différents dans la RAM via DMA. En écriture (cpu->carte) on ‘gather’ en récupérant des morceaux a différents endroits via DMA et en les combinant dans un seul morceau de mémoire dans la carte. Typiquement l’entete du paquet est a un endroit, les données utiles (le payload) a un autre et ca scatter dans un sens et gather dans l’autre. On peut combiner ca avec “page flip” (changement de page dans le systeme de gestion de mémoire virtuelle)  pour éviter de copier le payload en mémoire et le mapper directement avec le buffer de l'application par exemple. Avantage: moins de besoin mémoire (moins de besoin de gros bouts contiguës), moins de copies mémoires par le cpu donc gains de mémoire et de cycles cpu.

TSO - tcp segmentation offload: expliqué au début par Vivien. C'est dispo dans Linux depuis la 2.6.16.10. La carte doit supporter ca.

UFO - udp fragmentation offload: principe du TSO mais appliqué a UDP.

LRO - large receive offload : en gros l’inverse du TSO, rassemble plusieurs packets dans la carte avant de passer un seul gros packet au cpu. y’a 2 variantes: une software dans le driver, une hardware directement dans la carte.

GSO - generic segmentation offload :  comme TSO  mais géré par le kernel si la carte ne supporte pas TSO. Le principe est qu’on retarde le plus possible la segmentation. C'est souvent off par défaut quand TSO est on car c'est redondant. Mais ca peut aussi servir a améliorer autre chose que TCP contrairement a TSO qui n'est que pour TCP.

generic-receive-offload : le pendant en reception de GSO.
large segment offload: c'est le terme/concept générique commun a TSO, GSO, USO et LRO (en réception).

ntuple-filters : surtout pour les machines multi-core/multi-cpu. Principe d’avoir plusieurs queues de traitement dans la carte. Des regles style regles de firewall (style source, dest, port, proto) permet d’aiguiller les packets dans des queues différentes. Ensuite une queue peut etre apairé avec toujours le meme core du CPU et une IRQ propre, ce core gérant aussi l'application qui utilise ce flux (ca evite les changements de contexte entre cores notamment et une meilleur affinité sur les cpu).

Apres y'a de plus en plus d'options avec le temps. Surtout car ipv6 arrivant a maturité, certaines cartes sont mixtes d'autre pas donc les options se dédoublent voir triplent (options pour ipv4, options pour ipv6, options pour les 2, etc).

vivien

  • Administrateur
  • *
  • Messages: 47 081
    • Twitter LaFibre.info
TCP offload engine - Segmentation réalisée par la carte réseau
« Réponse #14 le: 04 août 2013 à 10:19:18 »
Merci !

ToE si c'est la carte qui gère les connexions TCP sous Windows, cela ne pose pas de problème de sécurité ? Le gros de la pile TCP/IP est dans la carte réseau, plus dans le système d’exploitation ! La carte réseau connait la liste des ports sur lesquels elle doit accepter les connexions TCP ?

Pour donner un exemple des options de ethtool -k sur un matériel serveur standard sans virtualisation :

Ubuntu server 13.04 64bits sur un serveur Dell PowerEdge R210 (Xeon X3450 @2.67GHz) :

# uname -r
3.8.0-27-generic

# lspci | grep Ethernet
02:00.0 Ethernet controller: Broadcom Corporation NetXtreme II BCM5716 Gigabit Ethernet (rev 20)
02:00.1 Ethernet controller: Broadcom Corporation NetXtreme II BCM5716 Gigabit Ethernet (rev 20)

# ethtool -k eth0
Features for eth0:
rx-checksumming: on
tx-checksumming: on
tx-checksum-ipv4: on
tx-checksum-ip-generic: off [fixed]
tx-checksum-ipv6: on
tx-checksum-fcoe-crc: off [fixed]
tx-checksum-sctp: off [fixed]
scatter-gather: on
tx-scatter-gather: on
tx-scatter-gather-fraglist: off [fixed]
tcp-segmentation-offload: on
tx-tcp-segmentation: on
tx-tcp-ecn-segmentation: on
tx-tcp6-segmentation: on
udp-fragmentation-offload: off [fixed]
generic-segmentation-offload: on
generic-receive-offload: on
large-receive-offload: off [fixed]
rx-vlan-offload: on
tx-vlan-offload: on
ntuple-filters: off [fixed]
receive-hashing: on
highdma: on [fixed]
rx-vlan-filter: off [fixed]
vlan-challenged: off [fixed]
tx-lockless: off [fixed]
netns-local: off [fixed]
tx-gso-robust: off [fixed]
tx-fcoe-segmentation: off [fixed]
fcoe-mtu: off [fixed]
tx-nocache-copy: on
loopback: off [fixed]
rx-fcs: off [fixed]
rx-all: off [fixed]

Ubuntu server 12.04 64bits sur un serveur Dell PowerEdge R210 (Xeon X3450 @2.67GHz) :
# uname -r
3.2.0-51-generic

# lspci | grep Ethernet
02:00.0 Ethernet controller: Broadcom Corporation NetXtreme II BCM5716 Gigabit Ethernet (rev 20)
02:00.1 Ethernet controller: Broadcom Corporation NetXtreme II BCM5716 Gigabit Ethernet (rev 20)

# ethtool -k eth0
Offload parameters for eth0:
rx-checksumming: on
tx-checksumming: on
scatter-gather: on
tcp-segmentation-offload: on
udp-fragmentation-offload: off
generic-segmentation-offload: on
generic-receive-offload: on
large-receive-offload: off
rx-vlan-offload: on
tx-vlan-offload: on
ntuple-filters: off
receive-hashing: on

Ubuntu server 8.04 64bits sur un serveur IBM (Xeon E5430 @2.66GHz) :
~# uname -r
2.6.24-32-server

# lspci | grep Ethernet
04:00.0 Ethernet controller: Broadcom Corporation NetXtreme II BCM5708 Gigabit Ethernet (rev 12)
06:00.0 Ethernet controller: Broadcom Corporation NetXtreme II BCM5708 Gigabit Ethernet (rev 12)

# ethtool -k eth0
Offload parameters for eth0:
rx-checksumming: on
tx-checksumming: on
scatter-gather: on
tcp segmentation offload: on
udp fragmentation offload: off
generic segmentation offload: off

corrector

  • Invité
TCP offload engine - Segmentation réalisée par la carte réseau
« Réponse #15 le: 04 août 2013 à 13:10:33 »
ToE si c'est la carte qui gère les connexions TCP sous Windows, cela ne pose pas de problème de sécurité ?
Le gros de la pile TCP/IP est dans la carte réseau, plus dans le système d’exploitation !
De façon générale, on peut craindre un bug dans le driver, dans le micro-code (fermé)...

Et aussi des pessimisations, des interactions indésirables...

La carte réseau connais la liste des ports sur lesquels elle doit accepter les connexions TCP ?

BadMax

  • Client Free adsl
  • Expert
  • *
  • Messages: 3 481
  • Malissard (26)
TCP offload engine - Segmentation réalisée par la carte réseau
« Réponse #16 le: 05 août 2013 à 18:38:45 »
Merci !

ToE si c'est la carte qui gère les connexions TCP sous Windows, cela ne pose pas de problème de sécurité ? Le gros de la pile TCP/IP est dans la carte réseau, plus dans le système d’exploitation ! La carte réseau connait la liste des ports sur lesquels elle doit accepter les connexions TCP ?

Ca va etre simple d'expliquer le modèle OSI avec ça...

"Donc un switch L3 est un switch qui normalement ne fait que traiter les informations en couche 2. Mais comme il est L3 il traite la couche 3 comme un routeur mais ça reste un switch. La carte réseau du PC traite la couche 1 et 2 mais si y'a TOE activé elle traite aussi les couches 3 et 4. Une box ADSL sait traiter toutes les couches 1/2/3/4 car c'est à la fois un modem, un switch, un routeur et un firewall. Si les couches sont sales il faut les changer mais vous pouvez aussi utiliser des couches lavables."

vivien

  • Administrateur
  • *
  • Messages: 47 081
    • Twitter LaFibre.info
TCP offload engine - Segmentation réalisée par la carte réseau
« Réponse #17 le: 07 octobre 2013 à 10:18:50 »
Un exemple où la désactivation de tso/gso fait perdre du débit :

J'ai un ping de 103ms (netem +100ms) entre mon PC 1g/b sous Ubuntu 13.04 (4Go ram, Linux 3.8 64bits configuration par défaut) et testdebit.info

Serveur Linux 3.8 64bits avec configuration par défaut :
$ wget -O /dev/null http://1.testdebit.info/fichiers/1000Mo.dat
100%[=========>] 1 000 000 000 26,2MB/s   ds 41s   
2013-10-07 10:08:10 (23,1 MB/s) - «/dev/null» enregistré [1000000000/1000000000]

Serveur Linux 3.8 32bits avec TSO/GSO désactivé :
$ wget -O /dev/null http://2.testdebit.info/fichiers/1000Mo.dat
100%[=========>] 1 000 000 000 17,5MB/s   ds 59s   
2013-10-07 10:11:13 (16,2 MB/s) - «/dev/null» enregistré [1000000000/1000000000]

Serveur Linux 3.8 64bits avec TSO/GSO désactivé :
$ wget -O /dev/null http://3.testdebit.info/fichiers/1000Mo.dat
100%[=========>] 1 000 000 000 17,0MB/s   ds 64s   
2013-10-07 10:10:08 (14,9 MB/s) - «/dev/null» enregistré [1000000000/1000000000]

Serveur Linux 2.6.24 avec la configuration par défaut :
$ wget -O /dev/null http://bouygues.testdebit.info/fichiers/1000Mo.dat
100%[=========>] 1 000 000 000 26,2MB/s   ds 42s   
2013-10-07 10:08:58 (22,7 MB/s) - «/dev/null» enregistré [1000000000/1000000000]

vivien

  • Administrateur
  • *
  • Messages: 47 081
    • Twitter LaFibre.info
TCP offload engine - Segmentation réalisée par la carte réseau
« Réponse #18 le: 30 octobre 2013 à 10:16:07 »
De nouvelles options sont disponibles avec Ubuntu 13.10 et le noyau 3.11 : ce sont les 6 lignes en gras

# ethtool -k eth0
Features for eth0:
rx-checksumming: on
tx-checksumming: on
   tx-checksum-ipv4: on
   tx-checksum-ip-generic: off [fixed]
   tx-checksum-ipv6: on
   tx-checksum-fcoe-crc: off [fixed]
   tx-checksum-sctp: off [fixed]
scatter-gather: on
   tx-scatter-gather: on
   tx-scatter-gather-fraglist: off [fixed]
tcp-segmentation-offload: on
   tx-tcp-segmentation: on
   tx-tcp-ecn-segmentation: on
   tx-tcp6-segmentation: on
udp-fragmentation-offload: off [fixed]
generic-segmentation-offload: on
generic-receive-offload: on
large-receive-offload: off [fixed]
rx-vlan-offload: on
tx-vlan-offload: on
ntuple-filters: off [fixed]
receive-hashing: on
highdma: on [fixed]
rx-vlan-filter: off [fixed]
vlan-challenged: off [fixed]
tx-lockless: off [fixed]
netns-local: off [fixed]
tx-gso-robust: off [fixed]
tx-fcoe-segmentation: off [fixed]
tx-gre-segmentation: off [fixed]
tx-udp_tnl-segmentation: off [fixed]
tx-mpls-segmentation: off [fixed]

fcoe-mtu: off [fixed]
tx-nocache-copy: on
loopback: off [fixed]
rx-fcs: off [fixed]
rx-all: off [fixed]
tx-vlan-stag-hw-insert: off [fixed]
rx-vlan-stag-hw-parse: off [fixed]
rx-vlan-stag-filter: off [fixed]


C'est Ubuntu server 13.10 64bits sur un serveur Dell PowerEdge R210 (Xeon X3450 @2.67GHz)

vivien

  • Administrateur
  • *
  • Messages: 47 081
    • Twitter LaFibre.info
TCP offload engine - Segmentation réalisée par la carte réseau
« Réponse #19 le: 30 octobre 2013 à 11:32:06 »
Les premiers tests montrent encore des changements au niveau TCP/IP dans des conditions difficiles (très haut débit ou ping important)

Et cette fois-ci avec Linux 3.11, désactiver TSO/GSO dégrade notablement les performances, alors qu'avec les noyaux précédents (surtout le 3.8 avec lequel j'ai fais pas mal de test désactiver TSO/GSO améliore généralement le débit)

Bensay

  • Technicien Orange ADSL / FTTH / MIC
  • Abonné Orange Fibre
  • *
  • Messages: 686
  • Val D'oise
TCP offload engine - Segmentation réalisée par la carte réseau
« Réponse #20 le: 30 octobre 2013 à 12:12:56 »
De nouvelles options sont disponibles avec Ubuntu 13.10 et le noyau 3.11 : ce sont les 6 lignes en gras

# ethtool -k eth0
Features for eth0:
rx-checksumming: on
tx-checksumming: on
   tx-checksum-ipv4: on
   tx-checksum-ip-generic: off [fixed]
   tx-checksum-ipv6: on
   tx-checksum-fcoe-crc: off [fixed]
   tx-checksum-sctp: off [fixed]
scatter-gather: on
   tx-scatter-gather: on
   tx-scatter-gather-fraglist: off [fixed]
tcp-segmentation-offload: on
   tx-tcp-segmentation: on
   tx-tcp-ecn-segmentation: on
   tx-tcp6-segmentation: on
udp-fragmentation-offload: off [fixed]
generic-segmentation-offload: on
generic-receive-offload: on
large-receive-offload: off [fixed]
rx-vlan-offload: on
tx-vlan-offload: on
ntuple-filters: off [fixed]
receive-hashing: on
highdma: on [fixed]
rx-vlan-filter: off [fixed]
vlan-challenged: off [fixed]
tx-lockless: off [fixed]
netns-local: off [fixed]
tx-gso-robust: off [fixed]
tx-fcoe-segmentation: off [fixed]
tx-gre-segmentation: off [fixed]
tx-udp_tnl-segmentation: off [fixed]
tx-mpls-segmentation: off [fixed]

fcoe-mtu: off [fixed]
tx-nocache-copy: on
loopback: off [fixed]
rx-fcs: off [fixed]
rx-all: off [fixed]
tx-vlan-stag-hw-insert: off [fixed]
rx-vlan-stag-hw-parse: off [fixed]
rx-vlan-stag-filter: off [fixed]


C'est Ubuntu server 13.10 64bits sur un serveur Dell PowerEdge R210 (Xeon X3450 @2.67GHz)

Bonjour Vivien,

Existe t'il un post une section ou une URL ou c'est paramètres et leurs fonctions/utilités sont expliquée ?

Cdt

Bensay

kgersen

  • Modérateur
  • Abonné Bbox fibre
  • *
  • Messages: 9 078
  • Paris (75)
TCP offload engine - Segmentation réalisée par la carte réseau
« Réponse #21 le: 30 octobre 2013 à 14:39:38 »
Souvent la man page d'ethtool est mise a jour  pour expliquer (succinctement j'avoue) ces options.

Concernant ces nouvelles options, a première vue les 3 "tx-*-segmentation" concernent le GSO pour certains types de paquet (tunnel GRE, tunnel TNL sur UDP et MPLS). L'idee est que la carte qui supporte ca est sans doute capable de fragmenter elle meme un gros paquet GRE en plusieurs paquets tout en préservant la cohérence du flux encapsulé.

Les 3 options "vlan-stag" au vue de leurs noms concernent le support matériel du 802.1ad (Q in Q) a savoir l'utilisation de VLANs dans un VLAN, notamment utile pour les providers qui veulent transporter les VLANs de leur cllents. "stag" correspondant au S-TAG dit Service Tag. Ces options permettraient donc a la carte elle-meme d'inserer le s-tag en emission (tx-vlan-stag-hw-insert) et de filter puis enlever le s-tag en réception avec les 2 autres options.  A priori ca s’adresse plus a des équipements type CPE ou de bordure.

vivien

  • Administrateur
  • *
  • Messages: 47 081
    • Twitter LaFibre.info
TCP offload engine - Segmentation réalisée par la carte réseau
« Réponse #22 le: 08 août 2014 à 10:04:41 »
Dans le nouveau noyau Linux 3.16, sortie le 3 août 2014 (et qui sera intégré dans Ubuntu 14.10 qui sort le 23 octobre 2014), il y a une émulation logicielle de la TCP Segmentation Offload (TSO) a été ajoutée au noyau et permet à des SoCs d'augmenter leur débit maximal de 16% à 54% tout en réduisant l'utilisation CPU de 40% dans un test de performance basé sur HTTP (commits : 1, 2). La TSO consiste normalement à envoyer l'ensemble des données à transmettre à la carte réseau et laisser celle-ci découper les paquets. Cela permet de limiter la consommation CPU sans perdre de performance.

Source : Linux FR

Harvester

  • Abonné Free fibre
  • *
  • Messages: 344
  • Freebox Révolution - Limours (91)
    • Site perso
TCP offload engine - Segmentation réalisée par la carte réseau
« Réponse #23 le: 08 août 2014 à 10:55:38 »
A regarder les commits, ça ne semble concerner que 2 drivers actuellement, donc pas de révolution à venir sur les téléphones et appareils mobiles pour l'instant, peut être dans la prochaine itération du noyau...