ラベル パソコン の投稿を表示しています。 すべての投稿を表示
ラベル パソコン の投稿を表示しています。 すべての投稿を表示

2013年9月2日月曜日

各種圧縮ソフト 圧縮速度と圧縮率の比較(並列版含む)

Unix-like 環境でよく使われるアーカイバの圧縮速度、圧縮率を比較しました。

比較したツール

すべて CentOS 6.4 / EPEL のレポジトリのビルドを使用しました。

比較した環境

  • CPU: Intel Core i7 2600
  • SSD: Crucial m4
  • Memory: DDR3-1600 16GB

ベンチマーク内容

圧縮に使ったファイルは、数GBあるMySQL のダンプです。

cat original | command > original.compressed

という形でベンチマークしました。

下記の表は gzip の標準状態を 1 とした相対的な数値を示しています。 Software 欄の -1 や -9 は、コマンドに指定できる圧縮率です。 -1 が最低、 -9 が最高になっているコマンドが多いです。

並列に実行できるものに関してはすべて 8 スレッドで実行しています。

ベンチマーク結果

time real
実際の経過時間
time user
CPU user 時間
compression ratio
圧縮率の比。大きいほどファイルが大きい。
compression ratio (single/parallel)
並列版について、シングルスレッドに対する圧縮率の比
parallel overhead
シングルスレッド版と比較した CPU user時間の比


Softwaretime realtime usercompression ratiocompression ratio (single/parallel)parallel overhead
lzo0.220.191.55
lzo -94.914.931.25
gzip -10.500.491.15
gzip1.001.001.00
bzip2 -14.414.460.86
bzip25.875.940.79
xz -11.961.980.94
xz17.8618.140.72
pigz -10.100.771.151.001.56
pigz0.201.551.001.001.55
pbzip2 -10.957.600.861.001.70
pbzip21.5712.530.791.002.11
pxz -10.463.610.961.031.83
pxz4.1128.350.731.011.56

棒グラフが相対的な経過時間、緑の点が相対的な圧縮率です。


xz が飛び出てわかりづらいので、xz以外のシングルスレッド系圧縮ソフトを並べました。

lzo が極めて高速ですがgzipに比べ1.5倍程度のサイズになりました。 lzo の最大圧縮はとても速度が遅いにもかかわらず gzip -1 より圧縮率が悪くなりました。
bzip2 は -1..-9 は厳密には圧縮率ではないので、他のソフトに比べて差が小さかったです。圧縮速度と圧縮率のバランスが良いように思います。
xz はさすがの遅さでした。ただ、 xz -1 や(今回は測っていませんが) xz -2 であれば、bzip2 より高速にもかかわらず肉薄する圧縮率を出すので、かなり優秀だと思います。
gzip は圧縮速度と圧縮率のバランスが取れています。

次にマルチスレッド系圧縮ソフトです。棒グラフが相対的な経過時間、緑の点が並列化のオーバーヘッド(シングルスレッド版に対するCPU user timeの比)、赤い点がシングルスレッド版に対する圧縮率の比です。


ご覧のように、シングルスレッド版に対して圧縮率はほとんど変わりません。シングルスレッド版に対する実行時間は bzip2 が若干高く2倍を超えましたが、その他は1.5倍~1.8倍程度でした。

まとめ

圧縮速度と圧縮率のバランスが取れているのは gzip で、並列版の性能も優秀でした。速度をある程度要求される環境下においても、 lzo には並列版がないので、CPUをたくさん使えるのであればこれで決まりな気がします。

xz は最高の圧縮率でした。 ただ、時間をかけて圧縮する用途にしても、さすがに時間がかかりすぎの気もします... 今回は測っていませんが、bzip2 より展開は早い(らしい)ので、ファイルを配布するなどの用途には向いているのでしょう。

bzip2 は圧縮率こそ xz に叶いませんが、実行速度とのバランスは優れていると思います。展開に時間が掛かるのがデメリットですが、一応保存しておく系のログファイルなどには使えるのではないでしょうか。

lzo の高圧縮モードは今回の測定だと出番がないように見えますが、展開が gzip に比べてメモリや時間が少なくて済むので、組込み用途では活躍しそうです。

補足

xz のマルチスレッド版には pixz というのもありますが、これは圧縮アルゴリズムにも少し手を加えており、 xz とファイルの互換性がありません。 環境によってはビルドが失敗するなど、これからに期待です。 ファイルの互換性はあるようです。また、私の環境でビルドが失敗したのは単にSDKが古いから説が浮上したので、今度追試します。

pxz は xz を単純にマルチスレッドにしたもので、圧縮が終わってからファイルを連結するので、メモリとディスクの使用量がかなり大きくなります。

今回は展開速度に関しては測っていませんので、展開を頻繁に行う場合はそちらも考慮する必要があります。

2012年2月1日水曜日

MySQL バックアップスクリプト

MySQL は世界で最も使われている RDBMS の一つですが、問題となるのが定番のバックアップ方法がないということです。 mysqldump を使うと大まかにはバックアップが取れるのですが、InnoDB と MyISAM が混ざっていたりするとそれぞれトランザクションが使えたり使えなかったり、色々とややこしいです。

そこで、データベースごとに --single-transaction を使うか、 --lock-tables を使うか切り替えて、複数のデータベースを一気にダンプする PowerShell スクリプトを書きました。

2011年12月15日木曜日

サーバー用 HDD 事情 2011年年末バージョン

最近サーバーを構築する機会があったのですが、ストレージをどう用意したらいいのかさっぱりわからなかったので、だいぶ苦労しました。苦労した内容をまとめてみます。

SAS vs SATA

SASの特徴: 速い、高信頼、高い
SATAの特徴: 安い、安い、安い

これに集約されると思います。バックアップとして使うならともかく、メインのストレージとして利用するのに SATA は選択肢に入ってこないと思います。 Non-recoverable error rate だって SAS のほうが1桁低いです。

SAS RAID事情

サーバーで使うなら RAID 必須になってきます。今回はシャーシと予算の都合で HDD が2台しか入らないので、RAID 1 を構築することにしました。ところが、SATA と違ってぐぐってもさっぱり情報が見つかりません。

RAID にはソフトウェア RAID とハードウェア RAID がありますが、パフォーマンスを重視するならハードウェアRAID一択です。ただし、Dell の PERC H200 のようにキャッシュメモリが載っていない安物カードだと、パフォーマンスが全然出ませんので、きちんとキャッシュメモリが載っているものを選びましょう。1万5000円ぐらいから見つかります。RAID5 や 6 を構築するときは、おそらくコントローラーの性能がかなり響いてくると思うので、ここでけちってはいけません。

よく使われているメーカーは LSI か、Adaptec だと思います。Adaptec は PMC という会社に買収されてしまいましたが、ブランドは残っています。

(2011/12/21 追記)Adaptec はまだ UEFI に対応していないそうで、最近のマザーボードとの組み合わせだと起動しないかもしれません。私もはまりました。 LSI は対応しています。サーバー用だと LSI が最大勢力のようです。あと Areca というメーカーも最近メジャーで、チップは LSI なんですが DIMM を差し替えてキャッシュを 4GB まで増設できたりといった特徴があります。

お金が許すなら LSI Logic のほうが速いようです。Akiba PC Hotline! に 現行最速クラスのRAIDカード「LSI MegaRAID SAS 9265-8i」を試す という記事がありますので参考にしてください。

今回は Adaptec RAID 6405 をチョイスしました。3万円強で買えます。

ちなみに Dell の PERC H シリーズは、LSI Logic のOEM だそうです。DELLサーバのRAIDコントローラ~その2~ が詳しいです。

SAS ケーブル

SAS は SATA と異なり、RAIDカードのコネクタとHDDのコネクタが一対一には対応しません。
Adaptec のケーブル一覧 に写真付きで載っていますが、だいたいは4叉(ファンアウト)ケーブルを使います。つまり、基本的にはRAIDカードのコネクタ1つにつきHDDが4台接続できるわけです。

LSI Logic も Adaptec も、メーカーサイトに、対応しているケーブルが書かれてあるので、それに従います。大体の場合、コントローラー側は SFF-8087 というコネクタで、HDD 側は SFF-8482 というコネクタになっています。

SATA と SAS の互換性ですが、SAS が SATA の上位互換になっています。SFF-8482 には SAS と SATA 両方の HDD が接続できます。SATA のコネクタには SAS HDD は接続できません。SAS のコネクタをよく見ると、電源部分とデータ部分の間にノッチがついています。これで識別しています。

SFF-8482 には single port 対応のものと dual port 対応のものがあります。dual port はその名の通り、信号線が2系統になっていて、電源部分とデータ部分のノッチに信号線が載っています。これを使うと、一台のHDDを複数のコントローラーに接続したりできるそうですが、自分で HDD 買ってくるような用途では使わないと思います...

SAS HDD事情

SAS に接続できるストレージには大きく分けて、3.5インチ HDD、2.5インチ HDD、SSD があります。

SSD は HDD じゃないだろうというツッコミはありますが、最近では HGST や Seagate などの HDD メーカーもどんどん発売しています。容量も 800GB 程度までありますので、資金が許すなら選択肢に入るのかも? ただ、ぐぐっても売ってるところ見つからないので、普通には買えないのかもしれません。

3.5 インチと 2.5 インチですが、最近は徐々に 2.5 インチが幅を効かせているようです。といってもちょいと複雑で、単純には言えないところがあります。

まず、HDD の用途には二種類あって、ひとつは容量を稼ぐためのもの、もうひとつは性能も大事なものです。

容量を稼ぐ場合は、2TB とか 3TB の 3.5インチ HDD を使うのが良いようです。これらは SATA で普通に買える HDD と大差ありません。これは単純にディスク面積が広いほうが有利なので、 3.5 インチが使われています。

性能を稼ぐためには台数を増やすのが手っ取り早いので、10,000rpm 以上の 2.5 インチ HDD を複数台数用意するようです。消費電力も 2.5 インチのほうが小さいですし、例えば Seagate の場合は Cheetah 15K.7(3.5inch) より Savvio 15K.3(2.5inch) のほうがスペックが良いです。Cheetah 15k.7 が2009年の製品だというのもありますが... 新製品が発売されないということは、需要が減ってきているんでしょう。

あと、実は 3.5 インチといいつつ 10,000rpm 以上の HDD は、プラッタの大きさがかなり小さいですので、それだったら 2.5 インチシャーシでギリギリまで使うほうが良いという判断もありそうです。

性能と容量のバランスの良い、2.5インチ 10,000rpm HDD もあります。 Savvio 10K.5 は 900GB まで用意されています。3.5 インチの Cheetah より容量が多いです。新しい製品なので高密度なんでしょうね。

ちなみに今はタイ洪水のせいで、2.5 インチ HDD の入手性が悪いようです。あと私が勉強不足だったので、普通に Cheetah 15K.7 を注文してしまいました...

RAID と UPS


普通のパソコンだと UPS 積みませんが、 RAID カードを装着して、しかも大容量キャッシュが搭載されている場合だとバッテリバックアップは重要です。

大抵のファイルシステムは、突然電源断が起こっても一貫性を保ち、データの消失が発生しないように設計されています。デスクトップパソコンが UPS なくても安心して使えるのはこのためです。

しかし、これには「OS がディスクに書き込んだと思った内容は、確実に書きこまれている」という大前提があります。

RAID カードのキャッシュは、OSが「書きこめ」と言ったものもキャッシュして、高速化します。そのため、電源断が起こった際にデータの消失、ファイルシステムの破壊が起こる可能性があります。かと言って書き込みキャッシュを無効化してしまうと、 RAID カードの高速性が半減してしまいます。

RAID カードの中には自前でバックアップシステムを持っているものもありますが、結構なお値段がしますので、それだったら PC ごと UPS でバックアップしたほうが良いと思います。2万円ぐらいからありますし、APC の 1U 用でも管理ソフト込で5万円強です。

まとめ


SAS RAID カードはケチらない。ケーブルはメーカーの対応表とにらめっこ。 HDD はメインとしては 2.5インチ 10,000rpm ぐらいが容量、性能のバランスが良いが、洪水のせいで買えない。 UPS を付ける。