Projet

Général

Profil

Projet agregation » Historique » Version 29

Jocelyn Dealande, 06/12/2011 01:13

1 1 Laurent GUERBY
h1. Projet agregation
2 1 Laurent GUERBY
3 2 Yanick Delarbre
* [[Bibliographie du projet]]
4 18 Yanick Delarbre
* [[L'installation de gitolite]]
5 3 Yanick Delarbre
* http://pad.rhizome-fai.net/U7HSgxYvDM | Le code du tunnel tun réalisé avec python
6 17 Yanick Delarbre
* http://pad.rhizome-fai.net/TS2HBLkTnN | Spécification de l'iperf (de quel manière on détecte la capacité d'un lien de manière opportuniste ? Monitoring ?)
7 1 Laurent GUERBY
8 1 Laurent GUERBY
* http://lists.tetaneutral.net/listinfo/projet-agregation
9 1 Laurent GUERBY
* http://chiliproject.tetaneutral.net/issues/16
10 4 Jocelyn Dealande
11 22 Laurent GUERBY
h2. Prototype v1
12 22 Laurent GUERBY
13 22 Laurent GUERBY
http://lists.tetaneutral.net/pipermail/projet-agregation/2011-November/000023.html
14 4 Jocelyn Dealande
15 4 Jocelyn Dealande
h2. Test de tunproxy.py
16 4 Jocelyn Dealande
17 4 Jocelyn Dealande
On utilise "tunproxy.py":http://www.secdev.org/projects/tuntap_udp/files/tunproxy.py. Entre 2 machines
18 4 Jocelyn Dealande
* client-adsl (une machine chez nous)
19 4 Jocelyn Dealande
* gateway (la VM)
20 4 Jocelyn Dealande
21 4 Jocelyn Dealande
h3. Sur la gateway (= VM ttn)
22 4 Jocelyn Dealande
23 4 Jocelyn Dealande
Démarrer le tunnel, il crée lui-même une interface _toto0_ (détruite à la sortie).
24 4 Jocelyn Dealande
25 4 Jocelyn Dealande
<pre>
26 4 Jocelyn Dealande
 ./tunproxy.py -s 6000
27 11 Jocelyn Dealande
 ifconfig toto0 10.0.0.1/24 mtu 1468
28 4 Jocelyn Dealande
</pre>
29 1 Laurent GUERBY
30 15 Jocelyn Dealande
La MTU est calculée comme suit : 
31 1 Laurent GUERBY
32 11 Jocelyn Dealande
  MTU de l'iface virtuelle  = MTU  de l'iface physique - taille_max(header IP) - taille(header UDP)
33 15 Jocelyn Dealande
  MTU de l'iface virtuelle = 1500 - 24 - 8
34 11 Jocelyn Dealande
35 17 Yanick Delarbre
http://www.commentcamarche.net/faq/7185-introduction-au-mtu
36 11 Jocelyn Dealande
37 4 Jocelyn Dealande
h3. Sur le client
38 4 Jocelyn Dealande
39 4 Jocelyn Dealande
40 4 Jocelyn Dealande
<pre>
41 4 Jocelyn Dealande
 ./tunproxy.py -c rhizome-fai.tetaneutral.net:6000
42 12 Yanick Delarbre
 ifconfig toto0 10.0.0.2/24 mtu 1468
43 4 Jocelyn Dealande
</pre>
44 4 Jocelyn Dealande
45 4 Jocelyn Dealande
Tout le trafic vers les adresses en 10.0.0.x passera par le tunnel.
46 4 Jocelyn Dealande
47 4 Jocelyn Dealande
* http://lists.tetaneutral.net/listinfo/projet-agregation
48 1 Laurent GUERBY
* http://chiliproject.tetaneutral.net/issues/16
49 1 Laurent GUERBY
50 15 Jocelyn Dealande
Un test de perf sur un téléchargement d'un fichier de 40Mio donne :
51 15 Jocelyn Dealande
52 15 Jocelyn Dealande
* avec tunnel : 909kb/s
53 15 Jocelyn Dealande
* sans tunnel : 942kb/s
54 15 Jocelyn Dealande
55 29 Jocelyn Dealande
h1. Détection de la saturation d'un lien / bufferbloat
56 29 Jocelyn Dealande
Un des points sur lesquels nous nous penchons est la détection de la capacité d'un lien et de son évolution, ceci 1) pour utiliser au mieux des liens de capacité différente et éventuellement changeante.
57 29 Jocelyn Dealande
58 29 Jocelyn Dealande
Tout le challenge est de détecter (passivement) plutôt que de mesurer (activement) la capacité du lien, sans induire de trafic supplémentaire.
59 29 Jocelyn Dealande
60 29 Jocelyn Dealande
Nous avons fait des mesures sur deux liens :
61 29 Jocelyn Dealande
62 29 Jocelyn Dealande
h2. Mesure ADSL Free (Freebox)
63 29 Jocelyn Dealande
64 29 Jocelyn Dealande
Il semble que de la QoS soit appliquée… l'effet de bufferbloat n'est pas vraiment visible : on passe d'un ping de 40 à 70/80ms… (TODO: prendre le temps de collecter des résultats des deux côtés du tunnel un peu plus sérieusement que juste l'impression donnée ceci-dit). Tous les paquets de ping arrivent, même lorsque le lien est saturé.
65 29 Jocelyn Dealande
66 29 Jocelyn Dealande
h2. Lien ADSL (OVH)
67 29 Jocelyn Dealande
68 29 Jocelyn Dealande
L'effet de la saturation se fait clairement ressentir sur le ping : on passe de 70 à plus de 300ms de ping lorsque le lien est saturé.
69 29 Jocelyn Dealande
Données du test et graphiques : !"saturation et ping  (uplink seulement) udp+sctp.ods"!
70 29 Jocelyn Dealande
71 29 Jocelyn Dealande
h3. Conditions du test :
72 29 Jocelyn Dealande
* Tunnel tap basé sur tunproxy.py (cf dépôt git), qui est le seul à utiliser la connexion
73 29 Jocelyn Dealande
* Données collectées toutes les secondes, chaque peer enregistre : 
74 29 Jocelyn Dealande
  * timestamp
75 29 Jocelyn Dealande
  * stats des paquets entrants
76 29 Jocelyn Dealande
  * ping
77 29 Jocelyn Dealande
* On teste la connection au repos en la saturant par moments avec iperf
78 29 Jocelyn Dealande
  * en UDP : en metant l'option -b à une valeur supérieure à la capacité d'uplink 
79 29 Jocelyn Dealande
  * en TCP
80 29 Jocelyn Dealande
* Les données des 2 peers sont fusionnées à posteriori (script merge_tunproxy_csv.py) en fonction des timestamp.
81 29 Jocelyn Dealande
* Les données sont graphées avec Oocalc.
82 29 Jocelyn Dealande
83 29 Jocelyn Dealande
Le comptage du volume sortant n'est pas pertinent puisque la moitié des paquets peuvent-être dropés en route…
84 29 Jocelyn Dealande
85 29 Jocelyn Dealande
86 29 Jocelyn Dealande
h3. Analyse des résultats
87 29 Jocelyn Dealande
(voir document joint)
88 29 Jocelyn Dealande
* On note systématiquement une corrélation forte entre lien saturé et augmentation du ping. Que le lien soit saturé en UDP ou TCP.
89 29 Jocelyn Dealande
* En UDP, on peut saturer le lien complètement. Il en résulte qu'une part des pings se perd -> Prendre non seulement en compte le RTT mais également le taux de pings perdus.
90 29 Jocelyn Dealande
* En TCP, on observe aussi une montée du ping significative, mais jamais de pings perdus. On constate d'ailleurs que TCP se rend compte qu'il sature le lien et divise sa fenêtre (trou dans le graphe).
91 29 Jocelyn Dealande
* -> Quid de la réalité de la saturation d'un lien par rapport à ces deux exemples simples ?
92 29 Jocelyn Dealande
93 29 Jocelyn Dealande
94 11 Jocelyn Dealande
h1. Petits points techniques…
95 11 Jocelyn Dealande
96 11 Jocelyn Dealande
h2. Que mesure iperf et comment (en UDP) ?
97 11 Jocelyn Dealande
98 20 Jocelyn Dealande
Iperf mesure le débit du client vers le serveur (dans un seul sens). En UDP, il envoie à une vitesse nominale (par défait 1M). Le résultat donné par le client n'est pas une mesure mais correspond à cette vitesse nominale. *Seul le _server repport_ correspond à la "vraie" mesure.*
99 1 Laurent GUERBY
100 16 Jocelyn Dealande
La saturation d'un lien générant des pertes, pour mesurer les pertes liées à la qualité du lien (et non à sa capacité), il faut demander au client d'émettre un peu en-dessous de la vitesse à laquelle peut recevoir le serveur.
101 17 Yanick Delarbre
102 17 Yanick Delarbre
h2. Quelques outils réseaux bien pratique
103 17 Yanick Delarbre
104 17 Yanick Delarbre
* tcpdump | http://openmaniak.com/fr/tcpdump.php
105 17 Yanick Delarbre
<pre bash>
106 17 Yanick Delarbre
tcpdump -D #Interfaces réseaux disponibles pour la capture
107 17 Yanick Delarbre
tcpdump port 80 -i eth0 -w capture.log #Enregistre le trafic Web vers le fichier capture.log pouvant être ouvert avec Wireshark
108 17 Yanick Delarbre
tcpdump icmp #Affiche tout le trafic associé au protocole icmp
109 17 Yanick Delarbre
</pre>
110 17 Yanick Delarbre
* ping | http://www.bortzmeyer.org/ping-taille-compte.html
111 17 Yanick Delarbre
** Permet de tester un problème de MTU grâce à l'option -s de ping permettant de fixer une taille de paquet
112 17 Yanick Delarbre
* hping3
113 17 Yanick Delarbre
<pre bash>
114 17 Yanick Delarbre
hping --syn -p 80 --data 1200 10.0.0.1 #Envoie de paquet tcp syn sur le port 80 de taille 1200
115 17 Yanick Delarbre
</pre>
116 5 Jocelyn Dealande
117 15 Jocelyn Dealande
118 21 Jocelyn Dealande
*tracepath* pour découvrir le PMTU
119 21 Jocelyn Dealande
120 23 Jocelyn Dealande
h1. TODO étapes suivantes
121 23 Jocelyn Dealande
122 23 Jocelyn Dealande
* Chercher relation entre variations de latence et saturation de lien. Concrètement, être capable de détecter *l'évènement "mon lien est saturé"* et de mémoriser la capacité max. du lien
123 23 Jocelyn Dealande
* Finir de lire/comprendre le code de Fernando (linkagreg)
124 23 Jocelyn Dealande
* Lire/comprendre le bout de script python de Laurent (multi-UDP pour contourner les QoS)
125 23 Jocelyn Dealande
126 9 Jocelyn Dealande
h1. Journal (à partir du 28 oct)
127 1 Laurent GUERBY
128 23 Jocelyn Dealande
Activités du projet de Yanick & Jocelyn (TX) 
129 29 Jocelyn Dealande
130 29 Jocelyn Dealande
h2. 5 déc.
131 29 Jocelyn Dealande
* Détection de saturation :
132 29 Jocelyn Dealande
* Output CSV en direct vers le fichier plutôt que statiquement au bout de 3 minutes…
133 29 Jocelyn Dealande
* Écriture d'un outil de script de logs CSV
134 29 Jocelyn Dealande
* Collecte de mesures sur l'effet sur le ping de la saturation d'un lien en UDP et TCP
135 29 Jocelyn Dealande
* Analyse basique des résultats
136 1 Laurent GUERBY
137 24 Yanick Delarbre
h2. 27 nov.
138 25 Yanick Delarbre
139 24 Yanick Delarbre
* Lecture et utilisation de linkagreg (outil d'agrégation de Fernando)
140 24 Yanick Delarbre
* Faire fonctionner linkagreg sur une architecture 64bits
141 24 Yanick Delarbre
* Faire fonctionner linkagreg avec une connection sur le client //Fonctionnel
142 24 Yanick Delarbre
* Faire fonctionner linkagre avec n connection sur le client //Non fonctionnel
143 27 Yanick Delarbre
** Test avec une connection filaire et WiFi //Non fonctionnel car perte (important) de paquet sur le lien WiFi
144 27 Yanick Delarbre
** Test avec des connections virtuelles //Non fonctionnel car QoS inapplicable sur des interfaces virtuelles
145 27 Yanick Delarbre
** Test avec deux interfaces physiques //Non fonctionnel car QoS déficiente
146 23 Jocelyn Dealande
147 28 Jocelyn Dealande
* Ajout de la collecte de données sur les temps de réponse (ping) périodiquement.
148 28 Jocelyn Dealande
* Export des données en CSV (pour exploitation/graphe… etc.)
149 28 Jocelyn Dealande
* Premier jeu de mesure (mauvais) sur une ligne adsl.
150 28 Jocelyn Dealande
* 
151 28 Jocelyn Dealande
152 19 Jocelyn Dealande
h2. 11 nov.
153 19 Jocelyn Dealande
154 19 Jocelyn Dealande
* Debuggage du problème de MTU (c'est honteux mais c'est bêtement la taille des buffers qui n'était pas assez grande dans le programme. Notamment dû aux pseudo en-têtes, cf plus bas).
155 19 Jocelyn Dealande
* Configuration auto des adresses IP de chaque côté du tunnel (plus besoin d'ifconfig à la main)
156 19 Jocelyn Dealande
* Ajout sur tunproxy.py de compteurs de débit 
157 19 Jocelyn Dealande
  * mémorise le traffic sur les x dernières tranches de n secondes (défaut 10 tranches de 1 seconde)
158 19 Jocelyn Dealande
  * Affiche les moyennes et les max.
159 19 Jocelyn Dealande
* Compréhension de ce qui passe dans TUN : bien qu'étant un tunnel de niveau 3, il y a une pseudo-en-tête de L2, cf "doc officielle":http://www.mjmwired.net/kernel/Documentation/networking/tuntap.txt#102 (merci Laurent!)
160 19 Jocelyn Dealande
* discussion avec Laurent sur les intérêts de faire un tunnel L2 (qui rajoute pourtant l'overhead de l'en-tête L2), en bref :
161 19 Jocelyn Dealande
  * évite de gérer les soucis spécifiques du niveau IP
162 19 Jocelyn Dealande
  * TUN ne supporte pas IPV6 par exemple …
163 19 Jocelyn Dealande
164 1 Laurent GUERBY
165 23 Jocelyn Dealande
h2. 5 nov.
166 23 Jocelyn Dealande
* Mise en place d'un dépôt git (gitolite) pour partager du code avec Fernando Alves de Sames Wireless : 
167 23 Jocelyn Dealande
168 23 Jocelyn Dealande
    # Dépot public  : (lecture-seule)
169 23 Jocelyn Dealande
    git clone git://rhizome-fai.tetaneutral.net/agregation.git
170 23 Jocelyn Dealande
171 1 Laurent GUERBY
h2.  28 oct. 
172 6 Jocelyn Dealande
173 23 Jocelyn Dealande
* Initiation python (découverte pour Yanick) 
174 5 Jocelyn Dealande
* Commentaire intégral du tunproxy.py et premiers tests de ce dernier
175 8 Jocelyn Dealande
** ping ok (+1ms)
176 15 Jocelyn Dealande
** iperf à travers le tunnel : BP ~= celle de l'uplink ADSL. Le dernier datagrame ne reçoit pas d'ACK
177 5 Jocelyn Dealande
178 5 Jocelyn Dealande
<pre>
179 5 Jocelyn Dealande
[  3] local 10.0.0.2 port 50191 connected with 10.0.0.1 port 5001                        
180 5 Jocelyn Dealande
[ ID] Interval       Transfer     Bandwidth                                              
181 5 Jocelyn Dealande
[  3]  0.0-10.0 sec  1.25 MBytes  1.05 Mbits/sec                                         
182 5 Jocelyn Dealande
[  3] Sent 893 datagrams                                                                 
183 5 Jocelyn Dealande
[  3] WARNING: did not receive ack of last datagram after 10 tries.
184 5 Jocelyn Dealande
</pre>
185 13 Yanick Delarbre
186 13 Yanick Delarbre
h2. 2 novembre
187 13 Yanick Delarbre
188 13 Yanick Delarbre
* Modification de la MTU pour éviter la fragmentation de paquet
189 13 Yanick Delarbre
190 13 Yanick Delarbre
h1. Fonctionnalité
191 13 Yanick Delarbre
192 13 Yanick Delarbre
* Ajouter plusieurs sockets sur le tunnel pour éviter le traffic shaping de la part d'un opérateur