Salut les experts,

Voila mon problème, j'espère que l'un d'entre vous pourra me donner une direction...

Je fais des tests de performance de disques (pour tenter de faire acheter des SSD, hé hé hé!). Un serveur de fichiers, 4 machine-clientes contenant 4 tâche-clientes. Tout ça pour simuler les machines virtuelles.

Quelques détails: Chaque tâche-cliente transfère 10000 fichiers de 1KB. Ce qui donne 10000x4x4=160000 fichiers à transférer en même temps. Les clients sont en ramdisk pour ne pas fausser les résultats du serveur de fichiers. À chaque test, tous les fichiers sont recréés pour éviter les caches. Je dois donc écrire un script pour automatiser tout ça.

Là où est le problème: Chaque tâche-cliente fait les transferts, mesure le temps, calcule le taux de transfert et le transmet à la machine qui supervise. J'ai d'abord transmis par fichier sur le serveur, mais le malheureux est tellement surchargé que les données apparaissent parfois beaucoup plus tard (10 ou 20s!). J'ai donc décidé que chaque tâche-cliente enverrait ses résultats par socket TCP. Malheureusement, la tâche de supervision qui attend en boucle et affiche les résultats ne les reçoit pas tous. Je suppose que le temps d'afficher et hop, un message de loupé: une tâche-cliente tente la connexion lorsque le serveur est en train d'afficher, un résultat de perdu.

Un peu de code:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
# supervisor loop
for ((i=1; i <= $totalOfGuests; i++))
do
  /usr/bin/nc -l $scriptHost $scriptPort
done
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
# guest task (read test)
ssh root@$h "{ time cp $srvPath/$h/guest-$g/* $ramdiskPath/guest-${g} 2>&1 } \
  | awk -v s=$transferSize '
  /^real/ \
  {
    split(\$2, t, \"[ms]\")
    time=t[1]*60+t[2]
    printf \"  READ rate for $h, guest-${g}: %6.3f MB/s\n\", s/time/1000000
  }' | /usr/bin/nc $scriptHost $scriptPort" &
Bon, le code est un peu difficile à lire. Ce n'est pas le plus important:

Auriez-vous une idée pour ne pas perdre des messages? La solution des sockets est-elle la bonne, selon vous? Merci pour vos lumières.