Tartalom
Bevezető
Ha gyakran tömörítünk fájlokat, könyvtárakat, akkor fontos lehet a tömörítés sebessége is. Az elterjedtebb tömörítő programok sajnos csak egy szálon dolgoznak, így nem tudják kihasználni a mai modern, többmagos processzorokat. Ebben a leírásban megismerhetjük a pigz programot, amellyel több szálon futtathatjuk a tömörítési folyamatot, ezáltal kihasználhatjuk az összes processzormagot.
A pigz tömörítőprogram
A pigz (parallel implementation of gzip) egy párhuzamos fejlesztése a gzip-nek, ami teljes mértékben helyettesíteni tudja azt, annyi extrával, hogy minden processzormagon indít egy szálat, így jóval nagyobb sebességgel képes betömöríteni a fájlokat, könyvtárakat.
Telepítése
A program forráskódja letölthető a készítő oldaláról, de szerencsére a Debian csomagtárában is megtalálható, így telepíthető a szokásos módon:
apt-get install pigz
A pigz parancs kapcsolói tartalmazzák a gzip kapcsolóit is, így használata a gzip-nél megszokott módon történik.
Tömörítés
Fájl tömörítése/becsomagolása a legegyszerűbb példával:
pigz <fájlnév>
A parancs ugyanúgy működik, mint a gzip, alapesetben eltávolítja a forrásfájlt.
Másik példa, néhány kapcsolóval:
pigz -kv11f <fájl>
A kapcsolók itt a következők:
- k: keep - megtartja a forrásfájlt (ugyanúgy, mint a gzipben)
- v: bőbeszédű mód. Ez is ugyanúgy működik.
- 11: Maximális tömörítés. A gzipnél csak 1-9-ig lehet állítani a tömörítés mértékét, itt van még egy 11-es szint is külön.
- f: force mód: Felülírja a kimeneti fájlt, ha az már létezik. A kapcsoló nélkül ilyenkor rákérdez.
A tömörítés már alapértelmezetten is több szálon megy. Ha nem rendelkezünk másképp, akkor a program az érzékelt processzormagok számának megfelelő mennyiségű szálon indítja el a tömörítést. De ha kevesebb szálon szeretnénk futtatni a csomagolást, akkor ezt is megadhatjuk neki:
pigz -p <x> <fájlnév>
Ahol az x érték jelöli az indítani kívánt folyamatok mennyiségét.
És még egy példa egy alkönyvtár rekurzív becsomagolására:
pigz -r <alkönyvtár>
Kicsomagolás
A kicsomagolás is ugyanúgy történik, mint a gzip esetében:
pigz -d <archív fájl>
Tesztek
Ebben a részben elvégzünk pár időmérést, összehasonlítva a gzip programmal.
Próbafájl létrehozása
Létrehozunk egy teszt fájlt, majd ezeken végezzük el a sebesség teszteket a gzip és a pigz programokkal.
Töltsünk fel egy fájlt 500 MB-nyi véletlenszerű adattal:
head -c 500M </dev/urandom >tesztfajl
Ekkor létrejön egy 524 288 000 byte méretű fájl, amiben véletlenszerű byte-ok sorakoznak. Ez elegendő méret ahhoz, hogy a tömörítőprogramok működési sebességeit mérhessük rajta.
Itt most csak a tömörítések sebességeit mérjük, mivel egy véletlenszerűen feltöltött fájl nem igazán tömöríthető, valamint mindkét program a gzip tömörítési algoritmust használja, tehát itt nincs jelentősége a tömörítési aránynak.
Időmérések
Most becsomagoljuk a fájlt először gzip parancscsal, megtartva az eredeti fájlt, és az időt is mérjük közben, utána pedig a pigz paranccsal is betömörítjük ugyanígy. A parancsok tehát a következők:
time gzip -kf tesztfajl
time pigz -kf tesztfajl
Az eredmények pedig önmagukért beszélnek:
gzip: 6,748 másodperc, pigz pedig 4,070 másodperc.
A gépemben van egy I7-3770 CPU, ami 4 fizikai maggal rendelkezik. Ez HT-vel ugyan 8 magot jelent, de itt a virtuális magok úgy látszik nem dobnak bele sokat, tehát körülbelül negyedannyi idő alatt végzett a pigz. Ez nagyjából annyiszor rövidebb idő, mint amennyi fizikai mag van a processzoromban.
Nézzünk még egy próbát, most a 9-es tömörítési szintet használva, hogy jobban megdolgoztassuk a programokat. A parancsok tehát a következők:
time gzip -kf9 tesztfajl
time pigz -kf9 tesztfajl
Itt kicsit nagyobb lett az eltérés:
gzip: 18,226 mp, pigz: 3,887 mp.
Tehát itt arányaiban még jobban teljesített a pigz.
CPU használat
A lényeget még nem vizsgáltuk, hogy mindez a háttérben hogyan dolgoztatja meg a processzort. Ezt a htop nevű program segítségével nézhetjük meg a legkényelmesebben.
Először tehát jöjjön a gzip a 9-es tömörítési szinttel:
time gzip -kf9 tesztfajl
És a tömörítés közben a másik fülön pedig a htop:
Itt nincs is semmi különös, a folyamatok listájában legfelül látható a gzip szál, amint éppen 99,2%-on tolja a tömörítést. A felső részen is látható, hogy csak a 3. mag van meghajtva igazából.
Most lássuk ugyanezt a pigz-vel:
time pigz -kf9 tesztfajl
Itt pedig látható, hogy minden mag dolgozik. Persze nehéz elkapni a jó pillanatot, mert váltakoznak a százalékok, és a processzek állapotai is, de itt most látszik, hogy van egy fő szál, maga a parancs, és van neki 8 másik al-folyamata.
Pigz használata a tar programmal
Ha sok alkönyvtár, illetve fájl van, amit rekurzívan kell becsomagolnunk egyetlen fájlba, akkor ezt rendszerint a tar paranccsal végezzük.
Egy teljesen hétköznapi példa több fájl vagy könyvtár becsomagolásra:
tar -czf kimenet.tgz <bemeneti fájlok, könyvtárak>
Ebben a példában a z kapcsolóval állítjuk be, hogy a tar gzipet használjon a tömörítésekhez. Ez a tar használatának a megszokott módja, viszont ez is csak egy szálon működik. Lehetőség van azonban más tömörítőprogramot is megadni a tar-nak a -I kapcsolóval. Az itt megadható tömörítőprogramoknál csak annyi a feltétel, hogy tudniuk kell használniuk a -d kapcsolót (manual oldal alapján).
Ennek megfelelően tehát használhatjuk a gzip helyett a pigz programot is a tar csomagolásoknál is:
tar -I pigz -cf kimenet.tgz <bemeneti fájlok, könyvtárak>
Így már a tar csomagolás is több szálon zajlik, amivel sok fájl, alkönyvtár esetén rengeteg időt spórolhatunk meg.
Konklúzió
Láthattuk tehát a pigz program hatékonyságát, aminek ha megszokjuk a használatát a mindennapokban, akkor jelentősen felgyorsíthatjuk vele például a szerverünkön végzett adatmentési munkáinkat.
- A hozzászóláshoz regisztráció és bejelentkezés szükséges
- 392 megtekintés