web-dev-qa-db-ja.com

RAMDiskのパフォーマンスがHDDのパフォーマンスと一致しないのはなぜですか?

私は、RAMDisk上の一時的なGITリポジトリを(DataRAMのramdiskを使用して)一種のオブジェクトストアとして使用することを考えていました。それが価値があるかどうかを知りたいと思ったので、ドライブに1000 x 30Kファイルを書き込むという簡単なベンチマークを実行し、平均書き込み時間を比較しました。パフォーマンスが出たときは驚きました一貫して HDDを支持しました。

私が得たHDDの場合:

average: 0.47ms/write

RAMディスクの場合:

average: 0.76ms/write

これが予想とは逆である理由を誰かが説明できますか?

2
Andrew Matthews

DMAを使用する場合、CPUはデータをメモリにコピーし、ハードドライブにデータを取得してディスクに書き込むように指示します。ハードドライブがこれを実行している間、CPUは他のことを実行できます。 30Kファイルの場合、ハードドライブは読み取りと書き込みに対応できます。これらのファイルはキャッシュに収まり、書き込みを完了するためにディスクに書き込む必要はありません。ディスクの回転と腕でのシークは本当に制限要因です。

Ramdiskがどのように実装されているかはわかりませんが、CPUに2回コピーを実行させる可能性があります。

3
Sjoerd

たぶん、HDD操作は使いやすいOSによってメモリにキャッシュされており、RAMDiskは(部分的に)仮想RAM /スワップスペースにありますか?

3
Andreas_D

これは答えるのが難しい質問ですが、一般的に、人工的なベンチマークが信頼できることはめったにないことを理解する必要があります。実際のgitリポジトリをテストしてみてください。

私の推測では、CPUがドライブに「このメモリブロックを取得してドライブのこのセクションに書き込む」コマンドを発行し、ドライブがそれを非同期に処理するため、ディスクへのファイルの書き込みは「高速」です(つまり、コマンドが発行された場合、操作は「完了」です)。ただし、RAMディスクにコピーすると、実際にはデータが物理的にコピーされるまで待機します。基本的にRAMからRAMへのコピーを実行しているため、競合が発生します。

繰り返しになりますが、実際のGitリポジトリを使用する予定がある場合は、実際の操作を試してみることをお勧めします。

2
Dean Harding

ここでの問題は、kernel <> memの速度ではなく、dataramソフトウェアの実現にあると思います。 UNIXの場合、そのような目的に適した年齢のtmpfsがあります(追加の2番目のファイルシステム層は必要ありません)が、dataram製品は、(可能性のある)バグがある、または最適化されていない古いプログラムアーキテクチャを使用した古い未変更のソフトウェアです。

また、dataram ramdiskからゲームクライアントを実行しようとすると、パフォーマンスが低下しました。実際には、速度はIDEドライブから実行するよりも劣っていました...ある瞬間にはBSODでさえあります(12gb RAM合計2.5GBのRAMディスク)。4GBのRAMディスクのパフォーマンスは悪化します(???)。

同じシステムでFreeBSDは4GB以上のtmpfsを問題なく処理できます

ただし、フォーラムのImDiskの作成者は、すべてのramdiskに関してWindowsがメモリ管理で奇妙なことをしているため、Windowsサブシステムの欠点もある可能性があると指摘しています。

1
user17653