かみぽわーる

kamipo's blog

libjpeg-turboでjpegの変換が速くなる

巷でlibjpeg-turboというやつが速いというのを聞いたので試してみる。

今回はaptで入れた以下のモジュールでベンチマークしてみた。いちおうサーバはさくらのVPSでOSはUbuntu 10.04 LTSです。

  • Image::Magick 6.5.7
  • Imager 0.72
  • GD 2.39
  • Image::Imlib2 2.02


ふつうにaptで入れる。

sudo aptitude install perlmagick libimager-perl libgd-gd2-perl libimage-imlib2-perl
cpanm Image::Resize

libjpeg-turboを入れる。

wget http://downloads.sourceforge.net/project/libjpeg-turbo/1.0.0/libjpeg-turbo_1.0.0_amd64.deb
sudo dpkg -i libjpeg-turbo_1.0.0_amd64.deb

ベンチマークスクリプトはgistに置きました。

git clone git://gist.github.com/559469.git image_bench
cd image_bench

./imagesにてきとうなjpeg画像をinput.jpgという名前で保存しておきます。bench1.plが画像を開いて保存するだけで、bench2.plは画像をリサイズして保存するベンチマークです。

ふつうに実行すると

% perl bench1.pl
Benchmark: timing 100 iterations of GD::Image, Image::Imlib2, Image::Magick, Imager...
 GD::Image:  8 wallclock secs ( 8.03 usr +  0.40 sys =  8.43 CPU) @ 11.86/s (n=100)
Image::Imlib2:  3 wallclock secs ( 2.34 usr +  0.06 sys =  2.40 CPU) @ 41.67/s (n=100)
Image::Magick:  8 wallclock secs ( 8.22 usr +  0.23 sys =  8.45 CPU) @ 11.83/s (n=100)
    Imager:  6 wallclock secs ( 5.51 usr +  0.06 sys =  5.57 CPU) @ 17.95/s (n=100)

% perl bench2.pl
Benchmark: timing 100 iterations of GD::Image, Image::Imlib2, Image::Magick, Imager...
 GD::Image:  4 wallclock secs ( 3.65 usr +  0.18 sys =  3.83 CPU) @ 26.11/s (n=100)
Image::Imlib2:  2 wallclock secs ( 2.32 usr +  0.03 sys =  2.35 CPU) @ 42.55/s (n=100)
Image::Magick:  7 wallclock secs (12.77 usr +  0.04 sys = 12.81 CPU) @  7.81/s (n=100)
    Imager:  9 wallclock secs ( 8.88 usr +  0.04 sys =  8.92 CPU) @ 11.21/s (n=100)

libjpeg-turboを使うようにすると

% export LD_LIBRARY_PATH=/opt/libjpeg-turbo/lib:$LD_LIBRARY_PATH
% perl bench1.pl
Benchmark: timing 100 iterations of GD::Image, Image::Imlib2, Image::Magick, Imager...
 GD::Image:  5 wallclock secs ( 4.93 usr +  0.43 sys =  5.36 CPU) @ 18.66/s (n=100)
Image::Imlib2:  1 wallclock secs ( 1.18 usr +  0.04 sys =  1.22 CPU) @ 81.97/s (n=100)
Image::Magick:  4 wallclock secs ( 3.76 usr +  0.08 sys =  3.84 CPU) @ 26.04/s (n=100)
    Imager:  2 wallclock secs ( 2.14 usr +  0.05 sys =  2.19 CPU) @ 45.66/s (n=100)

% perl bench2.pl
Benchmark: timing 100 iterations of GD::Image, Image::Imlib2, Image::Magick, Imager...
 GD::Image:  2 wallclock secs ( 2.46 usr +  0.10 sys =  2.56 CPU) @ 39.06/s (n=100)
Image::Imlib2:  2 wallclock secs ( 1.24 usr +  0.02 sys =  1.26 CPU) @ 79.37/s (n=100)
Image::Magick:  5 wallclock secs ( 9.87 usr +  0.15 sys = 10.02 CPU) @  9.98/s (n=100)
    Imager:  7 wallclock secs ( 7.57 usr +  0.02 sys =  7.59 CPU) @ 13.18/s (n=100)

私はこれでlibjpeg-turboに決めました。