Bonjour,
Je possède deux processus : A & B et je souhaite mesurer le débit entre eux.
'A' envoi un fichier :
* il l'ouvre avec fopen
* créé un socket TCP à destination de B
* écrit le fichier dans le socket avec write()
Juste avant/après le write j'ai mis un gettimeofday() pour connaitre la durée d'écriture.
'B' est le récepteur
* création d'un socket TCP
* écoute et récupère les octets du socket avec read()
* les dépose dans un nouveau fichier
Là encore, juste avant/après le read j'ai mis un gettimeofday() pour connaitre la durée d'écriture.
Bref on est dans le cas typique & très simple d'un client/serveur.
J'ai mis en place un select() pour ne pas avoir de blocage.
Mon problème : les durées d’exécution du write() et du read(), mesurées avec gettimeofday, ne sont vraiment pas identique. 'A' écrit un fichier de 64ko en 0,3ms tandis que 'B' lit ce même fichier en 2,5ms en moyenne. J'ai réalisé de nombreux tests et tous confirment cette impression : 'A' écrit 10x plus rapidement que 'B' ne lit.
J'ai essayé d'ajouter un fsync(fd) juste après le write() appelé par 'A', mais cela ne change rien. Cependant, si j'ajoute un sync(), là, la durée d'exécution passe de 0,3ms à 250ms.. , ce qui est irréaliste pour un si petit fichier.
Bref, que faire pour avoir un ordre de grandeur d'écriture et de lecture sur socket à peu près identique ?
Merci pour vos réponses
Partager