JP6086230B2 - 中央演算装置、情報処理装置、および仮想コア内レジスタ値取得方法 - Google Patents

中央演算装置、情報処理装置、および仮想コア内レジスタ値取得方法 Download PDF

Info

Publication number
JP6086230B2
JP6086230B2 JP2013075895A JP2013075895A JP6086230B2 JP 6086230 B2 JP6086230 B2 JP 6086230B2 JP 2013075895 A JP2013075895 A JP 2013075895A JP 2013075895 A JP2013075895 A JP 2013075895A JP 6086230 B2 JP6086230 B2 JP 6086230B2
Authority
JP
Japan
Prior art keywords
core
virtual
virtual core
instruction
cores
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.)
Active
Application number
JP2013075895A
Other languages
English (en)
Other versions
JP2014203106A (ja
JP2014203106A5 (ja
Inventor
典行 谷内
典行 谷内
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.)
NEC Corp
Original Assignee
NEC 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 NEC Corp filed Critical NEC Corp
Priority to JP2013075895A priority Critical patent/JP6086230B2/ja
Priority to EP14161744.9A priority patent/EP2787444B1/en
Priority to US14/229,076 priority patent/US9690603B2/en
Publication of JP2014203106A publication Critical patent/JP2014203106A/ja
Publication of JP2014203106A5 publication Critical patent/JP2014203106A5/ja
Application granted granted Critical
Publication of JP6086230B2 publication Critical patent/JP6086230B2/ja
Active legal-status Critical Current
Anticipated expiration legal-status Critical

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/44Arrangements for executing specific programs
    • G06F9/455Emulation; Interpretation; Software simulation, e.g. virtualisation or emulation of application or operating system execution engines
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/36Preventing errors by testing or debugging software
    • 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/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30003Arrangements for executing specific machine instructions

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Software Systems (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Computer Hardware Design (AREA)
  • Quality & Reliability (AREA)
  • Debugging And Monitoring (AREA)
  • Storage Device Security (AREA)

Description

本発明は、物理コアを複数の仮想コアとして使用する仮想化技術に関して、詳しくは任意の仮想コアで動作するプログラムに関する検証技術に関する。
昨今の情報処理装置では、仮想化技術を用いて、プログラムを実行する中央演算装置内(物理コア内)に、複数の仮想コアを構築して利用している。
中央演算装置内の仮想化は、ハードウェアマルチスレッディング技術などと呼ばれている。
ところで、情報処理装置上で動作させる様々なプログラムについて動作検証が様々な手法で行われている。
プログラムをデバッグする際、通常はデバッガを用いてインタラクティブに調査したり、メモリダンプを使用して静的な情報から調査を行なったりする。このいずれの方法も、検証対象とするプログラム(以下、対象プログラムと記載)の挙動に影響を与えるために運用中のサーバなどでは使用することが難しい。また、OS(Operating System)自体がストール状態で操作ができない場合に、検証方法がさらに限定される。
このような場合に際して、ハードウェアの機能でレジスタやメモリの状態を参照できる機能が提供されれば検証に有用である。この機能を提供する手法として既にJTAG(Joint Test Action Group)やICE(In-Circuit Emulator)がある。他方、通常運用時には必要としないハードウェア装置であるため、開発用途の特殊な例を除き、価格を上昇等のために、一般的なサーバ装置には現状実装されていない。
また、ソフトウェアの動作検証手法としては、情報処理装置自身からメモリやレジスタの情報を正確に取得して、その情報を情報処理装置自身が分析することも行われている。
本発明に関連する技術は、例えば、特許文献1ないし特許文献6に記載されている。
特許文献1や特許文献2には、チップ外部からレジスタ情報を読み出せるCPU(Central Processing Unit)装置が提案されている。これらは、チップの外部からレジスタ内容を読み出す際、動作中のCPUの実行コンテキストによるレジスタ更新と外部からの参照を同期させるコストや複雑さを避けるため、あらかじめ別の領域にコピーしておいたレジスタ情報を外部から読み出すというものである。
特許文献3や特許文献4には、メインCPUからレジスタ内容を拡張演算装置に引き渡して処理を継続するコプロセッサが提案されている。
また、特許文献5では、CPU間でレジスタを共有する実装方法として、ベクトルプロセッサ上での方法を提案している。これは、高速かつ大容量のレジスタがCPU外部にあり、複数のCPUやコアからレジスタ領域を共用してベクトル計算をするためのものである。
また、特許文献6には、1台の情報処理装置を成す1組のハードウェア上に複数のOSを同居させて、プログラムによりメモリに記録される値を診断用OSにより検証させる手法が提案されている。
また、特許文献7には、複数のCPUを並列動作させると共に、1つのCPUを障害処理用プロセッサコアとして動作させる障害処理手法が記載されている。
特許第3206960号公報 特開2003−085124号公報 特開2008−310693号公報 特許第3867804号公報 特許第2577865号公報 特許第2868114号公報 特開2009−129101号公報
ソフトウェアの動作検証手法としては、メモリダンプ、デバッガ、リアルタイムトレースなどが用いられている。
メモリダンプは、実行している対象プログラムのある静止点のメモリイメージを保存して、その内容から事後的に不具合等を解析する手法である。このため、プログラム走行箇所の遷移、またはデータの変化を追跡したい場合などの解析には向いていない側面を有する。
デバッガは、一見すると動作している対象プログラムに対して解析ができているように動作するものの、実際にはデバッガが動作している間は対象プログラムを停止する必要性があり、デバッグすることで対象プログラムの処理動作に様々な影響を与える。このため、複数のプログラムやスレッドの動作タイミングに依存する問題などは解析には向いていない側面を有する。
また、一般的に、OS起動処理の途中であったり、何らかの障害によりOSがストール状態にあったりした場合には使用できない。また、カーネルデバッガの中には、OSストール中に使用できるものも存在するが、カーネルを停止して解析する手法であるためにデバッグ作業中にOS全体が停止する問題を内在している。このため、運用中のシステムに対する検証手法としてカーネルデバッガを安易に用いることができないとの側面を有する。
リアルタイムトレースは、JTAGやICEといったハードウェアを使用して、中央演算装置(CPU)の状態を外部から調査する技術であり、対象プログラムが動作しているOSがストールしている場合などでも実行することが可能である。他方、専用の高価なハードウェアを別途実装する必要がある。このようなハードウェアは、動作周波数や調査する信号の本数など、対象の回路に合わせてカスタマイズする必要がある。このため、一般的には汎用性が低い。組み込み系の装置の中には、あらかじめCPU基板上にJTAGを実装する場合もあるものの、CPU基板に組み込まれた専用ハードウェアは通常運用時には使用されない無駄なリソースとなってしまうというデメリットもある。
また、実装形態によらず、対象プログラムが動作している物理コアの外部から一貫性のあるレジスタ情報を読み出すためには、対象コアを一時的に停止してデバッグモードに移行した後にレジスタ情報を転送することを必要としており、オーバヘッドが大きい問題もある。
また、上記例示した先行技術を用いてソフトウェアの動作検証手法の問題を説明すれば、以下のような指摘ができる。
特許文献1や特許文献2に記載されたCPU装置では、CPU基板外部からあらかじめ別の領域にコピーしておいたレジスタ情報を読み出せる。
しかし、この装置で参照できるレジスタ値は過去の内容であるため、読み出した内容に基づいた次の解析処理を実行してもこの時点で既にCPUは先の処理に実行を進めており、リアルタイムなデバッグに使用することはできない。
特許文献3や特許文献4に記載されたコプロセッサでは、メインCPUからレジスタ内容を拡張演算装置側に引き渡して処理を継続する。
しかし、これらのコプロセッサは浮動小数点演算などの特定の処理を目的とした専用ハードウェアである。付加的に設けることの問題や検証用プログラムの自由度に課題を有する。
特許文献5に記載されたCPU間でレジスタを共有する実装方法では、高速かつ大容量のレジスタをCPU外部に備える必要がある。このようなレジスタの構成は高価なメモリを大量に用意できる高価な大規模計算機に対しては向くかもしれない。
しかし、価格が高くなりすぎる傾向が高いため、現状の一般的なCPU周囲のアーキテクチャには採用できない。
特許文献6に記載されたアプリケーションの検証方法では、診断用OSによってメモリに記録された出力結果について整合性をチェックできる。
しかし、CPU内のレジスタ値や、カーネル解析などが行なえない問題がある。
上記のように対象プログラムについて様々な動作検証手法が提案されているものの、より、対象プログラムやOSの動作状態に影響を与えずに、且つ、オーバヘッドの小さい手法を用いて、リアルタイム的に綿密に検証できる手法が求められる。
本発明は、上記様々な観点を踏まえ、仮想コアで使用しているレジスタ情報を低オーバヘッドで取得して、動作中の対象プログラムの処理動作を検証可能とする中央演算装置及び情報処理装置を提供することを目的とする。
また、本発明の別の目的は、上記様々な観点を踏まえ、所定の仮想コアで使用しているレジスタ情報を中央演算装置の内部動作により低オーバヘッドで取得する仮想コア内レジスタ値取得方法、及びその方法を用いたプログラムの検証方法を提供することである。
本発明に係る中央演算装置は、物理コア上に複数の仮想コアを構築可能である中央演算装置であって、任意の仮想コアの実行コンテキストに影響を与えることなく、該仮想コアで用いる現在のレジスタ値を同一物理コア上の他の仮想コアから直接参照する参照命令を自仮想コアで実行する或いは他仮想コアに実行させる手段と、前記レジスタ値を参照する前記参照命令を実行する権限を仮想コアごとに切り替え得る手段と、を有することを特徴とする。
本発明に係る情報処理装置は、少なくとも、物理コア上に複数の仮想コアを構築可能である情報処理装置であって、任意の仮想コアの実行コンテキストに影響を与えることなく、該仮想コアで用いる現在のレジスタ値を同一物理コア上の他の仮想コアから直接参照する参照命令を自仮想コアで実行する或いは他仮想コアに実行させる手段と、前記レジスタ値を参照する前記参照命令を実行する権限を仮想コアごとに切り替え得る手段と、を有する中央演算装置を搭載すると共に、同一物理コア上の複数の仮想コアの1つ若しくは2以上(最大仮想コア数以下)をプログラム実行主体として使用するプログラムを対象に、前記複数の仮想コアの何れか又は複数を実行主体とみなして動作するOS上から、少なくとも前記参照命令を使用して解析・デバッグ・並列処理の何れか又は組み合わせを実行することを特徴とする。
本発明に係る中央演算装置の内部動作による仮想コア内レジスタ値取得方法は、1つの物理コア上に複数の仮想コアが構築された環境下で、任意の仮想コアが使用するレジスタを参照する権限を、同一の物理コアに属する他の仮想コアにも与え得る設定を有効に設定するステップと、前記任意の仮想コアの実行コンテキストに影響を与えることなく、該仮想コアで用いる現在のレジスタ値を前記同一物理コア上の他の仮想コアから直接参照する参照命令を、前記同一物理コアに属する任意の他の仮想コアから実行して、該任意の他の仮想コアが参照を受ける前記任意の仮想コアが使用した現レジスタ値を識別するステップと、を含むことを特徴とする。
本発明に係るプログラムの検証方法は、1つの物理コア上に複数の仮想コアを構築され、且つ、任意の仮想コアが使用するレジスタを参照する権限を 同一の物理コアに属する他の仮想コアにも与え得る設定を有効に設定し、該環境下で、前記同一物理コア上の複数の仮想コアの1つ若しくは2以上(最大仮想コア数以下)をプログラム実行主体として使用するプログラムを対象に、前記複数の仮想コアの何れか又は複数を実行主体とみなして動作するOS上から、少なくとも 任意の仮想コアの実行コンテキストに影響を与えることなく、該仮想コアで用いる現在のレジスタ値を同一物理コア上の他の仮想コアから直接参照する参照命令を実行し、前記参照命令を用いて得た仮想コアのレジスタ値を用いて解析・デバッグ・並列処理の何れか又は組み合わせを実行することを特徴とする。
本発明によれば、仮想コアで使用しているレジスタ情報を低オーバヘッドで取得して、動作中の対象プログラムの処理動作を検証可能とする中央演算装置及び情報処理装置を提供できる。
また、本発明によれば、所定の仮想コアで使用しているレジスタ情報を中央演算装置の内部動作により低オーバヘッドで取得する仮想コア内レジスタ値取得方法、及びその方法を用いたプログラムの検証方法を提供できる。
実施形態にかかる中央演算装置の概念を示したブロック図である。 他の仮想コアのレジスタ参照機能を有するCPU周囲アーキテクチャの概念的構成を示したブロック図である。 他の仮想コアのレジスタ参照機能を有するCPU周囲アーキテクチャの別の概念的構成を示したブロック図である。 実施形態で追加実装するCPU命令構成を例示した説明図である。 仮想コアごとに異なるOSを動作させる処理動作形態を示した説明図である。 複数の仮想コア上で同じOSを動作させる処理動作形態を示した説明図である。 複数の仮想コア上で同じOSを動作させる別の処理動作形態を示した説明図である。 本発明にかかる参照命令を使用しない場合のデバッグ処理動作フロー例を示した説明する。 図4に示したCPU命令の実装例におけるデバッグ処理動作フロー例を示した説明図である。 図4に示したCPU命令の実装例における簡易トレース処理動作フロー例を示した説明図である。 図4に示したCPU命令の実装例における並列検証処理例を示したフローチャートである。 図4に示したCPU命令の実装例における並列検証処理動作フロー例を示した説明図である。
本発明の実施形態について図面を参照しながら説明する。
図1は、実施形態の中央演算装置の一部を論理的に示したブロック図である。図示された中央演算装置(CPU、Central Processing Unit)は、物理コア1上に2つの仮想コア2が構築された中央演算装置の一部を示している。
各仮想コア2には、仮想コア用レジスタ3、命令実行権限設定部4が設けられている。なお、必ずしも各仮想コア2は対照的な構成を有する必要はない。
一方の仮想コア2は、他方の仮想コアの実行コンテキストに影響を与えることなく、その仮想コアで用いる現在の仮想コア用レジスタ3の値を直接参照する参照命令を自仮想コア2で実行する或いは他方の仮想コア2に実行させる手段として動作させ得る。また、OSやアプリケーションなどを動作させ得る一般的な用途にも使用できる。
仮想コア用レジスタ3は、各仮想コアが使用するために 物理コア1内に物理レジスタとして準備され、プログラムの処理動作に利用される。また、対応付けられる各仮想コア2で一般的な用途でOSやアプリケーションなどを動作させる際に、各仮想コア用レジスタ3は、対応付けられた仮想コア2のために排他的記憶リソースとして使用される。
また、任意の仮想コア2は、自仮想コアで用いる現在のレジスタ値を直接参照するための参照命令が他の仮想コア2で実行された際に、他の仮想コア2から値の参照を論理的に受ける。
命令実行権限設定部4は、少なくとも、レジスタ値を参照する参照命令を実行する権限を仮想コアごとに切り替え得る手段として動作させ得る。この手段では、参照命令等を受け付け得ることを設定しても良いし、参照命令等を通知し得ることを設定しても良い。また、任意の仮想コアとの関係を指定して設定の有効/無効を切り替えても良い。
仮想コア技術は、物理コア1の実行パイプライン上で個々の仮想コア2に仮想的に受け持たせるスレッドを同時に走行させる技術である。物理コア1は、物理的なチップ実装としては単一のコアである。このため、互いの仮想コア用レジスタ3は、物理的に配置(配線)距離が近く、外部の記憶要素とのデータ転送よりもレジスタ内でのデータ転送が高速に完遂できる。換言すればコストが非常に小さい。
また、命令実行権限設定部4が権限設定する各命令(各仮想コア2で扱われる各命令)は、OSやアプリケーションよりも高速に処理が完遂される。
また、仮想コア2相互は、同じ物理コアであるため、各実行スレッドを同期させるコストが、異なる物理コア間で同期する場合に比べて非常に小さい。
本発明にかかる情報処理装置では、仮想化技術の有する特徴を利用し、レジスタ等の本来排他的に使用するリソースを、他の仮想コアから参照するCPU命令を上記参照命令として実装することで、小オーバヘッドで任意の仮想コア用に構築された仮想コア用レジスタ3の値を取得可能にした。
また、上記参照命令と共に、参照命令を有効利用するために、幾つかのCPU命令を追加で実装する。これらの命令は、一CPU命令で実現してもよいし、分割して複数命令で実現してもよい。また用途や使用タイミングに合わせて以下の複数のCPU命令を組み合わせて準備してもよい。
・自仮想コアでの処理を停止する参照準備命令
・他仮想コアでの処理を停止する参照準備命令
・参照準備命令によって停止した状態を解除する参照準備解除命令
・参照命令を送出するポイントを設定する設定命令
・参照準備命令を送出するポイントを設定する設定命令
・参照準備解除命令を送出するポイントを設定する設定命令
・参照命令を送出させるポイントを設定する設定命令
・参照準備命令を送出させるポイントを設定する設定命令
・参照準備解除命令を送出させるポイントを設定する設定命令
・命令実行権限を設定する設定命令
上記命令実行権限設定部4はそれぞれ、参照命令を受け付けるか否かと共に上記各命令を受け付けるか否か設定可能に構成する。なお、個々の命令毎に権限設定することとしてもよいし、参照命令セットとして一体的に受け付けて参照命令を実行する権限設定することとしてもよい。また、3以上の仮想コアが物理コアに構築されることを踏まえ、任意の仮想コアのみに上記各命令を実行可能とする権限を設定可能に構築してもよい。
上記情報処理装置では、上記CPU命令を実行可能とした中央演算装置を搭載して、同一物理コア上の複数の仮想コアの1つ若しくは複数をプログラム実行主体として仮想的に使用するプログラムを対象プログラムとして、動作中の対象プログラムの処理動作を検証する。検証用のプログラムは、様々なレベルのプログラムを利用でき、検証する用途に合わせて適宜作成すればよい。この際、検証用プログラム独自でコンピュータを所望用途に機能させても良いし、OSやアプリケーション内に組み込んでそのプログラム自身やコンピュータで動作させる別のプログラムを検証する用途をも含ませるようにしてもよい。
この際に、同一物理コアで成る複数の仮想コアのうち、検証プログラムを走らせる仮想コアと異なる仮想コア 又は 複数の仮想コア上で動作させるOS上から、上記参照命令等を使用して、解析・デバッグ・並列処理などを、行って検証を行えば、利便性が高いツールとなり得る。
検証対象が動作した仮想コアが直前にアクセスしていたデータは、仮想コア間で共有するCPU内キャッシュに存在する可能性が非常に高く、相対的に低速である主メモリにアクセスすることなく検証可能とし得るため、多くの良好な情報を得ることが可能である。
以下、幾つかのプログラム検証システムの構成を挙げて中央演算装置の動作を説明する。なお、検証システムの構成を限定するものではない。
以下、検証対象となるプログラム(対象プログラム)を走らせる仮想コアを被解析仮想コアと呼び、その対象プログラムの動作検証を行なうプログラム(解析プログラム)を走らせる仮想コアを解析用仮想コアと呼ぶ。この被解析仮想コアと解析用仮想コアは、同一の物理コア内に構築される。
(1)被解析仮想コアと解析用仮想コアの動作構成例
・構成例1・・・被解析仮想コアと解析用仮想コアで異なるOSをそれぞれ動作させる
・構成例2・・・被解析仮想コアと解析用仮想コアで同じOSを動作させ、解析用仮想コアで解析プロセスを常駐させる
・構成例3・・・被解析仮想コアと解析用仮想コアで同じOSを動作させ、解析用仮想コアに参照命令を通知させる設定命令に応じて実行する検証用コードを予め登録する
(2)仮想コアごとに別OSを動作させるため、一つの物理コア内でリソースパーティショニングを行なうと共に、OSごとに別のI/Oコントローラを割り当てた動作構成例
・実施例1・・・CPU内にI/Oコントローラを複数実装し、メインOSと解析用OSでそれぞれ物理的に異なるI/Oコントローラを使用させる
・実施例2・・・LPAR(Logical PARtitioning)を用いて一つのI/Oコントローラを論理的に複数のI/Oコントローラとして使用することにより、メインOSと解析OSとにI/Oコントローラを共用させる
(3)検証用仮想コアからのレジスタ参照機能を用いる処理動作例
・実施例1・・・ブレークポイントを設定することにより、任意の条件でのレジスタ情報を読み出して利用
・実施例2・・・解析用仮想コア側から定期的にサンプリングすることにより、リアルタイムトレース
・実施例3・・・同一物理コア内の仮想コアが互いにレジスタを参照しあうことにより、レジスタ参照機能を高速なプロセス間通信として使用する並列処理
・実施例4・・・イベント通知機能のオーバヘッドの低さを利用した性能ボトルネック調査
例えば、上記実施例1の処理動作では、被解析仮想コアで対象プログラムに則して動作してブレークポイントに達した際に、解析用仮想コアに所定の命令を通知して、解析用仮想コア側から参照命令を用いてプログラムカウンタや命令レジスタなどのアーキテクチャステートを読み出す。このため、従前のデバッグモードに移行する検証処理の代わりとして利用できる。
解析用仮想コアから、実装された機能を使用して被解析仮想コアのレジスタを直接参照するため、被解析仮想コア上ではコンテキストスイッチによるレジスタ退避や、デバッガ起動などの動作を実行することを省くことができる。このため、レジスタ参照処理に伴うオーバヘッドが非常に小さく、被解析仮想コアについてレジスタ情報の採取が終了した後に即座に処理を再開させることが可能になる。
また、解析用仮想コアを構築する中央演算装置の物理的構成及び論理的構成は汎用的な構成であるため、検証に用いない場合や、検証に要する処理を実行中以外の間は、従前の論理プロセッサユニットとしての利用が可能である。
別の観点によれば、汎用仮想プロセッサの一部リソースを検証処理に使用することとなり、専用の検証・解析用ハードウェアをCPU内外に実装する既存技術に比べてリソースが無駄にならない利点がある。
上記したように、対象プログラムの検証を実行する際に、物理CPU上の同一コア内で、ある仮想コアで対象プログラムを実行し、別の仮想コアでデバッガを動作させることによって、解析対象のプログラム自体を大きく止めることなく別の仮想コアでレジスタ値を観察できる。
これを実行するにあたって、より詳細な実装構成及び動作例を示して、上記実施形態にかかる情報処理装置を用いたそれぞれのプログラム検証方法について説明する。以下では2つの処理形態を詳細に説明する。一つは、解析対象のプログラムを実行する仮想コアとデバッガを動作させる仮想コアそれぞれにおいて、別のOSを稼動させる形態である。もう一つは、両方の仮想コア上で一つの同じOSを稼動させる形態である。
まず、対象プログラムを実行する仮想コアと解析する仮想コアで別のOSが動作する形態について説明する。
本形態の説明では、同じ物理コア上の仮想コアをサーバOS用仮想コアと解析用仮想コアとしてそれぞれ位置づけ、リソースパーティショニングによりそれぞれの仮想コアで異なるOSを稼動させる。
リソースパーティショニングとは、単一のハードウェア上で複数のOSが動作できるように、CPU、メモリ、およびI/Oデバイスなどをアクセス制御し、それぞれのOSが必要とするリソースにアクセスを許可して、必要なOSにハードウェアリソースへのアクセス権を割り振るという既存技術である。
この実施形態は、カーネルを解析対象とする際に有用である。サーバOS用仮想コア上で動作するOSが起動途中やストール中などの理由で操作が制限されている場合であっても、解析用仮想コア上で独立して動作するOSを介して解析対象とするカーネルの挙動を調査することができる。
もう一つは、プロセスを解析対象とし、解析用・被解析用の両仮想コア上で同じ1つのOSを動作させる形態である。
この実施形態では、被解析プロセスを仮想コアの1つで動作させ、解析プロセスを同一物理コアの別の仮想コアに割り当てることにより、解析処理を行なう。
こちらの実施形態はOSが起動中・ストール中には使用できないものの、実装が容易となる側面があり、上記実施形態よりも利便性が優れた点を有しており、解析対象がカーネルではなくプロセスの場合にはこちらが有用ともいえる。
[構成の一例]
図2は、他の仮想コアのレジスタ参照機能を有するCPUコアの概念的構成を示したブロック図である。
CPUコア10は、サーバ装置の中央演算装置として動作して、CPU外部に独立したコアとして認識される仮想コア11と仮想コア12とを有している。
仮想コア11は上記被解析仮想コアであり、サーバOSを動作させ、仮想コア12は解析用仮想コアであり、デバッガを動作させる。これらの仮想コアの実体は実行パイプラインを共有したスレッドであり、それぞれがアーキテクチャステートを保持するための専用のレジスタ(データレジスタ21、22等)を有している。
仮想コア11及び12はそれぞれ独立して参照機能のEnable/Disableを切り替えられるレジスタ(解析権限切替レジスタ41、42)を有しており、その内容により他の仮想コアのレジスタへのアクセス権を制御する。
図2に示した構成では、仮想コア12の解析権限切替レジスタ42がEnableになっており、仮想コア12が仮想コア11のデータレジスタ21を参照でき、またデバッグレジスタ31を更新することができる。一方、仮想コア11の解析権限切替レジスタ41はDisableに設定されており、仮想コア11には仮想コア12のレジスタにアクセスする権限がない。
前述したサーバOS用仮想コアと解析用仮想コアとで異なるOSを動作させる方式において、仮想コアごとにI/Oコントローラ51、52を実装し、別個に管理する。I/OコントローラをOSごとに分けて管理する理由は、複数OSから単一のI/Oコントローラを管理していると、I/Oに伴う割り込みやリセット処理等が他のOSにも影響し、混乱が生じ得ることを考慮する。メモリコントローラ62は、仮想コア11及び12に共有され、メモリ61について個々の仮想コアに割り振る領域ごとにアクセス権を制御して、それぞれのOSで使用可能にする。
I/Oコントローラに関する別な実装例として、既存のLPAR技術を用いることもできる。LPARは、ハードウェアを論理的に分割することであたかもI/Oコントローラが複数あるかのように振舞う技術である。LPARを使用する場合には、仮想コア11と仮想コア12が物理的に一つのI/Oコントローラを共用することが可能となるため、仮想コアごとに別のI/Oコントローラを実装する必要はない。
図3に、サーバOSと解析OSに分割するリソースパーティショニングの実施例を示す。リソースパーティショニングは、BIOS70がそれぞれのOS用に異なる構成のACPI(Advanced Configuration and Power Interface) テーブルを生成することにより実現する。CPUコア10内に実現された仮想コア11と仮想コア21には、それぞれ異なるACPIの識別子が割り当てられて内部構造が隠蔽され、動作する各OSからは別のコアとして認識される。
BIOS70は、サーバOS用に、ACPIテーブル71を生成する。ACPIテーブル71には、サーバOSコア用の仮想コア11、I/Oコントローラ51、およびメモリ61のうちサーバOS用に割り当てる領域をEnableとして列挙される。サーバOSはACPIテーブル71を参照して各リソースの初期化を実行し、OSを起動する。
他方、BIOS70は、解析OS用に、ACPIテーブル72を生成する。ACPIテーブル72には、解析OS用の仮想コア12、I/Oコントローラ52、およびメモリ61のうち解析OS用に割り当てる領域をEnableとして列挙される。サーバOS用ACPIテーブル71との差として、解析OSはサーバOSのメモリを読み込むことのみ許可されている。これは、解析処理のためにサーバOS側のメモリも参照する必要があるためである。解析OSは、これらの情報をもとに各リソースの初期化を実行し、OSを起動する。
それぞれのI/Oコントローラ(51、52)には、例えばNIC81、NIC82などのネットワークインターフェースなどがそれぞれ接続され、互いのOSの状態に関わらず、それぞれのOSと外部とを接続して操作することを可能に構成される。
次に、一実施形態にかかるCPUに実装するCPU命令について説明する。
図4に、本実施形態で追加するCPU命令を列挙する。なお、この列挙する各命令は、上記した幾つかの命令を組み合わせて構成された命令群であり、利用目的に合わせて統合や分割、参照範囲指定などの変更を加えてもよい。
・命令A は、任意の仮想コアにレジスタを参照させる準備をさせ、別の仮想コアに処理を移すための参照準備命令である。一貫性のある情報を読み出すため、命令Aを実行した仮想コア(自仮想コア)は、スペキュレーティブロードや、割り込みなどのレジスタを変更する可能性のある処理の全てを停止する。また、更新中のレジスタが電気信号的に安定するまで待ち合わせ、レジスタを読み出し可能な状態に遷移した後に、解析用仮想コアに割り込み信号をアサートして通知する。この命令Aは主に、プログラムに設定されたブレークポイントに到達して、デバッグ例外が生成された際に実行すればよいが、任意のタイミングで実行可能にすることもできる。
・命令Bは、他の仮想コアを停止してレジスタを読み出し可能な状態に遷移させるための参照準備命令である。この命令Bは、解析する側の仮想コアから、解析される側の仮想コアに対して発行される。解析対象の仮想コアがレジスタ参照を可能とする準備が完了するまで待ち合わせるため、実行した仮想コアをブロックする役割も持つ。
・命令Cは、命令Aまたは命令Bによって停止した仮想コアの処理動作を再開するための参照準備解除命令である。
命令Dは、対象の仮想コアから任意のレジスタの内容を読み出すための参照命令である。
命令Eは、対象の仮想コアのデバッグレジスタの内容を書き換えるための設定命令である。ハードウェアブレークポイントを設定することにより、解析する仮想コア側から命令Aを発生させるタイミングを制御するために使用する。
ここで、命令Eの使い方について以下に補足する。指定したアドレスの命令を実行したとき、または指定したアドレスのデータにアクセスしたとき、などのように一定の条件を満たしたタイミングで命令Aを発行させる目的で、ブレークポイントを設定する。
ブレークポイントには、デバッガから設定するソフトウェアブレークポイントとデバッグレジスタで設定するハードウェアブレークポイントがある。いずれもデバッグ例外を発生させる点では同じだが、各々の仮想コア上で異なるOSを動作させる形態では、他のOS上のプログラムに対してソフトウェアブレークポイントの設定が既存の命令群ではできず、ハードウェアブレークポイントしか使用できない。また、各々の仮想コア上で同じOSを動作させる形態であっても、解析対象のプログラムが実行中である場合には、後からソフトウェアブレークポイントを設定することは難しい。そのため、対象の仮想コアの状態に依存せず、任意の条件で命令Aを発行させるように外部から制御する目的で命令Eを使用する。
次に、図5、図6、図7を用いて、処理動作例を説明する。図5は、仮想コアごとに異なるOSを動作させる形態、図6と図7は両仮想コア上で同じOSを動作させる形態である。
図5は、被解析仮想コアと解析用仮想コアで異なるOSを動作させる処理動作例である。前述のように、ACPIテーブルを使い分けることによってそれぞれで使用するリソースをパーティショニングし、被解析仮想コア上でサーバOSを 解析用仮想コア上で解析OSを それぞれ動作させる。それぞれのOSが参照したACPIテーブルに従い、被解析仮想コアからはサーバOSコア用メモリ(領域)を読書き可能だが、解析用仮想コアからはサーバOSコア用メモリ(領域)について読み出しのみが許可される。また、解析用仮想コアは自身が起動するための解析OS用メモリ(領域)を読書き可能だが、この領域は被解析仮想コアからはアクセスされない(できない)。
図6は、被解析仮想コアと解析用仮想コアが同一のOS制御下で動作する構成例である。解析用仮想コア上には解析用プロセスが常駐し、被解析コアで動作するプログラムをデバッグ・トレースにより解析する。被解析コアで動作するプログラムは、ソフトウェア/ハードウェアブレークポイントを設定され、解析用コアからの解析を受け付ける。同一OS上で動作するため、被解析仮想コアからも解析用仮想コアからも同様にメモリに読書きすることができる。
図7は、被解析仮想コアと解析用仮想コアを同一のOS制御下で動作させる別の構成例である。本アーキテクチャでは、図6と異なり、解析用仮想コア上に解析用プロセスを固定的に割り当てずに、実行するコードを予め登録しておくという構成である。被解析仮想コア上でデバッグ例外が発生した際に命令Aを発行し、命令Aにより解析用仮想コアで通知が識別された時点で、解析用仮想コア上で解析用コードを起動するように例外ハンドラを登録しておき、被解析仮想コアの解析を開始する。解析用コードは複数登録することができる。解析用仮想コアは、命令Dを発行することによって、被解析仮想コアから命令レジスタやその他のレジスタの内容を読み出し、その内容により実行する解析用コードを切り替える。
この構成には、解析用コードを実行していない場合には他の処理に解析用仮想コアを使用することができ、リソースを無駄にしない利点がある。このため、デバッグ目的ではなく、通常運用時におけるイベントベースのプログラム起動手段としても応用しやすい。
図5から図7に示した各アーキテクチャは、利用形態に合わせて使い分けることが望ましい。解析対象がカーネルである場合には、サーバOSに障害が発生して操作不能な状態でも、サーバOSと独立して動作する解析OSから調査が可能な図5の処理構成が好適であり、解析対象がプロセスである場合には、同じOS上で動作していたほうがアドレス配置の解析等が容易であるため、図6または図7の処理構成が好適となる。
図6と図7を比較すると、解析用仮想コアでデバッガを実行してインタラクティブに解析を行いたい場合に図6が適しており、実行したい内容があらかじめ決まっており、ブレークポイントに到達した場合に自動的に処理したい場合には図7が適している。
[処理動作の説明]
次に、図8から図12を用いて処理動作を説明する。
図8を用いて、比較のために本発明にかかる検証を使用しない場合(本発明にかかる参照命令を使用しない場合)のデバッグ時の動作を説明する。図示した方法では、解析するプログラムを実行しているコア自身から、もしくは物理的に異なるコアから解析処理を行う。
図8(a)、図8(b)では、ブレークポイントに到達すると、プログラムを実行するコア上でコンテキストスイッチを実行してレジスタを退避し、デバッガを起動している。
その後の処理は、解析処理を行なうコアがプログラムを実行しているコアと同じかどうかで、図8(a)と図8(b)に分かれる。
プログラムを実行していたコア自身で解析を行う場合は、図8(a)に示したように、プログラムは解析処理を行い終えるまでの間中長時間停止したままとなり、解析処理終了後に再度コンテキストスイッチを実行してプログラムを再開する。
物理的に異なるコアから解析する場合、図8(b)に示したように、解析対象のプログラムは、解析処理と並行して動作を再開して処理を継続できる。しかし退避したレジスタ情報を、解析処理をするコアに引き渡すために、異なるコア間での同期や転送がやはり必要となる。この処理が同一物理コア上の仮想コア間で行うよりも様々な点でコストの高い処理となる。
図9を用いて、命令実装例における基本処理を説明する。ブレークポイントでプログラムの動作を停止させるところまでは上記の方法と同様である。その後、デバッガを起動するのではなく、命令Aによって被解析仮想コアの動作を停止させた後に、解析用仮想コアにレジスタを参照可能な状態になったことを通知する。通知を受けた解析用仮想コアは、命令Dを使用してレジスタ情報を読み出した後に命令Cにより、被解析仮想コアの処理を再開する。
この一連の処理では、被解析仮想コア上でコンテキストスイッチやデバッガの起動を不要としたこと、および物理コア間の同期やデータ転送を必要としない構成としたことにより、低コスト且つ高速に実行できる。
図10を用いて、簡易トレースを行う処理動作例を説明する。図9で示した処理では、被解析仮想コアがブレークポイントに到達したことを契機に解析処理を開始している。他方で、図10に示した処理では解析用仮想コア側から解析処理を開始している。解析用仮想コアは、定期的に被解析コアの命令レジスタを読み出してプログラムフローのどこを現在処理しているかをサンプリングすることで、被解析コアの動作をモニタリングすることができる。
この処理は同一の物理コア内での処理であるため、被解析コア上で動作するプログラムに与える影響をごくわずかに限定することができるというメリットがある。
図11に、並列検証処理の一処理例のフローチャートを示す。この並列検証処理では、被解析仮想コアと解析用仮想コアが互いにレジスタ情報を参照する例を示しており、両仮想コアにおいて解析機能をEnableに設定されている。
様々なプログラムの中には、処理結果が妥当であるかどうかを検証したり、処理内容に応じた暗号キーを生成したりするなど、ある処理を実行すると同時に、その処理に関連する独立した処理を並列して実行させたいものがある。
このようなプログラムに対して、本発明によるレジスタ参照機能を低コストの通信手段として使用する並列プログラムを作成することができる。
図11では、検証したい処理である処理X自体の実行と、処理Xの結果を検証する検証処理Yを並列処理で実行する際の各仮想コアでの処理タイミングを示している。
被解析仮想コアでは、あらかじめ処理Xの開始部分にブレークポイントを設定したうえでプログラムを開始する。被解析仮想コアでブレークポイントに到達すると、命令Aにより解析用仮想コアにそのことが通知される(S11)。
次に、解析用仮想コアから被解析仮想コアのレジスタを命令Dを使用して読み出すと共に実行中の処理に応じた検証プログラムを起動する(S21)。この時、検証処理Yに必要なデータも被解析仮想コアのレジスタやメモリ・キャッシュから読み出しておく。
その後、命令Cにより被解析仮想コアの停止状態を解除(S22)することにより、それぞれの仮想コアが処理Xと検証処理Yを並列で実行する。
被解析仮想コア上で処理Xが完了すると、再び命令Aを使用してそのことを解析用仮想コアに通知する(S12)。
解析用仮想コアは、命令Dを使用して処理Xの結果を取得(S23)し、命令Cを実行して被解析仮想コアの処理を再開(S24)させる。
次に検証処理として、解析用仮想コア上で処理Xと検証処理Yの結果の比較を実施する(S25)。解析用仮想コアでは、比較結果が一致していればその結果のみ記録(S26)して解析用仮想コア上の検証処理は終了し、被解析仮想コア上のプログラムは邪魔されること無く処理を継続する。他方、解析用仮想コアは、比較結果が一致していない場合に、命令Aにより被解析仮想コアに対してそのことを通知(S27)する。
比較結果が一致していないことの通知を受けたことを識別(S13)して、被解析仮想コアは、命令Dにより解析用仮想コアのレジスタから検証結果を読み出す(S14)。読み出した内容により、処理を継続すべきか終了すべきかを判断(S15)する。
この並列処理において、プロセス間通信等のメモリ経由のデータ転送を伴わずにイベントの通知やデータの転送を行なっており、高速な並列処理プログラムを実現できている。
図12に示す並列処理は、解析対象プログラムを死活監視や性能ボトルネックを診断する実施例である。一般的に、プログラムの死活監視は、定期的にプログラム自身がログを残したり、外部のプログラムとメッセージを送受信したりすることによって実施している。しかし定期的な監視に失敗してもプログラムのどこで停止していたかを外部から知ることは困難である場合が多い。
本発明にかかるCPUでは、任意の箇所にブレークポイントを動的に設定し、対象プログラムへの影響を最小限にして動作を解析することができる。このため、どこで停止しているかに加え、どの処理に時間がかかっているか まで調査することが可能になる。
まず解析したい対象プログラムに対して、性能ボトルネックを監視したい任意の箇所にブレークポイントを設定する。図12では、死活監視メッセージの受信処理にブレークポイントを設定している。解析用仮想コアから対象プログラムに対して死活監視用のメッセージを送信すると、被解析仮想コア上でデバッグ例外が発生し、命令Aによって解析用仮想コアに通知する。この通知があった場合、解析用仮想コアは対象プログラムがメッセージを受信したことを知ることができ、通知が来ない場合、死活監視メッセージが途中で失われたか、解析対象プログラムがメッセージの受信処理を実行できない状態であると判断することができる。対象プログラムはメッセージ受信後、死活監視に対する応答メッセージを送信する。前述の通知があったうえでこの応答メッセージが無い場合には、その間に停止する要因があると判断することができる。
本発明にかかるCPUでは、コンテキストスイッチを発生させず、同一物理コア内の仮想コア間でCPU命令を数命令動作させるだけでレジスタ情報を読み出せるため、対象プログラムにはほとんど検知できないレベルの影響しか与えない。そのため処理にかかった時間を高精度に計測することができる。このことにより、死活監視メッセージ送信、命令Aによる解析対象プログラムのメッセージ受信検知、応答メッセージ受信などの各ポイントで時刻を記録することにより、どの部分に時間がかかったかを知ることもでき、性能ボトルネックの調査に応用できる。
[効果の説明]
次に、本発明の中央演算装置を用いたサーバなどの情報処理装置で提供できる幾つかの効果を例示する。
第一の効果は、動作中のプログラムに対してほぼ影響を与えずにデバッグ・トレースを可能できることである。これは、例えばデバッガを同一物理コア内の隣接した別の仮想コア上で動作させることでプログラム実行中のコア上でのコンテキストスイッチやデバッガ起動を不要とすること、および、仮想コア間のレジスタ参照や同期のためのコストが小さいことにより、全体のオーバヘッドが非常に小さいためである。
第二の効果は、JTAGやICEといった特別なハードウェアを必要とせずにリアルタイムトレースを実現できることである。これは、隣接仮想コアはその特性上、解析対象の仮想コアと同じ速度・周波数で動作する能力を通常有して、本発明により仮想コア間のレジスタ参照をプログラムから制御できるように成ることで、リアルタイムトレースに必要な機能要件をも同時に満たすためである。
第三の効果は、レジスタ参照機能による高速なデータ転送を使用した並列処理を実現できることである。これは、異なる物理コア間の同期や、メインメモリ経由でのデータ転送を含む低速なプロセス間通信手段を必要とせずに、数個のCPU命令のみで仮想コア間のイベント通知やレジスタ参照によるデータ転送を低コストで実施しているためである。
また、先行技術文献に対する効果としては、特許文献1や2に記載されたCPU装置では、チップ外部からあらかじめ別の領域にコピーしておいたレジスタ情報を読み出せる。しかし、この方法で参照できるレジスタ値は過去の内容であるため、読み出した内容に基づいた次の解析処理を実行としてもこの時点で既にCPUは先の処理に実行を進めており、リアルタイムなデバッグに使用することはできない。
これに対し、本発明では、実行パイプラインを共有する仮想コア間でレジスタ情報を読み出すため、他方の仮想コア(スレッド)をわずかな短時間のみ停止して読み出し中にレジスタを更新しないように同期することが容易であり、コピー領域を必要とせずに低コストでレジスタを参照可能である。結果、リアルタイム性が向上したデバッグ・トレースを実現できる。
また、カーネルを解析対象とする際に有用である。これはサーバOS用仮想コア上で動作するようなOSが起動途中やストール中などの理由で操作が制限されている場合であっても、解析用仮想コア上で独立して動作するOSを介して解析対象とするカーネルの挙動を調査することができる。
また、より細かい粒度でプログラムやカーネルを解析・デバッグできる。
以上説明したように、本発明によれば、仮想コアで使用しているレジスタ情報を低オーバヘッドで取得して、動作中の対象プログラムの処理動作を検証可能とする中央演算装置及び情報処理装置を提供できる。
また、本発明によれば、所定の仮想コアで使用しているレジスタ情報を中央演算装置の内部動作により低オーバヘッドで取得する仮想コア内レジスタ値取得方法、及びその方法を用いたプログラムの検証方法を提供できる。
また、上記本願発明にかかる命令群データや解析用プログラムは、記憶媒体に固定的に記録されて頒布されても良い。当該記録媒体に記録されたプログラムは、有線、無線、又は記録媒体そのものを介して、メモリに読込まれ、制御部等を動作させる。尚、記録媒体を例示すれば、オプティカルディスクや磁気ディスク、半導体メモリ装置、ハードディスクなどが挙げられる。
以上に実施形態を図示して説明したが、そのブロック構成の分離併合、並列要素数の変更、処理手順の入れ替えなどの変更は本発明の趣旨および説明される機能を満たせば自由であり、本発明を限定するものではない。
また、上記の実施形態の一部又は全部は、以下のようにも記載されうる。尚、以下の付記は本発明をなんら限定するものではない。
[付記1]
物理コア上に複数の仮想コアを構築可能である中央演算装置であって、
任意の仮想コアの実行コンテキストに影響を与えることなく、該仮想コアで用いる現在のレジスタ値を同一物理コア上の他の仮想コアから直接参照する参照命令を自仮想コアで実行する或いは他仮想コアに実行させる手段と、
前記レジスタ値を参照する前記参照命令を実行する権限を仮想コアごとに切り替え得る手段と、
を有する
ことを特徴とする中央演算装置。
[付記2]
前記参照命令によって参照され得るレジスタ値の変更を伴い得る自他の仮想コアでの処理を停止することを実施する参照準備命令を自仮想コアで実行する或いは他仮想コアに実行させる手段を更に有することを特徴とする上記付記記載の中央演算装置。
[付記3]
前記参照準備命令によって停止された仮想コアの停止状態を解除する参照準備解除命令を自仮想コアで実行する或いは他仮想コアに実行させる手段を更に有することを特徴とする上記付記記載の中央演算装置。
[付記4]
同一物理コアに属する他の仮想コアから通知を受けた際に、自仮想コアのデバッグレジスタに前記参照命令、参照準備命令、参照準備解除命令の何れかを実行又は実行し合うポイントを設定する設定命令を自仮想コアで実行する或いは他仮想コアに実行させる手段を更に有することを特徴とする上記付記記載の中央演算装置。
[付記5]
1つの物理コア上に仮想コアを複数実装可能であり、前記物理コア内に構築される各レジスタが外部の記憶要素とのデータ転送よりも高速動作する構成を有する中央演算装置であって、
解析対象とする仮想コアの実行コンテキストに影響を与えることなく、該仮想コアで動作させるプログラム実行にかかる現在のレジスタ値を同一物理コア上の他の仮想コアから直接参照する参照命令を自仮想コアで実行する或いは他仮想コアに実行させる手段と、
前記参照命令によって参照され得るレジスタ値の変更を伴い得る自他の仮想コアでの処理を停止することを実施する参照準備命令を自仮想コアで実行する或いは他仮想コアに実行させる手段と
前記参照準備命令によって停止された仮想コアの停止状態を解除する参照準備解除命令を自仮想コアで実行する或いは他仮想コアに実行させる手段と、
同一物理コアに属する他の仮想コアから通知を受けた際に、自仮想コアのデバッグレジスタに前記参照命令、参照準備命令、参照準備解除命令の何れかを実行又は実行し合うポイントを設定する設定命令を自仮想コアで実行する或いは他仮想コアに実行させる手段と、
前記レジスタ値を参照する前記参照命令を実行する権限を仮想コアごとに切り替え得る手段と、
を有する
ことを特徴とする中央演算装置。
[付記6]
前記各命令を実行或いは実行させる仮想コアそれぞれに、該仮想コアが構築される同一物理コアをパーティショニングすることによってハードウェアリソースをそれぞれ割り当て、独立したOSを動作させ得る機能を有することを特徴とする上記付記記載に記載の中央演算装置。
[付記7]
前記各命令の受け渡しを行う仮想コアに跨ったOSを動作させ得る機能を有することを特徴とする上記付記記載に記載の中央演算装置。
[付記8]
上記付記記載の中央演算装置を搭載すると共に、
同一物理コア上の複数の仮想コアの1つ若しくは2以上(最大仮想コア数以下)をプログラム実行主体として使用するプログラムを対象に、前記複数の仮想コアの何れか又は複数を実行主体とみなして動作するOS上から、少なくとも 任意の仮想コアの実行コンテキストに影響を与えることなく、該仮想コアで用いる現在のレジスタ値を同一物理コア上の他の仮想コアから直接参照する参照命令を使用して解析・デバッグ・並列処理の何れか又は組み合わせを実行する
ことを特徴とする情報処理装置。
[付記9]
上記付記記載の中央演算装置における物理コア内の各仮想コアに対して、それぞれの仮想コア上で異なるOSが起動できるようにパーティショニングを可能とした異なるACPIテーブルを生成することを特徴とするBIOSシステム。
[付記10]
1つの物理コア上に複数の仮想コアが構築された環境下で、
任意の仮想コアが使用するレジスタを参照する権限を、同一の物理コアに属する他の仮想コアにも与え得る設定を有効に設定するステップと、
前記任意の仮想コアの実行コンテキストに影響を与えることなく、該仮想コアで用いる現在のレジスタ値を前記同一物理コア上の他の仮想コアから直接参照する参照命令を、前記同一物理コアに属する任意の他の仮想コアから実行して、該任意の他の仮想コアが 参照を受ける前記任意の仮想コアが使用した現レジスタ値を識別するステップと、
を含むことを特徴とする中央演算装置の内部動作による仮想コア内レジスタ値取得方法。
[付記11]
前記参照命令によって参照され得るレジスタ値の変更を伴い得る自他の仮想コアでの処理を停止することを実施する参照準備命令を実行するステップ又は他仮想コアに実行させるステップを前記参照命令に先だって実行することを特徴とする上記付記記載の仮想コア内レジスタ値取得方法。
[付記12]
前記参照準備命令によって停止された仮想コアの停止状態を解除する参照準備解除命令を自仮想コアで実行するステップ又は他仮想コアに実行させるステップを前記参照命令の後に実行することを特徴とする上記付記記載の仮想コア内レジスタ値取得方法。
[付記13]
同一物理コアに属する他の仮想コアから通知を受けた際に、自仮想コアのデバッグレジスタに前記参照命令、参照準備命令、参照準備解除命令の何れかを実行又は実行し合うポイントを設定する設定命令を自仮想コアで実行するステップ又は他仮想コアに実行させるステップを前記参照命令を実行する条件設定に用いることを特徴とする上記付記記載の仮想コア内レジスタ値取得方法。
[付記14]
1つの物理コア上に複数の仮想コアを構築され、且つ、任意の仮想コアが使用するレジスタを参照する権限を 同一の物理コアに属する他の仮想コアにも与え得る設定を有効に設定し、該環境下で、
前記同一物理コア上の複数の仮想コアの1つ若しくは2以上(最大仮想コア数以下)をプログラム実行主体として使用するプログラムを対象に、前記複数の仮想コアの何れか又は複数を実行主体とみなして動作するOS上から、少なくとも 任意の仮想コアの実行コンテキストに影響を与えることなく、該仮想コアで用いる現在のレジスタ値を同一物理コア上の他の仮想コアから直接参照する参照命令を実行し、
前記参照命令を用いて得た仮想コアのレジスタ値を用いて解析・デバッグ・並列処理の何れか又は組み合わせを実行する
ことを特徴とするプログラムの検証方法。
[付記15]
前記参照命令によって参照され得るレジスタ値の変更を伴い得る自他の仮想コアでの処理を停止することを実施する参照準備命令を自仮想コアで実行又は他仮想コアに実行させることを前記参照命令に先だって実行することを特徴とする上記付記記載のプログラムの検証方法。
[付記16]
前記参照準備命令によって停止された仮想コアの停止状態を解除する参照準備解除命令を自仮想コアで実行又は他仮想コアに実行させることを前記参照命令の後に実行することを特徴とする上記付記記載のプログラムの検証方法。
[付記17]
同一物理コアに属する他の仮想コアから通知を受けた際に、自仮想コアのデバッグレジスタに前記参照命令、参照準備命令、参照準備解除命令の何れかを実行又は実行し合うポイントを設定する設定命令を自仮想コアで実行又は他仮想コアに実行させることを前記参照命令を実行する条件設定に用いることを特徴とする上記付記記載のプログラムの検証方法。
本発明は、例えば、カーネル、アプリケーションのデバッグ、性能ボトルネック調査、サーバプログラムの診断、死活監視、レジスタ参照を用いた高速並列検証処理などのように、様々なプログラムの検証に使用できる。
1 物理コア
2 仮想コア
3 仮想コア用レジスタ
4 命令実行権限設定部
10 CPUコア
11、12 仮想コア
21、22 データレジスタ
31、32 デバッグレジスタ
41、42 解析権限切替レジスタ
51、52 I/Oコントローラ
61 メモリ
62 メモリコントローラ
70 BIOS
71、72 ACPIテーブル
81、82 NIC

Claims (10)

  1. 物理コア上に複数の仮想コアを構築可能である中央演算装置であって、
    任意の仮想コアの実行コンテキストに影響を与えることなく、該仮想コアで用いる現在のレジスタ値を同一物理コア上の他の仮想コアから直接参照する参照命令を、自仮想コアで実行する或いは他仮想コアに実行させる手段と、
    前記レジスタ値を参照する前記参照命令を実行する権限を仮想コアごとに与える手段と、
    を有する
    ことを特徴とする中央演算装置。
  2. 前記参照命令によって参照され得るレジスタ値の変更を伴い得る自他の仮想コアでの処理を停止することを実施する参照準備命令を自仮想コアで実行する或いは他仮想コアに実行させる手段を更に有することを特徴とする請求項1記載の中央演算装置。
  3. 前記参照準備命令によって停止された仮想コアの停止状態を解除する参照準備解除命令を自仮想コアで実行する或いは他仮想コアに実行させる手段を更に有することを特徴とする請求項2記載の中央演算装置。
  4. 同一物理コアに属する他の仮想コアから通知を受けた際に、自仮想コアのデバッグレジスタに前記参照命令、参照準備命令、参照準備解除命令の何れかを実行又は実行し合うポイントを設定する設定命令を自仮想コアで実行する或いは他仮想コアに実行させる手段を更に有することを特徴とする請求項1ないし3の何れか一項に記載の中央演算装置。
  5. 1つの物理コア上に仮想コアを複数実装可能であり、前記物理コア内に構築される各レジスタが外部の記憶要素とのデータ転送よりも高速動作する構成を有する中央演算装置であって、
    解析対象とする仮想コアの実行コンテキストに影響を与えることなく、該仮想コアで動作させるプログラム実行にかかる現在のレジスタ値を同一物理コア上の他の仮想コアから直接参照する参照命令を自仮想コアで実行する或いは他仮想コアに実行させる手段と、
    前記参照命令によって参照され得るレジスタ値の変更を伴い得る自他の仮想コアでの処理を停止することを実施する参照準備命令を自仮想コアで実行する或いは他仮想コアに実行させる手段と
    前記参照準備命令によって停止された仮想コアの停止状態を解除する参照準備解除命令を自仮想コアで実行する或いは他仮想コアに実行させる手段と、
    同一物理コアに属する他の仮想コアから通知を受けた際に、自仮想コアのデバッグレジスタに前記参照命令、参照準備命令、参照準備解除命令の何れかを実行又は実行し合うポイントを設定する設定命令を自仮想コアで実行する或いは他仮想コアに実行させる手段と、
    前記レジスタ値を参照する前記参照命令を実行する権限を仮想コアごとに与える手段と、
    を有する
    ことを特徴とする中央演算装置。
  6. 前記各命令を実行或いは実行させる仮想コアそれぞれに、該仮想コアが構築される同一物理コアをパーティショニングすることによってハードウェアリソースをそれぞれ割り当て、独立したOSを動作させ得る機能を有することを特徴とする請求項1ないし5の何れか一項に記載の中央演算装置。
  7. 請求項1ないし6の何れか一項に記載の中央演算装置を搭載すると共に、
    同一物理コア上の複数の仮想コアの1つ若しくは2以上(最大仮想コア数以下)をプログラム実行主体として使用するプログラムを対象に、前記複数の仮想コアの何れか又は複数を実行主体とみなして動作するOS上から、少なくとも 任意の仮想コアの実行コンテキストに影響を与えることなく、該仮想コアで用いる現在のレジスタ値を同一物理コア上の他の仮想コアから直接参照する参照命令を使用して解析・デバッグ・並列処理の何れか又は組み合わせを実行する
    ことを特徴とする情報処理装置。
  8. 請求項1ないし6の何れか一項に記載の中央演算装置における物理コア内の各仮想コアに対して、それぞれの仮想コア上で異なるOSが起動できるようにパーティショニングを可能とした異なるACPIテーブルを生成することを特徴とするBIOSシステム。
  9. 1つの物理コア上に複数の仮想コアが構築された環境下で、
    任意の仮想コアが使用するレジスタを参照する権限を、同一の物理コアに属する他の仮想コアにも与え得る設定を有効に設定するステップと、
    前記任意の仮想コアの実行コンテキストに影響を与えることなく、該仮想コアで用いる現在のレジスタ値を前記同一物理コア上の他の仮想コアから直接参照する参照命令を、前記同一物理コアに属する任意の他の仮想コアから実行して、該任意の他の仮想コアが 参照を受ける前記任意の仮想コアが使用した現レジスタ値を識別するステップと、
    を含むことを特徴とする中央演算装置の内部動作による仮想コア内レジスタ値取得方法。
  10. 1つの物理コア上に複数の仮想コアを構築され、且つ、任意の仮想コアが使用するレジスタを参照する権限を 同一の物理コアに属する他の仮想コアにも与え得る設定を有効に設定し、該環境下で、
    前記同一物理コア上の複数の仮想コアの1つ若しくは2以上(最大仮想コア数以下)をプログラム実行主体として使用するプログラムを対象に、前記複数の仮想コアの何れか又は複数を実行主体とみなして動作するOS上から、少なくとも 任意の仮想コアの実行コンテキストに影響を与えることなく、該仮想コアで用いる現在のレジスタ値を同一物理コア上の他の仮想コアから直接参照する参照命令を実行し、
    前記参照命令を用いて得た仮想コアのレジスタ値を用いて解析・デバッグ・並列処理の何れか又は組み合わせを実行する
    ことを特徴とするプログラムの検証方法。
JP2013075895A 2013-04-01 2013-04-01 中央演算装置、情報処理装置、および仮想コア内レジスタ値取得方法 Active JP6086230B2 (ja)

Priority Applications (3)

Application Number Priority Date Filing Date Title
JP2013075895A JP6086230B2 (ja) 2013-04-01 2013-04-01 中央演算装置、情報処理装置、および仮想コア内レジスタ値取得方法
EP14161744.9A EP2787444B1 (en) 2013-04-01 2014-03-26 Central processing unit, information processing apparatus, and intra-virtual-core register value acquisition method
US14/229,076 US9690603B2 (en) 2013-04-01 2014-03-28 Central processing unit, information processing apparatus, and intra-virtual-core register value acquisition method

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP2013075895A JP6086230B2 (ja) 2013-04-01 2013-04-01 中央演算装置、情報処理装置、および仮想コア内レジスタ値取得方法

Publications (3)

Publication Number Publication Date
JP2014203106A JP2014203106A (ja) 2014-10-27
JP2014203106A5 JP2014203106A5 (ja) 2016-03-31
JP6086230B2 true JP6086230B2 (ja) 2017-03-01

Family

ID=50486751

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2013075895A Active JP6086230B2 (ja) 2013-04-01 2013-04-01 中央演算装置、情報処理装置、および仮想コア内レジスタ値取得方法

Country Status (3)

Country Link
US (1) US9690603B2 (ja)
EP (1) EP2787444B1 (ja)
JP (1) JP6086230B2 (ja)

Families Citing this family (26)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US9619214B2 (en) 2014-08-13 2017-04-11 International Business Machines Corporation Compiler optimizations for vector instructions
US10169014B2 (en) 2014-12-19 2019-01-01 International Business Machines Corporation Compiler method for generating instructions for vector operations in a multi-endian instruction set
US9588746B2 (en) 2014-12-19 2017-03-07 International Business Machines Corporation Compiler method for generating instructions for vector operations on a multi-endian processor
CN104572468A (zh) * 2015-01-20 2015-04-29 浪潮电子信息产业股份有限公司 一种基于NeoKylin的快速认证测试方法
US10169044B2 (en) 2015-06-26 2019-01-01 Microsoft Technology Licensing, Llc Processing an encoding format field to interpret header information regarding a group of instructions
US11755484B2 (en) 2015-06-26 2023-09-12 Microsoft Technology Licensing, Llc Instruction block allocation
US10346168B2 (en) 2015-06-26 2019-07-09 Microsoft Technology Licensing, Llc Decoupled processor instruction window and operand buffer
US9946548B2 (en) 2015-06-26 2018-04-17 Microsoft Technology Licensing, Llc Age-based management of instruction blocks in a processor instruction window
US9952867B2 (en) 2015-06-26 2018-04-24 Microsoft Technology Licensing, Llc Mapping instruction blocks based on block size
US10409599B2 (en) 2015-06-26 2019-09-10 Microsoft Technology Licensing, Llc Decoding information about a group of instructions including a size of the group of instructions
US10175988B2 (en) 2015-06-26 2019-01-08 Microsoft Technology Licensing, Llc Explicit instruction scheduler state information for a processor
US10409606B2 (en) 2015-06-26 2019-09-10 Microsoft Technology Licensing, Llc Verifying branch targets
US10191747B2 (en) 2015-06-26 2019-01-29 Microsoft Technology Licensing, Llc Locking operand values for groups of instructions executed atomically
US10802852B1 (en) * 2015-07-07 2020-10-13 Cadence Design Systems, Inc. Method for interactive embedded software debugging through the control of simulation tracing components
US10089212B2 (en) 2015-07-20 2018-10-02 Toshiba Memory Corporation Memory system, information processing system, and host device outputting debugging information through a host interface
US9880821B2 (en) 2015-08-17 2018-01-30 International Business Machines Corporation Compiler optimizations for vector operations that are reformatting-resistant
US9594668B1 (en) * 2015-09-04 2017-03-14 International Business Machines Corporation Debugger display of vector register contents after compiler optimizations for vector instructions
US11126433B2 (en) 2015-09-19 2021-09-21 Microsoft Technology Licensing, Llc Block-based processor core composition register
US11016770B2 (en) 2015-09-19 2021-05-25 Microsoft Technology Licensing, Llc Distinct system registers for logical processors
US10768936B2 (en) 2015-09-19 2020-09-08 Microsoft Technology Licensing, Llc Block-based processor including topology and control registers to indicate resource sharing and size of logical processor
CN105868003B (zh) * 2016-03-25 2019-08-13 浙江大学 一种基于tms320c6747的任务上下文切换优化方法
US11531552B2 (en) 2017-02-06 2022-12-20 Microsoft Technology Licensing, Llc Executing multiple programs simultaneously on a processor core
US11087428B2 (en) * 2018-03-23 2021-08-10 Canon Kabushiki Kaisha Image processing apparatus, data processing apparatus, and image processing method
CN110781430B (zh) * 2019-09-27 2022-03-25 同济大学 互联网新型虚拟数据中心系统及其构造方法
US11928045B1 (en) * 2021-04-21 2024-03-12 Cadence Design Systems, Inc. System and method for non-intrusive debugging at an embedded software breakpoint
CN113254286B (zh) * 2021-05-28 2021-11-19 苏州浪潮智能科技有限公司 一种服务器的日志输出方法、系统及相关装置

Family Cites Families (13)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
EP0389001B1 (en) 1983-04-25 1997-06-04 Cray Research, Inc. Computer vector multiprocessing control
JP3206960B2 (ja) 1991-05-17 2001-09-10 株式会社リコー 拡張中央演算処理装置
JP2868114B2 (ja) 1994-06-07 1999-03-10 三菱電機株式会社 監視診断機能付計算機
JP2003085124A (ja) 2001-09-12 2003-03-20 Seiko Epson Corp 外部からの読み出し信号に応答して内部レジスタのデータを読み出す回路を有する集積回路装置及びそれを有するシステム
JP3867804B2 (ja) 2005-03-22 2007-01-17 セイコーエプソン株式会社 集積回路装置
US8370806B2 (en) * 2006-11-15 2013-02-05 Qualcomm Incorporated Non-intrusive, thread-selective, debugging method and system for a multi-thread digital signal processor
JP2008310693A (ja) 2007-06-15 2008-12-25 Panasonic Corp 情報処理装置
JP4926009B2 (ja) 2007-11-21 2012-05-09 三菱電機株式会社 情報処理装置の障害処理システム
JP5491102B2 (ja) 2009-08-27 2014-05-14 ルネサスエレクトロニクス株式会社 データプロセッサ
GB2483906C (en) * 2010-09-24 2019-10-09 Advanced Risc Mach Ltd Selection of debug instruction set for debugging of a data processing apparatus
CN103547993B (zh) * 2011-03-25 2018-06-26 英特尔公司 通过使用由可分割引擎实例化的虚拟核来执行指令序列代码块
EP2689326B1 (en) * 2011-03-25 2022-11-16 Intel Corporation Memory fragments for supporting code block execution by using virtual cores instantiated by partitionable engines
CN108376097B (zh) * 2011-03-25 2022-04-15 英特尔公司 用于通过使用由可分割引擎实例化的虚拟核来支持代码块执行的寄存器文件段

Also Published As

Publication number Publication date
EP2787444A2 (en) 2014-10-08
US20140298336A1 (en) 2014-10-02
EP2787444B1 (en) 2022-08-17
JP2014203106A (ja) 2014-10-27
EP2787444A3 (en) 2015-09-02
US9690603B2 (en) 2017-06-27

Similar Documents

Publication Publication Date Title
JP6086230B2 (ja) 中央演算装置、情報処理装置、および仮想コア内レジスタ値取得方法
US7600155B1 (en) Apparatus and method for monitoring and debugging a graphics processing unit
US8903703B2 (en) Dynamically adjusting speed versus accuracy of computer platform simulation
US7711990B1 (en) Apparatus and method for debugging a graphics processing unit in response to a debug instruction
JP4222370B2 (ja) デバッグ支援装置及びデバッグ処理方法をコンピュータに実行させるためのプログラム
US7716031B2 (en) Interface converter for unified view of multiple computer system simulations
US8612937B2 (en) Synchronously debugging a software program using a plurality of virtual machines
US20080256339A1 (en) Techniques for Tracing Processes in a Multi-Threaded Processor
KR20070109432A (ko) 커널 인지 디버깅 장치 및 방법
US20070226740A1 (en) Method and apparatus for global breakpoint for parallel debugging on multiprocessor systems
KR102025078B1 (ko) 단일 스텝 실행을 이용한 코드 진단
US20140129784A1 (en) Methods and systems for polling memory outside a processor thread
US20110185153A1 (en) Simultaneous execution resumption of multiple processor cores after core state information dump to facilitate debugging via multi-core processor simulator using the state information
JP2009080563A (ja) 仮想マシンモニタをモニタするコンピュータとその方法、および仮想マシンモニタモニタプログラム
US20160188456A1 (en) Nvram-aware data processing system
US9069891B2 (en) Hardware enabled performance counters with support for operating system context switching
CN115576734B (zh) 一种多核异构日志存储方法和系统
CN111506395B (zh) 一种混合仿真的全数字虚拟运行环境的实现方法及装置
WO2012137239A1 (ja) 計算機システム
Tröger et al. Software-implemented fault injection at firmware level
JP6104671B2 (ja) マルチプロセッサシステム、装置、及び方法
Benbachir et al. Hypertracing: Tracing through virtualization layers
Pouget et al. User level DB: a debugging API for user-level thread libraries
WO2023169289A1 (zh) 一种进程的执行状态切换方法及装置
WO2006093762A1 (en) Computer platform simulation

Legal Events

Date Code Title Description
RD04 Notification of resignation of power of attorney

Free format text: JAPANESE INTERMEDIATE CODE: A7424

Effective date: 20151217

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20160216

A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20160308

A977 Report on retrieval

Free format text: JAPANESE INTERMEDIATE CODE: A971007

Effective date: 20161219

TRDD Decision of grant or rejection written
A01 Written decision to grant a patent or to grant a registration (utility model)

Free format text: JAPANESE INTERMEDIATE CODE: A01

Effective date: 20170105

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20170118

R150 Certificate of patent or registration of utility model

Ref document number: 6086230

Country of ref document: JP

Free format text: JAPANESE INTERMEDIATE CODE: R150

S111 Request for change of ownership or part of ownership

Free format text: JAPANESE INTERMEDIATE CODE: R313113

R350 Written notification of registration of transfer

Free format text: JAPANESE INTERMEDIATE CODE: R350

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

S111 Request for change of ownership or part of ownership

Free format text: JAPANESE INTERMEDIATE CODE: R313113

R350 Written notification of registration of transfer

Free format text: JAPANESE INTERMEDIATE CODE: R350

S111 Request for change of ownership or part of ownership

Free format text: JAPANESE INTERMEDIATE CODE: R313113

R350 Written notification of registration of transfer

Free format text: JAPANESE INTERMEDIATE CODE: R350