14

私が作成したPythonプログラムはIOバウンドです。時間の大部分(90%以上)は、約10,000回繰り返される単一のループに費やされます。このループでは、最大100KBのデータが生成され、一時ファイルに書き込まれます。次に、別のプログラムによって読み戻され、収集されたデータに関する統計が表示されます。これは、2番目のプログラムにデータを渡す唯一の方法です。

これが主なボトルネックであるため、一時ファイルの場所をメインHDDから(〜40MB)RAMディスク(2GBを超える空きRAM内)に移動すると、このファイルのIO速度が大幅に向上し、ランタイム。ただし、次の結果が得られました(それぞれ平均20回の実行)。

  • テストデータ1:RAMdiskなし-72.7s、RAMdiskあり-78.6s
  • テストデータ2:RAMdiskなし-223.0s、RAMdiskあり-235.1s

RAMディスクは私のHDDよりも遅いように見えます。

これを引き起こしている可能性がありますか?

より高速なファイルIOを取得するためにRAMdiskを使用する他の方法はありますか?

4

6 に答える 6

3

お使いのオペレーティングシステムは、ほぼ確実にディスク書き込みをすでにバッファリング/キャッシュしています。RAMディスクのパフォーマンスが非常に近いのは当然のことです。

あなたが何を書いているのか、どのように書いているのかを正確に知らなくても、私たちは一般的な提案しか提供できません。いくつかのアイデア:

  • 2 GBのRAMがある場合は、おそらく適切なプロセッサを使用しているので、このデータを圧縮されたファイルシステムに書き込むことができます。これは、データがそれに適していると仮定すると、I/O操作をCPU時間と交換します。

  • 小さな書き込みをたくさん行う場合は、それらを組み合わせて一度に大きな部分を書き込みます。(ソースコードを見ることができますか?)

  • 使用後に100KBのファイルを削除していますか?不要な場合は削除してください。そうしないと、OSが強制的にディスクにフラッシュする可能性があります。

于 2010-10-14T00:47:13.940 に答える
2

一度に1つのアイテムではなく、バッチでデータを書き出すことはできますか?開いているファイルハンドルなどのリソースをキャッシュしていますか、それともクリーンアップしていますか?ディスク書き込みがブロックされていますか?バックグラウンドスレッドを使用して、コンピューティングパフォーマンスに影響を与えずにIOを飽和させることができますか?

最初にディスク書き込みの最適化を検討し、それが完了したらより高速なディスクを検討します。

于 2010-10-14T00:34:14.363 に答える
2

WindowsはディスクデータをRAMにキャッシュすることに非常に積極的であり、100Kは簡単に収まると思います。書き込みは直接キャッシュに送られ、おそらく非ブロッキング書き込みを介してディスクに書き込まれます。これにより、プログラムを続行できます。RAMディスクは、非ブロッキング操作が迅速で面倒な価値がないことを期待しているため、おそらくそれらの操作をサポートしません。

プログラムとキャッシュに使用できるメモリの量を減らすことで、ページング用のディスクI/Oの量​​を少しでも増やすことができます。

私はカーネルやドライバーに精通していないので、これはすべて私の側の推測です。Linuxも同様に動作すると思います。

于 2010-10-14T00:47:27.230 に答える
1

私のテストでは、バッチサイズが全体的なパフォーマンスだけでなく、データ自体の性質にも影響を与えることがわかりました。たった1つのシナリオで、SSDと比較して5倍優れた書き込み時間を得ることができました。それは、事前に調理されたランダムバイト配列の100MBチャンクをRAMドライブに書き込むことです。文字「aaa」や現在の日時など、より「予測可能な」データを書き込むと、まったく逆の結果が得られます。SSDは常に高速または同等です。したがって、私の推測では、オペレーティングシステム(私の場合はWin 7)は多くのキャッシュと最適化を行います。RAMドライブの最も厄介なケースは、いくつかの大きな書き込みではなく、多くの小さな書き込みを実行する場合であり、RAMドライブは、圧縮が難しい大量のデータの書き込みに優れているように見えます。

于 2016-05-17T12:36:52.270 に答える
0

私は同じ気が遠くなるような経験をしました、そして何度も試みた後、私はそれを理解しました。ramdiskがFAT32としてフォーマットされている場合、ベンチマークが高い値を示していても、実際の使用はNTFSフォーマットのSSDよりも実際には遅くなります。ただし、NTFS形式のRAMディスクは、実際にはSSDよりも高速です。

于 2013-06-07T23:43:01.820 に答える
0

私はRAMディスクの速度に問題がある人々に加わります(Windowsのみ)。

私が持っているSSDは、550 MiB / s(30 GiBを書き込むのに約56秒)の速度で30 GiB(1つの大きなブロックに30GiB RAM ARRAYをダンプ)を書き込むことができます...これは、書き込みが1つのソースで要求される場合ですコード文。

私が持っているRAMディスク(imDisk)は、100 MiB / s(30 GiBを書き込むのに約5分13秒)より少し遅い速度で30 GiB書き込み(1つの大きなブロックに30GiB RAM ARRAYをダンプ)を書き込むことができます。 ..これは、1つのソースコード文で書き込みが要求された場合です。

私は別のRAMテストも行いました:ソースコードから30GiB RAMアレイ(64GiBのRAMを持っています)へのシーケンシャルダイレクトライト(ソースコードループパスごとに1バイト)を実行すると、1.3GiB / s(1298)近くの速度が得られます1秒あたりのMiB)。

なぜ地獄(Windowsの場合)のRAMディスクは1つの大きなシーケンシャル書き込みに対して非常に遅いのですか?

もちろん、LinuxネイティブRAMディスクを使用してLinuxで同じ「概念」をテストしたため、WindowsのRAMディスクでは書き込み速度が遅くなり、LinuxRAMディスクは1秒あたり1ギガバイト近くで書き込むことができます。

WindowsでSoftPerfectやその他のRAMディスクもテストしたことに注意してください。RAMディスクの速度はほぼ同じで、1秒あたり100メガバイトを超えて書き込むことはできません。

テストされた実際のWindows:10および11(HOMEおよびPROの両方、64ビット)、RAMディスクフォーマット(exFATおよびNTFS)。RAMディスクの速度が遅すぎたため、RAMディスクの速度が正常なWindowsバージョンを1つ見つけようとしましたが、誰も見つかりませんでした。実際にテストされたLinuxカーネル:5.15.11のみ。LinuxネイティブRAMのディスク速度は正常であったため、他のカーネルではテストしていません。

知識は問題を解決するための基礎であるため、これが他の人々に役立つことを願っています。

于 2021-12-24T09:43:18.417 に答える