Vous ne pouvez pas vraiment mesurer la latence "à travers" le système d'exploitation en raison des frais généraux de mise en file d'attente et de gestion des processus. Pour être "plus précis", vous devriez écrire un programme qui pourrait accéder directement au noyau afin d'évaluer le temps réel entre les événements - le bip et la pression sur le clavier.
Cependant, vous pouvez vous en rapprocher dans bash en utilisant la fonction time
fonction. J'ai créé un bash basique script qui va demander à l'utilisateur d'appuyer sur Enter après avoir attendu l'émission d'un bip après une période aléatoire.
# generate a random number between 3 and 10 for seconds to wait for beep
t=$(( ( RANDOM % 10 ) + 3 ))
echo "When you hear the beep, press Enter!"
echo
echo
sleep $t
# beep the computer and get the time
time echo -ne '\007'
# wait for keypress and get the time
time read keypress
Vous obtiendrez deux fois trois valeurs temporelles. Elles sont définies comme suit :
- Real - le temps du début à la fin de l'appel mesuré si vous aviez un chronomètre en main. Ce temps tient compte de tous les processus en cours d'exécution à ce moment-là.
- Utilisateur - il s'agit du temps passé dans le espace utilisateur en dehors du noyau et représente le temps réel passé par le CPU à exécuter la tâche.
- Sys - c'est le temps passé à l'intérieur du noyau et est également le temps réel passé par le CPU.
Pour plus d'informations à ce sujet, voir Statistiques sur le temps de traitement réel, utilisateur et système .
Donc, par ordre de précision, Real est dans la fourchette, User est assez proche, et Sys est Des balles bien précises, en ce qui concerne l'unité centrale .
Exemple de sortie :
When you hear the beep, press Enter!
real 0m0.000s
user 0m0.000s
sys 0m0.000s
real 0m0.812s
user 0m0.000s
sys 0m0.000s
Dans l'exemple ci-dessus, le chronomètre de l'ordinateur indique que la latence est de 0,812 s entre le moment où j'ai entendu le bip et celui où j'ai appuyé sur la touche Entrée. La résolution de l'utilitaire de temps n'est pas assez granulaire pour mesurer le temps écoulé pour exécuter chaque commande, nous supposons donc que cela s'est produit "immédiatement".
Recommencer à le faire....
When you hear the beep, press Enter!
real 0m0.003s
user 0m0.001s
sys 0m0.002s
real 0m0.924s
user 0m0.001s
sys 0m0.002s
D'après celui-ci, nous pouvons voir qu'il y a eu des frais généraux qui ont fait que le processus a pris plus de temps. Si nous soustrayons les valeurs supérieures des valeurs inférieures, nous pouvons obtenir une estimation assez proche du temps écoulé.
Mais est-il exact assez de ?
Non. C'est pour cela que vous avez besoin d'un dispositif appelé un Audiomètre qui est une pièce construite spécialement pour matériel informatique qui mesure le temps entre les deux événements - le son et l'appui sur la touche. Il est beaucoup plus précis car il supprime les frais généraux de la gestion du CPU et vous donne un temps écoulé vraiment précis.