説明

ノード装置、システム、及び、パケット処理方法

【課題】柔軟な負荷分散ができ、かつ、パケットの高速処理ができるノード装置を提供する。
【解決手段】ノード装置において、スイッチを通じて複数のパケット処理部に接続し、各パケットとこれを処理可能なパケット処理部の情報とを対応づけるための対応付け情報を格納し、前記対応付け情報において第1のパケット処理部の情報に対応付けられたパケットを前記第1のパケット処理部に転送するインタフェース部を備える。又、ノード装置において、前記第1のパケット処理部が閾値以上の高負荷であると判定される場合に、前記対応付け情報において前記第1のパケット処理部で処理可能なパケットを第2のパケット処理部の情報にも対応付けるよう前記対応付け情報を更新する制御部を備える。インタフェース部は、前記更新された対応付け情報において前記第2のパケット処理部の情報に対応付けられたパケットを前記第2のパケット処理部に転送する。

【発明の詳細な説明】
【技術分野】
【0001】
本発明は、ノード装置、システム、及び、パケット処理方法に関する。
【背景技術】
【0002】
ネットワークにおけるパケット・ストリーム処理やデータ・ストリーム処理に関する一つの課題は、複数のユーザに対して複数の高度なサービスを提供し、さらにネットワークの運用中のそのサービスの負荷の変動に対処することである。
【0003】
特許文献1は、ネットワーク・ノードを仮想化し、かつプログラマブルにすることによって、複数のユーザに対して相互干渉なく複数の高度なサービスを提供する方法を開示する。しかし、特許文献1において、サービスごとにプロセッサは固定的に割り当てられ、一つのサービスの負荷を複数のプロセッサに分散する負荷分散について記載されていない。
【0004】
特許文献2は、ネットワーク・ノードの負荷が増加した場合に行われる負荷分散を開示する。ここで、負荷が増加した場合に負荷の軽い処理部でパケットが処理される。
【先行技術文献】
【特許文献】
【0005】
【特許文献1】特開2010−193366号公報
【特許文献2】特開2004−135106号公報
【発明の開示】
【発明が解決しようとする課題】
【0006】
しかし、特許文献1の従来技術のようにサービスごとにプロセッサは固定的に割り当てられる場合、時刻によってはプロセッサごとの負荷に片寄りが大きくなってプロセッサを効率的に使用することができなくなる。また、サービスごとの負荷予測が困難な場合、特許文献2の技術の適用が困難になる。さらに、特許文献2の技術において、負荷分散しながら高速処理ができない可能性がある。
【0007】
本発明の目的は、パケット処理の負荷が動的に変化し予測困難な状況においても、柔軟な負荷分散ができ、かつ、パケットの高速処理ができるノード装置を提供することである。
【課題を解決するための手段】
【0008】
本発明の代表的な一例を示せば以下の通りである。すなわち、ネットワークに接続するノード装置であって、複数のパケット処理部と、スイッチを通じて前記複数のパケット処理部に接続し、各パケットとこれを処理可能なパケット処理部の情報とを対応づけるための対応付け情報を格納し、前記対応付け情報において第1のパケット処理部の情報に対応付けられたパケットを前記第1のパケット処理部に転送するインタフェース部と、前記第1のパケット処理部が閾値以上の高負荷であると判定される場合に、前記対応付け情報において前記第1のパケット処理部で処理可能なパケットを第2のパケット処理部の情報にも対応付けるよう前記対応付け情報を更新する制御部と、を備え、前記インタフェース部は、前記更新された対応付け情報において前記第2のパケット処理部の情報に対応付けられたパケットを前記第2のパケット処理部に転送することを特徴とするノード装置である。
【発明の効果】
【0009】
本発明の実施形態によると、ノード装置は、パケットを処理するパケット処理部の数を動的に増減させることによって柔軟な負荷分散ができる。また、インタフェース部が、パケットとこれを処理可能なパケット処理部の情報とを対応づけるための対応付け情報を有しているため、高速にパケット処理部にパケットが振り分けられパケットの高速処理が可能になる。
【図面の簡単な説明】
【0010】
【図1】ネットワークシステム全体の構成の一例を示す概略図である。
【図2】実施形態におけるパケットストリーム処理装置の構成を示すブロック図である。
【図3】パケット処理ボード(PPB)の構成を示すブロック図である。
【図4】ネットワークインタフェース(NIF)の構成を示すブロック図である。
【図5】ネットワーク処理ユニット(NPU)の構成を示すブロック図である。
【図6】制御ボードにおけるプログラムロード処理の手順を示すフローチャートである。
【図7】制御ボードにおけるプログラムアンロード処理の手順を示すフローチャートである。
【図8】制御ボードにおける負荷監視処理の手順を示すフローチャートである。
【図9】インタフェースにおけるパケット転送処理の手順を示すフローチャートである。
【図10】インタフェースにおけるパケット処理ボード選択処理の一例を示す図である。
【図11】(a)ビットベクトルQAVAILのビットとPPBキューとの対応を例示するテーブルである。(b)ビットベクトルQAVAILのビットとパケット処理ボードとの対応を例示するテーブルである。
【発明を実施するための形態】
【0011】
図1は、ネットワークシステム全体の構成の一例を概略的に示す。ネットワークシステムは、ネットワーク10全体を管理するネットワーク管理装置12(例えば、管理用コンピュータ(サーバ))と、ネットワークに含まれる複数のノード装置14、15、端末16、17等を備える。
【0012】
図2は、ある一つのノード装置としてのパケットストリーム処理装置101の全体構成を示す。パケットストリーム処理装置101は、複数のパケット処理ボード(PPB)111と、少なくとも一つのネットワークインタフェース(NIF)151と、制御ボード(CB)141と、それらを接続するスイッチファブリック181(単にスイッチとも呼ぶ)とによって構成される。パケット処理ボード、ネットワークインタフェース、制御ボードは、それぞれパケット処理部、インタフェース部(又はインタフェース)、制御部と呼ばれてもよい。パケットストリーム処理装置101は、インタフェース151によって、ネットワークに接続する。なお、制御ボード141は、本実施形態においてパケットストリーム処理装置101に内蔵されているが、パケットストリーム処理装置101の外部のサーバ等の内部に存在してもよい。
【0013】
パケットストリーム処理装置101は、N個のパケット処理ボード111およびM個のインタフェース151を備える。ただし、図2は、N個のパケット処理ボード111のうち3個のみを、パケット処理ボード111A、111Bおよび111Cとして示し、M個のインタフェース151のうち3個のみを、インタフェース151A、151Bおよび151Cとして示す。本実施形態において、パケット処理ボード111A、111B、111Cのいずれにも共通する説明をする場合、これらを総称してパケット処理ボード111とも記載する。同様に、インタフェース151A、151B、151Cのいずれにも共通する説明をする場合、これらを総称してインタフェース151とも記載する。
【0014】
制御ボード141はコンピュータであり、CPU(中央演算処理装置)142とメモリ143とを備える。メモリ143は、CPU142が実行するプログラムであるプログラムローダ144と負荷テーブル145、プログラムテーブル146、プログラム格納部(プログラムストア)147を含む。プログラムローダ144は、プログラム格納部147に格納されたプログラムP0、P1、…、Pmをパケット処理ボード111のメモリ(後述のDRAM113)にロードする。プログラムローダ144は、プログラム格納部147に格納されたURL(Uniform Resource Locator)に存在するプログラムP0、P1、…、Pmをパケット処理ボード111のメモリ(DRAM113)にロードしてもよい。CPU142を使用してプログラムローダ144が行う処理は、図6、図7、図8を参照して後で詳述される。
【0015】
図3は、パケット処理ボード(PPB)111(111A、111B、111C)の構成を示す。例えば、パケット処理ボード111は、パケット処理として、パケットのヘッダに記録されたプロトコルの情報を変更するなどのヘッダ処理を行う。本実施形態において、図2の制御ボード141の負荷テーブル145は、各パケット処理ボード111に関する負荷の情報、即ち負荷の指標となる指標値を格納する。負荷は、キュー単位、パケット処理ボード単位、処理するプログラムの単位などで表現してよい。例えば、負荷の指標値は、キュー単位として、入力キュー114a、114bに蓄積されたパケット数、パケット処理ボード単位として、全入力キューに流入または全出力キューから流出するデータ量(バイト数またはパケット数)、プログラムの単位として、パケット処理ボード111のCPU時間(プログラム実行時間)で表されてよい。また、負荷の指標値は、これらのパラメータ(パケット数、データ量、CPU時間)を組み合わせた値(特に、これらのパラメータに関して単調増加な関数値)で表されてよい。本実施形態において、負荷テーブルは、各パケット処理ボード111が有する各入力キュー114a、114bの負荷の情報を格納する。なお、以後、パケット処理ボード111が有する入力キューは、PPBキューと呼ばれることがある。
【0016】
図3では、パケット処理ボード111のPPBキュー(入力キュー)の負荷QLENは、PPBキューに溜まったパケット(パケットのヘッダ或いはディスクリプタでもよい)の数で表される。PPBキュー114aの負荷(即ちパケット数)は4であり、PPBキュー114bの負荷(即ちパケット数)は2である。なお、前述のように負荷テーブル145が各パケット処理ボード111の単位で負荷を格納してもよい。
【0017】
図2と図3において、i番目のパケット処理ボード111のPPBキューの識別子QIDは、Qi0、Qi1、・・・、Qi(L−1)(Lは、パケット処理ボード111内のPPBキューの個数)で示されている。負荷テーブル145は、各パケット処理ボード111の各PPBキューの負荷をPPBキューの識別子QIDに対応づけて記録する。なお、パケット処理ボード111のPPBキューが一つしかない場合には、PPBキューの識別子QIDはパケット処理ボード111の識別子にもなる。
【0018】
負荷テーブル145の内容は、各パケット処理ボード111からの定期または不定期の通知によって更新される。または、制御ボード141が、定期的に各パケット処理ボード111に負荷を問い合わせて負荷テーブル145の内容を更新してよい。即ち、各パケット処理ボード111が、自律的に、つまり、内蔵するタイマーが一定時間進んだ際に、または、各パケット処理ボード111における特定の処理が開始または終了する際に、各パケット処理ボード111の負荷の指標値を観測して制御ボード141に、その値を含むパケットを送信する。または、制御ボード141は、各パケット処理ボード111に問い合わせ情報を含むパケットを送信して、それに応答して各パケット処理ボード111が負荷の指標値を観測して制御ボード141にその値を含むパケットを送信する。
【0019】
プログラム管理テーブル146は、パケットのヘッダの特定フィールドにふくまれる値である識別子SIDと、そのSIDを有するパケットを処理するプログラムの識別子PIDと、そのプログラムに関連づけられたパケット処理ボード111のPPBキューの情報(キューリストQAVAIL)との組合せを格納する。識別子SIDは、パケットの種類を示す識別子であり、本実施形態では、パケットが受けるべきサービスを特定するサービス識別子である。図2のプログラム管理テーブル146において、0番目のキューリストをQAVAIL0、1番目のキューリストをQAVAIL1、k番目のキューリストをQAVAILkとする。プログラム管理テーブル146は、パケット処理ボード111のPPBキューの情報ではなく、パケット処理ボード111自体の情報を格納してよい。
【0020】
本実施形態において、SIDは固定長であり、617、800、715などの値を有するが、SIDは可変長としてもよい。また、本実施形態において、プログラム管理テーブル146は、SIDとしてパケット中のフィールドに含まれる値(識別子)と完全に一致するべき値を格納するが、代わりにこの値の一部をマスクして変換した値を格納してよい。プログラム管理テーブル146にマスクした値が格納される場合に、パケット中のフィールドに含まれる値は、マスクをかけてからプログラムテーブル146に含まれる識別子SIDと比較される。SIDとプログラムの識別子PIDとの関係は、SIDに対応する識別子を含むパケットをどのプログラムで処理すべきか示し、例えば、ネットワーク管理装置12からのプログラムロード要求によって、パケットストリーム処理装置101(ノード装置)の初期設定において指定される。
【0021】
プログラム管理テーブル146において、P0、P1、…、Pmのうちある一つのプログラムに対応するPPBキューの情報(キューリストQAVAIL)は、そのプログラムの実行につながるPPBキューを示すビットベクトルであり、そのプログラムが処理するパケットを保持するPPBキューを示す。ここでは、ビットベクトルの要素(ビット)は、先頭から、所定の順のPPBキューの識別子QID(例えばQ00、Q01、・・・、Qi0、Qi1、・・・、Q(N−1)0、Q(N−1)1)に対応付けられている。ある識別子QIDのPPBキューに送られたパケットが識別子PIDのプログラムで処理可能な場合に、その識別子PIDに対するビットベクトル(QAVAIL)において、当該ある識別子QIDに対応する要素(ビット)は1になり、そうでない場合に、この要素(ビット)は0になる。例えば、識別子Q00とQi1のPPBキューだけがあるプログラムが処理するパケットを保持する場合に、このプログラムに対するビットベクトルQAVAILのビットは、先頭(左)から、図11(a)のようにPPBキューに対応付けられる。制御ボード141とインタフェース151は、図11(a)のようなテーブルをそれらのメモリ内に格納してもよい。また、PPBキューの識別子QIDは、上記に限られず、例えば、全パケット処理ボードを通じて、順番に整数値による識別子が付与されてもよい。
【0022】
プログラムローダ144は、プログラムP0、P1、…、Pmをパケット処理ボード111のメモリ(DRAM113)にロードする際に、プログラム管理テーブル146にパケット処理ボード111のPPBキューの情報(QAVAIL)を登録する。
【0023】
メモリ143のプログラム格納部147は、実行可能なプログラムP0、P1、…、Pmを格納する。本実施形態において、プログラムP0、P1、…、Pmは、メモリ143に含まれるが、半導体ディスクやハードディスク等の大容量記憶装置に格納してよい。
【0024】
再び図3を参照すると、パケット処理ボード111はSRAM(スタティックランダムアクセスメモリ)によって構成されたPPBキュー(入力キュー)114a、114bと、入力されたパケットを処理可能なNPU112a、112bと、SRAMによって構成された出力キュー115a、115bと、DRAM113とを備える。ここでNPUは、ネットワーク処理ユニットすなわちCPUの一種、またはCPUコアである。スイッチファブリック181を経由してパケット処理ボード111に入力されたパケットのヘッダおよびディスクリプタ(又はポインタ)は、PPBキュー114a、114bに格納され、パケットの本体はDRAM(ダイナミックランダムアクセスメモリ)113に格納される。なお、PPBキュー114a、114bにパケット全体が格納される構成も可能である。パケット処理ボード111は、動作中でも、サービスが必要とするプログラムをロードして実行できる。
【0025】
PPBキュー114a、114bのパケット(詳細には、パケットのヘッダおよびディスクリプタ)は、パケット処理可能な状態(例えばアイドル状態)にあるNPU112a、112bのいずれかに転送されて処理される。各NPU112a、112bは、PPBキュー114a、114bのパケットを処理するため、DRAM113に格納された対応するプログラムを実行する。PPBキュー114a、114bのパケットは、そのPPBキューに予め対応付けられたNPU112a、112bに送られてもよい。
【0026】
処理後のパケット(詳細には、パケットのヘッダおよびディスクリプタ)は、NPU112a、112bに対応する出力キュー115a、115bに格納され、スイッチファブリック181を経由してインタフェース151A、151Bまたは151Cに転送される。
【0027】
図4は、インタフェース151(151A、151B、151C)の構成を示す。インタフェース151は、パケットをパケットストリーム処理装置101(ノード装置)の外部から入力して、スイッチ・ファブリック経由で、パケット処理ボード111に出力する。また、インタフェース151は、スイッチ・ファブリック経由でパケット処理ボード111からパケットを入力してパケットストリーム処理装置101の外部に出力する。
【0028】
インタフェース(NIF)151は、その動作を制御するASIC等の演算処理回路156と、一つ又は複数のメモリとを有する。インタフェース151のメモリは、振り分けテーブル152と、入力キュー154a、154bと、キューリスト155a、155bと、負荷テーブル153とを格納する。なお、以後、インタフェース151の入力キュー154a、154bは、NIFキューと呼ばれることがある。キューリスト155a、155bは、利用可能なパケット処理ボード111の情報を示す。
【0029】
インタフェース151は、振り分けテーブル152を参照して、識別子SID(つまりパケットの種別)に対応するNIFキューを検索して、識別子SIDごとにNIFキュー154a、154bに振り分ける。キューリストによって、NIFキュー154a、154bごとに、利用可能なパケット処理ボード111の情報が対応するため、識別子SIDごと又は振り分けられたパケットごとに利用可能なパケット処理ボード111の情報が対応付けられることになる。本実施形態においてNIFキューの個数Kは2個であるが、NIFキューの個数Kは3個以上であってよい。また、NIFキューの個数Kを1個にして、キュー振り分けテーブル152をなくすこともできる。
【0030】
さらに、インタフェース151は、振り分けられたパケットごとに対応付けられたパケット処理ボード111の情報に基づいて、パケットをそのパケット処理ボード111の資源に出力する。パケット処理ボード111の資源として、パケット処理ボード111自体、パケット処理ボード111内のPPBキューや処理ユニットNPUがある。例えば、パケット処理ボード111の情報は、PPBキューの識別子(ID)やアドレス、パケット処理ボード自体の識別子(ID)やアドレスやポート番号、処理ユニットNPUの番号である。
【0031】
振り分けテーブル152は、入力されたパケットのヘッダに含まれる識別子SIDとNIFキュー154a、154bとの関係を示す。NIFキュー154a、154bは、インタフェース151に入力されたパケットをパケット処理ボード111に転送するまで保持する。キューリスト(又はキューテーブル)155a、155bは、パケットが利用可能なキューを表わす。キューリスト155a、155bは、インタフェース151に入力されたパケットと、このパケットが転送されてプログラムで処理できるパケット処理ボード111の情報を対応付けている対応付け情報である。ここでは、パケット処理ボード111の情報は、パケットを転送すれば、対応するプログラムで処理できるPPBキュー(入力キュー)を示す情報である。
【0032】
本実施形態において、負荷テーブル153は、パケット処理ボード111の負荷として、各PPBキューに含まれるパケット数などを、各PPBキューに対応付けて格納する。負荷テーブル153の内容は、制御ボード141の負荷テーブル145の内容に等しい。また、負荷テーブル153は、負荷テーブル145と同じく、パケット処理ボード111からの定期または不定期の負荷の通知によって更新される。各インタフェース151に、一定の時間間隔で各パケット処理ボード111から負荷が通知され、通知された負荷に基づいて負荷テーブル153に示される負荷が更新されてよい。
【0033】
負荷テーブル153において示された負荷が低く、かつ、利用可能キューリスト(ビットベクトルQAVAIL)155a、155bの対応するビットが1(すなわち利用可能)に設定されているPPBキューが選択されて、NIFキュー154a、154bに保持されたパケットが、選択されたPPBキューに転送される。例えば、NIFキューに対応する利用可能キューリストのビットベクトルが(01・・・0)であれば、識別子Q01のPPBキューにそのNIFキューのパケットが転送される。
【0034】
図5は、ネットワーク処理ユニット(NPU)112の構成を示す。ネットワーク処理ユニット112(112a、112b)は、1個の汎用処理コア(GPC)311、複数のパケット処理コア(PPC)321、I/O制御装置(I/O Controller)302、SRAM331、メモリ制御装置(Memory Controller)341と、これらを接続するバス351とを備える。各パケット処理コア321には、整数値による識別子が付与されている。パケット処理コア321A、321B、321Cのいずれにも共通する説明をする場合、これらを総称してパケット処理コア321とも記載する。
【0035】
汎用処理コア311は、主に、ネットワーク処理ユニット112内の各部を制御する。複数のパケット処理コア321は、主にデータ処理を並列に実行する。I/O制御装置 302は、ネットワーク処理ユニット112の外部すなわちパケット処理ボード111 上にあるスイッチ361に接続されている。
【0036】
SRAM331は小容量だが遅延が小さい主記憶装置である。また、メモリ制御装置 341は、ネットワーク処理ユニット112の外部でパケット処理ボード111上にあるDRAM113に接続されている。DRAM113は、大容量だが遅延がやや大きい主記憶装置である。
【0037】
スイッチ361は、スイッチファブリック181を経由してパケット処理ボード111に到達するパケットデータをI/O制御装置302に転送する。I/O制御装置302は、バス351を介してパケットデータをSRAM331に転送したり、メモリ制御装置341を経由してDRAM113に転送する。SRAM331やDRAM113に格納されたパケットデータは、パケット処理コア321において処理されて再度SRAM331やDRAM113に格納されるか、またはI/O制御装置302を介してネットワーク処理ユニット112の外部に出力される。
【0038】
図6は、制御ボード141のプログラムローダ144が、CPU142を介して行うプログラムロード処理の手順を示す。プログラムロード処理は、負荷監視を行うための負荷テーブル145において、いずれかのPPBキューの負荷が閾値を超えた場合に実行される。また、ネットワーク管理装置12が送ったプログラムロード要求を制御ボード141が受信した場合にも、プログラムロード処理は実行される。ネットワーク管理装置12は、パケットストリーム処理装置101のパケット処理開始前の初期設定等のために、管理者または管理プログラムの指示によりプログラムロード要求を制御ボード141に送る。
【0039】
ただし、プログラムローダ144がプログラムロード要求を受信した場合に、プログラムは、まだプログラム格納部147に格納されていない。このため、この場合、CPU142は、プログラムロード要求によって指定されたプログラム、又は、プログラムロード要求に含まれるプログラムをプログラム格納部147に格納し、その後、図6の手順を実行する。なお、プログラムロード要求において、プログラムは、それが存在するURLによって指定されてよい。
【0040】
プログラムロード処理において、プログラムがパケット処理ボード111にロードされる。さらに、ロードされたプログラムが処理するべきパケットがそのパケット処理ボード111に送られるように、各インタフェース151内において、各パケットとこれを処理可能なパケット処理部の情報とを対応づける対応付け情報(キューリストQAVAIL)が更新される。これにより、インタフェースに到着したパケットは、それを処理可能なプログラムがロードされたパケット処理装置のうちの1台にこの対応付け情報にしたがって高速に転送され、ロードされたプログラムによって高速に処理される。各パケット処理装置111は負荷をプログラムローダ144に通知し、通知をうけたプログラムローダ144は、特定のパケット処理装置111の負荷が過大になる前に、負荷が大きいプログラムを他のパケット処理装置111にロードできる。
【0041】
さらに、プログラムローダ144は、処理負荷が大きいプログラムが存在するが、未使用のパケット処理装置111がない場合に、複数のパケット処理装置111に配布されているが処理負荷が低いプログラムを選択できる。プログラムローダ144は、処理負荷が低いプログラムのサービス(サービス識別子SID)に関連する振り分けテーブル152の内容を削除するとともに、そのプログラムを前記の複数のパケット処理装置111のいずれかからアンロードして、かわりに処理負荷が大きいプログラムをロードできる。
【0042】
プログラムロード処理が開始されると、まずステップS411において、プログラムローダ144は、負荷テーブル145を参照し、パケット処理が可能である未使用又は低負荷のパケット処理ボード111とこのボード内のいずれかのPPBキュー114a、114bを選択する。なお、後述の負荷監視処理のステップS611の処理が実行された場合には、ステップS611で選択された低負荷のPPBキュー114a、114bとそれを含むパケット処理ボード111が選択されてよい。例えば、負荷テーブル145の最少の負荷を有するパケット処理ボード111が低負荷と判定されてよい。
【0043】
プログラムローダ144は、選択したPPBキューをプログラム管理テーブル146に登録する。PPBキューのリスト(即ち、ビットベクトルQAVAIL)に選択されたPPBキューが示される、つまり、選択されたPPBキューに対応するビットは1に設定される。なお、ロードされるプログラムが処理すべきパケットの識別子SID(サービス識別子など)に関する項目がプログラム管理テーブル146に存在しない場合に、その項目は生成され、プログラムの識別子PID(プログラム格納部147へのポインタまたはURL)と、選択されたPPBキューが登録される。また、ロードされるプログラムが処理すべきパケットの識別子SIDに関する項目が、プログラム管理テーブル146に存在する場合に、パケット処理ボード111のPPBキューのリストに選択したPPBキューが追加される、つまり、選択したPPBキューに対応するビットは1に設定される。
【0044】
次に、ステップS412において、プログラムローダ144は、選択したパケット処理ボード111のメモリ(DRAM113)にプログラムをロードして起動する。
【0045】
さらに、ステップS413において、プログラムローダ144は、プログラムロード要求に含まれていた識別子SIDと各インタフェース151内のNIFキューを対応づける。このため、プログラムローダ144は、各インタフェース151に指令を出して、識別子SIDとこれに割り当てたNIFキュー番号の対を振り分けテーブル(qDT)152に登録する。例えば、図4では、j番目のインタフェースNIF#jにおいて、SID617に対して番号1のNIFキュー(qj1)が、SID800に対して番号0のNIFキュー(qj0)が割り当てられている。なお、PPBキューの負荷が閾値を超えた場合に実行されるプログラムロード処理においては、プログラムロード要求時に振り分けテーブル(qDT)152は既に設定されているため、ステップS413は省略されてよい。
【0046】
最後に、ステップS414において、プログラムローダ144の指令に応じて、各インタフェース151は、ステップS411で選択した全てのPPBキューを、これに対応するビットを1に設定することによってPPBキューのリストQAVAILに登録する。
【0047】
インタフェース151のメモリに記憶されたPPBキューのリストQAVAILの内容は、制御ボード141のメモリに記憶されたPPBキューのリストQAVAILと等しくなる。これによって、PPBキューのリストQAVAILに、プログラムロード処理の実行以前に登録されていたPPBキューが存在しなかった場合(ビットベクトルQAVAILの全てのビットが0であった場合)に、インタフェース151に到着したパケットが新たにパケット処理ボード111上のプログラムによって処理できる。また、PPBキューのリストQAVAILに、既登録のPPBキューが存在していた場合(ビットベクトルQAVAILのいずれかのビットが1であった場合)に、インタフェース151に到着したパケットが既登録のPPBキューだけでなく新規登録されたPPBキューにも転送され、パケット処理ボード111の負荷が分散できる。
【0048】
PPBキューのリスト(QAVAIL)は、制御ボード141に加えて各インタフェース151にも重複して存在することになるが、これによって各インタフェース151においてパケットが高速に処理できる。インタフェース151において、パケットがワイヤレートで処理できるように、PPBキューのリスト(QAVAIL)は、CAM(連想メモリ:content addressable memory)のような高速アクセス可能なメモリに格納される。
【0049】
次に、パケットストリーム処理装置101にプログラムロード処理を起動するためのプログラムロード要求について説明する。ネットワーク管理装置12は、パケットストリーム処理装置101のパケット処理開始前の初期設定などのために、管理者または管理プログラムの指示により、プログラムロード要求をパケットストリーム処理装置101の制御ボード141に送る。プログラムロード要求は、次の(i)−(iii)の各項目を含む:(i)プログラムのURLまたはプログラム自体、(ii)サービス識別子(SID)、(iii)負荷予測情報(リソース情報)。
【0050】
項目(i)に関して、プログラムロード要求にプログラム自体がふくまれている場合に、制御ボード141は、そのままプログラム格納部147にプログラムを格納する。プログラムロード要求にプログラムのURLが含まれる場合に、制御ボード141は、指定されたURLにHTTP(HyperText Transfer Protocol)によってアクセスして、そのプログラムを受信してプログラム格納部147に格納するか、或いは、プログラム格納部147にURL自体を格納する。プログラムは、オブジェクトプログラムまたはソースプログラムである。ソースプログラムの場合に、制御ボード141は、ソースプログラムをオブジェクトプログラムに変換するためのコンパイラを内蔵し、コンパイルによって得られたオブジェクトプログラムをプログラム格納部147 に格納する。代わりに、制御ボード141は、プログラムロード処理の一部としてソースプログラムをコンパイルしてよい。コンパイルの際には、ソースプログラムが記述された言語にしたがって、その言語のコンパイラが使用される。例えば、ソースプログラムが、特定のアーキテクチャ(例えば特定のネットワークプロセッサのCPU)のためのものであることがソースプログラム中に記述されていれば、そのネットワークプロセッサ用のコンパイラを使用する。
【0051】
なお、プログラムやそのURLを含まないプログラムロード要求を受信したプログラムローダ144は、プログラム管理テーブル146にそのプログラムロード要求において指定されたサービス識別子を含む要素が存在する場合には、その要素が含むプログラムをプログラムロード要求において指定されたものとみなすことができる。
【0052】
項目(ii)に関して、サービス識別子(SID)は、パケットがそれを処理するプログラムを指定するため含む値である。サービス識別子は、プログラムと1対1又は多対1に対応する。
【0053】
項目(iii)に関して、負荷予測情報は、プログラムが、パケットストリーム処理装置101(ノード装置)に与える負荷を予測するための情報である。負荷予測情報は、第1の情報として、プログラムを1回実行するのに要するリソース量またはそれを推定するための情報と、第2の情報として、プログラムの実行回数またはそれを推定するための情報を含む。第1の情報として、処理時間やメモリ量などで表されたリソース量は、値または、受信すべきパケットの属性に応じた関数によって与えられてよい。なお、プログラムを1回実行するのに要するリソース量は、標準的な入力データを与えてプログラムを実行するなどによって、プログラムの静的な解析または動的な解析によって推定することもできる。その場合、第1の情報は必要ない。第2の情報としてのプログラムの実行回数は、パケット数の形で与えられるが、帯域(ビットレート)の形で与えられてもよい。帯域が指定されると、平均パケット長の推定値を使用して、パケット数が推定できる。
【0054】
制御ボード141中のプログラムローダ144がプログラムロード要求を受け取った場合に、指定されたサービス識別子をもつパケットに対して、指定されたプログラムが、選択されたパケット処理ボード111にロードされて実行される(S412)。指定されたプログラムによって生成あるいは転送されるパケットは、プログラムによって転送先(例えば、いずれかの隣接ノード装置)が決められるように、パケットストリーム処理装置101を初期設定できる。しかし、パケットストリーム処理装置101は、通常のEthernet(登録商標、以下同じ)スイッチまたはIPルータとして機能して、自動的にパケットが転送されるように初期設定することも可能である。また、パケットストリーム処理装置101は、その初期状態として到着したパケットをすべて廃棄するように初期設定することも可能である。
【0055】
また、到着したパケットのサービス識別子がキュー振り分けテーブル152にない場合、NIF151が、プログラムローダ144にプログラムロード要求を送信することもできる。この場合、プログラムやそのURLをふくまないプログラムロード要求を送信することも可能である。このようなプログラムロード要求は、OpenFlowスイッチに新規のフローが到着した際にスイッチの動作をサーバに問い合わせる要求に相当する。(ここで、OpenFlowとは、OpenFlowスイッチング・コンソーシアムが提唱しているネットワーク制御技術のことである。)すなわち、OpenFlowスイッチにおいて、その動作が予め決められた範囲から選択されるが、本実施形態においてはそのサービス識別子を有するパケットに対するパケットストリーム処理装置101の動作を任意のプログラムによって与えることができる。本実施形態においては、プログラムの選択のためにサービス識別子というパケット中のひとつのフィールドを使用しているが、OpenFlowスイッチにおけるように、パケット中の複数のフィールドの値を使用することもできる。
【0056】
図7は、制御ボード141のプログラムローダ144が、CPU142を介して行うプログラムアンロード処理の手順を示す。プログラムアンロード処理は、負荷監視においてプログラムの実行の負荷が閾値を超えた場合に、このプログラムを新たにロードするパケット処理ボード111から他のプログラムをアンロードするために実行される。負荷テーブル145において、このプログラムに対応するPPBキューの負荷が閾値を超えた場合に、このプログラムの実行の負荷が閾値を超えたと判定できる。
【0057】
また、管理者または管理プログラムの指示によりネットワーク管理装置から送られたプログラムアンロード要求を制御ボード141が受信した場合に、プログラムローダ144は、アンロード処理の対象のプログラムがロードされた全てのパケット処理ボード111についてプログラムアンロード処理を実行する。その後、プログラムローダ144は、プログラム格納部147からこのプログラム又は対応するURLなどを削除する。プログラムアンロード要求はサービス識別子を含む。サービス識別子はプログラムと1対1又は多対1に対応するので、それによってアンロードするプログラムを指定することができる。プログラムアンロード処理が実施された後、プログラムアンロード要求に含まれたサービス識別子を有するパケットに対して、このサービス識別子に対応するプログラムがロードされる以前と同じ処理が行われる。
【0058】
図7を参照すると、プログラムアンロード処理が開始すると、まず、ステップS511において、プログラムローダ144は、アンロードするプログラムが存在するパケット処理ボード111と、そのプログラムが使用するボード内のPPBキューを求める。なお、負荷監視が行われている場合、このPPBキューは、後述の負荷監視処理のS611(図8)で選択されている低負荷のPPBキューである。プログラムローダ144は、プログラム管理テーブル146のPPBキューのリスト(ビットベクトルQAVAIL)から求めたPPBキューを削除する(即ち、このPPBキューに対応づけられたビットを0にする)。
【0059】
次に、ステップS512において、プログラムローダ144は、プログラム管理テーブル146においてプログラムが利用可能なPPBキューがなくなった場合には、各インタフェース151に指令を送って、各インタフェース151の振り分けテーブルqDT内でこのプログラムに対応するサービス(即ちこのサービスの識別子SID)に割り当てられたNIFキューを抹消する。プログラム管理テーブル146が含むPPBキューのリストが空(即ち、QAVAILの全てのビットが0)になった場合に、サービスが使用するPPBキューがなくなったと判定される。
【0060】
さらに、ステップS513において、前記のサービスが使用する各インタフェース151において、S511で求められた全てのPPBキューをリスト(QAVAIL)から抹消する。これによって、リスト(QAVAIL)に登録されたPPBキューがなくなった場合に、インタフェース151に到着したパケットがパケット処理ボード111上のプログラムによって処理されることがなくなる。即ち、インタフェース151に到着したパケットは、初期設定によって、廃棄されるか、通常のEthernetパケットまたはIPパケットとして処理される。また、QAVAILに登録されたPPBキューが残っている場合は、残っているPPBキューひいてはこのPPBキューを含むパケット処理ボード111に負荷が集中されるという効果が生じる。
【0061】
最後に、ステップS514において、プログラムローダ144は、S511において求めたパケット処理ボード111においてプログラムを停止してアンロードする。また、全てのパケット処理ボード111からアンロードされる場合、このプログラムをプログラムテーブル146からも削除する。プログラムローダ144は、このパケット処理ボード111のメモリ(DRAM113)からプログラムを削除する。プログラムをアンロードされたパケット処理ボード111において、そのプログラムを実行することができなくなるが、そのプログラムが占有していたメモリが解放され、他のプログラムがロードされてこのメモリを利用する。
【0062】
図8は、制御ボード141のCPU142が定期的に繰り返して行う負荷監視処理の手順を示す。負荷監視処理において、負荷テーブル153が走査され、負荷テーブル153内で負荷を示す各要素についてステップS610以下の処理が反復実行される。
【0063】
ステップS610において、負荷テーブル153の選択された要素QLENに対応するPPBキューqhが高負荷であるか判定される。PPBキューqhが高負荷であれば、ステップS611−S613の処理が実行される。本実施形態において、負荷テーブル153において負荷を示す要素QLENは、対応するPPBキューqhに溜まったパケット数である。負荷(ここではパケット数)が一定の閾値を超えている場合、PPBキューqhは、高負荷であると判断される。例えば、閾値は、パケット数で3の値である。ただし、閾値は固定値でなくてよく、負荷テーブルの他の要素QLENの値が高い程、閾値は大きく設定されてよい。
【0064】
ステップS611において、負荷テーブル153が参照され、未割り当て(未使用)又は低負荷のPPBキューqlと、それを含むパケット処理ボードPPBplが選択される。負荷テーブル153を走査して、未割り当て又は低負荷のPPBキューqlを求めることができる。しかし、前回の走査の中で求めて、このPPBキューqlを保存しておくこともできる。ここで、負荷テーブル153において最少の負荷を有するPPBキューを低負荷のPPBキューqlとして選択できる。
【0065】
ステップS612において、選択されたPPBキューqlが割り当て済み(即ち低負荷)の場合に、図7のアンロード処理にしたがって、PPBキューqlとPPBplに対応するメモリを解放する。すなわち、PPBキューqlに蓄積されたパケットを処理するプログラムは、パケット処理ボードPPBplのメモリ(DRAM113)から削除される。
【0066】
ステップS613において、図6のロード処理にしたがって、未割り当て又は低負荷のPPBキューqlを含むパケット処理ボードPPBplのメモリ(DRAM113)にも、高負荷のPPBキューqhのパケットを処理していたプログラムがロードされる。さらに、高負荷のPPBキューqhに送られるパケットに対する利用可能キューリスト155a、155b(QAVAIL)において、未割り当て又は低負荷のPPBキューqlが追加される。すなわち、利用可能キューリスト155a、155b(QAVAIL)において高負荷のPPBキューqhに対応付けられるパケットが、未割り当て又は低負荷のパケット処理ボードPPBplにも転送され、新たにパケット処理ボードPPBplにロードされたプログラムによって処理できる。
【0067】
ステップS614において、負荷テーブル153の負荷を示す全要素について処理が終了したか判定される。全要素について処理が終了していない場合、ステップS615において、次の要素が選択され、ルーチンはステップS610に戻る。全要素について処理が終了した場合、ルーチンは終了する。
【0068】
図8の負荷監視処理において、PPBキューとプログラムとは1対1に対応している。未割り当てのPPBキューが存在しない場合に、パケット処理ボードPPBplにおいてプログラムのアンロードが行われる。しかし、1個のPPBキューを複数のプログラムに対応させる場合もある。このような場合において、使用されているPPBキューを新たなプログラムに割り当てる際に、プログラムをアンロードする必要は必ずしもない。しかし、1個のPPBキューを多数のプログラムによって共用する場合に、サービス(プログラム処理)間の干渉が発生するため、1個のPPBキューに対応させるプログラムの数が一定数を超えた場合には、プログラムをアンロードしてよい。また、プログラムに割り当てるメモリが不足するとき、あるいは余裕がなくなった場合に、プログラムをアンロードしてよい。
【0069】
図9は、各インタフェース151の演算処理回路156が行うパケット転送処理(PPBキュー選択処理)の手順を示す。パケット転送処理において、パケット処理ボード(PPB)111及びパケット処理ボード111内のPPBキューが選択されて、インタフェース151内のパケットが選択されたPPBキューに転送される。パケット転送処理が行われるj番目のインタフェース151をNIF#jとする。パケット転送処理は、インタフェースNIF#j内の全てのNIFキュー(入力キュー)qjk(ここでk=0、1、…、K−1)について並列に実行される。すなわち、各インタフェース151について、パケット転送処理は、並列的に、K回(図4ではK=2)実行される。
【0070】
ステップS801において、まず、パケット処理ボード(PPB)111の番号iがゼロに設定され(i=0)、パケット処理ボード111内の入力キュー(PPBキュー)の番号xをゼロに設定する(x=0)。
【0071】
ステップS802において、転送可能判定処理として、QAVAILk[(i・L)+x]が1であり、且つ、QLEN[(i・L)+x]が所定値(例えば2)より小さいか判定される。QAVAILk[(i・L)+x]が1であり、且つ、QLEN[(i・L)+x]が所定値より小さい場合に、ルーチンはステップS803に進み、そうでない場合に、ルーチンはステップS804に進む。ここで、QAVAILk[]は、k番目のNIFキューqjkのパケットを処理可能なPPBキューを示すビットベクトルQAVAILkにおいて、上位から[]番目のビットを示す。k番目のNIFキューqjkのパケットをi番目のパケット処理ボード111のx番目のPPBキューに転送すれば、プログラムによって処理可能な場合に、QAVAILk[(i・L)+x]は1となり、処理不能な場合に、QAVAILk[(i・L)+x]は0にとなる。また、QLEN[]は、負荷テーブル153の上位から[]番目の要素(負荷)を示す。QLEN[]は、負荷を代表する値であり、ここではPPBキューに含まれるパケットの数である。
【0072】
ステップS803において、転送処理として、NIFキューqjkから先頭のパケットが取り出されて、i番目のパケット処理ボード111内のx番目のPPBキューQixに転送される。
【0073】
ステップS804において、i番目のパケット処理ボード111内の全てのPPBキューについて、S802の転送可能判定処理が終了したか判定される。即ち、パケット処理ボード111内のPPBキューの個数をLとして、x=L−1であるか判定される。x=L−1でない場合、S805で番号xが1増加して、次のPPBキューについて、S802の処理が行われる。これにより、i番目のパケット処理ボード111内の全てのPPBキュー(x=0、1、…、L−1)について、S802の転送可能判定処理が行われる。一方、x=L−1である場合、ルーチンはステップS806に進む。
【0074】
ステップS806において、全てのパケット処理ボード111について、S802の転送可能判定処理が終了したか判定される。即ち、パケットストリーム処理装置101内のパケット処理ボード111の個数をNとして、i=N−1であるか判定される。i=N−1でない場合、S807で番号iが1増加して、次のパケット処理ボードについて、S802の処理が行われる。これにより、パケットストリーム処理装置101内の全てのパケット処理ボード111(i=0、1、…、N−1)について、S802の処理が行われる。i=N−1である場合、ルーチンは終了する。
【0075】
簡単な例として、k=1、L=2、N=2、且つQAVAIL1=(1001)の場合について説明すると、QAVAIL1[0]=1であるためQLEN[0]<所定値(例えば2)であれば、NIFキュー154b(qj1)の先頭のパケットがPPBキューQ00に転送され、パケットの識別子SIDに対応するプログラム(PPB#0にロードされている)により処理される。QAVAIL1[1]=0、QAVAIL1[2]=0であるためQLEN[1]とQLEN[2]に関わらず、PPBキューQ01とQ10にNIFキュー154b(qj1)のパケットは転送されない。QAVAIL1[3]=1であるためQLEN[3]<所定値であれば、NIFキュー154b(qj1)の次の先頭のパケットはPPBキューQ11に転送され、パケットの識別子SIDに対応するプログラム(PPB#1にロードされている)により処理される。
【0076】
パケット転送処理において、利用可能なPPBキューのリストQAVAILが複数のPPBキューの表示(即ち1)を含んでいる場合、一つのサービス識別子SIDに関するパケットが各PPBキューに分散される必要がある。そのための最も単純な方法として上記のようなラウンドロビンスケジューリングによって、負荷が所定値より低いPPBキューを順に使用してパケットを転送することができる。一方、負荷テーブル153の負荷が低いPPBキュー(或いはパケット処理ボード)により多くのパケットを転送することもできる。例えば、負荷の値により単調減少する関数によって重みをつけ、重みに応じた量のパケットをPPBキューに転送することもできる。
【0077】
図10を参照して、インタフェース151に到着したパケットをパケット処理ボード111のNPUに転送する転送処理をさらに説明する。まず、インタフェース151に到着したパケットに対して、キュー振り分けテーブル152(qDT)が使用されて、パケットに含まれる識別子(SID)からパケットが入力されるNIFキューの番号(又は識別子)が選択される。選択された番号を有するNIFキューがNIFキュー154aであれば、パケットはNIFキュー154aに登録される。図9の手順にしたがって、各NIFキューからパケット処理ボード111内のPPBキューにパケットが転送される。従って、NIFキュー154a内のパケットも転送される。図10において、転送先がPPB#0のPPBキュー114aだと仮定されている。パケットは、転送後、PPBキュー114aに登録される。パケット処理ボード111において、処理を行っていないNPUまたは処理を終了したNPUが、いずれかのPPBキューの先頭からパケットを1個とりだして処理する。各NPUは、この動作を反復する。
【0078】
本実施形態によると、インタフェース(NIF)151は、スイッチ181を通じて複数のパケット処理部111に接続し、各パケットとこれを処理可能なパケット処理部111の情報とを対応づけるための対応付け情報(例えば、キューリストQAVAIL)を格納し、対応付け情報において第1のパケット処理部の情報に対応付けられたパケットを第1のパケット処理部(例えばPPB#0)に転送する。制御ボード141(制御部)は、第1のパケット処理部が閾値以上の高負荷であると判定される場合(S610)に、対応付け情報において第1のパケット処理部で処理可能なパケットを第2のパケット処理部(例えば、PPB#1)の情報にも対応付けるよう対応付け情報を更新する(S414、S613)。そして、インタフェース151は、更新された対応付け情報において第2のパケット処理部(PPB#1)の情報に対応付けられたパケットを第2のパケット処理部に転送する。
【0079】
これにより、第1のパケット処理部の負荷が高くなることに応じて、第1のパケット処理部で処理可能なパケットが、第2のパケット処理部でも処理できるようになる。従って、あるサービスに関するパケットを処理するパケット処理部の数を負荷に応じて動的に増減させることができ、柔軟な負荷分散ができる。また、インタフェース151が対応付け情報を有するため、高速にパケット処理部にパケットが振り分けられ、ノード装置においてパケットの高速処理が可能になる。
【0080】
インタフェース151は、各パケットに含まれるべき識別子(SID)ごとに対応付け情報(キューリストQAVAIL)を備える。インタフェース151は、第1の識別子を含むパケットを、第1の識別子に関する対応付け情報(例えばQAVAIL0)において対応付けられた第1のパケット処理部に転送する。制御ボード141は、第1の識別子を含むパケットを第2のパケット処理部の情報にも対応付けるよう第1の識別子に関する対応付け情報(例えばQAVAIL0)を更新する。インタフェース151は、第1の識別子を含むパケットを第2のパケット処理部に転送する。
【0081】
サービスを識別子で特定するような場合に、識別子をパケットに含めて、インタフェース151の識別子ごとの対応付け情報において、その識別子を有するパケットとパケット処理部の情報とを対応付ける。これにより、特定のサービスを受けるべきパケットごとに、処理の負荷を複数のパケット処理部に分散できる。
【0082】
第1のパケット処理部は、第1の識別子を含むパケットを処理する第1のプログラムを備える。制御ボード141は、第1のパケット処理部が高負荷である場合に、第1のプログラムを第2のパケット処理部にロードする(S412、S613)。第2のパケット処理部は、第1の識別子を含むパケットを第1のプログラムによって処理する。これにより、あるパケット処理部が高負荷である場合に、そのパケット処理部で実行されるプログラムが他のパケット処理部でも実行されるようになり、プログラムの実行による負荷が分散される。
【0083】
制御ボード141は、第2のパケット処理部を低負荷のパケット処理部に設定する(S411、S611)。制御ボード141は、第1のプログラムを第2のパケット処理部にロードする場合に、第2パケット処理部から第2のプログラムを削除する(S612)。これにより、第2パケット処理部から第2のプログラムが占有していたメモリが解放され、第1のプログラムを第2パケット処理部のメモリにロードできる。なお、第2パケット処理部が低負荷であることから、パケットを第2パケット処理部において処理できなくなっても悪影響は少ない。さらに、制御ボード141は、前記第2のプログラムが処理するパケットに含まれる第2の識別子に関する対応付け情報において、前記第2パケット処理部の情報を削除する(S513)。これにより、削除された第2のプログラムが処理すべきパケットが第2パケット処理部に転送されなくなる。
【0084】
制御ボード141は、インタフェース151が有する対応付け情報と同じ対応付け情報を格納する。このため、制御ボード141は、対応付け情報に基づいて、パケット処理部に送られるパケットを処理するために必要なプログラムをパケット処理部にロードできる。
【0085】
各パケット処理部は、その負荷の情報をインタフェース151に送り、インタフェース151は、負荷の情報を格納する負荷テーブル153を備える。これにより、インタフェース151は、対応付け情報に基づいてパケット処理可能なパケット処理部の中から低負荷のパケット処理部を高速に見つけ出して(S802)、この低負荷のパケット処理部にパケットを転送できる。負荷の情報は、各パケット処理部の各キューに溜まったパケットの数であってよい。これにより、簡便に負荷が把握できる。
【0086】
<変形例1>
前記の実施形態において、パケット処理ボード111内のリソースの配分をプログラムローダ144とインタフェース151において決定していた。しかし、プログラムローダ144とインタフェース151において、パケット処理ボード111を単位として管理・制御し、パケット処理ボード111内のリソース配分は、パケット処理ボード111において決定してもよい。すなわち、パケット処理ボード111に入力されたパケットは、パケット処理ボード111内できめられた規則にしたがって、パケット処理ボード111内のPPBキューに配分される。そして、NPUがアイドルになった場合に、決められたスケジューリングアルゴリズムにしたがってPPBキューを選択しパケットを取り出し、そのパケットの識別子で指定されたプログラムをNPUにおいて実行する。この場合に、ビットベクトルQAVAILは、PPBキューのリストではなく、パケットを処理可能なパケット処理ボード111のリストとしてよい。この場合に、ビットベクトルQAVAILのビットが、先頭(左)から図11(b)のように、パケット処理ボード111の番号(ポート番号でよい)や識別子に対応付けられてよい。
【0087】
<変形例2>
前記の実施形態において、制御ボード141は、集中的に負荷監視を行った。しかし、負荷監視を分散的に行うことも可能である。すなわち、各パケット処理ボード111が負荷監視を行い、負荷が高い場合に、そのパケット処理ボード111にパケットを送信する全てのインタフェース151に対して、パケット処理ボード111が指令を発して、そのパケット処理ボード111へのパケットの送信を停止させる。このため、前記の実施形態においては制御ボードだけが持っていたプログラム管理テーブル146を各パケット処理ボード111が保持し、分散的に管理する。従って、各パケット処理ボード111はそれが使用するプログラムだけをプログラム管理テーブルによって管理する。
【0088】
<変形例3>
なお、前記した実施形態において、パケット処理ボード111の負荷としてPPBキューの負荷に基づいて、インタフェース151からのパケットの転送先が決定されていた。しかし、プログラムの出力先のインタフェース151の負荷すなわち輻輳の状態も加味して転送先をきめることも可能である。すなわち、各インタフェース151は、まずプログラムロード要求時にパケット処理ボード111上のプログラムごとにその出力先のインタフェース151を把握する。そのために、プログラムロード要求が出力先のインタフェース151の情報を含んでいてもよいし、プログラムの内容からそれを見つけてもよい。そうやって得られた出力先のインタフェース151の情報と、出力先のインタフェース151から定期的に報告される輻輳情報を各インタフェース151が保管し、出力先のインタフェース151が輻輳しているプログラムが処理するパケットはPPBキューに送信するのを遅延させる。これによって、出力先インタフェース151の輻輳による出力パケットの廃棄を減少させることができる。
【0089】
本発明は前記の実施形態とその変形例に限定されずに、その技術的な思想の範囲内において種々の変更がなしうることは明白である。
【符号の説明】
【0090】
10 ネットワーク
12 ネットワーク管理装置
14、15 ノード装置
101 パケットストリーム処理装置
111 パケット処理ボード(PPB)
114a、114b 入力キュー(PPBキュー)
141 制御ボード(CB)
144 プログラムローダ
145 負荷テーブル
146 プログラムテーブル
147 プログラム格納部
151 ネットワークインタフェース(NIF)
152 振り分けテーブル(qDT)
153 負荷テーブル
154a、154b 入力キュー(NIFキュー)
155a、155b キューリスト(QAVAIL)
181 スイッチファブリック

【特許請求の範囲】
【請求項1】
ネットワークに接続するノード装置であって、
複数のパケット処理部と、
スイッチを通じて前記複数のパケット処理部に接続し、各パケットとこれを処理可能なパケット処理部の情報とを対応づけるための対応付け情報を格納し、前記対応付け情報において第1のパケット処理部の情報に対応付けられたパケットを前記第1のパケット処理部に転送するインタフェース部と、
前記第1のパケット処理部が閾値以上の負荷であると判定される場合に、前記対応付け情報において前記第1のパケット処理部で処理可能なパケットを第2のパケット処理部の情報にも対応付けるよう前記対応付け情報を更新する制御部と、を備え、
前記インタフェース部は、前記更新された対応付け情報において前記第2のパケット処理部の情報に対応付けられたパケットを前記第2のパケット処理部に転送することを特徴とするノード装置。
【請求項2】
前記インタフェース部は、各パケットに含まれるべき識別子ごとに前記対応付け情報を備え、
前記インタフェース部は、第1の識別子を含むパケットを、前記第1の識別子に関する対応付け情報において対応付けられた前記第1のパケット処理部に転送し、
前記制御部は、前記第1の識別子を含むパケットを前記第2のパケット処理部の情報にも対応付けるよう前記第1の識別子に関する対応付け情報を更新し、
前記インタフェース部は、前記第1の識別子を含むパケットを前記第2のパケット処理部に転送することを特徴とする請求項1に記載のノード装置。
【請求項3】
前記第1のパケット処理部は、前記第1の識別子を含むパケットを処理する第1のプログラムを備え、
前記制御部は、前記第1のパケット処理部が前記閾値以上の負荷である場合に、前記第1のプログラムを前記第2のパケット処理部にロードし、
前記第2のパケット処理部は、前記第1の識別子を含むパケットを前記第1のプログラムによって処理することを特徴とする請求項2に記載のノード装置。
【請求項4】
前記制御部は、前記第1のプログラムを前記第2のパケット処理部にロードする場合に、前記第2のパケット処理部から第2のプログラムを削除し、前記第2のプログラムが処理するパケットに含まれる第2の識別子に関する対応付け情報において、前記第2のパケット処理部の情報を削除することを特徴とする請求項3に記載のノード装置。
【請求項5】
前記制御部は、前記インタフェース部が有する前記対応付け情報と同じ対応付け情報を格納することを特徴とする請求項1に記載のノード装置。
【請求項6】
各パケット処理部は、その負荷の情報を前記インタフェース部に送り、
前記インタフェース部は、前記負荷の情報を格納する負荷テーブルを備えることを特徴とする請求項1に記載のノード装置。
【請求項7】
前記負荷の情報は、各パケット処理部の各キューに溜まったパケットの数であることを特徴とする請求項6に記載のノード装置。
【請求項8】
ネットワークに接続するノード装置と、前記ノード装置に対して少なくとも第1のプログラムを格納するよう指示する管理装置と、を備えたシステムであって、
前記ノード装置は、
複数のパケット処理部と、
スイッチを通じて前記複数のパケット処理部に接続し、各パケットとこれを処理可能なパケット処理部の情報とを対応づけるための対応付け情報を格納し、前記対応付け情報において第1のパケット処理部の情報に対応付けられたパケットを前記第1のプログラムによって処理するよう前記第1のパケット処理部に転送するインタフェース部と、
前記第1のパケット処理部が閾値以上の負荷であると判定される場合に、前記対応付け情報において前記第1のパケット処理部で処理可能なパケットを第2のパケット処理部の情報にも対応付けるよう前記対応付け情報を更新する制御部と、を備え、
前記制御部は、前記第1のプログラムを前記第2のパケット処理部にロードし、
前記インタフェース部は、前記更新された対応付け情報において前記第2のパケット処理部の情報に対応付けられたパケットを前記第2のパケット処理部に転送することを特徴とするシステム。
【請求項9】
前記インタフェース部は、各パケットに含まれるべき識別子ごとに前記対応付け情報を備え、
前記インタフェース部は、第1の識別子を含むパケットを、前記第1の識別子に関する対応付け情報において対応付けられた前記第1のパケット処理部に転送し、
前記制御部は、前記第1の識別子を含むパケットを前記第2のパケット処理部の情報にも対応付けるよう前記第1の識別子に関する対応付け情報を更新し、
前記インタフェース部は、前記第1の識別子を含むパケットを前記第2のパケット処理部に転送することを特徴とすることを特徴とする請求項8に記載のシステム。
【請求項10】
前記制御部は、前記第1のプログラムを前記第2のパケット処理部にロードする場合に、前記第2のパケット処理部から第2のプログラムを削除し、前記第2のプログラムが処理するパケットに含まれる第2の識別子に関する対応付け情報において、前記第2のパケット処理部の情報を削除することを特徴とする請求項9に記載のシステム。
【請求項11】
前記制御部は、前記インタフェース部が有する前記対応付け情報と同じ対応付け情報を格納することを特徴とする請求項8に記載のシステム。
【請求項12】
各パケット処理部は、その負荷の情報を前記インタフェース部に送り、
前記インタフェース部は、前記負荷の情報を格納する負荷テーブルを備えることを特徴とする請求項8に記載のシステム。
【請求項13】
前記負荷の情報は、各パケット処理部の各キューに溜まったパケットの数であることを特徴とする請求項12に記載のシステム。
【請求項14】
ネットワークに接続するノード装置において実行されるパケット処理方法であって、
前記ノード装置は、
複数のパケット処理部と、
スイッチを通じて前記複数のパケット処理部に接続し、各パケットとこれを処理可能なパケット処理部の情報とを対応づけるための対応付け情報を格納するインタフェース部と、を有し、
前記パケット処理方法は、
前記対応付け情報において第1のパケット処理部の情報に対応付けられたパケットを前記第1のパケット処理部に転送するステップと、
前記第1のパケット処理部が閾値以上の負荷であると判定される場合に、前記対応付け情報において前記第1のパケット処理部で処理可能なパケットを第2のパケット処理部の情報にも対応付けるよう前記対応付け情報を更新するステップと、
前記更新された対応付け情報において前記第2のパケット処理部の情報に対応付けられたパケットを前記第2のパケット処理部に転送するステップと、
を含むことを特徴とするパケット処理方法。

【図1】
image rotate

【図2】
image rotate

【図3】
image rotate

【図4】
image rotate

【図5】
image rotate

【図6】
image rotate

【図7】
image rotate

【図8】
image rotate

【図9】
image rotate

【図10】
image rotate

【図11】
image rotate


【公開番号】特開2013−62680(P2013−62680A)
【公開日】平成25年4月4日(2013.4.4)
【国際特許分類】
【出願番号】特願2011−199737(P2011−199737)
【出願日】平成23年9月13日(2011.9.13)
【出願人】(000005108)株式会社日立製作所 (27,607)
【Fターム(参考)】