Bien le bonjour,
J'aurais besoin d'un petit coup de pouce pour répondre à une question à laquelle je ne trouve pas d'explications.
Dans le cadre d'un petit test de mesure de la différence de performance entre l'écriture de fichiers via tampon et l'écriture en synchronisation tampon/disque j'écris dans un fichier via une boucle et je récupère les ticks d'horloges via l'appel système
times et les résultats m'intriguent.
Voici le code (entre commentaires ce qui change entre les deux versions) :
#include <unistd.h>
#include <stdio.h>
#include <fcntl.h>
#include <sys/times.h>
#include <stdlib.h>
int main
()
{
char mem
[1]={'c'};
int d
,i
;
struct tms temps
;
d
= open
("ff", O_WRONLY
| O_CREAT
/*| O_SYNC*/, 0644);
if(d
== -1)
{
perror("Impossible d'ouvrir le fichier !");
exit(0);
}
for(i
=0; i
< 99999 /*999*/; ++i
)
{
write
(d
,mem
,1);
}
times
(&temps
);
printf("Temps utilisateur : %d\n"
"Temps noyau : %d\n"
"Temps fils utilisateur : %d\n"
"Temps fils noyau : %d\n",temps.
tms_utime,temps.
tms_stime,temps.
tms_cutime,temps.
tms_cstime);
close
(d
);
return 0;
}
Sur la sortie, on peut lire :
Cas 1 (sans O_SYNC et i < 99999) :
Temps utilisateur : 0
Temps noyau : 15
Temps fils utilisateur : 0
Temps fils noyau : 0
Cas 2 (avec O_SYNC et i < 999) :
Temps utilisateur : 0
Temps noyau : 4
Temps fils utilisateur : 0
Temps fils noyau : 0
Ce qui est très étrange, c'est que dans le premier cas, l'affichage est instantané pour 15 ticks d'horloge alors que dans le deuxième cas, l'affichage se fait après 3/4 secondes d'attente pour seulement 4 ticks d'horloge.
Mon cerveau perd actuellement beaucoup de son temps de calcul pour essayer de répondre à cette question et j'aimerais bien libérer la ressource pour la consacrer à d'autres activités.
Merci d'avance
Faut toujours regarder là où on ne va pas, car là où on va, on aura tout le temps de regarder quand on y sera.