2x plus rapide à 100% de charge

J’aime mon laptop. Pas cher, facile à remplacer, un peu de RAM, Linux, quad-cores, 64 bits. Bref, il me permet de simuler beaucoup de comportements des serveurs et j’ai 5 navigateurs web différents sans compter wget et curl

Alors quand, pour un bête test de montée en charge, j’obtiens la courbe en rouge ci-dessous, j’avoue que je reste perplexe

Par quel miracle, est-il 2x plus rapide à 100% de charge qu’à 50% ?

Simplifier

Mon obsession compulsive, face à une situation que je ne comprends pas consiste à la simplifier. Ca permet d’éliminer beaucoup de fausses pistes. Ca facilite la discussion et la capacité à reproduire sur d’autres environnements. Ca me permet de tourner en rond sur le problème…

Dans mon cas, j’ai réduit le test à une seule commande :

time for i in {1..10000}; do j=`date +s`; done
  • Quand je l’exécute seule, j’obtiens :
real    0m25.796s
user 0m0.604s
sys 0m3.492s
  • Quand j’en exécute 4 en simultané, j’obtiens :
real    0m15.818s
user    0m0.428s
sys 0m2.132s
  • Quand j’en exécute 8 en simultané, j’obtiens :
real    0m31.576s
user 0m0.452s
sys 0m2.464s

L’explication la plus simple…

L’informatique n’est pas de l’astrophysique. Le principe du Rasoir d’Ockham s’applique le plus souvent. Par quel effet miraculeux de chauffe, cache ou piggyback passer de 10000 exécutions à 40000 permettrait de diminuer le temps d’exécution par 2 ? Pourquoi le temps utilisateur diminue lui aussi ? Et si la charge accélère mon laptop ?

Hors la vitesse de traitement de l’ordinateur dépend pour une grande partie de sa fréquence. Et si la fréquence variait avec la charge ?

  • avec 1 exécution en cours
grep "cpu MHz" /proc/cpuinfo | head -n 1
cpu MHz        : 931.000
  •  avec 4 exécution en cours
grep "cpu MHz" /proc/cpuinfo | head -n 1
cpu MHz        : 2527.000

#CQFD

La configuration de ma s… de m… de laptop est complètement pourrie !

Conclusion

Quel problème cela pose-t-il ? Aucun probablement, surtout si ça nous permet à tous de sauver la planète… Quoiqu’à regarder ce cas, certes très particulier :

  • L’adaptation de la fréquence CPU n’impacte pas uniquement la capacité à traiter de la charge mais aussi les temps de réponse
  • Le seuil de déclenchement montre que dans certaines situations, un ordinateur est 2x plus rapide à 100% de charge qu’à 25% de charge
  • On ne peut pas comparer temps CPU et temps CPU, même sur la même machine

Bon, tout ça c’est ma faute ! Je n’ai pas fait attention à ce point la dernière fois que j’ai installé Ubuntu mais à y réflechir, je ne suis pas sûr qu’il m’ait posé la question. J’ai ajouté « CPU Frequency Scaling Monitor » sur mon bureau ce qui me permet de garder un comportement économe et de pouvoir exécuter mes tests dans des conditions pertinentes :

Maintenant, je décide de mes performances ! A ce propos, regardez bien ce test, il est beaucoup plus intéressant qu’il n’y parait…