Linux.general : Swapper dans la RAM d'un autre ordinateur
Posté par fredoche () le 18 février 2008Bonjour,
Je viens de me procurer un NSLU2. Il s'agit d'une boite fonctionnant avec un processeur ARM à 200mhz, et disposant de 2 ports USB ainsi que d'un port ethernet.
Bidouilleur dans l'âme, j'ai consulté les sites de fan pour remplacer le firmware d'origine un peu pourri par une debian sur une clé USB qui lui est adjointe. Tout allait bien jusqu'au moment ou j'ai voulu faire fonctionner des programmes un peu gourmand en RAM. La bestiole ne disposant que de 32Mo de RAM, elle swappe comme une folle dans la mémoire flash, et les perfs se vautrent.
Mon idée, c'est de swapper sur un autre ordi du réseau.
J'ai étudié plusieurs techniques pour mettre ça en place.
Tout d'abord, j'ai mis en place un partage NFS en lecture/écriture, y ai déposé un fichier de 100mo, et indiqué au nslu2 qu'il pouvait swapper dessus (mkswap -c ou un truc comme ça).
Résultat un peu pourri, autant adjoindre un disque sur directement au NSLU2; si on ajoute l'overhead de NFS, on se doute bien que c'est naze.
Ensuite, j'ai regardé du côté de AoE, ATA over ethernet, un truc assez sympa pour partager des périphériques de bloc sur le réseau si ces derniers fonctionnent en ATA, comme un DD en SATA.
Dans le même genre il y a aussi ndb (-client et -server), si jamais votre périphérique fonctionne pas en ATA (ce qui est peut être le cas des clés usb, à vérifier).
Bon, c'est très bien toussa, mavie, etc... mais le top du top, ça serait
1- de créer un block device virtuel de 100Mo en RAM,
2- le formater avec mkswap
3- le partager avec nbd.
Ami lecteurs, savez vous comment procéder pour l'étape 1 ?
Suis-je complètement à côté de la plaque ?
Question bonus: Si je formate la partition partagée avec GFS, est ce que du coup tous les ordis du réseau ont magiquement un accès lecture écriture simple et fiable?
> Lire le message (29 commentaires, moyenne: 1,2).
Vous avez demandé le commentaire #905596.



re
1- de créer un block device virtuel de 100Mo en RAM,
[...]
Ami lecteurs, savez vous comment procéder pour l'étape 1 ?
Si je ne m'abuse, cela s'appelle un ramdisk.
Tu définies la taille de ce ramdisk en option au kernel à coup de ramdisk_size= puis ensuite, tu accèdes à /dev/ramX.
[^]Re: re
Merci, tu sais si on peut faire ce genre de choses sans avoir à redémarrer ?
[^]Re: re
Comme ça aucune idée ... ça doit être documenté dans les sources du noyaux ... Essaye donc de fouiller dans /usr/src/linux/Documentation ... (j'ai pas les sources du noyau sur ma bécane du boulot :/)
[^]Re: re
Hum un ramdisk de 100Mo sur une machine avec 32Mo et pour
en plus mettre de swap dessus .... je crois pas non.
Quand à l'utilisation de ndb pour faire du swap:
>Current state: It currently works. Network block device seems to be
>pretty stable. It was originaly thought that it is impossible to swap
>over TCP. This turned out not to be true, though the patch required
>to make it safe has not been forward-ported to any reasonably
>recent kernel.
A priori c'est pas rentré en mainline.
Il [e2fsck] a bien démarré, mais il m'a rendu la main aussitot en me disant "houlala, c'est pas beau à voir votre truc, je préfèrerai que vous teniez vous même la tronçonneuse" (traduction libre)
[^]Re: re
J'envisageai bien sûr, comme le titre du thread le suggérait, de créer le block de 100Mo sur un ordi normal, du genre ceux qui ont 1Go de RAM, pour ensuite le partager avec nbd.
Sinon, j'ai déja été sur la page de nbd, que j'ai lu attentivement, et je suis prêt a risquer un kernel panic, je vais pas en mourir.
J'ajoute, sans en être vraiment sur, qu'étant donné les bonnes perfs des réseaux gigabit, je serais pas surpris qu'il soit plus avantageux de swapper dans la ram d'un autre ordi du réseau que sur un disque dur 5400tr/min branché en usb.
Mais si quelqu'un sait comment créer un ramdisk dynamiquement, je suis toujours preneur.
[^]Re: re
si j'en crois http://www.vanemery.com/Linux/Ramdisk/ramdisk.html
Ramdisk semble être un module ...
[root]# dmesg | grep RAMDISK
RAMDISK driver initialized: 16 RAM disks of 16000K size 1024 blocksize
RAMDISK: Compressed image found at block 0
un truc du style insmod ramfs ou modprobe ramfs ne ferait-il pas l'affaire ?
[^]Re: re
Cela dépend de la configuration du noyau.
Si le pilote du ramdisk a été compilé en module, il est possible de décharger ce module puis de le charger en lui passant des paramètres. Voir
le fichier Documentation/kernel-parameters.txt dans les sources du noyau
et
http://casteyde.christian.free.fr/system/linux/guide/online/(...)
Par contre, je ne pense pas qu'il soit possible de modifier la configuration d'un ramkdisk après le boot si le pilote a été compilé en dur. Pas testé : mon noyau a été compilé sans ce pilote.
P.S. Les développeurs du noyau considèrent le ramdisk obsolète et préfèrent tmpfs.
Pour créer un fichier de swap en ram dans le fichier /tmp/fredoche en utilisant tmpfs :
# mount -t tmpfs tmpfs /mnt
# dd if=:dev/zero of=/mnt/fredoche bs=1M count=100
# mkswap /mnt/fredoche
[^]Re: re
quel est l'intéret de swapper en RAM mis à part fournir un exemple pour utilisation de la commande ? :D
Pace que quand je vois le nombre de cat | rep ou cat | awk .... alors qu'en général on utilise ça à titre d'exemple, je crois qu'on va bientot avoir du monde qui va swapper en ram ...
[^]Re: re
Le coup du tmpfs est stylé, mais on est encore loin d'un périph de bloc. On peut pas le formater en ext2, ou le partager avec nbd pour éviter de passer par NFS.
Ramdisk a vraiment l'air de faire le job, mais au prix d'un reboot.
Je ne trouve pas de procédure pour créer un ramdisk dynamiquement sur le net, est ce que l'un de vous à une idée?
[^]Re: re
Encore une des raisons qui me font préférer NetBSD à Linux :D
Sous NetBSD, on peut ....
[^]Re: re
Et on fait comment? Merci
[^]Re: re
RTFM !! :)
[^]Re: re
Plus sérieusement, je me suis un peu vite avancé .... faut effectivement l'activer dans le noyau et rebooter. Mais comme ces temps-ci je compile mon système entièrement et que j'ai activé ce paramètre dans le fichier de config, j'ai ublié ce détail.