Jump to content 日本-日本語
日本HPホーム 製品 & サービス サポート & ドライバー ソリューション ご購入方法
≫  お問い合わせ

製品とサービス >  ソフトウェアとOS >  HP- UX Developer Edge

HP-UXメモリ管理 ホワイト・ペーパー バージョン1.4

ページ可用性の維持
HP-UX/Integrityサーバー お問い合せ
コンテンツに進む

ページ可用性の維持


次の2つの計算要素によりページ可用性が維持されます。

  • あらゆるページング・イベントの原因になるページングしきい値。
  • 実際のページングと非アクティブ化を処理するvhandおよびschedデーモン(システム・プロセス)。
vhandによる空きページの監視によって、しきい値を上回る空きページ数が維持され、デマンド・ページング用に十分なメモリが確保されます。vhandは、このページ方式の全体的な状態を管理します。schedは、メモリ内の使用可能ページ数が一定のレベルを下回ると有効になります。後に、vhandとschedの動作について説明します。

注: schedプロセスの通称はスワッパーです。

ページングしきい値


メモリ管理では、さまざまなページング・アクティビティの原因になるページングしきい値が使用されます。次の図は、使用可能メモリの全範囲と、メモリ・レベルが各ページングしきい値を下回った場合に発生するページング・アクティビティを示しています。

図25 システムの使用可能メモリ
図25 システムの使用可能メモリ

freememという値は、空きページの総数を表します。

調整可能な3つのページングしきい値がsetmemthresholds()ルーチンにより初期化されます。

表19 setmemthresholds()ページングしきい値

ページング
しきい値
意味
lotsfree ページ内で指定される十分な量の空きメモリ。このしきい値を上回ると、ページング・デーモンによるページのスチール(流用)が開始される。
desfree ページ内で指定される、望ましいメモリ量。このしきい値を下回ると、ページング・デーモンによるページのスチールが開始される。
minfree ページ内で指定される最低限のメモリ量。空きメモリがこのしきい値を下回ると、sched()が、システムがメモリを求めており、プロセスが実行可能かどうかにかかわらずプロセス全体を非アクティブ化することを認識する。

gpgslimページングしきい値


gpgslimページングしきい値は、vhandによりページングが開始されるポイントです。gpgslimは、システムの要求に応じて動的な調整を行います。このしきい値には幅があり、その上限はlotsfreeであり、下限はdesfreeです。lotsfreeとdesfreeは両方とも、システム起動時にシステム・メモリのサイズにもとづいて計算されます。

システムのブート時に、gpgslimはlotsfreeとdesfreeとの差の1/4のポイントに設定されます(desfree +(lotsfree - desfree)/4)。システムの実行中に、この値はdesfreeとlotsfreeの間で変動します。使用可能メモリの合計とI/O用に割り当てられたページ数(すぐに解放される)がgpgslimを下回ると、このしきい値を上回る使用可能メモリを確保するために、ほとんど使用されていないページのエージングとスチールがvhandにより開始されます。

システムは、gpgslimレベルの空きメモリを維持しようとします。十分なメモリが確保されている場合、より多くのページを解放する必要がないため、gpgslimは低下し始めます。メモリが不足すると(つまり、freememが頻繁にゼロに達すると)、gpgslimが上昇して、早めにページングが行われ、freememが頻繁にゼロに達しないようにします。

freememがminfreeまで低下すると、プロセス全体の非アクティブ化が開始されます。

メモリしきい値の調整方法


ページングしきい値は、次のように設定されます。

表20 ページングしきい値

しきい値 基本値 初期freemem
< 2GBの場合の限度
初期freemem
の2GBごとの追加量
lotsfree freememの1/16 32MB 32MB
desfree freememの1/64 4MB 8MB
minfree desfreeの1/4 1MB 4MB

ページングの起動方法


ルーチンschedpaging()が定期的に実行され、空きメモリと許容メモリの合計(freemem + parolemem)がlotsfreeを下回るとvhandが起動されます。schedpaging()が実行される頻度は、vhandrunrateと呼ばれます。この調整パラメータは、デフォルトで1秒間に8回実行されるように設定されています。

vhandは、reserve_freemem()とallocate_page()によっても起動できます。

reserve_freemem()は、メモリ予約のために呼び出されるルーチンです。十分なメモリを予約できず、freemem + parolemem < gpgslimである場合に、このルーチンはvhandを起動します。

allocate_page()は、実際にメモリを割り当てるために呼び出されるルーチンです。待機できない(割り込みスタック上で実行されていることなどが理由で)コードによって呼び出された場合、このルーチンは要求されたメモリを見つけることができず、 vhandを起動します。また、要求されたメモリを見つけることができなかった場合、呼び出し側が待機できるかどうかにかかわらずunhashdaemonを起動します。

ページアウト・デーモンvhand


vhandの機能は、最近の参照頻度が最も低いページを解放して使用可能メモリを確保することです。また、カーネル・メモリ・アロケータ空きリストのガベージ・コレクションなど、メモリ可用性の維持に関する機能も果たします。

2針クロック・アルゴリズム


vhandでは、2針クロック・アルゴリズムを利用して、解放するページが決められます。概念的には、このアルゴリズムには、すべてのメモリを通過する2つの針(「エージ針(age hand)」と「スチール針(steal hand)」)が存在します。エージ針は、各ページを「最近参照されていない」とマークします。スチール針は遅れて進み、参照されたビットをエージ針がクリアして以降、各ページがアクセスされたかどうか(「最近参照された」とマークされているかどうか)チェックします。アクセスされていないページをスチールする(ページ・アウトし、そのメモリを別のユーザーが使用できるようする)ことができます。

実際の実装では、vhandが、アクティブなpregionリストと呼ばれるpregionの二重リンク・リストに従ってメモリを通過します。vhandは、起動されるたびにすべてのpregionを通過するわけではなく、通常は各pregion内の一部のページのみ調べます。ファイル・システムのバッファ・キャッシュに使用されるメモリはpregionに関連しないので、vhandのスキャン用のリストにメモリを入れるために、bufcache_pregと呼ばれる特別なダミーpregionが使用されます。

すべてのページを単にスキャンする(たとえば、pfdatを使用して)のではなく、pregionを使用することの利点は、カーネル・メモリとすでに空いているメモリが自動的にスキップされることです。

ただし、取得したすべてのメモリが単一のプロセスに属するという短所があります。つまり、スチール針がそのプロセスのpregionに到達すると、スチールされるすべてのページがその1つのプロセスから取得され、そのプロセスのワーキング・セットでページバックが頻繁に発生し、スラッシング状態になります(これが特に悪い状態になるのは、プロセスがたまたま対話的になってユーザー入力を待機する場合です。ユーザーは、プログラムがマウスの動きに応答する前に多数のページインを待つことを望みません)。このような理由から、各pregionの一部のみが、通過ごとにエージングまたはスチールされ、vhandがアクティブなpregionを複数回通過する必要があるのです。

両針間の適切な距離を維持することが重要です。距離が近すぎると、実際には常に使用されているページがスチールされます。距離が遠すぎると、同じスチール率を維持するために両針がより速く動く必要があります。これは、vhandがより多くのCPU時間を消費することを意味します。使用可能なページング・バンド幅、スチールする必要があるページ数、すでに解放のスケジュールが決まっているページ数、およびvhandの実行頻度にもとづいて、カーネルが両針間の適切な距離を自動的に維持します。

表21 vhandで使用されるpregion要素

要素 目的
p_agescan 最後のエージ針の位置
p_stealscan 最後のスチール針の位置
p_ageremain エージングされる残りのページ
p_bestnice 基礎となる領域を共有するすべてのプロセスの最適なnice値
p_forw、p_back アクティブなpregionリスト内のリンク

最近参照されていないメモリ・ページを検索し、それらのページを二次記憶領域(スワップ・スペース)に移動するために、2つの針が物理メモリのアクティブなpregionリンク・リストを巡回します。エージ針が通過した時点からスチール針が通過する時点までに参照されなかったページがメモリから追い出されます。両針は、メモリの必要量に応じて決まる可変速度で回転します。

vhandデーモンは、使用可能な空きメモリ量を判断してページングの開始タイミングを決めます。空きメモリがgpgslimしきい値を下回ると、ページングが行われます。vhandは、供給できるメモリ量をgpgslimまで戻すために十分なページを解放しようとします。このページ・デーモンは、ページをスチールする必要がないほど十分なメモリがある場合に起動された場合でも、ページのエージング(つまり、参照ビットのクリア)を続けます。ただし、このような状況で頻繁に起動されることはありません。

vhandに影響する要因


vhandは、さまざまなワークロード、一時的な状況、およびメモリ構成に反応します。pregionからエージングおよびスチールを行うとき、vhandは次の処理を行います。

  • 各pregionの一定の部分をエージングする。
  • pregionのフィールドp_agescanを使用して、最後のエージ針の位置を追跡する。
  • pregionのフィールドp_ageremainを使用して、エージングする残りのページを追跡する。
  • pregionのフィールドp_stealscanを使用して、最後のスチール針の位置を追跡する。
  • 有効なページをもたないvfd/dbdペアをスワップに追い出す。
エージ針がpregionに達すると、次のregionに移動する前にページの一定の部分(デフォルトでは、領域の総ページの1/16)をエージングします。p_agescanタグにより、エージ針が、前回の通過中に停止したpregion内の位置に移動できます。p_ageremainが、次のpregionに移動する前に1/16の部分を満たすためにエージングする必要があるページ数を示します。

スチール針は、pregionのフィールドp_stealscanを使用してpregion内のスチール針自身の位置を決め、最後にエージングされて以降参照されていないページの取得を再開します。有効なページが残っていない場合、vhandがメモリをvfd/dbdから追い出します。

エージングとスチールの頻度は、次の要因によって決まります。

  • vhandの実行頻度(デフォルトでは、1秒間に8回)
  • 使用可能なページング・バンド幅(一定期間内に完了するページ・アウトのグローバルな発生率と比較して決められる)
  • システムの空きメモリがゼロになる回数
  • ページングしきい値gpgslimのレベル
  • すでに解放のスケジュールが決まっているページ数
特性が優れているスレッドに対しては、vhandに偏りがあります。スレッドが優れているほど、vhandがページをスチールする頻度が高くなります。pregionフィールドのp_bestniceは、pregionを共有するすべてのスレッドの最適な(数値的に最小の)nice値を反映します。

vhandの起動時に起こること


vhand変数の詳細は、図22を参照してください。

  • vhandがSCRITICALフラグを使用して、システムに欠かせないメモリ・プールへのアクセス権を取得(vhandのSCRITICALフラグは、最初にプロセス実行が開始される際に設定される)。
  • vhandが、エージングとスチールを行うページのページ・カウントを設定。
  • vhandが、memzeroperiodに基づいてgpgslimの値を更新。
  • vhandが、pageoutcntを使用してpageoutrateを更新。
  • vhandが、エージ針とスチール針の間の望ましい周回差を示すtargetlapsを更新。CPU実行時間がtargetcpuの値を下回ると、vhandがtargetlapsの値を上げる(最大15まで)。CPU実行時間がtargetcpuの値を上回ると、targetlapsが下がる。
  • vhandが、1秒間にエージングするページ数を示すagerateを更新。
  • vhandinfoticksがゼロでない場合、診断情報がコンソールに出力される。
注: 次の表の変数を調整することはできません。

表22 vhandに影響する変数

変数 目的
memzeroperiod freememがゼロに到達するまでに許容される最小期間(デフォルト値は3秒)。これにより、vhand()の実行中にgpgslimを調整する頻度が決まる。

  • memzeroperiod以内にfreememが2回ゼロに到達しないと、gpgslimが増分される。
  • memzeroperiod以内にfreememが2回ゼロに到達すると、gpgslimが減分される。
pageoutrate これまでに完了したページアウト数に基づいて計算される現在のページ・アウト発生率。
pageoutcnt 完了したページアウトの最近のカウント。
targetlaps handlapsに対するスチール針とエージ針の間の理想的な間隔。実行時に調整される。正常な動作中は、ページで使用されているクリア済み参照ビットをリセットするための最大限の時間をプロセスに提供するために、両針をできるだけ離す必要がある。targetlapsはカーネル内で静的変数として定義されるため、シンボル・テーブルには現れない。
targetcpu vhandがページングに費やすCPUの最大使用率(デフォルトは10%)。
handlaps エージ針とスチール針の間の実際の周回差。
agerate エージングのためにエージ針が1秒間に巡回するページ数。システム負荷に応じて頻繁に調整される。agerateはカーネル内で静的変数として定義されるため、シンボル・テーブルには現れない。
stealrate スチール針が1秒間に巡回するページ数。システム負荷に応じて頻繁に調整される。stealrateはカーネル内で静的変数として定義されるため、シンボル・テーブルには現れない。

ページのスチールとエージングを行うvhand


vhandは、その基準を確立してから、pregionのリンク・リストの走査に進みます。時計の針にたとえれば、vhandはその針を動かす準備ができています。

  • vhandが、スチールできるページとその数を判断します。

    • スチール針がbufcache_pregを指すと、vhandがstealbuffers()ルーチンでバッファ・キャッシュからバッファをスチールします。グローバル・パラメータdbc_steal_factorの値で、pregionページよりもバッファ・キャッシュ・ページの方をどの程度積極的にスチールするかが決められます。dbc_steal_factorの値が16の場合、バッファ・キャッシュ・ページはpregionページと同様に扱われます。デフォルトの値は48で、これはバッファ・キャッシュ・ページがpregionページに比べて3倍積極的にスチールされることを意味しています。
    • regionに有効なページがない(つまりr_nvalid == 0)pregionをスチール針が指し、regionを使用するプロセスがメモリにロードされていない(つまりr_incore == 0)場合、vhandがそのB-treeをスワップ・デバイスから追い出します。
    • 上記以外の場合、vhandはp_stealhandと(p_agescan - p_count/16 * handlaps)の間の(割り当てられたスチールまで)未参照ページすべてをスチールします。
    • vhandは、影響を受けるpregionの最後にスチールされたページに続くページ番号にp_stealscanを更新します。
    • 許容されている数のページをvhandがスチールしなかった場合、次のpregionに移動し、システムの要求が満たされるまで上記のプロセスを繰り返します。
  • 次に、vhandはエージ針を動かして、選択された番号のページから参照ビットをクリアします。

    • エージ針がbufcache_pregを指すと、vhandはagebuffers()ルーチンでバッファ・キャッシュ内の16番目のページをエージングします。
    • vhandは、その領域を使用するすべてのpregionの最高のnice値(数値的に最小の値)を判断します。領域内の各ページについてnice値が乱数を下回った場合、vhandはそのページのエージングを行いません(高優先順位のプロセス(数値的に小さいnice値)に属するページほど、エージングの確率が低くなります)。
    • 上記以外の場合、vhandはpde_refビットをクリアしTLBを消去することで、p_agehandと(p_agehand + p_ageremain)の間のすべてのページのエージングを行います。
    • 最後に、vhandは、影響を受けるpregion内でスキャンされた(エージングされた可能性がある)最後のページに続くページ番号にp_agescanを更新します。
注: 次の表の変数を調整することはできません。

sched()ルーチン


sched()ルーチン(通称「スワッパー(swapper)」)は、空きメモリがminfreeを下回り、システムがスラッシングしているようにみえる場合にプロセスの非アクティブ化と再アクティブ化を処理します。

注: 非アクティブ化は、スレッドごとに行われます。sched()は、プロセス・レベルに対する非アクティブ化を選択してから各スレッドを非アクティブ化します。

システムが次のような状態であるとsched()が判断すると、非アクティブ化が行われます。

  • システムのメモリが不足している。つまり、freememが非アクティブ化しきい値minfreeを下回り、複数のプロセスが実行されている場合。
  • スラッシングの兆候がある。つまり、システムのページング発生率が高く、CPU使用率が低い場合。
システムのメモリ不足またはスラッシングが解消されると、再アクティブ化が行われます。

非アクティブ化または再アクティブ化の対象


非アクティブ化と再アクティブ化の実行は、次の条件によって判断されます。

  • プロセスの優先順位。プロセスの優先順位が低いほど(nice値が高いほど)、非アクティブ化の確率が高くなります。これに対して、優先順位が高いほど、再アクティブ化の確率が高くなります。リアルタイム・プロセスを非アクティブ化することはできません。
  • プロセスの状態。長い間休眠状態にあったりメモリ内に存在したプロセスは、非アクティブ化される確率が高くなります。しばらくの間非アクティブ化され、現在実行する準備ができているプロセスは、再アクティブ化される確率が高くなります。
  • プロセスの種類。バッチ・プロセス(連続して動作するプロセス)またはシリアライゼーション(直列化)用にマークされているプロセスは、対話型プロセス(一時的に動作するプロセス)よりも非アクティブ化される確率が高くなります。対話型プロセスは、バッチ・プロセスまたはシリアライズされたプロセスよりも再アクティブ化される確率が高くなります。
  • 現在の状態の継続時間。
sched()によりプロセスが非アクティブ化されプロセスの実行が防止されるため、新しいページにアクセスする頻度が低くなります。使用可能メモリがminfreeを上回ったこととシステムがスラッシングしていないことを検知すると、sched()は非アクティブ化されていたプロセスを再アクティブ化し、引き続きメモリ可用性を監視します。

システムのスラッシングまたはメモリ不足の兆候がある場合、sched()ルーチンがアクティブなプロセス・リストをウォークし、プロセスの種類、状態、メモリ内に存在した時間、および休眠状態にあった時間にもとづいて各プロセスの非アクティブ化優先順位を計算します(バッチ・プロセスと、serializeコマンドによってシリアライゼーションとマークされたプロセスは、対話型プロセスよりも非アクティブ化される確率が高くなります)。次に、非アクティブ化される最善の候補がマークされます。

システムがスラッシングしていない場合またはメモリが不足していない場合、schedルーチンがアクティブなプロセス・リストをウォークし、プロセスの非アクティブ化期間、サイズ、状態、および種類にもとづいて、非アクティブ化されている各プロセスの再アクティブ化優先順位を計算します。バッチ・プロセスと、serializeコマンドによってマークされているプロセスは、対話型プロセスよりも再アクティブ化される確率が低くなります。最適であると判断されたプロセスが再アクティブ化されます。

プロセス非アクティブ化時の処理


再アクティブ化するプロセスが選ばれると、sched()は次の処理を行います。

  • proc structのSDEACTフラグとthread structのTSDEACTフラグを設定する。
  • 実行キューからプロセスのスレッドを削除する。
  • スレッドのuareasをアクティブなpregionリストに追加して、vhandがスレッドをページアウトできるようにする。
  • 非アクティブ化対象のプロセスに関連するpregionをすべてスチール針の前に移動して、vhandがすぐにプロセスをスチールできるようにする。
  • vhandが、1/16ではなくpregion全体からページのスキャンとスチールができるようにする。
最後にvhandが、非アクティブ化されたプロセスのページを二次記憶領域に追い出します。

プロセス再アクティブ化時の処理


プロセスの再アクティブ化が可能になるほど十分なメモリをシステムが解放し、ページング発生率が十分低下するまで、プロセスは非アクティブ化されたままになります。再アクティブ化優先順位が最も高いプロセスが再アクティブ化されます。

再アクティブ化するプロセスが選ばれると、sched()は次の処理を行います。

  • アクティブなpregionからプロセスのスレッドのuareasを削除する。
  • 非アクティブ化フラグをすべてクリアする。
  • uareasにフォールトインする。
  • プロセスのスレッドを実行キューに追加する。

自己非アクティブ化


以前のHP-UXの実装では、プロセスがロックを保持したりI/Oを実行している場合、またはシグナル受信可能な優先順位にない場合、プロセスをスワップアウトすることはできませんでした。優先順位により非アクティブ化の確率が最も高い場合でも、vhandがそのプロセスを無視していました。

現在では、最適なプロセスをすぐに非アクティブ化できない場合、そのプロセスは自己非アクティブ化とマークされます。つまり、sched()がそのプロセスのproc structにSDEACTSELFを設定し、そのプロセスの各thread structsにTSDEACTSELFを設定します。次回、スレッドの1つがページをフォールトインしなければならない際に、そのスレッドがプロセスを非アクティブ化します。

スラッシング


スラッシングは、ページング発生率が高くCPU使用率が低い状態であると定義されます。スラッシングが発生するのは、複数のプロセスが実行されている場合、複数のプロセスがI/Oの完了を待機している場合、またはアクティブなプロセスがシリアライゼーションとマークされている場合です。

多量のメモリが要求されているシステム(たとえば、大きなプロセスが多数実行されているシステム)では、ページング・デーモンが非アクティブ化/再アクティブ化およびページのスワップイン/スワップアウトでビジー状態になるため、システムでページングに長時間が費やされ、プロセスの実行に十分な時間が確保されません。

このような事態に陥った場合、何も実行されていないようにみえる程度までシステム・パフォーマンスが急速に低下することがあります。この場合には、生産的な動作よりも多くのオーバーヘッドを実行しているため、システムがスラッシングしているといわれます。

ワーキング・セットが物理メモリより大きい場合、スラッシングが発生します。この問題を解決する方法は次のとおりです。

  • 非アクティブ化によって、実行されているプロセスのワーキング・セットを低減する。
  • 物理メモリのサイズを増やす。
物理メモリを圧迫する大きなプロセスを追い出すことができず、スラッシングが継続する場合、同時に使用されるページが少なくなるようにアプリケーションを書き直す必要があります(たとえば、アクセスに応じてデータ構造をグループ化するなど)。

シリアライゼーション(直列化)


serializeコマンドによりマークされたプロセスはすべて、シリアル(直列)に実行されます。この機能により、CPUをめぐって競合する大きなプロセスのグループが原因のボトルネック(プロセス処理能力の低下により認識できる)を解消できます。大きなプロセスを一度に1つずつ実行すると、システムがCPUとシステム・メモリをより効率的に使用できます。なぜなら、各プロセスのワーキング・セット内で絶えずフォールトが発生することなく、別のプロセスの実行開始時にページをスチールするのみだからです。

システムに十分なメモリがある限り、serializeによりマークされたプロセスの動作はシステム内の別のプロセスと同じです。しかし、メモリが逼迫すると、serializeによりマークされたプロセスは優先順位に応じて一度に1つずつ実行されます。各プロセスが一定の間隔で実行された後、シリアライズされた別のプロセスが実行されます。ユーザーはこのシリアライズされたプロセスの実行順序を強制することはできません。

serializeにコマンドを指定して実行することも、PID値を指定して実行することもできます。またserializeには、指定されたPIDを通常の時分割スケジューリング・アルゴリズムに返す時分割オプションも備わっています。

シリアライゼーションが不十分でスラッシングを解消できない場合、システムのメイン・メモリを増設する必要があります。

ページャを使用した非アクティブ化


vhand()はI/O使用状況とCPU使用率に応じて調整されるため、スワップされるプロセスをページャでフォールトアウトできます。スワッパーは、スワップされるプロセスを非アクティブ化とマークし、そのスレッドを実行キューから除去します。このプロセスは実行できないため、そのページがエージングされると、二度と参照できません。スチール針が1周すると、region内のすべてのページがスチールされます。

メモリが不足気味になると、sched()がルーチンchoose_deactivate()を使用して、スワップするプロセスを選択します。このルーチンは、対話型プロセスよりも非対話型プロセスを、実行中のプロセスよりも休眠状態にあるプロセスを、新しいプロセスよりも長く実行されているプロセスをそれぞれ優先的に選択します。

非アクティブ化するプロセスが選択されると、次の処理が行われます。

  • プロセスのSDEACTフラグとそのスレッドのTSDEACTフラグが設定される。
  • プロセスのスレッドが実行キューから削除される。プロセスがI/Oを待機している場合、プロセスのSDEACTSELFフラグとそのスレッドのTSDEACTSELFフラグが設定される。I/Oが完了すると、ページング・ルーチンでプロセスが非アクティブ化される。
  • プロセス非アクティブ化の時間を記録するために、proc構造内のプロセスのp_deactimeとkthread構造内のスレッドのkt_deactimeが現在の時間に設定される。
  • スチール針に対する準備として、プロセスのpregionがアクティブなpregionチェーンに配置される。
  • ページ・アウトするために、uarea pregionがアクティブなpregionのリストに追加される。
  • グローバル・カウンタdeactive_cntが増分される。
プロセスのページすべてに対するエージングとスチールが実行されるだけ十分な期間にわたって休止していたプロセスは、事実上すでにスワップアウトされています。グローバルなdeactprocsが休止プロセスのリストの先頭を指し示し、そのチェーンがpregionの要素p_nextdeactに伝わります。

メモリの不足気味の状態が軽減されると、非アクティブ化されたプロセスが再アクティブ化されます。choose_reactivate()ルーチンは、非対話型プロセスよりも対話型プロセスを、休眠状態にあるプロセスよりも実行可能なプロセスを、最近非アクティブ化されたプロセスよりも長期間非アクティブ化されているプロセスをそれぞれ優先的に選択します。

メモリ・リソース・グループ(MRG)


これまで、あたかもすべてのプロセスが同じメモリ・プールを共有するかのように、ページングと非アクティブ化について説明してきました。これは通常の状態であり、以前のバージョンのHP-UXでは唯一のオプションでした。

しかし、現在のHP-UXには、メモリ・リソース・グループ(MRG)を使用してプロセス・グループを固有のメモリ・プールに割り当てるオプションがあります。これらのプロセスには実際に、プロセス固有のphysmem_pages、freemem、minfree、desfree、lotsfree、gpgslimなどが提供されます。

これにより、プロセスのグループが独立してページングできるようになり、プロセス間の干渉が大幅に低減されます。これは、元々個々のサーバ用に記述された複数のアプリケーションが1台の大きなサーバ上で実行されるようなサーバ統合で有用です。

メモリ・リソース・グループにより、vhandとschedは、あたかも各MRGが固有のページャとスワッパーを備えて完全に分離しているかのように動作します(実際の実装はこれより少し複雑です。MRG間を移動するプロセスとメモリ、あるMRGが別のMRGからメモリを借りることができる機能、任意の単一プロセス(またはMRG)に割り当てることができないメモリの使用、およびグローバル・メモリの可用性と個々のMRGメモリの可用性を維持する必要性などを考慮する必要があります)。上記のグローバル変数はまだ存在し、システム全体の状態の要約として機能します。
最初のページへ 前のページへ 次のページへ

お問い合わせ

ご購入前のお問い合わせ


ご購入後のお問い合わせ

オンラインサポート
製品の標準保証でご利用いただける無償のサービスです。

ショールーム

ショールーム 導入をご検討のお客様へ
業務アプリケーションの継続・標準化・開発性とシステム担当者様、システム開発者様が抱える悩み・疑問に対する解決策実体験して頂けます。
印刷用画面へ
プライバシー ご利用条件・免責事項 ウェブマスターに連絡