- 締切済み
ディスクI/Oが重い!
ずっとBSD系を使っていて、最近になって、Linux(turbo)を使っているのですが・・わからないことが多く、戸惑っています。。 dd で、 dd if=/dev/hda of=/dev/hdb bs=32M というようにして、ディスク丸ごとコピーを試みたところ、処理中、シェルでただリターンキーを押しただけでも1秒くらいかかるほど、非常に重たくなってしまいました。 調べてみると、dd のCPU使用率は7%程度なのに、CPU負荷は1.2~2.0にまでなっていました。(そのほかのサービス等は一切動いていない状態です) そこで試しに・・ dd if=/dev/hda of=/dev/null bs=32M と、やってみたところ、やはり同様の状況になりました。 hdparm で調べてみましたが、USE_DMA=1となっていたので、おそらく、DMAが使われていると思うのですが・・ このような処理は、DMAの操作がほとんどなので、CPU負荷にはほとんど影響しない・・と、思うのですが、なぜ、こんなに重くなってしまうのでしょうか? ちなみに、FreeBSDでは、同じように、ハードディスクからnullデバイスへのコピー dd if=/dev/ad0s1 of=/dev/null bs=32m を実行しても、CPU負荷は0.00~0.01、処理はほとんど重くなりません。
- みんなの回答 (3)
- 専門家の回答
みんなの回答
- TrickOrTreat
- ベストアンサー率42% (53/126)
bs=32mって大きすぎじゃないですか。一度の入出力の単位として 32m は BSD系でも大きな値だと思いますが、問題なかったのでしょうか。 そんなに大きなサイズのデータを一度に入出力させようとしたら、データバスの帯域が飽和してしまうような気がします。たぶんキーボード等の入力が遅いのはバス帯域をddコマンドで使い切ってしまっているからだと思います。 最適なブロックサイズは一般的には 8k から 64k くらいではないでしょうか。 値を変えていろいろと試してみることをお勧めします。
補足
もちろん、topで監視しています 動いているプロセスは、dd と topだけで、あわせて10%以下です。