Voici quelques `trucs' que vous pouvez utiliser si vous souffrez d'un faible taux de transfert sur Ethernet, ou pour gagner encore un peu de vitesse sur ces fameux transferts FTP.
Le programme ttcp.c
est un bon test pour mesurer la vitesse de
transfert brute. Un autre truc classique est de faire un ftp> get
mon_gros_fichier /dev/null
où mon_gros_fichier
fait plus
d'un Mo et réside dans le cache disque de la machine qui transmet.
(Faites le `get' au moins deux fois, car la première fois ce cache sera
vide.) Vous avez besoin que le fichier soit dans le cache car il faut
éviter que le temps d'accès au fichier influe sur votre mesure. C'est
pour la même raison que vous envoyez les données qui arrivent vers
/dev/null
plutôt que vers le disque.
Même une carte 8 bits est capable de recevoir des paquets qui se suivent (back-to-back paquets en anglais) sans aucun problème. Les difficultés apparaissent quand l'ordinateur n'enlève pas suffisamment rapidement de la carte les paquets reçus pour faire de la place pour d'autres paquets entrants. Si l'ordinateur ne supprime pas rapidement les paquets déjà reçus de la mémoire de la carte , celle-ci n'aura pas assez de place pour mettre les nouveaux paquets.
Dans ce cas, soit la carte détruit le nouveau paquet, soit elle réécrit sur un paquet déjà reçu. Les deux solutions interrompent brutalement le flux du trafic, nécessitent des re-transmissions et peuvent sérieusement dégrader les performances d'un facteur qui va jusqu'à 5 !
Les cartes qui possèdent plus de mémoire sont capables de conserver plus de paquets, et peuvent donc supporter de gros pics de paquets successifs sans détruire de paquets. Par conséquent cela signifie que la carte n'exige pas de l'ordinateur un temps de latence aussi faible pour enlever les paquets sans avoir à en détruire.
La plupart des cartes 8 bits ont un tampon de 8 Ko, et la plupart des cartes 16 bits ont un tampon de 16 Ko. La plupart des pilotes sous Linux réserveront 3 Ko de ce tampon (pour deux tampons de transmission), laissant 5 Ko d'espace de réception pour une carte 8 bits. Cela ne laisse de la place que pour 3 paquets Ethernet de pleine taille (1500 octets).
Comme indiqué précédemment, si les paquets sont enlevés de la carte suffisamment rapidement, le problème de destruction ou de surcharge n'apparaît pas même si la taille mémoire du tampon de réception est petite. Le facteur qui détermine la rapidité avec laquelle les paquets sont enlevés de la carte pour être placés dans la mémoire de l'ordinateur est la vitesse du chemin que devront suivre les données entre les deux -- c'est-à-dire la vitesse du bus ISA. (Si le processeur est un 386sx-16 poussif, cela jouera aussi un rôle.)
La vitesse d'horloge recommandée pour un bus ISA est de 8 MHz, mais de nombreuses cartes-mères et de nombreux périphériques peuvent être utilisés à des fréquences plus élevées. La vitesse d'horloge du bus ISA peut en général être modifiée dans la configuration CMOS, en choisissant le rapport entre la fréquence du processeur et celle de la carte-mère. Certaines cartes-mères n'auront pas cette option, et vous serez coincés avec la valeur par défaut.
Par exemple, voici quelques vitesses de réception mesurées par le programme TTCP sur un 486 à 40 MHz, avec une carte 8 bits WD8003EP, pour des vitesses différentes du bus ISA.
Vitesse du bus ISA (MHz) TTCP - réception (Ko/s) ------------------------ ----------------------- 6.7 740 13.4 970 20.0 1030 26.7 1075
Vous auriez du mal à faire mieux que 1075 Ko/s avec n'importe quelle carte Ethernet 10 Mo/s, en utilisant TCP/IP. Néanmoins ne vous attendez pas à ce que tous les systèmes puissent travailler à des vitesses de bus ISA rapides. La plupart des systèmes ne fonctionneront pas correctement à des vitesses au-dessus de 13 MHz. (De même, certains systèmes PCI fixent la vitesse du bus ISA à 8 MHz, afin que l'utilisateur final n'ait pas la possibilité de pouvoir l'augmenter.)
En plus de vitesses de transferts supérieures, vous profiterez aussi en général d'une réduction de l'utilisation du processeur due à la durée plus courte des cycles mémoires et d'E/S. (Notez que les disques durs et les cartes vidéo situées sur le bus ISA afficheront aussi de meilleures performances avec une vitesse du bus ISA plus élevée.)
Soyez sûr de sauvegarder toutes vos données avant de faire des expériences avec des vitesses du bus ISA au-dessus de 8 MHz, et de tester attentivement que tous les périphériques ISA fonctionnent correctement après toute augmentation de vitesse.
Une fois encore, les cartes qui possèdent peu de mémoire et un trajet des données entre la carte et la mémoire de l'ordinateur plutôt lent provoquent des problèmes. La fenêtre de réception TCP est réglée par défaut à 32 Ko, ce qui signifie qu'un ordinateur rapide situé sur le même sous-réseau que vous pourra vous inonder de 32 Ko de données sans s'arrêter pour regarder si vous en avez reçu le moindre morceau.
Les versions récentes de la commande route
donnent la possibilité
de régler la largeur de cette fenêtre à la volée. En général, cette
fenêtre ne doit être réduite que pour le réseau local, puisque les
ordinateurs qui sont à quelques routeurs ou passerelles de distance ont
suffisamment de `tampons' intermédiaires pour ne pas poser de
problème. Un exemple d'utilisation est :
route add <comme_d_habitude> ... window <largeur_de_fenetre>
largeur_de_fenetre
est la largeur de la fenêtre que vous
voulez utiliser (en octets). Une carte 8 bits 3c503 sur un bus ISA
fonctionnant à une vitesse de 8 MHz ou moins tournera correctement avec
une fenêtre d'environ 4 Ko. Une fenêtre trop large causera des
surcharges et des pertes de paquets, et une diminution drastique du
débit Ethernet. Vous pouvez vérifier les conditions de travail de la
carte en faisant un cat /proc/net/dev
qui affichera si des
pertes de paquets ou des surcharges sont apparues.
Des personnes ont remarqué que l'utilisation de cartes 8 bits sur des clients NFS donne des performances moins bonnes que celles attendues, en utilisant une taille de paquet NFS de 8Ko (celle donnée à l'origine par Sun).
La raison possible de tout cela pourrait être la différence entre la taille des tampons des cartes 8 bits et celle des cartes 16 bits. La taille maximale d'un paquet Ethernet est d'environ 1500 octets. Maintenant que nous faisons du NFS, des paquets NFS de 8 Ko vont arriver sous la forme de 6 paquets de taille maximale à la queue-leu-leu. Ni les cartes 8 bits ni les cartes 16 bits n'ont de problème à recevoir ces paquets les uns derrière les autres. Le problème se produit parce que la machine n'enlève pas les paquets à temps de la carte, et que le tampon déborde. Le fait que les cartes 8 bits nécessitent un cycle du bus ISA supplémentaire pour chaque transfert n'aide pas beaucoup, par ailleurs. Ce que vous pouvez faire si vous avez une carte 8bits est soit de diminuer la taille de transfert NFS à 2 Ko (voire 1 Ko), soit d'essayer d'augmenter la vitesse du bus ISA afin que les tampons de la carte soient vidés plus rapidement. J'ai trouvé qu'une vieille carte WD8003E à 8 MHz (sans autre charge système) peut soutenir une réception de taille importante avec une taille NFS de 2 Ko, mais pas à 4 Ko, auquel cas les performances étaient dégradées d'un facteur trois.
D'un autre coté, si l'option par défaut est d'utiliser des blocs de 1 Ko, et que vous avez au moins une carte ISA 16 bits, vous aurez certainement de meilleures performances en passant a 4 Ko (ou même 8 Ko).