Thinkpad X200 & ralentissements Xorg

Suite à l’entrée dans mon cheptel de machines d’un fringant Thinkpad X200 dans le rôle de daily-PC, je l’ai naturellement muni d’un OS digne de ce nom : Arch Linux en 64 bits.

Si l’installation (quelque peu changée depuis les dernières versions de l’installeur dépourvues d’AIF – mais au final pas plus compliquée) s’est parfaitement déroulée et a débouché comme d’habitude sur un système rapide, simple et efficace, je suis tombé sur un petit os.

En effet, de manière récurrente, le déplacement du curseur à l’écran devenait extrèmement lent et saccadé (autant avec le trackpoint qu’avec une souris USB), X en devenant utilisable pendant une trentaine de secondes. Aucun processus utilisateur consommateur de ressources n’était détectable à première vue, et rien de particulier n’était visible dans le dmesg. Il m’a fallu une semaine de googlage intensif pour trouver le bug responsable de ce comportement, et un moyen de le résoudre.

L’observation avec top de processus kworker prenant plus de 20% de CPU lors des ralentissements m’a aiguillé et a fini par mener sur les pages suivantes :

http://souriguha.wordpress.com/2011/03/08/how-to-solve-problem-with-thinkpadkslowd-kworker-on-linux-kernel-2-35-2-36/ (oui ça parle de kernel 2.6.35 et 2.6.36, mais c’est toujours d’actualité en 3.6 apparemment)
http://forum.porteus.org/viewtopic.php?f=41&t=250
https://patchwork.kernel.org/patch/1546041/

Au final, une simple petite option à passer au module Intel DRM permet de rétablir un fonctionnement impeccable de la bestiole :

[dek@nostromo ~]$ cat /etc/modprobe.d/intel-workaround.conf 
options drm_kms_helper poll=0

Voilà, c’est pas grand chose mais si ça permet à quelqu’un d’éviter de perdre autant de temps que moi là-dessus, c’est toujours ça de gagné ;)

Arch Linux a 10 ans !

Allan McRae l’a signalé hier, ce week-end marquait les dix ans de la création d’Arch Linux  :)

En ce qui me concerne, j’ai réellement découvert la distribution en Novembre 2008, moment à partir duquel elle-ci est devenue ma favorite, aucune ne l’ayant remplacée depuis, cela fait trois ans et demi que je l’utilise avec bonheur dès que je le peux.
(par exemple, sur ce serveur depuis 4 mois)

J ai également depuis deux mois la grande satisfaction de l’utiliser comme desktop dans mon nouveau boulot (activité 100% GNU/Linux et nous avons le choix des armes, tant que nous sommes efficaces), encore une fois elle s’y prête admirablement bien.

Par ce billet, bon anniversaire Arch, et un immense chapeau bas à ses créateurs ainsi qu’à tous les contributeurs qui ont oeuvré pour que nous puissions profiter d’un tel OS. ;)

Dockstar et boot réseau : optimisation

Dans mon article précédent, j’expliquais comment booter le Seagate Dockstar sur Plugbox directement sur le réseau, par TFTP et NFS.

Si cela fonctionnait effectivement, il subsistait en l’état un petit problème de performances : en effet, tout content d’avoir réussi à mettre ça en place, je ne m’étais pas aperçu que le montage NFS se faisait par défaut en NFS v2, avec des paramètres pas terribles :D
Gênant …

Donc voici comment passer les paramètres pour que le montage NFS se fasse en v3 (j’ai essayé en v4 et ça ne passe pas, mais j’avais eu le même problème sur PC, NFS v4 change pas mal de choses) avec des réglages un peu plus au goût du jour.

Toujours avec blparam, il faut simplement modifier cette variable :

rootpath2=<chemin local complet sur le serveur NFS de votre système de fichiers Plugbox>,v3,rsize=32768,wsize=32768,soft,tcp

Évidemment, adaptez à vos besoins et à la configuration de votre serveur NFS.
Ce sont néanmoins les réglages que je recommande afin d’obtenir de bonnes performances et une relative garantie de l’intégrité des données.

Attention, comme pour la dernière fois, avant de valider définitivement ces réglages chez vous, réglez bien bootcmd comme ceci :

bootcmd=run bootcmd3

Comme ça, si ces réglages ne fonctionnent pas chez vous (ou si vous avez fait une coquille), le boot d’après se fera sur Pogoplug ou en USB, ça évite de bricker bêtement son DS ;)
(ce serait néanmoins réparable avec l’interface série, mais c’est embêtant)

Si le boot réseau fonctionne bien avec les nouveaux paramètres, vous pouvez le fixer définitivement :

bootcmd=run bootcmd_net

Voilà, c’est tout !

PS : ah si, un petit truc.
Un bench que j’ai fait pour comparer les performances disque du DockStar en NFSv2, NFSv3 100Mbps puis Gigabit, ainsi qu’avec une clé USB.
(pour la clé USB, chiffres de azrael24 sur HFR, merci ;) )
Benchmark Bonnie++, pas de procédure rigoureuse et donc aucune valeur scientifique, c’est purement indicatif mais assez cohérent.

Seagate Dockstar : booter Plugbox sur le réseau via TFTP/NFS

Depuis quelques jours, plusieurs forums GNU/Linux s’enflamment pour une petite bestiole toute de blanc vêtue : le Seagate Dockstar.

Je ne vais pas le présenter en détails, d’autres l’ont fait mieux que moi, je vous renvoie donc à l’excellent article du blog de Galipe.

Nerd devant l’éternel, j’ai évidemment craqué pour la chose :D (je vais même en recevoir un deuxième dans les prochains jours)
J’ai commencé à le bidouiller, en installant Debian dessus avec la méthode de Jeff Doozan, puis Plugbox (un fork d’Arch Linux dédié aux “plug computers” ARM).

Mais j’étais loin d’être satisfait de ces installations : en effet, elles se font avec une clé USB branchée sur le Dockstar, afin de contenir le système de fichiers.
Non seulement je trouvais un peu bête de condamner un port USB, mais la méthode était également loin d’être fiable : problèmes de “cold-boot”, boot qui ne se fait pas sans qu’on sache pourquoi, un peu la galère en définitive … :(

Avant même de recevoir la bête, j’avais dans ma tête l’idée de la faire booter sur le réseau : c’est idéal, cette machine est constamment branchée, ça laisse tous les ports USB libres et ça ne consomme rien de plus :)

Aujourd’hui, excédé par un énième foirage de boot par USB, j’ai décidé de creuser.
Une méthode avait déjà été publiée pour les SheevaPlug, extrêmement semblables : http://www.plugcomputer.org/plugwiki/index.php/Setting_up_TFTP_and_NFS

L’idée est de :

  • demander à uBoot (le bootloader du Dockstar) de charger un kernel Linux par TFTP
  • booter ce kernel en lui demandant de démarrer sur un partage NFS

Ayant plusieurs machines bootant sur le réseau par PXE, j’avais déjà des serveurs TFTP et NFS fonctionnels pour cet usage (je ne détaillerai pas non plus de ce côté, le web est rempli de documentation là-dessus), il ne me restait plus qu’à m’y mettre pour le Dockstar.

Après quelques tâtonnements (moins que je ne pensais), voici une procédure qui fonctionne au poil.
Je n’ai pas inventé grand chose, quasiment tout vient de la méthode pour SheevaPlug que j’ai linkée au dessus.

Commençons.

Les choses peuvent dépendre d’où vous en êtes dans le bidouillage du Dockstar, mais il suffit que vous ayez un accès SSH à la bestiole pour pouvoir commencer.

Nous allons débuter par l’installation d’un uBoot correct.

Installer un bon uBoot

Cette étape est facultative si vous avez déjà installé un uBoot alternatif pour pouvoir booter sur USB, mais cet uBoot-là est normalement meilleur.
(et c’est réversible)

Suivez les explications claires et détaillées de Jeff Doozan.

Créer l’arborescence d’un système Plugbox sur le serveur NFS

J’ai choisi d’utiliser Plugbox pour une raison simple : c’est une Arch Linux pour plug-computers, et compilée pour le CPU des SheevaPlug/Dockstar :D

Sur votre serveur, placez-vous donc dans un répertoire vide partagé par NFS, et exécutez les commandes suivantes en root :

wget http://plugapps.com/os/PlugboxLinux-1.0.1.tar.gz
wget http://sheeva.with-linux.com/sheeva/2.6.33/sheeva-2.6.33-Modules.tar.gz
tar -xzvf PlugboxLinux-1.0.1.tar.gz # This will take a long time
wget -O boot/uImage http://sheeva.with-linux.com/sheeva/2.6.33/sheeva-2.6.33-uImage
tar -xzvf sheeva-2.6.33-Modules.tar.gz
rm PlugboxLinux-1.0.1.tar.gz
rm sheeva-2.6.33-Modules.tar.gz

Elles sont issues du guide d’installation de Plugbox, disponible ici.
Vous obtiendrez un répertoire contenant l’arborescence complète de votre système Plugbox.
Notez précisément le chemin local complet vers celui-ci.

Placer l’image du kernel sur le serveur TFTP

Cette image est le fichier /boot/uImage du système que vous venez de créer.
Copiez-la dans le répertoire partagé par votre serveur TFTP.

Configurer uBoot soigneusement

La configuration de uBoot se fait grâce à l’utilitaire blparam, que l’on peut se procurer ici sous forme d’un binaire précompilé et exécutable directement depuis un système Pogoplug (celui d’origine sur le Dockstar), Debian ou Plugbox.

Ce binaire est téléchargeable à cette adresse : http://plugapps.com/os/pogoplug/uboot/blparam

Exécutez-le depuis votre Dockstar (dans le répertoire /tmp pour ne pas avoir à écrire sur la NAND, et n’oubliez pas le petit chmod +x qui va bien), vous allez obtenir la liste des paramètres actuels de votre Dockstar.

Par contre, il peut aussi servir à modifier ces paramètres : pour cela il faut l’exécuter de cette manière :

#./blparam 'paramètre=valeur'

On peut ainsi modifier les paramètres prédéfinis, mais également en rajouter et même en supprimer (en assignant une valeur nulle au paramètre).

Voici les paramètres à rajouter/modifier :

bootcmd_net=tftpboot 0x2000000 $(image_name);setenv bootargs $(console) $(bootargs_root2) nfsroot=$(serverip):$(rootpath2) ip=$(ipaddr):$(serverip)$(bootargs_end) $(mvNetConfig) $(mvPhoneConfig); bootm 0x2000000;
bootcmd3=setenv bootcmd run bootcmd2; saveenv; run bootcmd_net
image_name=<nom que vous avez donné à l'image kernel dans votre serveur TFTP>
bootargs_root2=root=/dev/nfs rw
serverip=<IP de votre serveur NFS/TFTP>
rootpath2=<chemin local complet jusqu'à votre système de fichiers Plugbox sur le serveur NFS : /var/blabla/... ou autre>
ipaddr=<IP que vous voulez donner à votre Dockstar>
bootargs_end=:::DB88FXX81:eth0:none
mvNetConfig=mv_net_config=(<adresse MAC du Dockstar, chaque valeur séparée par des : >,0:1:2:3),mtu=1500
mvPhoneConfig=mv_phone_config=dev0:fxs,dev1:fxs
arcNumber=2097
mainlineLinux=yes

Passez-les un à un via blparam.

Pour référence, voici la liste complète des paramètres du mien : http://ledek.free.fr/dl/blparam

(si vous êtes observateur, vous remarquerez que mon serveur TFTP et mon serveur NFS sont sur la même machine ; si les vôtres sont sur des machines différentes, il faudra séparer serverip en 2 paramètres distincts – pas difficile)

Enfin, nous allons passer à la dernière valeur, la plus importante : bootcmd.

Que j’explique un peu : dans les paramètres, j’ai fait en sorte de ne rien toucher d’autre, ce qui fait que pour l’instant, même avec toutes ces modifications, le Dockstar fonctionnera exactement comme avant.
Tout dépendra de ce que vous donnerez comme valeur à bootcmd.

Commencez par fixer :

bootcmd=run bootcmd3

Puis redémarrez.
Le Dockstar tentera de booter via TFTP/NFS, et si tout va bien vous pourrez vous logger sur votre nouveau système.

Mais quoi qu’il arrive, le boot suivant se fera sur la NAND, vous arriverez sur Pogoplug.
J’ai fait cela pour une raison très simple : si vous vous êtes trompé dans votre configuration et que le boot réseau échoue, cela va vous permettre de la corriger. (rebootez manuellement le Dockstar afin de revenir sur Pogoplug)
Si cela n’avait pas été le cas, il aurait été impossible de récupérer le Dockstar sans câble série.

Donc, si le boot réseau s’est bien déroulé la première fois, vous pouvez maintenant fixer définitivement le boot réseau :

bootcmd=run bootcmd_net

Désormais, le Dockstar bootera systématiquement sur le réseau avec les paramètres que vous avez fixés.

Inutile de préciser que toute cette étape est très sensible pour la santé de votre matériel, vérifiez à 2,3,4 fois que vous n’avez pas fait d’erreur.
Essayez également de comprendre ce que vous faites, une coquille de ma part est toujours possible, même si je me corrige.
Je ne pourrais être tenu responsable, blablabla… :D

Et maintenant,

Enjoy ;)

Quelques liens utiles :
Le topic sur HFR, les fous du Dockstar y sont rassemblés
:o
Les photos de mon Dockstar.
Installer Debian pour Dockstar sur clé USB, méthode de Jeff Doozan.