web-dev-qa-db-ja.com

ディスクの書き込み速度は読み取り速度よりもはるかに遅い

CentOSを実行しているVPSサーバー(WiredTree)があります。

いくつかのパフォーマンスの問題が発生した後、次のスクリプトを使用して、ディスクの読み取り/書き込み速度の簡単なベンチマークを作成しました。

echo Write to disk
dd if=/dev/zero of=test1 bs=1048576 count=2048
echo Read from disk
dd if=test1 of=/dev/null bs=1048576

出力例は次のとおりです。

[bizwayz@Host perf]./benchmark
Write to disk
2048+0 records in
2048+0 records out
2147483648 bytes (2.1 GB) copied, 11.2601 seconds, 191 MB/s
Read from disk
2048+0 records in
2048+0 records out
2147483648 bytes (2.1 GB) copied, 0.789302 seconds, 2.7 GB/s
[bizwayz@Host perf]./benchmark
Write to disk
2048+0 records in
2048+0 records out
2147483648 bytes (2.1 GB) copied, 3.69129 seconds, 582 MB/s
Read from disk
2048+0 records in
2048+0 records out
2147483648 bytes (2.1 GB) copied, 0.789897 seconds, 2.7 GB/s
[bizwayz@Host perf]./benchmark
Write to disk
2048+0 records in
2048+0 records out
2147483648 bytes (2.1 GB) copied, 9.56615 seconds, 224 MB/s
Read from disk
2048+0 records in
2048+0 records out
2147483648 bytes (2.1 GB) copied, 0.882664 seconds, 2.4 GB/s
[bizwayz@Host perf]./benchmark
Write to disk
2048+0 records in
2048+0 records out
2147483648 bytes (2.1 GB) copied, 3.52512 seconds, 609 MB/s
Read from disk
2048+0 records in
2048+0 records out
2147483648 bytes (2.1 GB) copied, 0.784007 seconds, 2.7 GB/s

私の質問は、書き込み速度が読み取りよりもはるかに遅いのが正常かどうかです。

4
yby

VPSサーバーを実行しています。これは、物理マシン上に他のクライアントがあり、それらがディスクをどのように使用するかが、読み取りおよび書き込みパフォーマンスの表示方法に影響を与えることを意味します。

通常、RAID10では、読み取り速度の約1/2の書き込み速度があります。ただし、不明な変数が多数あるため、別のクライアントがディスクに大量の書き込みを行っている可能性があります。そのため、書き込み速度が低下しています。

彼らと一緒にチケットを開くことは害にはなりませんが、VPSでは、これが通常表示されるものです。 VPSは、パフォーマンスのためではなく、利便性と価値のためのものです。

編集:確かに、ここではキャッシュが問題ですが、私の主張は依然として当てはまります。

Ddコマンドをfdatasyncコマンドと一緒に実行して、カーネルがデフォルトで実行するメモリだけでなく、ファイルデータを実際にディスクにフラッシュしていることを確認してください。すなわち:

dd bs=1M count=512 if=/dev/zero of=test conv=fdatasync
4
Dave Drager

はい、それは正常です。ファイルはわずか約2GBで、完全にキャッシュに収まります。実際には、キャッシュからだけでなく、ディスクから読み取られることはありません。ファイルサイズを少なくとも10倍大きくして、意味のある結果を得るか、それ以上にします。RAMサイズ(2x RAMが出発点として適しています) )。

読み取り速度が2.7GB /秒のディスクが本当に欲しいです:)

2
Sven

テスト手法の問題の1つは、Linuxの内部システムバッファリングが利用されており、結果が大きく歪んでいることです。

もちろん、一般的に、ディスクの書き込みはディスクの読み取りよりも低速です。論理ファイルレベルでは、(1)ディスク割り当てプロセス、(2)ディレクトリ情報の更新などがあるため、書き込みがはるかに遅くなる可能性があります。したがって、ファイルレベルの書き込みが発生すると、より多くの操作が発生します。これは、ファイルレベルの読み取り操作と簡単に比較できる単純なアトミック操作ではありません。

ベンチマークでは、テストの各dd間のバッファキャッシュをクリアする必要があります。または、各ステップの間にマシンを再起動する必要があります:-)。ところで、該当する/ proc領域に何かを書き込むことでこれを行う簡単な方法があると思います。

編集:キャッシュクリアプロセス:

 sync && echo 3 > /proc/sys/vm/drop_caches

これは、各ddコマンドの前に行う必要があります。

1
mdpc