巷で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に決めました。