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…