web-dev-qa-db-ja.com

Windowsはどのようにして完全なRAM=をハイバネーションファイルに高速でダンプすることができますか?

Microsoft Windowsでの休止状態の手順を説明する article を実行していました。私が得た主なポイントは

  1. Windowsは、全体をRAM(おそらく処理した後)hiberfil.sysファイル。
  2. 起動時にハイバネーションファイルが読み込まれ、内容がRAMにロードされます。

私の質問は、サイズが1 GBのファイルを通常コピーしている場合、完了するまでに約2分かかります。

ただし、Windowsがハイバネーションファイルを書き込んでいるとき(ハイバネーション手順の間)、プロセス全体に10〜15秒かかる場合があります。なぜこのような違いがあるのですか?書き込み速度は?

私のRAMサイズは4 GBです。(私は高速起動テクノロジについて話していません。)

ベンチマーク:

  1. 1 GBのファイルをディスク1からディスク2(外部)にコピーする:2.3分。
  2. システムを休止状態にする:15秒。
65
coder

これはおそらく3つに分かれた答えです。

ここで機能している可能性のあるものの1つは、アプリケーションを効果的に閉じ、ログオフしてからオペレーティングシステムのコアを休止状態にするWindowsの新しいハイブリッドシャットダウンです。このデータがすでに保存されている場合は、潜在的に「再休止」する必要がないことを意味します。

2つ目は、休止状態では、スワップファイルにページアウトされている、または使用されていないメモリページを保存する必要がないことです(これは、スワップファイルを積極的に埋める1つの理由ですおよびメモリにもデータを保持します)。

3番目は、 休止状態のファイルのデータも圧縮されている です。それを2番目のポイントと組み合わせて、非常に圧縮可能なデータ(実行可能ファイルは一般に十分に圧縮されます)を含むエクスポートするデータのセットが少ない場合、休止状態ファイルに出力されるデータの量は、ワーキングセットよりも大幅に少なくなります。データの。コメントに記載されているように、ファイルキャッシュやその他の不要なバッファデータは、ハイバネーションファイルにダンプされるデータの量を減らす悪影響を与えずに簡単に破棄できます。

さらに、現在のハードドライブは非常に高速です。 100 MB /秒程度の持続書き込みがあるディスクを使用すると、4 GBのRAM)を1分以内に書き出すことができます(非圧縮)。休止状態を次のように行うことができます。すべてのユーザープロセスを一時停止した後、CPUを一時停止する前に、OSは通常、ディスクの完全な書き込み速度になります。これは、単純なベンチマークでは実現できないことの1つであり、ディスクからディスクへのコピーは、単に書き込むよりも遅くなる可能性がありますRAMディスクに出力します。

これらを組み合わせると、ハイバネーションファイルに書き込まれるデータの量は非常に少なくなる可能性があり、1 GB程度になる可能性があり、おそらく1つの大きな連続ブロックに10秒未満で書き込まれます。

45
Mokubai

まず、保存する必要があるRAMの量は驚くほど少ないです。実際には、マップされたダーティページのセット( "レイジーライトバック")だけでなく、すべてのプライベート実行可能コードに書き込まれ、再配置されたページを書き込む必要があります。

  • 実行可能ファイルの.textセグメントは、常にファイルマッピングによってサポートされています。これは、少なくともsomeDLLにも当てはまります(すべてではありませんが、それらを再配置する必要があるかどうかによって異なります)。
  • ファイルマッピングによって同様にサポートされているメモリは破棄できます(CoWまたはRWおよびダーティではないと想定)。
  • 遅延ライトバックは引き続き発生する必要がありますが、それ以外の場合は、キャッシュを破棄できます。
  • 割り当てられているが書き込まれていないメモリ(通常、アプリケーションデータの大部分!)は、ゼロページによってサポートされており、破棄できます。
  • 「スタンバイ」ステータスにあるメモリページの大部分(Windows上の実際のプロセスごとの常駐ワーキングセットは驚くほど小さく、わずか16MB)ある時点でバックグラウンドでページファイルにコピーされ、破棄することができます。
  • グラフィックカードなどの特定のデバイスによってマップされたメモリの領域は、(おそらく)保存する必要がない場合があります。ユーザーは、8GiBまたは16GiBをコンピューターに接続することに驚かれることがあります。1GiBまたは2GiBは、明確な理由もなく単に「なくなった」だけです。主要なグラフィックAPIは、バッファの内容が「特定の条件下」で無効になることができるアプリケーションを必要とします(これが何を意味するかを正確に伝えることなく)。したがって、グラフィックスドライバーによって固定されているメモリも破棄されることを期待することは不合理ではありません。とにかく、画面が暗くなるでしょう。

次に、ファイルをコピーするのとは逆に、保存する必要があるRAMページのセットをダンプすることは、ドライブの観点からは、単一の連続した連続した書き込みです。Win32API ユーザーレベル関数 を公開し、この操作そのものを実行します。収集書き込みはハードウェアによって直接サポートされ、ディスクが物理的にデータを受け入れることができるのと同じ速さで動作します(コントローラーはDMAを介してデータを直接プルします)。
これが機能するためのいくつかの前提条件(配置、ブロックサイズ、ピン留めなど)があり、キャッシングではうまく機能せず、「レイジーライトバック」などはありません(これは非常に通常の操作での最適化)。
それが、すべての書き込みではないわけではない理由です。ただし、システムが休止状態ファイルを保存しているときは、すべての前提条件が自動的に満たされ(すべてのデータがページに揃えられ、ページサイズが設定され、固定されています)、コンピューターはすぐにオフになるため、キャッシュは関係なくなりました。

第三に、単一の連続した書き込みを行うことは、回転ディスクとソリッドステートディスクの両方にとって非常に有利です

スワップファイルとハイバネーションファイルは、通常、ディスク上に作成および予約された最も古いファイルの一部です。通常、フラグメントは1つ、多くても2つです。したがって、セクターが損傷し、ディスクが物理セクターを再割り当てする必要がない限り、logical順次書き込みはphysicalに変換されます回転ディスクへの順次書き込み。

大量の連続した連続したデータが書き込まれている場合、ディスク上で読み取り-変更-書き込み操作は必要ありません。この問題は、非常に小さい単一のセクターを書き込むことができる回転するハードディスクではそれほど顕著ではありません(キャッシュが通常防止する単一のバイトを書き込まない場合、デバイスは元のコンテンツをフェッチして変更されたバージョンを書き戻す必要はありません)。 。
ただし、これはSSDで非常に目立つものです。ここで、すべての書き込みは、たとえば512kBブロック(通常の数ですが、それよりも大きい場合があります)は、コントローラーによって読み取られ、変更され、別のブロックに書き戻される必要があります。原則として、フラッシュディスク上のより小さなユニットに書き込むことはできますが(overwrite)できませんが、消去できるのは巨大なブロックのみであり、ハードウェアの動作です。これが、SSDが巨大なシーケンシャル書き込みではるかにうまく機能する理由です。

31
Damon

RAM=休止状態時に全体をダンプしません。

RAMはすでにディスク上に複製されています。これにより、休止状態がすばやく発生するだけでなく、新しいプログラムがメモリをすばやく利用できるようになります(そのため、迅速に起動します)。

したがって、4GBのごく一部を書き込むだけでよく、10〜15秒で実行できます。

Microsoft から:

RAMが不足している場合(たとえば、Committed BytesがインストールされているRAMより大きい場合)、オペレーティングシステムはインストールされているRAMアクティブに使用されていない仮想メモリページをページファイルにコピーすることにより、すぐに使用できます。したがって、このカウンターはゼロに到達せず、システムのRAMが不足しているかどうかを必ずしも適切に示しているわけではありません。

10
Peter Crotty

上記のすべてに加えて、他にもいくつかの要因があると思います。

1つは、ファイルをコピーするときに、ファイルを読み書きする必要があることです。ハイバネーションでは、ファイルの書き込みのみが必要です。それは、定義により、すでに記憶にあります!

これと密接に関連して、メモリを節約するためにファイルの読み取りと書き込みを同時に行う場合、プロセスは次のとおりです。チャンクの読み取り、チャンクの書き込み、ディレクトリの更新(新しいサイズを表示)。チャンクの読み取り、チャンクの書き込み、ディレクトリの更新。

ディスクのある部分から別の部分に移動するたびに(たとえば、ファイルaを読み取ってファイルbを書き込み、ファイルbを書き込んでディレクトリを書き込み、ディレクトリを書き込んで次のチャンクを読み取る)、ディスクはシークする必要があります-ヘッドを移動します。ヘッドが落ち着くまで待ち、ディスクの正しい部分が来るまで待ちます。これは、ソリッドステートディスクの利点の1つです。シークにはまったく時間がかかりません。休止状態になると、データはエンドツーエンドで書き込まれます。ハイバネーション(スワップ)ファイルは事前に割り当てられているため、ディレクトリを更新する必要はありません(ハイバネーションファイルのサイズは変更せず、内容のみを変更します)。

そして最後に、あなたのコンピュータは他のすべてのタスクを一時停止しました-これはそれが行っている唯一のことです(これが大きな違いをもたらすとは思えませんが、いくつかのことをするのは間違いありません!)。メモリ管理やタスクの切り替えなども中断されます。

2
AMADANON Inc.

これはおそらくRAMがハードディスクよりもはるかに速い入力/出力速度を持っているため、RAMディスクは読み込むことができます。

ファイルをコピーするときは、さまざまな要因によっても制限されます-ディスクの速度、同じディスクに読み書きする必要がある場合は時間がかかります、接続の制限された速度(外部ドライブへの場合)、チェック何も上書きしないなど

0
Wilf