2013年10月1日火曜日

Google snappyの試行

今更ですが、ちょっとsnappyを試してみてます。ちょっとLAN経由で複数のPCからデータを転送してHDDにログしようとする場合、データをそのままで送るより、PCでいったん圧縮した方がトータルで早くなるといわれています。(snappyはその用途で使われてるそうですが)実際のところ、どれくらい差がでるのか試してみたくなり、まずはsnappyをインストールしてみて、その処理時間をみてみました。LinuxとMac OSXで測定しましたが、簡単にスペックを示します。

①Linux (Core2Duo):Windows XPの時代に購入したTSUKUMOのゲーム用PC。E6850 3GHzのCPU、メモリ2GB搭載。

②Mac OSX 10.6.8 (Core2Duo):初代Mac Book Air 1.86GHz、メモリ2GB搭載。

圧縮するデータはテストプログラム内でダミーとして生成します。(規則性のあるデータと乱数の2種類、データサイズも100KBと500KBの2種類、合計4種のデータをとりました。)

1.規則性のあるデータ
100KB→5299Bに圧縮された
①のPC=圧縮(280us)/解凍(75us)
②のPC=圧縮(140us)/解凍(180us)

500KB→25987Bに圧縮された
①のPC=圧縮(1.3ms)/解凍(470us)
②のPC=圧縮(480us)/解凍(730us)

2.乱数のデータ
100KB→102409Bに圧縮された(+9Byte増えてる!?)
①のPC=圧縮(120us)/解凍(40us)
②のPC=圧縮(220us)/解凍(120us)

500KB→512027Bに圧縮された(+27B増えてる!?)
①のPC=圧縮(480us)/解凍(280us)
②のPC=圧縮(750us)/解凍(520us)


Linuxの方はほぼ期待通りの結果がでました。(圧縮より解凍が圧倒的に速い)しかしMac OSXの結果がよくわかりません。特に規則性のあるデータの場合に解凍の方に時間がかかっています。処理時間の計測にLinuxと同じgettimeofday()関数を使ったのですが、Macの場合何か問題があるのかもしれません。
またもっとわからないのが、snappy自体で乱数データの場合かえって圧縮後のデータが増えてしまっています。何コレ?snappyでは圧縮前に圧縮後のサイズを調べる関数(CのAPIで、size_t snappy_max_compressed_length())をCallしていますが、ここで圧縮後のサイズが減らないようならCPU時間を使うだけ無駄なので、圧縮をあきらめた方がいい気がします。

このほか、Windows7にもインストールしてみましたが、Windowsはタイマの取得精度が頑張ってもms単位なのでちょっとまともに時間計測ができません。


0 件のコメント:

コメントを投稿