(57)【特許請求の範囲】
【請求項１】
フェッチした命令をデコードする命令制御部とデコードされた命令を実行する演算部とを備えるプロセスユニットと、仮想アドレス及び物理アドレスを関連付ける変換索引バッファ（以下TLBと称する。）と、TLB無効化を行うTLB制御部とをそれぞれ有する複数のコアと、
前記複数のコアを代表する代表コアから無効化対象アドレスと複数の無効化対象コアの情報を含むTLB無効化を設定され、前記設定された無効化対象アドレスのTLBエントリを無効化するTLB無効化要求を、前記設定された複数の無効化対象コアに送信する無効化制御部とを有し、
他の物理演算処理装置とは通信経路を介して接続され、
前記複数のコアのうち前記TLB無効化を要求するソースコアが、前記複数の無効化対象コアを有する他の物理演算処理装置内の前記代表コアに、前記TLB無効化要求を前記通信経路を介して送信し、
前記代表コアは、前記ソースコアから送信された前記TLB無効化要求に応答して、前記無効化制御部に前記TLB無効化を設定する、物理演算処理装置。
【請求項２】
前記複数のコアそれぞれのTLB制御部は、前記無効化制御部から送信されたTLB無効化要求に応答して、前記TLB内の無効化対象アドレスのTLBエントリを無効化する、請求項１に記載の物理演算処理装置。
【請求項３】
前記複数のコアそれぞれのTLB制御部は、前記無効化制御部から送信されたTLB無効化要求に応答して、前記TLB内の無効化対象アドレスのTLBエントリを無効化し、前記無効化制御部に第１の無効化完了通知を出力し、
前記無効化制御部は、全ての前記無効化対象コアから前記第１の無効化完了通知を入力すると、前記代表コアに第２の無効化完了通知を出力する、請求項１に記載の物理演算処理装置。
【請求項４】
前記代表コアは、他の物理演算処理装置からのTLB無効化割込みに応答して、前記無効化制御部に前記TLB無効化を設定する、請求項１に記載の物理演算処理装置。
【請求項５】
前記代表コアは、他の物理演算処理装置からの割込み通知に応答して、メインメモリから前記割込み通知の割込み処理内容を読み出し、前記割込み処理内容が前記TLB無効化の場合に前記無効化制御部に前記TLB無効化を設定する、請求項１に記載の物理演算処理装置。
【請求項６】
前記代表コアは、前記他の物理演算処理装置からの割込み通知に応答して、オペレーティングシステム（以下OSと称する。）を実行して前記メインメモリ内のロック領域から前記割込み処理内容を読み出し、前記メインメモリ内のOSバッファ領域に前記割込み処理内容を書き込み、
前記代表コアは、前記OSを実行して、前記OSバッファ領域に書き込まれた前記割込み処理内容を読み出す、請求項５に記載の物理演算処理装置。
【請求項７】
さらに、
前記無効化対象アドレスが設定される無効化レジスタと、
前記無効化対象コアが設定される無効化ターゲットレジスタを有し、
前記無効化制御部は、前記無効化レジスタと無効化ターゲットレジスタの設定値に基づいて、前記TLB無効化要求を生成し前記無効化対象コアに送信する、請求項１に記載の物理演算処理装置。
【請求項８】
フェッチした命令をデコードする命令制御部とデコードされた命令を実行する演算部とを備えるプロセスユニットと、仮想アドレス及び物理アドレスを関連付ける変換索引バッファ（以下TLBと称する。）と、TLB無効化を行うTLB制御部とをそれぞれ有する複数のコアと、前記複数のコアを代表する代表コアから無効化対象アドレスと複数の無効化対象コアの情報を含むTLB無効化を設定され、前記設定された無効化対象アドレスのTLBエントリを無効化するTLB無効化要求を、前記設定された複数の無効化対象コアに送信する無効化制御部とをそれぞれ有する、複数の物理演算処理装置と、
前記複数の物理演算処理装置間の通信を行う通信経路とを有し、
TLB無効化を要求する第１の物理演算処理装置内のソースコアが、前記複数の無効化対象コアを有する第２の物理演算処理装置内の前記代表コアに、前記TLB無効化要求を前記通信経路を介して送信し、
前記代表コアは、前記ソースコアから送信された前記TLB無効化要求に応答して、前記無効化制御部に前記TLB無効化を設定する、情報処理装置。
【請求項９】
前記代表コアは、前記第１の物理演算処理装置からの割込み通知に応答して、メインメモリから前記割込み通知の割込み処理内容を読み出し、前記割込み処理内容が前記TLB無効化要求の場合に前記無効化制御部に前記TLB無効化を設定する、請求項８に記載の情報処理装置。
【請求項１０】
前記代表コアは、前記第１の物理演算処理装置からの割込み通知に応答して、オペレーティングシステム（以下OS）を実行して前記メインメモリ内のロック領域から前記割込み処理内容を読み出し、前記メインメモリ内のOSバッファ領域に前記割込み処理内容を書き込み、
前記代表コアは、前記OSを実行して、前記OSバッファ領域に書き込まれた前記割込み処理内容を読み出す、請求項９に記載の情報処理装置。
【請求項１１】
前記ソースコアは、前記第２の物理演算処理装置に接続される前記メインメモリ内の前記代表コアのロック領域にロック状態を書き込み、さらに、前記ロック領域のロックバッファに前記割込み処理内容を書き込む、請求項１０記載の情報処理装置。
【請求項１２】
フェッチした命令をデコードする命令制御部とデコードされた命令を実行する演算部とを備えるプロセスユニットと、仮想アドレス及び物理アドレスを関連付ける変換索引バッファ（以下TLBと称する。）と、TLB無効化を行うTLB制御部とをそれぞれ有する複数のコアと、前記TLB制御部のTLB無効化を制御する無効化制御部とをそれぞれ有する、複数の物理演算処理装置と、
前記複数の物理演算処理装置間の通信を行う通信経路とを有する情報処理装置の制御方法であって、
TLB無効化を要求する第１の物理演算処理装置内のソースコアが、複数の無効化対象コアを有する第２の物理演算処理装置内の前記複数のコアを代表する代表コアに、TLB無効化要求を前記通信経路を介して送信し、
前記代表コアは、前記ソースコアから送信された前記TLB無効化要求に応答して、前記無効化制御部に無効化対象アドレスと前記複数の無効化対象コアの情報を含む前記TLB無効化を設定し、
前記無効化制御部は、前記設定された無効化対象アドレスのTLBエントリを無効化するTLB無効化要求を、前記設定された複数の無効化対象コアに送信する、情報処理装置の制御方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は，演算処理装置、情報処理装置及び情報処理装置の制御方法に関する。
【背景技術】
【０００２】
近年、情報処理装置（またはコンピュータ）は、複数の演算処理装置（またはプロセッサ、CPU(Central Processing Unit)）を搭載する。このような複数の演算処理装置を搭載するマルチプロセッサシステムにおいて、異なるCPUが実行するプロセスが同じ仮想アドレスを使用していた場合、あるCPUのプロセスが終了すると、そのCPU内の変換索引バッファ（以下TLB（Translation Lookaside Buffer）と称する。）内の対応するエントリを無効化（消去、パージ、またはデマッピングと称する。）する。つまり、TLB内の終了したプロセスが使用していた仮想アドレスのエントリを無効化する必要がある。それと同時に、同じ仮想アドレスを使用していたプロセスを実行する他のCPU内のTLBの同じエントリも、無効化する必要がある。同じ仮想アドレスのエントリを全てのCPUのTLBから無効化することにより、TLBのコヒーレンシを保ち、その後異なるCPUが同じ物理アドレスを異なる仮想アドレスに対応付けて使用した結果TLBのコヒーレンシが保たれなくなることを回避する。
【０００３】
また、近年のCPUは、複数のCPUコア（以下単にコアと称する。）を有する。このようなマルチコアCPUの場合も、異なるコアにおけるプロセスが同じ仮想アドレスを使用していた場合も、全てのコア内のTLB内の終了プロセスが使用していた同じ仮想アドレスのエントリを無効化する必要がある。
【０００４】
マルチプロセッサシステムにおけるTLBの無効化については、以下の特許文献１，２に記載されている。
【先行技術文献】
【特許文献】
【０００５】
【特許文献１】特開平０５−１８９３１８号公報
【特許文献２】特開平０６−１８７２４１号公報
【発明の概要】
【発明が解決しようとする課題】
【０００６】
しかしながら、マルチプロセッサシステムにおいて、各CPUまたはコアが実行するOS（Operating System）がTLBの無効化処理を行う場合、プロセスが終了したCPUまたはコアは、他のCPUまたはコアのOSに割り込みを通知し、TLBの無効化処理を要求する。TLB無効化の割り込み処理を完了したOSは、要求元のOSにOS割り込みで無効化完了通知を行う。そのため、多くのCPU間通信（プロセッサ間通信）が発生し、処理負荷が大きい。
【０００７】
特に、近年のマルチプロセッサシステムは、複数のコアをそれぞれ有する複数のCPUを搭載した回路基板を複数有する。そのため、TLB無効化に伴う回路基板を介したCPU間通信の数が膨大になり、処理負荷も同様に膨大化するとともに、処理が完了するまでの遅延時間も膨大する。
【０００８】
そこで，開示の一つの側面の目的は，TLB無効化の処理負荷を少なくした演算処理装置、情報処理装置及び情報処理装置の制御方法を提供することにある。
【課題を解決するための手段】
【０００９】
開示の第１の側面は，フェッチした命令をデコードする命令制御部とデコードされた命令を実行する演算部とを備えるプロセスユニットと、仮想アドレス及び物理アドレスを関連付ける変換索引バッファ（以下TLBと称する。）と、TLB無効化を行うTLB制御部とを有する複数のコアと、
前記複数のコアを代表する代表コアからTLB無効化を設定され、前記設定されたTLB無効化の無効化対象アドレスのTLBエントリを無効化するTLB無効化要求を、前記設定されたTLB無効化の無効化対象コアに並列に送信する無効化制御部とを有する、演算処理装置である。
【発明の効果】
【００１０】
第１の側面によれば，TLB無効化の処理負荷を少なくできる。
【図面の簡単な説明】
【００１１】
【図１】マルチプロセッサシステムの構成例を示す図である。
【図２】図１のマルチプロセッサシステムの物理CPUの構成を概略的に示す図である。
【図３】マルチプロセッサの別の構成を示す図である。
【図４】マルチプロセッサ構成における一つのTLB無効化処理の例を示す図である。
【図５】図４のTLB無効化処理のシーケンス図である。
【図６】図４のTLB無効化処理のフローチャート図である。
【図７】マルチプロセッサ構成における別のTLB無効化処理の例を示す図である。
【図８】ソース仮想CPUによるロック獲得とロック解放に伴うプロセッサ間の通信量を示す図である。
【図９】ソース仮想CPUによる割込み通知とターゲット仮想CPUによる完了通知に伴うプロセッサ間の通信量を示す図である。
【図１０】ターゲット仮想CPUによるOSバッファ領域への書き込みと読み出しに伴うプロセッサ間の通信量を示す図である。
【図１１】本実施の形態におけるマルチプロセッサの構成を示す図である。
【図１２】本実施の形態におけるマルチプロセッサでのTLB無効化処理のフローチャート図である。
【図１３】本実施の形態におけるマルチプロセッサ構成における一つのTLB無効化処理の例を示す図である。
【図１４】本実施の形態におけるマルチプロセッサ構成における別のTLB無効化処理の例を示す図である。
【図１５】デマップ制御回路と代表コアR_COREとターゲットコアT_COREとを示す図である。
【図１６】別の例のデマップ制御回路と代表コアR_COREとターゲットコアT_COREとを示す図である。
【図１７】デマップ制御回路のより詳細な構成を示す図である。
【図１８】デマップ制御回路内のステートマシンST_MCの状態遷移図である。
【図１９】デマップ制御回路の動作を示すフローチャート図である。
【図２０】デマップ制御回路とそのレジスタ類のフォーマット例を示す図である。
【図２１】本実施の形態におけるソースCPUによるロック獲得とロック解放に伴うプロセッサ間の通信量を示す図である。
【図２２】本実施の形態におけるソースCPUによるOS割込み通知と代表CPUによるデマップ完了後のOS割り込み通知に伴うプロセッサ間の通信量を示す図である。
【図２３】本実施の形態における代表CPUによるOSバッファ領域への書き込みと読み出しに伴うプロセッサ間の通信量を示す図である。
【図２４】第２の実施の形態におけるマルチプロセッサの構成を示す図である。
【図２５】第２の実施の形態におけるマルチプロセッサのTLB無効化処理のフローチャート図である。
【発明を実施するための形態】
【００１２】
以下、引用符号（VCPU等）を名称と区別するために適宜括弧内に記載する。また、TLB無効化とデマップ処理は、同じ処理であり、TLB内のエントリを無効化する処理である。
【００１３】
図１は、マルチプロセッサシステムの構成例を示す図である。図１のマルチプロセッサシステムは、２つの物理CPU（PCPU）と、それぞれの物理CPUに接続されるメインメモリMEMと、２つの物理CPU間（プロセッサ間）の通信を行う信号線とスイッチ群を有するクロスバースイッチXBARとを有する。
【００１４】
各物理CPU（PCPU）は、ｍ個（ｍは複数）のコアCOREと、メモリMEMへのアクセスを制御するメモリアクセス制御回路などを有するメモリコントローラMCTLを有する。メモリコントローラMCTLは、メモリアクセス制御回路以外にも、物理CPU間のトランザクションの送受信を制御するトランザクション制御回路や、非キャッシュ領域に割り当てられたレジスタ群などを有する。
【００１５】
図１の例では、各コアCOREは、複数のスレッドを並列に処理するために複数の仮想CPU（VCPU）を生成する。図１の例では、各コアCOREが同時に生成できる仮想CPU(VCPU)の数は、ｎ個（ｎは複数）である。したがって、ｍ＝１６、ｎ＝２の場合は、１つの物理CPU（PCPU）は３２個の仮想CPUを生成可能であり、３２のスレッド（またはプロセス）を並列に処理可能である。
【００１６】
但し、本実施の形態は、各コアが複数の仮想CPUを生成する場合と、各コアが複数の仮想CPUを生成しない場合の両方に適用できる。したがって、以下の説明では、各コアが複数の仮想CPUを生成できる場合を前提にして説明する。但し、各コアが複数の仮想CPUを生成しない場合は、以下に説明する仮想CPUの動作は、コアの動作に置き換えて理解することができる。
【００１７】
また、一般に、物理CPU（PCPU）は、複数のコアCOREが共有する二次のキャッシュメモリを有するが、図１では二次のキャッシュメモリは省略されている。
【００１８】
図２は、図１のマルチプロセッサシステムの物理CPUの構成を概略的に示す図である。図２では、図１と異なり、簡単のために、各物理CPU(PCPU)に１つのコアCOREが示される。しかし、図１と同様に各物理CPUはｍ個のコアCOREを有する。
【００１９】
コアCOREは、命令をフェッチし命令をデコードする命令制御ユニットと、デコードした命令を実行する演算ユニットを有するプロセスユニットPUと、キャッシュメモリCACHEと、仮想アドレスを物理アドレスに変換するTLBと、キャッシュメモリ及びTLBを制御するキャッシュ・TLB制御回路PIPEとを有する。キャッシュ・TLB制御回路PIPEは、例えば、キャッシュアクセスやTLB参照などの要求を処理したり、キャッシュメモリやTLBの無効化や登録の要求を処理する。
【００２０】
コアCORE内のプロセスユニットPUは、メモリアクセスを実行するとき、キャッシュメモリCACHEにアクセスし、キャッシュミスが発生すると、メモリコントローラMCTLを介してメインメモリMEMにアクセスする。複数の物理CPU(PCPU)がそれぞれのメモリMEMを管理しているが、第1の物理CPU（PCPU）が第２の物理CPU（PCPU）が管理するメモリMEMにアクセスすることも可能である。その場合は、第1の物理CPU内のメモリコントローラMCTLがクロスバースイッチXBARを介して第２の物理CPUに物理CPU間通信（プロセッサ間通信）を行う。
【００２１】
各コアCOREは、それぞれのコアCOREが実行するプロセス（スレッドに対応）に対応するTLBエントリをコア内のTLBに登録する。そして、プロセスユニットPUがメモリアクセスを実行する場合、TLBを参照して仮想アドレスを物理アドレスに変換する。また、各コアがマルチスレッド化されて複数の仮想CPU（VCPU）を生成する場合は、各仮想CPUが実行中のプロセスに対応するTLBエントリをコア内のTLBに登録し、参照する。さらに、複数のコアが実行するプロセスが同じ仮想アドレスを使用している場合は、複数のコア内のTLBに同じTLBエントリ（仮想アドレスと物理アドレスの対応）を登録する。
【００２２】
したがって、あるコアが実行するプロセスが終了しそれが使用していた仮想アドレスに対するTLBエントリを無効化（パージまたはデマップ）する場合は、同時に他のコアのTLB内の同じ仮想アドレスのTLBエントリも無効化する必要がある。これにより、複数のコア間でTLBのコヒーレンシを維持する。
【００２３】
コアがマルチスレッド化される場合は、各仮想CPU（VCPU）が実行するプロセスに対応するTLBエントリの登録と無効化を行う。そして、TLBのコヒーレンシを維持するために、複数の仮想CPU（VCPU）が使用していた同じ仮想アドレスのTLBエントリを同時に無効化する。
【００２４】
図３は、マルチプロセッサの別の構成を示す図である。図３の構成は、図１，２に示した物理CPU(PCPU)をL個（Lは複数、図中小文字ｌで表示）と、それぞれの物理CPUに接続されるL個のメモリMEMとを搭載するプロセッサブロックBLKをK個（Kは複数、図中小文字ｋで表示）有する。したがって、図１に示したとおり、各物理CPU（PCPU）がｍ個のコアCOREを有し、各コアが最大でｎ個スレッド化してｎ個の仮想CPU（VCPU）を生成すると、図３のマルチプロセッサは、最大でｋ×ｌ×ｍ×ｎ個の仮想CPU(VCPU)を生成可能である。
【００２５】
以下、簡単のために、回路ブロック数をｋ＝２、回路ブロック内の物理CPU数をｌ＝４、物理CPU内のコア数をｍ＝１６、各コアが生成可能な仮想CPU数をｎ＝２とする。この例によれば、マルチプロセッサは、合計物理CPU数はｋ×ｌ＝８個、合計コア数はｋ×ｌ×ｍ＝１２８個、合計仮想CPU数はｋ×ｌ×ｍ×ｎ＝２５６個となる。以下の例では、この個数で説明する。
【００２６】
［TLB無効化処理の比較例］
図４は、マルチプロセッサ構成における一つのTLB無効化処理の例を示す図である。また、図５は、図４のTLB無効化処理のシーケンス図である。そして、図６は、図４のTLB無効化処理のフローチャート図である。
【００２７】
図４には、マルチプロセッサ内の８個の物理CPU(PCPU)のうち、PCPU0、PCPUk、PCPU7が示されている。そして、物理CPU（PCPU0）の仮想CPU(VCPU0)がTLB無効化を依頼するソース仮想CPU（S_VCPU）であり、物理CPU(PCPUk)の仮想CPU(VCPU31)がTLB無効化の対象であるターゲット仮想CPU(T_VCPU)である。この例では、ターゲットT_VCPUは１つだけである。
【００２８】
まず、ソース仮想CPU(S_VCPU)が、あるプロセスの終了に伴い、自分のTLB内のプロセスが使用していた仮想アドレスのエントリを無効化し、さらに、同じ仮想アドレスを使用していたターゲット仮想CPU(T_VCPU)のTLBのエントリを無効化する処理を開始する。
【００２９】
最初に、ソースS_VCPUが物理CPU(PCPUk)内のターゲットVCPU31のロックを獲得する。すなわち、ソースS_VCPUのOSがファームウエアFIRMを呼び出し、メモリPCPUk-MEM内のロック領域LOCK_VCPU31のロックワード（CPU0 LOCK）のロック状態を読み出し、ロック状態がFreeであればBusyに書き換えてロックを取得する（S1）。これにより、ソースS_VCPUのファームウエアFIRMはロックバッファL_BUFにOS割り込み処理内容を書き込み、書き込み完了したらロック状態をReadyに書き換える（S1）。上記のファームウエアは、OSとハードウエアHWとの間のソフトウエアであり、例えばハイパーバイザなどである。
【００３０】
そして、ソースS_VCPUは、メモリコントローラMCTL内の非キャッシュレジスタの一つであるレジスタREG01に割込み通知を設定し（S2）、クロスバースイッチ経由のプロセッサ間通信で割込み通知XCALLをターゲットT_VCPUに送信する（S3）。
【００３１】
割込み通知XCALLの受信に応答して、ターゲットT_VCPUのファームウエアFIRMは、自分の物理CPU(PCPU)のメモリPCPUk-MEM内のロックバッファL_BUF内の割込み内容を読み出し（S4,S5）、読み出した割込み内容をOSバッファOS_BUFを記憶する物理CPU(PCPU7)に接続されたメモリPCPU7-MEM内のOS割り込みキュー領域I_QUEに書き込む（S6）。全物理CPU内の全仮想CPU(VCPU)のOSのためのバッファ領域は、通常、最も高い番号のメモリPCPU7-MEMに割り当てられている。
【００３２】
その後、ターゲットT_VCPUのOSが、メモリPCPU7-MEM内のOS割り込みキューI_QUEの割込み処理内容を読み出し（S7,S8）、制御回路PIPEにTLBのエントリを無効化するデマップ処理を要求する（S9）。なお、デマップ処理はTLB無効化処理を意味する。制御回路PIPEからデマップ処理の完了通知を受信すると、ターゲットT_VCPUのOSは、ファームウエアFIRMにメモリコントローラMCTL内の非キャッシュレジスタREGk1に無効化完了通知を設定させ（S10）、クロスバースイッチ経由のプロセッサ間通信で通知XCALLをソースS_VCPUに送信する（S11）。
【００３３】
そして、無効化完了通知に応答して、ソースS_VCPUの物理CPU(PCPU0)のファームウエアFIRMは、ターゲット仮想CPU(T_VCPU)のロックメモリ領域LOCKにアクセスして、ロック状態をFreeに書き換えて、ロックを開放する（S12）。
【００３４】
上記のとおり、図４，５，６に示したTLB無効化処理は、ソースS_VCPUのOSからターゲットT_VCPUのOSへの割込み処理により行われる。そのため、第1に、ソースがロック取得（S1）のためのプロセッサ間通信を行い、第２に、ソースがOS割り込み通知XCALL（S3）によるプロセッサ間通信を行い、第３に、ターゲットがOSバッファ領域OS_BUFへのアクセス（S6-S8）を伴うプロセッサ間通信を行う。第４に、ターゲットが無効化完了通知XCALL（S11）のためのプロセッサ間通信を、第５に、ソースがロック解放（S12）のためのプロセッサ間通信を行う。
【００３５】
図７は、マルチプロセッサ構成における別のTLB無効化処理の例を示す図である。図７の例では、物理CPU（PCPU0）の仮想CPU(VCPU0)がTLB無効化を依頼するソースCPU（S_VCPU）であり、ソースCPU（S_VCPU）以外の全ての仮想CPU(VCPU)がTLB無効化の対象であるターゲットCPUである。つまり、ソースS_VCPUは１個であり、ターゲットT_VCPUは２５６−１＝２５５個の例である。
【００３６】
図７の場合も、図４，５と同様に、５つのプロセッサ間通信を行うが、ターゲットT_VCPUが２５５個と多数であるため、その通信量は大幅に増加する。すなわち、図６のフローチャート図及び図７において、ソースS_VCPUが、２５５個全てのターゲットT_VCPUに対して（S20,S21）第1の処理（ロック取得処理S1）と第２の処理（割込み通知S3）を行い、２５５個全てのターゲットT_VCPUが、第３の処理（割込み処理の登録と実行S6-S8）と第４の処理（割り込み完了通知S11）とを行い、そして、ソースS_VCPUが第５の処理（ロック解放処理S12)を行う。これえらの処理は全てプロセッサ間通信を伴う。
【００３７】
図８は、ソース仮想CPUによるロック獲得とロック解放に伴うプロセッサ間の通信量を示す図である。図８の例は、２５６個全ての仮想CPU(VCPU)がソースになり、ソース以外の２５５個の仮想CPU(VCPU)がターゲットになる例である。この場合、ロック獲得(S1)とロック解放（S12）のために、ソースS_VCPUであるPCPU0のVCPU0が、ソースPCPU0_VCPU0以外のターゲットT_VCPUを有する７個のPCPU内の全てのVCPUのロックメモリにアクセスする必要がある。
【００３８】
図８の下部には、ターゲットT_VCPUがPCPU0_VCPU0の場合におけるロック取得例が示され、それによれば、ソースS_VCPUであるPCPU0のVCPU1-31と、PCPU1-7のVCPU0-31の合計２５５個から順番にロックを取得される。
【００３９】
図８の場合、プロセッサ間通信回数は、ロックワードの読み出し、書き込み、ロックバッファへの書き込みそれぞれにおいて、２５６×７×３２＝５７，３４４回になる。
【００４０】
図９は、ソース仮想CPUによる割込み通知とターゲット仮想CPUによる完了通知に伴うプロセッサ間の通信量を示す図である。図９の例も、２５６個全ての仮想CPU(VCPU)がソースになり、ソース以外の２５５個の仮想CPU(VCPU)がターゲットになる例である。この場合、割込み通知(S３)と完了通知（S11）のために、ソースS_VCPUであるPCPU0のVCPU0が、ソースPCPU0_VCPU0以外の７個のPCPU内の３２個のターゲットT_VCPUに割込み通知し、同じ数の完了通知が行われる。
【００４１】
したがって、図９の場合、プロセッサ間の通信回数は、割込み通知数と完了通知数が、それぞれ２５６×７×３２＝５７，３４４回になる。
【００４２】
図１０は、ターゲット仮想CPUによるOSバッファ領域への書き込みと読み出しに伴うプロセッサ間の通信量を示す図である。図１０の例も、２５６個全ての仮想CPU(VCPU)がソースになり、ソース以外の２５５個の仮想CPU(VCPU)がターゲットになる例である。この場合、ターゲットT_VCPUによる特定物理CPU(PCPU7)のメモリ内のOSバッファ領域への書き込みと読み出し（S6,S8）それぞれで、２５６個の仮想CPUのうちPCPU7内の３２個の仮想CPUを除く２５６−３２＝２２４個のターゲットT_VCPUが、PCPU7のメモリMEM内のOSバッファ領域にアクセスする。このアクセスが、２５６個のソースS_VCPUの倍数発生する。
【００４３】
したがって、図１０の場合、プロセッサ間の通信回数は、OSバッファへの書き込みと読み出し回数が、それぞれ２５６×（２５６−３２）＝５７，３４４回になる。
【００４４】
近年のマルチプロセッサは、マルチコア化、マルチスレッド化が加速し、TLB無効化のソースになる仮想CPU（S_VCPU）の数と、ターゲットとなる仮想CPU(T_VCPU)の数が増大する傾向にある。それに伴い、上記の物理CPU間のクロスバースイッチを経由する通信量が増大し、メモリアクセス時間の長時間化と、消費電力の増大が急速に進むことが予測される。
【００４５】
また、コアがマルチスレッド化されていない場合は、コアがTLB無効化のソース（要求元）になり、コアがTLB無効化のターゲットになる。そのような場合でも、マルチコア化が進むことでコア数が増大し、TLB無効化のソースになるコアの数と、ターゲットになるコアの数が増大し、同様に物理CPU間のクロスバースイッチを経由する通信量が増大する。
【００４６】
［本実施の形態］
図１１は、本実施の形態におけるマルチプロセッサの構成を示す図である。図１１の例では、前述と同様に、各コアがマルチスレッド化され、あるコアのある仮想CPU(VCPU)がTLB無効化を行い、同じ仮想アドレスを使用している他の仮想CPU(VCPU)にTLB無効化要求を行う。
【００４７】
図１１に示されるとおり、各物理CPU(PCPU0,1,2,3)は、デマップ制御回路DM_CONを有する。そして、各物理CPU内の代表コアの代表仮想CPU（VC）が、デマップ制御回路DM_CONに、ターゲットの仮想CPU(VC)を有するコアCOREのTLB無効化処理を設定すると、デマップ制御回路がターゲットのコアCOREのTLB制御回路PIPEにTBL無効化依頼を送信する。デマップ制御回路の具体例は後述する。
【００４８】
図１２は、本実施の形態におけるマルチプロセッサでのTLB無効化処理のフローチャート図である。図１２を参照して、図１１のTLB無効化処理について簡単に説明する。
【００４９】
図中、４つの物理CPU(PCPU0-3)のうち、ある物理CPU(PCPU0)のあるコアのある仮想CPU(VC)がソース仮想CPU（S_VCPU）であり、ソースS_VCPUが自分物理CPU（PCPU0）内のTLBの一つの仮想アドレスのエントリを無効化し、さらに、残りの３つの物理CPU(PCPU1,2,3)内のあるターゲット仮想CPU(VC)を有するコアCORE内のTLBのエントリの無効化（以下デマップで説明する。）を行う。
【００５０】
まず、ソース仮想CPU(S_VCPU)は、クロスバースイッチを経由するプロセッサ間通信XCALLで、ターゲットを有する物理CPU(CPU1,2,3)内における代表コアの代表仮想CPU(R_VCPU)に、OS割り込みを行う。代表コアは、物理CPU内の複数のコアCOREの中からあらかじめ選択されたコアCOREである。また、代表仮想CPUは、その代表コア内の最も若い番号の仮想CPUである。OS割り込みに伴って行われる処理は、図６で説明したのと同様であり、次のとおりである。
【００５１】
まず、ソース仮想CPU(S_VCPU)は代表仮想CPU（R_VCPU）のロックを取得しロックバッファへ割込み内容を書き込み（S1）、代表仮想CPU(R_VCPU)へOS割り込み通知を行う（S2,S3）。このOS割り込みに応答して、代表仮想CPU(R_VCPU)は、割込み内容をOSバッファへ書き込む（S4,S5,S6）。
【００５２】
そして、OS割り込み通知を受信した代表仮想CPU(R_VCPU)が、OSバッファの処理内容を読み出し（S7,S8）、物理CPU内に新たに設けたデマップ制御回路DM_CONにデマップ要求を設定する（S9）。この設定に応答して、デマップ制御回路DM_CONが、物理CPU内のターゲットの仮想CPU（VC）を有するターゲットコアに、デマップ要求を送信する。それに応答して、ターゲットコア内のTLB制御回路PIPEがデマップを実行し、デマップ完了通知信号をデマップ制御回路DM_CONに返信する。つまり、デマップ制御回路DM_CONは、ハードウエア回路により各ターゲットコア内のTLB制御回路PIPEに直接、デマップ要求を送信し、各ターゲットコア内のTLBのデマップを実行する。デマップ制御回路DM＿CONは、全てのターゲットコアからデマップ完了通知信号を受信すると、デマップ完了応答信号を代表仮想CPU（R_VCPU）に送信する。
【００５３】
そして、代表仮想CPU（R_VCPU）は、プロセッサ間通信XCALLでソース仮想CPU(S_VCPU)にOS割り込み（完了通知）を送信して（S10,S11）、ソース仮想CPUのOS割り込みの処理完了を伝える。このOS割り込みに応答して、ソース仮想CPU(S_VCPU)は、ロックの開放処理を行う（S12）。
【００５４】
このように、ソース仮想CPU(S_VCPU)は、全てのターゲット仮想CPU(T_VCPU)にOS割り込みを行う必要はなく、ターゲット仮想CPUが含まれる物理CPU内の代表コアの代表仮想CPU(R_VCPU)にだけOS割り込みを行う。したがって、OS割り込みに伴うプロセッサ間通信の数を減らすことができる。
【００５５】
また、代表仮想CPU(R_VCPU)だけがOSバッファ内の割込みキューI_QUEにアクセスして割込み内容を抽出すればよいので、それに伴うプロセッサ間通信も減る。
【００５６】
さらに、代表仮想CPU(R_VCPU)は、コア内のデマップ制御回路DM_CONにターゲットコアへのTLB無効化要求を設定するだけで、デマップ制御回路が複数のターゲットコアに対して並列にTLB無効化要求信号を送信する。つまり、ターゲット仮想CPU(T_VCPU)によるOS割り込みに関する処理は行われない。この点でもプロセッサ間通信が減る。
【００５７】
［１つのソース仮想CPUが１つのターゲット仮想CPUにTLB無効化を行う例］
図１３は、本実施の形態におけるマルチプロセッサ構成における一つのTLB無効化処理の例を示す図である。この例は、１つのソース仮想CPUが１つのターゲットコアにTLB無効化を行う例である。すなわち、マルチプロセッサ内の８個の物理CPU(PCPU)のうち、PCPU0、PCPUk、PCPU7が示され、物理CPU（PCPU0）の仮想CPU(VCPU0)がTLB無効化を依頼するソース仮想CPU（S_VCPU）であり、物理CPU(PCPUk)のターゲット仮想CPUを有するコアCOREがTLB無効化の対象であるターゲットコアT_COREである。この例では、ターゲットコアT_COREは１つだけである。以下の動作の説明では、図１３と図１２を参照する。
【００５８】
まず、ソース仮想CPU(S_VCPU)が、あるプロセスの終了に伴い、自分のTLB内のプロセスが使用していた仮想アドレスのエントリを無効化し、さらに、同じ仮想アドレスを使用していたターゲット仮想CPUを有するターゲットコアCOREのTLBのエントリを無効化する処理を開始する。
【００５９】
最初に、ソース仮想CPU(S_VCPU)が、ターゲットコアT_COREを有する物理CPU(PCPUk)内の代表仮想CPU(R_VCPU)のロックを獲得する。代表仮想CPUは、図１３の例では最も若い番号の仮想CPU(V_CPU0)である。ロック獲得のために、ソース仮想CPU(S_VCPU)のOSがファームウエアFIRMを呼び出し、メモリPCPUk-MEM内の代表仮想CPU(VCPU0,R_VCPU)のロック領域LOCK_VCPU0のロックワード（CPU0 LOCK）のロック状態を読み出し、ロック状態がFreeであればBusyに書き換えてロックを取得する（S1）。ロック取得とともに、ソース仮想CPU(S_VCPU)のファームウエアFIRMはロックバッファL_BUFにOS割り込み処理内容を書き込み、書き込み完了したらロック状態をReadyに書き換える（S1）。
【００６０】
そして、ソース仮想CPU(S_VCPU)は、メモリコントローラMCTL内の非キャッシュレジスタの一つであるレジスタREG01に割込み通知を設定し（S2）、プロセッサ間通信による割込み通知XCALLをターゲット仮想CPUを有する物理CPU(PCPUk)の代表仮想CPU(VCPU0,R_VCPU)に送信する（S3）。
【００６１】
割込み通知XCALLの受信に応答して、代表仮想CPU(VCPU0,R_VCPU)のファームウエアFIRMは、自分のPCPUのメモリPCPUk-MEM内のロックバッファL_BUF内の割込み内容を読み出し（S4,S5）、読み出した割込み内容を、物理CPU(PCPU7)に接続されたメモリPCPU7-MEM内のOSバッファのOS割り込みキュー領域I_QUEに書き込む（S6）。
【００６２】
その後、代表仮想CPU(VCPU0,R_VCPU) のOSが、メモリPCPU7-MEM内のOS割り込みキューI_QUEの割込み処理内容を読み出す（S7,S8）。そして、OSが、物理CPU(PCPUk)内のデマップ制御回路DM_CONに、ターゲット仮想CPUを有する全てのコアCOREへのデマップ処理の設定を行う（S9_1,S9_2）。この設定は、例えば、OSによる、メモリコントローラMCNTL内の非キャッシュレジスタであるデマップレジスタとターゲットレジスタへの設定であり、ファームウエアを介して行われる。
【００６３】
この設定に応答して、デマップ制御回路DM_CONは、デマップレジスタに設定された仮想アドレスのデマップ処理要求を、ターゲットレジスタに設定されたターゲットコアCOREの制御回路PIPEに送信する（S9_3）。これにより、制御回路PIPEは指定された仮想アドレスのTLBエントリを無効化（デマップ）し（S9_4）、デマップ完了通知をデマップ制御回路に送信する（S9_5）。デマップ制御回路DM_CONは、ターゲットコアCOREからデマップ処理の完了通知を受信すると、代表仮想CPU(R_VCPU)にデマップ完了応答を送信する。
【００６４】
代表仮想CPU(R_VCPU)のOSは、ファームウエアFIRMを介して、メモリコントローラMCTL内の非キャッシュレジスタREGk1にOS割り込み通知を設定し（S10）、プロセッサ間通信により通知XCALLをソース仮想CPU(S_VCPU)に送信する（S11）。
【００６５】
そして、OS割り込み通知に応答して、ソース仮想CPU(S_VCPU)のPCPU0のファームウエアFIRMは、ロックメモリ領域LOCKにアクセスして、ロック状態をFreeに書き換えて、ロックを開放する（S12）。
【００６６】
上記の制御回路PIPEによるTLBエントリの無効化（デマップ）処理では、制御回路PIPEが指定された仮想アドレスと一致するTLBエントリを検索し、一致するTLBエントリの有効ビットを無効に変更する。TLBエントリは、一般に、メインメモリのページ領域単位で登録されている。
【００６７】
［１つのソース仮想CPUが複数のターゲット仮想CPUにTLB無効化を行う例］
図１４は、本実施の形態におけるマルチプロセッサ構成における別のTLB無効化処理の例を示す図である。この例は、１つのソース仮想CPUが複数の物理CPU(PCPU)内の単一または複数のターゲットコアT_COREにTLB無効化を行う例である。すなわち、マルチプロセッサ内の８個の物理CPU(PCPU)のうち、物理CPU（PCPU0）の仮想CPU(VCPU0)がTLB無効化を依頼するソース仮想CPU（S_VCPU）であり、物理CPU(PCPUk、PCPU7)のターゲット仮想CPUを有するコアCOREがTLB無効化の対象であるターゲットコアT_COREである。この例では、ターゲットT_VCPUは複数である。
【００６８】
この場合、図１３と異なる動作は、次のとおりである。ソース仮想CPU(S_VCPU)は、複数の物理CPU(CPUk,CPU7)の代表仮想CPU(VCPU0,R_VCPU)について、ロック取得、ロックバッファへの書き込み、OS割り込み通知を行う（S1-S3）。各物理CPUの代表仮想CPU(R_VCPU)が、OS割り込みのためのOSバッファへの書き込み処理を行う（S4-S8）。さらに、代表仮想CPU(R_VCPU)のOSがそれぞれの物理CPU(PCPUk,PCPU7)内のデマップ制御回路DM_CONにデマップ要求の設定を行い、それぞれの物理CPU内の単一または複数のターゲットコアT_COREに、同じ仮想アドレスに対するデマップ処理を実行させる（S9_1-S9_6）。最後に、代表仮想CPU(R_VCPU)のOSが、ファームウエアを介して、OS割り込み通知をレジスタに設定して、プロセッサ間通信XCALLによりソース仮想CPU(S_VCPU)にOS割り込み通知を送信する（S10,S11）。最後に、ソース仮想CPU(S_VCPU)が、ロックの開放を行う（S12）。
【００６９】
この場合も、ソース仮想CPU(S_VCPU)は、ターゲット仮想CPUを有するコアの物理CPU内の代表仮想CPU(R_VCPU)に対してのみ、ロック取得、OS割り込みを行う。各物理CPUでは、代表仮想CPU(R_VCPU)が、OS割り込みに対応するOSバッファへのアクセスを行う。そして、代表仮想CPU(R_VCPU)が、物理CPU内に設けたデマップ制御回路DM_CONにデマップ要求を設定し、デマップ制御回路に単一またｈ複数のターゲットコアT_COREにデマップ要求を並列に送信させ、デマップ処理を実行させる。
【００７０】
図１４の例では、ソース仮想CPU(S_VCPU)は、自分の物理CPU内のデマップ制御回路DM_CONにもデマップ要求の設定を行っている。その設定に応答して、デマップ制御回路DM_CONは、ターゲットコアT_COREにデマップ要求を送信し、各制御回路PIPEにデマップ処理を行わせている。
【００７１】
図１４の例では、本実施の形態は、代表仮想CPU(R_VCPU)を設けたため、ソース仮想CPU(S_VCPU)によるロック取得と、OS割り込み通知のためのプロセッサ間通信XCALLの数を大幅に減らすことができる。また、各物理CPU内にデマップ制御回路DM_CONを設けてハードウエア回路によりデマップ要求をターゲットコアに行うようにしたため、全てのターゲット仮想CPU(V_CPU)にデマップ要求のOS割り込みをする必要がない。デマップ制御回路にデマップ要求を設定すれば、ターゲット仮想CPUを有するターゲットコアT_COREにデマップ要求がハードウエア回路により送信される。同時に、図７のように各ターゲット仮想CPUのOSがデマップ処理を行わないので、OS割り込み数を減らし、OS割り込み処理数を減らすことができる。さらに、デマップ完了後のOS割り込み通知は、代表仮想CPU(R_VCPU)が物理CPUを代表して、ソース仮想CPU(S_VCPU)にプロセッサ間通信XCALLで行うので、完了後のOS割り込み通知に伴うプロセッサ間通信の数も減らすことができる。
【００７２】
図１４から明らかなとおり、複数のソース仮想CPUがそれぞれ複数のターゲット仮想CPUにTLB無効化を行う場合も、プロセッサ間通信の数を大幅に減らすことができる。
【００７３】
［デマップ制御回路］
次に、本実施の形態におけるデマップ制御回路DM_CONの具体例と動作について説明する。
【００７４】
図１５は、デマップ制御回路と代表コアR_COREとターゲットコアT_COREとを示す図である。代表コアR_COREは、代表仮想CPU(R_VCPU)（図示せず）を有する。図１５の例は、ターゲットコアT_COREが１つの例である。
【００７５】
デマップ制御回路DM_CONは、メモリコントローラMCTL内に設けられる。メモリコントローラMCTLは、非キャッシュレジスタNON$REGを有し、非キャッシュレジスタNON$REGを読み出すためのデータ応答経路DOWを有する。非キャッシュレジスタNON$REGは、非キャッシュアドレス空間にアドレスマップされていて、全てのコアのプロセッサユニットPUがそのレジスタにデータを書き込むことができる。また、データ応答経路DOWは、全てのコアに対して設けられる。但し、図１５には、代表コアR_COREのプロセッサユニットPUから非キャッシュレジスタへの書き込み配線と、非キャッシュレジスタからターゲットコアCOREへのデータ応答経路DOWだけが示されている。
【００７６】
メモリコントローラMCTLは、上記の非キャッシュレジスタNON$REGに加えて、デマップ制御回路DM_CONのデマップ要求設定に使用するデマップレジスタDM_REGとターゲットコアの設定に使用するターゲットレジスタTG_REGとを有し、デコーダDECがそれらのレジスタを選択する。デマップレジスタDM_REGとターゲットレジスタTG_REGも、非キャッシュアドレス空間にアドレスマップされている。デマップレジスタDM_REGには、デマップ処理対象の仮想アドレスと、要求元の代表仮想CPU(R_VCPU)のIDが設定される。また、ターゲットレジスタTG_REGには、物理CPU内のデマップ対象のターゲットコアT_COREがビットマップ形式で設定される。
【００７７】
デマップ制御回路DM_CONは、デマップレジスタDM_REGの設定値が格納されるデマップキューDM_QUEと、ターゲットレジスタTG_REGの設定値がそれぞれ格納されるターゲットフラグTG_FLGを有する。ターゲットフラグTG_FLGは、物理CPU内の１６個のコアCOREそれぞれに対応付けられた１６個のフリップフロップで構成される。デマップ制御回路DM_CONは、さらに、デマップキューDM_QUEの仮想アドレスを有するデマップ要求DE_RQを、ターゲットフラグTG_FLGにターゲット対象(データ"1")に設定されたターゲットコアT_COREに送信する要求生成回路RQ_GENを有する。デマップ要求DE_RQは、セレクタSELと、ターゲットコアT_CORE宛てのデータ応答DOWを介して、ターゲットコアT_COREの制御回路PIPEに送信される。
【００７８】
図１５にデマップ制御回路の動作の概略が示されている。それによれば、ソースコアS_COREのプロセッサユニットPUが、デマップレジスタDM_REGに仮想アドレス等の設定を行い（S9_1）、ターゲットレジスタTG_REGにターゲットコアを指定する設定を行い（S9_2）、それに応答して要求生成回路RQ_GENがデマップ要求DM_RQを出力する（S9_3）。それに応答して、ターゲットコアT_COREの制御回路PIPEが仮想アドレスのTLBエントリをデマップし（S9_4）、デマップ完了通知DM_CPLをターゲットフラグTG_FLGのリセット端子に送信する（S9_5）。ターゲットフラグTG_FLGの全てのフリップフロップがリセット（データ"0"）されると、要求生成回路RQ_GENが完了応答CPL_RESを代表コアR_COREに送信する（S9_6）。
【００７９】
図１６は、別の例のデマップ制御回路と代表コアR_COREとターゲットコアT_COREとを示す図である。図１６においても、代表コアR_COREは、代表仮想CPU(R_VCPU)（図示せず）を有する。図１６の例は、同じ物理CPU内にターゲットコアT_COREが複数ある例である。
【００８０】
図１６において、図１５と同様に、メモリコントローラMCTL内にデマップレジスタDM_REGとターゲットレジスタTG_REGとを有すること、デマップ制御回路DM_CONがデマップキューDM_QUEとターゲットフラグTG_FLGとデマップ要求生成回路RQ_GENを有する。そして、それらの動作も図１５と同じである。但し、ターゲットレジスタTG_REGには、ターゲットコアT_COREに対応するビット（データ"1"）が全て設定され、ターゲットフラグTG_FLGのターゲットコアに対応するフリップフロップにデータ”１”がセットされる。
【００８１】
図１６の例では、複数のCORE0,CORE1,COREnがターゲットコアT_COREである。それにより、メモリコントロール回路MCTL内には、各コアCOREに対応してセレクタSELが設けられ、セレクタと各コアとの間にはデータ応答経路DOWが設けられている。デマップ要求生成回路RQ_GENは、ターゲットフラグTG_FLGの設定フラグに対応する数の複数のデマップ要求DM_RQを生成し、セレクタSELとデータ応答経路DOWを介して、ターゲットコアT_COREに送信する。
【００８２】
図１６に、デマップ制御回路の動作の概略が示されている。それによれば、ソースコアS_COREのプロセッサユニットPUが、ターゲットレジスタTG_REGへのターゲットコアの設定を行い（S9_1）、デマップレジスタDM_REGへの仮想アドレス等の設定を行い（S9_2）、それに応答して要求生成回路RQ_GENが複数のデマップ要求DM_RQを出力する（S9_3）。それに応答して、複数のターゲットコアT_COREの制御回路PIPEがそれぞれ仮想アドレスのTLBエントリをデマップし（S9_4）、デマップ完了通知DM_CPLをターゲットフラグTG_FLGのリセット端子に送信する（S9_5）。ターゲットフラグTG_FLGの全てのフリップフロップがリセット（データ”０”）されると、要求生成回路RQ_GENが完了応答CPL_RESを代表コアR_COREに送信する（S9_6）。
【００８３】
図１７は、デマップ制御回路のより詳細な構成を示す図である。デマップ制御回路DM_CONは、前述したデマップキューDM_QUEと、ターゲットフラグTG_FLGと、デマップ要求生成回路RQ_GENとを有し、さらに、デマップ要求生成回路を制御するステートマシンST_MACと、デマップ要求DM_RQをターゲットフラグTG_FLGに設定されたビットに基づいてデコードするデコーダDEC_2を有する。それ以外の構成、代表コアR_CORE,代表仮想CPU(R_VCPU)、セレクタSEL、データ応答経路DOW、コアCOREは図１５，１６と同様である。
【００８４】
図１８は、デマップ制御回路内のステートマシンST_MCの状態遷移図である。ステートマシンの状態遷移図は、デマップキューDM_QUEが空（demap_queue_empty=1）の間、デマップ要求を待機するデマップ要求待機状態ST1と、デマップ要求待機状態ST1でデマップキューDM_QUEに要求がエントリして空でなくなると（demap_queue_empty=0）遷移し、ターゲットレジスタの有効・無効を判定する状態ST2と、その判定結果としてターゲットレジスタが空でない場合（target_flag_all0=0）に遷移するデマップ要求の出力を要求する状態ST3と、デマップ要求が出力されたことが確認されると（output=1）遷移し、ターゲットコアからのデマップ完了通知待ち状態ST4と、全てのターゲットコアからのデマップ完了通知を受信してターゲットフラグTG_FLGが全て"0"になると遷移し、代表仮想CPU(R_VCPU)へのデマップ完了応答の出力を要求する状態ST5とを有する。状態ST2においてターゲットフラグが全て"0"である場合（target_flag_all0=1）の場合も、状態ST5に遷移する。
【００８５】
図１９は、デマップ制御回路の動作を示すフローチャート図である。上記の状態遷移図に基づいてデマップ制御回路DM_CONは以下のように動作する。
【００８６】
代表仮想CPU(R_VCPU)が、非キャッシュライトを実行して、ターゲットレジスタTG_REGにターゲットコアに対応するビットを"1"に、対応しないビットを"0"にするビットマップ値を書き込む（S20、S9_1）。さらに、代表仮想CPU(R_VCPU)が、非キャッシュライトを実行して、デマップレジスタDM_REGにデマップ処理に必要な情報（デマップ処理対象の仮想アドレスと、要求元の代表仮想CPU（R_VCPU）のID）を書き込む（S21,S9_2）。書き込まれた値は、デマップキューDM_QUEにセットされ（S23）、ターゲットレジスタTG_REGに書き込まれた値もターゲットフラグTG_FLGにセットされる。これにより、ステートマシンは、状態ST1からST2に遷移する。
【００８７】
そこで、ステートマシンST_MCは、デマップキューが空でなく（S24のNO）、ターゲットフラグTG_FLGが全て"0"でなければ（S25のNO）、状態ST3に遷移し、デマップ要求生成回路RQ_GENにデマップキューに格納済みのデマップ要求が投入される（S26）。これに応答して、デマップ要求生成回路RQ_GENは、データ応答経路DOWの優先権を獲得し（S27）、デマップ要求DM_RQを複数のターゲットコアにブロードキャストで発行する（S28）。その結果、ステートマシンは状態ST4に遷移する。
【００８８】
ターゲットコアの制御回路PIPEは、デマップ要求DM_RQを投入されて、デマップ要求で指定した仮想アドレスのTLBエントリをデマップ（無効化）し（S9_4）、デマップ完了通知DM_CPLをデマップ制御回路DM_CON内のターゲットフラグTG_FLGのターゲットコアに対応するフリップフロップに送信する。このデマップ完了通知がフリップフロップのリセット端子に入力され、フリップフロップがデータ"0"にされる（S29,S9_5）。
【００８９】
そして、全てのターゲットコアからデマップ完了通知がターゲットフラグに送信されて、ターゲットフラグTG_FLGが全て"0"になると（S30のYES）、ステートマシンST_MCは、デマップ要求生成回路DM_GENに完了応答CPLT_RESの出力を要求し（S31）、デマップ要求生成回路は完了応答CPLT_RESを代表仮想CPU(R_VCPU)に送信する（S32,S9_6）。
【００９０】
この完了応答に応じて、代表仮想CPU(R_VCPU)のOSは、非キャッシュライトにより、レジスタREG1にOS割り込みを書き込み、ソース仮想CPU(S_VCPU)にOS割り込み完了通知を、プロセッサ間通信XCALLで送信する。その後は、前述のとおり、ソース仮想CPU(S_VCPU)のOSがロック解除の処理を行う。ここでもプロセッサ間通信によるロックメモリへの書き込みなどが発生する。
【００９１】
図２０は、デマップ制御回路とそのレジスタ類のフォーマット例を示す図である。デマップレジスタDM_REGには、デマップ対象の仮想アドレスDM_ADRsと、デマップ要求元である代表仮想CPUのID(REQ_ID)とが書き込まれる。ターゲットレジスタTG_REGには、複数のターゲットコアのビットマップが書き込まれる。本実施の形態では、１つの物理CPU内には１６個のコアCOREが設けられているので、ターゲットコアのビットマップは１６ビットである。
【００９２】
そして、デマップキューDM_QUEは、プロセス実行環境のIDであるプロセスID（PR_ID）と、要求元である代表仮想CPUのID（REQ_ID）と、デマップ対象の仮想アドレスDM_ADRsとを有する。デマップ要求DM_RQのパケットは、ヘッダ「０１００」と、要求元である代表仮想CPUのID(REQ_ID)と、デマップ対象アドレスDM_ADRsと、プロセスIDとを有する。デマップ完了通知DM_CPLのパケットは、ヘッダ「１０１０」と、代表仮想CPUのID(REQ_ID)とを有する。
【００９３】
図２１は、本実施の形態におけるソースCPUによるロック獲得とロック解放に伴うプロセッサ間の通信量を示す図である。２５６個全ての仮想CPU（VCPU）がソース仮想CPUとなり、自分以外の２５５個の仮想CPUがTLB無効化のターゲット仮想CPUになる場合、ロック獲得S1とロック解放S12それぞれのプロセッサ間通信量は、以下のとおりである。
【００９４】
本実施の形態では、ソース仮想CPU(S_VCPU)は、他の物理CPU（PCPU）内の代表仮想CPU(R_VCPU)のロックだけを獲得し（S1）、開放（S12）すれば良い。ソース仮想CPU(S_VCPU)は、自分の物理CPU内のコアに対するデマップ要求は、自分の物理CPU内のデマップ制御回路DM_CONに直接依頼するので、ロック取得は不要である。したがって、各ソース仮想CPUは、他の物理CPU内の代表仮想CPU(S_VCPU,VCPU0)のロックメモリへの読み出しと書き込み処理S1,S12を行うだけである。したがって、２５６個の仮想CPUが７個の代表仮想CPUのロックメモリにアクセスする。よって、プロセッサ間の通信回数は、ロックワードの読み出し、書き込み、ロックバッファへの書き込みそれぞれにおいて、２５６×７＝１，８５５回になる。図８と比較すると大幅に減少している。
【００９５】
図２２は、本実施の形態におけるソースCPUによるOS割込み通知と代表CPUによるデマップ完了後のOS割り込み通知に伴うプロセッサ間の通信量を示す図である。同様に、２５６個全ての仮想CPU（VCPU）がソース仮想CPUとなり、自分以外の２５５個の仮想CPUがTLB無効化のターゲット仮想CPUになる場合、OS割り込み通知S3と割込み完了通知S11それぞれのプロセッサ間通信量は以下のとおりである。
【００９６】
本実施の形態では、ソース仮想CPUが自分以外の物理CPUの代表仮想CPU(S_VCPU)のOSにOS割込み通知S3を行い、それらがソース仮想CPUに割込み完了通知S11を行う。したがって、プロセッサ間の通信回数は、ソース仮想CPUに割込み完了通知S11それぞれにおいて、２５６×７＝１，８５５回になる。この場合も、図９と比較すると大幅に減少している。
【００９７】
図２３は、本実施の形態における代表CPUによるOSバッファ領域への書き込みと読み出しに伴うプロセッサ間の通信量を示す図である。同様に、２５６個全ての仮想CPU（VCPU）がソース仮想CPUとなり、自分以外の２５５個の仮想CPUがTLB無効化のターゲット仮想CPUになる場合、代表仮想CPUによるOSバッファ領域への書き込みと読み出しそれぞれのプロセッサ間通信量は以下のとおりである。
【００９８】
本実施の形態では、７個の代表仮想CPUがプロセッサ間通信で物理CPU(PCPU7)のメモリMEM7のOSバッファ領域にアクセスするので、書き込みと読み出しのプロセッサ間通信回数は、それぞれ７回になる。それがソース仮想CPUの数２５６倍発生するので、合計で１，７９２回になる。これも図１０より大幅に減少する。
【００９９】
［第２の実施の形態］
第１の実施の形態では、仮想マシンVCPUがTLB無効化要求の要求元、ソースとなっている。しかし、各コアがマルチスレッド化して複数の仮想マシンが生成されない場合でも、本実施の形態を適用することができる。
【０１００】
第２の実施の形態では、各コアがマルチスレッド化されない例であり、あるコアがプロセス終了などでその仮想アドレスのTLBエントリを無効化した場合、そのコアがTLB無効化を要求するソースコアとなり、他のコアをターゲットコアとしてTLB無効化を要求する。
【０１０１】
図２４は、第２の実施の形態におけるマルチプロセッサの構成を示す図である。図２４の例では、各コアはマルチスレッド化されず、あるソースコアS_COREがTLB無効化を行い、同じ仮想アドレスを使用している他のコア（ターゲットコアT_CORE）にTLB無効化要求を行う。
【０１０２】
図２４に示されるとおり、各物理CPU(PCPU0,1,2,3)は、デマップ制御回路DM_CONを有する。そして、各物理CPU内の代表コアR_COREが、デマップ制御回路DM_CONに、ターゲットのコアCOREのTLB無効化処理を設定すると、デマップ制御回路がターゲットのコアCOREのTLB制御回路PIPEにデマップ要求を送信する。デマップ制御回路は前述のとおりである。
【０１０３】
図２５は、第２の実施の形態におけるマルチプロセッサのTLB無効化処理のフローチャート図である。第２の実施の形態では、仮想CPUが生成されないので、第１の実施の形態の仮想CPUは第２の実施の形態ではコアCOREに置き換えられる。したがって、図２５では、図１２のソース仮想CPU(S_VCPU)がソースコアS_COREに、代表仮想CPU(R_VCPU)が代表コアR_COREにそれぞれ置き換えられている。それ以外は、図１２と同じである。
【０１０４】
以上説明したとおり、本実施の形態では、各物理CPU内にデマップ制御回路（TLB無効化制御回路）が設けられ、ソース仮想CPU(S_VCPU)またはソースコアS_COREが、各物理CPU内の代表仮想CPU(R_VCPU)または代表コアR_COREにOS割り込みによりTLB無効化（デマップ）を要求する。そして、各物理CPUでは、代表仮想CPU(R_VCPU)または代表コアR_COREが、デマップ制御回路に物理CPU内の単一または複数のターゲットコアT_COREに並列にTLB無効化（デマップ）要求を送信させ、各ターゲットコアT_COREがTLB無効化（デマップ）を実行する。それにより、ソース側とターゲット側の間のプロセッサ間通信量を抑制することができる。
【０１０５】
以上の実施の形態をまとめると，次の付記のとおりである。
【０１０６】
（付記１）
フェッチした命令をデコードする命令制御部とデコードされた命令を実行する演算部とを備えるプロセスユニットと、仮想アドレス及び物理アドレスを関連付ける変換索引バッファ（以下TLBと称する。）と、TLB無効化を行うTLB制御部とを有する複数のコアと、
前記複数のコアを代表する代表コアからTLB無効化を設定され、前記設定されたTLB無効化の無効化対象アドレスのTLBエントリを無効化するTLB無効化要求を、前記設定されたTLB無効化の無効化対象コアに並列に送信する無効化制御部とを有する、演算処理装置。
【０１０７】
（付記２）
前記複数のコアそれぞれのTLB制御部は、前記無効化制御部から送信されたTLB無効化要求に応答して、前記TLB内の無効化対象アドレスのTLBエントリを無効化する、付記１に記載の演算処理装置。
【０１０８】
（付記３）
前記複数のコアそれぞれのTLB制御部は、前記無効化制御部から送信されたTLB無効化要求に応答して、前記TLB内の無効化対象アドレスのTLBエントリを無効化し、前記無効化制御部に第1の無効化完了通知を出力し、
前記無効化制御部は、全ての前記無効化対象コアから前記第1の無効化完了通知を入力すると、前記代表コアに第２の無効化完了通知を出力する、付記１に記載の演算処理装置。
【０１０９】
（付記４）
前記代表コアは、他の演算処理装置からのTLB無効化割込みに応答して、前記無効化制御部に前記TLB無効化を設定する、付記１に記載の演算処理装置。
【０１１０】
（付記５）
前記代表コアは、他の演算処理装置からの割込み通知に応答して、メインメモリから前記割込み通知の割込み処理内容を読み出し、前記割込み処理内容が前記TLB無効化の場合に前記無効化制御部に前記TLB無効化を設定する、付記１に記載の演算処理装置。
【０１１１】
（付記６）
前記代表コアは、前記他の演算処理装置からの割込み通知に応答して、オペレーティングシステム（以下OS）を実行して前記メインメモリ内のロック領域から前記割込み処理内容を読み出し、前記メインメモリ内のOSバッファ領域に前記割込み処理内容を書き込み、
前記代表コアは、前記OSを実行して、前記OSバッファ領域に書き込まれた前記割込み処理内容を読み出す、付記５に記載の演算処理装置。
【０１１２】
（付記７）
さらに、
前記無効化対象アドレスが設定される無効化レジスタと、
前記無効化対象コアが設定される無効化ターゲットレジスタを有し、
前記無効化制御部は、前記無効化レジスタと無効化ターゲットレジスタの設定値に基づいて、前記TLB無効化要求を生成し前記無効化対象コアに送信する、付記１に記載の演算処理装置。
【０１１３】
（付記８）
フェッチした命令をデコードする命令制御部とデコードされた命令を実行する演算部とを備えるプロセスユニットと仮想アドレス及び物理アドレスを関連付ける変換索引バッファ（以下TLBと称する。）と、TLB無効化を行うTLB制御部とを有する複数のコアと、前記複数のコアを代表する代表コアからTLB無効化を設定され、前記設定されたTLB無効化の無効化対象アドレスのTLBエントリを無効化するTLB無効化要求を、前記設定されたTLB無効化の無効化対象コアに並列に送信する無効化制御部とをそれぞれ有する、複数の演算処理装置と、
前記複数の演算処理装置にそれぞれ接続される複数のメインメモリと、
前記複数の演算処理装置間の通信を行う通信経路とを有し、
TLB無効化を要求する第1の演算処理装置内のソースコアが、第２の演算処理装置内の前記代表コアにTLB無効化要求を送信し、
前記代表コアは、前記TLB無効化要求に応答して、前記無効化制御部に前記TLB無効化を設定する、情報処理装置。
【０１１４】
（付記９）
前記代表コアは、前記第1の演算処理装置からの割込み通知に応答して、前記メインメモリから前記割込み通知の割込み処理内容を読み出し、前記割込み処理内容が前記TLB無効化要求の場合に前記無効化制御部に前記TLB無効化を設定する、付記８に記載の情報処理装置。
【０１１５】
（付記１０）
前記代表コアは、前記第1の演算処理装置からの割込み通知に応答して、オペレーティングシステム（以下OS）を実行して前記メインメモリ内のロック領域から前記割込み処理内容を読み出し、前記メインメモリ内のOSバッファ領域に前記割込み処理内容を書き込み、
前記代表コアは、前記OSを実行して、前記OSバッファ領域に書き込まれた前記割込み処理内容を読み出す、付記９に記載の情報処理装置。
【０１１６】
（付記１１）
前記ソースコアは、前記第２の演算処理装置に接続される前記メインメモリ内の前記代表コアのロック領域にロック状態を書き込み、さらに、前記ロック領域のロックバッファに前記割込み処理内容を書き込む、付記１０記載の情報処理装置。
【０１１７】
（付記１２）
フェッチした命令をデコードする命令制御部とデコードされた命令を実行する演算部とを備えるプロセスユニットと仮想アドレス及び物理アドレスを関連付ける変換索引バッファ（以下TLBと称する。）と、TLB無効化を行うTLB制御部とを有する複数のコアと、前記TLB制御部のTLB無効化を制御する無効化制御部とをそれぞれ有する、複数の演算処理装置と、
前記複数の演算処理装置にそれぞれ接続される複数のメインメモリと、
前記複数の演算処理装置間の通信を行う通信経路とを有する情報処理装置の制御方法であって、
TLB無効化を要求する第1の演算処理装置内のソースコアが、第２の演算処理装置内の前記複数のコアを代表する代表コアにTLB無効化要求を送信し、
前記代表コアは、前記TLB無効化要求に応答して、前記無効化制御部に前記TLB無効化を設定し、
前記無効化制御部は、前記設定されたTLB無効化の無効化対象アドレスのTLBエントリを無効化するTLB無効化要求を、前記設定されたTLB無効化の無効化対象コアに並列に送信する、情報処理装置の制御方法。
【０１１８】
（付記１３）
さらに、
前記複数のコアそれぞれのTLB制御部は、前記TLB無効化要求に応答して、前記TLB内の無効化対象アドレスのTLBエントリを無効化する、付記１２に記載の情報処理装置の制御方法。
【０１１９】
（付記１４）
前記複数のコアそれぞれのTLB制御部は、前記TLB無効化要求に応答して、前記TLB内の無効化対象アドレスのTLBエントリを無効化し、前記無効化制御部に第1の無効化完了通知を出力し、
前記無効化制御部は、全ての前記無効化対象コアから前記第1の無効化完了通知を入力すると、前記代表コアに第２の無効化完了通知を出力する、付記１２に記載の情報処理装置の制御方法。
【符号の説明】
【０１２０】
CPU：演算処理装置、プロセッサ
PCPU：物理CPU
VCPU：仮想CPU
CORE：CPUコア、コア
BLK：プロセッサブロック
S_CPU：TLB無効化のソースCPU
S_CORE：TLB無効化のソースCORE
S_VCPU：TLB無効化のソースVCPU
T_CPU：TLB無効化のターゲットCPU
T_CORE：TLB無効化のターゲットCORE
T_VCPU：TLB無効化のターゲットVCPU
MCTL：メモリ制御回路
XBAR：PCPU間通信のクロスバースイッチ
PU：プロセスユニット
PIPE：キャッシュ・TLB制御回路
CACHE：キャッシュメモリ
TLB：トランスレーション・ルックアサイド・バッファ
MEM：メインメモリ
LOCK：ロックメモリ領域
L_BUF：ロックバッファ
OS_BUF：OSバッファ領域
I_QUE：割り込みキュー
XCALL：クロスバー通信
REGx1：割り込み通知レジスタ
REGx1：割り込み完了通知レジスタ
R_VCPU：代表仮想CPU
R_CORE：代表コア
DM_CON：デマップ制御回路、デマップ制御部、無効化制御回路、無効化制御部
DE_REG：デマップレジスタ、無効化レジスタ
TG_REG：デマップターゲットレジスタ、無効化ターゲットレジスタ
DE_QUE：デマップキュー
TG_FLG：ターゲットフラグ
RQ_GEN：デマップ要求生成部
SEL：セレクタ
Non$REG：ノンキャッシュレジスタ、非キャッシュレジスタ
【図１】
0006663108.tif 000002
【図２】
0006663108.tif 000003
【図３】
0006663108.tif 000004
【図４】
0006663108.tif 000005
【図５】
0006663108.tif 000006
【図６】
0006663108.tif 000007
【図７】
0006663108.tif 000008
【図８】
0006663108.tif 000009
【図９】
0006663108.tif 000010
【図１０】
0006663108.tif 000011
【図１１】
0006663108.tif 000012
【図１２】
0006663108.tif 000013
【図１３】
0006663108.tif 000014
【図１４】
0006663108.tif 000015
【図１５】
0006663108.tif 000016
【図１６】
0006663108.tif 000017
【図１７】
0006663108.tif 000018
【図１８】
0006663108.tif 000019
【図１９】
0006663108.tif 000020
【図２０】
0006663108.tif 000021
【図２１】
0006663108.tif 000022
【図２２】
0006663108.tif 000023
【図２３】
0006663108.tif 000024
【図２４】
0006663108.tif 000025
【図２５】
0006663108.tif 000026