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コマンドよりも速かったんだよなぁ。技術は日々進歩しているってことですね、わかります。