Bonjour à tous 🙂
Je ne suis nouveau sur ce forum, et je ne suis pas un utilisateur régulier de Fedora, j'ai plutôt l'habitude des distributions Ubuntu. Mais dans le cadre d'un stage, je me vois obligé de l'utiliser.
Mon stage consiste a évaluer les performance d'un réseau Wi-fi ( 802.11g ) multi saut. Il me faudrait donc mesurer le débit, le délai de bout en bout, le taux de perte de paquet, et il serai aussi très intéressant pour moi d'obtenir le taux de retransmission d'un trame ( frame error rate ).
Je travaille sur une plate forme de test ( Emulab ), le concept est simple, pouvoir effectué des expérience, en particulier sur le réseau sur un pool de machine distance. Emulab fonctionne comme un simulateur de réseau ( comme NS ) mais avec de vrai pc sur lesquels ont peut avoir la main grâce a une connexion SSH.
La topologie qu'utilise ressemble dont ça ceci :
N1 <----> N2 <---->N3
Sachant que les deux liens sont des liens sur un même réseau wifi, j'ai donc un seul lan. N2 fonctionne comme un routeur, N1 doit passer par N2 pour contacter N3 et vice versa. J'ai donc simuler une "chaîne" grâce aux tables de routage.
Pour faire mes mesure, j'utilise donc Iperf que je lance sur N1 et N3 pour mesurer le débit entre les deux nœud. Je capture aussi le trafic grâce a tcpdump soit au niveau de N2 soit, dans une topologie lègèrement différente, sur N3' de façon a ne pas encombrer les carte réseau ni les processeur des machine sur lesquels le trafic est effectif.
N1 <----> N2 <---->N3
<---->N3'
Ensuite grâce aux traces de tcpdump et un peu de scripting, je peux récupérer des info, notamment le délais de bout en bout.
Ça s'est ce qui se passe dans le meilleurs des mondes ...
Mon but est donc de mesurer les performance de ce réseau afin de les comparer a un modèle théorique élaborer mes responsable de stage. Ce modèle est cependant plus simple que la réalité. J'ai donc besoin de connaître un certaine nombre de paramètre pour ajuster le modèle. Et dans le meilleurs des cas pouvoir les modifier pour observé comment l'expérience ce comporte vis à vis du modèle.
L'un de ces paramètre est la taille de la fille d'attente des paquet ( en émission ), dans le modèle il n'y a qu'une seule valeur qui gère une file unique, un cas très simple. Or, ce n'est pas la même chose dans le cas réel. Je sais qu'il y a plusieurs files d'attente a différent niveau.
Cet article a pu me faire pas mal avancé dans la compréhension de ces différente file :
http://www.coverfire.com/articles/queueing-in-the-linux-network-stack/
Je sais que les valeurs /proc/sys/net/core/rmem_max et surtout /proc/sys/net/core/wmem_max ( vu qu'on s’interroge sur l'émission ) pourrai être intéressante vu qu'elles régissent ( apparemment ) la taille que l'on peut allouer a une socket. Ce qui nous ferais un espace de stockage ou les paquets pourrait être perdu en cas de surchage. Cela dit, j'ai beau modifier cette valeur wmem_max ( à l'aide de la commande sysctl ) je ne vois pas d'influence sur mon trafic iperf. Donc je me demande si cette valeurs régie bien ce que je pense.
A priori ( corrigez moi si je me trompe, je suis là pour ça ) les sockets se déversent dans une ( ou des ) file(s) attente qui sont gérées par le noyaux de façon plus ou moins complexe en fonctions de la " Queueing discpline " utilisées. Dans mon cas, j'utilise une Qdisc plus simple que la qdisc par défaut. J'utilise une file Fifo simple, dont je peux maîtriser la taille via la commande tc. Lorsque je vais varier ce paramètre dans mon expérimentation, je peux observer des changements de comportement assez cohérent. Sauf dans un cas particulier dont je parlerais plus tard.
Il me semble donc que ensuite ( encore une fois si ce n'est pas le cas, ça m'arrangerai de le savoir ) cette Qdisc se vide dans une file fifo simple, la "driver queue" en attendant que les paquets soient expédiés. La taille de cette file là, le ring buffer d'après l'article, est paramétrable via la commande ethtool. Cependant, cette commande ne fonctionne pas sur mon interface. Voilà ce que j'arrive a obtenir.
sudo ethtool -i wifi0
driver: ath_pci
version: 0.9.4.5 (0.9.3.3)
firmware-version:
bus-info: 0000:04:00.0
sudo ethtool -g wifi0
Ring parameters for wifi0:
Cannot get device ring settings: Operation not supported
Me voilà bien avancé avec des résultats pareils.
Voici d'autre info qui pourrai être utile pour raisonner :
cat /etc/redhat-release
Fedora Core release 4 (Stentz)
uname -r
2.6.18.6
Donc si quelqu'un a peut apporter des clefs pour la compréhension de mes soucis je serai ravi.
CDeX.