Bonjour,
Je mesure les durées d'exécution d'une tâche de fond exécutée dans un thread dédié.
Cette tâche consiste à établir la liste de joueurs et de leur résultat.
Je constate plusieurs choses curieuses, dont une bizarre.
Bien sûr le temps d'exécution de la tâche dépend du nombre de joueurs et est linéairement croissante avec le nombre de joueurs.
la première chose curieuse, est que la pente de la droite obtenue change à un moment donné. je suppose que pendant un certain temps, les données sont toutes contenues dans la mémoire cache, mais qu'après il faut aller en chercher dans la mémoire générale ce qui allonge en proportion les calculs. Est-ce correct?
La deuxième chose curieuse, est que si j'arrête le serveur et le redémarre, le nombre de joueurs restant le même, la durée de calcul baisse sensiblement: meilleure utilisation de la mémoire cache?
Enfin et c'est là la chose bizarre, c'est que ces durées qui s'étalent de quelques microsecondes au début à quelques millisecondes
peuvent parfois sauter à des durées beaucoup plus importantes et cela par multiple de 50 millisecondes. Voir l'histogramme:
et leur répartition dans le temps:
On voit que cela peut se produire alors qu'il y a encore peu de joueurs mais que bien sûr le phénomène devient plus fréquent et plus remarquable au fur et à mesure que le nombre des joueurs augmente.
J'ai bien essayé de modifier la priorité du thread en lui affectant la plus haute possible (tpTimeCritical) mais cela n'a rien changé.
Je ne pense pas que ceci ait une incidence sur le fonctionnement du serveur, mais cela m'intrigue beaucoup.
Pour info, le processeur est un core I7 3770 et l'OS est W7.
Merci à celui qui pourrait avancer une explication et encore plus un remède!