(57)【特許請求の範囲】
【請求項１】
パケット識別子を含む通信パケットを転送するバスと、
前記バスに接続され第１のタスクと第２のタスクの何れかを含む少なくとも１つのタスクを実行する複数のプロセッサとを備え、
前記第１のタスクは、前記第１のタスクに付与された第１のタスク識別子と前記バスから受信した前記通信パケットに付加された第２のタスク識別子が一致すると所定の処理を行い、
前記第２のタスクは前記第２のタスク識別子が付加されていない前記通信パケットについて前記所定の処理を行い、
前記所定の処理は、前記パケット識別子に基づいて第１の処理を実行したのち、前記第１の処理に続く第２の処理を実行する別のタスクを指示する前記第２のタスク識別子が付加された前記通信パケットを前記バスに送信することを特徴とするパケット処理装置。
【請求項２】
全ての前記タスクは、前記複数のプロセッサのＴＬＢ（Translation Lookaside Buffer）が指示するそれぞれ異なる物理的記憶領域に記憶されていることを特徴とする請求項１に記載のパケット処理装置。
【請求項３】
全ての前記タスクはそれぞれのタスクの実行に要した時間を前記タスク内に記録し、
全ての前記タスクから所定の時間毎に前記記録を読み出し、前記所定の時間内に前記複数のプロセッサ毎に実行したタスクの合計時間を求め、前記合計時間が多いプロセッサの少なくとも１つのタスクを前記合計時間が少ないプロセッサに移動するタスクスケジューラをさらに備えることを特徴とする請求項１または請求項２に記載のパケット処理装置。
【請求項４】
前記第１の処理は、前記通信パケットを破棄すべきか否かを判定する処理であり、前記第２の処理は、前記通信パケットが前記タスクで受信すべきパケットである場合には前記通信パケットに対する上位レイヤの処理であり、前記通信パケットが前記タスクで送信すべきパケットである場合には前記通信パケットに対する下位レイヤの処理であることを特徴とする請求項１乃至請求項３に記載のパケット処理装置。
【請求項５】
前記第１の処理は、前記通信パケットの宛先を判定する処理であり、前記第２の処理は、前記通信パケットが前記タスクで受信すべきパケットである場合には前記通信パケットに対する上位レイヤの処理であり、前記通信パケットが前記タスクで送信すべきパケットである場合には前記通信パケットに対する下位レイヤの処理であることを特徴とする請求項１乃至請求項３に記載のパケット処理装置。
【請求項６】
パケット識別子を含む通信パケットを転送するバスに接続された複数のプロセッサが、第１のタスクと第２のタスクの何れかを含む少なくとも１つのタスクを実行し、
前記第１のタスクは、前記第１のタスクに付与された第１のタスク識別子とバスから受信した前記通信パケットに付加された第２のタスク識別子が一致すると所定の処理を行い、
前記第２のタスクは前記第２のタスク識別子が付加されていない前記通信パケットについて前記所定の処理を行い、
前記所定の処理は、前記パケット識別子に基づいて第１の処理を実行したのち、前記第１の処理に続く第２の処理を実行する別のタスクを指示する前記第２のタスク識別子が付加された前記通信パケットを前記バスに送信することを特徴とするパケット処理方法。
【請求項７】
全ての前記タスクは、前記複数のプロセッサのＴＬＢ（Translation Lookaside Buffer）が指示するそれぞれ異なる物理的記憶領域に記憶されていることを特徴とする請求項６に記載のパケット処理方法。
【請求項８】
全ての前記タスクはそれぞれのタスクの実行に要した時間を前記タスク内に記録し、
全ての前記タスクから所定の時間毎に前記記録を読み出し、前記所定の時間内に前記複数のプロセッサ毎に実行したタスクの合計時間を求め、前記合計時間が多いプロセッサの少なくとも１つのタスクを前記合計時間が少ないプロセッサに移動することを特徴とする請求項６または請求項７に記載のパケット処理方法。
【請求項９】
前記第１の処理は、前記通信パケットを破棄すべきか否かを判定する処理であり、前記第２の処理は、前記通信パケットが前記タスクで受信すべきパケットである場合には前記通信パケットに対する上位レイヤの処理であり、前記通信パケットが前記タスクで送信すべきパケットである場合には前記通信パケットに対する下位レイヤの処理であることを特徴とする請求項６乃至請求項８に記載のパケット処理方法。
【請求項１０】
パケット識別子を含む通信パケットを転送するバスに接続された複数のプロセッサが、第１のタスクと第２のタスクの何れかを含む少なくとも１つのタスクを実行し、
前記第１のタスクは、前記第１のタスクに付与された第１のタスク識別子とバスから受信した前記通信パケットに付加された第２のタスク識別子が一致すると所定の処理を行い、
前記第２のタスクは前記第２のタスク識別子が付加されていない前記通信パケットについて前記所定の処理を行い、
前記所定の処理は、前記パケット識別子に基づいて第１の処理を実行したのち、前記第
１の処理に続く第２の処理を実行する別のタスクを指示する前記第２のタスク識別子が付加された前記通信パケットを前記バスに送信することを特徴とするプログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、パケット処理装置、パケット処理方法、およびプログラムに関するものである。
【背景技術】
【０００２】
ＳＤＮ(Software-Defined Network)が注目される中で、ハードウェア（hard ware）で実現されていたデータプレーン（data plane）のネットワーク(netwoek)機器が、汎用サーバ(server)で実現されるようになっている。
【０００３】
また、昨今の汎用サーバはＣＰＵコア（Central Processing Unit core）数の増大による高性能化と大容量のメモリ（memory）を備えたものとなっている。そして、ハードウェアに替わる為の汎用サーバのリソース（resource）を活かしたプログラムアキーテクチャ（program architecture）を備えた開発環境が提示されている。
【０００４】
例えばインテル（登録商標）アーキテクチャプロセッサ（architecture processer）上のパケット（packet）処理を最適化するように構成されたインテルデータプレーンディベロップメントキット（DPDK）が提供されている。（DPDK;Data Plane Development Kit）。
【０００５】
更に、マルチプロセッサ（multi processor）における効率的なパケット処理方法が公開されている。
【０００６】
例えば、特許文献１では、処理すべきパケットのヘッダ（header）情報に基づいて、複数のプロセッサからそのパケットを処理するプロセッサを算術演算により一意的に決定し、処理プロセッサを分散させている。
【０００７】
また、特許文献２では、プロセッサ振り分けルール（rule）に複数のプロセッサを設定し、処理時にプロセッサを選択することで、処理プロセッサを分散させている。
【先行技術文献】
【特許文献】
【０００８】
【特許文献１】特表２００２−５３８７２４号公報
【特許文献２】国際公開第２０１２／１０５６７７号
【発明の概要】
【発明が解決しようとする課題】
【０００９】
ところが、特許文献１に記載のパケット処理装置においては、パケットのヘッダの一部フィールド（field）に基づいて、パケットを処理するプロセッサを一意に決定している。そのため、特定のプロセッサに処理が集中する可能性がある。
【００１０】
また、特許文献２に記載のパケット処理方法では、処理プロセッサをフィルタ（filter）定義で複数指定できることで、特定のプロセッサへの処理の集中は回避可能となった。
【００１１】
しかし、特許文献２のパケット処理方法は、パケット毎に処理プロセッサを指定する。そして、連続するパケット処理の途中でプロセッサが変わると、プロセッサが処理するパケット毎にプロセッサが参照するメモリ領域は、メモリ上の異なる位置となる。そのため、特許文献２のパケット処理方法は、連続するパケット処理を１つのプロセッサが継続して行う場合と比べて、メモリの参照に要する時間が多くなってしまうため、プロセッサの振り分けを変更しても、処理の高速化の効果が出にくい場合があった。
【００１２】
本発明のパケット処理装置、パケット処理方法、およびプログラムは、パケットを高速に処理することを目的とする。
【課題を解決するための手段】
【００１３】
上記の目的を達成するために、本発明のパケット処理装置は、パケット識別子を含む通信パケットを転送するバスと、前記バスに接続され第１のタスクと第２のタスクの何れかを含む少なくとも１つのタスクを実行する複数のプロセッサとを備え、前記第１のタスクは、前記第１のタスクに付与された第１のタスク識別子と前記バスから受信した前記通信パケットに付加された第２のタスク識別子が一致すると所定の処理を行い、前記第２のタスクは前記第２のタスク識別子が付加されていない前記通信パケットについて前記所定の処理を行い、前記所定の処理は、前記パケット識別子に基づいて第１の処理を実行したのち、前記第１の処理に続く第２の処理を実行する別のタスクを指示する前記第２のタスク識別子を付加して前記通信パケットを前記バスに送信する。
【００１４】
上記の目的を達成するために、本発明のパケット処理方法は、パケット識別子を含む通信パケットを転送するバスに接続された複数のプロセッサが、第１のタスクと第２のタスクの何れかを含む少なくとも１つのタスクを実行し、前記第１のタスクは、前記第１のタスクに付与された第１のタスク識別子とバスから受信した前記通信パケットに付加された第２のタスク識別子が一致すると所定の処理を行い、前記第２のタスクは前記第２のタスク識別子が付加されていない前記通信パケットについて前記所定の処理を行い、前記所定の処理は、前記パケット識別子に基づいて第１の処理を実行したのち、前記第１の処理に続く第２の処理を実行する別のタスクを指示する前記第２のタスク識別子を付加して前記通信パケットを前記バスに送信する。
【００１５】
上記の目的を達成するために、本発明のプログラムは、パケット識別子を含む通信パケットを転送するバスに接続された複数のプロセッサが、第１のタスクと第２のタスクの何れかを含む少なくとも１つのタスクを実行し、前記第１のタスクは、前記第１のタスクに付与された第１のタスク識別子とバスから受信した前記通信パケットに付加された第２のタスク識別子が一致すると所定の処理を行い、前記第２のタスクは前記第２のタスク識別子が付加されていない前記通信パケットについて前記所定の処理を行い、前記所定の処理は、前記パケット識別子に基づいて第１の処理を実行したのち、前記第１の処理に続く第２の処理を実行する別のタスクを指示する前記第２のタスク識別子を付加して前記通信パケットを前記バスに送信する。
【発明の効果】
【００１６】
本発明によれば、パケット処理装置、パケット処理方法、およびプログラムは、パケットを高速に処理することが可能となる。
【図面の簡単な説明】
【００１７】
【図１】第１の実施形態の構成例を示す図である。
【図２】第１の実施形態の構成を説明する図である。
【図３】第１の実施形態の構成を説明する図である。
【図４】第１の実施形態の構成を説明する図である。
【図５】第１の実施形態の構成を説明する図である。
【図６】第１の実施形態の動作を説明する図である。
【図７】第１の実施形態の動作を説明する図である。
【図８】第１の実施形態の動作を説明する図である。
【図９】第２の実施形態の構成例を示す図である。
【発明を実施するための形態】
【００１８】
［第１の実施形態］
次に、本発明の実施の形態について図面を参照して詳細に説明する。
［構成の説明］
図１に第１の実施形態の構成を示す。
【００１９】
本実施形態のパケット処理装置１０００は、マルチコアプロセッサ（multi core processor）１１００と制御部１２００を備える。そして、マルチコアプロセッサ１１００は、複数のＣＰＵ（Central Processing Unit；中央処理装置）であるコアプロセッサ（core processor）１１１１乃至１１１ｎとバス（bus）１１０１によって構成される。バスはパケット（通信パケットともいう）が転送される信号線であり、コアプロセッサ１１１１乃至１１１ｎはバス１１０１に接続されている。
【００２０】
また、制御部１２００は、コアプロセッサ１１１１乃至１１１ｎに接続され、コアプロセッサ１１１１乃至１１１ｎが処理するタスク（後述）をコアプロセッサ間で入れ替えるなどが可能なコアプロセッサに対する制御手段である。
【００２１】
次に、図２を参照してパケットを処理する構成を説明する。
【００２２】
図２は、図１のコアプロセッサ１１１１乃至１１１ｎのいずれか１つのコアプロセッサが処理するスレッド（後述）で、バス１１０１から受信したパケットが、タスク（後述）で順番に処理され、再びバス１１０１に送出される様子を模式的に示している。
【００２３】
本実施形態のパケット処理装置のプログラムは、インテルアーキテクチャプロセッサ上でLinux（登録商標）ＯＳ（operating system）と、データプレーン開発キット（DPDK）に準拠したソフトウェアフレームワークを利用して構成される。（ソフトウェアフレームワーク；software framework）。
【００２４】
パケットは、複数のタスク（task）と呼ばれる処理の最小単位によって順番に処理される。
【００２５】
また、タスクの集合をスレッド（sled）と称する。スレッドは、コアプロセッサが処理する一連のタスクの集合を指す。
【００２６】
１つのコアプロセッサは、複数のタスクを同時に処理出来ないので、スレッド内のタスクを順番に処理する。このタスクの処理順をタスクキュー（task queue）と称する。
【００２７】
図３のマルチコアプロセッサ３００では、コアプロセッサ３１０、３２０および３３０の３つが共通のバス３０１に接続されている例を示す。そして、３つのプロセッサはバス３０１から送られたパケットをそれぞれのスレッドのタスクキューの順に独立して同時に処理する。尚、バス３０１に接続されるコアプロセッサは任意の複数であってもよい。
【００２８】
次にスレッドの構成要素であるタスクの構成を図４を参照して説明する。
【００２９】
タスク４００には、パケット受信部４０１、ルール検索部４０２、ルール適用部４０３、ルールテーブル（rule table）４０４、および実行履歴記録部４０５を有する。また、タスク４００には１つずつ固有のタスク識別子を有する。
パケット受信部４０１は、タスクに送られたパケットを受信する手段である。ルール検索部４０２は受信したパケットのパケット識別子に対応する情報をルールテーブル４０４から検索する手段である。ルール適用部４０３は、ルール検索部４０２がルールテーブル４０４から検索した情報に基づいて、タスク４００で行う第１の処理を実行する手段である。そして、ルール適用部は更に、ルールテーブル４０４の情報に基づいて次の第２の処理を実行する他のタスクを指定するタスク識別子とともにパケットを送出する手段でもある。
【００３０】
ルールテーブル４０４は、受信したパケットの識別子と、タスク４００で行う第１の処理と、次の第２の処理を実行する他のタスクを指定するタスク識別子とを関連づけて記憶している手段である。実行履歴記録部４０５は、タスクを処理した時間を履歴として記録する手段である。
【００３１】
尚、次に指定するタスクが存在しないタスクについては、ルールテーブル４０４にタスク識別子の情報は記録されない。
【００３２】
また、タスクによっては、パケット受信部４０１は、ＦＩＦＯ（First In, First Out）と称される、処理タスクに送られたパケットを先入れ先出しにするバッファを用いても良い。
【００３３】
次に、図４に示したタスクの構成要素を制御するためのスレッドのタスクである、制御タスク５００の構成について図５を参照して説明する。ここでは、制御スレッドに属する制御タスクは１つを想定している。また、制御タスク５００は、制御部と称してもよい。
【００３４】
図５では、図４で示した複数のタスク４００がスレッド内のタスクキューに従って並んでいて、制御タスク５００は複数のタスク４００を制御する様子を示している。
【００３５】
制御タスク５００には、ルール設定部５０１、タスクスケジューラ（task scheduler）５０２、および負荷バランサ（balancer）５０３を有する。
【００３６】
ルール設定部５０１は、必要に応じてタスク４００のルールテーブル４０４にルールの追加、変更、削除等を行う手段である。
タスクスケジューラ５０２は、あるコアプロセッサのタスクキューに属するタスクを、別のコアプロセッサのタスクキューへ移動する手段である。
【００３７】
負荷バランサ５０３は、タスク４００それぞれの実行履歴記録部４０５を一定時間おきに参照して、各コアプロセッサが一定時間内にタスクを処理するサイクルを集計する手段である。更に、負荷バランサ５０３は、各コアプロセッサが一定時間に処理するタスクのサイクルが均衡になるように、次の動作を指示する手段である。その動作とは、あるコアプロセッサのタスクキューに属するタスクを、別のコアプロセッサのタスクキューへ移動するようにタスクスケジューラ５０２に指示することである。
［動作の説明］
次に本実施形態の動作の説明を図３乃至図８を参照して説明する。
【００３８】
はじめに、図６に示す様に、コアプロセッサ１つに対して、コアプロセッサが処理するスレッドを１つ割当てる。
【００３９】
スレッドに割当てるタスクは任意のルールで選ばれ、タスクキューを設定する。
【００４０】
図３を参照すると、マルチコアプロセッサ３００で受信されたパケットは、後述のタスク識別子が付加されていない。タスク識別子が付加されていないパケットは、図３に示すタスク３１１乃至３１ｎ、タスク３２１乃至３２ｎ、およびタスク３３１乃至３３ｎのタスク（以下、タスク３１１等）の内の決まったタスクで処理される。
【００４１】
また、タスク３１１等の１つ以上のタスクで処理されたパケットは、後述の様にタスク識別子が付加されている。そして、タスク識別子が付加されたパケットは、図３に示すタスク３１１等のいずれか１つの、パケット識別子に対応するパケットで処理される。
【００４２】
そして、前述の様にタスク３１１等のそれぞれは、図４に示される構成をとる。
【００４３】
図４を参照すると、パケット受信部４０１がパケットを受信すると、ルール検索部４０２はルールテーブル４０４を参照する。そして、ルール検索部４０２は、図４のルールテーブル４０４から次の情報を読込む。その情報とは、受信したパケットのパケット識別子と関連付けられた、タスクで行う第１の処理と、次の第２の処理を行うタスクである図３のタスク３１１等の何れかを指示するタスク識別子の情報である。
【００４４】
更に、図４のルール適用部４０３は、ルール検索部４０２がルールテーブル４０４から読込んだ処理を実行する。そして、処理が実行されたパケットは、ルール検索部４０２が読み込んだタスク識別子を付加してバスに送出される。
【００４５】
図３のタスク３１１等の何れか１つのタスクからバスに送出されたパケットは、パケットに付加されたタスク識別子と一致するタスク３１１等の何れかのタスクの、図４のパケット受信部４０１で受信される。以降は、上記と同様にパケットはタスクで処理されて、パケットは再びバスに送出される。
【００４６】
尚、図３のタスク３１１等の中には、次の処理を行うタスク３１１等の何れか１つとルーティング（rooting）により固定して関連づけられている場合も多い。その場合のタスクの図４のルールテーブル４０４には、第２の処理を行うタスクを指示するタスク識別子は記録されていない。
【００４７】
また、図３のタスク３１１等の中には、次の新たな第２の処理は存在しないタスクがあっても良い。例えば、送信のためのタスクで、タスクでの処理が終了するとパケットをマルチコアプロセッサの外部へ送出するタスクの様な場合である。この様なタスクについても、第２の処理を行うタスクを指示するタスク識別子は図４のルールテーブル４０４に記録されていない。
【００４８】
以上が、パケット処理装置１０００の最初の動作である。
【００４９】
続いて、上記の最初の動作が、一定時間続いた後の動作を説明する。
【００５０】
図４に示すタスク４００は実行履歴記録部４０５に、そのタスクを処理した時間を記録している。
【００５１】
図５に示す制御タスクの負荷バランサ５０３は、コアプロセッサ毎にそれぞれのコアプロセッサが一定時間内に処理した全てのタスクの処理時間を集計する。ここで、一定時間内に処理時間の多いプロセッサは負荷の高いコアプロセッサと考えられ、一定時間内に処理時間の少ないコアプロセッサは負荷の低いコアプロセッサと考えられる。
【００５２】
そして、図７に示す様に、コアプロセッサ同士の負荷を均衡化するために、負荷の高いコアプロセッサのタスクキューの中のタスクを負荷の低いコアプロセッサのタスクキューに移動する。タスクキュー内のタスクの脱挿入はＲＣＵ（Read Copy Update）法等によるロックフリー（Lock-free）で実行可能な技術が知られている。尚、コアプロセッサ間の負荷を均衡化するために移動するタスクの選択については色々な方法が考えられるが、本発明の主旨ではないので省略する。
【００５３】
また、一部のタスクについては、タスクキュー間の移動を許さない様に設定しておいてもよい。例えば、パケットを受信するタスクや、パケットを送信するタスク等である。
【００５４】
次に、コアプロセッサが参照するメモリについて説明する。
【００５５】
図８の左側は、仮想メモリにタスク１乃至タスクｎが配置されている様子を示し、図８の右側は物理メモリの記憶領域を示している。そして、仮想メモリと物理メモリを結ぶ線は、仮想メモリと物理メモリの関連づけを示している。この仮想メモリと物理メモリの関連づけは、コアプロセッサのＴＬＢ（Translation Lookaside Buffer）によって行われる。
【００５６】
図８に示すタスク１は、仮想メモリエリア８００に格納され、仮想メモリエリア８００には、共有情報８１１とタスク固有情報８２１が格納される。また、タスクｎは、仮想メモリエリア８０ｎに格納され、仮想メモリエリア８０ｎには、共有情報８１１とタスク固有情報８２ｎが格納される。
【００５７】
共有情報８１１は、全てのタスクが参照する情報であり、例えばパケット等が格納される。また、タスク固有情報８２１乃至８２ｎは、タスク１乃至ｎがそれぞれ固有に参照する情報であり、ルールテーブル、および実行履歴記録等が格納される。
【００５８】
図８の例では、タスク１乃至タスクｎの共有情報８１１は物理メモリのアドレス（adress）領域Ａに格納されている。また、タスク１のタスク固有情報８２１は物理メモリのアドレス領域Ｂ１乃至アドレス領域Ｂｍに格納され、タスクｎのタスク固有情報８２ｎは物理メモリのアドレス領域Ｃ１乃至アドレス領域Ｃｍに格納されている。
【００５９】
実際のパケット処理装置では、同一タスクの処理が連続する場合も多い。この場合、特許文献２のパケット処理装置の様に、パケット単位で処理プロセッサを割り当てていると、パケット毎に処理プロセッサが異なる。そのため、パケットを処理する都度、プロセッサのＴＬＢが指示するメモリ領域が異なるので、メモリの参照処理の時間が必要になる。そのため、複数のプロセッサの負荷を均衡化して、パケット処理時間を短縮するためにパケット毎に処理プロセッサを変更しても、処理時間の短縮効果が十分に現れない。
【００６０】
一方、本実施形態のパケット処理装置は、同一タスクであれば同一プロセッサで処理される。そのため、同一タスクの処理が連続する場合に、プロセッサのＴＬＢが指示するメモリ領域は同一なので、特許文献２のパケット処理装置と比べてメモリの参照処理の時間が短縮される。その結果、特許文献２のパケット処理装置より、パケット処理を高速に行うことが可能となる。
［第２の実施形態］
次に、本発明の第２の実施形態について図９を参照して説明する。
【００６１】
本実施形態のパケット処理装置９００は、パケット識別子を含む通信パケットを転送するバス９０１と、前記バス９０１に接続され第１のタスクと第２のタスクの何れかを含む少なくとも１つのタスクを実行する複数のプロセッサ９１１乃至９１ｎを備える。
【００６２】
前記第１のタスクは、前記第１のタスクに付与された第１のタスク識別子と前記バス９０１から受信した前記通信パケットに付加された第２のタスク識別子が一致すると所定の処理を行う。また、前記第２のタスクは前記第２のタスク識別子が付加されていない前記通信パケットについて前記所定の処理を行う。
【００６３】
そして、前記所定の処理は、前記パケット識別子に基づいて第１の処理を実行したのち、前記第１の処理に続く第２の処理を実行する別のタスクを指示する前記第２のタスク識別子を付加して前記通信パケットを前記バス９０１に送信する。
【００６４】
以上の様にすることで、本実施形態のパケット処理装置９００は、特許文献２のパケット処理装置より、パケット処理を高速に行うことが可能となる。
【００６５】
以上、本発明の好適な実施形態を説明したが、上記実施形態に限定されるものではなく、次のように拡張または変形できる。
第１の実施形態のパケット処理装置のプログラムは、インテルアーキテクチャプロセッサ上のLinux ＯＳで実現しているが、仮想ＯＳ環境において実現しても良い。この場合、ＶＭＭ（Virtual Machine Manager）により管理された仮想環境下のプロセッサ、およびＯＳでの動作となる。
【００６６】
第１の実施形態における第１の処理は、対象パケットを破棄すべきか否かを判定する処理とする。また、前記第２の処理は対象パケットがタスクで受信すべきパケットである場合には前記対象パケットに対する上位レイヤ（layer）の処理とする。さらに、対象パケットがタスクから送信すべきパケットである場合には対象パケットに対する下位レイヤの処理としてもよい。
【００６７】
また、第１の実施形態における第１の処理は、対象パケットの宛先を判定する処理とする。また、 前記第２の処理は、対象パケットがタスクで受信すべきパケットである場合には対象パケットに対する上位レイヤの処理とする。さらに、対象パケットがタスクで送信すべきパケットである場合には対象パケットに対する下位レイヤの処理としてもよい。
【００６８】
第１の実施形態におけるルール検索部は、ルールテーブルが対象パケットに格納された情報に対応するルールを保持していない場合には、ルールをルール設定部に対象パケットの情報に適合するフィルタを設定するように依頼するようにしてもよい。
【００６９】
第１の実施形態におけるルールテーブルは、優先度に応じて順序づけられた複数のルールを保持する様にしてもよい。そして、 ルール抽出部は、対象パケットに適合する複数のルールがルールテーブルに格納されている場合には、複数のルールのうちの優先度が高いものを抽出するようにしてもよい。
【００７０】
第１の実施形態のタスクにおけるパケット処理は複数のパイプライン（pipeline）を用意して複数のパケット処理を同時に実行するようにしてもよい。
【００７１】
第１の実施形態の処理タスクにおけるパケット処理では、複数のタスクに処理依頼をし、新たなタスクのメモリ参照領域の情報に基づいた処理をおこなってもよい。
【００７２】
また、本発明は、実施形態の機能を実現する情報処理プログラムが、システム或いは装置に直接或いは遠隔から供給される場合にも適用可能である。
【００７３】
上記の実施形態の一部又は全部は、以下の付記のようにも記載されうるが、以下には限られない。
（付記１）
パケット識別子を含む通信パケットを転送するバスと、
前記バスに接続され第１のタスクと第２のタスクの何れかを含む少なくとも１つのタスクを実行する複数のプロセッサとを備え、
前記第１のタスクは、前記第１のタスクに付与された第１のタスク識別子と前記バスから受信した前記通信パケットに付加された第２のタスク識別子が一致すると所定の処理を行い、
前記第２のタスクは前記第２のタスク識別子が付加されていない前記通信パケットについて前記所定の処理を行い、
前記所定の処理は、前記パケット識別子に基づいて第１の処理を実行したのち、前記第１の処理に続く第２の処理を実行する別のタスクを指示する前記第２のタスク識別子を付加して前記通信パケットを前記バスに送信することを特徴とするパケット処理装置。
（付記２）
全ての前記タスクは、前記複数のプロセッサのＴＬＢ（Translation Lookaside Buffer）が指示するそれぞれ異なる物理的記憶領域に記憶されていることを特徴とする付記１に記載のパケット処理装置。
（付記３）
全ての前記タスクはそれぞれのタスクの実行に要した時間を前記タスク内に記録し、
全ての前記タスクから所定の時間毎に前記記録を読み出し、前記所定の時間内に前記複数のプロセッサ毎に実行したタスクの合計時間を求め、前記合計時間が多いプロセッサの少なくとも１つのタスクを前記合計時間が少ないプロセッサに移動するタスクスケジューラをさらに備えることを特徴とする付記１または付記２に記載のパケット処理装置。
（付記４）
前記第１の処理は、前記パケットを破棄すべきか否かを判定する処理であり、前記第２の処理は、前記パケットが前記タスクで受信すべきパケットである場合には前記パケットに対する上位レイヤの処理であり、前記パケットが前記タスクで送信すべきパケットである場合には前記パケットに対する下位レイヤの処理であることを特徴とする付記１乃至付記３に記載のパケット処理装置。
（付記５）
前記第１の処理は、前記パケットの宛先を判定する処理であり、前記第２の処理は、前記パケットが前記タスクで受信すべきパケットである場合には前記パケットに対する上位レイヤの処理であり、前記パケットが前記タスクで送信すべきパケットである場合には前記パケットに対する下位レイヤの処理であることを特徴とする付記１乃至付記３に記載のパケット処理装置。
（付記６）
パケット識別子を含む通信パケットを転送するバスに接続された複数のプロセッサが、第１のタスクと第２のタスクの何れかを含む少なくとも１つのタスクを実行し、
前記第１のタスクは、前記第１のタスクに付与された第１のタスク識別子とバスから受信した前記通信パケットに付加された第２のタスク識別子が一致すると所定の処理を行い、
前記第２のタスクは前記第２のタスク識別子が付加されていない前記通信パケットについて前記所定の処理を行い、
前記所定の処理は、前記パケット識別子に基づいて第１の処理を実行したのち、前記第１の処理に続く第２の処理を実行する別のタスクを指示する前記第２のタスク識別子を付加して前記通信パケットを前記バスに送信することを特徴とするパケット処理方法。
（付記７）
全ての前記タスクは、前記複数のプロセッサのＴＬＢ（Translation Lookaside Buffer）が指示するそれぞれ異なる物理的記憶領域に記憶されていることを特徴とする付記６に記載のパケット処理方法。
（付記８）
全ての前記タスクはそれぞれのタスクの実行に要した時間を前記タスク内に記録し、
全ての前記タスクから所定の時間毎に前記記録を読み出し、前記所定の時間内に前記複数のプロセッサ毎に実行したタスクの合計時間を求め、前記合計時間が多いプロセッサの少なくとも１つのタスクを前記合計時間が少ないプロセッサに移動することを特徴とする付記６または付記７に記載のパケット処理方法。
（付記９）
前記第１の処理は、前記パケットを破棄すべきか否かを判定する処理であり、前記第２の処理は、前記パケットが前記タスクで受信すべきパケットである場合には前記パケットに対する上位レイヤの処理であり、前記パケットが前記タスクで送信すべきパケットである場合には前記パケットに対する下位レイヤの処理であることを特徴とする付記６乃至付記８に記載のパケット処理方法。
（付記１０）
前記第１の処理は、前記パケットの宛先を判定する処理であり、前記第２の処理は、前記パケットが前記タスクで受信すべきパケットである場合には前記パケットに対する上位レイヤの処理であり、前記パケットが前記タスクで送信すべきパケットである場合には前記パケットに対する下位レイヤの処理であることを特徴とする付記６乃至付記８に記載のパケット処理方法。
（付記１１）
パケット識別子を含む通信パケットを転送するバスに接続された複数のプロセッサが、第１のタスクと第２のタスクの何れかを含む少なくとも１つのタスクを実行し、
前記第１のタスクは、前記第１のタスクに付与された第１のタスク識別子とバスから受信した前記通信パケットに付加された第２のタスク識別子が一致すると所定の処理を行い、
前記第２のタスクは前記第２のタスク識別子が付加されていない前記通信パケットについて前記所定の処理を行い、
前記所定の処理は、前記パケット識別子に基づいて第１の処理を実行したのち、前記第１の処理に続く第２の処理を実行する別のタスクを指示する前記第２のタスク識別子を付加して前記通信パケットを前記バスに送信することを特徴とするプログラム。
（付記１２）
全ての前記タスクは、前記複数のプロセッサのＴＬＢ（Translation Lookaside Buffer）が指示するそれぞれ異なる物理的記憶領域に記憶されていることを特徴とする付記１１に記載のプログラム。
（付記１３）
全ての前記タスクはそれぞれのタスクの実行に要した時間を前記タスク内に記録し、
全ての前記タスクから所定の時間毎に前記記録を読み出し、前記所定の時間内に前記複数のプロセッサ毎に実行したタスクの合計時間を求め、前記合計時間が多いプロセッサの少なくとも１つのタスクを前記合計時間が少ないプロセッサに移動することを特徴とする付記１１または付記１２に記載のプログラム。
（付記１４）
前記第１の処理は、前記パケットを破棄すべきか否かを判定する処理であり、前記第２の処理は、前記パケットが前記タスクで受信すべきパケットである場合には前記パケットに対する上位レイヤの処理であり、前記パケットが前記タスクで送信すべきパケットである場合には前記パケットに対する下位レイヤの処理であることを特徴とする付記１１乃至付記１３に記載のプログラム。
（付記１５）
前記第１の処理は、前記パケットの宛先を判定する処理であり、前記第２の処理は、前記パケットが前記タスクで受信すべきパケットである場合には前記パケットに対する上位レイヤの処理であり、前記パケットが前記タスクで送信すべきパケットである場合には前記パケットに対する下位レイヤの処理であることを特徴とする付記１１乃至付記１３に記載のプログラム。
【符号の説明】
【００７４】
３００  マルチコアプロセッサ
３０１  バス
３１０  コアプロセッサ
３１１、３１ｎ  タスク
３２０  コアプロセッサ
３２１、３２ｎ  タスク
３３１、３３ｎ  タスク
４００  タスク
４０１  パケット受信部
４０２  ルール検索部
４０３  ルール適用部
４０４  ルールテーブル
４０５  実行履歴記録部
５００  制御タスク
５０１  ルール設定部
５０２  タスクスケジューラ
５０３  負荷バランサ
８００、８０ｎ  仮想メモリエリア
８１１  共有情報
８２１、８２ｎ  タスク固有情報
９００  パケット処理装置
９０１  バス
９１１、９１ｎ  プロセッサ
１０００  パケット処理装置
１１００  マルチコアプロセッサ
１１０１  バス
１１１１、１１１ｎ  コアプロセッサ
１２００  制御部
【図１】
0006773458.tif 000002
【図２】
0006773458.tif 000003
【図３】
0006773458.tif 000004
【図４】
0006773458.tif 000005
【図５】
0006773458.tif 000006
【図６】
0006773458.tif 000007
【図７】
0006773458.tif 000008
【図８】
0006773458.tif 000009
【図９】
0006773458.tif 000010