J'essaie de mesurer le temps d'exécution du benchmark FIO. Je suis, actuellement, le fais envelopper l'appel FIO entre gettimeofday():FIO runtime différent de gettimeofday()
gettimeofday(&startFioFix, NULL);
FILE* process = popen("fio --name=randwrite --ioengine=posixaio rw=randwrite --size=100M --direct=1 --thread=1 --bs=4K", "r");
gettimeofday(&doneFioFix, NULL);
et calculer le temps écoulé comme:
double tstart = startFioFix.tv_sec + startFioFix.tv_usec/1000000.;
double tend = doneFioFix.tv_sec + doneFioFix.tv_usec/1000000.;
double telapsed = (tend - tstart);
Maintenant, la question (s) est
le temps telapsed est différent ( plus grand) que le runt par la sortie FIO. Pouvez-vous s'il vous plaît m'aider à comprendre pourquoi? comme le fait peut être vu dans la sortie FIO:
randwrite: (g=0): rw=randwrite, bs=4K-4K/4K-4K/4K-4K, ioengine=posixaio, iodepth=1 fio-2.2.8 Starting 1 thread randwrite: (groupid=0, jobs=1): err= 0: pid=3862: Tue Nov 1 18:07:50 2016 write: io=102400KB, bw=91674KB/s, iops=22918, runt= 1117msec ...
et telapsed est:
telapsed: 1.76088 seconds
ce qui est le temps réel pris par l'exécution FIO: a) avorton donnée par FIO, ou b) le temps écoulé par getttimeofday()
- Comment mesure-t-FIO son avorton? (Probablement, cette question liée à 1.)
PS: J'ai essayé de remplacer le gettimeofday (avec std :: :: high_resolution_clock :: chrono maintenant()), mais il se comporte également les mêmes (par même , Je veux dire, il donne également plus de temps écoulé que runt)
Merci d'avance, pour votre temps et votre aide.