web-dev-qa-db-ja.com

SSDでのNTFS圧縮-アップとダウン

このトピック は、ディスクアクセスパフォーマンスを向上させる方法としてHDDでのNTFS圧縮について説明し、それよりも頻繁にパフォーマンスが悪いと結論付けています。しかし、私は常に圧縮をスペースを節約する方法と見なし、その効果を学びました。そして今、私はスペースが高価でパフォーマンスが低下するSSDを持っています。 g。 1つではなく2つのクラスターを読み書きする場合は、はるかに低くなります。

一方、SSDはHDDよりもはるかに高速であるため、スループットが高くなるとCPU使用率も高くなると思います。これは問題になりますか?この件に関して他に何か考えはありますか?

省スペース効果が好きです。それほど大きくはありませんが、そこにあります。ただし、パフォーマンスが気になる場合は、オフにします。

enter image description here

12
Violet Giraffe

Microsoft これはブログで少し前に書きました

NTFSは、データストリームをCUに分割することでファイルを圧縮します(これは、スパースファイルが機能する方法に似ています)。ストリームのコンテンツが作成または変更されると、データストリーム内の各CUは個別に圧縮されます。圧縮の結果、1つ以上のクラスターが減少した場合、圧縮されたユニットは、圧縮された形式でディスクに書き込まれます。次に、(以下の例に示すように)整列を目的として、まばらなVCN範囲が圧縮されたVCN範囲の最後に追加されます。データが十分に圧縮されておらず、サイズが1クラスターだけ削減されない場合は、CU全体が圧縮されていない形式でディスクに書き込まれます。

この設計では、ファイル内の単一のVCNにアクセスするために1つのCUのみを解凍する必要があるため、ランダムアクセスが非常に高速になります。残念ながら、シーケンシャル操作(バックアップなど)を実行するには多くのCUの解凍が必要なため、大規模なシーケンシャルアクセスは比較的遅くなります。

そして KB記事はこれを書いています

NTFSファイルシステムの圧縮はディスク領域を節約できますが、データの圧縮はパフォーマンスに悪影響を与える可能性があります。 NTFS圧縮には、次のパフォーマンス特性があります。圧縮されたNTFSファイルを別のフォルダにコピーまたは移動すると、NTFSはファイルを解凍し、ファイルを新しい場所にコピーまたは移動してから、ファイルを再圧縮します。この現象は、ファイルが同じコンピューター上のフォルダー間でコピーまたは移動された場合でも発生します。圧縮ファイルもネットワーク経由でコピーする前に展開されるため、NTFS圧縮ではネットワーク帯域幅を節約できません。

NTFS圧縮はプロセッサ集中型であるため、パフォーマンスコストは、プロセッサに頻繁にバインドされるサーバーでより顕著になります。大量の書き込みトラフィックがある負荷の高いサーバーは、データ圧縮の候補としては適していません。ただし、読み取り専用サーバー、ほとんど読み取り、または負荷の軽いサーバーでは、パフォーマンスが大幅に低下することはありません。

トランザクションログを使用し、データベースまたはログに常に書き込むプログラムを実行する場合は、圧縮されていないボリュームにファイルを保存するようにプログラムを構成します。プログラムが圧縮ファイルのマップされたセクションを介してデータを変更する場合、プログラムは、マップされたライターがそれらを書き込むよりも速く「ダーティ」ページを生成できます。この問題のため、Microsoftメッセージキュー(MSMQとも呼ばれます)などのプログラムは、NTFS圧縮では機能しません。

ユーザーのホームフォルダーと移動プロファイルは多くの読み取りと書き込み操作を使用するため、ユーザーのホームフォルダーと移動プロファイルを、親フォルダーまたはボリュームルートにNTFS圧縮されていないボリュームに配置することをお勧めします。


まとめ:

読み取りは高速であるため、変更されない小さなファイルのみを読み取ります(読み取りのみで、書き込みは行いません)。ただし、書き込みには、非圧縮と、CPUパワーを必要とする新しい圧縮が必要であり、ストレージタイプはそれほど重要ではありません。

12
magicandre1981

クラウディオが多くのことを詳細に言っているので、私も彼の意見を再開します。彼が言ったことを試した後、私は同じ効果を見ました。

SSDの場合、NTFS圧縮は使用しないでください。

今、私はそのような肯定のいくつかの動機を列挙します:

動機Nº1:2つの書き込みを行うため、SSDムッシュをより速く殺します。 NTFS圧縮では、圧縮を開始する前に常に圧縮されていないデータをRAMに書き込んでから、少なくとも4KiBのゲインがある場合にのみ圧縮データを再書き込みします。

動機Nº2:SSDでNTFS 4KiBクラスターを使用すると、SSD速度の50%が失われます。ベンチマークを確認すると、128KiBブロックによってSSDが4KiBブロックを使用する場合より2倍高速になり、NTFS圧縮は4KiBクラスターNTFSパーティションでのみ使用できます。

動機Nº3:オンザフライで圧縮または暗号化、あるいはその両方と見なされるコンテナーを作成できるコンテナー(PISMOファイルマウントなど)があります。このようなコンテナーはRAMで圧縮を行い、送信しません。圧縮された形式で再書き込みする前に、非圧縮データをディスクに書き込むと、NTFSよりもPISMOの圧縮率が向上します。

より多くの動機がありますが、それが最も重要なことです。

OtrerポイントはSPEEDであり、すべての圧縮はCPUで行われるため、非常に高速なCPUがない場合(マルチスレッドが一部のコンテナーで使用されているのに対し、NTFSではモノスレッドが使用されます)の読み取り/書き込みは非常に遅くなります。圧縮されたとき;最悪の場合、非常に高速なCPUを使用できますが、それが他の目的(レンダリング、トランスコーディングなど)で使用されている場合、圧縮用のCPUが残っていないため、パフォーマンスが低下します。

NTFS圧縮は、CPUがあまり使用されていない従来の低速ディスクにのみ適していますが、各64​​KiBブロック(圧縮されているかどうかにかかわらず)は64KiBの倍数の位置に書き込まれるため、各書き込み後に(ファイルレベルで)最適なデフラグが必要です。そのようなフラグメントをパックする唯一の方法は、圧縮(または圧縮フォルダーに書き込む)後にそのようなファイルのデフラグを実行することです。

P.D .:仮想マシン内ではなく、実際のハードウェア上のWindowsについて話していることに注意してください。重要なのは、物理メディアに書き込むユーザーです。他のキャッシュレイヤーには、影響を軽減して大幅に改善できるキャッシュレイヤーがあります。

6
Laura

SSD以外での市長の問題について誰も話しません。それは断片化です。

各64KiBブロックは圧縮されていない場所に書き込まれますが、圧縮可能であるため、少なくとも<= 60KiBである場合、64KiB未満で書き込み、ビットネストブロックは、前のブロックがなかったかのように移動します圧縮するため、多くのギャップが発生します。

任意のWindowsシステムのvirtuslマシンのマルチギガバイトファイルでテストします(50%に削減される傾向がありますが、10000を超える巨大なフラグメントがあります)。

そしてSSDについては言われていないことがあるのですが、一体どうやってそれを書くのですか?つまり、非圧縮で書き込み、圧縮バージョンで上書きする場合(64KiBメガブロックごと)、SSDの寿命が大幅に短縮されます。しかし、圧縮形式で直接書き込む場合、SSDライブは長くなるか短くなる可能性があります... 64KiBを一度に書き込む場合は長く、64KiBを4KiBで書き込む場合は長くなるため、このような64KiB(圧縮形式)は、64/4 = 16倍です。

パフォーマンスの低下は、圧縮/圧縮解除に必要なCPU時間が、4KiBブロックを書き込む必要がない場合に得られる時間よりも大きいために発生します...したがって、非常に高速なCPUと非常に遅いディスク圧縮を使用すると、書き込みと読み取りの時間が短縮されますが、SSDの場合非常に高速でCPUが非常に遅いので、書き込みがはるかに遅くなります。

私がその時点で意味する高速または低速のCPUについて話すとき、CPUは「数学」またはその他のプロセスによって使用されている可能性があるため、紙のCPU仕様ではなく、常に無料のCPUについて考えます。ディスク/ SSDについても同様です。複数のプロセスで使用されている。

7ZipがLZMA2を使用して別のディスクから巨大なファイルを書き込んでいる場合、CPUを大量に使用するため、同時にNTFS圧縮ファイルをコピーしている場合、CPUの空き容量がないため、NTFSがない場合よりも遅くなります7ZipがCPUの使用を終了するとすぐに、そのようなCPUはNTFS圧縮をより高速に実行できるようになり、その時点でNTFS圧縮はより高速に処理を実行できます。

個人的にはNTFS圧縮を使用することはありません。PISMOファイルマウントPFOコンテナーを好んで使用します(圧縮あり。また、オンザフライで、アプリに対して透過的に暗号化できます)。これにより、読み取り中に圧縮率が大幅に向上し、CPUへの影響が少なくなります。オンザフライで書き込み、使用前に解凍する必要はありません。マウントして読み取りおよび書き込みモードで使用するだけです。

PISMOはディスクに書き込む前にRAMで圧縮を行うため、SSDをより長く持続させることができます。NTFS圧縮のテストでは、最初に非圧縮で2回データをディスクに送信し、その後、圧縮できます圧縮された形式で上書きされます。

SSDのNTFS圧縮書き込み速度が、ファイルのある非圧縮ファイルの1/2近くで、サイズの1/2近くまたはそれ以下の圧縮サイズで圧縮するよりもなぜですか? AMD Threadripper 2950(32コアおよび64スレッド)では、128GiBのRAM(高速CPU、非常に高速なCPU)を使用しているため、使用率が1%未満なので、SSDの最大セキュリティ速度よりも高速に圧縮できるCPUがたくさんあります。 64KiBブロックが圧縮されていないディスクに送信され、圧縮バージョンで上書きされた後、NTFS圧縮が開始します...ホストのLinuxとゲストのWindowsを実行している仮想マシンで実行すると、そのようなクラスターが2回書き込まれることがLinuxキャッシュから通知されます、速度ははるかに高速です(LinuxはWindowsゲストによって送信された非圧縮NTFS書き込みをキャッシュします。圧縮データで上書きされた後、Linuxは非圧縮データをディスクに送信しないため、Linux書き込みキャッシュ!!!)。

私の推奨は、NTFS圧縮を使用しないことです。ただし、仮想マシン内では、ホストがLinuxの場合はゲストがWindowsを実行し、CPUが十分に高速でない場合はCPUを使用しないでください。

最新のSSDは巨大な内部RAMキャッシュを備えているため、NTFS圧縮によって発生する書き込みと上書きはSSD内部キャッシュシステムによって軽減できます。

内部のRAM SSD内のキャッシュなしで "きれいな" SSDで行われた私のテストは、RAMキャッシュ付きのものでそれらを繰り返すと、書き込み速度は速くなりますが、思うほどではありません。

独自のテストを行い、巨大なファイルサイズを使用します(キャッシュの非表示の結果を回避するために、インストールされているtamよりも大きい)。

ちなみに、一部の人々はNTFS vompressionについて知らないことがあります... 4KiB以下のファイルは、少なくとも4KiBのサイズを縮小する方法がないため、決してNTFS圧縮を取得できません。

NTFS圧縮は64KiBのブロックを取り、それらを圧縮します。1つのクラスター(4KiB)を削減できる場合、圧縮されて書き込まれます。64KiBは4KiB(連続)の16ブロックです。

圧縮が終了したときの最終的な結果が8KiBのファイルが4KiBを超える場合、クラスターは保存されないため、圧縮されずに書き込まれます...など...圧縮は少なくとも4KiBを獲得する必要があります。

ああ、そしてNTFS圧縮の場合、NTFSはクラスターサイズが4KiBでなければなりません。

テストして試してみてください:SSDのNTFSで128KiBクラスターを使用すると、書き込みの読み取り速度が大幅に向上します。

4KiBクラスターを使用したSSD上のファイルシステムは、ほとんどの場合50%以上の速度を失っています... 512バイトから最大2MiBまでのさまざまなブロックサイズでテストしたベンチマークを参照してください。ほとんどのSSD書き込みは2倍です64KiB(または128KiB)クラスターサイズの場合の速度は、4KiBの場合よりも高速です。

SSDに本当の意味を与えたいですか?ファイルシステムでは4KiBクラスターを使用せず、128KiBを使用してください。

4KiBクラスターは、ファイルの99%以上が128KiB未満の場合にのみ使用してください。

等、等...あなた自身のケースをテストし、テストし、テストしてください。

注:128KiBクラスターでWindowsをインストールする際、または別のWindowsからコンソールモードでdiskpartを使用してシステムNTFSパーティションを作成しますが、インストーラーのグラフィカルパーツでWindowsをフォーマットしないでください(常に4KiBクラスターNTFSとしてフォーマットされます)。

私のWindowsはすべて、> 400GiB SSD(SLC)上の128KiBクラスターNTFSパーティションにインストールされています。

物事が明らかになることを願って、M $は圧縮されたNTFSをどのように書き込むかを言っていません。私のテストでは、1回だけではなく(SSDの場合はそのことに注意して)、2回書き込む(64KiB非圧縮、次に<= 60KiB圧縮)と書いています。

注意:NTFS圧縮は4KiBクラスターサイズのNTFSパーティションでしか機能しないため、WindowsはNTFS圧縮がないと言っても、いくつかの内部ディレクトリをNTFS圧縮しようとします。これは、NFTSクラスターサイズが4KiBと異なる場合にこれを回避する唯一の方法です。

2
Claudio