Récemment, je viens d’installer la dernière Ubuntu Lucid Lynx 9.10.
J’ai été surpris par pas mal d’évolution, une rapidité au démarrage incroyable, un KDE4 enfin stable et une prise en charge évoluée des périphériques. Mais j’ai été aussi étonné par le load average très conséquent sur un portable…
Ma configuration est assez simple:
- Portable Samsung
- Processeur Intel Core2 Duo T7100 cadencé à 1.80GHz
- 2 Go de RAM
- NVidia GeForce 8400M G
- Aucune application ne venant perturber le système
Sans Xorg
Le système pouvait loader jusqu’à 0.70 sans aucune raison: la loose quoi.
Sous Xorg
C’est pire, un load approchant les 2.0 sans rien d’actif
C’est pas possible, avec une Ubuntu 8.04, mon système ne loadait pas autant. Que s’est-il passé entre les deux releases ? Et sur les forums, impossible de trouver une put#%$* d’informations sur ce load average aussi haut.
La solution ?
Après une soirée rhum-banana, drogues et prostiputes, j’ai eu une illumination: et si cela venant du nouveau scheduler ? En effet – si ma mémoire est bonne – il y a eu des petites frictions entre kernel hackers sur les nouveaux schedulers. Hop hop, il est temps de tester cette possible voie.
Alors on a soit la méthode bourrine qui consiste a recompiler son kernel Linux avec un nouveau scheduler. Mais bon, si on se plante, va falloir refaire à chaque fois.
Ou bien on va faire un gros bisous au paquetage « linux-image-rt » disponible dans le repository Ubuntu.
Si drivers nvidia proprio: $ wget http://us.download.nvidia.com/XFree86/Linux-x86/195.36.15/NVIDIA-Linux-x86-195.36.15-pkg1.run -O ~/NVIDIA-Linux-x86-195.36.15-pkg1.run $ apt-get install linux-image-rt $ vi /etc/default/grub GRUB_DEFAULT=1 #GRUB_HIDDEN_TIMEOUT=0 GRUB_HIDDEN_TIMEOUT_QUIET=false $ update-grub2
On reboote le tout et sur le prompt grub, on selectionne la version « RT«
Avec les drivers Nvidia
Là, le X devrait planter car pas de drivers nvidia. Sélectionnez « Passer en mode console ».
Sous le terminal, on lance la procédure d’installation du drivers nvidia (sudo sh ./NVIDIA-Linux-x86-195.36.15-pkg1.run )
Avec les drivers nouveau
Rien a faire
On finit l’optimisation en modification les options du schedulers directement:
echo 100000 > /proc/sys/kernel/sched_min_granularity_ns echo 1000 > /proc/sys/kernel/sched_wakeup_granularity_ns
Selon Ingo Molnar, kernel hacker sur les schedulers, pour un desktop, il faut que ces chiffres soient aussi bas que possible. ( a contrario, un server doit avoir des chiffres plus élevés)
Si vous voulez que ces options soient fixées, éditez le /etc/sysctl.conf
vm.swappiness = 0 kernel.sched_min_granularity_ns = 100000 kernel.sched_wakeup_granularity_ns = 1000
Pour vm.swappiness, reportez-vous à la documentation. Chez moi, cela améliore un peu les performances, mais peut-être que chez vous cela n’aura pas les mêmes effets.
Tip #1:
Modifiez le /proc/sys/kernel/sched_time_avg. Suivant les paramètres, chez moi, j’arrive à des performances améliorées
Tip #2:
J’ai été amené a modifier le lancement kernel en mettant l’option « mem=2048M » sur la ligne GRUB_CMDLINE_LINUX_DEFAULT dans le fichier /etc/default/grub (n’oubliez pas le petit « update-grub2″). Notez que chez mon cobaye (pour valider), cela n’a eu aucune influence.
Tip #3:
N’oubliez pas de vous mettre en performance au niveau du « scaling governor » sur vos processeurs:
echo "performance" > /sys/devices/system/cpu/cpu0/cpufreq/scaling_governor echo "performance" > /sys/devices/system/cpu/cpu1/cpufreq/scaling_governor
Résultat ?
Mon load average est redescendu fortement. Maintenant avec un VLC en activité, un navigateur, mon lecteur de flux RSS, et plein d’autres stuffs, le load average est entre le 0.02 et 0.20. Je suis même tombé à un load average à 0.00 (avec VLC !). Et surtout: le ventilo ne crache plus ses poumons … ouf!
Cependant, le load average monte assez rapidement pour des raisons parfois étranges. Je ne doute pas que des optimisations doivent être encore effectuées. Que ce soit au niveau kernel (recompilations, changements paramètres, …), modifications paramètres sysfs, modifications paramètres procfs, etc…). Je trouve regrettable ce genre de problème pour une distribution comme Ubuntu. Et je suis encore plus étonné que personne ne soit tombé dessus encore aujourd’hui.
Au passage, si vous trouvez de nouvelles optimisations en ajout, faites péter ;-)
Liens divers: