高速な LZ4 を活用する

投稿者: | 2018年7月19日

普段、メインコンソールとして Passmarkスコア=936Celeron 847 を使っています。

このぐらいのスペックだと Core 2 Duo 世代と性能が変わらないため、7z や bzip2 は使いづらいです。
かと言って、無圧縮 tar だと芸が無さ過ぎるので、LZ4の利用を模索してみました。

高速な LZ4

圧縮・解凍ともに高速で、ストレス軽減に役立つアルゴリズムです。
以前、実機検証した際、LZ4 は速度的に無圧縮とさほどに変わらないにも関わらず、1/6以上の圧縮率でした。
(詳細は、過去記事「ddコマンドによるイメージバックアップ」をご参照ください)。

base on LZ4 - Wikipedia

LZ4 は圧縮と展開の速さに焦点を当てた可逆圧縮アルゴリズムである。
機能
gzipのようなアルゴリズムより低い圧縮率であるLZOよりわずかに圧縮率が低い。しかし、圧縮速度はLZOと同等であり、gzipより数倍速い。展開速度はLZOより著しく速くなりうる。
実装
LZ4はLinuxカーネル 3.11にもネイティブに実装されている。

メリット

  • 圧縮が非常に高速
  • 解凍も比較的高速
  • 圧縮が高速な割に、圧縮後ファイルサイズが比較的小さい
  • Linuxカーネルにネイティブ実装

デメリット

  • ファイル単位での処理
    ディレクトリを一つのファイルにまとめるような使い方はできない。
    ※tar などと組み合わせることで複数ファイルのアーカイブが可能になります。

導入手順

Lubuntu 16.04.4 LTS には、LZ 圧縮アルゴリズムのランタイムライブラリ「liblz4-1」が既に導入されていました。

$ dpkg -l | grep lz4
ii  liblz4-1:amd64                                0.0~r131-2ubuntu2                            amd64        Fast LZ compression algorithm library - runtime

base on Debian -- stretch の liblz4-1 パッケージに関する詳細

LZ4 は非常に高速なロスレス圧縮アルゴリズムで、圧縮速度は コアあたり 400 MB/s を実現し、マルチコア CPU でもスケールします。 極めて高速なデコーダも備えており、速度はコアあたり複数 GB/s で、 通常マルチコアシステム上では RAM の速度限界に達します。

導入

$ lz4 --help
プログラム 'lz4' はまだインストールされていません。 次のように入力することでインストールできます:
sudo apt install liblz4-tool

$ sudo apt install liblz4-tool

以下のパッケージが新たにインストールされます:
  liblz4-tool

導入確認

$ lz4 --help
Incorrect parameters
Usage :
      lz4 [arg] [input] [output]

input   : a filename
          with no FILE, or when FILE is - or stdin, read standard input
Arguments :
 -1     : Fast compression (default) 
 -9     : High compression 
 -d     : decompression (default for .lz4 extension)
 -z     : force compression
 -f     : overwrite output without prompting 
 -h/-H  : display help/long help and exit

使い方

tar 単体の場合

構文 OP1 引数1 OP2 引数2 引数3
tar -C バックアップ元DIR -cf バックアップファイル名 バックアップ対象
  • tarコマンドについて
    • オプション1
      • -C (--directory=DIR)
        ディレクトリ DIR (バックアップ元)へ移動。
        (tar は無指定だと、カレント DIR を圧縮対象とする)。
    • オプション2
      • -c (--create)
        新しいアーカイブを作成。
      • -f (--file=ARCHIVE)
        アーカイブファイルまたはデバイス ARCHIVE を使用。
      • -v (--verbose)
        処理されているファイルの一覧を冗長に表示。

アーカイブ例

以下、例1・例2は同じ結果になります。

  • 例1
$ tar -C /tmp/ -cf /tmp/archive.tar dirName
  • 例2
$ tar -C /tmp/dirName -cf /tmp/archive.tar /tmp/dirName

ex. dirName は、/tmp/firefox_link の場合「firefox_link」にあたります。

tar + LZ4 の場合

圧縮例

  • 各々
$ tar -C /tmp/ -cf /tmp/archive.tar dirName
$ lz4 -z /tmp/archive.tar /tmp/archive.lz4
  • パイプ
$ tar -C /tmp/ -cf - dirName | lz4 - /tmp/archive.lz4

解凍例

  • 各々
$ lz4 -d /tmp/archive.lz4 /tmp/archive.tar
$ tar -xf /tmp/archive.tar
  • パイプ
$ lz4 -d /tmp/archive.lz4 | tar xf - -C /tmp