ドラゴンになりましょう:Windowsでのメモリの管理[2/3]



カタログ:









長い敵対を破る必要があることがわかりました。 そして、「マルチパート」トピックは評価を得るためだけに公開されていると思いました:-)



私は採石場からまっすぐに進みます。それはどこでcrash落したのか-そこに、落したので、各シリーズの追加の紹介を書くことは私の力を超えています





ページがワークセットからこれらのまさにリストにどのように分類されるかについて少し。

さまざまな方法で取得します。 その1つはすでに検討されています。誰かがプロセスのEmptyWorkingSetを明示的に呼び出しています。 これはめったに起こりません。 通常、これはいわゆるトリミングの助けを借りて起こります。



システムは、空きメモリの確立された制限のいずれかに近づくと、このメモリを解放し始めます。 最初に、システムは可能な限りワーキングセットのサイズの制限を超えたプロセスを見つけます。 これらのプロセスでは、どのページが最も使用されていないかを判断するために、ページの「エージング」プロセスが開始(エージング)されます。 その後、最も古いページがスタンバイリストまたは変更済みリストに「クリップ」されます。



同じ講義から:





この図には、アプリケーションが割り当てられたメモリを単に解放するときに発生する削除ページも示されています-ルール全体では有効ではないため、新しいメモリが同じアドレスに割り当てられている場合でも、これらのページのコンテンツでは何もできません-新しいはずですメモリ。



ページファイル



最後に、私はみんなのお気に入りのスワップファイルに到達しました。 ここのドラゴンは単に群れです。 さて、それらを取り出してみましょう。



神話:生産性を高めるには、ページファイルへの呼び出し回数を減らす必要があります。

実際、生産性を向上させるには、DISKの呼び出し回数を減らす必要があります。 ページファイルは、残りとほぼ同じファイルです。



神話:Windowsは、まだ空きメモリがある場合でも、ページファイルを使用します。

実際:ページは、変更されたリストからのみページファイルにアクセスできます。 変更されたリスト-大きくなりすぎたアプリケーションでめったに使用されないページをトリミングする場合。 ページがリセットされた後、ページはスタンバイリストに残り、再読み取りされません。 空きまたはゼロが残っている場合、メモリはスタンバイリストから取得されません(つまり、データがまったくないページがまだある場合、キャッシュされたデータは破棄されません)。 待機リストには8つの優先度レベルがあります(アプリケーション自体と、ファイル/ページの実際の使用の分析に基づいてページの優先度を動的に管理するスーパーフェッチの両方である程度制御できます)。選択の余地がない場合、Windowsはまず最低のキャッシュをドロップします優先順位。

通常モードでの30分間の作業の例を次に示します。



ファイルは名前でソートされ、kernel.etlと「Program Files」の間でpagefile.sysが存在するはずであることに注意してください。



神話:しかし、Windows自体はページファイルを使用することを認めています。

実際:上記を考慮。 ほとんどの場合、「使用」と呼ばれる可能性のあるコミットチャージについて話しますが、これは通常理解されている意味ではありません。 ほとんどの場合、必要がない場合、プライベートページ(ページファイルにリセットされる)は、変更されたリストに(たとえそこに到達したとしても)ほぼ無制限に置かれます。



神話:ページファイルを無効にすると、システムのパフォーマンスが向上します。

実際:まれに、メモリを乱用し、スレッドのページ優先度を下げないアプリケーションが応答性を低下させる可能性がありますが、ほとんどの場合、未使用の「ジャンク」をクローゼットにダンプし、解放されたストレージスペースを使用するだけでパフォーマンスが向上しますより関連性の高いデータ(それにより、ディスクアクセスの総数が削減されます)。



メモリとI / Oの優先度



書き込み/読み取りストリームのI / O優先度が低いほど、通常の操作との干渉が少なくなります(一般に、ストリーム優先度と同様に、ラウンドロビンアルゴリズムは、最高の優先度で待機する操作に使用され、帯域幅の一部が飢starと戦うための優先度が低い-ロシア語に完全に適切に翻訳されていない)。 組み込みのデフラグツールを実行します。 リソースモニターは100%のディスク使用率を示しますが、システムの応答性が失われた場合、目で確認することはできません。

メモリの優先順位についてはすでに述べました。 I / O優先度に関係なく、ページ優先度(ページ優先度)があります。 システム内の各物理ページ(正確には、各瞬間に含まれるデータ)が優先されます。 ページがスタンバイリストに移動すると、そのページは優先度に対応する8つの個別のリストのいずれかに分類されます。 優先度の高いデータを優先度の低いデータに置き換えることはできません。



プリフェッチとスーパーフェッチ



プリフェッチはXPに登場し、アプリケーションの起動を高速化する方法です。 以下は、 pfファイルの内容を表示できるユーティリティです。 実際、対応するアプリケーションが起動後最初の数秒(10秒と思われる)にアクセスするファイルの名前とオフセットがあります。 起動にはしばしばディスクからのデータの必死の読み取りが伴うため、これらの読み取りを順序付けると、ヘッドシークの回数が減り、起動が高速化されます。 SysMainサービスから機能します。 プリフェッチとスーパーフェッチに加えて、このサービスは、ReadyBoot(以前の投稿の1つで読み込みを高速化するのに役立ちました)、ReadyBoost(RAMの多いシステムではあまり役に立たないが、ローエンドシステムでは非常に有用なもの)、およびReadyDrive(そのようなReadyBoostしかし、「フラッシュドライブ」は再起動の間に削除されないという保証により-HDDをSSDに完全に置き換えることなく基本操作を大幅に加速できます-いわゆるハイブリッドまたはH-HDDHDDの価格でSSD速度を使用します)。



スーパーフェティッシュはもう少し複雑です。 その目的を理解している人はほとんどいませんが、誰もがこのサービスをアイドル中にメモリを使用し、ディスクから「何か」を読み取ると非難しようと努力しています。 読み始めるには:



それはバックグラウンドの優先度で実行され、使用時にはほとんど感知されません。 点滅するLEDが迷惑な場合は、電気テープで密封することができます。 さらに、この読み取りにより、キャッシュに必要なデータがロードされます(ユーザーがアクティブなディスク操作を行わなくても、ロード/ウェイクアップ後にスタンバイの増加を確認できます)。 このデータは現在、低い優先度で適切な順序でダウンロードされ、ある種のアプリケーションを起動するときに数秒と頭の激しい動きを節約します。 ほとんどの場合、6-7の優先度レベルでデータをロードすることです(はい、低優先度のI / O操作はスタンバイ高レベルリストのページをロードするために使用されます)。何に。



このサービスはメモリを使用して、ディスク/メモリページへのアクセスの履歴を保存します。 定期的に(アイドル状態で)、彼はこのデータを分析し、長期的なアクションプラン(および次のブートのブートプラン)を作成するためにさらに多くを割り当てます。 さらに、ページの優先順位を動的に再配布します。 たとえば、よく使用するサブネット(powershellの形式)で使用している自宅のマシンで何が起こりますか。



リストには、1〜6の優先度を持つページが含まれます(7は、変更されない特別な優先度です)。 そして、ここに新たにインストールされた仮想マシンがあり、その前にpowershellが数秒前に1回実行されました:



スーパーフェッチはこのファイルの処理方法をまだ知らないため、すべてのページはこのファイルをダウンロードしたストリームの優先度に対応するレベルにあります。 そして、数時間の非アクティブ状態(タスクバーの最小化されたウィンドウのみ)後の同じ仮想マシン上の同じファイルのキャッシュは次のとおりです。



すべてのページが優先度を下げていることがわかります。



大きなファイルをコピーする



ここではすべてが簡単です。 ソースのコピーを開始します。 コピーは通常のI / O優先度で行われます:



ストリームのページ優先度を保存しませんでしたが、「ノルム」、つまり5もあると自信を持って言えます。これは遅かれ早かれファイルをコピーすると他の全員がキャッシュから削除されることを意味しますか? チェック:



読み取りは優先度5で行われましたが、すべてが優先度2でキャッシュされました。問題は何ですか? しかし、ここにあります:





コピー操作の場合、FILE_FLAG_SEQUENTIAL_SCANフラグが使用されます。これにより、基本優先度と比較してキャッシュの優先度が低くなり、キャッシュにVACBを1つだけ使用して、先読みがより積極的になります。



All Articles