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.
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
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 :
Quand on liste le dossier oxygen, on retrouve bien les fichiers du serveur :
Maintenant, on se met dans le dossier sur le PC portable et on lance la même commande :
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 :
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 :
Précisions sur la compression en parallèle :
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 !