Zstandard, a zstd tömörítő használata

Ma újra egy tömörítő programmal foglalkozom. A neve ZSTD és csak azért elő, mert olvastam róla egy cikket, és még soha nem is hallottam róla… Így körbejárjuk mit tud és milyen eredményeket ad. A Zstandard zstd néven fut, egy viszonylag új tömörítési eszköz, amelynek premierje 2015-ben volt. A mérnökök a Facebook-on hozták létre, hogy javítsák a régóta működő eszközök, például a gzip sebességét és tömörítési arányát. Gyorsan szabványos tömörítő eszközzé vált számos Linux disztribúcióban, ezért most itt az alkalom, hogy megtanuljuk használni. Nagyjából ennyi volt a bevezetés a cikkben, és felkeltette az érdeklődésemet.

Zstd tömörítő telepítése

A Zstandard alapértelmezés szerint nem szerepel minden Linux disztribúcióban. Ha a rendszeredre még nincs telepítve, telepítéséhez használd a megszokott parancsokat. Általában a zstd néven lesz, és ahogy a főbb csomagkezelési módokat nézegettem nagy gondot nem okozhat, hiszen megtalálható a tárolókban.

Ezen az oldalon sok teszt, és nagyon hasznos dolog lesz elérhető, így mindenképp nézz rá! https://facebook.github.io/zstd/

Bár a fenti oldalon is vannak tesztek, összehasonlítások, de ez nekem nem felelnek meg. Miért? Mert eltérő gépen, eltérő fájlokon nagyon eltérhetnek az eredmények. Így magát az ismerkedést kiegészítem egy teszt eredmény beillesztésével is.

Alap tömörítés

A zstd legegyszerűbb formában történő használatához, az összes alapértelmezett beállítással kezdünk. Ami a napi szintű rutin, van egy tömörítő és be akarunk gyorsan tömöríteni valamit, de sem az idő, sem pedig a tömörítés mértéke nem érdekes. Nulla vacakolás, csak legyen betömörítve.

A szintaktika egyszerű: a zstd parancsot, meg a tömöríteni kívánt fájl nevét kell megadni. Ideális, nem kell a kapcsolókra emlékezni.…

Ez új fájlt készít a fájlból, tömörítve és .zst kiterjesztéssel.

Én egy nagy könyvtárat tar-oltam be, ami így egy nagy, de tömörítés nélküli fájl lett. Abban nem nagy értelem van, hogy pár kilós txt.-et tömörítsek tesztnek, és azt számolgassam, hogy pár bájt eltérés van és ezred másodperc a beállítok közt…

Maga a könyvtár, amit használtam az egy tar összeállításához minden elképzelhetőt tartalmaz, videó, hang, ogg, mp3, erősen tömörített fájl, sima txt, doksik, és képek, azaz ha neked csak txt-k vannak amiket jól lehet tömöríteni, akkor nagyon más eredményt kapsz, ha meg erős, modern tömörítésű videóid, akkor is nagyon-nagyon más eredményed lesz.

A méréshez standard time parancsot használtam, de ez nem fog a parancsok előtt látszani, kezdőket megzavarhatja, hogy azt is be kell-e gépelni.

zstd Mentes.tar

Mentes.tar : 57.04% (3511541760 => 2003029778 bytes, Mentes.tar.zst)
user=3,50s system=1,41s cpu=154% total=3,168

Méretben kb. a múltkori környékén van, az idő meglepett, mert elkezdtem írogatni pár mondatot ide, és már kész is volt.

Amit tudni érdemes, intelligensen nem törli az eredeti fájlt.

Ha több fájlt akar egybe tömöríteni, akkor

zstd példa1.txt példa2.txt példa3.txt

illetve:

zstd példa *.txt

A metódust már ismerjük, ahogy látni nem egy agyonbonyolított az alap használata.

Két érdemi ismérve van egy tömörítőnek: gyorsaság és a méret. Ez a zstd nagyon intelligensen kezeli ezeket, be lehet állítani egyszerűen.

Gyors tömörítés

Ez a sebességre helyezi a hangsúlyt, és a tömörítési arányt háttérbe szorítja. Ugyanezt a fájlt most tömörítsük össze a „gyors” megoldással.

zstd --fast Mentes.tar

Mentes.tar : 57.62% (3511541760 => 2023425695 bytes, Mentes.tar.zst)
user=1,65s system=1,21s cpu=161% total=1,771

Gyorsabb lett? Volt durva méret növekedés? Hm… igencsak kellemes meglepetés volt a gyorsasága.

Amit rögvest észleltem, hogy az előbbi tömörítvényt nem töröltem ki és intelligensen rákérdezett, hogy felülírja azt?

De a méret is számít!!

A spektrum másik végén utasíthatjuk a zstd-t nagyobb tömörítés használatára, ami egy “kicsit” tovább fogja tartani a folyamatot. Ezt írja a cikk amit olvastam, de a kicsit tovább tart elég tág fogalom, így teszteljük ezt is le.

A Zstandard alapértelmezett tömörítési szintje 3. A --fasts a tömörítési szintet 1-re csökkenti. Bármely tömörítési szintet megadhatunk, egészen 19-ig. Ha már fontos a méret, és az idő nem, akkor legyen a legerősebb tömörítés, és nézzük meg, hogy mi változik:

zstd -19 Mentes.tar

Mentes.tar : 56.38% (3511541760 => 1979928090 bytes, Mentes.tar.zst)
user=431,72s system=2,29s cpu=100% total=7:11,62

Ne feledd! Ez az alapértelmezett legerősebb tömörítés, így szemléld az adatokat! A lassulás drasztikus, így mindenképp a saját igényeidhez teszteld le. Sima txt, doc és egyébnél nagyobb a javulás méretben, de ha nincs komolyabb oka a nagyon erős tömörítésnek, nem feltétlen érdemes ennyit várni rá…

A normál 1…19 közti mód felett is van!

zstd --ultra -22 Mentes.tar

Mentes.tar : 55.01% (3511541760 => 1931603102 bytes, Mentes.tar.zst)
user=707,01s system=3,15s cpu=100% total=11:48,77

Ahogy látni nekem, az adott fájlon, ami elég nagy és vegyes tar, nem feltétlen érdemes az extra magas arányt a gyorsaság rovására emelni. Kisesebb lett, de az idő is megugrott!

A könyvtárak tömörítő módja

Sejthető, hogy alapból nem tud könyvtárakat tömöríteni, mert ha egy nagyobb könyvtárból előre tar-t készítek, annak oka van. De ezt egy lépésben is megtehetjük:

tar --zstd -cf example.tar.zst example/

Itt a megszokott mód használjuk a tar parancsot, ami kezeli a zstd tömörítést. Ha nem használtad még a tar-t ilyen mód figyelj arra itt meg kell adni a tömörítvény nevét is, míg eddig automatikusan felvette a tömörítendő fájl nevét és kapott egy kiterjesztést. Itt is használhatjuk a extra erős tömörítést, de kicsit összetettebb a parancs:

tar -I 'zstd --ultra -22' -cf example.tar.zst example/

Nem agysebészet, de figyelni kell a idézőjelekre.

A könyvtár betarolása és a tömörítés nagyon picit hosszabb. Mint a fájltömörítés, és a tömörítési arány és idő is hasonlóan alakul.

Érdekességképp a linux-5.12-rc5 kernel forráskódját leszedtem és kicsomagoltam. Arra két tesztet futtattam. Az egyik sima alap tömörítés. A másik meg a maximális 22-es kapcsolóval. Az eredeti fájl, amit le tudsz tölteni az 190317221 volt.

tar --zstd -cf example.tar.zst linux-5.12-rc5/

user=4,17s system=1,35s cpu=71% total=7,696

A mérete 181994872, ami alapból kisebb, mint a standard tar.gz. Ez már azért jobban néz ki.

tar -I 'zstd --ultra -22' -cf example.tar.zst linux-5.12-rc5/

user=593,33s system=1,77s cpu=99% total=9:55,27

Durva idő, a 121072317 méret azért nem kicsit kevesebb :)!

Így elmondhatjuk, ha tömörítetlen (nem audio, videó, vagy más pluszban már nem tömöríthető) az anyag, forráskód, szövegfájl stb. akkor igen szép eredményt lehet elérni.

A tar-olt és tömörített fájl szabályos kicsomagolása:

tar -I zstd -xvf example.tar.zst

Ha többet akarsz megtudni róla, vagy éppen feltűnt, hogy a zstd kicsomagolásáról nincs minta, akkor a man zstd és a help…

Related Posts