JP2006302305A - 非一様メモリ・アクセス・マルチプロセッサ・システム用オペレーティング・システム - Google Patents

非一様メモリ・アクセス・マルチプロセッサ・システム用オペレーティング・システム Download PDF

Info

Publication number
JP2006302305A
JP2006302305A JP2006158290A JP2006158290A JP2006302305A JP 2006302305 A JP2006302305 A JP 2006302305A JP 2006158290 A JP2006158290 A JP 2006158290A JP 2006158290 A JP2006158290 A JP 2006158290A JP 2006302305 A JP2006302305 A JP 2006302305A
Authority
JP
Japan
Prior art keywords
memory
operating system
thread group
thread
pool
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Pending
Application number
JP2006158290A
Other languages
English (en)
Inventor
Jeffrey S Kimmel
ジェフリー・エス・キメル
Robert A Alfieri
ロバート・エイ・アルフィエリ
Forest Miles A De
マイルズ・エイ・デフォーレスト
William K Mcgrath
ウィリアム・ケイ・マクグラス
Michael J Mcleod
マイケル・ジェイ・マクレウド
Mark A O'connell
マーク・エイ・オコンネル
Guy A Simpson
ガイ・エイ・シンプソン
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
EMC Corp
Original Assignee
EMC Corp
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by EMC Corp filed Critical EMC Corp
Publication of JP2006302305A publication Critical patent/JP2006302305A/ja
Pending legal-status Critical Current

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/46Multiprogramming arrangements
    • G06F9/50Allocation of resources, e.g. of the central processing unit [CPU]
    • G06F9/5083Techniques for rebalancing the load in a distributed system
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/46Multiprogramming arrangements
    • G06F9/50Allocation of resources, e.g. of the central processing unit [CPU]
    • G06F9/5005Allocation of resources, e.g. of the central processing unit [CPU] to service a request
    • G06F9/5011Allocation of resources, e.g. of the central processing unit [CPU] to service a request the resources being hardware resources other than CPUs, Servers and Terminals
    • G06F9/5016Allocation of resources, e.g. of the central processing unit [CPU] to service a request the resources being hardware resources other than CPUs, Servers and Terminals the resource being the memory

Landscapes

  • Engineering & Computer Science (AREA)
  • Software Systems (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Memory System Of A Hierarchy Structure (AREA)
  • Multi Processors (AREA)
  • Memory System (AREA)

Abstract

【課題】最も効率的なレベルの親和性を維持し、プロセッサおよびメモリ負荷の均衡化を維持する階層ツリー構造を表わす、非一様メモリアクセス(NUMA)システムのソフトウエア抽象概念を利用する、オペレーティング・システムを提供すること。
【解決手段】階層ツリー構造は、ジョブ・プロセッサを表わすリーフ・ノードと、全てのジョブ・プロセッサによって共有されるルート・ノードと、複数の中間レベル・ノードとを含む。オペレーティング・システムは、アクティブなスレッド群の進展を監視し、衰退スレッド群を補助する中期スケジューラと、関連するジョブ・プロセッサの状態を監視し、関連するジョブ・プロセッサが実行するためのスレッド群を得る複数のディスパッチャとを含む。更に、オペレーティング・システムは、複数のメモリ・プールおよびフレーム・トレジャリを用いて仮想および物理メモリを割り当てるメモリ・マネージャも含む。
【選択図】図1

Description

本発明は、一般的にコンピュータのオペレーティング・システムに関し、更に特定すれば、非一様メモリ・アクセス(NUMA:non-uniform memory access)マルチプロセッサ・システム用オペレーティング・システムに関するものである。
スレッド(thread)は、多数の非同期タスクの効率的な制御を容易にする、プログラミング構造である。スレッドは基礎となるハードウエアに密接に対応するので、対称的なマルチプロセシング・システム上で実行されるアプリケーションに、平易なプログラミング・モデルを与える。
最近のマルチプロセシング・システムは、処理タスクを共有するいくつかの別個のジョブ・プロセッサ(JP)を有することができる。かかるシステムの多くは、キャッシュを内蔵し、このキャッシュをシステムのJPの部分集合が共有する。しかしながら、多くの従来技術のマルチプロセッサ・システムに伴う問題の1つに、システム上で実行中のプロセスが、その実行中に、多数の処理スレッドを生成するときのJPおよびキャッシュの親和性が不十分(poor)であることがあげられる。従来技術のシステムには、各スレッドに個々の優先度を割り当て、各スレッドをシステム全体で汎用的に別個にスケジュールするものがある。また他のシステムには、個々のスレッドを個々のJPに親和化(affine)できるものもある。同一データにアクセスする傾向がある、多数の関係するスレッドを、多数のJP群に分散すると、システムのキャッシュ内外において、望ましくない高いレベルのデータ交換(data swapping)が発生する可能性がある。
Robert A. Alfieriにより、1994年1月26に出願され、本願と共に譲渡された、"APPARATUS AND METHOD FOR IMPROVED CPU AFFINITY IN A MULTI-PROCESSOR SYSTEM"と題する米国特許出願番号第08/187,665号
この文献の発明は、同一プロセスからの関係があるスレッド群をJP群に親和化し、二次的なキャッシュの親和性を改善しつつ、同一群内のスレッド間の処理効率を高め、群間の処理のオーバーヘッドを減少させる方法を開示する。この開示内容は、この言及により、本願にも含まれるものとする。先の開示された方法は、更に、親和性を自動的に修正し、局所的な効率を維持しつつ、関係のあるスレッド群を移動させる。マルチプロセッサ・システム全体にわたってプロセッサ負荷の均衡を取るために、開示された方法は、全てのアクティブなスレッド群を、システム・アーキテクチャ内で最高で最もよく見える(visible)レベルに昇進させることによって、周期的に負荷の均衡化を行う。
NUMAアーキテクチャを有するスケーラブル・マルチプロセッサ・システムに実施可能な、グローバル・スケジューリング機構を有するオペレーティング・システムに対する必要性が存在する。また、NUMAシステムを抽象化し、コスト・トレードオフを管理し、資源アクセス・コストを考慮に入れたポリシおよび機構を実施しつつ、システムの資源全体に作業負荷を分散させる方法に対する必要性も存在する。加えて、アドレスが透過なメモリの移動、およびNUMAマルチプロセシング・システムの種々のメモリ資源の継ぎ目のない一体化を支援する、メモリ・マネージャを有するオペレーティング・システムに対する必要性も存在する。
したがって、本発明は、上述の問題を克服しようとするものである。本発明のオペレーティング・システムの一態様は、システムのスループットを向上し、プロセスとジョブ・プロセッサとの間に緊密な親和性を保持する、局在性管理機構(locality management mechanism)を提供することである。この利点およびその他の利点を達成するため、そしてここに具現化され広く述べられる本発明の目的によれば、本発明のオペレーティング・システムは、マルチプロセッサ・システムのハードウエア・アーキテクチャの抽象概念を維持する手段を含む。抽象概念は、プロセッサおよび共有される資源の物理的構成を、階層的ツリー構造という形態で表わす。階層的ツリー構造は、プロセッサに対応し、階層的ツリーの最下位レベルに位置付けられる複数のリーフ・ノード(leaf node)と、全てのプロセッサによって共有される共通資源および共有される中間資源に対応し、階層ツリーの最高レベルに位置付けられるルート・ノード(root node)と、共有される中間資源に対応し、階層ツリーの少なくとも1つの中間レベルに位置付けられる複数の中間ノードとを有する。階層ツリーの各ノードに実行キュー(run queue)を確立するための手段が設けられる。各実行キューは、リーフ・ノードと関連付けられ、対応するプロセッサに親和化されたアクティブなプロセスまたはスレッド群を識別する。残りのノードの1つと関連付けられた各実行キューは、当該ノードに関連付けられた資源を共有するプロセッサ群に親和化されたアクティブなプロセッサを識別する。更に、プロセッサの動作を監視し、実行キュー内に並んでいるプロセスを選択し、プロセッサに実行させる手段も設けられる。
本発明のオペレーティング・システムの別の態様は、システムのスループットを向上させつつ、システム全体で均衡の取れたプロセッサ負荷を維持する、グローバル・スケジューリング機構を提供することである。この利点およびその他の利点を達成するために、本発明のオペレーティング・システムは、マルチプロセッサ・システムのハードウエア・アーキテクチャの階層的ツリーの抽象概念を維持する手段と、システム内のアクティブなプロセスの進展を監視し、進展していなかったプロセスをより速く実行させる可能性を高める手段とを含む。本発明のオペレーティング・システムの更に他の態様は、システムにおいてプロセスが衰退しないことを保証するように協動する、グローバルおよびローカル・スケジューリング機構を提供することである。
この利点およびその他の利点を達成するために、本発明のオペレーティング・システムは、プロセッサの各々と関連付けられ、関連するプロセッサの実行キューを監視し、他のプロセッサの実行キューから、関連するプロセッサに実行させるためのプロセスを探し獲得するディスパッチャと、システム内のアクティブなプロセスの進展を監視し、進展していないプロセスにフラグをセットする、中期スケジューラとを含む。前記ディスパッチャが、複数の入手可能なプロセスを有する実行キューを発見したとき、ディスパッチャは、フラグがセットされているプロセスを選択する。
本発明の他の実施例によれば、システム内における各アクティブなプロセスの進展を監視し、所定時間期間の間進展していない各アクティブなプロセスの優先度を高める中期スケジューラと、プロセッサの1つと関連付けられ、関連するプロセッサによって実行されるプロセスを並べた実行キューを監視し、関連するプロセッサに実行させるために、前記実行キュー内で最も優先度の高いアクティブなプロセスを選択する、少なくとも1つのディスパッチャとを含むオペレーティング・システムによって、上述の態様は達成可能である。
本発明の更に他の態様は、あるプロセスの親和性が変化したか否かを判定し、プロセスのホーム親和性(home affinity)を変更すべきか否かを判定する、動的データ構造機構を提供することである。この利点およびその他の利点を達成するために、本発明のオペレーティング・システムは、マルチプロセッサ・システムのハードウエア・アーキテクチャの階層ツリー構造の抽象概念を維持する手段と、階層ツリーの各ノードに対する実行キューを形成する手段とを含む。リーフ・ノードと関連付けれらた各実行キューは、関連するプロセッサに親和化されたアクティブなプロセスを識別し、残りのノードの1つと関連付けれた各実行キューは、当該ノードと関連付けられた資源を共有するプロセッサ群に親和化されたアクティブなプロセスを識別する。抽象概念は、階層ツリーのレベルの1つをスケジューリング・レベルとして定義し、スケジューリング・レベル内のノードをスケジューリング・ロカール(scheduling locale)として識別する。マルチプロセッサ・システム内の各アクティブなプロセスまたはスレッド群は、ホーム・スケジューリング・ロカールと、現スケジューリング・ロカールとを有し、各々スケジューリング・ロカールの1つに対応する。プロセスのホーム・スケジューリング・ロカールは、当該プロセスを実行するために好適なプロセスの祖先であるスケジューリング・ロカールである。スレッド群の現スケジューリング・ロカールは、プロセスを最後に実行した、または現に実行中のプロセッサの祖先であるスケジューリング・ロカールである。
本発明の更に別の態様は、NUMAシステムにおいて継ぎ目なく物理メモリを割り当てるためにデータ構造を利用することである。この態様を達成するために、本発明のオペレーティング・システムは、マルチプロセッサのハードウエア・アーキテクチャの階層ツリー抽象概念を維持する手段を含む。オペレーティング・システムは、更に、共有物理メモリ資源を表わす各ノードにおいてフレーム・トレジャリ(frame treasury)を維持しフレーム管理および資源の割り当てを制御し、全ノードに共通なノードを識別する手段も含む。トレジャリと関連付けられるのは、プロセッサの少なくとも1つが使用するために、フレーム・トレジャリから物理メモリのフレームを割り当てる高位ポリシ・ノードである。
本発明の他の態様は、NUMAシステムにおいて仮想メモリを割り当てるために多数の独立したメモリ・プールを利用することである。この態様を達成するために、本発明のオペレーティング・システムは、マルチプロセッサ・システムのハードウエア・アーキテクチャの階層ツリー抽象概念を維持する手段と、システムの仮想メモリの割り当てのために、メモリ・ロカールを表わす各ノードにおいてメモリ・プールを維持する手段と、メモリ単位及び該メモリ単位の各々に割り当てられているメモリ・プールの可用性を識別するプール単位テーブルを維持する手段とを含む。前記仮想メモリは、メモリ・プールに割り当て可能なプール単位に分割されている。
本発明の特徴および利点は、書面にした説明および特許請求の範囲、ならびに添付図面において特に指摘した手段および組み合わせによって実現し、獲得することができる。また、添付図面は、本明細書に組み込まれ、その一部を構成し、本発明のいくつかの実施例を例示し、本発明の目的、利点、および原理を説明するのに供するものである。
ハードウエア・システムの概要
図1は、本発明のオペレーティング・システムを実施することができる、NUMAマルチプロセッサ・システム20の一例を示す。提示を明確かつ容易にするために、NUMAマルチプロセッサ・システム20は、8個のジョブ・プロセッサ(JP)1〜8を含むものとして描いてある。当業者には容易に認められようが、本発明は、他の数のJPを有するNUMAマルチプロセッサ・システムにも適用可能である。また、各JP群が2つずつ構成要素を有すること、または全てのJP群が同一数のJPを有することは必須ではない。本発明は、メモリ・アクセス時間がシステム全体で等しいが、ローカル・バスの帯域の使用を均衡化することを望む、UMAシステムにも適用可能である。
ここで使用し記載するNUMAシステムは、分散型メモリを有するシステムであって、メモリの各部分は、あるJPには他のものよりも緊密である(アクセスが安価である)が、全てのメモリ資源は全てのJPにアクセス可能なシステムである。したがって、NUMAオペレーティング・システムは、引用の局在性に対する感度を高め、メモリ配置(memory placement)を明示的に管理することによって、理想的な性能を達成することが好ましい。
各JP1〜8は、個別の第1キャッシュ(図示せず)を有し、通常、これは少なくとも別個のデータおよび命令キャッシュを含み、各キャッシュは、例えば、8Kバイトのランダム・アクセス・メモリである。命令およびデータ・キャッシュ構成物であるこれら第1キャッシュに加えて、例えば、1メガバイトのランダム・アクセス・メモリから成る付加的なキャッシュ・メモリも、典型的なシステムには、第1キャッシュの一部として含まれている場合がある。図1に示した例では、各JP対、即ち、JP群は、第2キャッシュ10〜13のような1つ以上の共有メモリ資源に接続することができる。例えば、JP1および2を第2キャッシュ10に接続し、JP3および4を第2キャッシュ11に接続し、JP5および6を第2キャッシュ12に接続し、JP7および8を第2キャッシュ13に接続することができる。加えて、共有メモリ資源10および11を互いに接続したり、あるいはノード14において、第3キャッシュのような他の1つ以上の共有資源に接続することもでき、更に共有メモリ資源12および13も、1つ以上の共有資源15に接続することができる。あるいは、共有資源14および15を、システム・バスまたはインターフェースとしてもよい。共有資源14および15は、付加的な共有メモリおよび/または主システム・バス16のような、1つ以上の共通共有資源に接続することができる。したがって、図1に示すように、共有資源を表わす各ボックスは、1つ以上の共有資源を表わす場合もある。しかしながら、NUMAシステムであるためには、ノード10〜13または14〜15にメモリがなければならない。
図1に示すようなNUMAマルチプロセッサ・システムは、非対称的アーキテクチャを有し、共有資源10〜13の各々が異なるメモリ量を有するようにしてもよい。更に、JP1〜8は、異なる処理能力を有してもよい。加えて、ハードウエアは、その鍵となる共有資源が階層的システム抽象概念によって適切に表現可能である限り、1つの階層として組織化する必要もない。例えば、ハードウエアは、メッシュに基づくシステム組織(mesh-based system organization)を有することも可能である。システム全体にわたってこれらの種々の構成物を扱い、異なるハードウエア構成物の継ぎ目のない一体化を可能にするために、本発明のオペレーティング・システムは、NUMAマルチプロセッサ・システムの抽象概念を利用する。これについては、後に更に詳細に説明する。
オペレーティング・システム
図1に示したようなマルチプロセッサ・システムでは、オペレーティング・システム(またはカーネル)は、通常、ジョブ・プロセッサおよび/または専用システム・プロセッサ上で実行される、種々のプロセスまたは方法を含む。以下に述べるオペレーティング・システムの構成物は、オペレーティング・システムによって実行されるプロセスのいくつかのことを指す。
図2は、非一様メモリ・アクセス(NUMA)マルチプロセッサ・システム20のオペレーティング・システムによる、ソフトウエア抽象概念150の概要を示す。オペレーティング・システムは非一様メモリ・アクセス(NUMA)マルチプロセッサ・システム20において実施可能である。リーフ・ノード(leaf node)100〜107はそれぞれJP1〜8を表わし、ノード110〜113は、共有メモリ、バス、および/または第2キャッシュ10〜13をそれぞれ表わし、ノード114および115は、共有バス/相互接続部14および15のような、共有資源を表わし、ルート・ノード120は、共有資源14および15等を接続する主システム・バス16のような共通共有資源を表わす。
本発明のオペレーティング・システムは、種々のハードウエア・アーキテクチャを有するNUMAマルチプロセッサ・システムに常駐し、これを制御できるように柔軟に設計されているので、オペレーティング・システムが利用するハードウエア・アーキテクチャの抽象概念は、システムによって異なる。しかしながら、以下に述べるように、オペレーティング・システムは、種々のポリシを利用して、ハードウエア・アーキテクチャの適切な抽象概念を確立し、システムの処理を最も有効に管理する。
各JP100〜107毎に、オペレーティング・システムは、実行キュー(run queue)およびディスパッチャ(dispatcher)を含む。ディスパッチャは、あるグローバルおよびローカル・スケジューリング・ポリシにしたがって、関連するJP上でのプロセスのスケジューリングおよび実行を担う機構である、カーネル・サブシステム(kernel subsystem)である。スケジューリング・ポリシのセットする役割を担う、オペレーティング・システム内の他のカーネル・サブシステムを、以後、中期スケジューラ(meidum term scheduler)と呼ぶ。これは、ディスパッチャが処理するスケジューリング機構に影響を与える。ディスパッチャおよび中期スケジューラのスケジューリング処理については、「スレッド群」の背景説明に続いて、以下で説明する。尚、スレッド群は、オペレーティング・システムがそのポリシ作成決定のいくつかの基準とするスレッドの群を表わす。しかしながら、オペレーティング・システムは、以下に説明するような、多数のスレッドを有するスレッド群上だけでなく、単一プロセス(即ち、単一スレッドを有するスレッド群)上でも動作可能であることは、理解されよう。
スレッド群
ここで開示する「スレッド群」とは、同一データにアクセスし処理する傾向のある、プロセス内で、緊密な関係にあるスレッドの集合のことである。これら関係の有るスレッドを、単一の全体的にスケジュール可能な群として扱うことにより、当該群内のスレッドと個々のJPまたはJP群との間に、より密接な関係を増進し、これによって、キャッシュのヒット率およびシステム全体の性能が向上することになる。
図3を参照すると、システム20上で実行される典型的なプロセス200の図を示してある。プロセス200は、スレッド群210、220、および230を含む。TG210は、リアル・タイム(RT)スレッド群であり、プロセス200における最初のスレッド群であった。TG210は、スレッド群構造(TGS)211を有し、そのスレッド群の中に、3つのタイムシェアリング(TS)スレッド212〜214を有する。TG220は、スレッド群構造221と、RTスレッド222および223とを有する。TG230は、スレッド群構造231と、RT232と、TS233とを有する。以下でより詳細に論ずるが、図3の各スレッド群構造ボックス211、221および231に示す数は、システムに全体おける各スレッド群のグローバル・スケジューリング優先度を示す。各スレッド・ボックスの中に示す数は、その特定スレッド群の中における、スレッドの優先度を示す。
また、図3のプロセス200の中に概念的に配置してあるのは、データ集合240であり、プロセス200の実行中に、スレッドがアクセスする潜在的必要性があるものである。図3において、データ241は、TG210内のスレッドが実行すべきタスクを支援するデータ240の副集合を表わす。同様に、データ242および243は、TG220および230内のスレッドが実行すべきタスクを支援する。
プロセスの中のアクティブなスレッドは、1つ以上の付加的なスレッドを生成することができる。新たなスレッドが生成されるとき、それは、生成元のスレッドのスレッド群内で生成されるか、他の既存のスレッド群内で生成されるか、あるいは、新たなスレッド群の最初のスレッドとなることもできる。例えば、TG220は、プロセス200内のスレッドによって、またはシステム内の他のプロセス内のスレッドによって生成されたものとすることができる。あるスレッドが新たなスレッド群内の最初のスレッドとして形成される場合、新たなスレッド群のスレッド群構造は、まず、生成したスレッドのスレッド群のスレッド群構造を受け継ぐことによって生成される。次いで、新たに生成されたスレッド群において、新たなスレッドが生成される。生成元のスレッドは、新たに生成されたスレッドに、ローカル・スケジューリングおよび優先度を割り当てる。他に指定がない場合は、新たに生成されたスレッドは、それを生成したスレッドのローカル・スケジューリング・ポリシおよび優先度を受け継ぐことになる。新たに生成されたスレッドは、それを生成したスレッドよりも高い、低い、または同一の優先度を有することができる。同様に、あるスレッド群内の個々のスレッドは、そのスレッド群の優先度よりも高い、低い、あるいは同一の優先度を有することができる。
スレッド群構造は、そのスレッド群内の全スレッドについて、累積タイムスライス(timeslice)およびJP課金(accounting)も維持するので、スレッド群内の個々のスレッドについて、タイムスライス処理およびJP課金の記録は不要である。スレッド群内の個々のスレッドは、各々、それ自体のスレッド優先度およびスケジューリング・ポリシを保持する。
実行すべきスレッド群を選択する際に、JPのディスパッチャが用いる、特定の方法について以下に論じる。一旦ディスパッチャが実行のために特定のスレッド群を選択したなら、ディスパッチャは当該スレッド群から1つのスレッドを選択し、その群内のスレッドの局所的優先度およびスケジューリング・ポリシに基づいて実行する。したがって、スレッドの選択および実行は、2つの独立したレベルで行われる。即ち、スレッド群のグローバル・スケジューリング、これに続く、当該スレッド群のスレッドの1つのローカル・スケジューリングである。あるスレッド群の中の個々のスレッドの優先度は、当該スレッド群自体のスケジューリングには何等関係がない。スレッド群のスケジューリングは、スレッド群構造におけるスレッド群の優先度に基づいている。
プロセスの実行には、各々複数のスレッドを有する複数のスレッド群がしばしば関与する。プロセスの開発においてスレッド群を使用することにより、既存のスレッド群内で新しいスレッドを生成することと、新しいスレッド群を生成することの間で選択を行う柔軟性をユーザに与えることになる。ユーザは、当該プロセス内の種々のタスクを処理するための最も効率的な手法に基づいて、決定を下すことができる。例えば、多数のスレッドを用いて特定の計算に関する作業を行っており、全てのスレッドが同一データ集合へのアクセスを必要とする場合、これらのスレッドを単一のスレッド群に属させるのが正しい。一方、プロセスの進行中に当該プロセス内で新たなタスクを開始するが、このタスクが既存のスレッド群のタスクとは密接に結び付かず、しかも新たなタスクのスレッドが異なるデータ副集合240へのアクセスを必要とする場合、新たなスレッド群を指示する。
プロセス・スケジューリング
上述のように、オペレーティング・システムは、ハードウエア・アーキテクチャの抽象概念を利用する。これは、共有資源、メモリ・ロカール(memory locales)、およびJPの逆ツリー階層として表わすのが好ましい。かかる抽象概念の一例を図2に示す。このJP/メモリ−ツリー階層では、JPを固有のID番号で識別し、各メモリ・ロカールまたは他の共有資源を、(レベル、JP−ID)命名基準によって識別する。ここで、レベルは、階層ツリーにおける垂直位置を特定し(番号が大きいレベル程ツリーのルート・ノードに近く、ゼロ・レベルはツリーのリーフ・ノード即ちJPを表わす)、JP−IDは、所望のロカールのいずれかの子孫JP(descendent JP)を用いて、水平位置を指定する。例えば、図2において、指定子(2、JP2)および(2、JP0)は双方とも同一メモリ・ロカールを指し、一方(2、JP2)および(2、JP4)は異なるロカールを指す。各レベルは、1つ以上の「インスタンス」、即ち、JP/メモリ・ツリー階層におけるノードを含むと考えることができる。レベル0は、8個のノードを含み、各々JP100〜107の1つに対応する。レベル1は4つのレベル1ノード110〜113を含み、各ノードは、共有メモリ資源およびその従属JPの1つに対応する。レベル2は2つのレベル2ノード114および115を含み、各々2つのレベル1ノードおよび共有資源に対応する。最後に、2つのレベル2ノードと少なくとも1つの共有システム資源とに対応する単一のレベル3ノード120がある。この命名基準は、多くの場合、システムの各レベルにいくつのノードがあるかを知る必要性から、ソフトウエアを解放するため、実施を簡素化することができる。
階層ツリー構造を用いてシステムのハードウエアを抽象化することの目的は、1つのノードから他のノードへの移動に伴うアクセス・コストの表現を与えることである。例えば、JP101がノード110で表わした第2キャッシュから読み取りを行うためのコストは、同じJPがノード112で表わした第2キャッシュから読み取りを行うためのコストよりも大幅に少ない。これは、ハードウエアのアクセス・レイテンシ(latencies)およびシステム・バスの帯域が制限されていることによるものである。このように、階層ツリー抽象概念群は、JPおよび群の共有資源間の相互作用と関連付けて、最も低いコストを有する共有資源およびJPを類別する。
上述のように、あらゆるシステムを同一の抽象概念で表わす訳ではない。例えば、一様メモリ・アクセス・システムでは、全てのJPを直接共通の共有メモリに接続する。したがって、各JPが共通メモリにアクセスする際のコストは、他のJPの場合と同一であり、全てのメモリは、階層のルート・ノードで表わされることになろう。しかしながら、非一様メモリ・アクセス(NUMA)システムでは、JPのあるものは1つの共有メモリ資源に直接接続され、一方、他のJPには他の共有メモリ資源に接続するものもある。更に、1つのメモリ資源に直接接続されるJPの数は、他のメモリ資源に接続される数とは異なる場合もある。かかるシステムの階層的抽象概念を与えることによって、オペレーティング・システムは、JPがより緊密に親和化されているローカル・メモリへのアクセスを促進し、アクセス可能性が限られているシステム資源の利用を必要とする場合がある、遠隔メモリ資源へのJPのアクセスを制限するようなポリシを確立することができる。
マルチプロセッサ・システムの抽象概念を構成するためには、2つの競合するシステムの目標を調和させる必要がある。一方では、JPにできるだけ効率的にプロセスを実行させなければならない。他方では、システムのスループットを最大限高めなければならない。図2を参照して、レベル3において「可視」である全スレッドは、8つのJP100〜107のディスパッチャのいずれかが選択し実行することができる。レベル3のスレッドを潜在的に実行可能なJPは8つあるので、これは各スレッドを実行する機会を最大に高める。しかしながら、こうすると、結果として、同じスレッド群からのスレッドが異なるJP群(即ち、JP100および101、JP102および103、JP104および105、またはJP106および107)において実行されることになる。多数のスレッド群からのスレッドがJP群全体に分散し、その結果キャッシュの動作が増大するため、システムのスループットが低下する。
一方、全スレッド群が特定のJPに割り当てられるとすると、全スレッドが同一JP上で処理される同一データ集合上で作用するため、キャッシュ・ヒットの可能性が高くなるため、明らかに局所的なキャッシュ親和性が高くなる。しかしながら、複数の時間的制約が厳しいスレッド(time critical thread)を単一のJPに割り当てると、JPがビジー状態となり、全ての時間的制約が厳しいスレッドをスケジュール通りに実行できなくなる可能性が高まるため、望ましくない。
上述のように、本オペレーティング・システムの好適実施例では、2つのスケジューリング・レイヤ(layer)がある。全スレッド群は群優先度を有し、中期スケジューラによってスケジュールされることにより、抽象化システム150内のどこでも利用可能なJP資源を得るために競うことができる。一旦あるJPディスパッチャが実行すべきスレッド群を選択したなら、このディスパッチャは、当該スレッド群内の局所的優先度にしたがって、このスレッド群内から1つのスレッドを選択する。
再び図3を参照し、スレッド群およびスレッドの優先度について調べる。図からわかるように、スレッド群の優先度は、当該スレッド群内の個々のスレッドの優先度より、高い場合も低い場合も有り得る。図3のプロセス200の例では、TG210には900という優先度が割り当てられ、TG220は810という優先度を有し、TG230は500という優先度を有する。例えば、スレッド群210、220および230のみが、偶然システム150でアクティブなスレッド群であるとすると、TG210は利用可能なスレッド群の中で最も高い優先度を有するので、次に利用可能なJPのディスパッチャは、次に実行すべきスレッド源として、TG210を選択する。
一旦ディスパッチャがTG210を選択したなら、このディスパッチャは、同じスレッド群の実行キューから、実行すべき特定のスレッドを取り出す。TG210のアクティブなスレッド212〜214は、それぞれ、405、405および400の優先度を有する。スレッドは、その優先度の順に、それらの実行キューに配置される。実行キュー内で等しい優先度のスレッドの順は、ローカル・スケジューリング・ポリシによって決定される。
あるスレッドが必要とするデータが、このスレッドを実行するJP自体のキャッシュ内で見つけられる可能性を最大に高め、そこにない場合、当該JPのJP群と関連付けられている第2キャッシュ内で見つけられる可能性を最大に高めることが非常に望ましいことはよく理解されよう。高位レベルの共有メモリに移動して、キャッシュにないデータを得ようとすると、スレッドの処理に遅れを来し、システム全体のスループットに影響を与える。同様に、近くのメモリではなく遠くのメモリにアクセスすることによっても、遅れを生じる。同時に、キャッシュ局在性を高めるために行われるステップは、時間制約が厳しいスレッドの処理の適時実行に影響を与える可能性はない。
各スレッド群と関連付けられ、システム内の全JPに利用可能なものに、スレッド群の利用可能なJPまたはJPの集合、およびスレッド群の最低許容処理レベルを指定する属性がある。JP属性は、システム内でスレッド群の実行が許されているJPまたはJPの集合を識別する。典型的に、この属性は、システム150内の全JPを利用可能として識別するが、システムのJPの部分集合はユーザが指定する。最低許容処理レベル属性は、スレッド群を親和化できる最低処理レベル(0、1、2、または3)を指定する。この属性は、リアル・タイム・スケジュール・セマンティクス(real time schedule semantaics)のために、プロセッサ親和性ポリシを無視する際に用いることができる。
タイムシェアリング・スレッド群に対する最低許容処理レベルは、典型的に0である。こうすることによって、スレッド群をレベル2に低下させ、レベル2で第3キャッシュを共有する4つのJPから成る特定群に、このスレッド群をレベル1で親和化したり、レベル1に低下させて、第2キャッシュを共有する2つのJPから成る特定群にスレッド群を親和化させたり、あるいはレベル0に低下させて、スレッド群を特定のJPに親和化させることができる。スレッド群を特定のJPまたは単一のJP群に親和化させることにより、当該スレッド群内のスレッドに対するキャッシュ局在性が改善されることになる。
リアル・タイム・スレッド群の最低許容処理レベルは、典型的に、ルート・レベル(本例ではレベル3)であり、スレッド群を最高処理レベルより下に移動させないようにすることにより、スレッド群が常に最大数のJPに利用可能であるようにする。したがって、リアル・タイム・スレッド群に対する応答時間は最適化される。ユーザは、最低許容処理属性を通じて、リアル・タイム・スレッド群をレベル2、レベル1、またはレベル0に移動させるように、指定することができる。
本発明の好適実施例では、スレッド群および処理インスタンス間における親和性の維持は、システム実行キューによって行うようにしている。図2に示す抽象化システムには、合計15の実行キューがある。即ち、8つのレベル0列(各JPに1つずつ)、4つのレベル1列、2つのレベル2列、および1つのレベル3列である。全ての利用可能なスレッド群は、これら15の列の1つにあり、その1つにしかない。新たに生成されるスレッド群は、生成元のスレッド群の実行キューおよびその親和性属性を受け継ぐ。
例えば、図3を参照して、TG230が最初に生成されると、その生成元の親和性を受け継ぎ、生成元のスレッド群に対応するロカールの実行キューに配置される。TG230はタイムシェアリング・スレッド群であるので、JP100〜107の1つが、最初に実行すべきものとしてそれを選択した場合、TG230は、それを選択したディスパッチャと関連付けられた特定のJPに「引き下げられる」。選択元のディスパッチャは、当該スレッド群をレベル3実行キューから取り出し、それ自体のレベル0実行キューに配置することによって、これを達成する。この時点で、当該JPはTG230と親和化されており、TG230が再度親和化されるか、或いは実行キューがリセットされるまで、TG230内のスレッドを実行し続ける。これについては、以下で論じることにする。ディスパッチャは、実行キューを維持する。実行キューは、JP/メモリ・ツリー階層の各ノードについて、特定ノードに存在するロード可能なスレッド群のリストを含む。ディスパッチャは、それに関連するノードの固有の命名基準によって、実行キューを識別することができる。
NUMAアーキテクチャを有するシステムにおいて、グローバル・スケジューリング機構を設けるには、階層ツリーにおけるあるレベルを、「スケジューリング・レベル」として選択する。「スケジューリング・レベル」は、中期スケジューラがそのスケジューリング処理を実行する、階層ツリーにおけるレベルのことである。スケジューリング・レベルにある階層ツリーの各ノードを、「スケジューリング・ロカール」と呼ぶ。スケジューリング・ロカールおよびその子ノード(child node)を、「スケジューリング・サブツリー」と呼ぶ。例示の目的のために、図2に示す階層ツリーにおいて、レベル2をスケジューリング・レベルとすると、ノード114および115はスケジューリング・ロカールとなり、ノード110、111、および114は、1つのスケジューリング・サブツリーに属し、ノード104〜107、112、113、および115は別のスケジューリング・サブツリーに属する。一方、レベル1がスケジューリング・レベルとすると、ノード110〜113がスケジューリング・ロカールとなり、ノード100、101、および110が1つのスケジューリング・サブツリーに属し、ノード102、103、および111が別のスケジューリング・サブツリーに属し、ノード104、105、および112が1つのスケジューリング・サブツリーに属し、そしてノード106、107、および113が別のスケジューリング・サブツリーに属する。
階層ツリーにおけるどのレベルでも、スケジューリング・レベルとして選択することができる。しかしながら、どのレベルをスケジューリング・レベルに選択するしても、選択したレベルは、スケジューリングのためのローカル・メモリ・レベルと看做される。したがって、スケジューリング・レベルの選択は、JP/メモリ親和性に影響を及ぼし、プロセスを1つのノードから別のノードに移動させるためのコストを割り当てる基準を設ける。これについては、以下で更に詳細に説明する。
階層ツリー内のあるレベルをスケジューリング・レベルに指定し、スケジューリング・レベル内のノードをスケジューリング・ロカールに指定することの重要な一面は、スレッド群を、「ホーム・スケジューリング・ロカール(home scheduling locale)」および「現スケジューリング・ロカール(current-scheduling locale)」に割り当てることができるようになることである。スレッド群またはプロセスの「ホーム・スケジューリング・ロカール」は、当該スレッド群またはプロセスを実行するための好適なJPの祖先ノード(ancestor node)である、スケジューリング・ロカールである。スレッド群の「現スケジューリング・ロカール」は、当該スレッド群を最後に実行したJPの祖先ノードである、スケジューリング・ロカールである。スレッド群は、その現スケジューリング・ロカールとは異なるホーム・スケジューリング・ロカールを有することもできる。かかる状況が発生するのは、スレッド群を1つのスケジューリング・サブツリーから他のスケジューリング・サブツリーに移動し、適格なスレッド群を有さないJPをビジーの状態に保持するようなときである。しかしながら、JP/メモリ親和性を向上させるためには、スレッド群は同一のホームおよび現スケジューリング・ロカールを有することが好ましい。なぜなら、各スケジューリング・ロカールは、異なる物理的メモリを表わし、JPは、局所的資源を使用すれば、より効率的に処理を行うからである。
中期スケジューラは、スレッド群を監視して、衰退スレッド群(languishing thread group)および負荷均衡化のための候補を識別し、それぞれのスケジューリング・ロカールの負荷を監視してあらゆる負荷不均衡を識別し、現スケジューリング・ロカールとホーム・スケジューリング・ロカールが同一でない全スレッド群を識別することによって、JP/メモリ親和性とシステムのスループットのトレードオフとの均衡を取る。ホーム・スケジューリング・ロカールとは異なる現スケジューリング・ロカールを有するスレッド群を、中期スケジューラが識別したとき、中期スケジューラは、(a)当該スレッド群をホーム・スケジューリング・ロカールに戻すことによって、それをホームに送る、(b)そのホーム・スケジューリング・ロカールを変更し、その現スケジューリング・ロカールに一致させることによって、スレッド群を「移行(migrate)」させる、または(c)そのホーム・スケジューリング・ロカールを変更することなく、スレッド群をその現スケジューリング・ロカールに放置する。
中期スケジューラが衰退しているスレッド群を識別したときは、以下の3つの方法の内の1つで当該スレッド群を補助することができる。第1に、このスレッド群の優先度を高めて、このスレッド群を含む実行キューのJPディスパッチャがこのスレッド群を選択し実行する可能性を高める。第2に、中期スケジューラは、より高いノードの実行キューにスレッド群を「昇進」させ、他のJPに対するその可視性を高める。第3に、中期スケジューラは、当該スレッド群と関連付けられた侵入/補助ヒント・フラグ(poach/help hint flag)をセットし、このスレッド群を、JPが「侵入する」または「補助する」のに適したスレッド群であるとして識別する。「侵入」または「補助」が行われるのは、あるスケジューリング・サブツリー内のアイドル状態のJPと関連付けられたディスパッチャが、他のスケジューリング・サブツリーのノードにおいて衰退スレッド群を引き出したときである。「衰退スレッド群」は、実行されることなく、800msecのような所定時間期間にわたって実行キューの中で待たされているスレッド群のことである。衰退スレッド群が、遠くのスケジューリング・サブツリー内のJPによって実行されているスレッドを有する場合、アイドル状態のJPのディスパッチャが、このスレッド群の中で最高の優先度を有するスレッドを選択して実行することにより、このスレッド群を「補助する」。それ以外の場合、ディスパッチャは、このスレッド群全体を占領することによって、このスレッド群に「侵入する」。スレッド群が「侵入」されると、当該スレッド群の現スケジューリング・ロカールは、侵入したディスパッチャのそれに変更させられる。スレッド群が「補助」されるときは、当該スレッド群の現スケジューリング・ロカールは、スレッド群が最初に配置されたスケジューリング・サブツリーのスケジューリング・ロカールに留り、補助されるスレッド群は、そのスレッド群が実行された後、その最初の位置に戻される。
図4〜図7は、JP100のディスパッチャが実行すべきスレッド群(TG)を選択する際に従うシーケンスを示す。同様のシーケンスは、システム内の全ディスパッチャが従う。JP100がスレッドを実行可能となると(ステップ501)、そのディスパッチャはまず、第1の所定遅延時間が経過するまで、階層ツリー内のその祖先ノードの実行キューを、特定の順番で検索する。したがって、ディスパッチャ500は、このプロセスを開始するに当たって、タイマをセットする(ステップ503)。
最初にディスパッチャは、そのレベル0実行キューおよびレベル1〜3の祖先ノードにおいて、最高優先度の適格なスレッド群を探す。JP100の場合、ディスパッチャは、ノード100、110、114、および120の実行キューを検索し(ステップ505)、適格なスレッド群を探す(ステップ507)。ディスパッチャが適格なスレッド群を見つけられない場合、予め計算してあるJP100の関係物(relative)リストにある、次の関係ノード(relative node)を探す。ノードが存在するスケジューリング階層内のレベルは、このレベルの実行キューが検索されるまでに要する遅延量を決定する。このレベルのノードに対するタイマが未だ終了していなければ、ディスパッチャは「アイドル」スレッドを実行し、JP100をアイドル状態にする(ステップ515)。タイマが終了した場合、ディスパッチャは、ルートが関係物リスト内の次の関係物であった、サブツリー全体を検索し、実行すべきスレッド群を見つける(ステップ513)。適格なスレッド群がない場合、ディスパッチャはステップ505に戻る。この手順は、ディスパッチャが実行すべき適格なスレッド群を見つけるまで、繰り返される。
アイドル・スレッド群は、それが常に適格であり、常に可能な限り最低のスケジューリング・グローバル優先度を有するという点において、特殊である。JP100〜107の各々は、その実行キューの中に、アイドル・スレッド群を有する。祖先ノードまたは関係ノードのいずれにも、アイドル群より高い優先度を有する適格スレッド群が含まれていない場合、ディスパッチャはこのスレッド群を抽出し実行する。アイドル・スレッドには遅延が組み込まれており、作業を捜す際に余りに過激になるのを防止するようにしてある。その理由は、キャッシュ・ラインが頻繁に無効化され、その結果システム全体の性能が低下するからである。
ディスパッチャが観測する遅延時間は、階層ツリー内のノードのレベルを基準とする。各レベルは異なる遅延値を有する。これらの値は、機械のアーキテクチャに基づくデフォルト値を用いて構成可能である。通常、ノードのレベルが高い程、遅延も長い。この理論的根拠は、ディスパッチャが検索する関係ノードがツリーの中で高い程、キャッシュ、メモリ位置、およびバス/相互接続境界を交差しているというものである。これは、現在これら遠いノードに関係付けられているスレッド群を実行すると、コスト増になる可能性があることを意味する。
一旦ディスパッチャが、実行すべき適格なスレッド群を有すると思われる実行キューを突き止めたなら、実行キューの適格リスト上にある個々のスレッド群の検索を開始する。まず、ディスパッチャは、実行キューが同一スケジューリング・ツリー内にあるのか、遠いスケジューリング・ツリー内にあるのかを判定する(図5、ステップ523)。実行キューがディスパッチャと同一のスケジューリング・ロカールにある場合、ディスパッチャは単に実行キューの適格リストを検索する(ステップ525)。このリストは、優先度がアイドル・スレッド群のそれよりも高いスレッド群について、優先度順にソートしてある。受け入れ可能なスレッド群が見つからない場合、ディスパッチャはステップ505に戻る。
ディスパッチャが遠いロカールで検索している場合、最初に適格リストを走査して、スレッド群のいずれかに、中期スケジューラが侵入または補助するのに適した候補であるとして印されたものがないかを調べる(ステップ527)。もしもなければ、ディスパッチャは優先度に基づいてスレッド群を検索する(ステップ525および529)。この場合の論理的根拠は、侵入/補助に適した候補として印されているスレッド群は、ある時間にわたって衰退しており、当該スレッド群が遠隔JP上で実行されると無効になる、ホット・キャッシュ・フットプリント(hot cache footprint)を有する可能性が低いからである。
一旦スレッド群が抽出されると、選択されたスレッド群の中で最高の優先度を有するスレッドを抽出して実行する(図6、ステップ533)。次に、ディスパッチャは、選択したスレッド群を新しい実行キューに移動する必要があるか否か判定する(スレッド群がJP100の実行キューにないとき)(ステップ535)。スレッド群がJP100の実行キュー上で見つかった場合、侵入/補助ヒント・フラグをクリアし(ステップ537)、新たなスレッドの実行を開始する(ステップ539)。JP100の実行キュー上で見つからなかった場合、スレッド群を新たな実行キューに移動する必要がある可能性がある。スレッド群が、他のJPが現在実行中の他のスレッドを全く有していない場合(図7、ステップ545)、ディスパッチャは、このスレッド群をレベル0の実行キューに移動可能か否かをチェックする(ステップ551)。可能であれば、ディスパッチャはこのスレッド群をJP100の実行キューに移動し(ステップ555)、侵入/補助ヒント・フラグをクリアし(図6、ステップ537)、実行を開始する(ステップ539)。可能でなければ、ディスパッチャは、スレッド群を配置するのを許された最低レベルに一致するレベルを有する祖先ノードの実行キューに、このスレッド群を移動する(図7、ステップ553)。
スレッド群が、他に現在実行中のスレッドを有する場合(ステップ545)、ディスパッチャは、このスレッド群が現在、祖先ノードの実行キュー上に存在するか否かを判定する(ステップ547)。スレッド群が現在祖先ノードの実行キュー上に存在する場合、ディスパッチャは、スレッド群があるところに放置し、侵入/補助ヒント・フラグをクリアし(図6、ステップ537)、選択したスレッドの実行を開始する(ステップ539)。スレッド群が現在祖先ノードの実行キュー上に存在しない場合、ディスパッチャは、JP100の実行キューに対して最下位の共通祖先、および当該スレッド群が現在存在している実行キューを突き止め、スレッド群をその実行キューに移動させる(ステップ549)。最下位の共通祖先とは、レベル番号が最も小さい実行キューであり、JP100および選択したスレッド群の実行キュー双方の祖先である。例えば、ディスパッチャが、現在ノード115に親和化されているスレッド群を実行しようと決定した場合、最下位共通祖先は、ツリーのルート、即ちノード120である。最下位共通祖先は、システムの初期化時に予め計算され、ディスパッチャが読み取り可能なデータ構造内に記憶されている。
スレッド群を異なる実行キューに移動する場合で、このスレッド群が他に現在実行中のスレッドを有さないとき、そしてスレッド群が現在存在する実行キューとは異なるロカールに新たな実行キューがある場合、スレッド群の現スケジューリング・ロカールを変更する(ステップ543)。これは、JPがスレッド群に「侵入」することに対応する。スレッド群が他に現在実行中のスレッドを有する場合、スレッド群の現スケジューリング・ロカールの修正は行わず、代わりに、JPは単にスレッド群を「補助」する。
これまでの説明から、タイムシェアリング・スレッド群は、システムの3つの処理レベルの間を上下に移動可能であり、様々な時刻に、個々のJP、JP群、またはシステム内の全JPとの親和化が可能であることが理解されよう。
上述のシステムは、処理負荷の均衡化を行おうとする固有の傾向を有する。システムが比較的アイドル状態の期間にある場合、タイムシェアリング・スレッド群は、ディスパッチャが実行可能なスレッドを検索することによって、より高いレベルの実行キューに引き上げようとする傾向があり、それらのスレッドを多数のJPによって共有させる。作業負荷が軽いことを自己認識したJPは、それらよりもビジーなJPを補助し、いつでもシステム内のよりビジーなJPからタイムシェアリング・スレッド群をいくつか引き受けようとする。逆に、システムがビジーになると、タイムシェアリング・スレッド群は、下方向に移動しようとする。このようにタイムシェアリング・スレッド群とJPとの間の親和性をより緊密にすると、キャッシュの局在性が改善されるので、望ましい。
殆どの状況では、タイムシェアリング・スレッド群は、ディスパッチャの処理によって、JP全体にほぼ同様にそれら自体を分散させる。しかしながら、理論的に、ビジーなシステムのスレッド群の分散は不均衡となり、あるJPが他のJPよりもビジーとなって、あるスレッド群の実行が所望の速度よりも遅くなってしまう可能性がある。
中期スケジューラは、更に、各スケジューリング・ロカールについてスケジューリング・ロカールの負荷データ(SLD)を計算し、スレッド群の進展を監視し、衰退スレッド群を助け、あるスレッド群のホームまたは現スケジューリング・ロカールを移動することによって、処理およびメモリ負荷の均衡が失われないことを保証する。中期スケジューラ600がこれらの機能を行う方法については、図8〜図15を参照しながら、以下で更に詳しく説明する。
中期スケジューラ600は、一度に1つずつシステム内のアクティブなスレッド群全てのステータスをチェックし(ステップ603)、それらが処理中か衰退中かを判定し(ステップ609)、さらにそれらが侵入されたか否かを判定する(ステップ625)。中期スケジューラがスレッド群のステータスを見る度に、SLDが陳腐化していないかチェックする(ステップ605)。SLDが陳腐化している場合、中期スケジューラは、JP、メモリ、優先度、および複合負荷値を各スケジューリング・ロカールについて計算することにより、新しいSLDを計算する(ステップ607)
スケジューリング・ロカールに対するJPの負荷は、関連するスケジューリング・サブツリーの実行キューの中の適格エンティティ(スレッド)の数である。スケジューリング・ロカールに対するメモリ負荷は、関連するスケジューリング・サブツリー内の使用メモリの構成済バイト数である。
中期スケジューラは、適格スレッド群をその優先度順に並べたグローバル・リストを維持しアクセスすることによって、優先度負荷を計算する。中期スケジューラは、同一または実質的に同一の優先度を有するスレッド群をリストに類別し、グルーピング(grouping)内の各スレッド群に「優先度点」を割り当てる。例えば、最も高い優先度を有するグルーピング内のスレッド群には、優先度点20を割り当て、次に高い優先度を有するグルーピング内のスレッド群には優先度点19を割り当てるようにする。連続的に減少する優先度点の割り当ては、ゼロの値に到達するまで(この場合、それより低い優先度を有するスレッド群にも全て優先度点0が割り当てられる)、またはグルーピングの全てに別の方法で優先度点が割り当てられるまで、続けられる。中期スケジューラは、次に、リストを十分に調べ、各スレッド群の現ロカールを決定し、各スケジューリング・ロカールのスケジューリング・サブツリー内の各スレッド群毎に、割り当てられた優先度点を蓄積する。この各スケジューリング・ロカール毎に蓄積された値は、スケジュール・ロカールの優先度負荷となる。
各スケジューリング・ロカール毎の複合負荷は、重み付けし、正規化したJP、メモリ、および優先度負荷の合計である。JP、メモリ、および優先度負荷を0ないし100までの値に正規化し、利用可能なシステム・メモリが比較的小さいか否かのような、性能基準(performance criteria)に基づいて重み付けする。中期スケジューラは、陳腐化係数カウンタを用いて、SLDが陳腐化していないか判断することができる。このカウンタは、SLDがリフレッシュされる毎にリセットされ、プロセスの特定ルーチンにしたがって減数される。
衰退スレッド群を補助するために(ステップ609)、中期スケジューラは、スレッド群が順番を待っているが実行されない時間を監視し、ステップ611、615、およびステップ619(図9)において判定されるように、関連する時間期間が過ぎたときに、以下の3つの機能の1つを実行する。(1)スレッド群の優先度を上げる(ステップ613)。(2)スレッド群を、階層ツリー内のより高い、より可視性の高いレベルに昇進させる(しかし、スケジューリング・レベル未満)(ステップ617)。または、(3)スレッド群の侵入/補助ヒント・フラグをセットする(ステップ621)。作業を捜しているディスパッチャは最高の優先度を有するスレッド群を選択するので、スレッド群の優先度を高めることによって(ステップ613)、作業を捜しているディスパッチャがそのスレッド群を選択する可能性が高くなる。しかしながら、JPが現在長いプロセスを実行中の場合、またはJPの実行キューの中に優先度が高いスレッド群が残っている場合、スレッド群の優先度を高くしても、当該スレッド群を少しでも速く実行しようとする可能性があまり高くならない場合もある。
第2の所定時間期間が過ぎた後に、中期スケジューラがスレッド群の進展がないと判断した場合、中期スケジューラは、階層ツリー内で次に高い、より可視性が高いレベルにスレッド群を昇進させる(しかし、スケジューリング・レベル未満)(ステップ617)。この昇進は、当該スレッド群を、直ちに全ての従属するJPのディスパッチャに見えるようにするので、同一スケジューリング・サブツリー内のディスパッチャが衰退スレッド群を選択する可能性を高めることになる。
第3の所定時間期間が過ぎた後でも、未だスレッド群が進展していない場合、中期スケジューラはこのスレッド群の侵入/補助ヒント・フラグをセットする。他のサブツリーにおいて作業を捜しているディスパッチャは、侵入/補助ヒント・フラグがセットされていないスレッド群を選択する前に、侵入/補助ヒント・フラグがセットされているスレッド群を選択するので、このフラグをセットすることによって、異なるスケジューリング・サブツリー内のディスパッチャがこのスレッド群に侵入する、またはこれを補助する可能性を高める。
第1、第2および第3の所定時間期間の後に中期スケジューラは、それぞれ、スレッド群に対して、優先度を高める、昇進させる、あるいはヒント・フラグをセットするが、これらは互いに独立とし、中期スケジューラが衰退スレッド群を補助する方法を、システムの特性に基づいてシステム毎に変化させ、システムのスループットを向上させるようにする。一例として、第1の所定時間期間を8,000msec、第2の所定時間期間を2,000msec、そして第3の所定時間期間も2,000msecとしてもよい。したがって、中期スケジューラは、そのルーチンを1秒毎に実行し、そのルーチン2サイクルの間(2,000msec)列に並んでいるが実行されていないスレッド群については、その侵入フラグをセットし、その後各2,000msec間隔で昇進させる。8サイクル(8,000msec)後にスレッド群が衰退している場合、それ以降8,000msec間隔毎にその優先度を高める。衰退スレッド群を補助することにより、中期スケジューラはスケジューリングの不均衡(inequities)を防止または補正する。
また、中期スケジューラは、各スレッド群がExec()コマンドによって最初に生成されたとき、または別のスケジューリング・ロカールに移されたときに、各スレッド群毎に、減退係数(dampening factor)をセットする。減退係数をセットして、中期スケジューラが、最初にディスパッチャに負荷を均衡化させようともせずに、負荷の不均衡に応答して、キャッシュのスラッシング(thrashing)を行うのを防止する。スレッド群のステータスをチェックする毎に、中期スケジューラは、当該スレッド群の減退係数を減数する(図8)。したがって、スレッド群のスケジューリング・ロカールを変更し、その減退係数を、例えば、5の値にセットしたとき、中期スケジューラは、減退係数を0に減数するまで、スレッド群を移行させたり、あるいは移動させたりしようとしない。減退処理は、中期スケジューラが頻繁にスレッド群を移行するのを防止することによって、キャッシュのスラッシングを減少させる。
加えて、中期スケジューラは、現スケジューリング・ロカールがホーム・スケジューリング・ロカールよりもビジーでないとき、侵入されたスレッド群のホーム・スケジューリング・ロカールを、その現スケジューリング・ロカールに移行することによって、または、ホーム・スケジューリング・ロカールが現スケジューリング・ロカールよりもビジーでないとき、侵入されたスレッド群をそのホーム・スケジューリング・ロカールに戻すことによって、均衡の取れたシステムの処理負荷を保証する。中期スケジューラが、侵入されたスレッド群を検出したとき(即ち、その現スケジューリング・ロカールがそのホーム・スケジューリング・ロカールと異なる場合)、そのスレッド群の現スケジューリング・ロカール(CSL)の複合負荷が、そのスレッド群のホーム・スケジューリング・ロカル(HSL)よりも、所定の「ホーム送り(send home)」スレシホルドよりも大きい量だけ、超過しているか否かを判定する(ステップ627)。その量が「ホーム送り」スレシホルドを超過していない場合、中期スケジューラは、このスレッド群のホーム・スケジューリング・ロカールの複合負荷が、このスレッド群の減スケジューリング・ロカールよりも、所定の「移行(migrate)」スレシホルドよりも大きい量だけ、超過しているか否かを判定する(ステップ629)。侵入されたスレッド群の現スケジューリング・ロカールまたはホーム・スケジューリング・ロカールのいずれも、「ホーム送り」または「移行」スレシホルド以上他方よりも超過した負荷を有していない場合、中期スケジューラは、そのJP負荷を「ビジー」スレシホルドと比較することによって、現スケジューリング・ロカールがビジーか否かチェックする(ステップ631)。現スケジューリング・ロカールがビジーでない場合、中期スケジューラは、現ロカールに対するSLD陳腐化係数を増加し(ステップ633)、スレッド群をその侵入状態のまま放置し、性能データ(performance data)を蓄積して、侵入されたスレッド群をいつ移行すべきか、または移行すべきか否か、あるいは後にそれをホームに戻すべきかを判定する。
ステップ627において、スレッド群の現スケジューリング・ロカールの複合負荷が、所定の「ホーム送り」スレシホルドより多い量だけ、スレッド群のホーム・スケジューリング・ロカールの複合負荷を超過していると、中期スケジューラが判定した場合、このスレッド群をそのホーム・スケジューリング・ロカールに戻し、このスレッド群の現スケジューリング・ロカールがこのスレッド群のホーム・スケジューリング・ロカールと同じになるようにする(ステップ635)。
ステップ629において、スレッド群のホーム・スケジュール・ロカールの複合負荷が、所定の「移動」スレシホルドより大きい量だけ、スレッド群の現スケジューリング・ロカールの複合負荷を超過していると、中期スケジューラが判定した場合、中期スケジューラは、このスレッド群と関連付けられた減退係数が0であるか否かをチェックすることにより、スレッド群が減退しているか否かを判定する(ステップ637)。このスレッド群が減退している場合(即ち、その減退係数がゼロでない)、中期スケジューラはこのスレッド群をホームに送る(ステップ635)。一方、スレッド群が減退していない場合(即ち、その減退係数がゼロである)、中期スケジューラは、このスレッド群のホーム・スケジューリング・ロカールをこのスレッド群の現スケジューリング・ロカールに変更することによって、このスレッド群を「移行」する(ステップ639)。スレッド群を検査した後、中期スケジューラは、まだ検査していないアクティブなスレッド群があるか否か判定し(図8、ステップ641)、次のアクティブなスレッド群を見つけ出す(ステップ603)。
長い時間期間にわたって不均衡状態にあるシステムの処理に対する更にもう1つのチェックとして、システムは、周期的に全スレッド群をそれらのスケジューリング・レベルの実行キューに再度引き上げることによって、各スケジューリング・ロカール内で「負荷均衡化」機能を実行する(ステップ645)。スレッド群は直ちに、スケジューリング・ロカール内の全JPに見えるようになる。この機能は、比較的短い時間期間以上の間負荷の不均衡状態が存在するのを防止する。好適実施例では、このリセット機能は10秒毎に実行されるが、他の時間期間を設定してもよい(ステップ643)。
システムの全体的な不均衡を防止するもう1つの対策は、中期スケジューラが周期的にスケジューリング・ロカール・レベルで負荷の均衡化を行うことである。まず、中期スケジューラは、スケジューリング・ロカールにおいて負荷の均衡化を行う時刻であるか否かをチェックする(ステップ647)。その時刻であれば、中期スケジューラは、複合負荷値が最も大きいスケジューリング・ロカールの位置を突き止め(図11、ステップ649)、ステップ651で、JP負荷が複合負荷の支配的な要因であるか否かを判定する。JP負荷が支配的な要因である場合、中期スケジューラは、図12に示すプロセスを用いて、負荷均衡化を行う。JP負荷が支配的な要因ではない場合、中期スケジューラは、メモリ負荷が複合負荷の支配的な要因であるか否かをチェックする(ステップ653)。メモリ負荷が支配的な要因である場合、中期スケジューラは、図13に示すプロセスを用いて、負荷均衡化を行う。JP負荷もメモリ負荷も支配的な要因でない場合、中期スケジューラは、図14に示すプロセスを用いて、負荷均衡化を行う。
図12に示す負荷均衡化プロセスにおいて、中期スケジューラは開始に際して、JP負荷が最も軽いスケジューリング・ロカールを見つけ出し(ステップ655)、複合負荷が最も重いスケジューリング・ロカールと最も軽いスケジューリング・ロカールとの間のJP負荷の差に基づいて、移動すべきスレッド群の数を計算する(ステップ657)。次に、中期スケジューラは、複合負荷が最も大きいスケジューリング・ロカール内で、最低の優先度のアクティブなスレッド群を見つけ出す(ステップ659)。このスレッド群が減退していない場合(ステップ661)、中期スケジューラは、このスレッド群が移行に適したメモリ・「フットプリント」を有するか否かを判定する(ステップ663)。
所与のメモリ・ロカールのメモリ内のスレッド群の「フットプリント」とは、当該メモリ・ロカールにおいてスレッド群が使用する物理メモリ量のパーセンテージを表わす。JP負荷および優先度負荷の均衡化の間にスレッド群を移動するのに適したフットプリントを構成するものは、システム毎に異なる。典型的なスレシホルドは、例えば、それらの現ロカールの物理的メモリにおいて、10パーセント未満のフットプリントを有するスレッド群とすることができる。移動すべきいずれのスレッド群も全て適切なフットプリントを有することを保証することによって、中期スケジューラは、負荷均衡化の間に大きなスレッド群を移動させる事態を防止することができる。
スレッド群が減退している場合、または目的としたスレッド群が適切なメモリ・フットプリントを有していない場合、中期スケジューラは次に優先度が低いスレッド群を見つけ出し(ステップ665)、新たに選択したスレッド群について、ステップ661および663の検査を繰り返す。選択したスレッド群が減退しておらず、目的としたスレッド群が適切なメモリ・フットプリントを有する場合、中期スケジューラは、このスレッド群を、JP負荷が最も軽いスケジューリング・ロカールに移行させる(ステップ667)。次に、中期スケジューラは、SLD陳腐化係数を調節し(ステップ669)、計算した数のスレッド群を移動させたか否かを判定する(ステップ671)。十分なスレッド群を移動させていない場合、中期スケジューラは次に優先度が低いスレッド群を見つけ出し(ステップ665)、十分なスレッド群を移動させるまで、ステップ661〜671を繰り返す。一旦計算した数のスレッド群を移動させたなら、中期スケジューラは、上述のように、それに割り当てられた機能の実行を繰り返す前に、所定時間期間にわたって処理を中断する(図8、ステップ673)。
図13に示す負荷均衡化プロセスでは、中期スケジューラは開始に際して、複合負荷が最も重いスケジューリング・ロカールと最も軽いスケジューリング・ロカールとの間のメモリ負荷の差に基づいて、移動すべきメモリ負荷量を計算する(ステップ675)。次に、中期スケジューラは、複合負荷が最も重いスケジューリング・ロカールの中で、優先度が最も低いアクティブなスレッド群を見つける(ステップ677)。目的とするスレッド群が、移動すべきメモリ負荷量に対して、その現ロカール内に適切なメモリ・フットプリントを有する場合(ステップ679)、中期スケジューラは、このスレッド群が衰退しているか否かを判定する(ステップ680)。
メモリ負荷の負荷均衡化を図る目的に適したフットプリントは、移動させなければならないメモリ量に基づいて変化する。例えば、あるロカールから物理メモリの20パーセントを他のロカールに移動してメモリ負荷の均衡化を図る場合、フットプリントが20パーセント以下のスレッド群を移動させればよい。スレッド群が減退している場合、またはそのフットプリントが適切でない場合、中期スケジューラは次に優先度が低いスレッド群を見つけ出し(ステップ681)、新たに選択したスレッド群に対して、ステップ680および681の検査を繰り返す。
選択したスレッド群が減退しておらず、そのフットプリントが適切である場合、中期スケジューラは、メモリ負荷が最も軽いスケジューリング・ロカールに、このスレッド群を移行させる(ステップ682)。次に、中期スケジューラはSLD陳腐化係数を調節し(ステップ683)、計算した量のメモリ負荷を移動させたか否かを判定する(ステップ684)。十分なメモリ量を移動させていない場合、中期スケジューラは次に優先度が低いスレッド群を見つけ出し(ステップ681)、十分なメモリ量を移動させるまで、ステップ679〜684を繰り返す。一旦計算した量のメモリ負荷を移動させたなら、中期スケジューラは、上述のように、それに割り当てられた機能の実行を繰り返す前に、所定時間期間にわたって処理を中断する(図8、ステップ673)。
図14に示す負荷均衡化プロセスでは、中期スケジューラは開始に際して、優先度負荷が最も軽いスケジューリング・ロカールを見つけ出し(ステップ685)、複合負荷が最も重いスケジューリング・ロカールと最も軽いスケジューリング・ロカールとの間の優先度負荷の差を計算する(ステップ686)。次に、中期スケジューラは、計算した負荷の差が所定のスレシホルドを超過しているか否かを判定する(ステップ687)。超過していなければ、中期スケジューラは負荷の均衡化を行わない。負荷の差がスレシホルド・レベルを超過している場合、中期スケジューラは、スケジューリング・ロカール内で、適切なフットプリントを有し(ステップ690)、複合負荷が最も重く(ステップ689および691)、優先度が最高のスレッド群を見つけ出し、優先度負荷が最も軽いスケジューリング・ロカールにこのスレッド群を移行させる(ステップ692)。次に、中期スケジューラはSLD陳腐化係数を調節し(ステップ693)、上述のように、それに割り当てられた機能の実行を繰り返す前に、所定時間期間にわたって処理を中断する(図8、ステップ673)。
また、中期スケジューラは、UNIX(登録商標) Exec()コマンドによって生成されるスレッド群の初期ホーム・スケジューリング・ロカールの割り当てを制御することによって、階層ツリー全体にわたって均衡の取れた処理負荷を保証することもできる。寿命が短いプロセス(short-lived process)では、初期ホーム・スケジューリング・ロカールは、そのプロセスにとって唯一のスケジューリング・ロカールとなろう。寿命が長いプロセスでは、初期ホーム・スケジューリング・ロカールは、プロセスのページ・フォールト(page fault)を発生させるホーム・スケジューリング・ロカールであるので、将来の性能を左右することになろう(bias)。
UNIX(登録商標) Fork()コマンドによって新たなプロセスを生成したとき、ホーム・スケジューリング・ロカールはスレッド群に対して望まれるロカールの位置を表わすので、スレッド群はその親のホーム・スケジューリング・ロカールの位置を受け継ぐ。プロセスがUNIX(登録商標) Exec()コマンドを実行するとき、その画像を上書きするので、その以前のメモリとは何の関係も有さない(共有メモリを除く)。この場合、JP資源を最大化しメモリ資源が利用可能なホーム・スケジューリング・ロカールに、このプロセスを割り当てる。図15は、Exec()プロセスを、ホーム・スケジューリング・ロカールに割り当てるために実行するプロセスを示す。Exec()コマンドを実行するとき、カーネルのプロセス制御サブセクションは、中期スケジューラ・サブセクションを呼び込み、中期スケジューラ・サブセクションは、呼び出し元のタスク群の、複合負荷が最も軽いホーム・スケジューリング・ロカールを移動させる。まず、複合負荷が最も小さいスケジューリング・ロカールを識別する(ステップ697)。負荷が最も小さいスケジューリング・ロカールと呼び出し元タスク群のホーム・スケジューリング・ロカールとの間の複合負荷の差がスレシホルド・レベルを超過している場合(ステップ697)、スレッド群のホーム・スケジューリング・ロカールを、複合負荷が最も軽いスケジューリング・ロカールに変更する(ステップ698)。スレシホルド・レベルを超過していない場合、中期スケジューラ・サブシステムが制御をプロセス制御サブシステムに返す前に、スレッド群は、その親プロセスのホーム・スケジューリング・ロカールを引き継ぐ(中期スケジューラは別個のカーネル・スレッドであるが、Exec()コマンドは、呼び出し元の制御スレッドの下で、中期スケジューラ・サブシステムを通過する)(ステップ699)。
メモリ管理
プロセスのJPに対する親和性を調節するためにNUMAシステムにおいて考慮すべき別の点は、システムのメモリ資源の管理である。スレッド群を移行させる場合、そのスレッド群と関連付けられたメモリも移動させることが望ましい場合もある。加えて、NUMAシステムのメモリ・マネージャは、好ましくは、フォールティング・プロセス(faulting process)の位置および当該ページに含まれる情報のタイプに基づいて、ページ・フォールト位置を割り当てる。更に、メモリ・マネージャは、均衡の取れたシステム・メモリ資源の使用を維持しなければならない。
上述のタスクを達成するために、本発明のオペレーティング・システムは、システム全体に分散した複数の物理的および仮想資源を表わすデータ構造を制定することにより、図2に示したものに類似したシステム抽象概念を利用する、仮想メモリ・マネージャを含む。このデータ構造は、抽象化したシステムの種々のノードと関連付けられた種々のテーブルという形状を取る。図16および図17は、図1に示したようなNUMAマルチプロセッサ・システムのために考えられるこれらデータ構造の例を示す。
一様メモリ・アクセス・システムでは、メモリは、同一コストでしかも同一アクセス時間で全てのJPによって等しくアクセス可能な物理メモリ・ブロックから成る。しかしながら、NUMAシステムでは、システムのメモリは、異なるアクセス時間およびコストを有する種々の分散型共有メモリ・ブロックで構成することができる。図16は、NUMAシステムの物理メモリの割り当てを表わす、システムの抽象概念とデータ構造とを示す。仮想メモリ・マネージャが使用する抽象概念は、各共有メモリ群と関連付けられたトレジャリ・ノード(treasury node)70〜73、および階層ツリー抽象概念のルート・ロカール・ノード(route locale node)120と関連付けられた高位ポリシ・ノード76を含むポリシ・ツリーを形成する。また、ポリシ・ツリー抽象概念は、階層ツリー抽象概念のノード114および115と関連付けられた中間ポリシ・ノード74および75を含んでもよい。トレジャリ・ノードは、ページ配置アルゴリズムを実施するためにポリシ・ノードによって確定されたポリシにしたがって、物理メモリ空間を割り当てる機構を表わす。ポリシおよびトレジャリ・ノードの、階層ツリー抽象概念のノードとの関連は、ロカール対ノード参照テーブル77中に保持されている。ロカール対ノード参照テーブル77は、好ましくは、一方の軸にJP番号、他方の軸にレベル番号を指定した二次元アレイである。各JPおよびレベル番号の指定毎に、ポリシまたはトレジャリ・ノードの一方に対するポインタが存在する。このように、オペレーティング・システムのスケジューリング要素が用いるのと同一JP−レベル命名基準を用いて、トレジャリまたはポリシ・ノードを素速く識別することができる。
システムの物理メモリは、「フレーム」と呼ばれる個別要素で構成されており、フレームのサイズは、基礎となるプロセッサ・アーキテクチャによって決定されるが、一般的に4KBである。オペレーティング・システムは、利用可能な物理メモリを、例えば、1024個の連続フレームから成る群に分割し、次にこれらフレーム群をシステム内のトレジャリに割り当てる。この割り当ては、高位フレーム・テーブル78の中に保持されている。これらフレームの各々は、固有の識別番号を有する。この番号は、フレームの開始物理アドレスをフレーム・サイズで除算することによって計算することができる。更に、各フレームは、高位フレーム・テーブル78内の1つのスロットによって管理され、このスロット番号は、フレームの固有識別番号をフレーム群のサイズで除算することによって計算することができる。NUMAシステム内の物理メモリの物理アドレスは、連続でなくてもよく、高位フレーム・テーブル78において識別されるフレームのいくつかは、実際の物理メモリを表わさない場合もある。このような場合、高位フレーム・テーブル78のかかるフレームへのエントリには、無効と印すこともできる。
以下で更に詳細に説明するが、トレジャリは、関連するメモリ・フレーム・テーブルを用いて、それらのロカールにおいて物理メモリのフレームを管理し、割り当てる。ポリシ・ノードを設けることによって、このポリシ・ノードと関連付けられた所定のポリシの考慮にしたがって、階層ツリー抽象概念におけるより高いレベルのノードに割り当てられる物理メモリのフレームを、実際には、ポリシ・ノードの子トレジャリ・ノードから割り当てるようにする。典型的に、これらのポリシは、子孫メモリ群(descendent memory group)間でかかる高位メモリ要求の負荷均衡化を行うように選択される。したがって、ポリシ・ツリーにおいてレベルが高い程、フレームを割り当てるメモリ群の数が多くなることを意味する。フレームを割り当ててフォールトを満足させるときに、ページ・フォールト処理ルーチンによって起動されるフレーム割り当てルーチンが、ポリシ・ツリーを通過する。フレーム割り当て部は、ページ配置制約を用いて、フレームを割り当てるメモリ・ロカールを決定する。この制約は、ページ配置アルゴリズムの適用を開始する、ポリシ・ノードを識別する。ポリシ・ツリーの通過は、論理アドレスによってマップされたオブジェクト・ページに帰せられる制約によっては、ルート、リーフ、またはある中間レベルにおいて開始することができる。いずれのマッピングのデフォルト制約も、メモリ・オブジェクトと関連付けられている。デフォルト制約は、オブジェクトの属性に応じて、オブジェクトに割り当てられる。
ページ配置アルゴリズムは、指定されたノードからポリシ・ツリーの通過を開始し、フレームを割り当てるべきフレーム・トレジャリを選択するまで、それが遭遇した各ノードに、レベル依存ポリシ(level-dependent policy)を適用する。重み付けを用いて、ツリーの所与のレベルにおいて、同胞ノード(silbing nodes)間で分散された全数のフレームにおける不均衡を補償することができる。ポリシ・ツリー管理のために用いられるデータ構造は、ポリシ・ノード・クラス一覧と、リンク構造とからなり、これは、ポリシ・ツリー内の全タイプのポリシ・ノードの中に埋め込まれる。ポリシ・ツリー内の特定タイプのノードに特定した他の情報も、この構造の中に保持することができる。本発明のオペレーティング・システムのページ配置アルゴリズムおよびその他のメモリ割り当てアルゴリズムがトレジャリおよびポリシ・ノードを利用する具体的な態様については、以下でより詳細に説明する。
図17は、NUMAシステムの仮想(論理)メモリの割り当てを表わす、システムの抽象概念およびデータ構造の例を示す。仮想メモリ・マネージャが使用する抽象概念は、構造ツリー抽象概念の各ノードと関連付けられたメモリ・プール(memory pool)80〜86を含む。メモリ・プールの、階層ツリー抽象概念との関連は、ロカール対ノード参照テーブル87の中に保持されている。ロカール対ノード参照テーブル87は、好ましくは、一方の軸にJP番号を指定し、他方の軸にレベル番号を指定した二次元アレイである。各JPおよびレベル番号の指定毎に、メモリ・プールの1つへのポインタが存在する。このようにして、オペレーティング・システムのスケジューリング要素が用いるのと同じJP−レベル命名基準を用いて、メモリ・プールを素速く識別することができる。
加えて、システムは、無配線メモリ(unwired memory)を区別することも可能な場合もある。無配線メモリとは、配線メモリから、物理メモリ外に割り振られた仮想メモリ領域のことでる。また、配線メモリとは、物理メモリ内に存在することを強制された、仮想メモリの領域のことである。これら異なるタイプのメモリ領域を収容するために、本発明のオペレーティング・システムは、抽象概念の各ノードに2つのタイプのメモリ・プールを、即ち、配線メモリに1つ、無配線メモリに1つのメモリ・プールを形成することができる。2つの異なるタイプのメモリ・プールは図17には示されていないが、システムの抽象概念の中に同様な並列メモリ構造を生成することにより、2つ以上の異なるタイプのメモリ・プールを考慮するように、システムを容易に修正することができる。加えて、共有ページ・テーブル割り当てに用いる特殊な無配線メモリ・プールを、ルート・メモリ・ロカールにのみ形成することもできる。更に、抽象概念の中の種々のロカールに他のタイプのメモリ・プールを形成し、システムの処理効率を向上するメモリ資源間のあらゆるタイプの区別にも対処することも可能である。
システムの仮想メモリは、「プール単位」に分割されている。プール単位は、例えば、4MBの所定の一定サイズを有し、1つ仮想メモリ範囲のみに対応する。本例では、フレーム群サイズとプール単位サイズとを同一として開示するが、同一ではない他のフレームおよびプール単位サイズを選択してもよい。プール単位の各々は固有の識別番号を有し、この識別番号は、プール単位の開始論理アドレスをプール単位サイズで除算することによって、素速く計算することができる。プール単位の各々が割り当てられるメモリ・プールは、プール単位テーブル88の中に保持される。NUMAシステム内の仮想メモリの論理アドレスは不連続でもよいので、プール単位テーブル88において識別されるプール単位のいくつかは、割り当てられた仮想メモリを表わさないものもある。このような場合、プール単位テーブル88のかかるプール単位へのエントリには、無効と印される。
初期状態では、全てのプール単位は割り当てられていない。続いて、プール単位は、必要に応じて、メモリ・プールに割り当てられる。このように、プール単位は、動的にシステム中に割り当てることができ、プール単位を統計的にシステム初期化時に割り当てる場合のように、多くのメモリ・プールにわたってメモリ資源を断片化することもなく、また人工的なメモリ枯渇(memory exhaustion)問題に発展することもない。仮想メモリ・マネージャが、カーネル・メモリに対する要求を処理する方法を、図18ないし図20に示す。メモリ要求がスレッドから発生したとき(図18、ステップ701)、仮想メモリ・マネージャは、システムが現在初期化中か否かを判定する(ステップ703)。そうであれば、仮想メモリ・マネージャは、ルート・ロカール120からの仮想メモリを割り当てることを選択する(ステップ705)。システムが初期化されていた場合、仮想メモリ・マネージャは、メモリ要求量が少ないか否か(≦64バイト)を判定する(ステップ707)。メモリ要求量が少ない場合、仮想メモリ・マネージャは、スレッドを実行するJPに最も近いメモリ・ロカールからのメモリを割り当てる(ステップ709)。メモリ要求量が少なくなく、特定のロカールが要求されていない場合、仮想メモリ・マネージャは、ホーム・スケジューリング・ロカールを獲得し、選択する(ステップ711)。ホーム・スケジューリング・ロカールは、上述のように、スレッドのスレッド群が最も緊密に親和化されているロカールである。
メモリ・ロカールを選択した後、仮想メモリ・マネージャは、選択したメモリ・ロカールに命名基準を用いて、ロカール対ノード参照テーブル87から、それと関連付けられたメモリ・プールを識別する(ステップ713)。一旦メモリ・プールが識別されたなら、仮想メモリ・マネージャは、識別されたメモリ・プールが十分な論理空間を有するか否かを判定する(ステップ715)。識別されたメモリ・プールが十分な空間を有する場合、仮想メモリ・マネージャは、先の要求のために論理空間を割り当てる(ステップ717)。一方、メモリ・プールが十分な論理空間を有していない場合、仮想メモリ・マネージャは、プール単位テーブル88の中で、未使用のプール単位を捜し出し(ステップ719)、識別されたメモリ・プールにプール単位を追加する(ステップ721)。次に、メモリ要求量がプール単位のサイズより少ない場合、仮想メモリ・マネージャはプール単位を分割し、要求された論理空間を割り当てる前に、メモリ要求量を有するメモリ・ブロックを得る(ステップ717)。
論理空間を割り当てた後、指定したロカールがトレジャリ・ノードではなく、ポリシ・ノードであった場合、仮想メモリ・マネージャは、割り当てたメモリ・ロカールからのフレームまたはその子孫メモリ・ロカールの1つ以上のフレームで、割り当てた論理空間を支える(ステップ725)。このように、上述の手順を用いて、仮想メモリ・マネージャは、プロセスと、当該プロセスが処理するデータとの間に可能な限り最も緊密な親和性を補償することができる。例えば、ノード114(図2)に親和化されたスレッド群のスレッド(JP100および102が双方とも同じスレッド群のスレッドを実行している場合が該当する)が、カーネル・メモリを要求した場合、仮想メモリ・マネージャは、ノード114のメモリ・ロカールを選択する。これは、当該スレッドのスレッド群が最も緊密に親和化されているロカールである。そして、仮想メモリ・マネージャは、ロカール対ノード参照テーブル87の中でノード114を表わす(2、0)命名基準に対応するメモリ・プールを参照することによって、ノード114を関連付けられたメモリ・プール(84)を識別する。次に、仮想メモリ・マネージャは、メモリ・プールから論理メモリ空間を割り当て、ノード114に物理メモリがない場合(即ち、ノード114がポリシ・ノードである)、ロカール114のいずれかの物理メモリからのフレームまたはその子メモリ・ロカール110および111からのフレームで、この論理空間を支える。後者の場合、仮想メモリ・マネージャがメモリ・ロカール110または111の一方を選択する方法は、特定のポリシ・ノードに制定されたポリシに依存する。ここで注記すべきは、各ポリシ・ノードは、他のポリシ・ノードとは異なる考慮を行うポリシを実施してもよいことである。かかるポリシは、その子ノードのハードウエア制約および性能データに基づいて、設計することができる。フレームを割り当てて論理空間を支えたメモリ・プール(単数または複数)からではなく、ノード114と関連付けられたメモリ・プールからの論理空間を割り当てることにより、割り当てられた物理メモリは、JP100および102上で実行されるスレッド双方にとって、より見やすくなる。更に、その後物理メモリから最も遠いJPが、最も近いJPよりも頻繁に、そこ記憶されているデータにアクセスする場合、メモリ・ロカール110または111の一方の中の物理メモリから、他方のメモリ・ロカール111または110の物理メモリに、後からメモリを移行させることもできる。
他の例として、JP100(図2)に親和化されているスレッド群のスレッドがカーネル・メモリを要求した場合、仮想メモリ・マネージャはノード110のメモリ・ロカールを選択し、メモリ・ロカール110と関連付けられたメモリ・プールからの論理空間を割り当て、メモリ・ロカール110と関連付けられた物理メモリからのフレームで、この論理空間を支える。
仮想メモリを使用するために解放するとき、仮想メモリ・マネージャは、解放された仮想メモリ・ブロックの開始論理アドレスを見て、所有するプール単位を識別する(ステップ727)。次に、仮想メモリ・マネージャは、プール単位テーブル88にアクセスすることによって、どのメモリ・プールにプール単位が割り当てられるのかを識別する(ステップ729)。次に、仮想メモリ・マネージャは、解放した仮想メモリの論理空間を放出し、識別されたメモリ・プールに合体する(ステップ731)。続いて、仮想メモリ・マネージャがステップ733において、メモリ・プールが未使用のプール単位を有すると判定した場合、このプール単位をプール単位テーブル88に戻し(ステップ735)、このプール単位を他のメモリ・プールに割り当てられるようにする。
仮想メモリ・マネージャ700がフレーム要求を処理する方法を、図21および図22に示す。ページ・フォールトが発生したとき、物理メモリのフレームに対する要求も行われ、仮想メモリ・マネージャ700は、ユーザがページ配置のためにロカールを特定したか否かを判定する(ステップ737)。ユーザがロカールを特定している場合、仮想メモリ・マネージャ700はこの要求を引き受け(honor)、ユーザによって特定されたロカールを指定する(ステップ739)。ユーザがロカールを特定していない場合、仮想メモリ・マネージャは、ページ・フォールトが大きなファイル、即ち、大きな共有メモリのためのものなのか否かをチェックする(ステップ741)。そうであれば、可能メモリ・マネージャはルート・ロカール120を指定する(ステップ743)。ページ・フォールトが大きなファイル、即ち、大きな共有メモリのためのものではない場合、仮想メモリ・マネージャは、ページ・フォールトがユーザの個人的データのためのものか否かを判定する(ステップ745)。ユーザの個人的データのためのページ・フォールトである場合、仮想メモリ・マネージャは、要求元スレッドのスレッド群が最も緊密に親和化されているホーム・スケジューリング・ロカールを指定する(ステップ747)。ユーザの個人的データのためのページ・フォールトでない場合、仮想メモリ・マネージャは、ページ・フォールトが共有メモリのためのものか否かを判定する(ステップ749)。共有メモリのためのページ・フォールトである場合、仮想メモリ・マネージャは、要求元スレッドのスレッド群が最も緊密に親和化されているホーム・スケジューリング・ロカールを指定する(ステップ751)。共有メモリのためのページ・フォールトでない場合、仮想メモリ・マネージャは、ページ・フォールトがユーザ実行可能なテキスト(即ち、プログラム・テキスト)のためのものか否かを判定する(ステップ753)。実行可能テキストのためのページ・フォールトである場合、仮想メモリ・マネージャは、要求元スレッドのスレッド群が最も緊密に親和化されているホーム・ロカールを指定する(ステップ755)。実行可能テキストのためのページ・フォールトでない場合、仮想メモリ・マネージャは、ページ・フォールトがユーザ・ファイル・データのためのものか否かを判定する(ステップ757)。ユーザ・ファイル・データのためのページ・フォールトである場合、また、この特定例では、ユーザ・ファイル・データに対するページ・フォールトでない場合、仮想メモリ・マネージャは、要求元スレッドのスレッド群が最も緊密に親和化されているホーム・ロカールを指定する(ステップ759および761)。ステップ745〜757における検査の結果には係わらずホーム・ロカールを指定したが、本発明のオペレーティング・システムを実施するNUMAシステムの特性に基づいて、各検査に対して指定するロカールを変えてもよい。
ロカールを指定した後、仮想メモリ・マネージャは、当該ロカールを識別する命名基準に基づいて、ロカール対ノード参照テーブル77を参照することによって、物理メモリ・ノード70〜76(図16)を識別する(図22、ステップ763)。次に、仮想メモリ・マネージャは、識別したノードがトレジャリ・ノードか、あるいはポリシ・ノードかを判定する(ステップ765)。このノードがトレジャリ・ノードである場合、ロカールは共有物理メモリ資源を表わすことを意味し、仮想メモリ・マネージャは、この物理メモリ資源からフレームを選択する(ステップ767)。このノードがトレジャリ・ノードではない場合、仮想メモリ・マネージャは、ラウンド・ロビン・アルゴリズム(round-robin algorithm)を用いて、このノードの子を1つ選択する。選択したノードがトレジャリである場合、そのトレジャリからフレームを割り当てる。選択したノードがトレジャリでない場合、その子の1つの選択し(ラウンド・ロビン)、このプロセスを繰り返す。
図22に示す手順において、ステップ769〜773は、ポリシ・ノードのポリシを表わす。これら3つのステップを、いずれかの所与のポリシ・ノードに対して考慮した所望のポリシを実行するための、他のいずれかのアルゴリズムと置き換えてもよい。
メモリは、システムの抽象概念の種々のノード間で移行させて、最も頻繁にデータをアクセスするJPからメモリに記憶されているデータをアクセスするコストを制限することができる。好ましくは、かかるメモリ移行は全て、アドレス透過(address transparent)であるべきである。アドレス透過メモリ移行とは、論理アドレスは一定のままであるが、物理アドレスが変化するものである。透過性は、ページ・テーブルとハードウエア・アドレスとの変換を用いることによって達成される。プール単位テーブル88を使用すれば、容易に論理アドレスからメモリ・プールへの変換を行うことができる。
メモリは、目的ロカール(即ち、論理アドレスが割り当てられるロカール)の子孫ロカールであるメモリ・ロカール間でのみ、透過的に移行可能である。したがって、目的ロカールが移行の自由度を制御する。最初の物理的配置は、目的ロカールの子孫から行われる。最初の物理的配置に選ばれたロカールを、初期ロカールと呼ぶ。したがって、図2を参照すると、ロカール(2、0)の目的とされたメモリは、初期ロカール(1、0)を有し、ロカール(1、0)、(1、1)、(1、2)および(1、3)間でのみ移行を許される。ルート・メモリ・ロカールを目的にすると、最大の自由度が許されるという利点があるが、メモリの、メモリ内に記憶されているデータにアクセスするJPとの親和性を低下させることになる。
本発明のオペレーティング・システムは、更に、抽象化システムの各トラジェリに、パージャ・スレッド(purger thread)と、クリーナ・スレッド(cleaner thread)とを含むことが好ましい。パージャ・スレッドは、物理メモリが単に満ち過ぎているときに、フレームまたはページ交換ポリシを実施する。クリーナ・スレッドは、修正ファイル・データを取り込み、自動的にこのデータを所定間隔でディスクに書き戻し、システムのクラッシュからデータを保護する。各ノードに別個のパージャおよびクリーナを設けることにより、単一のパージャまたはクリーナ・カーネル・スレッドのみに頼って、システム全体でそのタスクを実行する必要がなくなる。更に、システムはより容易に基準化が可能(scalable)であり、パージャやクリーナはより良い親和性を示す。
プロセッサとそれらが利用するデータとの間の親和性を高める他の方法は、システムの多数のトレジャリにおいて、あるタイプのファイル・ページの複製を許すことである。マップされた共有リード・ライトのような、あるタイプのファイル・ページは複製できないので、オペレーティング・システムは、各ページ・ファイルをどのようにマップするかを判定することができなければならず、各ファイル・ページのためのマッピングのタイプを考慮に入れた複製アルゴリズムを実施しなければならない。例えば、あるファイルの個人的なリード実行マッピング(read-execute mapping)は、プログラム・テキストを実行可能ファイル(executable)にマップするために、最も一般的に用いられている。実行可能なマッピングは、多数のプロセス間で共通して共有されているので、仮想メモリ・マネージャは、フォールティング・スレッド群が親和化されているメモリ・ロカールにおいて、かかるページの複製を積極的に試すことができる。かかる複製は、プログラム・ファイルのリード実行マッピング上でページ・フォールトが発生したときには、いつでも得ることができる。但し、そのファイルがどうあっても修正できない場合に限る。
ファイルの常駐サイズがある限度を超えて成長した場合、ファイル・ページは、フォールティング・スレッド群に親和化されているメモリ・ロカールにしたがって配置されるのではなく、メモリに送られながら負荷の均衡化を図ることができる。このように、システムは、ある特定ファイルからのページで、1つのメモリ・ロカールを飽和させてしまう事態を回避することができる。
本発明は、その精神または本質的な特性から逸脱することなく、他の特定形態において実施することも可能である。例えば、3レベルの実行キューを有するシステムについてこれまで論じてきたが、同一の概念は、3処理レベル以上のレベルで組織されたシステムにも容易に拡張可能であることは理解されよう。更に、本発明の説明にはスレッド群上で動作する例を用いたが、本オペレーティング・システムは単一プロセス(スレッド)上でも同様に動作する。本発明の範囲は、上述の説明ではなく、特許請求の範囲によって指示されており、特許請求の範囲の意味および均等の範囲に該当する変更は全て、特許請求の範囲に包含されることを意図するものである。
図1は、非一様メモリ・アクセス(NUMA)マルチプロセッサ・システムの一例の概要を示すブロック図。 図2は、図1に示す非一様メモリ・アクセス(NUMA)マルチプロセッサ・システムの抽象概念を示すブロック図。 図1に示すシステム上で実行されるプロセスの内部組織を示すブロック図。 本発明のディスパッチャが、スレッド群を選択し実行する処理を示すフローチャート。 本発明のディスパッチャが、スレッド群を選択し実行する処理を示すフローチャート。 本発明のディスパッチャが、スレッド群を選択し実行する処理を示すフローチャート。 本発明のディスパッチャが、スレッド群を選択し実行する処理を示すフローチャート。 本発明のオペレーティング・システムの一部を構成する中期スケジューラが実行する処理のフローチャート。 本発明のオペレーティング・システムの一部を構成する中期スケジューラが実行する処理のフローチャート。 本発明のオペレーティング・システムの一部を構成する中期スケジューラが実行する処理のフローチャート。 本発明のオペレーティング・システムの一部を構成する中期スケジューラが実行する処理のフローチャート。 本発明のオペレーティング・システムの一部を構成する中期スケジューラが実行する処理のフローチャート。 本発明のオペレーティング・システムの一部を構成する中期スケジューラが実行する処理のフローチャート。 本発明のオペレーティング・システムの一部を構成する中期スケジューラが実行する処理のフローチャート。 本発明のオペレーティング・システムの一部を構成する中期スケジューラが実行する処理のフローチャート。 図16は、図1に示した非一様メモリ・アクセス(NUMA)マルチプロセッサ・システムおよび関連する連携データ構造のポリシ・ツリー抽象概念を示すブロック図。 図17は、図1に示した非一様メモリ・アクセス(NUMA)マルチプロセッサ・システムおよび関連する連携データ構造の仮想メモリ抽象概念を示すブロック図。 本発明のオペレーティング・システムの一部を構成する仮想メモリ・マネージャが実行する処理のフローチャート。 本発明のオペレーティング・システムの一部を構成する仮想メモリ・マネージャが実行する処理のフローチャート。 本発明のオペレーティング・システムの一部を構成する仮想メモリ・マネージャが実行する処理のフローチャート。 本発明のオペレーティング・システムの一部を構成する仮想メモリ・マネージャが実行する処理のフローチャート。 本発明のオペレーティング・システムの一部を構成する仮想メモリ・マネージャが実行する処理のフローチャート。
符号の説明
1〜8 ジョブ・プロセッサ
10〜15 共有資源
16 共有メモリ/主システム・バス
20 NUMAマルチプロセッサ・システム
70〜73 トレジャリ・ノード
74、75 中間ポリシ・ノード
76 高位ポリシ・ノード
77 ロカール対ノード参照テーブル
78 高位フレーム・テーブル
80〜86 メモリ・プール
87 ロカール対ノード参照テーブル
88 プール単位テーブル
100〜107 リーフ・ノード
110〜115 ノード
120 ルート・ノード
150 ソフトウエア抽象概念
200 プロセス
210、220、230 スレッド群
211、221、231 スレッド群構造
212〜214、222、223、232、233 タイムシェアリング・スレッド
240 データ集合
241 データ
600 中期スケジューラ
700 仮想メモリ・マネージャ

Claims (13)

  1. 各々実行キューと関連付けられた複数のプロセッサを有するマルチプロセッサ・システムのためのオペレーティング・システムであって、
    前記プロセッサの1つと関連付けられ、前記関連するプロセッサの実行キューを監視し、前記関連するプロセッサが実行するために、他のプロセッサの実行キューからプロセスを捜して獲得するディスパッチャと、
    前記システムにおけるアクティブなプロセスの進展を監視し、処理されていないプロセスにフラグをセットする中期スケジューラと、
    から成り、
    前記ディスパッチャは、複数の入手可能なプロセスを有する実行キューを見つけ出し、前記ディスパッチャはフラグがセットされているプロセスを選択する、
    ことを特徴とする前記オペレーティング・システム。
  2. 請求項1記載のオペレーティング・システムにおいて、前記プロセスはスレッド群を含み、前記ディスパッチャは、前記複数の入手可能なスレッド群にフラグがセットされたものがないとき、最高の優先度を有するスレッド群を選択することを特徴とする前記オペレーティング・システム。
  3. 各々実行キューと関連付けられた複数のプロセッサを有するマルチプロセッサ・システムにおいて実行すべきスレッド群を選択する方法であって、
    各プロセッサの前記実行キューを監視するステップと、
    あるプロセッサが実行するために、他のプロセッサの実行キューからスレッド群を捜して獲得するステップであって、各スレッド群がそれらに割り当てられた優先度を有し、
    前記システム内のアクティブなスレッド群の進展を監視し、進展していないスレッド群にフラグをセットするステップと、
    前記スレッド群が位置付けられている実行キューが複数の入手可能なスレッド群を有するときは、フラグがセットされているスレッド群を選択し、前記スレッド群のいずれにもフラグがセットされていない場合は、最高の優先度を有するスレッド群を選択するステップと、
    から成ることを特徴とする前記方法。
  4. 各々実行キューが関連付けられた複数のプロセッサを有するマルチプロセッサ・システムのためのオペレーティング・システムであって、
    前記システム内の各アクティブなプロセスの進展を監視し、所定時間期間の間に進展しない各アクティブなプロセスの優先度を昇進させる中期スケジューラと、
    前記プロセッサの1つと関連付けられ、該関連するプロセッサによって実行されるプロセスが待ち行列をなす実行キューを監視し、前記関連するプロセッサが実行するために、前記実行キューの中で最高の優先度を有するアクティブなプロセスを選択する、少なくとも1つのディスパッチャと、
    から成ることを特徴とする前記オペレーティング・システム。
  5. 複数のプロセッサと、各々前記プロセッサの異なる組み合わせによって共有される複数の共有メモリー資源とを含むハードウエア・アーキテクチャを有するマルチプロセッサ・システムのためのオペレーティング・システムであって、
    前記マルチプロセッサ・システムのハードウエア・アーキテクチャの抽象概念を維持する手段であって、前記プロセッサに対応し階層ツリーの最低レベルに位置付けられる複数のリーフ・ノードと、前記プロセッサおよび共有メモリー資源の全てによって共有される共通資源に対応し前記階層ツリーの最高レベルに位置付けられるルート・ノードと、前記共有メモリー資源に対応し前記階層ツリーの少なくとも1つの中間レベルに位置付けられる複数の中間ノードとを有する階層ツリー構造の形状で、前記プロセッサと共有メモリー資源との物理的構成を表現する前記抽象概念を維持する前記手段と、
    共有物理メモリ資源を表わす各ノードにおいてフレーム・トラジェリを維持し、前記メモリ資源の物理メモリのフレーム管理および割り当てを制御し、関連するトラジェリを有する全てのノードに共通なノードを高位ポリシ・ノードとして識別し、前記プロセッサの少なくとも1つが用いるために、前記フレーム・トラジェリから物理メモリのフレームを割り当てる手段と、
    から成ることを特徴とする前記システム。
  6. 請求項5記載のオペレーティング・システムであって、更に、物理メモリ空間に対するプロセス要求を受け、どのノードから前記要求された物理メモリ空間を割り当てるかを識別し、前記識別されたノードと関連付けられたフレーム・トラジェリから、前記要求された物理メモリ空間を割り当てる、メモリ・マネージャを含むことを特徴とする前記オペレーティング・システム。
  7. 請求項6記載のオペレーティング・システムにおいて、前記識別されたノードはポリシ・ノードであり、前記メモリ・マネージャは、該ポリシ・ノードのポリシ制約に基づいて、前記ポリシ・ノードと関連付けられた1つ以上の関連するフレーム・トラジェリから、前記要求された物理メモリを割り当てることを特徴とする前記オペレーティング・システム。
  8. 複数のプロセッサと、各々前記プロセッサの異なる組み合わせによって共有される複数の共有メモリー資源とを含むハードウエア・アーキテクチャを有するマルチプロセッサ・システムのためのオペレーティング・システムであって、
    前記マルチプロセッサ・システムのハードウエア・アーキテクチャの抽象概念を維持する手段であって、前記プロセッサに対応し階層ツリーの最低レベルに位置付けられる複数のリーフ・ノードと、前記プロセッサおよび共有メモリー資源の全てによって共有される共通資源に対応し前記階層ツリーの最高レベルに位置付けられるルート・ノードと、前記共有メモリー資源に対応し前記階層ツリーの少なくとも1つの中間レベルに位置付けられる複数の中間ノードとを有する階層ツリー構造の形状で、前記プロセッサと共有メモリー資源との物理的構成を表現する前記抽象概念を維持する前記手段と、
    前記ルート・ノードと関連付けられ、割り当てられ得る物理メモリの各フレームのリストと、リストされている各フレームと関連付けられ、当該フレームが位置する前記メモリ資源を表わすノードを識別するポインタとを含む、高位フレーム・テーブルを維持する手段と、
    から成ることを特徴とする前記オペレーティング・システム。
  9. 複数のプロセッサと、各々前記プロセッサの異なる組み合わせによって共有される複数の共有メモリー資源とを含むハードウエア・アーキテクチャを有するマルチプロセッサ・システムのためのオペレーティング・システムであって、
    前記マルチプロセッサ・システムのハードウエア・アーキテクチャの抽象概念を維持する手段であって、前記プロセッサに対応し階層ツリーの最低レベルに位置付けられる複数のリーフ・ノードと、前記プロセッサおよび共有メモリー資源の全てによって共有される共通資源に対応し前記階層ツリーの最高レベルに位置付けられるルート・ノードと、前記共有メモリー資源に対応し前記階層ツリーの少なくとも1つの中間レベルに位置付けられる複数の中間ノードとを有する階層ツリー構造の形状で、前記プロセッサと共有メモリー資源との物理的構成を表現する前記抽象概念を維持する前記手段と、
    前記システムの仮想メモリの割り当てのために、メモリ・ロカールを表わす各ノードにおいてメモリ・プールを維持し、前記仮想メモリをプール単位に分割して前記メモリ・プールに割り当てる手段と、
    プール単位および該プール単位の各々が割り当てられている前記メモリ・プールの可用性を識別する、プール単位テーブルを維持する手段と、
    から成ることを特徴とする前記オペレーティング・システム。
  10. 請求項9記載のオペレーティング・システムであって、更に、仮想メモリ空間に対するプロセス要求を受け、該要求された仮想メモリ空間をどのメモリ・プールから割り当てるかを識別し、前記識別されたメモリ・プールが十分な仮想メモリ空間を有していない場合、前記識別されたメモリ・プールに対する前記プール単位テーブルから、追加のプール単位を得て、前記識別されたメモリ・プールから前記要求されたメモリ空間を割り当てる、メモリ・マネージャを含むことを特徴とする前記オペレーティング・システム。
  11. 請求項10記載のオペレーティング・システムにおいて、前記メモリ・マネージャは、前記識別されたメモリ・プールと関連付けられた物理メモリ空間で、前記要求された仮想メモリ空間を支えることを特徴とする前記オペレーティング・システム。
  12. 請求項9記載のオペレーティング・システムであって、仮想メモリ空間を放出し、解放された仮想メモリ空間が属するプール単位を識別し、前記プール単位テーブルにアクセスし、前記識別されたプール単位が属するメモリ・プールを識別し、前記解放された仮想メモリ空間を前記識別されたメモリ・プールに放出する、メモリ・マネージャを含むことを特徴とする前記オペレーティング・システム。
  13. 請求項12記載のオペレーティング・システムにおいて、前記メモリ・マネージャは、各メモリ・プールにおいて、プール単位にサイズが等しい連続する解放仮想メモリ空間を捜し、前記プール単位テーブルにエントリを配置し、前記解放仮想メモリと関連付けられた前記プール単位がメモリ・プールへの割り当てに利用可能であることを指示することによって、前記解放仮想メモリを放出することを特徴とする前記オペレーティング・システム。
JP2006158290A 1995-06-23 2006-06-07 非一様メモリ・アクセス・マルチプロセッサ・システム用オペレーティング・システム Pending JP2006302305A (ja)

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
US08/494,357 US6105053A (en) 1995-06-23 1995-06-23 Operating system for a non-uniform memory access multiprocessor system

Related Parent Applications (1)

Application Number Title Priority Date Filing Date
JP16351596A Division JP3836187B2 (ja) 1995-06-23 1996-06-24 非一様メモリ・アクセス・マルチプロセッサ・システム用オペレーティング・システム

Related Child Applications (1)

Application Number Title Priority Date Filing Date
JP2007296973A Division JP2008112457A (ja) 1995-06-23 2007-11-15 非一様メモリ・アクセス・マルチプロセッサ・システム用オペレーティング・システム

Publications (1)

Publication Number Publication Date
JP2006302305A true JP2006302305A (ja) 2006-11-02

Family

ID=23964148

Family Applications (3)

Application Number Title Priority Date Filing Date
JP16351596A Expired - Lifetime JP3836187B2 (ja) 1995-06-23 1996-06-24 非一様メモリ・アクセス・マルチプロセッサ・システム用オペレーティング・システム
JP2006158290A Pending JP2006302305A (ja) 1995-06-23 2006-06-07 非一様メモリ・アクセス・マルチプロセッサ・システム用オペレーティング・システム
JP2007296973A Pending JP2008112457A (ja) 1995-06-23 2007-11-15 非一様メモリ・アクセス・マルチプロセッサ・システム用オペレーティング・システム

Family Applications Before (1)

Application Number Title Priority Date Filing Date
JP16351596A Expired - Lifetime JP3836187B2 (ja) 1995-06-23 1996-06-24 非一様メモリ・アクセス・マルチプロセッサ・システム用オペレーティング・システム

Family Applications After (1)

Application Number Title Priority Date Filing Date
JP2007296973A Pending JP2008112457A (ja) 1995-06-23 2007-11-15 非一様メモリ・アクセス・マルチプロセッサ・システム用オペレーティング・システム

Country Status (5)

Country Link
US (1) US6105053A (ja)
EP (1) EP0750255A3 (ja)
JP (3) JP3836187B2 (ja)
AU (1) AU701540B2 (ja)
CA (1) CA2179483A1 (ja)

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2020102189A (ja) * 2018-12-21 2020-07-02 北京百度网▲訊▼科技有限公司Beijing Baidu Netcom Science And Technology Co., Ltd. データ処理用の方法、装置及びシステム

Families Citing this family (172)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US7301541B2 (en) 1995-08-16 2007-11-27 Microunity Systems Engineering, Inc. Programmable processor and method with wide operations
FR2767939B1 (fr) * 1997-09-04 2001-11-02 Bull Sa Procede d'allocation de memoire dans un systeme de traitement de l'information multiprocesseur
FR2767938B1 (fr) * 1997-09-04 2001-08-24 Bull Sa Procede d'allocation de memoire dans un systeme de traitement de l'information multiprocesseur
FR2774788B1 (fr) * 1998-02-12 2000-03-24 Bull Sa Procede de controle d'acces memoire sur une machine avec memoire a acces non uniforme et machine pour mettre en oeuvre ce procede
US6038651A (en) * 1998-03-23 2000-03-14 International Business Machines Corporation SMP clusters with remote resource managers for distributing work to other clusters while reducing bus traffic to a minimum
US6477561B1 (en) * 1998-06-11 2002-11-05 Microsoft Corporation Thread optimization
US6477586B1 (en) * 1998-06-29 2002-11-05 International Business Machines Corporation Remote procedure calls in distributed systems
US6327668B1 (en) * 1998-06-30 2001-12-04 Sun Microsystems, Inc. Determinism in a multiprocessor computer system and monitor and processor therefor
ATE557343T1 (de) * 1998-08-24 2012-05-15 Microunity Systems Eng Prozessor und verfahren zur durchführung eines breitschaltungsbefehls mit breitem operand
US7932911B2 (en) * 1998-08-24 2011-04-26 Microunity Systems Engineering, Inc. Processor for executing switch and translate instructions requiring wide operands
US6289369B1 (en) * 1998-08-25 2001-09-11 International Business Machines Corporation Affinity, locality, and load balancing in scheduling user program-level threads for execution by a computer system
US7017156B1 (en) 1998-08-28 2006-03-21 Oracle International Corporation System for computing an estimate execution time by totaling the time value base on an architecture or a software operating environment
US7526767B1 (en) 1998-08-28 2009-04-28 Oracle International Corporation Methods for automatic group switching according to a resource plan
US7451448B1 (en) 1998-08-28 2008-11-11 Oracle International Corporation Methods for selectively quiescing a computer system
FR2786288B1 (fr) * 1998-11-23 2001-08-10 Bull Sa Systeme de traitement par ensembles de ressources
US7216348B1 (en) * 1999-01-05 2007-05-08 Net2Phone, Inc. Method and apparatus for dynamically balancing call flow workloads in a telecommunications system
FR2792087B1 (fr) * 1999-04-07 2001-06-15 Bull Sa Procede d'amelioration des performances d'un systeme multiprocesseur comprenant une file d'attente de travaux et architecture de systeme pour la mise en oeuvre du procede
US7401112B1 (en) * 1999-05-26 2008-07-15 Aspect Communication Corporation Methods and apparatus for executing a transaction task within a transaction processing system employing symmetric multiprocessors
US6182161B1 (en) * 1999-08-16 2001-01-30 Mti Technology Corp. Method and apparatus for building software nets using an array structure
US6480293B1 (en) * 1999-11-24 2002-11-12 Xerox Corporation Encoding of requests for status in document assembly trees
US7636915B1 (en) * 1999-12-02 2009-12-22 Invensys Systems, Inc. Multi-level multi-variable control process program execution scheme for distributed process control systems
US6658449B1 (en) * 2000-02-17 2003-12-02 International Business Machines Corporation Apparatus and method for periodic load balancing in a multiple run queue system
US6748593B1 (en) * 2000-02-17 2004-06-08 International Business Machines Corporation Apparatus and method for starvation load balancing using a global run queue in a multiple run queue system
US7206843B1 (en) * 2000-04-21 2007-04-17 Sun Microsystems, Inc. Thread-safe portable management interface
US7739325B1 (en) 2000-04-24 2010-06-15 Aspect Software, Inc. Apparatus and method for extensible real-time workflows
US7221377B1 (en) * 2000-04-24 2007-05-22 Aspect Communications Apparatus and method for collecting and displaying information in a workflow system
US6981260B2 (en) * 2000-05-25 2005-12-27 International Business Machines Corporation Apparatus for minimizing lock contention in a multiple processor system with multiple run queues when determining the threads priorities
US6785889B1 (en) * 2000-06-15 2004-08-31 Aurema, Inc. System and method for scheduling bandwidth resources using a Kalman estimator with active feedback
US6670969B1 (en) * 2000-06-29 2003-12-30 Curl Corporation Interface frames for threads
US7277933B2 (en) * 2000-08-28 2007-10-02 Fujitsu Limited System for operating a plurality of apparatuses based on accumulated operating times thereof to equalize the respective operating times of the apparatuses
US6915516B1 (en) * 2000-09-29 2005-07-05 Emc Corporation Apparatus and method for process dispatching between individual processors of a multi-processor system
US7035998B1 (en) * 2000-11-03 2006-04-25 Mips Technologies, Inc. Clustering stream and/or instruction queues for multi-streaming processors
US7139898B1 (en) * 2000-11-03 2006-11-21 Mips Technologies, Inc. Fetch and dispatch disassociation apparatus for multistreaming processors
US7178137B1 (en) 2001-04-05 2007-02-13 Network Appliance, Inc. Automatic verification of scheduling domain consistency
US7694302B1 (en) * 2001-04-05 2010-04-06 Network Appliance, Inc. Symmetric multiprocessor synchronization using migrating scheduling domains
US7016972B2 (en) * 2001-04-23 2006-03-21 International Business Machines Corporation Method and system for providing and viewing performance analysis of resource groups
US7036123B2 (en) * 2001-04-25 2006-04-25 Sun Microsystems, Inc. System using fair-share scheduling technique to schedule processes within each processor set based on the number of shares assigned to each process group
US20020184290A1 (en) * 2001-05-31 2002-12-05 International Business Machines Corporation Run queue optimization with hardware multithreading for affinity
US20030037091A1 (en) * 2001-08-09 2003-02-20 Kozo Nishimura Task scheduling device
US7305674B2 (en) * 2001-08-31 2007-12-04 International Business Machines Corporation Method and apparatus to manage multi-computer supply
US6996745B1 (en) * 2001-09-27 2006-02-07 Sun Microsystems, Inc. Process for shutting down a CPU in a SMP configuration
US7159216B2 (en) * 2001-11-07 2007-01-02 International Business Machines Corporation Method and apparatus for dispatching tasks in a non-uniform memory access (NUMA) computer system
US20030110205A1 (en) * 2001-12-07 2003-06-12 Leith Johnson Virtualized resources in a partitionable server
CA2365729A1 (en) * 2001-12-20 2003-06-20 Platform Computing (Barbados) Inc. Topology aware scheduling for a multiprocessor system
US7043666B2 (en) * 2002-01-22 2006-05-09 Dell Products L.P. System and method for recovering from memory errors
JP2003263331A (ja) * 2002-03-07 2003-09-19 Toshiba Corp マルチプロセッサシステム
US20030177166A1 (en) * 2002-03-15 2003-09-18 Research Foundation Of The State University Of New York Scalable scheduling in parallel processors
US7080379B2 (en) * 2002-06-20 2006-07-18 International Business Machines Corporation Multiprocessor load balancing system for prioritizing threads and assigning threads into one of a plurality of run queues based on a priority band and a current load of the run queue
US7444636B2 (en) * 2002-07-15 2008-10-28 Hewlett-Packard Development Company, L.P. Method and system of determining attributes of a functional unit in a multiple processor computer system
US7054985B2 (en) * 2002-07-23 2006-05-30 Hewlett-Packard Development Company, L.P. Multiple hardware partitions under one input/output hub
US7093258B1 (en) * 2002-07-30 2006-08-15 Unisys Corporation Method and system for managing distribution of computer-executable program threads between central processing units in a multi-central processing unit computer system
US7389506B1 (en) * 2002-07-30 2008-06-17 Unisys Corporation Selecting processor configuration based on thread usage in a multiprocessor system
CA2496664C (en) 2002-08-23 2015-02-17 Exit-Cube, Inc. Encrypting operating system
US7159221B1 (en) * 2002-08-30 2007-01-02 Unisys Corporation Computer OS dispatcher operation with user controllable dedication
US7146389B2 (en) * 2002-08-30 2006-12-05 Hitachi, Ltd. Method for rebalancing free disk space among network storages virtualized into a single file system view
US7167916B2 (en) * 2002-08-30 2007-01-23 Unisys Corporation Computer OS dispatcher operation with virtual switching queue and IP queues
US20040088498A1 (en) * 2002-10-31 2004-05-06 International Business Machines Corporation System and method for preferred memory affinity
US7069523B2 (en) * 2002-12-13 2006-06-27 Lsi Logic Corporation Automated selection and placement of memory during design of an integrated circuit
US20060123421A1 (en) * 2002-12-27 2006-06-08 Loboz Charles Z Streamlining cpu utilization by delaying transactions
AU2002360776A1 (en) * 2002-12-27 2004-07-22 Unisys Corporation Streamlining cpu utilisation by delaying transactions
US7237242B2 (en) * 2002-12-31 2007-06-26 International Business Machines Corporation Dynamic thread pool tuning techniques
US7207043B2 (en) * 2002-12-31 2007-04-17 International Business Machines Corporation Programmatic response-time based workload distribution techniques
US7373640B1 (en) 2003-07-31 2008-05-13 Network Appliance, Inc. Technique for dynamically restricting thread concurrency without rewriting thread code
US7496928B2 (en) * 2003-08-28 2009-02-24 Microsoft Corporation Method and system for moderating thread priority boost for I/O completion
US7614056B1 (en) * 2003-09-12 2009-11-03 Sun Microsystems, Inc. Processor specific dispatching in a heterogeneous configuration
KR100662120B1 (ko) * 2003-10-20 2006-12-27 엘지전자 주식회사 홈 네트워킹에 의한 가전기기의 메모리 공용방법
US20050108713A1 (en) * 2003-11-18 2005-05-19 Geye Scott A. Affinity mask assignment system and method for multiprocessor systems
US7543142B2 (en) 2003-12-19 2009-06-02 Intel Corporation Method and apparatus for performing an authentication after cipher operation in a network processor
US7512945B2 (en) * 2003-12-29 2009-03-31 Intel Corporation Method and apparatus for scheduling the processing of commands for execution by cryptographic algorithm cores in a programmable network processor
US20050149744A1 (en) * 2003-12-29 2005-07-07 Intel Corporation Network processor having cryptographic processing including an authentication buffer
US7529924B2 (en) * 2003-12-30 2009-05-05 Intel Corporation Method and apparatus for aligning ciphered data
US7380039B2 (en) * 2003-12-30 2008-05-27 3Tera, Inc. Apparatus, method and system for aggregrating computing resources
US8171480B2 (en) * 2004-01-27 2012-05-01 Network Appliance, Inc. Method and apparatus for allocating shared resources to process domains according to current processor utilization in a shared resource processor
US7703101B2 (en) * 2004-02-13 2010-04-20 International Business Machines Corporation Autonomic workload classification using predictive assertion for wait queue and thread pool selection
US7565653B2 (en) 2004-02-20 2009-07-21 Sony Computer Entertainment Inc. Methods and apparatus for processor task migration in a multi-processor system
US8028292B2 (en) 2004-02-20 2011-09-27 Sony Computer Entertainment Inc. Processor task migration over a network in a multi-processor system
US7614053B2 (en) 2004-02-20 2009-11-03 Sony Computer Entertainment Inc. Methods and apparatus for task management in a multi-processor system
US7266540B2 (en) * 2004-03-04 2007-09-04 International Business Machines Corporation Mechanism for dynamic workload rebalancing in a multi-nodal computer system
US7584476B2 (en) * 2004-03-04 2009-09-01 International Business Machines Corporation Mechanism for reducing remote memory accesses to shared data in a multi-nodal computer system
US20050210472A1 (en) * 2004-03-18 2005-09-22 International Business Machines Corporation Method and data processing system for per-chip thread queuing in a multi-processor system
US7877484B2 (en) * 2004-04-23 2011-01-25 International Business Machines Corporation System and method for bulk processing of semi-structured result streams from multiple resources
US7243169B2 (en) * 2004-06-08 2007-07-10 International Business Machines Corporation Method, system and program for oscillation control of an internal process of a computer program
US7460126B2 (en) * 2004-08-24 2008-12-02 Silicon Graphics, Inc. Scalable method and system for streaming high-resolution media
US20060075404A1 (en) * 2004-10-06 2006-04-06 Daniela Rosu Method and system for scheduling user-level I/O threads
US7646779B2 (en) * 2004-12-23 2010-01-12 Intel Corporation Hierarchical packet scheduler using hole-filling and multiple packet buffering
US7525962B2 (en) * 2004-12-27 2009-04-28 Intel Corporation Reducing memory access bandwidth consumption in a hierarchical packet scheduler
US8108871B2 (en) * 2005-01-13 2012-01-31 Hewlett-Packard Development Company, L.P. Controlling computer resource utilization
US7657883B2 (en) * 2005-02-04 2010-02-02 Mips Technologies, Inc. Instruction dispatch scheduler employing round-robin apparatus supporting multiple thread priorities for use in multithreading microprocessor
US7752627B2 (en) * 2005-02-04 2010-07-06 Mips Technologies, Inc. Leaky-bucket thread scheduler in a multithreading microprocessor
US7506140B2 (en) * 2005-02-04 2009-03-17 Mips Technologies, Inc. Return data selector employing barrel-incrementer-based round-robin apparatus
US7613904B2 (en) * 2005-02-04 2009-11-03 Mips Technologies, Inc. Interfacing external thread prioritizing policy enforcing logic with customer modifiable register to processor internal scheduler
US7853777B2 (en) * 2005-02-04 2010-12-14 Mips Technologies, Inc. Instruction/skid buffers in a multithreading microprocessor that store dispatched instructions to avoid re-fetching flushed instructions
US7657891B2 (en) 2005-02-04 2010-02-02 Mips Technologies, Inc. Multithreading microprocessor with optimized thread scheduler for increasing pipeline utilization efficiency
US7681014B2 (en) * 2005-02-04 2010-03-16 Mips Technologies, Inc. Multithreading instruction scheduler employing thread group priorities
US7664936B2 (en) * 2005-02-04 2010-02-16 Mips Technologies, Inc. Prioritizing thread selection partly based on stall likelihood providing status information of instruction operand register usage at pipeline stages
US7631130B2 (en) * 2005-02-04 2009-12-08 Mips Technologies, Inc Barrel-incrementer-based round-robin apparatus and instruction dispatch scheduler employing same for use in multithreading microprocessor
US7490230B2 (en) * 2005-02-04 2009-02-10 Mips Technologies, Inc. Fetch director employing barrel-incrementer-based round-robin apparatus for use in multithreading microprocessor
US8219823B2 (en) 2005-03-04 2012-07-10 Carter Ernst B System for and method of managing access to a system using combinations of user information
US8051418B1 (en) * 2005-03-21 2011-11-01 Oracle America, Inc. Techniques for providing improved affinity scheduling in a multiprocessor computer system
US20060229638A1 (en) * 2005-03-29 2006-10-12 Abrams Robert M Articulating retrieval device
US8255912B2 (en) * 2005-04-13 2012-08-28 Qualcomm Incorporated Techniques for setting events in a multi-threaded system
US7383396B2 (en) * 2005-05-12 2008-06-03 International Business Machines Corporation Method and apparatus for monitoring processes in a non-uniform memory access (NUMA) computer system
US7793299B2 (en) * 2005-08-30 2010-09-07 International Business Machines Corporation System and method for scheduling tasks for execution
US8429630B2 (en) * 2005-09-15 2013-04-23 Ca, Inc. Globally distributed utility computing cloud
US8347293B2 (en) * 2005-10-20 2013-01-01 Network Appliance, Inc. Mutual exclusion domains to perform file system processes on stripes
US8489700B2 (en) * 2005-11-30 2013-07-16 International Business Machines Corporation Analysis of nodal affinity behavior
US20070226696A1 (en) * 2006-02-03 2007-09-27 Dell Products L.P. System and method for the execution of multithreaded software applications
US20070214333A1 (en) * 2006-03-10 2007-09-13 Dell Products L.P. Modifying node descriptors to reflect memory migration in an information handling system with non-uniform memory access
JP4963854B2 (ja) * 2006-03-28 2012-06-27 株式会社ソニー・コンピュータエンタテインメント マルチプロセッサコンピュータおよびネットワークコンピューティングシステム
US8429218B2 (en) * 2006-04-06 2013-04-23 International Business Machines Corporation Process restart on a compute node
US8150946B2 (en) * 2006-04-21 2012-04-03 Oracle America, Inc. Proximity-based memory allocation in a distributed memory system
US8104039B2 (en) * 2006-08-07 2012-01-24 International Business Machines Corporation Method for balancing resource sharing and application latency within a data processing system
US7990989B2 (en) * 2006-09-16 2011-08-02 Mips Technologies, Inc. Transaction selector employing transaction queue group priorities in multi-port switch
US7760748B2 (en) * 2006-09-16 2010-07-20 Mips Technologies, Inc. Transaction selector employing barrel-incrementer-based round-robin apparatus supporting dynamic priorities in multi-port switch
US7961745B2 (en) * 2006-09-16 2011-06-14 Mips Technologies, Inc. Bifurcated transaction selector supporting dynamic priorities in multi-port switch
US7773621B2 (en) * 2006-09-16 2010-08-10 Mips Technologies, Inc. Transaction selector employing round-robin apparatus supporting dynamic priorities in multi-port switch
JP5057361B2 (ja) 2006-10-02 2012-10-24 独立行政法人 宇宙航空研究開発機構 資源の制約をともなう自律分散型制御
US8255915B1 (en) * 2006-10-31 2012-08-28 Hewlett-Packard Development Company, L.P. Workload management for computer system with container hierarchy and workload-group policies
US20080196030A1 (en) * 2007-02-13 2008-08-14 Buros William M Optimizing memory accesses for multi-threaded programs in a non-uniform memory access (numa) system
US8327363B2 (en) * 2007-07-24 2012-12-04 Microsoft Corporation Application compatibility in multi-core systems
US8544014B2 (en) * 2007-07-24 2013-09-24 Microsoft Corporation Scheduling threads in multi-core systems
US8959516B2 (en) 2007-07-30 2015-02-17 International Business Machines Corporation Methods and systems for coordinated financial transactions in distributed and parallel environments
US8898669B2 (en) * 2007-07-30 2014-11-25 International Business Machines Corporation Methods and systems for coordinated transactions
US7923341B2 (en) * 2007-08-13 2011-04-12 United Solar Ovonic Llc Higher selectivity, method for passivating short circuit current paths in semiconductor devices
US20090158299A1 (en) * 2007-10-31 2009-06-18 Carter Ernst B System for and method of uniform synchronization between multiple kernels running on single computer systems with multiple CPUs installed
US8156495B2 (en) * 2008-01-17 2012-04-10 Oracle America, Inc. Scheduling threads on processors
US8640131B2 (en) * 2008-01-18 2014-01-28 Microsoft Corporation Demand-based processor cycle allocation subsequent to equal group-based processor cycle distribution
US20090249343A1 (en) * 2008-03-25 2009-10-01 Pirasenna Thiyagarajan System, method, and computer program product for receiving timer objects from local lists in a global list for being used to execute events associated therewith
US8392913B2 (en) * 2008-03-28 2013-03-05 International Business Machines Corporation Method and apparatus for threaded background function support
US8656395B2 (en) * 2008-05-15 2014-02-18 International Business Machines Corporation Method and system for optimizing a job scheduler in an operating system
US8566830B2 (en) * 2008-05-16 2013-10-22 Microsoft Corporation Local collections of tasks in a scheduler
US8561072B2 (en) * 2008-05-16 2013-10-15 Microsoft Corporation Scheduling collections in a scheduler
US9201673B2 (en) * 2008-07-30 2015-12-01 Microsoft Technology Licensing, Llc Efficient detection and response to spin waits in multi-processor virtual machines
US8549341B2 (en) * 2008-08-29 2013-10-01 Netlogic Microsystems, Inc. System and method for reducing latency associated with timestamps in a multi-core, multi-threaded processor
JP2010267028A (ja) * 2009-05-13 2010-11-25 Brother Ind Ltd 管理装置、管理処理プログラム、ノード装置、ノード処理プログラム、及び有効期限切れレコード判定方法
US9325802B2 (en) * 2009-07-16 2016-04-26 Microsoft Technology Licensing, Llc Hierarchical scale unit values for storing instances of data among nodes of a distributed store
US20110055838A1 (en) * 2009-08-28 2011-03-03 Moyes William A Optimized thread scheduling via hardware performance monitoring
US8959525B2 (en) * 2009-10-28 2015-02-17 International Business Machines Corporation Systems and methods for affinity driven distributed scheduling of parallel computations
US8473723B2 (en) * 2009-12-10 2013-06-25 International Business Machines Corporation Computer program product for managing processing resources
KR101644800B1 (ko) * 2010-01-07 2016-08-02 삼성전자주식회사 컴퓨팅 시스템 및 방법
CN101833537A (zh) * 2010-04-23 2010-09-15 浪潮电子信息产业股份有限公司 一种基于ccnuma多处理器架构下的多结点初始化同步方法
US8627331B1 (en) 2010-04-30 2014-01-07 Netapp, Inc. Multi-level parallelism of process execution in a mutual exclusion domain of a processing system
US9262228B2 (en) * 2010-09-23 2016-02-16 Microsoft Technology Licensing, Llc Distributed workflow in loosely coupled computing
US8589922B2 (en) 2010-10-08 2013-11-19 International Business Machines Corporation Performance monitor design for counting events generated by thread groups
US8601193B2 (en) 2010-10-08 2013-12-03 International Business Machines Corporation Performance monitor design for instruction profiling using shared counters
US8489787B2 (en) 2010-10-12 2013-07-16 International Business Machines Corporation Sharing sampled instruction address registers for efficient instruction sampling in massively multithreaded processors
US8473378B2 (en) * 2010-10-18 2013-06-25 Bank Of America Corporation Global treasury monitoring system
US8539494B2 (en) * 2011-01-31 2013-09-17 Oracle International Corporation Method and system for scheduling threads
JP5727258B2 (ja) * 2011-02-25 2015-06-03 ウイングアーク1st株式会社 分散型データベースシステム
US9262181B2 (en) * 2011-05-10 2016-02-16 International Business Machines Corporation Process grouping for improved cache and memory affinity
US8954968B1 (en) * 2011-08-03 2015-02-10 Juniper Networks, Inc. Measuring by the kernel the amount of time a monitored thread spends in a queue in order to monitor scheduler delays in a computing device
US8863140B2 (en) * 2011-08-29 2014-10-14 Oracle International Corporation Method for resource management allocating and freeing credits from and to a resource credit tree
US8793459B2 (en) * 2011-10-31 2014-07-29 International Business Machines Corporation Implementing feedback directed NUMA mitigation tuning
US9191435B2 (en) 2012-08-23 2015-11-17 TidalScale, Inc. Selective data migration or remapping of virtual processors to provide required data accessibility to processor cores
US9166865B2 (en) 2012-11-07 2015-10-20 International Business Machines Corporation Mobility operation resource allocation
US10019167B2 (en) * 2013-02-20 2018-07-10 Red Hat, Inc. Non-Uniform Memory Access (NUMA) resource assignment and re-evaluation
US10489200B2 (en) * 2013-10-23 2019-11-26 Nvidia Corporation Hierarchical staging areas for scheduling threads for execution
CN103995744B (zh) * 2014-05-22 2017-04-26 西安交通大学 一种用于消除存储访问拥塞的同构计算任务分组方法
US9785565B2 (en) 2014-06-30 2017-10-10 Microunity Systems Engineering, Inc. System and methods for expandably wide processor instructions
US10255091B2 (en) 2014-09-21 2019-04-09 Vmware, Inc. Adaptive CPU NUMA scheduling
US10402226B2 (en) * 2015-06-05 2019-09-03 Apple Inc. Media analysis and processing framework on a resource restricted device
JP6423809B2 (ja) * 2016-02-19 2018-11-14 イーソル株式会社 オペレーティングシステム、プログラミングシステム及びメモリ割り当て方法
US10579421B2 (en) 2016-08-29 2020-03-03 TidalScale, Inc. Dynamic scheduling of virtual processors in a distributed system
US11023277B2 (en) 2016-09-20 2021-06-01 Ramon Chips Ltd. Scheduling of tasks in a multiprocessor device
US10579274B2 (en) 2017-06-27 2020-03-03 TidalScale, Inc. Hierarchical stalling strategies for handling stalling events in a virtualized environment
US10817347B2 (en) 2017-08-31 2020-10-27 TidalScale, Inc. Entanglement of pages and guest threads
US20200019412A1 (en) * 2018-07-12 2020-01-16 Dell Products L.P. Systems and methods for optimal configuration of information handling resources
US11281496B2 (en) * 2019-03-15 2022-03-22 Intel Corporation Thread group scheduling for graphics processing
US11487731B2 (en) * 2019-07-24 2022-11-01 Vmware, Inc. Read iterator for pre-fetching nodes of a B-tree into memory
US20220156393A1 (en) * 2020-11-19 2022-05-19 Tetrate.io Repeatable NGAC Policy Class Structure
CN112685333B (zh) * 2020-12-28 2024-06-07 上海创功通讯技术有限公司 一种堆内存管理方法及装置
CN115168058B (zh) * 2022-09-06 2022-11-25 深流微智能科技(深圳)有限公司 线程负载均衡方法、装置、设备及存储介质

Family Cites Families (17)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5055999A (en) * 1987-12-22 1991-10-08 Kendall Square Research Corporation Multiprocessor digital data processing system
EP0348628A3 (en) * 1988-06-28 1991-01-02 International Business Machines Corporation Cache storage system
JPH02253356A (ja) * 1989-03-28 1990-10-12 Toshiba Corp 階層キャッシュメモリ装置とその制御方式
US5099516A (en) * 1989-06-12 1992-03-24 Dell Corporate Services Corporation Digital computer code word identification system
JPH0640324B2 (ja) * 1989-10-26 1994-05-25 インターナショナル・ビジネス・マシーンズ・コーポレーション マルチプロセッサ・システムおよびそのプロセス同期方法
US5179702A (en) * 1989-12-29 1993-01-12 Supercomputer Systems Limited Partnership System and method for controlling a highly parallel multiprocessor using an anarchy based scheduler for parallel execution thread scheduling
US5452452A (en) * 1990-06-11 1995-09-19 Cray Research, Inc. System having integrated dispatcher for self scheduling processors to execute multiple types of processes
US5265235A (en) * 1990-11-30 1993-11-23 Xerox Corporation Consistency protocols for shared memory multiprocessors
US5237673A (en) * 1991-03-20 1993-08-17 Digital Equipment Corporation Memory management method for coupled memory multiprocessor systems
JPH04365162A (ja) * 1991-06-13 1992-12-17 Matsushita Electric Ind Co Ltd 資源割当解析方法とスケジューリング方法およびそのシステム
US5261053A (en) * 1991-08-19 1993-11-09 Sequent Computer Systems, Inc. Cache affinity scheduler
US5317738A (en) * 1992-02-18 1994-05-31 Ncr Corporation Process affinity scheduling method and apparatus
US5515538A (en) * 1992-05-29 1996-05-07 Sun Microsystems, Inc. Apparatus and method for interrupt handling in a multi-threaded operating system kernel
FR2692058B1 (fr) * 1992-06-09 1994-07-29 Bull Sa Systeme de traitement transactionnel entre un serveur informatique et une pluralite de stations de travail.
US5379428A (en) * 1993-02-01 1995-01-03 Belobox Systems, Inc. Hardware process scheduler and processor interrupter for parallel processing computer systems
US5379432A (en) * 1993-07-19 1995-01-03 Taligent, Inc. Object-oriented interface for a procedural operating system
JP2671804B2 (ja) * 1994-05-27 1997-11-05 日本電気株式会社 階層型資源管理方法

Cited By (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2020102189A (ja) * 2018-12-21 2020-07-02 北京百度网▲訊▼科技有限公司Beijing Baidu Netcom Science And Technology Co., Ltd. データ処理用の方法、装置及びシステム
US11064053B2 (en) 2018-12-21 2021-07-13 Beijing Baidu Netcom Science And Technology Co., Ltd. Method, apparatus and system for processing data
US11277498B2 (en) 2018-12-21 2022-03-15 Beijing Baidu Netcom Science And Technology Co., Ltd. Method, apparatus and system for processing data

Also Published As

Publication number Publication date
JPH09237215A (ja) 1997-09-09
JP2008112457A (ja) 2008-05-15
JP3836187B2 (ja) 2006-10-18
AU5601496A (en) 1997-01-09
US6105053A (en) 2000-08-15
CA2179483A1 (en) 1996-12-24
AU701540B2 (en) 1999-01-28
EP0750255A2 (en) 1996-12-27
EP0750255A3 (en) 1998-09-30

Similar Documents

Publication Publication Date Title
JP3836187B2 (ja) 非一様メモリ・アクセス・マルチプロセッサ・システム用オペレーティング・システム
US7143412B2 (en) Method and apparatus for optimizing performance in a multi-processing system
US7380039B2 (en) Apparatus, method and system for aggregrating computing resources
JP4160255B2 (ja) 仮想記憶システムにおける物理メモリの割り振りをアプリケーションプログラムによって制御するアプリケーション・プログラミング・インターフェイス
US7334230B2 (en) Resource allocation in a NUMA architecture based on separate application specified resource and strength preferences for processor and memory resources
EP0798639B1 (en) Process assignment in a multiprocessor system
US5884077A (en) Information processing system and method in which computer with high load borrows processor of computer with low load to execute process
US7516291B2 (en) Cooperative mechanism for efficient application memory allocation
CN102365626B (zh) 用于虚拟机的虚拟非一致存储器体系结构
JP5507660B2 (ja) 仮想マシン用非一様仮想メモリーアーキテクチャー
US6701421B1 (en) Application-level memory affinity control
US8601201B2 (en) Managing memory across a network of cloned virtual machines
KR101850318B1 (ko) 가상 메모리 관리 장치 및 방법
JP2006236351A (ja) リソース管理方法およびシステム
US6457107B1 (en) Method and apparatus for reducing false sharing in a distributed computing environment
Lameter Local and remote memory: Memory in a Linux/NUMA system
US20060230242A1 (en) Memory for multi-threaded applications on architectures with multiple locality domains
Shoushtari et al. SAM: software-assisted memory hierarchy for scalable manycore embedded systems
Gait Scheduling and process migration in partitioned multiprocessors
JPH0522261B2 (ja)
JP2004133753A (ja) マルチ・プロセッサ・システムにおけるプログラムおよびディスパッチ方法

Legal Events

Date Code Title Description
A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20070515

A601 Written request for extension of time

Free format text: JAPANESE INTERMEDIATE CODE: A601

Effective date: 20070814

A602 Written permission of extension of time

Free format text: JAPANESE INTERMEDIATE CODE: A602

Effective date: 20070817

A521 Written amendment

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20071115

A02 Decision of refusal

Free format text: JAPANESE INTERMEDIATE CODE: A02

Effective date: 20071210