NTFS圧縮を使用するファイルはディスクまたはメモリに解凍されますか?


15

WindowsではNTFS解凍はどのように機能しますか? Microsoftによると、NTFS解凍はファイルを展開して使用することによって行われます。それは正しいようですが、私の質問は、このプロセスが技術的にどのように行われるかです。

Windowsは圧縮ファイルをメモリにロードし、それをメモリ内で展開し、そしてメモリから読み取るのですか?それとも、圧縮ファイルをメモリにロードし、それをディスクまたはメモリ内に展開し、ディスクに書き込み、そして次に読み取るのでしょうか。

私はおそらくNTFS圧縮を使用することによって私のコンピューターのパフォーマンスを向上させることができるかどうかを把握しようとしています。このように、多くの書き込み操作を処理できない低速ディスクドライブやSSDでは、書き込みおよび読み取りに必要なデータが少なくなり、ほとんどの場合アイドリングしている強力なプロセッサによってファイルが解凍され、ストレージ速度と状態が向上します。 。


1
私はあなたの質問を編集して、ファイルがメモリとディスクのどちらに解凍されるのかに焦点を当てます。そのように、それはの複製として閉じられる可能性がはるかに少ないでしょう。 この他の質問 それは他の側面についてもっと触れます。
Ben N

回答:


19

Windowsはファイルをメモリに解凍します。それをディスク上で実行すると、速度の向上は完全になくなり、不要なディスク書き込みが多く発生します。の終わりを参照してください NTFSのスパースファイルと圧縮に関するマイクロソフトのブログ記事

  1. NTFSはどの圧縮単位がアクセスされているかを判別します。
  2. 圧縮単位の割り当てられた範囲全体が読み取られます。
  3. ユニットが圧縮されていない場合は、手順5に進みます。それ以外の場合は、NTFSは圧縮解除されたCUをディスクに書き戻すために必要なスペースを予約しようとします(割り当てはしません)。ディスクに十分な空き領域がない場合、アプリケーションは読み取り中にERROR_DISK_FULLを受け取る可能性があります。
  4. CUは解凍されます メモリ内
  5. 圧縮解除されたバイト範囲はキャッシュにマップされ、要求側アプリケーションに返されます。
  6. ...

もちろん、メモリが不足している場合、解凍プロセスで使用されるメモリによって他のメモリがページアウトされ、ページファイルのディスクに書き込まれる可能性があります。幸いなことに、あなたのプログラムが実際に読んでいるセクションを含むチャンクだけが解凍されます。あなたが数バイトしか必要としないならば、NTFSは全体を解凍する必要はありません。

あなたのSSDが速いなら、あなたはおそらくNTFS圧縮からスピードの向上を得ることはないでしょう。プロセッサがデータの解凍に費やした時間とディスクが圧縮データの読み取りに費やした時間の合計が、SSDが圧縮されていないデータの読み取りにかかる時間よりも長くなる可能性があります。それはあなたが扱うファイルのサイズにもよります。圧縮ファイルの最小サイズは、クラスタサイズに応じて8 KBから64 KBの範囲です。このサイズより小さいファイルはまったく圧縮されませんが、ごくわずかな簿記が追加されます。

圧縮ファイルに大量の書き込みを行う場合は、使用されている圧縮アルゴリズム(LZ)のために速度が大幅に変動することがあります。

参考文献: NTFS圧縮はパフォーマンスにどのように影響しますか?


1
> メモリが不足している場合は、解凍されたデータをページアウトしてページファイルのディスクに書き込むことができます。 スマートアルゴリズムは、(デ)圧縮がページングよりも桁違いに速いという仮定のもとで、単純にデコンプレッションされたデータを捨て、次のアクセスで再度デコンプレッションを実行するでしょう。実際、それは既にページキャッシュで起こることです - そして私は、Windowsが単にこの同じ圧縮されたデータを同じキャッシュに入れることを期待しています。 (Windowsでは、 すべて ファイルr / wは、ライトスルーの場合でも、ページキャッシュを通過します。
Bob

確かに、それはおそらくそれがすることです。答えのその部分を調整しました、ありがとう。
Ben N

「展開されたバイト範囲は、 キャッシュ 「キャッシュの定義がここにあるかどうか知っていますか?ただ興味があります-----そうでなければ、NTFSは圧縮解除されたCUをディスクに書き戻すために必要なスペースを予約しようとします」。 Microsoftは、ファイルの変更によって、圧縮後の合計サイズが元の圧縮前のサイズを超えるサイズを追加することはないと想定していますか?厄介な仮定のようです。
CausingUnderflowsEverywhere

要約すると、ディスクからの読み取り、 - > MFTを読み取って、圧縮解除して書き込むのに十分なスペースを確認してください。メモリ内で解凍します - >要求しているアプリケーションのキャッシュに入れますか?アプリケーションのプライベートバイトについて話していますか?ちょっと興味があるんだけど。 ----------これは私たちがここで見ているものですか?
CausingUnderflowsEverywhere

1
@CausingUnderflowsEverywhereそのキャッシュは IOキャッシュ これにより、複数の読み取りをすべてディスクで処理する必要がなくなります。 NTFSは新しいデータが既存のCUの中に収まることを望みますが、そうでない場合はスペースがあることを確認します。私が理解しているのは、IOキャッシュは1つのアプリケーションに固有のものではないということです。ただし、データは要求されたときにプログラムの専用メモリーに格納されます。
Ben N
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.