News - Logiciels Libres

Utiliser le CPU d'une autre machine pour compresser en bzip2

Par , le dans Logiciels Libres - 3 Commentaires
Utiliser le CPU d'une autre machine pour compresser en bzip2
Bonjour à tous,

aujourd'hui, un article assez atypique, mais je voulais vous partager ça, car ça peut vous servir...

Le contexte :
Un serveur, nommé oxygen, avec un processeur Dual core Intel Core2 Duo E7500 cache: 3072 KB clock speeds: max: 2933 MHz
Un PC Portable nommé superlinux avec un processeur Quad core Intel Core i7-3610QM (-HT-MCP-) cache: 6144 KB clock speeds: max: 3300 MHz

J'ai un fichier sur le serveur oxygen de 6Go à compresser... en bzip2.

Code BASH :
adrien@oxygen ~/tmp $ ls -lh
total 6.0G
-rw------- 1 adrien adrien 6.0G  8 févr. 20:46 BTRFS.vdi


Pourquoi bzip2 ? C'est le meilleur en ratio temps de compression/taux de compression. GZip compresse plus vite mais moins. XZ (LZMA) plus mais plus long et consomme beaucoup plus de mémoire.

Sur le serveur, si je compresse ce fichier, cela dire 5 minutes et 7 secondes

Code BASH :
adrien@oxygen ~/tmp $ time bzip2 -9kc BTRFS.vdi > test-serveur.bz2
real    5m7.397s
user    8m47.227s
sys    0m10.177s


Maintenant, on va faire mieux... On va utiliser le CPU du PC portable pour compresser le fichier sur le serveur.
Comment procède t-on ? Il faut SSH sur le serveur et sshfs sur le PC Portable.

On monte le dossier de travail du serveur (ici c'était dans /home/adrien/tmp du serveur) dans un point de montage local sur le PC portable :
Code BASH :
4 [17:47:57] adrien@superlinux: ~  $ cd  tmp
5 [17:47:58] adrien@superlinux: ~/tmp  $ mkdir oxygen
6 [17:48:01] adrien@superlinux: ~/tmp  $ sshfs adrien@10.21.21.253:/home/adrien/tmp/ oxygen


Quand on liste le dossier oxygen, on retrouve bien les fichiers du serveur :
Code BASH :
7 [17:48:34] adrien@superlinux: ~/tmp  $ ls oxygen/
BTRFS.vdi  test-serveur.bz2


Maintenant, on se met dans le dossier sur le PC portable et on lance la même commande :
Code BASH :
8 [17:48:39] adrien@superlinux: ~/tmp  $ cd oxygen/
9 [17:48:59] adrien@superlinux: ~/tmp/oxygen  $ time bzip2 -9kc BTRFS.vdi > test-pc-portable.bz2
real    4m52.461s
user    9m37.458s
sys    0m6.823s


Ce qu'il faut comprendre, c'est que la commande est lancée sur le PC portable, donc c'est le bzip2 du portable qui compresse sur le CPU du portable (le quadcore).
Le CPU du serveur et du portable travaillent pour exécuter ssh et sshfs, et le réseau est très sollicité entre les 2 machines. (Il y a un flux serveur->portable de 6Go du fichier non compressé et un flux portable->serveur de 2,1Go au total de fichier compressé.)
Le réseau doit être bon entre les deux machines évidemment, sinon, on perd tout l’intérêt.

Dans les 2 cas précédents, la lecture et l'écriture se fait sur le disque du serveur.

Si c'est pour compresser, archiver sur notre PC portable ce sera encore plus performant car on n'aura sur le serveur que de la lecture (sur le disque) et qu'un débit réseau allant du serveur au pc portable (donc plus bidirectionnel). Sur le PC potable, on aura l'écriture :

Code BASH :
10 [17:54:05] adrien@superlinux: ~/tmp/oxygen  $ time bzip2 -9kc BTRFS.vdi > ../test-pc-portable.bz2
real    3m24.589s
user    10m11.874s
sys    0m6.900s


On est à 3 minutes 24 secondes.

Il faudrait tester dans plusieurs cas, mais ici, je vous partage l'astuce, des fois que ça vous serve ;)

A noter que SSHFS est intéressant si vous développez avec des fichiers hébergés à distance, avec des outils situés sur votre poste de travail. Et le tout dans un canal chiffré. C'est beaucoup plus simple que le FTP :)

Je vous rappelle mon article sur le site : Autour du protocole SSH, utiliser le canal de communication

Voyez en vidéo la démo :

N'hésitez pas à sélectionner la qualité HD en 720p ou 1080p !



Précisions sur la compression en parallèle :

N'hésitez pas à sélectionner la qualité HD en 720p ou 1080p !