Ubuntu 12.04のcpコマンドが速い(ように見える)のは遅延書き込みのおかげ

何か最近cpコマンドが妙に速いような気がしたので、ちょっと速度を計ってみることに。

ddコマンドで1GBのテストファイルを作成し、それをcpとsnowcpを使って、HDD(ST3000DM001)に書き込んでみた。

今回はコピー速度ではなく書き込み速度を調べるだけなので、テストファイルがキャッシュに乗った状態で計ってみた。なお、時間の計測にはtimeコマンドを使用した。

ファイルシステムext4の場合

cp 約3.06秒 約326MB/s
snowcp 約3.30秒 約303MB/s なぜか、何度やってもcpよりも若干遅い結果に。

300MB/s以上の速度が出ていることになるが、コピー先のST3000DM001の書き込み速度の上限はおよそ200MB/sほどなので、明らかにハードウェアの限界を超えている。

コピーしながらiotopを見ていると、コピーが終わった数秒後に100MB/s程度の書き込みが発生しているのを発見。恐らくこれが噂の遅延アロケーションというやつなんだろう。

ファイルシステムがXFSの場合

cp 約3.45秒 約289MB/s なぜかext4の時に比べてやや遅い結果に。シーケンシャルアクセスは速いんじゃなかったっけ?
snowcp 約5.41秒 約184MB/s O_DIRECTを使用しているので遅延アロケーションが行われず、この程度の速度に。というか、これが実際のハードウェアの速度。

以前、Ubuntu 11.10で速度をテストした時はsnowcpの方がcpコマンドよりも速かったんだよなぁ。技術は日々進歩しているってことですね、わかります。