9
6

More than 5 years have passed since last update.

xzをマルチスレッドにしたら爆速になった

Last updated at Posted at 2017-02-08

xzは5.2からマルチスレッド対応になったと聞き
Ubuntuで簡単に導入できないか検証しました。
調査したところXestyであれば5.2に対応しております。

インストール(Ubuntu16.04の場合)

sudo vi /etc/apt/sources.list.d/xesty.list
+ deb http://jp.archive.ubuntu.com/ubuntu/ zesty main restricted
+ deb http://security.ubuntu.com/ubuntu zesty-security main restricted

sudo vi /etc/apt/preferences.d/xz
+ Package: *
+ Pin: release n=xenial
+ Pin-priority: 501
+ 
+ Package: xz-utils liblzma5
+ Pin: release n=zesty
+ Pin-Priority: 502

sudo apt-get update
sudo apt-get install xz-utils
xz --version

インストール(CentOS6の場合)

cd /tmp
wget http://tukaani.org/xz/xz-5.2.3.tar.bz2
tar xzvf xz-5.2.3.tar.bz2
cd xz-5.2.3
yum groupinstall 'Development tools'
./configure
make
make install
xz --version

測定

検証機は32コアと8コア、速度が安定するようSSDにしてあります。
検証にはmysqldumpを先頭1Gだけ切り出したものを使用しました。
xz -v --threads=32 ファイル名という風に使います。
cat 入力ファイル名 | xz --threads=32 > 出力ファイル名
にしても速度は変わりませんでした。

gzipはシングルスレッドなので
pigzにしないと本来は不公平なのかな?

結果

32コア

圧縮 時間 サイズ 速度比
xz(5.1.1) 7:30 158,246,724 100.0%
xz(5.2.2) 7:01 158,246,724 104.5%
xz(マルチスレッド) 0:46 158,608,200 1434.7%
gzip 0:34 244,416,462 1941.1%

8コア(別環境)

圧縮 時間 サイズ 速度比
xz(5.2.3) 15:47 158,246,724 100.0%
xz(マルチスレッド) 2:33 158,608,200 620.0%
gzip 1:08 244,416,458 1392.6%

32コア

解凍 時間 速度比
xz(5.2.2) 0:14 100.0%
xz(マルチスレッド) 0:14 100.0%
gzip 0:06 233.3%

8コア(別環境)

解凍 時間 速度比
xz(5.2.3) 0:27 100.0%
xz(マルチスレッド) 0:27 100.0%
gzip 0:20 135.0%

まとめ

いかがでしょうか。サイズが若干増えましたが8コアあれば実用速度になったのではないでしょうか。

MySQLのInnoDBなら32コアまでなら確実にスケールするので1個16CPUのMySQLサーバを用意してNUMAを回避
足りなくなってきたら2個目の16CPUを用意とかいかがでしょう。
なお、負荷からすると切り離さないとこの負荷ではユーザの接続が不安定になりますね。
バックアップはまず使わないものなのでxzにするのはいかがでしょうか。

9
6
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
9
6