(57)【特許請求の範囲】
【請求項１】
各々が複数のスレッドを実行する能力を有する複数のプロセッサと、
前記複数のプロセッサに接続され、プロセッサをスレッド・ディスパッチ機構として機能させるプログラムを記憶したメモリと、
を含み、前記プログラムを実行することによって装置上に、
使用可能なプロセッサにスレッドをディスパッチする前記スレッド・ディスパッチ手段と、
前記複数のプロセッサに対してハードウェア・マルチスレッドをイネーブルするハードウェア・マルチスレッド・イネーブル／ディセーブル手段と、
前記プロセッサのスレッド処理状態を追跡するプロセッサ・ステータス・トラッカ手段とが実現され、
前記プロセッサ・ステータス・トラッカ手段は、ハードウェア・マルチスレッドがイネーブルされた前記複数のプロセッサについて、
（１）いずれのスレッドも実行していないアイドル状態、
（２）既にスレッドを実行しているが更なるスレッドを受け付けることができる状態、
（３）更なるスレッドを受け付けることができないビジー状態のいずれにあるか
を前記複数のプロセッサのすべてに対して追跡し、前記複数のプロセッサのどれがアイドル状態にあるか、前記複数のプロセッサのどれが既にスレッドを実行しているが更なるスレッドを受け付けることができるか、及び前記複数のプロセッサのどれが更なるスレッドを受け付けることができないかを決定し、
前記スレッド・ディスパッチ手段は、
（ｉ）いずれのスレッドも実行しておらず、処理可能なスレッドの余裕を最も保有する前記アイドル状態のプロセッサが存在する限り、新たなスレッドを該アイドル状態のプロセッサにディスパッチし、
（ｉｉ）前記アイドル状態にあるプロセッサが存在しない場合であって、前記複数のプロセッサが更なるスレッドを受け付けることができる場合に、前記複数のプロセッサのうちの更なるスレッドを受け付けることができるプロセッサに前記新たなスレッドをディスパッチし、
（ｉｉｉ）前記複数のプロセッサのすべてが更なるスレッドを受け付けることができない場合、前記スレッド・ディスパッチ手段は、前記複数のプロセッサの１つがスレッドの処理を終了し、それによって、更なるスレッドを受け付けることができるプロセッサになるのを待ち、しかる後、前記更なるスレッドを受け付けることができるプロセッサに前記更なるスレッドをディスパッチする、
装置。
【請求項２】
各々が複数のスレッドを実行することができる複数のプロセッサを含むコンピュータ・システムにおいてスレッドをディスパッチするための方法にして、前記コンピュータ・システムが、
ハードウェア・マルチスレッド・イネーブル／ディセーブル手段が、ハードウェア・マルチスレッドをイネーブルして、前記プロセッサにつき、いずれのスレッドも実行していない場合のアイドル状態、１つ又は複数のスレッドに作用していてビジーであるが更なるスレッドを処理する能力を有する場合に該更なるスレッドを受け付けることができる状態、および前記プロセッサが実行し得る最大数のスレッドに作用していてビジーである場合に更なるスレッドを受け付けることができない状態を生成するステップと、
プロセッサ・ステータス・トラッカ手段が、前記複数のプロセッサのアイドル状態、既にスレッドを実行しているが更なるスレッドを受け付けることができる状態、更なるスレッドを受け付けることができないビジー状態のいずれかを示す各プロセッサのステータスを前記複数のプロセッサのすべてに対して追跡し、前記複数のプロセッサの各々がいずれの状態かを決定するステップと、
スレッド・ディスパッチ手段が、
（ｉ）いずれのスレッドも実行しておらず、処理可能なスレッドの余裕を最も保有する前記アイドル状態のプロセッサが存在する限り、該アイドル状態のプロセッサに新たなスレッドをディスパッチするステップと、
（ｉｉ）前記アイドル状態にあるプロセッサが存在しない場合であって、前記プロセッサが更なるスレッドを受け付けることができる場合、前記複数のプロセッサのうちの前記更なるスレッドを受け付けることができるプロセッサに前記新たなスレッドをディスパッチするステップと、
（ｉｉｉ）前記複数のプロセッサのすべてが更なるスレッドを受け付けることができない場合、前記複数のプロセッサの１つがスレッドの処理を完了し、それによって、更なるスレッドを受け付けることができるプロセッサとなるのを待ち、しかる後、前記更なるスレッドを受け付けることができるプロセッサに前記更なるスレッドをディスパッチするステップと
を実行する、方法。
【請求項３】
請求項１に記載の各手段としてコンピュータ・システムを機能させるためのコンピュータ実行可能なプログラムを記録した、コンピュータ可読な記録媒体。
【請求項４】
請求項１に記載の各手段としてコンピュータ・システムを機能させるためのコンピュータ実行可能なプログラム。
【発明の詳細な説明】
【０００１】
【発明の属する技術分野】
本発明は、概して云えば、コンピュータ・システムに関し、更に詳しく云えば、マルチプロセッサ・コンピュータ・システムに関するものである。
【０００２】
【従来の技術】
コンピュータ時代の幕開け以来、コンピュータ・システムは極めて複雑な装置に進化してきたし、数多くの種々なセッティングのコンピュータ・システムを見ることができる。一般に、コンピュータ・システムは、半導体及び回路ボードのようなハートウェアと、コンピュータ・プログラムとしても知られているソフトウェアとの組み合わせを含む。半導体処理及びコンピュータ・アーキテクチャにおける進歩は、コンピュータ・ハードウェアの性能を更に高度なものに推進するので、より複雑なコンピュータ・ソフトウェアがその高性能のハードウェアを利用するように進化し、その結果、今日のコンピュータ・システムは数年前のものよりも遙かに強力なものになっている。
【０００３】
コンピュータ・システムの性能は、ハードウェア、ソフトウェア、並びに処理されるプログラムの総数、ネットワーク・トラフィック・ロード、キャッシュ効率等のような他の動的な考察事項によって決定される数多くの要素に依存する。コンピュータ・システムの性能を高める１つの既知の方法は、１つのコンピュータ・プログラムにおける種々の部分を処理することができる複数の実行スレッド（thread of execution）を提供することである。コンピュータ・システムの性能を高めるもう１つの既知の方法は、１つのコンピュータ・プログラム又は個別のコンピュータ・プログラムにおける複数部分を並行して実行することによって処理負荷を振り分けることができる複数のプロセッサを設けることである。マルチスレッド及び複数プロセッサという概念は、性能の更なる向上を得るように結合可能である。従来技術では、複数のプロセッサは、当初、一時には１つの実行スレッドしか実行することを許されなかった。しかし、最近の進歩は、マルチプロセッサ・システムにおける各プロセッサ上での複数の実行スレッドを可能にしている。例えば、ＩＢＭ社によって製造及び販売されている iSeries Condor コンピュータ・システムは、ハードウェア・マルチスレッドがイネーブル又はディセーブルされることを可能にするセットアップ・パラメータを含んでいる。各プロセッサは、それがイネーブルされる時、２つのスレッドを実行することができる。しかし、ハードウェア・マルチスレッドの出現により幾つかの問題が生じている。
【０００４】
【発明が解決しようとする課題】
最近のコンピュータ・サーバは、一般に、Ｊａｖａ（Ｒ）をサポートしなければならない。サーバがＪａｖａ（Ｒ）を如何に効率的にサポートするかを測定するために開発された１つの重要なベンチマークは、SPECJBB2000 として知られている。SPEC は、最近のコンピュータ・システムの性能評価のための関連ベンチマーク及び測定規準の標準化されたセットを確立、維持、及び是認する使命を持った標準機構である Standard Performance Evaluation Corporation の頭字語である。JBB200 は、Java(R) Business Benchmark の頭字語であり、２０００年６月に使用可能にされたベンチマークである。SPECJBB2000 は、対処するには望ましいベンチマークとして産業界において非常に広範囲に受け入れられるようになった。しかし、ハードウェア・マルチスレッドをサポートするシステムにおいてそのハードウェア・マルチスレッドをイネーブルすることは、通常、そのシステムに SPECJBB2000 ベンチマークを機能しなくさせるであろう。その機能不全の理由は、SPECJBB2000 が、「スレッド・スプレッド（thread spread）」として産業界では一般に知られている種々のスレッドの実行時間及びトランザクション処理速度の間の最大変動という仕様を持っていることである。同じタスクを行う種々のスレッドの実行時間及びトランザクション処理速度が指定の最大スレッド・スプレッドを越える場合、そのベンチマークは機能しなくなる。ハードウェア・マルチスレッドを含む大抵の最近のコンピュータ・システムは、過度のスレッド・スプレッドのために SPECJBB2000 ベンチマークを実行することができない。その結果、大抵のコンピュータ・ベンダは、SPECJBB2000 を実行するときにハードウェア・マルチスレッドをオフにする。過度のスレッド・スプレッドの原因は、オペレーティング・システムが使用可能なプロセッサにスレッドをディスパッチする方法にある。スレッド・スプレッドを少なくする改良されたスレッド・ディスパッチ機構及び方法がない場合、コンピュータ産業は、ハードウェア・マルチスレッドがディセーブルされない場合、過度のスレッド・スプレッドを有する（従って、SPECJBB2000 ベンチマークに適合し得ない）コンピュータ・システムからの損害を受け続けるであろう。それは、そもそもハードウェア・マルチスレッドを提供するという性能上の利点を廃棄するものである。
【０００５】
【課題を解決するための手段】
望ましい実施例によれば、ハードウェア・マルチスレッドをイネーブルされたマルチプロセッサ・コンピュータ・システムにおいて、スレッド・ディスパッチ機構がスレッドをディスパッチし、それによって、各プロセッサが複数のスレッドを実行することを可能にする。スレッド・ディスパッチ機構は、どのプロセッサがビジーであって更なるスレッドを実行することができないか、どのプロセッサがスレッドに作用しているか、及びどのプロセッサがアイドル状態にあるかを決定する。スレッドがディスパッチされる準備ができる時、それらは、他のスレッドに既に作用しているプロセッサの代わりに、アイドル・プロセッサに先ずディスパッチされる。アイドル・プロセッサがまったく存在しない場合、スレッドは、１つ又は複数のスレッドに作用しているが、新たなスレッドも処理することができるプロセッサにディスパッチされる。このように、本発明のスレッド・ディスパッチ機構及び方法は、スレッド間での応答時間における非常に改善された一貫性を提供し、しかもスレッドをディスパッチする従来技術の方法に比べて高いスループットを提供する。
【０００６】
本発明の上記及び他の特徴及び利点は、添付図面に示された本発明の望ましい実施例の更に詳細な以下の説明から明らかであろう。
【０００７】
【発明の実施の形態】
１.０   概要
本発明は、ハードウェア・マルチスレッドを可能にされたマルチプロセッサ・コンピュータ・システムにおけるスレッドのディスパッチに関するものである。マルチスレッドされたシステム、マルチプロセッサ・システム、ハードウェア・マルチスレッド、及び従来技術のスレッド・ディスパッチ機構及び方法に精通していない人にとって、この概要項は本発明を理解する上で助けとなる背景情報を提供するであろう。
【０００８】
Ａ．マルチスレッド化されたシステム
複数の実行スレッド（又は、タスク）が同時に実行されることを可能にするコンピュータ・システムが開発されている。単一プロセッサ・システムでは、単一のプロセッサしか存在しないので、実際には複数のスレッドが同時には実行され得ない。しかし、単一プロセッサ・システムにおけるマルチスレッドは、そのシステムがマルチタスキングであることを可能にする。単一プロセッサ・システムにおけるＣＰＵスケジューラは、スレッド間の切り換えを制御し、それらのスレッドが同時に実行されているように見えるようにし、ＣＰＵが複数のタスクに同時に作用することを可能にする。
【０００９】
Ｂ．マルチプロセッサ・システム
コンピュータ・システムの生の処理能力は、異なるタスクに対して同時に作用することができる複数のプロセッサを提供することによって高められ得る。初期のマルチプロセッサ・システムは、各プロセッサに単一のスレッドを割り当てていたであろう。各プロセッサにおいて単一のスレッドをサポートする従来から知られているマルチプロセッサ・システムのためのスレッド・ディスパッチャは、多数の異なる方法で動作することができる。最も一般的な既知の方法は、逐次態様でスレッドをプロセッサに割り当てることである。このタイプのシステムは、第１のスレッドが第１のプロセッサにディスパッチされ、第２のスレッドが第２のプロセッサにディスパッチされるというようなものである。すべてのプロセッサがスレッドを実行していてビジーである場合、ディスパッチされるべき次のスレッドは、１つのプロセッサが使用可能になるまで待機しなければならないであろう。スレッドをディスパッチするためのもう１つの既知の方法は、プロセッサを無作為に選出し、そのプロセッサが他のスレッドを実行していてビジーであるということではない場合、そのプロセッサにスレッドを割り当てることである。スレッドをディスパッチするための更にもう１つの方法は、そのスレッドを最後に実行したプロセッサを選出することである。このタイプのディスパッチは、そのスレッドを最後に実行したプロセッサがそれのキャッシュに必要な情報を既にロードされているかもしれないという望みによるプロセッサ・アフィニティに基づいている。これらのスレッド・ディスパッチ方法の各々は、各プロセッサにおいて単一のスレッドしか実行させないマルチプロセッサ・システムにおいて開発された。
【００１０】
Ｃ．ハードウェア・マルチスレッド
更に最近の開発活動は、複数のスレッドがマルチプロセッサ・システムにおける各プロセッサによって実行されることを可能にするハードウェア・マルチスレッドの概念をもたらした。これらのシステムにおけるスレッド・ディスパッチャは、ハードウェア・マルチスレッドが存在しなかった時に従来のシステムにおいて使用された方法と同じ方法、即ち、逐次的、無作為的、且つプロセッサ・アフィニティ的方法を使用する。ハードウェア・マルチスレッドを含むシステムにおいて同じ態様でスレッドをディスパッチした結果は、スレッド間における実行時間及びトランザクション処理速度の可変性（即ち、スレッド・スプレッド）が過度になり得るということである。例えば、第２のスレッドが、既に他のスレッドを実行しているプロセッサにディスパッチされる場合、第２のスレッドに対する実行時間は、一般に、如何なるスレッドも実行していないアイドル・プロセッサに第２のスレッドがディスパッチされた場合よりもかなり長いであろう。スレッド・スプレッドの問題は、幾つかの異なる理由のために重要である。第１に、過度なスレッド・スプレッドは、ばらつきのある応答時間を導く。コンピュータ・オペレータが電話で注文を取り、それらの注文をコンピュータ・システムに入力する場合、オペレータは、注文を処理するための時間が時々広範囲に変動する場合にフラストレーションを起こすであろう。コンピュータ・システムが注文を１回処理するために１秒を必要とし、次の回には１０分の１秒を必要とし、その次の回には５秒を必要とする場合、オペレータは、コンピュータ・システムのばらつきのある応答時間に屡々フラストレーションを起こすであろう。このような状況における応答時間の一貫性は、その応答時間の値よりも重要である。システムがユーザによる知覚の限度内でいつも同じように活動している限り、ユーザは、コンピュータ・システムが適正に機能していることに満足する。
【００１１】
スレッド・スプレッドを最小にすることが重要であるというもう１つの理由は、コンピュータ・システムが SPECJBB2000 のようなベンチマークに合格することを可能にすることである。SPECJBB2000 は、コンピュータ産業における著名なベンチマークであり、製造業者は、サーバが如何に効率的にＪａｖａ（Ｒ）コードを処理するかを証明するようにそのベンチマークを適合させることを望んでいる。
【００１２】
スレッド・スプレッドを最小にすることが重要であるという更にもう１つの理由は、如何にアプリケーションが徐々に進化してきたかということに関連する。インテンシブ（intensive）Ｉ／Ｏを有するアプリケーションにとって、スレッド・スプレッドはクリティカルな問題ではない。それは、Ｉ／Ｏオペレーション相互間のタイム・スライスが比較的小さく、従って、人の知覚又はシステム・パフォーマンスに大きく影響しないためである。しかし、Ｊａｖａ（Ｒ）アプリケーションのような数多くの最近のアプリケーションは、Ｉ／Ｏオペレーション当たり更に多くのＣＰＵサイクルを使って実行し、その結果、ス（Ｒ）レッド実行時間における差がコンピュータ・システムの性能に大きく影響し得ることになる。例えば、企業がバッチ処理を夜間に行うものと仮定すると、従業員が仕事に戻ってくる午前８時までにそのバッチ処理が終了しなければならない。スレッド・スプレッドは、１つのスレッドを午前５時に終了させることがあり得るし、一方、別のスレッドは午前９時まで終了しないことがある。この場合、それら２つのスレッドの間の平均的な処理時間は、両方のスレッドが午前７時に終了するという結果になる。しかし、従業員が午前８時に戻った時に第２のスレッドがバッチ処理を終了してないため、スレッド・スプレッドは受け入れ難い結果を生じる。この理由のために、スレッド間の実行時間及びトランザクション処理速度の一貫性は、多くの最近のアプリケーションにとって重要なことである。本発明は、ハードウェア・マルチスレッドを可能にされたマルチプロセッサ・システムにおけるスレッド・スプレッドを大きく減少させる。
【００１３】
２.０ 詳細な説明
望ましい実施例は、スレッド・スプレッド（即ち、スレッド間の実行時間及びトランザクション処理速度の可変性）を大きく減少させるハードウェア・マルチスレッドをイネーブルされたマルチプロセッサ・システムにおいてスレッドをディスパッチする機構及び方法を提供する。これは、どれが、１つ又は複数のスレッドを処理していてビジーであるが依然として他のスレッドを受け付けることができるアイドル状態にあるか、及び、どれが、既に最大数のスレッドを処理していてビジーであるかを決定するために、プロセッサを監視することによって行われる。１つのスレッドがディスパッチされる必要がある時、それは、アイドル・プロセッサが存在する場合にはそのアイドル・プロセッサにディスパッチされる。アイドル・プロセッサが存在しない場合、そのスレッドは、最も少ないスレッドを実行しているプロセッサにディスパッチされる。この方法では、種々のスレッドを実行するための時間の変動がかなり減少するので、ハードウェア・マルチスレッドをイネーブルされた望ましい実施例によるマルチプロセッサ・システムが SPECJBB2000 ベンチマークに合格すること及びスレッド間の更に一貫した応答時間及びスループットを提供することを可能にする。
【００１４】
図１を参照すると、コンピュータ・システム１００は、本発明の望ましい実施例による装置の１つの適当な実施態様である。コンピュータ・システム１００は、ＩＢＭ社の iSeries コンピュータ・システムであり、特に、ハードウェア・マルチスレッドをサポートする Condor コンピュータ・システムである。しかし、コンピュータ・システムが複雑なマルチユーザ・コンピュータ装置、シングル・ユーザ・ワークステーション、或いは据え置き型コントロール・システムであるかどうかに関係なく、本発明の機構及び方法が任意のコンピュータ・システムに等しく適用することは当業者には明らかであろう。図１に示されるように、コンピュータ・システム１００は、複数のプロセッサ（プロセッサ１１０、１１２、及び１１８のような）、メイン・メモリ１２０、大容量記憶装置インターフェース１３０、ディスプレイ・インターフェース１４０、及びネットワーク・インターフェース１５０を含む。これらのシステム・コンポーネントは、システム・バス１６０の使用を通して相互接続される。大容量記憶装置インターフェース１３０は、大容量記憶装置（ダイレクト・アクセス記憶装置（ＤＡＳＤ）１５５のような）をコンピュータ・システム１００に接続するために使用される。ダイレクト・アクセス記憶装置１５５の１つの特定のタイプは、ＣＤ−ＲＯＭ１９５にデータを記憶し且つＣＤ−ＲＯＭ１９５からデータを読み取ることができる読取／書込可能ＣＤ−ＲＯＭである。
【００１５】
望ましい実施例によるメイン・メモリ１２０は、データ１２１及びオペレーティング・システム１２２を含む。データ１２１は、コンピュータ・システム１００における任意のプログラムへの入力又は任意のプログラムからの出力として働く任意のデータを表す。オペレーティング・システム１２２は、ＯＳ／４００（商標）のようなその産業界において知られているマルチタスク・オペレーティング・システムと同じである。しかし、本発明の精神及び技術的範囲がいずれのオペレーティング・システムにも限定されないことは当業者には明らかであろう。望ましい実施例のオペレーティング・システム１２２は、システム管理者がハードウェア・マルチスレッドをオン又はオフにすることを可能にするハードウェア・マルチスレッド・イネーブル／ディセーブル機構１２３を含む。iSeries Condor コンピュータ・システムの関係では、ハードウェア・マルチスレッドをイネーブルすることは、各プロセッサが２つのスレッドを実行することができるということを意味する。ハードウェア・マルチスレッドがディセーブルされることによって、各プロセッサは１つのスレッドしか実行することができない。オペレーティング・システム１２２は、種々のスレッドを実行する時間の可変性を最小にする方法で使用可能なプロセッサにスレッドをディスパッチするスレッド・ディスパッチャ１２４を含む。オペレーティング・システム１２２は、更に、そのシステムにおけるすべてのプロセッサ（例えば、プロセッサ１１０、１１２、．．．、１１８）のステータスを追跡するプロセッサ・ステータス・トラッカ１２５を含む。
【００１６】
コンピュータ・システム１００は、そのコンピュータ・システム１００のプログラムが、あたかも、メイン・メモリ１２０及びＤＡＳＤ１５５のような複数の小型記憶装置をアクセスする代わりに１つの大型記憶装置だけをアクセスするが如くそのプログラムが動作することを可能にする周知の仮想アドレシング機構を利用する。従って、データ１２１及びオペレーティング・システム１２２はメイン・メモリ１２０内にあるように示されるけれども、必ずしもこれらの項目がすべて完全にメイン・メモリ１２０に同時に含まれるものではないことは当業者には明らかであろう。本願では、「メモリ」という用語が、コンピュータ・システム１００の仮想メモリ全体を一般的に呼ぶために使用され、コンピュータ・システム１００に接続された他のコンピュータ・システムの仮想メモリを含み得ることにも留意すべきである。
【００１７】
各プロセッサ（例えば、プロセッサ１１０、１１２、．．．、１１８）は、１つ又は複数のマイクロプロセッサ及び（又は）集積回路から構成され得る。各プロセッサは、メイン・メモリ１２０に記憶されたプログラム命令を実行する。メイン・メモリ１２０は、各プロセッサがアクセスし得るプログラム及びデータを記憶する。コンピュータ・システム１００が始動する時、オペレーティング・システム１２２を立ち上げるプログラム命令をそれらのプロセッサの１つが先ず実行する。オペレーティング・システム１２２は、コンピュータ・システム１００のリソースを管理する複雑なプログラムである。これらのリソースのいくつかは、プロセッサ１１０、メイン・メモリ１２０、大容量記憶装置インターフェース１３０、ディスプレイ・インターフェース１４０、ネットワーク・インターフェース１５０、及びシステム・バス１６０である。
【００１８】
コンピュータ・システム１００が単一のシステム・バスしか含まないように示されているけれども、複数のバスを有するコンピュータ・システムを使用して本発明を実施し得ることは当業者には明らかであろう。更に、望ましい実施例において使用されるインターフェースは、それぞれ、個別の完全にプログラムされたマイクロプロセッサであり、それらのプロセッサは、各プロセッサから計算主体の処理をオフロードするために使用される。しかし、同様の機能を遂行するために単にＩ／Ｏアダプタを使用するコンピュータ・システムに本発明が等しく適用することも当業者には明らかであろう。
【００１９】
ディスプレイ・インターフェース１４０は、１つ又は複数のディスプレイ１６５をコンピュータ・システム１００に直接に接続するために使用される。非インテリジェント（即ち、ダム）端末又は完全にプログラム可能なワークステーションであってもよいこれらのディスプレイ１６５は、システム管理者及びユーザがコンピュータ・システム１００とコミュニケーションを行うことを可能にするために使用される。しかし、ディスプレイ・インターフェース１４０は１つ又は複数のディスプレイ１６５とのコミュニケーションをサポートするために設けられるけれども、ユーザ及び他のプロセッサとの必要なすべての相互作用がネットワーク１５０を介して生じ得るので、コンピュータ・システム１４０は必ずしもディスプレイ１６５を必要としないことに留意してほしい。
【００２０】
ネットワーク・インターフェース１５０は、他のコンピュータ・システム及び（又は）ワークステーション（例えば、図１におけるワークステーション１７５）をコンピュータ・システム１００に接続するために使用される。本発明は、ネットワーク接続線１７０が今日のアナログ及び（又は）ディジタル技法、或いは将来の何らかのネットワーク機構を使用して作られるかどうかに関係なく、たとえ如何にコンピュータ・システム１００が他のコンピュータ・システム及び（又は）ワークステーションに接続されても等しく適用する。更に、数多くの異なるネットワーク・プロトコルがネットワークをインプリメントするために使用され得る。これらのプロトコルは、コンピュータがネットワーク接続線１７０を介して通信することを可能にする特殊のコンピュータ・プログラムである。ＴＣＰ／ＩＰ（伝送制御プロトコル／インターネット・プロトコル）は適当なネットワーク・プロトコルの一例である。
【００２１】
この時点では、本発明は、十分に機能的なコンピュータ・システムに関連して説明されたし、説明を続けられるけれども、本発明がプログラム製品として種々の形態で分配され得ること及び本発明が、分配を実際に行うために使用される特定のタイプのコンピュータ可読信号保持媒体に関係なく、等しく適用することは当業者には明らかであろう。適当なコンピュータ可読信号保持媒体の例は、フロッピ・ディスク及びＣＤ−ＲＯＭ（例えば、図１におけるＣＤ−ＲＯＭ１９５）のような記録可能なタイプの媒体及びディジタル及びアナログ通信リンクのような通信タイプの媒体を含む。
【００２２】
本明細書の残り部分は、従来技術のスレッド・ディスパッチャの詳細な機能を説明し、それらの機能と図１に示されたスレッド・ディスパッチャ１２４の機能とを比較する。図１に示されるように、望ましい実施例のスレッド・ディスパッチャ１２４は、システムにおける各プロセッサのステータスを追跡するプロセッサ・ステータス・トラッカ１２５によって表されるそれらプロセッサのステータスに従って動作する。図２を参照すると、従来技術においては、プロセッサは、（１）そのプロセッサが他のスレッドを扱うことができないことを意味するビジー状態、又は
（２）そのプロセッサがスレッドを扱うために使用可能であることを意味するスレッド受付可能状態
という２つの状態しか持つことができない。これらが相互に排他的な状態であることに留意してほしい。プロセッサは、ビジーであるか又はスレッド受付可能である。ハードウェア・マルチスレッドをディセーブルされた従来技術のマルチプロセッサである iSeries コンピュータ・システムの場合、プロセッサは、１つのスレッドを実行している時にはビジーであり、それがスレッドを実行していない場合にはスレッド受付可能である。ハードウェア・マルチスレッドをイネーブルされた同じ iSeries コンピュータ・システムに対しては、プロセッサは、それが２つのスレッドを実行している場合にはビジーであり、
（１）１つのスレッドを処理している、又は
（２）アイドル状態である
場合にはスレッド受付可能である。その従来技術において重要なことは、１つのスレッドを処理していること（プロセッサがもう１つのスレッドを受け付けることができることを意味する）及びアイドル状態であること（プロセッサが２つのスレッドを受け付けることができることを意味する）の間の区別が行われないことである。両方のケースとも、図２に示されるように「スレッド受付可能」という状態に統一される。プロセッサ＃１（２１０）は、ビジー２１２又はスレッド受付可能２１４というステータスを有する。プロセッサ＃２（２２０）は、ビジー２２２又はスレッド受付可能２２４というステータスを有する。プロセッサ＃Ｎ（２９０）は、ビジー２９２又はスレッド受付可能２９４というステータスを有する。従来技術のシステムにおける他のすべてのプロセッサは、同じ２つのステータス状態を有するであろう。
【００２３】
次に、従来技術のマルチプロセッサ・コンピュータ・システムにおいてスレッドをディスパッチするための図３における方法３００を検討する。方法３００は、スレッドがディスパッチされる必要がある時に開始する（ステップ３１０）。他のスレッドを受け付けることができるプロセッサが使用可能である場合（ステップ３３０＝イエス）、そのスレッドは、他のスレッドを受け付けることができるプロセッサの１つにディスパッチされる（ステップ３４０）。他のスレッドを受け付けることができるプロセッサが使用可能でない場合（ステップ３３０＝ノー）、プロセッサがスレッドの処理を終了して他のスレッドを受け付けることができるまで（ステップ３３０＝イエス）、方法３００はループ・バックする。従来技術の方法３００は、従来技術のシステムがハードウェア・マルチスレッドをイネーブルされている又はイネーブルされていない従来技術のシステムを表す。iSeries コンピュータ・システムに関しては、ハードウェア・マルチスレッドがディセーブルされている場合、各プロセッサは単一のスレッドしか処理することができない。ハードウェア・マルチスレッドがイネーブルされている場合、各プロセッサは２つのスレッドを処理することができる。プロセッサがアイドル状態にある場合、それは２つのスレッドを受け付けることができる。プロセッサが１つのスレッドを実行している場合でも、それはもう１つのスレッドを受け付けることができる。従って、ステップ３３０の「イエス」ブランチは、１つのスレッドを実行しているプロセッサと、いずれのスレッドも実行していないプロセッサとの間の区別を行わない。その結果、ステップ３４０におけるスレッドのディスパッチは、プロセッサがもう１つのスレッドを引き受けることができるかどうかを知ろうとするだけである。これは、たとえ数多くのアイドル・プロセッサが使用可能であるとしても、既にスレッドを実行しているプロセッサに対するスレッドのディスパッチを導くことができる。
【００２４】
ハードウェア・マルチスレッドをイネーブルされたマルチプロセッサ・コンピュータ・システムには、ステップ３４０においてスレッドをディスパッチするために従来技術で使用される３つの既知の方法が存在する。その第１のものは、プロセッサが他のスレッドを引き受けることができる場合にそれらのプロセッサにスレッドを逐次に割り当てる逐次ディスパッチ方式である。その例を説明するために、当初、如何なるスレッドも実行されてないものと仮定する。この逐次ディスパッチ方式では、スレッド・ディスパッチャが第１のスレッドを第１のプロセッサにディスパッチする。スレッド・ディスパッチャが第２のスレッドを受け取る時、それは、第１のプロセッサが依然として他のスレッドを引き受けることができることを知り、従って、それは第２のスレッドを第１のプロセッサに割り当てる。この時点で、第１のプロセッサは第１及び第２のスレッドを実行していてビジー状態にあり、従って、第３のスレッドは第２のプロセッサにディスパッチされる。第４のスレッドがディスパッチされる時に最初の３つのスレッドが依然として実行中であると仮定すると、第４のスレッドは第２のプロセッサにディスパッチされるであろう。これは、各プロセッサが２つのスレッドを受け取った後にそのシーケンスにおける次のプロセッサが更なるスレッドを受け取ることによって継続する。その結果は、過度なスレッド・スプレッド（即ち、スレッド間の実行時間及びトランザクション処理速度の可変性）である。
【００２５】
第２の既知のスレッド・ディスパッチ方式は、もう１つのスレッドを引き受けることができるプロセッサを無作為に選択し、そのプロセッサにスレッドをディスパッチする。この方式も又、１つのプロセッサが２つのスレッドを受け取った後にアイドル状態の他のプロセッサが更なるスレッドを受け取るという結果になって過度なスレッド・スプレッドを生じることが多い。
【００２６】
第３の既知のスレッド・ディスパッチ方式は、プロセッサ・アフィニティに基づくものであり、プロセッサが当該スレッドを処理した最後の時点からキャッシュ内に存在し得るデータを利用することによりパフォーマンス上の利点が得られるかも知れないという期待を持って当該スレッドを前に処理したことがあるそのプロセッサを選択する。この方式は、１つのプロセッサが２つのスレッドを受け取った後にアイドル状態の他のプロセッサが更なるスレッドを受け取るという結果になって過度なスレッド・スプレッドを生じることが多いという、上記他の２つの方式と同じ不利益をこうむる。これら３つの既知のディスパッチ方式はいずれも図３のステップ３４０において使用され得る。これらはすべて、これらが、１つのスレッドを既に処理しているプロセッサとアイドル状態にあるプロセッサとの間を区別しないために、過度なスレッド・スプレッドをこうむる。
【００２７】
図４を参照すると、望ましい実施例によるプロセッサ・ステータス・トラッカ１２５が各プロセッサに対して３つの可能な状態、即ち、
（１）プロセッサが更なるスレッドを受け付けることができないことを意味するビジー、
（２）プロセッサが既にスレッドを実行しているが更にもう１つのスレッドを受け付けることができる作業中、及び
（３）プロセッサが現時点ではいずれのスレッドも実行していないことを表すアイドル、
を追跡する。従って、図４では、プロセッサ＃１（１１０）が、ビジー４１２、作業中であるがスレッド受付可能４１４、又はアイドル４１６という状態を有し得る。同様に、プロセッサ＃２（１１２）が同じ３つの状態４２２、４２４、又は４２６の１つを有し得るし、プロセッサ＃Ｎ（１１８）が同じ３つの状態４９２、４９４、又は４９６の１つを有し得るし、他の任意のプロセッサが同じ３つの状態の１つを有し得る。
【００２８】
次に、プロセッサ・ステータス・トラッカ１２５は、アイドル・プロセッサと既に１つのスレッドを処理しているが他のスレッドを処理し得るプロセッサとの間の相違を追跡し、スレッド・ディスパッチャ１２４は、スレッド・スプレッドを少なくするように、スレッドをディスパッチする時更にインテリジェントな判断を行うことができる。図５を参照すると、望ましい実施例による方法５００は、図１に示されたスレッド・ディスパッチャ１２４によって行われることが望ましい。方法５００は、スレッドがディスパッチされる必要がある時に開始する（ステップ５１０）。アイドル・プロセッサが使用可能である場合（ステップ５２０）、スレッドはアイドル・プロセッサにディスパッチされる（ステップ５２２）。アイドル・プロセッサは使用可能でないが、他のスレッドを受け付けることができるワーキング・プロセッサが存在する場合（ステップ５３０＝イエス）、そのスレッドは、他のスレッドを受け付けることができるワーキング・プロセッサの１つにディスパッチされる（ステップ５４０）。使用可能なアイドル・プロセッサが存在せず（ステップ５２０＝ノー）、他のスレッドを受け付けることができるプロセッサがない場合（ステップ５３０＝ノー）、方法５００は、プロセッサの１つがそれのスレッドの１つの実行を終了し、従って、他のスレッドを受け付けることができるまでループ・バックする。
【００２９】
方法５００は、第２のスレッドをいずれかのプロセッサにディスパッチする前にすべてのアイドル・プロセッサがビジーにされるので、従来技術に対する大きな改善である。一般に、アイドル・プロセッサは、同時に２つのスレッドに作用しなければならないプロセッサよりも更に速くスレッドを処理することができる。このために、スレッド・ディスパッチャ１２４は、コンピュータ・システム１００のパフォーマンスを大きく改善し、コンピュータ・システム１００がハードウェア・マルチスレッドをイネーブルされたことにより SPECJBB2000 ベンチマーク・テストに合格することができ、しかもスレッド間の更に一貫性のある実行時間及びトランザクション処理速度を提供することができるポイントまでスレッド・スプレッドを更に大きく減少させる。スレッド・スプレッドを減少させた結果、ユーザは更に満足するであろうし、スループット及び応答時間に関するパフォーマンスの目標をずっと容易に達成することが可能である。
【００３０】
本願において開示された望ましい実施例は、アイドル・プロセッサとスレッドに作用しているが依然として他のスレッドを受け付けることができるプロセッサとの間を区別することによってスレッドをより効率的にディスパッチする方法を提供する。スレッドを先ずアイドル・プロセッサにディスパッチすることによって、スレッド・スプレッドは大きく減少する。それは、アイドル・プロセッサが存在しない時にスレッドを既に処理しているプロセッサにだけスレッドがディスパッチされるためである。これは、プロセッサ・リソースのより良好な利用を助長してシステム・パフォーマンスを改善し、スレッド・スプレッドを大きく減少させる。
【００３１】
本発明の技術的範囲内で多くの変更が可能であることは当業者には明らかであろう。従って、本発明は望ましい実施例に関して詳細に示され且つ説明されたけれども、本発明の精神及び技術的範囲から逸脱することなく形式及び詳細におけるこれらの及び別の変更を行うことが可能であるということは当業者には明らかであろう。
【００３２】
まとめとして、本発明の構成に関して以下の事項を開示する。
【００３３】
（１）各々が複数のスレッドを実行する能力を有する複数のプロセッサと、
前記複数のプロセッサに接続されたメモリと、
前記メモリ内にあり、前記複数のプロセッサの少なくとも１つによって実行されるスレッド・ディスパッチ機構と、
を含み、
前記スレッド・ディスパッチ機構は、前記複数のプロセッサのどれがアイドル状態にあるか、前記複数のプロセッサのどれが更なるスレッドを受け付けることができるか、及び前記複数のプロセッサのどれが更なるスレッドを受け付けることができないかを決定し、アイドル状態のプロセッサが存在する場合に新たなスレッドを該アイドル状態のプロセッサにディスパッチする、
装置。
（２）前記複数のプロセッサのいずれもアイドル状態にない場合、及び前記複数のプロセッサの少なくとも１つが更なるスレッドを受け付けることができる場合、前記スレッド・ディスパッチ機構は前記複数のプロセッサのうちの更なるスレッドを受け付けることができるプロセッサに前記新たなスレッドをディスパッチする、上記（１）に記載の装置。
（３）前記複数のプロセッサのすべてが更なるスレッドを受け付けることができない場合、前記スレッド・ディスパッチ機構は、前記複数のプロセッサの１つがスレッドの処理を終了し、それによって、更なるスレッドを受け付けることができるプロセッサになるのを待ち、しかる後、前記更なるスレッドを受け付けることができるプロセッサに前記更なるスレッドをディスパッチする、上記（１）に記載の装置。
（４）各々が複数のスレッドを実行することができる複数のプロセッサを含むコンピュータ・システムにおいてスレッドをディスパッチするための方法にして、
前記複数のプロセッサ各々のステータスを決定するステップと、
アイドル・プロセッサが存在する場合、該アイドル・プロセッサに新たなスレッドをディスパッチするステップと、
を含み、
プロセッサは、それがいずれのスレッドも実行していない場合にアイドル状態にあり、１つ又は複数のスレッドに作用していてビジーであるが更なるスレッドを処理する能力を有する場合に該更なるスレッドを受け付けることができ、該プロセッサは、それが実行し得る最大数のスレッドに作用していてビジーである場合に更なるスレッドを受け付けることができない、
方法。
（５）前記複数のプロセッサのいずれもアイドル状態にない場合、及び前記複数のプロセッサの少なくとも１つが更なるスレッドを受け付けることができる場合、前記複数のプロセッサのうちの前記更なるスレッドを受け付けることができる１つのプロセッサに前記新しいスレッドをディスパッチするステップを含む、上記（４）に記載の方法。
（６）前記複数のプロセッサのすべてが更なるスレッドを受け付けることができない場合、前記複数のプロセッサの１つがスレッドの処理を完了し、それによって、更なるスレッドを受け付けることができるプロセッサとなるのを待ち、しかる後、前記更なるスレッドを受け付けることができるプロセッサに前記更なるスレッドをディスパッチするステップを含む、上記（４）に記載の方法。
（７）マルチプロセッサ・コンピュータ・システムにおける複数のプロセッサのどれがアイドル状態にあるか、前記複数のプロセッサのどれが更なるスレッドを受け付けることができるか、及び前記複数のプロセッサのどれが更なるスレッドを受け付けることができないかを決定し、複数のスレッドを実行することができるアイドル・プロセッサが存在する場合、該アイドル・プロセッサに新たなスレッドをディスパッチするスレッド・ディスパッチ機構と、
前記スレッド・ディスパッチ機構を保持するコンピュータ可読信号保持媒体と、
を含むコンピュータ・プログラム。
（８）前記コンピュータ可読信号保持媒体は記録可能媒体を含む、上記（７）に記載のコンピュータ・プログラム。
（９）前記コンピュータ可読信号保持媒体は伝送媒体を含む、上記（７）に記載のコンピュータ・プログラム。
（１０）前記複数のプロセッサのいずれもアイドル状態にない場合、及び前記複数のプロセッサの少なくとも１つが更なるスレッドを受け付けることができる場合、前記スレッド・ディスパッチ機構は前記複数のプロセッサのうちの前記更なるスレッドを受け付けることができるプロセッサに前記新たなスレッドをディスパッチする、上記（７）に記載のコンピュータ・プログラム。
（１１）前記複数のプロセッサのすべてが更なるスレッドを受け付けることができない場合、前記複数のプロセッサの１つがスレッドの処理を終了し、それによって、更なるスレッドを受け付けることができるプロセッサとなるのを待ち、しかる後、前記更なるスレッドを受け付けることができるプロセッサに前記更なるスレッドをディスパッチする、上記（７）に記載のコンピュータ・プログラム。
【図面の簡単な説明】
【図１】望ましい実施例による装置のブロック図である。
【図２】従来技術のスレッド・ディスパッチ機構においてプロセッサ・ステータスを追跡する方法を示すブロック図である。
【図３】ハードウェア・マルチスレッドをイネーブルされたマルチプロセッサ環境においてスレッドをディスパッチするための従来技術の方法の流れ図である。
【図４】望ましい実施例によるスレッド・ディスパッチ機構においてプロセッサ・ステータスを追跡する方法を示すブロック図である。
【図５】望ましい実施例に従ってハードウェア・マルチスレッドをイネーブルされたマルチプロセッサ・システムにおいてスレッドをディスパッチするための方法の流れ図である。
【符号の説明】
１００  コンピュータ・システム
１２０  メイン・メモリ
１６０  システム・バス
１７５  ワークステーション
【図１】
0004117202.tif 000002
【図２】
0004117202.tif 000003
【図３】
0004117202.tif 000004
【図４】
0004117202.tif 000005
【図５】
0004117202.tif 000006