(57)【要約】  情報処理装置は、パケットを受信するとパケット処理依頼を生成するパケット前処理部と、パケット処理依頼に応答してパケットを処理するＣＰＵコアと、ＣＰＵコアに設けられ、パケットの処理に伴い生起する所定のイベントに応答して、所定のイベントを特定する情報を含むメッセージを生成するハードウェアと、ハードウェアが生成するメッセージをタイマのカウント値と共に記録するメッセージ記録部とを含んでよい。
2014054101.tif 000002
【特許請求の範囲】
【請求項１】
パケットを受信するとパケット処理依頼を生成するパケット前処理部と、
前記パケット処理依頼に応答して前記パケットを処理するＣＰＵコアと、
前記ＣＰＵコアに設けられ、前記パケットの処理に伴い生起する所定のイベントに応答して、前記所定のイベントを特定する情報を含むメッセージを生成するハードウェアと、
前記ハードウェアが生成するメッセージをタイマのカウント値と共に記録するメッセージ記録部と
を含むことを特徴とする情報処理装置。
【請求項２】
前記所定のイベントは、前記ＣＰＵコアによるサブルーチンのコール命令の実行及び前記サブルーチンのリターン命令の実行を含むことを特徴とする請求項１又は２記載の情報処理装置。
【請求項３】
前記パケットの処理の一部を前記ＣＰＵコアの代わりに実行するために前記ＣＰＵコアからアクセスされる専用ハードウェアを更に含み、前記所定のイベントは、前記ＣＰＵコアによる前記専用ハードウェアへのアクセスを含むことを特徴とする請求項１又は２記載の情報処理装置。
【請求項４】
前記メッセージは、前記ＣＰＵコアのプログラムカウンタの値を示すデータを含むことを特徴とする請求項１乃至３何れか一項記載の情報処理装置。
【請求項５】
前記メッセージは第１の値及び第２の値の何れか一方の値を示すフィールドを含み、前記メッセージ記録部は、前記メッセージの前記フィールドが前記第１の値を示す場合には前記タイマの現在カウント値である第１のカウント値を記録し、前記メッセージの前記フィールドが前記第２の値を示す場合には前記記録された第１のカウント値と前記タイマの現在カウント値である第２のカウント値との差分を記録することを特徴とする請求項１乃至４何れか一項記載の情報処理装置。
【請求項６】
前記ＣＰＵコアは、
プログラムの命令をデコードする命令デコーダと、
前記命令デコーダによるデコード結果に基づいて前記命令を実行する命令実行ユニットと、
を更に含み、前記ハードウェアは、命令実行のための前記命令実行ユニットとは別に設けられたメッセージ生成のための専用の回路であることを特徴とする請求項１乃至５何れか一項記載の情報処理装置。
【請求項７】
パケットを受信するとパケット前処理部によりパケット処理依頼を生成し、
前記パケット処理依頼に応答してＣＰＵコアにより前記パケットを処理し、
前記ＣＰＵコアに設けられるハードウェアにより、前記パケットの処理に伴い生起する所定のイベントに応答して、前記所定のイベントを特定する情報を含むメッセージを生成し、
前記ハードウェアが生成するメッセージをメッセージ記録部によりタイマのカウント値と共に記録する
各段階を含むことを特徴とする性能解析データの収集方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本願開示は、情報処理装置及び性能解析データの収集方法に関する。
【背景技術】
【０００２】
ネットワークでは、高速なパケット処理を行うための情報処理装置として、パケット処理専用プロセッサが用いられる。パケット処理専用プロセッサは、パケット処理を効率化するための専用命令やハードウェアアクセラレータ等を備え、パケットヘッダの書き換え等の処理を実行する。【０００３】
近年は、コスト削減を目的として、汎用のプロセッサコアを複数搭載したパケット処理専用プロセッサが用いられるようになっている。汎用のプロセッサコアを用いるので、Ｌｉｎｕｘ（登録商標）等のオペレーティングシステムサービスを利用することができ、またＣ言語等の高級言語によるソフト開発が可能となる。また開発環境をＬｉｎｕｘ（登録商標）とした場合、ｏＰｒｏｆｉｌｅやＧＤＢ等のオープンソフトウェアを利用した性能解析やデバッグが可能となり、設計効率を大幅に向上させることができる。【０００４】
しかし、ｏＰｒｏｆｉｌｅ等のサンプリング型プロファイラを性能解析ツールとして使用した場合、性能分析を高精度で行うことは困難である。サンプリング型プロファイラは、オペレーティングシステムからプログラムに対して一定間隔で割込みをかけてプログラムカウンタを調べ、調べたプログラムカウンタの値を記録していく。プログラム終了後、記録されているプログラムカウンタの値から、プログラム全体の実行に要した時間と、プログラム内で呼ばれている各サブルーチン（関数）の実行に要した時間とを調べることにより、何れのサブルーチンに時間を費やしているかを解析できる。このようなサンプリング型プロファイラでは、プログラムカウンタをサンプリングする間隔が短くなればなるほど、性能解析用のデータを計測する精度は向上する。しかしながら、オペレーティングシステムの割り込みを用いる場合、サンプリング間隔はＣＰＵサイクルと比較して極めて大きな値となりため、精度を上げることが困難である。このような問題点はあるが、サンプリング型プロファイラの場合、プログラムの変更は不要であり、通常動作時と性能解析時とでほぼ同じ速度で対象プログラムを実行させることができる。【０００５】
またサンプリング型プロファイラの場合、サンプリング間隔はプログラムの起動イベント（パケット到着イベント等）に対して非同期であり、設計者が本来知りたい箇所のみをサンプリングすることができない。例えばパケット処理の性能解析をしたい場合であっても、サンプリング間隔がパケット到着間隔に対して非同期であるため、パケット到着前のポーリング処理等の本来の処理に関係の無いデータも性能解析データに含まれてしまう。またサンプリング型プロファイラの場合、プロセッサコア以外のハードウェア処理の時間、即ちメモリアクセスに要する時間や専用のハードウェアアクセラレータの処理時間等を知ることは困難である。【０００６】
従って、パケット処理の性能解析をする場合や、メモリアクセス時間や専用のハードウェアアクセラレータ処理時間まで含めた性能解析をする場合、性能カウンタ等の値を読み出すためのコードをプログラム中に埋め込むことが行われる。しかしこの方法では、元のソースコードに性能解析データ収集のためのコードを埋め込んでプログラムを再コンパイルすることが必要になる、という問題点がある。また性能評価対象のプログラムが、埋め込んだコードにより本来のプログラムとは異なった動作をすることになる、という問題がある。プログラム中に上記コードを挿入し、プログラム実行中に何回もカウンタにアクセスすると、合計で数百サイクル程度のオーバーヘッドとなってしまい、正確な性能解析を行うことができなくなってしまう。
【先行技術文献】
【特許文献】
【０００７】
【特許文献１】特表２００４−５１９７６９号公報
【特許文献２】特開平１０−２６０８６９号公報
【発明の概要】
【発明が解決しようとする課題】
【０００８】
以上を鑑みると、プログラムを変更することなくパケット処理の性能解析のためのデータを取得することが可能な情報処理装置が望まれる。
【課題を解決するための手段】
【０００９】
情報処理装置は、パケットを受信するとパケット処理依頼を生成するパケット前処理部と、前記パケット処理依頼に応答して前記パケットを処理するＣＰＵコアと、前記ＣＰＵコアに設けられ、前記パケットの処理に伴い生起する所定のイベントに応答して、前記所定のイベントを特定する情報を含むメッセージを生成するハードウェアと、前記ハードウェアが生成するメッセージをタイマのカウント値と共に記録するメッセージ記録部とを含んでよい。
【発明の効果】
【００１０】
本願開示の少なくとも１つの実施例によれば、プログラムを変更することなくパケット処理の性能解析のためのデータを取得することが可能な情報処理装置が提供される。
【図面の簡単な説明】
【００１１】
【図１】情報処理装置としてのパケット処理専用プロセッサの構成の一例を示す図である。
【図２】ＣＰＵコアの構成の一例を示す図である。
【図３】図１に示すパケット処理専用プロセッサにより取得可能なデータについて説明するための図である。
【図４】各メッセージ生成部が生成するメッセージの構成の一例を示す図である。
【図５】異なるイベント生起に応答して生成される異なるメッセージの内容を示す図である。
【図６】プロファイルデータ取得部の構成の一例を示す図である。
【図７】性能解析データを効率的に圧縮した形式で蓄積するために用いるメッセージの構成の一例を示す図である。
【図８】性能解析データを効率的に圧縮した形式で蓄積する方式を説明するための図である。
【図９】性能解析データを効率的に圧縮した形式で蓄積する場合におけるプロファイルデータ取得部の構成の一例を示す図である。
【発明を実施するための形態】
【００１２】
以下に、本発明の実施例を添付の図面を用いて詳細に説明する。なお各図において、他の図と同一又は対応する構成要素は同一又は対応する番号で参照し、その説明は適宜省略する。
【００１３】
図１は、情報処理装置としてのパケット処理専用プロセッサの構成の一例を示す図である。図１のパケット処理専用プロセッサ１０は、パケット前処理部１１、ＣＰＵコア１２−１乃至１２−ｎ、ハードウェアアクセラレータ１３、メモリコントローラ１４、パケット出力部１５、共有キャッシュ１６、及びプロファイルデータ取得部１７を含む。パケット処理専用プロセッサ１０は、更に、ジョブキュー１８を含む。パケット前処理部１１は、パケット受信処理部２１、パケットディスクリプタ生成部２２、及びメッセージ生成部２３を含む。ＣＰＵコア１２−１乃至１２−ｎはそれぞれ、メッセージ生成部２５−１乃至２５−ｎを含む。パケット出力部１５は、メッセージ生成部２７を含む。パケット処理専用プロセッサ１０は外部メモリ５に接続されている。
【００１４】
パケット前処理部１１は、入力パケットを受信すると、ＣＰＵコア１２−１乃至１２−ｎに対するパケット処理依頼を生成する。具体的には、まずパケット前処理部１１のパケット受信処理部２１が、入力パケットを受信すると、入力パケットに対してＭＡＣレイヤ終端処理、パケットヘッダの切り出し処理、フロー振り分け（負荷分散）処理等を実行する。入力パケットから切り出されたパケットヘッダは、各コア共通の共有キャッシュ１６に格納されてよい。また入力パケットのペイロードは、メモリコントローラ１４を介して外部メモリ５に格納されてよい。パケット受信処理部２１による受信処理の後、パケット前処理部１１のパケットディスクリプタ生成部２２が、ＣＰＵコア１２−１乃至１２−ｎで処理を効率化するための情報やパケットヘッダの格納位置を示すポインタ情報等を含むパケット記述子を生成する。パケットディスクリプタ生成部２２は、各コア毎に設けられたジョブキュー１８にパケット記述子を格納することにより、ＣＰＵコア１２−１乃至１２−ｎに対するパケット処理依頼を行う。
【００１５】
パケット前処理部１１のメッセージ生成部２３は、パケット毎に、パケット前処理部１１を特定するＩＤ及びパケットヘッダの格納位置を示すポインタ情報を含むメッセージを生成し、生成したメッセージをプロファイルデータ取得部１７に供給する。プロファイルデータ取得部１７は、後述するように、受け取ったメッセージをタイマのカウント値と共に内蔵メモリに記録する。これにより、ある入力パケットがパケット処理専用プロセッサ１０に到着した時刻が分かる。
【００１６】
ＣＰＵコア１２−１乃至１２−ｎの各々は、パケット処理依頼に応答してパケットを処理する。具体的には、ＣＰＵコア１２−１乃至１２−ｎは、自コアに割りつけられたジョブキュー１８を監視しており、キューにデータがあれば、パケット処理を開始する。このパケット処理により、ＣＰＵコア１２−１乃至１２−ｎは、次に当該パケットを送る宛先であるＩＰアドレスを書き換えたり、ＩＰパケットの生存期間を示すＴＴＬ（Time To Live）の値をルータ通過毎に１つ減らしたりする処理等を行う。
【００１７】
ＣＰＵコア１２−１乃至１２−ｎの各々は、ハードウェアとしての電子回路であるメッセージ生成部２５−１乃至２５−ｎを含む。メッセージ生成部２５−１乃至２５−ｎは、対応ＣＰＵコア１２−１乃至１２−ｎにおいてパケットの処理に伴い生起する所定のイベントに応答して、当該所定のイベントを特定する情報を含むメッセージを生成する。このメッセージは、対応ＣＰＵコアを特定するＩＤ及びパケットヘッダの格納位置を示すポインタ情報を更に含んでよい。またこのメッセージに含まれる所定のイベントを特定する情報としては、ＣＰＵコアのプログラムカウンタの値を示すデータであってよい。即ち、何れの命令を実行したのかを特定可能なデータがメッセージに含まれていてよい。
【００１８】
上記所定のイベントは、ＣＰＵコアによるサブルーチンのコール命令の実行及びサブルーチンのリターン命令の実行を含んでよい。即ち例えばＣＰＵコア１２−１がサブルーチンをコールした場合には、ＣＰＵコア１２−１のメッセージ生成部２５−１が、ＣＰＵコア１２−１のＩＤ等を含むメッセージを生成してよい。また上記所定のイベントは、ＣＰＵコアにおけるパケット処理依頼に応答したパケット処理の開始イベントを含んでよい。これらのイベントにより生成されたメッセージは、プロファイルデータ取得部１７に供給される。プロファイルデータ取得部１７は、後述するように、受け取ったメッセージをタイマのカウント値と共に内蔵メモリに記録する。
【００１９】
ハードウェアアクセラレータ１３は、前記パケットの処理の一部を前記ＣＰＵコアの代わりに高速に実行するための専用ハードウェアであり、前記ＣＰＵコアからのアクセスに応答して処理を開始する。即ちハードウェアアクセラレータ１３は、ＣＰＵコアからの処理実行要求に応答して、処理を実行する。なお前述のＣＰＵコア１２−１乃至１２−ｎのメッセージ生成部２５−１乃至２５−ｎがメッセージを生成する契機となる所定のイベントには、ＣＰＵコアによるハードウェアアクセラレータ１３等への専用ハードウェアへのアクセスも含まれる。即ち、例えばＣＰＵコア１２−１がハードウェアアクセラレータ１３へアクセスした場合（即ち処理実行要求をした場合）には、ＣＰＵコア１２−１のメッセージ生成部２５−１が、当該所定のイベントを特定する情報を含むメッセージを生成する。このメッセージは、対応ＣＰＵコアを特定するＩＤ、ハードウェアアクセラレータ１３等の個々の専用ハードウェアを特定するＩＤ、及びパケットヘッダの格納位置を示すポインタ情報を更に含んでよい。またこのメッセージに含まれる所定のイベントを特定する情報としては、ＣＰＵコアのプログラムカウンタの値を示すデータであってよい。
【００２０】
なお、プログラム内からのハードウェアアクセラレータへのアクセスには、メーカ独自のＡＰＩ（Application Program Interface）が通常提供される。ＣＰＵコア１２−１乃至１２−ｎでは、ＡＰＩの処理開始時点とハードウェアアクセラレータの処理待ち完了時点との両方において、メッセージ生成部２５−１乃至２５−ｎがメッセージを生成するようにしてよい。
【００２１】
メモリコントローラ１４は、外部メモリ５へのアクセスを管理する。ＣＰＵコア１２−１乃至１２−ｎからメモリコントローラ１４へのリードアクセスが発生すると、対応するメッセージ生成部２５−１乃至２５−ｎがメッセージを生成してよい。またＣＰＵコア１２−１乃至１２−ｎにメモリコントローラ１４からリードデータが返送されたときも、対応するメッセージ生成部２５−１乃至２５−ｎがメッセージを生成してよい。このメッセージには、当該所定のイベント（メモリリードアクセス又はリードデータ返送）を特定する情報、対応ＣＰＵコアを特定するＩＤ、及びパケットヘッダの格納位置を示すポインタ情報が含まれてよい。またこのメッセージに含まれる所定のイベントを特定する情報としては、ＣＰＵコアのプログラムカウンタの値を示すデータであってよい。またこのメッセージには、アクセス対象であるメモリの物理アドレスが含まれてよい。
【００２２】
パケット出力部１５は、ＣＰＵコア１２−１乃至１２−ｎによるパケット処理が完了すると、共有キャッシュ１６からのパケットヘッダと外部メモリ５からのペイロードとを組み合わせてパケットを構成する。当該パケットは、パケット出力部１５により、パケット処理専用プロセッサ１０の外部に出力される。メッセージ生成部２７は、パケット出力時に、メッセージ生成部２７を特定するＩＤ及びパケットヘッダポインタを格納したメッセージを生成し、プロファイルデータ取得部１７に送付する。プロファイルデータ取得部１７は、受け取ったメッセージをタイマのカウント値と共に内蔵メモリに記録する。プロファイルデータ取得部１７が記録したデータから、パケットヘッダポインタ値をキーとして特定のパケット処理にかかったログのみを抽出することが可能である。こうして抽出されさたログに基づいて、あるパケットの入力から出力までの処理時間（処理サイクル数）を求めることができる。
【００２３】
図２は、ＣＰＵコア１２−１の構成の一例を示す図である。他のＣＰＵコア１２−２乃至１２−ｎについてもＣＰＵコア１２−１と同様の構成であってよい。図２のＣＰＵコア１２−１は、命令実行ユニット３１、命令デコーダ３２、及びメッセージ生成部２５−１を含む。命令デコーダ３２は、プログラムカウンタが示すアドレスからフェッチしたプログラムの命令をデコードし、デコード結果を示す制御信号を命令実行ユニット３１に供給する。命令実行ユニット３１は、命令デコーダ３２によるデコード結果を示す制御信号に基づいて、上記プログラムの命令を実行する。メッセージ生成部２５−１は、命令実行のための前記命令実行ユニット３１とは別に設けられたメッセージ生成のための専用の回路である。即ち、メッセージ生成部２５−１は、プログラム中の演算式や制御文等の通常の命令を実行する回路ではなく、またプログラム中に挿入された性能カウンタ等の値を読み出すための命令を実行する回路でもない。メッセージ生成部２５−１は、例えば前記の所定のイベントの生起（サブルーチンのコール命令の実行やリターン命令の実行）に応答してメッセージを生成するためのハードウェアである。例えば、命令デコーダ３２がサブルーチンのコール命令やリターン命令をデコードすると、命令デコーダ３２がメッセージ生成部２５−１に所定のイベントが生起したことを通知してよい。メッセージ生成部２５−１は、所定のイベントの生起に応答して、メッセージを生成する。
【００２４】
或いは例えば、ＣＰＵコア１２−１乃至１２−ｎの内部に処理要求レジスタを設けておき、所定のイベントの生起に応答して処理要求レジスタに所定の値をセットしてよい。メッセージ生成部２５−１は、処理要求レジスタの上記所定の値への状態変化をトリガーとして、メッセージを生成してよい。処理要求レジスタへの所定の値のセットは、予め特定しておいた複数の所定の命令の何れかがデコードされると行われるようにしてよい。或いは、処理要求レジスタへ所定の値をセットするレジスタセット命令を、パケット処理プログラム中に明示的に挿入してもよいし、コンパイラで自動的に挿入してもよい。
【００２５】
図３は、図１に示すパケット処理専用プロセッサ１０により取得可能なデータについて説明するための図である。図３に示す例では、時間ｔ０において、パケットがパケット前処理部１１に到着すると、時間ｔ０に対応するカウンタ値と共にメッセージがプロファイルデータ取得部１７に記録される。時間ｔ１において、当該パケットに対するＣＰＵコアの処理が開始されると、時間ｔ１に対応するカウンタ値と共にメッセージがプロファイルデータ取得部１７に記録される。時間ｔ２において、当該パケットの処理中にＣＰＵコアがサブルーチンを呼び出すと、時間ｔ２に対応するカウンタ値と共にメッセージがプロファイルデータ取得部１７に記録される。時間ｔ３において、当該パケットの処理中にＣＰＵコアが当該サブルーチンからのリターン命令を実行すると、時間ｔ３に対応するカウンタ値と共にメッセージがプロファイルデータ取得部１７に記録される。時間ｔ４において、当該パケットの処理中にＣＰＵコアがハードウェアアクセラレータ１３を呼び出すと、時間ｔ４に対応するカウンタ値と共にメッセージがプロファイルデータ取得部１７に記録される。時間ｔ５において、当該パケットの処理中にＣＰＵコアがハードウェアアクセラレータ１３の処理完了を受け付けると、時間ｔ５に対応するカウンタ値と共にメッセージがプロファイルデータ取得部１７に記録される。時間ｔ６において、当該パケットに対するＣＰＵコアの処理が終了すると、時間ｔ６に対応するカウンタ値と共にメッセージがプロファイルデータ取得部１７に記録される。時間ｔ７において、当該パケットがパケット出力部１５から出力されると、時間ｔ７に対応するカウンタ値と共にメッセージがプロファイルデータ取得部１７に記録される。このようにして、プロファイルデータ取得部１７が記録したデータには、各イベントが生起した時刻に対応するカウンタ値（即ち各時刻を示すカウンタ値）が含まれる。従って、記録データ（性能解析データ）を調べることにより、当該パケットの処理全体に要した時間、サブルーチン処理に要した時間、ハードウェアアクセラレータでの処理に要した時間等を知ることができる。
【００２６】
上記説明したようにパケット処理専用プロセッサ１０においては、各機能ブロック（パケット前処理部１１、ＣＰＵコア１２−１乃至１２−ｎ、パケット出力部１５等）に内蔵したハードウェアが自律的にメッセージを送信する。従って、アプリケーションソフトに影響を与えることなく、性能解析データの取得にともなうオーバーヘッドを略ゼロにしながら、精度の高い処理サイクル数を計測することができる。またパケット処理待ちループ等のパケット処理に関係の無い部分については、性能解析データを取得しないので、ユーザ側での性能解析データの分析や性能解析データの取得に係る工数を低減することができる。また各機能ブロック毎にメッセージ生成の有無を切り替える機能を設ければ、選択したブロックの性能解析データのみを取得することができる。また、性能解析データを取得しない場合には、クロックゲーティングで対象回路のクロックを停止することにより、或いは、パワーゲーティングで電源を停止することにより、不要な電力を削減することができる。
【００２７】
図４は、各メッセージ生成部が生成するメッセージの構成の一例を示す図である。図４に示すメッセージは、ＩＤ４１、ハードウェアアクセラレータＩＤ４２、ヘッダポインタ４３、物理アドレス４４、及びプログラムカウンタ値４５を含む。ＩＤ４１は、当該メッセージを生成した機能ブロック（パケット前処理部１１、ＣＰＵコア１２−１乃至１２−ｎ、パケット出力部１５等）を特定する識別子である。ハードウェアアクセラレータＩＤ４２は、ＣＰＵコア１２−１乃至１２−ｎに代わりプロセッサ処理を高速に実行する専用ハードウェアを特定する識別子である。ヘッダポインタ４３は、パケットヘッダの格納位置を示すポインタ情報である。物理アドレス４４は、データ読出し命令等によるメモリアクセス先の物理アドレスである。プログラムカウンタ値４５は、当該メッセージを生成したＣＰＵコアのプログラムカウンタの値を示すデータであり、当該メッセージ生成の契機となるイベント生起時のプログラムカウンタの値を示す。
【００２８】
図５は、異なるイベント生起に応答して生成される異なるメッセージの内容を示す図である。図５に示されるように、パケット前処理部１１がパケットを受信したときに生成するメッセージには、ＩＤ４１とヘッダポインタ４３とが含まれる。ＣＰＵコア１２−１乃至１２−ｎがパケットを受信したとき（パケット処理を開始するとき）に生成するメッセージには、ＩＤ４１、ヘッダポインタ４３、及びプログラムカウンタ値４５が含まれる。ＣＰＵコア１２−１乃至１２−ｎがハードウェアアクセラレータ１３にアクセスしたときに生成するメッセージには、ＩＤ４１、ハードウェアアクセラレータＩＤ４２、ヘッダポインタ４３、及びプログラムカウンタ値４５が含まれる。パケット出力部１５がパケットを出力したときに生成するメッセージには、ＩＤ４１とヘッダポインタ４３とが含まれる。またＣＰＵコア１２−１乃至１２−ｎがサブルーチンのコール命令やリターン命令を実行したときに生成するメッセージには、ＩＤ４１、ヘッダポインタ４３、及びプログラムカウンタ値４５が含まれる。
【００２９】
図６は、プロファイルデータ取得部１７の構成の一例を示す図である。プロファイルデータ取得部１７は、ハードウェアタイマ５１、内蔵メモリ制御部５２、外部メモリ書き込み制御部５３、メッセージ入力部５４−１乃至５４−ｎ＋２、及び複数の付加ユニット５５を含む。プロファイルデータ取得部１７は、外部メモリ５と内蔵メモリ５６とに接続される。なお内蔵メモリ５６は、プロファイルデータ取得部１７に含まれてもよい。
【００３０】
ハードウェアタイマ５１は、パケット処理専用プロセッサ１０の動作クロック等に基づいてカウント動作を行い、時間経過の指標となるカウント値を示すデータを出力する。メッセージ入力部５４−１乃至５４−ｎ＋２は、パケット前処理部１１、ＣＰＵコア１２−１乃至１２−ｎ、及びパケット出力部１５にそれぞれ対応して設けられ、各機能ブロックから供給されるメッセージを受け取る。これにより、複数の機能ブロックから同時にメッセージが到来しても、それぞれのメッセージを問題なく処理することができる。
【００３１】
複数の付加ユニット５５は、メッセージ入力部５４−１乃至５４−ｎ＋２のそれぞれに対応して設けられる。付加ユニット５５は、メッセージ入力部５４−１乃至５４−ｎ＋２から出力されるメッセージに対して、ハードウェアタイマ５１が生成するカウント値を示すデータを付加する。これにより、カウント値を示すデータであるタイムスタンプ（ＴＳ）４０が、図４に示す構造のメッセージに対して追加される。このタイムスタンプ４０は、当該メッセージを受信した時間を示す情報となる。内蔵メモリ制御部５２は、受け取ったメッセージを内蔵メモリ５６に格納する。内蔵メモリ５６に所定量のデータが蓄積されると、内蔵メモリ制御部５２は内蔵メモリ５６からデータを読出し、外部メモリ書き込み制御部５３を介して外部メモリ５にデータを転送する。これにより、数多くのパケットに対するパケット処理に関して、大量の性能解析データが収集されても、問題なく全てのデータを記録することができる。
【００３２】
しかしながら、数多くのパケット処理中に生起する全てのイベントについて生成される全てのメッセージを時系列で保存していくと、メモリ容量を大きく取れない場合には、短時間分の性能解析データしか収集できない可能性がある。以下においては、性能解析データを効率的に圧縮した形式で蓄積する方式について説明する。
【００３３】
図７は、性能解析データを効率的に圧縮した形式で蓄積するために用いるメッセージの構成の一例を示す図である。図７に示すメッセージは、図４に示す構成のメッセージに加え、Ｓ／Ｅフィールド４６を含む。Ｓ／Ｅフィールド４６は、１ビットのフラグであってよく、開始（Ｓ）と終了（Ｅ）との２つの事象を表現するものである。
【００３４】
図８は、性能解析データを効率的に圧縮した形式で蓄積する方式を説明するための図である。図８において、記憶領域６０は、性能解析データを記憶するためのメモリ中の領域である。記憶領域６０には、パケット前処理部＆後処理部格納領域６１やハードウェアアクセラレータデータ格納領域６３等のように、各機能ブロックに対応して性能解析データの格納領域が設けられる。
【００３５】
まずパケット前処理部１１が、パケットＰａｃｋｅｔ−Ａを受信すると、パケット前処理部１１を特定するＩＤやパケットヘッダポインタ等に加え、開始を示す値Ｓを設定したＳ／Ｅフィールド４６（図７参照）を含むメッセージを送信する。プロファイルデータ取得部１７は、このメッセージを受信すると、例えばパケット前処理部１１のＩＤとパケットヘッダポインタとに基づいて、パケット前処理部＆後処理部格納領域６１中のＰａｃｋｅｔ−Ａ到着時刻フィールド７１のアドレスを算出する。このアドレスは、例えばパケット前処理部１１のＩＤとパケットヘッダポインタとから決まるハッシュ値であってよい。或いは、パケット前処理部１１のＩＤとパケットヘッダポインタとを連想メモリ（Content Addressable Memory）にエントリし、アドレスを決定してもよい。プロファイルデータ取得部１７は、Ｓ／Ｅフィールド４６が開始を示す値Ｓである場合、Ｐａｃｋｅｔ−Ａ到着時刻フィールド７１の値を現在の時刻（現在のタイマの値）で更新する。
【００３６】
次に例えばＣＰＵコア１２−１が、パケットＰａｃｋｅｔ−Ａについてのパケット処理を開始し、このパケット処理中にサブルーチン（関数−Ａ）を呼び出す。このサブルーチンのコール時に、ＣＰＵコア１２−１は、ＣＰＵコア１２−１を特定するＩＤやプログラムカウンタ値に加え、開始を示す値Ｓを設定したＳ／Ｅフィールド４６（図７参照）を含むメッセージを送信する。プロファイルデータ取得部１７は、このメッセージを受信すると、例えばＣＰＵコア１２−１を特定するＩＤとプログラムカウンタ値とに基づいて、ＣＰＵ＃０関数−Ａデータ格納領域６２中の関数−Ａ処理開始時刻フィールド７４のアドレスを算出する。このアドレスは、例えばＣＰＵコア１２−１を特定するＩＤとプログラムカウンタ値とから決まるハッシュ値であってよい。或いは、連想メモリからアドレスを決定してもよい。プロファイルデータ取得部１７は、Ｓ／Ｅフィールド４６が開始を示す値Ｓである場合、関数−Ａ処理開始時刻フィールド７４の値を現在の時刻（現在のタイマの値）で更新する。
【００３７】
その後ＣＰＵコア１２−１が、サブルーチン（関数−Ａ）の完了時点でリターン命令を実行する。このリターン命令実行時に、ＣＰＵコア１２−１は、ＣＰＵコア１２−１を特定するＩＤやプログラムカウンタ値に加え、終了を示す値Ｅを設定したＳ／Ｅフィールド４６を含むメッセージを送信する。なおサブルーチンからのリターン命令が実行される場合、プログラムの実行位置は、サブルーチンのコール命令の次の命令の位置に戻る。上記メッセージに含まれるプログラムカウンタ値としては、「リターン位置−１」（即ちコール命令の位置）を設定しておく。プロファイルデータ取得部１７は、このメッセージを受信すると、例えばＣＰＵコア１２−１を特定するＩＤとプログラムカウンタ値とに基づいて、ＣＰＵ＃０関数−Ａデータ格納領域６２中の関数−Ａ処理開始時刻フィールド７４のアドレスを算出する。プロファイルデータ取得部１７は、Ｓ／Ｅフィールド４６が終了を示す値Ｅである場合、現在の時刻（現在のタイマの値）から関数−Ａ処理開始時刻フィールド７４の値（関数−Ａコール時のタイマの値）を引いてカウンタ値の差分を求める。プロファイルデータ取得部１７は、累計処理サイクル数フィールド７５に格納される当該サブルーチン（関数−Ａ）を実行した累計のサイクル数を示す値に、上記の求めたカウンタ値の差分を加算する。プロファイルデータ取得部１７は更に、呼び出し回数フィールド７６に格納されているコール回数を示す値を１増加させる。
【００３８】
ハードウェアアクセラレータデータ格納領域６３へのデータ書き込み動作についても、上記のデータ書き込み動作と同様である。但し、アドレス決定には、例えば対応ＣＰＵコアのＩＤ、パケットヘッダポインタ、及びハードウェアアクセラレータのＩＤを用いてよい。またメモリアクセスデータ格納領域６４へのデータ書き込み動作についても、上記のデータ書き込み動作と同様である。但し、アドレス決定には、例えば対応ＣＰＵコアのＩＤ、及び物理アドレスを用いてよい。
【００３９】
最後にパケット出力部１５が、パケットＰａｃｋｅｔ−Ａを出力するときに、パケット出力部１５を特定するＩＤやパケットヘッダポインタ等に加え、終了を示す値Ｅを設定したＳ／Ｅフィールド４６を含むメッセージを送信する。プロファイルデータ取得部１７は、パケット出力部１５のＩＤを含むメッセージを受信すると、アドレス算出には、パケット出力部１５のＩＤではなくパケット前処理部１１のＩＤとパケットヘッダポインタとを用いる。これにより、パケット前処理部＆後処理部格納領域６１中のＰａｃｋｅｔ−Ａ到着時刻フィールド７１のアドレスを算出することができる。プロファイルデータ取得部１７は、Ｓ／Ｅフィールド４６が終了を示す値Ｅである場合、現在の時刻（現在のタイマの値）からＰａｃｋｅｔ−Ａ到着時刻フィールド７１の値（Ｐａｃｋｅｔ−Ａ到着時のタイマの値）を引いてカウンタ値の差分を求める。プロファイルデータ取得部１７は、累計処理サイクル数フィールド７２に格納される値（初期値０）に、上記の求めたカウンタ値の差分を加算する。プロファイルデータ取得部１７は更に、処理パケット数フィールド７６に格納されている処理パケット数を示す値を１増加させる。
【００４０】
上記のように、メッセージは第１の値Ｓ及び第２の値Ｅの何れか一方の値を示すＳ／Ｅフィールド４６を含む。プロファイルデータ取得部１７は、メッセージのＳ／Ｅフラグ４６が第１の値Ｓを示す場合にはタイマの現在カウント値である第１のカウント値を記録する。またプロファイルデータ取得部１７は、メッセージのＳ／Ｅフラグ４６が第２の値Ｅを示す場合には、上記記録された第１のカウント値とタイマの現在カウント値である第２のカウント値との差分を記録する。これにより、性能解析データを効率的に圧縮した形式で蓄積することができる。
【００４１】
図９は、性能解析データを効率的に圧縮した形式で蓄積する場合におけるプロファイルデータ取得部１７の構成の一例を示す図である。図９に示すプロファイルデータ取得部１７は、ハードウェアタイマ８１、前処理メッセージ処理部８２、ＣＰＵ＃０メッセージ処理部８３、メモリアドレス生成回路８４、及びメモリＲ＆Ｗ制御回路８５を含む。各ＣＰＵコアに対応して、ＣＰＵ＃０メッセージ処理部８３と同様のメッセージ処理部が設けられてよい。またパケット出力部１５に対応して、前処理メッセージ処理部８２と同様のメッセージ処理部が設けられてよい。
【００４２】
前処理メッセージ処理部８２は、データ更新回路９１及びメッセージ解析部９２を含む。ＣＰＵ＃０メッセージ処理部８３は、データ更新回路９３及びメッセージ解析部９４を含む。前処理メッセージ処理部８２の動作とＣＰＵ＃０メッセージ処理部８３の動作とは基本的に同様であるので、以下においては、ＣＰＵ＃０メッセージ処理部８３の動作を例として説明する。
【００４３】
ＣＰＵ＃０（例えばＣＰＵコア１２−１）が、サブルーチンのコール時に、ＣＰＵ＃０を特定するＩＤやプログラムカウンタ値に加え、開始を示す値Ｓを設定したＳ／Ｅフィールド４６を含むメッセージを送信する。ＣＰＵ＃０メッセージ処理部８３のメッセージ解析部９４がこのメッセージを受信すると、ＣＰＵ＃０を特定するＩＤとプログラムカウンタ値とをメモリアドレス生成回路８４に供給する。メモリアドレス生成回路８４は、ＣＰＵ＃０を特定するＩＤとプログラムカウンタ値とに基づいて、処理開始時刻フィールドのアドレスを算出する。このアドレスは、例えばＣＰＵ＃０を特定するＩＤとプログラムカウンタ値とから決まるハッシュ値であってよい。メッセージ解析部９４は、Ｓ／Ｅフィールド４６が開始を示す値Ｓである場合、データ更新回路９３から現在のハードウェアタイマ８１のカウント値を受け取り、メモリＲ＆Ｗ制御回路８５を介して処理開始時刻フィールドに当該カウント値を書き込む。
【００４４】
その後ＣＰＵ＃０が、サブルーチンのリターン命令実行時に、ＣＰＵ＃０を特定するＩＤやプログラムカウンタ値に加え、終了を示す値Ｅを設定したＳ／Ｅフィールド４６を含むメッセージを送信する。ＣＰＵ＃０メッセージ処理部８３のメッセージ解析部９４がこのメッセージを受信すると、ＣＰＵ＃０を特定するＩＤとプログラムカウンタ値とをメモリアドレス生成回路８４に供給する。メモリアドレス生成回路８４は、ＣＰＵ＃０を特定するＩＤとプログラムカウンタ値とに基づいて、処理開始時刻フィールドのアドレスを算出する。メッセージ解析部９４は、Ｓ／Ｅフィールド４６が終了を示す値Ｅである場合、メモリＲ＆Ｗ制御回路８５を介して、当該アドレスから処理開始時刻フィールドの値、累計処理サイクル数フィールドの値、及び呼び出し回数フィールドの値を読み出す。メッセージ解析部９４は、これらの読み出した値をデータ更新回路９３に供給する。データ更新回路９３は、現在のハードウェアタイマ８１のカウント値から処理開始時刻フィールドの値（コール時のタイマのカウント値）を引いてカウンタ値の差分を求め、更に、累計処理サイクル数フィールドの値にカウンタ値の差分を加算する。これにより、累計処理サイクル数フィールドの値が更新される。データ更新回路９３は更に、呼び出し回数フィールドの値（コール回数を示す値）を１増加させる。これにより、呼び出し回数フィールドの値が更新される。メッセージ解析部９４は、メモリＲ＆Ｗ制御回路８５を介して、累計処理サイクル数フィールドの更新値を累計処理サイクル数フィールドに書き込むとともに、呼び出し回数フィールドの値の更新値を呼び出し回数フィールドに書き込む。
【００４５】
なお上記説明で用いた図１，２，６，９の各々において、各ボックスで示される各機能ブロックと他の機能ブロックとの境界は、基本的には機能的な境界を示すものであり、物理的な位置の分離、電気的な信号の分離、制御論理的な分離等に対応するとは限らない。電子回路により実装されたハードウェアである各機能ブロックは、他のブロックと物理的にある程度分離された１つのハードウェアモジュールであってもよいし、或いは他のブロックと物理的に一体となったハードウェアモジュール中の１つの機能を示したものであってもよい。
【００４６】
以上、本発明を実施例に基づいて説明したが、本発明は上記実施例に限定されるものではなく、特許請求の範囲に記載の範囲内で様々な変形が可能である。
【符号の説明】
【００４７】
５  外部メモリ
１０  パケット処理専用プロセッサ
１１  パケット前処理部
１２−１〜１２−ｎ  ＣＰＵコア
１３  ハードウェアアクセラレータ
１４  メモリコントローラ
１５  パケット出力部
１６  共有キャッシュ
１７  プロファイルデータ取得部
１８  ジョブキュー
２１  パケット受信処理部
２２  パケットディスクリプタ生成部
２３  メッセージ生成部
２５−１〜２５−ｎ  メッセージ生成部
２７  メッセージ生成部
【図１】
2014054101.tif 000003
【図２】
2014054101.tif 000004
【図３】
2014054101.tif 000005
【図４】
2014054101.tif 000006
【図５】
2014054101.tif 000007
【図６】
2014054101.tif 000008
【図７】
2014054101.tif 000009
【図８】
2014054101.tif 000010
【図９】
2014054101.tif 000011
【手続補正書】
【提出日】平成28年6月17日(2016.6.17)
【手続補正１】
【補正対象書類名】特許請求の範囲
【補正対象項目名】全文
【補正方法】変更
【補正の内容】
【特許請求の範囲】
【請求項１】
パケットを受信するとパケット処理依頼を生成すると共に、パケット毎にパケットヘッダの格納位置を示すポインタ情報を含むメッセージを生成するパケット前処理部と、
前記パケット処理依頼に応答して前記パケットを処理するＣＰＵコアと、
前記パケットの出力時に、前記パケットヘッダの格納位置を示すポインタ情報を含むメッセージを生成するパケット出力部と、
前記ＣＰＵコアに設けられ、前記パケットの処理に伴い生起する所定のイベントに応答して、前記所定のイベントを特定する情報を含むメッセージを生成するハードウェアと、
前記パケット前処理部が生成するメッセージ、前記パケット出力部が生成するメッセージ、及び前記ハードウェアが生成するメッセージをタイマのカウント値と共に記録するメッセージ記録部と
を含むことを特徴とする情報処理装置。
【請求項２】
前記所定のイベントは、前記ＣＰＵコアによるサブルーチンのコール命令の実行及び前記サブルーチンのリターン命令の実行を含むことを特徴とする請求項１記載の情報処理装置。
【請求項３】
前記パケットの処理の一部を前記ＣＰＵコアの代わりに実行するために前記ＣＰＵコアからアクセスされる専用ハードウェアを更に含み、前記所定のイベントは、前記ＣＰＵコアによる前記専用ハードウェアへのアクセスを含むことを特徴とする請求項１又は２記載の情報処理装置。
【請求項４】
前記メッセージは、前記ＣＰＵコアのプログラムカウンタの値を示すデータを含むことを特徴とする請求項１乃至３何れか一項記載の情報処理装置。
【請求項５】
前記メッセージは第１の値及び第２の値の何れか一方の値を示すフィールドを含み、前記メッセージ記録部は、前記メッセージの前記フィールドが前記第１の値を示す場合には前記タイマの現在カウント値である第１のカウント値を記録し、前記メッセージの前記フィールドが前記第２の値を示す場合には前記記録された第１のカウント値と前記タイマの現在カウント値である第２のカウント値との差分を記録することを特徴とする請求項１乃至４何れか一項記載の情報処理装置。
【請求項６】
前記ＣＰＵコアは、
プログラムの命令をデコードする命令デコーダと、
前記命令デコーダによるデコード結果に基づいて前記命令を実行する命令実行ユニットと、
を更に含み、前記ハードウェアは、命令実行のための前記命令実行ユニットとは別に設けられたメッセージ生成のための専用の回路であることを特徴とする請求項１乃至５何れか一項記載の情報処理装置。
【請求項７】
パケットを受信するとパケット前処理部によりパケット処理依頼を生成すると共に、パケット毎にパケットヘッダの格納位置を示すポインタ情報を含むメッセージを生成し、
前記パケット処理依頼に応答してＣＰＵコアにより前記パケットを処理し、
前記パケットの出力時に、前記パケットヘッダの格納位置を示すポインタ情報を含むメッセージをパケット出力部により生成し、
前記ＣＰＵコアに設けられるハードウェアにより、前記パケットの処理に伴い生起する所定のイベントに応答して、前記所定のイベントを特定する情報を含むメッセージを生成し、
前記パケット前処理部が生成するメッセージ、前記パケット出力部が生成するメッセージ、及び前記ハードウェアが生成するメッセージをメッセージ記録部によりタイマのカウント値と共に記録する
各段階を含むことを特徴とする性能解析データの収集方法。
【請求項８】
前記パケット前処理部は、パケット毎に前記パケットヘッダの格納位置を示すポインタ情報を前記パケット処理依頼に含め、前記ハードウェアは、前記ハードウェアが生成する前記メッセージに、前記パケット処理依頼に含まれるポインタ情報を含めることを特徴とする請求項１記載の情報処理装置。
【手続補正２】
【補正対象書類名】明細書
【補正対象項目名】０００９
【補正方法】変更
【補正の内容】
【０００９】
情報処理装置は、パケットを受信するとパケット処理依頼を生成すると共に、パケット毎にパケットヘッダの格納位置を示すポインタ情報を含むメッセージを生成するパケット前処理部と、前記パケット処理依頼に応答して前記パケットを処理するＣＰＵコアと、
前記パケットの出力時に、前記パケットヘッダの格納位置を示すポインタ情報を含むメッセージを生成するパケット出力部と、前記ＣＰＵコアに設けられ、前記パケットの処理に伴い生起する所定のイベントに応答して、前記所定のイベントを特定する情報を含むメッセージを生成するハードウェアと、前記パケット前処理部が生成するメッセージ、前記パケット出力部が生成するメッセージ、及び前記ハードウェアが生成するメッセージをタイマのカウント値と共に記録するメッセージ記録部とを含んでよい。
【国際調査報告】
2014054101.tif 000012
2014054101.tif 000013
2014054101.tif 000014
2014054101.tif 000015