web-dev-qa-db-ja.com

ドライブ間のファイル転送はなぜRAM

システムドライブとして使用しているSSDからHDD、または外付けハードドライブやフラッシュドライブに大きなファイルをコピーまたは移動するときはいつでも、Windowsに表示される速度グラフは常に同じように見えることに気付きました。転送速度です。約450MB/sで開始し、数秒後に90〜130 MB/sのどこかに低下し、コピー/移動操作が終了するまで安定しています。

Transfer speed graph

これが私の好奇心をかきたてたので、その原因を突き止めることにしました。私の考えのいくつかはこれらでした:

多分それは転送が発生する実際の速度です

間違いなく。 450 MB/sの速度はSSDの定格速度と一致しますが、バックグラウンドで他のディスクの読み取り/書き込みも行われていることを考えると、7200rpmのハードドライブがそれに追いつくことができる方法はありません。後で得られる130 MB /秒の速度も、私が期待できる最高の速度です。では、余分なデータはどこに行きますか?

余分なデータはハードドライブのキャッシュメモリに保存されています

これはもう少し理にかなっていますが、より高速な転送速度の持続時間を考慮すると、ハードドライブのキャッシュのサイズは3 GBを超える必要がありますが、実際にはそうではありません。他に何ができますか?

余分なデータはRAMに保存されています

意味あり。私のRAMは、私のSSDの速度に匹敵することができる私のシステムの他の部分だけであり、私はそれをたくさん持っています。この理論をチェックしましょう!

タスクマネージャを開き、[パフォーマンス]タブを確認します。メモリ使用量は3.7 GBで安定しています。次に、さらに15 GBのファイル転送を開始します。転送速度が130MB/sに低下すると、メモリ使用量は増加し始め、5.3GBで停止します。ファイル転送が終了するまで(転送ダイアログが閉じるまで)同じままで、その後、転送前の3.7GBレベルにゆっくりと戻ります。

だから、私の最後の理論は真実です。さらなる確認は、余分に使用されたメモリがModifiedとしてマークされているという事実です

Modified

ポイントは何ですか?

私の質問は、これを行う目的は何ですか? RAMの一部をファイル転送で使用してもかまいませんが、マルチタスクセッションの中で最も重い場合でも、その使用率が70%を超えることはありませんが、どのようなメリットがありますか? RAMに何も処理しない1.6 GBのデータを保存する方法

ファイルをコピーするだけなので、データの整合性の観点から何のメリットもありません。停電の場合、RAMまたはHDDは特に成功しません。転送中のデータを保持します。

ソースディスク(SSD)がすぐに解放されるという利点がわかりました。そのため、別のプロセスがそのディスクに対して大量の読み取り/書き込み操作を実行する必要がある場合、ファイル転送が妨げられることなく実行できますが、その場合は、15 GBすべてを最大速度でメモリにロードしてみませんか?

また、データの一部がまだメモリからハードドライブにコピーされているため、転送ダイアログが閉じた後もファイル転送が続行されるため、このプロセスはユーザーを誤解させます。これにより、データがまだ書き込まれている間にユーザーがリムーバブルドライブをプラグアウトし、リムーバブルドライブが破損する可能性があり、ハードウェアを安全に取り外すことに誰もが煩わされるわけではありません。

Windowsがそれらを異なる方法で処理し、私の最後のポイントを無効にする可能性があるため、リムーバブルドライブでこれを徹底的にテストしていないことに注意してください。

6
akukas

ドライブ間のファイル転送でRAMが使用されるのはなぜですか?

I/O操作は(ほとんどの場合)ペリフェラルとRAMの間で行われるためです。
[。

一部のシステムは、ペリフェラルからペリフェラルへの操作を実行できます(したがって、RAMにバッファは必要ありません)。ドライブからドライブへの転送を実行できるSCSIホストアダプターを見てきました(CPUとRAMオンボードプロセッサーとRAM/FIFOを使用せずに)は関与しません)。 DMAペリフェラル間転送を実行できるコントローラ。これらは例外であり、ルールでも一般的にも使用されていません。

周辺機器から周辺機器への転送を使用する場合、エラー処理は2倍複雑になるため、ハードウェアが使用可能な場合でも、OSが任意のI/O操作に使用することはめったにありません。

私の質問は、これを行う目的は何ですか?

ソースデータ(読み取られる/コピーされるファイル)は、RAMに読み込まれる必要があります。これは、コンピューターアーキテクチャの性質(DMAの使用と組み合わせて)だからです。
RAMが不足していて、OSがそれほど洗練されていなかった当時、一般的な選択は、これらの転送をできるだけ小さいバッファー(たとえば、1つのセクターまたはブロック)、または速度を最適化するバッファー(たとえば、マルチセクター転送)。
現在、比較的大きなメモリと高度なアルゴリズムを使用しているため、通常のOSは、バッファに空きメモリ/未使用メモリの一部またはすべてを使用して、このソースデータを読み取ろうとします。

そのソースデータが宛先に書き込まれた後、そのデータは破棄できます。ただし、このメモリの需要がない場合(つまり、未使用のままである場合)、このデータを破棄する必要はありません。
また、データにタグが付けられているか、またはそれが元のファイルを識別するためにカタログ化されている場合、このデータはキャッシュされ、再利用される可能性があります。

このファイルのキャッシュは基本的に無料であることに注意してください。このキャッシュを取得するためにOSに追加のI/Oの負担はありませんでした。唯一のコストは、コンテンツのカタログを維持することです。これは、キャッシュヒットが発生したときにオフセットできます(再読み取りのI/Oを節約できます)。


したがって、ファイルのキャッシュは、それらのファイルの通常の読み取りの自由な結果です。一時的に、アイドル状態で未使用のメモリを使用します。このキャッシュを維持するためのOSのオーバーヘッドは通常最小限であり、キャッシュヒットが発生したときに返済されます。


また、データの一部がまだメモリからハードドライブにコピーされているため、転送ダイアログが閉じた後もファイル転送が続行されるため、このプロセスはユーザーを誤解させます。

これは、ユーザーに対するシステムの可用性と保証された書き込みの間のトレードオフです。
ブロックされた同期書き込みを実行するようにプログラムを作成できます。これにより、各物理書き込み操作が完了するのを待ってから、プログラムが続行されます。または、プログラムは、賢明な時点で、sync()または同様のシステムコールを呼び出すことにより、物理的な書き込み操作が完了するのを待つことができます。

書き込み(またはコピー)操作では、すべての書き込み操作が少なくともキューに入れられるとすぐに(つまり、完了していない可能性があります)、最新のOSがユーザーに利用可能になろうとします。
これにより、マルチタスクが容易になります。そのドライブにさえ関与していない何か他のことをしたいのであれば、なぜそのドライブでの操作が完了するのを待たなければならないのですか?
トレードオフは、教育を受けたユーザーである必要があり、(ストレージ)デバイスを適切にアンマウントする必要があることを認識している必要があることです。

この可用性機能は、上記のファイルキャッシュ機能とは何の関係もありません。利用可能/可能であれば、もう一方に影響を与えることなく一方を無効にすることができます。



以下の場合、データ転送はRAMバッファを使用できません。
1。プログラムされたI/O(CPUを使用)は、入力操作と出力操作の両方に対して実行されます。
[〜#〜]および[〜#〜]
2。入力と出力のデータ転送速度と転送サイズは一致しています。
[〜#〜]および[〜#〜]
3。どちらのデバイスも文字指向であり、ブロックデバイスではありません。 (これはディスクドライブを除外します。)

ただし、DMAまたはバスマスタリングが利用可能な場合、OSがプログラムドI/Oの使用を選択することはめったにありません。また、入出力転送の2倍の複雑さを処理するようにプログラムされる可能性もありません。

2
sawdust