Comment mesurer les performances du réseau (procédure de test de protocole de réseau)

Tout d'abord, un peu à l'arrière-plan. Il ya beaucoup de différentes comparaisons de distribution des systèmes de contrôle de version (DVCS) qui comparent la taille de référentiel, ou de la référence de vitesse des opérations. Je n'ai trouvé aucun qui aurait indice de référence les performances du réseau de différents DVCS, et les différents protocoles utilisés... à côté de la mesure de la vitesse des opérations (commandes) mettant en réseau comme 'clone', 'pull'/'fetch' ou de 'push'.

Je voudrais savoir alors comment voulez-vous faire une telle comparaison; comment mesurer la performance du réseau d'une application, ou la façon de référence du protocole réseau. J'imagine ici, entre autres, la mesure de la dépendance de la performance de la bande passante du réseau et le temps de latence (ping) de réseau; certains protocoles sacrifice de la latence dans la forme de plus d'aller-retour d'échanges (de négociation) pour envoyer minimale requise finale de "pack".

Je préfère les solutions impliquant un seul ordinateur, si possible. J'aimerais voir des solutions open source, travail sur Linux. Mais je souhaite également la bienvenue plus de réponses génériques.

Préféré OS: Linux
Langues préférées: C, Perl, shell script


Mesures possibles:

  • nombre total d'octets transférés à partir du serveur vers le client et du serveur vers le client en une seule séance, ce qui peut également être utilisé pour mesurer l'overhead du protocole (bande passante)
  • nombre d'aller-retours (connexions) dans une transaction (temps de latence)
  • la dépendance de la vitesse de fonctionnement du réseau (temps qu'il faut pour cloner/pull/push) de la bande passante réseau et de la latence du réseau (ping)

La façon de faire de telles mesures (tels points de référence)?


Ajouté 02-06-2009:
Un simple indice de référence (mesure) serait une version réseau de time de commande, c'est à dire la commande exécuter serait me donner le nombre d'octets transférés, et le nombre d'allers-retours /connexions réseau lors de l'exécution d'une commande donnée.


Ajouté 09-06-2009:
Exemple imaginaire de la sortie pour l'a mentionné ci-dessus la solution de la version réseau de time commande pourrait ressembler à la suivante:

$ ntime git clone -q git://git.example.com/repo.git
...
bytes sent: nnn (nn kiB), bytes received: nnn (nn kiB), avg: nn.nn KB/s
nn reads, nn writes

Noter que c'est seulement un exemple de sortie, détaillant la nature des informations que l'on peut vouloir obtenir.


Ajouté 09-06-2009:
Il ressemble à ce que je veux, peuvent être réalisés à l'aide alors dummynet, outil (à l'origine) pour tester les protocoles de mise en réseau...

Demandez-vous, comment obtenir les données nécessaires afin d'arriver à de telles références pour l'arbitraire d'un réseau de programme?
Oui, j'aimerais avoir au minimum obtenir le nombre total d'octets transférés et peut-être le nombre de changements de lire à écrire pour une commande donnée, quelque chose comme le temps / temps pour le CPU et la mémoire, et de SystemTap iotimes pour les I/O.
Je pense que pour vraiment répondre à votre question, vous avez, idéalement, devrait nous en dire plus sur votre choix de plate-forme/OS, ainsi que votre langage de programmation préféré. Aussi, une liste détaillée de mesures qui vous intéressent, qui nous permettra de savoir quelle est l'approche la plus faisable.
Ajouté. Préféré le système d'exploitation est Linux, langues préférées comprennent (sans ordre) C, Perl, shell script, mais peut être en Python ou en Java ou autre langage de programmation.

OriginalL'auteur Jakub Narębski | 2009-05-20