(57)【要約】【課題】迅速にパケットの受信処理を行なうパケット処理装置を得ること。【解決手段】複数のＣＰＵａ１〜ａｎでＮＩＣ２０を介して外部装置からのパケットを受信するパケット処理装置において、ＮＩＣ２０からＤＭＡ転送されるパケットを受信するＤＭＡ受信バッファｂ１〜ｂｎをカーネル空間内に複数設定するＯＳ４０と、ＮＩＣ２０からのパケットをＯＳ４０からの指示に基づいた所定のＤＭＡ受信バッファで受信して上位レイヤ処理部６２へ転送するパケット受信処理部１と、を備え、パケット受信処理部１は、ＮＩＣ２０から次のＤＭＡ転送が開始されるまでに、次に割込みを通知するＣＰＵの設定と次にパケットを受信するＤＭＡ受信バッファの設定を切替えておき、ＮＩＣ２０が次のＤＭＡ転送を行なうと、設定しておいたＣＰＵに割込み通知を行なうとともに設定しておいたＤＭＡ受信バッファでパケットを受信する。【選択図】        図１
2008257642.tif 000002
【特許請求の範囲】
【請求項１】
複数のプロセッサでネットワークインタフェイスデバイスを介して外部装置からのパケットを受信するパケット処理装置において、
前記ネットワークインタフェイスデバイスからＤＭＡ転送されるパケットを受信するバッファをＤＭＡ受信バッファとしてカーネル空間内に複数設定するＯＳを記憶するＯＳ記憶部と、
前記ネットワークインタフェイスデバイスからＤＭＡ転送されるパケットを、前記ＯＳからの指示に基づいた所定の前記ＤＭＡ受信バッファで受信して上位レイヤ側へ転送するパケット受信処理部と、
を備え、
前記パケット受信処理部は、
前記ネットワークインタフェイスデバイスからＤＭＡ転送のための割込み通知を受けた後であってかつ次のＤＭＡ転送が開始されるまでに、次に割込みを通知するプロセッサの設定を現在設定されているプロセッサとは異なる他のプロセッサに切替えておくとともに次にＤＭＡ転送されるパケットを受信するＤＭＡ受信バッファの設定を現在設定されているＤＭＡ受信バッファとは異なる他のＤＭＡ受信バッファに切替えておき、前記ネットワークインタフェイスデバイスが次のＤＭＡ転送を行なった際に、設定しておいた前記他のプロセッサに割込み通知を行なうとともに設定しておいた前記他のＤＭＡ受信バッファで前記パケットを受信することを特徴とするパケット処理装置。
【請求項２】
前記パケット受信処理部は、前記ＤＭＡ受信バッファで受信したパケットが転送されるキューの順番で、前記キューから前記パケットを取得して上位レイヤ側へ転送する制御モジュールを有することを特徴とする請求項１に記載のパケット処理装置。
【請求項３】
前記パケット受信処理部は、次に割込みを通知するプロセッサの設定を現在設定されているプロセッサとは異なる他のプロセッサに切替えておく際に、前記プロセッサのうちパケットの受信処理を行っていないプロセッサであってかつ処理負荷が最も低いプロセッサを選択して前記他のプロセッサに設定することを特徴とする請求項１または２に記載のパケット処理装置。
【請求項４】
前記ネットワークインタフェイスデバイスからＤＭＡ転送のための割込み通知を受けるとともに、前記ＯＳからの指示に基づいた所定のプロセッサに前記ネットワークインタフェイスデバイスからの割込みを通知する割込み通知機構をさらに備え、
前記ネットワークインタフェイスデバイスは、予め前記ＯＳから与えられた情報に基づいて次に割込みを通知するプロセッサの設定を切替え、前記割込み通知機構は、予め前記ＯＳから与えられた情報に基づいて次にＤＭＡ転送されるパケットを受信するＤＭＡ受信バッファの設定を切替えることを特徴とする請求項１〜３のいずれか１つに記載のパケット処理装置。
【請求項５】
前記ネットワークインタフェイスデバイスは、前記各ＤＭＡ受信バッファに対して所定数のパケットずつラウンドロビンでＤＭＡ転送し、ＤＭＡ転送が完了した後に前記各プロセッサに割込み通知を行なうことを特徴とする請求項１または２に記載のパケット処理装置。
【請求項６】
前記制御モジュールは、前記キューにポーリングを行なうとによって前記各キューを監視し、この監視結果に基づいてパケット受信の順序制御を行うことを特徴とする請求項２〜４のいずれか１つに記載のパケット処理装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、複数のプロセッサを用いてネットワークインタフェイスデバイスからパケットを受信するパケット処理装置に関するものである。
【背景技術】
【０００２】
近年、インターネットを利用した通信サービスが次々と登場し、アクセス網およびコア網におけるＩＰトラヒック量は年々増加している。このＩＰトラヒック量の増加に伴って、イーサネット（登録商標）規格(ＩＥＥＥ（Institute of Electrical and Electronics Engineers）８０２．３)に代表される有線ネットワークや、ＷｉＭＡＸ（Worldwide Interoperability for Microwave Access）（ＩＥＥＥ８０２．１６）に代表される無線ネットワークにおいて、伝送帯域の高速化の検討が進められている。特に有線通信では、１００Ｍｂｐｓや１Ｇｂｐｓ以上の１０Ｇｂｐｓのイーサネット（登録商標）規格が策定され、既に１０Ｇｂｐｓに対応したネットワークインタフェイスデバイス（以下、ＮＩＤという）が製品化されている。
【０００３】
ところで、ＣＰＵ（Central Processing Unit）もクロックアップ、マルチコアプロセッサ／マルチプロセッサによる高性能化が進んでいるが、ＯＳ（Operating System）を搭載したＣＰＵおよびＮＩＤで構成される通信装置では、ＣＰＵとＮＩＤとの間のパケット送受信がボトルネックとなり、１０Ｇｂｐｓのような高速伝送帯域を収容することが困難である。
【０００４】
汎用ＯＳを搭載したＣＰＵおよびＮＩＤで構成された従来の通信装置におけるパケット受信処理について説明する。この従来の通信装置におけるパケット受信処理では、まずＯＳが割り込みを通知するＣＰＵを決定するとともに、ＮＩＤからＤＭＡ（Direct Memory Access）転送されてくるパケットを格納するＤＭＡ受信バッファをカーネル空間内に用意する。ＰＨＹ（physical layer）デバイスから受信したパケットは、ＭＡＣ（Media Access Control）ヘッダ、ＦＣＳ（Frame Check Sequence）などによってフィルタリングされ、ＮＩＤ内のバッファからＤＭＡ受信バッファに転送される。その後、ＮＩＤは、パケットの到着をＣＰＵ（ＯＳ）側に通知するため、ＨＷ（Hard Ware）割込みをＣＰＵに対して通知する。
【０００５】
ＣＰＵ側では、ＮＩＤからのＨＷ割込みに対応する割込みハンドラとネットワークドライバーを起動することによって、パケットの受信を確認し、その後上位プロトコルスタックにパケット処理の制御を移行させている（例えば、非特許文献１参照）。また、ＨＷ割込みを複数のＣＰＵに振り分けることによって、パケットの受信処理を並列化する方法も提案されている（例えば、特許文献１参照）。
【０００６】
【非特許文献１】K. Salah, K. El-Badawi, "Performance evaluation of interrupt-driven kernels in gigabit networks," Global Telecommunications Conference, 2003. GLOBECOM '03. IEEE, pp. 3953 - 3957
【特許文献１】特開平８−３６４９８号公報（第３頁、図１）
【発明の開示】
【発明が解決しようとする課題】
【０００７】
しかしながら、上記前者の従来技術では、パケット受信処理のシーケンスにおいて、ＯＳによる割込みハンドラ処理やネットワークドライバー処理時のスレッド生成や割当て、ＯＳによるコンテキストスイッチの発生などによって、受信処理の遅延が発生しパケット受信処理のボトルネックになるという問題があった。
【０００８】
また、上記前者および後者の従来技術では、カーネル空間内にＤＭＡ受信バッファが１つしか用意されていないので、パケット受信の際、ＤＭＡ転送を完了してＣＰＵがＨＷ割込みを受け取り、ネットワークドライバーによるパケットの受信処理が完了した後にしかＮＩＤは次のＤＭＡ転送を開始することができない。このため、ＨＷ割込みを複数のＣＰＵに振り分けるだけでは受信処理を並列化することができないという問題点があった。
【０００９】
本発明は、上記に鑑みてなされたものであって、迅速にパケットの受信処理を行なうパケット処理装置を得ることを目的とする。
【課題を解決するための手段】
【００１０】
上述した課題を解決し、目的を達成するために、本発明は、複数のプロセッサでネットワークインタフェイスデバイスを介して外部装置からのパケットを受信するパケット処理装置において、前記ネットワークインタフェイスデバイスからＤＭＡ転送されるパケットを受信するバッファをＤＭＡ受信バッファとしてカーネル空間内に複数設定するＯＳを記憶するＯＳ記憶部と、前記ネットワークインタフェイスデバイスからＤＭＡ転送されるパケットを、前記ＯＳからの指示に基づいた所定の前記ＤＭＡ受信バッファで受信して上位レイヤ側へ転送するパケット受信処理部と、を備え、前記パケット受信処理部は、前記ネットワークインタフェイスデバイスからＤＭＡ転送のための割込み通知を受けた後であってかつ次のＤＭＡ転送が開始されるまでに、次に割込みを通知するプロセッサの設定を現在設定されているプロセッサとは異なる他のプロセッサに切替えておくとともに次にＤＭＡ転送されるパケットを受信するＤＭＡ受信バッファの設定を現在設定されているＤＭＡ受信バッファとは異なる他のＤＭＡ受信バッファに切替えておき、前記ネットワークインタフェイスデバイスが次のＤＭＡ転送を行なった際に、設定しておいた前記他のプロセッサに割込み通知を行なうとともに設定しておいた前記他のＤＭＡ受信バッファで前記パケットを受信することを特徴とする。
【発明の効果】
【００１１】
この発明によれば、ＤＭＡ転送されるパケットを受信するＤＭＡ受信バッファをＯＳがカーネル空間内に複数設定するので、ＤＭＡ転送されるパケットを複数のＤＭＡ受信バッファで並列して受信することができ、迅速にパケットの受信処理を行なうことが可能になるという効果を奏する。
【発明を実施するための最良の形態】
【００１２】
以下に、本発明に係るパケット処理装置の実施の形態を図面に基づいて詳細に説明する。なお、この実施の形態によりこの発明が限定されるものではない。
【００１３】
実施の形態１．
図１は、本発明の実施の形態１に係るパケット処理装置の構成を示すブロック図である。図１では、パケット処理装置（通信装置）１０１の構成とともに、パケット受信処理の流れを示している。
【００１４】
パケット処理装置１０１は、ＩＰパケットなどの通信パケットの転送や上位レイヤプロトコルの処理をＯＳ上のアプリケーションで実行するネットワーク装置である。本実施の形態では、パケット処理装置１０１は、複数のＤＭＡ受信バッファを用いてパケットの受信処理を行なう。
【００１５】
パケット処理装置１０１は、物理デバイス１０、ネットワークインタフェイスデバイスであるＮＩＣ（Network Interface Card）２０、割込み通知機構３０、ＯＳ記憶部４、パケット受信処理部１を含んで構成されている。
【００１６】
物理デバイス１０は、外部ネットワーク装置（図示せず）との間で物理層（ＰＨＹレイヤ）を介してＩＰパケット（フレーム）を送受信するデバイスである。物理デバイス１０は、ＮＩＣ−ＰＨＹ間ＩＦ１５によってＮＩＣ２０と接続されている。
【００１７】
ＮＩＣ−ＰＨＹ間ＩＦ１５は、物理デバイス１０とＮＩＣとの間の通信インタフェイスであり、例えばＧＭＩＩ（Giga bit Media Independent Interface）、ＸＡＵＩ（10 Gigabit Attachment Unit Interface）、ＸＧＭＩＩ（10 Gigabit Media Independent Interface）などである。
【００１８】
ＮＩＣ２０は、汎用ネットワークインタフェイスカードやＡＳＩＣ／ＦＰＧＡ／ＮＰＵ（Application Specific Integrated Circuit／Field Programmable Gate Array／Network Processing Unit）などのパケット処理に特化したハードウェアネットワークインタフェイスデバイスである。ＮＩＣ２０は、物理デバイス１０からフレームを受信するとともに、フレームのパケット処理として主にＭＡＣレイヤ処理（イーサネット（登録商標）処理）などを行なう。
【００１９】
ＮＩＣ２０は、ＭＡＣレイヤ処理部（ＭＡＣ  Ｂｌｏｃｋ）２２とフレームバッファ２１を備えている。ＮＩＣ２０では、ＭＡＣレイヤ処理部２２が物理デバイス１０からのＩＰパケットに対してＭＡＣレイヤプロトコルに関する処理を行なう。フレームバッファ２１は、フレームデータを格納するバッファであり、ＭＡＣレイヤ処理部２２から送られてくるフレームを格納する。ＮＩＣ２０は、フレームバッファ２１に格納したフレームをパケットとして受信部５０にＤＭＡ転送する。
【００２０】
割込み通知機構３０は、ＮＩＣ２０および受信部５０との間でデータ（ＨＷ割込みなど）のやりとりを行う。割込み通知機構３０は、後述のＯＳ４０からの指示に基づいて、Ｉ／Ｏインタフェイスや種々のデバイス（ＮＩＣ２０）からのＨＷ割込みを各プロセッサ（後述のＣＰＵａ１〜ＣＰＵａｎ）に振り分ける処理を行なう。
【００２１】
ＯＳ記憶部４は、ＯＳ４０を記憶している。ＯＳ４０は、マルチコアプロセッサおよびマルチプロセッサ対応のＯＳであり、ＮＩＣ２０、割込み通知機構３０パケット受信処理部１を制御する。本実施の形態のＯＳ４０は、同一メモリ空間上に複数のＣＰＵを認識して使用できるよう構成されている。
【００２２】
パケット受信処理部１は、受信部５０、複数のキューｃ１〜ｃｎ、パケット集約処理部６０を備えている。受信部５０は、複数のプロセッサコア（プロセッサ）を有している。各プロセッサコアは、マルチコアプロセッサ／マルチプロセッサ対応のＣＰＵ、ネットワークドライバー、ＤＭＡ受信バッファを含んで構成されている。なお、本実施の形態では、受信部５０がマルチコアプロセッサである場合について説明する。
【００２３】
図１では、ＣＰＵａ１、ＤＭＡ受信バッファｂ１、ネットワークドライバーｄ１を有するプロセッサコア、ＣＰＵａ２、ＤＭＡ受信バッファｂ２、ネットワークドライバーｄ２を有するプロセッサコア、ＣＰＵａｎ（ｎは自然数）、ＤＭＡ受信バッファｂｎ、ネットワークドライバーｄｎを有するプロセッサコアなどによって受信部５０が構成されている場合を示している。
【００２４】
ＣＰＵａ１〜ａｎは、割込み通知機構３０からＨＷ割込みを通知を受けた場合に割込みハンドラを生成する。各ＣＰＵａ１〜ＣＰＵａｎに生成された割込みハンドラは、自らのＣＰＵに対応するネットワークドライバーｄ１〜ｄｎにＮＩＣ２０からＤＭＡ転送されてくるパケットの受信処理を行なわせる。本実施の形態では、各ＣＰＵａ１〜ａｎが割込み通知機構３０によって順番に指定され、割込み通知機構３０から順番にＨＷ割込み通知を受ける。
【００２５】
ＤＭＡ受信バッファｂ１〜ｂｎは、ＯＳ４０で認識しているＣＰＵメモリ空間内（受信部５０）でパケット（フレームデータ）を格納するバッファである。ＮＩＣ２０のフレームバッファ２１からＤＭＡ受信バッファｂ１〜ｂｎへは、例えばＣＰＵａ１〜ａｎが介在しないＤＭＡ転送によってパケットが転送される。
【００２６】
ネットワークドライバーｄ１〜ｄｎは、割込み通知機構３０からＣＰＵａ１〜ＣＰＵａｎの何れかへＨＷ割込み通知がされた後に、受信パケットの整合性をチェックしてパケットデータを上位レイヤ側（パケット集約処理部６０）に転送する。
【００２７】
キューｃ１〜ｃｎは、上位レイヤへの転送に使用されるパケットバッファキューであり、それぞれネットワークドライバーｄ１〜ｄｎに接続されている。また、キューｃ１〜ｃｎは、パケット集約処理部６０に接続されている。
【００２８】
パケット集約処理部６０は、パケット集約機構（Ｐａｃｋｅｔ  Ａｇｇｒｅｇａｔｉｏｎモジュール）６１、上位レイヤ処理部６２、１〜複数のＣＰＵ６３を有している。パケット集約機構６１（制御モジュール）は、パケットが転送されるキューの順番に基づいて各キューｃ１〜ｃｎに格納されているパケットを上位レイヤ処理部６２に転送する。パケット集約機構６１は、ネットワークドライバーｄ１から受信完了通知を受け取った後、パケットを上位レイヤ処理部６２に転送する。上位レイヤ処理部６２は、パケット集約機構６１から受信したパケットの上位レイヤ処理を行なう。ＣＰＵ６３は、パケット集約機構６１と上位レイヤ処理部６２を制御する。
【００２９】
つぎに、パケット処理装置１０１の動作手順について説明する。図２は、パケット処理装置の動作手順を示すフローチャートである。パケット処理装置１０１のＯＳ４０は、予め受信処理のみを行わせるＣＰＵとＤＭＡ受信バッファを複数個ずつ用意しておく。本実施の形態のＯＳ４０は、ＣＰＵａ１〜ａｎとＤＭＡ受信バッファｂ１〜ｂｎを用意しておく。
【００３０】
ＯＳ４０は、デバイス初期化時にＮＩＣ２０に対し、ＤＭＡ転送を行う受信バッファとしてカーネル空間内のＤＭＡ受信バッファｂ１を指定する。さらに、ＯＳ４０は、割込み通知機構３０に対し、ＮＩＣ２０からのＨＷ割込みを通知するＣＰＵとしてＣＰＵａ１を指定しておく（ステップＳ１１０）。
【００３１】
外部ネットワーク装置からのＩＰパケットは、物理デバイス１０で物理的な信号を受信・終端し、ＭＡＣレイヤ処理を行なうＮＩＣ２０へＮＩＣ−ＰＨＹ間ＩＦ１５（規定のインタフェイス）経由で送信する。ＮＩＣ２０は、物理デバイス１０からのＩＰパケットを受信する（ステップＳ１２０）。
【００３２】
ＮＩＣ２０では、ＭＡＣレイヤ処理部２２にてＭＡＣヘッダを解析するとともに、フレーム検証と、送信先・送信元アドレスの検証を行い、装置内上位レイヤに送信すべきフレームを自身のバッファ（フレームバッファ２１）に格納する（ステップＳ１３０）。
【００３３】
ＮＩＣ２０は、フレームバッファ２１に格納したフレームを、デバイス初期化時に指定されたカーネル空間内のＤＭＡ受信バッファｂ１へＤＭＡ転送する（ステップＳ１４０）。なお、カーネル空間内のＤＭＡ受信バッファへの１回でのＤＭＡ転送のパケット（フレーム）数はＮＩＣ２０の仕様・パラメータ設定に依存しており、複数のパケットをまとめてＤＭＡ転送してもよい。
【００３４】
ＮＩＣ２０は、ＤＭＡ転送を開始してから所定の時間を経過した後、またはＤＭＡ転送したパケットが所定のパケット数に達したら、割込み通知機構３０にＨＷ割込みを通知する（ステップＳ１５０）。割込み通知機構３０は、ＮＩＣ２０からＨＷ割込みの通知を受け取ると、ＯＳ４０に指定されたＣＰＵａ１に対してＨＷ割込みを通知する（ステップＳ１６０）。
【００３５】
ＣＰＵａ１は、ＨＷ割込みを受け取ると、割込みハンドラを生成する。このとき、ＯＳ４０は、割込み通知機構３０に対し、次回にＨＷ割り込みを通知するＣＰＵをＣＰＵａ２に変更させる。さらに、ＯＳ４０は、ＮＩＣ２０に対し、次にＤＭＡ転送を行う受信バッファをカーネル空間内のｂ１からＤＭＡ受信バッファｂ２に変更させる（ステップＳ１７０）。
【００３６】
換言すると、ＯＳ４０は、ＮＩＣ２０からＤＭＡ転送のための割込み通知を受けた後であってかつ次のＤＭＡ転送が開始されるまでに、次に割込みを通知するＣＰＵの設定を現在設定されているＣＰＵａ１とは異なる他のＣＰＵａ２に切替えておく。また、このとき、ＯＳ４０は次にＤＭＡ転送されるパケットを受信するＤＭＡ受信バッファの設定を現在設定されているＤＭＡ受信バッファｂ１とは異なる他のＤＭＡ受信バッファｂ２に切替えておく。
【００３７】
ＣＰＵａ２への切替えとＤＭＡ受信バッファｂ２への切替えが完了した後、ＮＩＣ２０は、ＤＭＡ受信バッファｂ２へのＤＭＡ転送を開始する。この後、ＣＰＵおよびＤＭＡ受信バッファは、ＨＷ割込みの通知後にラウンドロビンで変更されていく。すなわち、パケット処理装置１０１は、ステップＳ１１０〜１７０と同様の処理を繰り返す。具体的には、ＯＳ４０は、ＮＩＣ２０からＨＷ割込みを受け取るたびに、割込み通知機構３０に対し、ＨＷ割り込みを通知するＣＰＵをＣＰＵａ３、ＣＰＵａ４、ＣＰＵａｎの順番で変更させていく。また、ＯＳ４０は、ＮＩＣ２０に対し、ＤＭＡ転送を行う受信バッファをＤＭＡ受信バッファｂ３、ＤＭＡ受信バッファｂ４、ＤＭＡ受信バッファｂｎの順番で変更させていく。
【００３８】
換言すると、ＯＳ４０は、割込み通知機構３０に対し、ＨＷ割り込みを通知するＣＰＵをＣＰＵａｍ（ｍは１〜ｎの自然数）〜ａ（ｍ＋１）の順番で変更させていく。また、ＯＳ４０は、ＮＩＣ２０に対し、ＤＭＡ転送を行う受信バッファをＤＭＡ受信バッファｂｍ〜ｂ（ｍ＋１）の順番で変更させていく。
【００３９】
受信部５０では、割込みハンドラが、ネットワークドライバーｄ１に受信処理を行わせる。ネットワークドライバーｄ１は、ＤＭＡ受信バッファｂ１からフレーム情報を取得する。そして、ネットワークドライバーｄ１は、ＤＭＡ受信バッファｂ１のフレームを用いて、ＯＳ４０の内部で管理可能な形式であるパケットデータ（ソケットバッファ）を生成し、上位レイヤ転送向けのキューｃ１にキューイングする。ネットワークドライバーｄ１は、受信処理（キューｃ１へのキューイング）が完了すると、パケット集約処理部６０のパケット集約機構６１に対して、受信処理が完了したこと（受信完了通知）を通知する。
【００４０】
パケット集約機構６１へは、予めＯＳ４０からパケットが転送されるキューの順番の情報を与えておく。パケット集約機構６１は、ネットワークドライバーｄ１から受信完了通知を受け取ると、キューの順番の情報に基づいて各キューｃ１〜ｃｎに格納されているパケットを上位レイヤ側（上位レイヤ処理部６２）に転送する。このとき、パケット集約機構６１は、ＣＰＵ６３（ＳＷ（Soft Ware）割込みハンドラ）によって制御されている。
【００４１】
本実施の形態では、ＣＰＵａ１〜ＣＰＵａｎの順番でＨＷ割り込みを通知し、ＤＭＡ受信バッファｂ１〜ｂｎの順番でＤＭＡ転送を行う受信バッファを指定しているので、ＯＳ４０は、キューｃ１〜ｃｎの順番でパケットを転送させるようパケット集約機構６１に指示しておく。
【００４２】
パケット集約機構６１は、キューｃ１に格納されているパケットを上位レイヤ（上位レイヤ処理部６２）に転送する。このとき、パケット集約機構６１は、キューｃ１に格納されたパケットを上位レイヤに転送するまでは、キューｃ２〜キューｃｎに格納されているパケットを上位レイヤ処理部６２に転送しないこととする。
【００４３】
ＮＩＣ２０では、ＤＭＡ受信バッファｂ２へのＤＭＡ転送を完了した後、ＣＰＵａ２にＨＷ割り込みを通知する。そして、ＣＰＵａ２は、ＨＷ割込みを受け取ると、割込みハンドラを生成してネットワークドライバーｄ２にパケットの受信処理を行わせる。
【００４４】
換言すると、ＮＩＣ２０が次のＤＭＡ転送を行なった際に、次のＤＭＡ転送が開始されるまでに設定しておいたＣＰＵａ１とは異なる他のＣＰＵａ２に割込み通知を行なうとともに、次のＤＭＡ転送が開始されるまでに設定しておいたＤＭＡ受信バッファｂ１とは異なる他のＤＭＡ受信バッファｂ２でパケットを受信する。
【００４５】
この処理を繰り返すことによってＣＰＵａｎにＨＷ割り込みを通知すると、ＯＳ４０は、次にＨＷ割り込みを通知するＣＰＵをＣＰＵａ１に変更するとともに、ＤＭＡ受信バッファをＤＭＡ受信バッファａ１に変更する。
【００４６】
図３は、ＣＰＵによるパケットの受信処理の手順を説明するための図である。図３では、各ＣＰＵａ１〜ａｎの割込み処理（割込みハンドラの生成など）、ＨＷ割り込みを通知するＣＰＵとＤＭＡ受信バッファの切替処理、パケットの受信処理の処理タイミングを示している。
【００４７】
ＮＩＣ２０から受信部５０へ最初のＤＭＡ転送が行なわれると、割込み通知機構３０は、ＯＳ４０によって指定されたＣＰＵａ１に対してＨＷ割込みを通知する。ＣＰＵａ１は、ＨＷ割込みを受け取ると、割込みハンドラを生成する（割込み処理）。
【００４８】
ＯＳ４０は、次にＨＷ割り込みを通知するＣＰＵをＣＰＵａ１からＣＰＵａ２に変更するとともに、次にＤＭＡ転送を行う受信バッファをＤＭＡ受信バッファｂ１からＤＭＡ受信バッファｂ２に変更する（切替処理）。切替処理が完了すると、ＮＩＣ２０では、ＤＭＡ受信バッファｂ２へのＤＭＡ転送を開始し、ＣＰＵａ１の割込みハンドラでは、ネットワークドライバーｄ１にパケットの受信処理を行わせる。
【００４９】
ＣＰＵａ１の場合と同様に、ＮＩＣ２０から受信部５０へ次のＤＭＡ転送が行なわれると、割込み通知機構３０は、ＯＳ４０によって指定されたＣＰＵａ２に対してＨＷ割込みを通知する。ＣＰＵａ２は、ＨＷ割込みを受け取ると、割込みハンドラを生成する（割込み処理）。
【００５０】
ＯＳ４０は、次にＨＷ割り込みを通知するＣＰＵをＣＰＵａ２からＣＰＵａ３に変更するとともに、次にＤＭＡ転送を行う受信バッファをＤＭＡ受信バッファｂ２からＤＭＡ受信バッファｂ３に変更する（切替処理）。切替処理が完了すると、ＮＩＣ２０では、ＤＭＡ受信バッファｂ２へのＤＭＡ転送を開始し、ＣＰＵａ２の割込みハンドラでは、ネットワークドライバーｄ２にパケットの受信処理を行わせる。
【００５１】
ＣＰＵａ１，ａ２の場合と同様に、ＮＩＣ２０から受信部５０へ次のＤＭＡ転送が行なわれると、割込み通知機構３０は、ＯＳ４０によって指定されたＣＰＵａ３に対してＨＷ割込みを通知する。ＣＰＵａ３は、ＨＷ割込みを受け取ると、割込みハンドラを生成する（割込み処理）。
【００５２】
ＯＳ４０は、次にＨＷ割り込みを通知するＣＰＵをＣＰＵａ３から次のＣＰＵに変更するとともに、次にＤＭＡ転送を行う受信バッファをＤＭＡ受信バッファｂ３から次のＤＭＡ受信バッファに変更する（切替処理）。切替処理が完了すると、ＮＩＣ２０では、ＤＭＡ受信バッファｂ３へのＤＭＡ転送を開始し、ＣＰＵａ３の割込みハンドラでは、ネットワークドライバーｄ３にパケットの受信処理を行わせる。
【００５３】
この後、ＣＰＵａ１〜ａ３の場合と同様に、各ＣＰＵの割込み処理、ＨＷ割り込みを通知するＣＰＵとＤＭＡ受信バッファの切替処理、各ＣＰＵによるパケットの受信処理を繰り返す。
【００５４】
以上の動作によって、割込みベースのパケット受信の際に発生するＯＳ４０による割込みハンドラ処理、タスクスケジューリング処理、ネットワークドライバー処理の時間を短縮できる。これにより、高速パケットの受信処理を実現できる。
【００５５】
なお、ＮＩＣ２０によるＤＭＡ転送の開始タイミングと、ＣＰＵの割込みハンドラによるパケットの受信開始タイミングは、同じタイミングである必要はなく、タイミングがずれていてもよい。
【００５６】
このように実施の形態１によれば、カーネル空間内に複数のＤＭＡ受信バッファｂ１〜ｂｎを設けているので、先に割込みを受けたＣＰＵが受信処理を行なっている間に、次のＤＭＡ転送と次のＣＰＵへの割込み通知を行なうことができる。したがって、同種の割込みを複数のＣＰＵで並列処理することが可能となるので、迅速にパケットの受信処理を行なうことが可能となる。
【００５７】
また、パケット集約機構６１がパケットが転送されるキューの順番に基づいて各キューｃ１〜ｃｎに格納されているパケットを上位レイヤ処理部６２に転送するので、上位レイヤ処理部６２に転送するパケットの順序が逆転してしまうことを防ぐことが可能となる。
【００５８】
実施の形態２．
つぎに、図４を用いてこの発明の実施の形態２について説明する。実施の形態２では、パケットの受信処理を行っていないＣＰＵのうち処理負荷の小さなＣＰＵを選択してＨＷ割り込みを通知する。
【００５９】
図４は、本発明の実施の形態２に係るパケット処理装置の構成を示すブロック図である。図４では、パケット処理装置（通信装置）１０２の構成とともに、パケット受信処理の流れを示している。図４の各構成要素のうち図１に示す実施の形態１のパケット処理装置１０１と同一機能を達成する構成要素については同一番号を付しており、重複する説明は省略する。
【００６０】
パケット処理装置１０２は、パケット処理装置１０１が有する機能に加えて、ＣＰＵ負荷判別機構３１を有している。ＣＰＵ負荷判別機構３１は、ＣＰＵａ１〜ａｎと割込み通知機構３０に接続されており、各ＣＰＵａ１〜ａｎの負荷に関する情報（負荷情報）を管理する。この負荷情報には、各ＣＰＵａ１〜ａｎの負荷に関する情報に加えて、各ＣＰＵａ１〜ａｎが受信処理を行っているか否かの情報が含まれている。ＣＰＵ負荷判別機構３１は、割込み通知機構３０がＨＷ割り込みを通知するＣＰＵを選択する際に、負荷情報を割込み通知機構３０に送る。
【００６１】
つぎに、パケット処理装置１０２の動作手順について説明する。割込み通知機構３０がＨＷ割込みを通知するＣＰＵの変更処理以外は、図２で説明した実施の形態１のパケット処理装置１０１の処理手順と同様であるため、その説明は省略する。
【００６２】
パケット処理装置１０２がパケットの受信処理を行なう際に、ＣＰＵ負荷判別機構３１は、各ＣＰＵａ１〜ａｎの負荷情報を各ＣＰＵａ１〜ａｎから取得する。ＣＰＵ負荷判別機構３１は、取得した負荷情報を割込み通知機構３０に送信する。
【００６３】
割込み通知機構３０は、ＨＷ割り込みを通知するＣＰＵを選択する際に、受信処理を行っていないＣＰＵであって、且つＣＰＵ負荷の低いＣＰＵ（例えば処理負荷が最も低いＣＰＵ）を選択する。具体的には、割込み通知機構３０は、ＣＰＵ負荷判別機構３１が各ＣＰＵａ１〜ａｎから取得した負荷情報に基づいて、ＨＷ割り込みを通知するＣＰＵを選択する。
【００６４】
受信部５０では、パケット集約機構６１によって各キューｃ１〜ｃｎからパケットを受信する際の受信順序の制御処理として、パケット集約機構６１に特定のＣＰＵ６３を割当てる。そして、パケット集約機構６１は、各キューｃ１〜ｃｎにポーリングを行なうとによって各キューｃ１〜ｃｎの状態（パケットを格納しているか否か）を監視し、この監視結果（パケット受信に用いたキューの順番）に基づいてパケット受信の順序制御を行う。なお、本実施の形態では、パケット集約機構６１が各キューｃ１〜ｃｎへのポーリングを行なっているので、ネットワークドライバーｄ１は、キューｃ１〜ｃｎへのキューイングが完了した際に、パケット集約機構６１に対して受信完了通知を通知する必要がない。
【００６５】
例えば、パケット受信に用いたキューの順番がキューｃ１、キューｃ３の順番である場合、パケット集約機構６１は、キューｃ１からのパケットを上位レイヤ処理部６２に転送した後、キューｃ３からのパケットを上位レイヤ処理部６２に転送する。
【００６６】
なお、本実施の形態では、割込み通知機構３０が、各ＣＰＵａ１〜ａｎの負荷情報に基づいてＨＷ割り込みを通知するＣＰＵを選択したが、他の方法によってＨＷ割り込みを通知するＣＰＵを選択してもよい。
【００６７】
例えば、ＯＳ４０からＣＰＵの変更指示を受けずに割込み通知を行うＣＰＵを変更できる割込み通知機構３０と、ＯＳ４０からＤＭＡ受信バッファの変更指示を受けずにＤＭＡ受信バッファを変更できるＮＩＣ２０と、を用いる。
【００６８】
この場合、ＯＳ４０は、予めＨＷ割込み通知を行ってもよいＣＰＵａ１〜ａｎの情報を割込み通知機構３０に与えておく。また、ＯＳ４０はカーネル空間内に用意した複数のＤＭＡ受信バッファｂ１〜ｂｎの情報をＮＩＣ２０に与えておく。
【００６９】
ＮＩＣ２０は、ＤＭＡ転送を開始してから所定の時間を経過した後、またはＤＭＡ転送したパケットが所定のパケット数に達したら、割込み通知機構３０にＨＷ割込みを通知する。
【００７０】
ＮＩＣ２０は、割込み通知機構３０へＨＷ割込みの通知を行う際に、ＤＭＡ受信バッファｂ１〜ｂｎの情報に基づいて、ＤＭＡ転送を行うカーネル空間内のＤＭＡ受信バッファを他のＤＭＡ受信バッファ（次のＤＭＡ受信バッファ）に変更し、ＤＭＡ転送を開始する。このとき、ＮＩＣ２０は、ＣＰＵ負荷判別機構３１が取得する、各ＣＰＵａ１〜ａｎの負荷情報などに基づいて、次のＤＭＡ受信バッファを変更してもよい。
【００７１】
ＮＩＣ２０は、割込み通知機構３０へＨＷ割込みの通知を行う際に、例えば変更後のＤＭＡ受信バッファ（次のＤＭＡ受信バッファ）に関する情報を、割込み通知機構３０に通知しておく。
【００７２】
割込み通知機構３０は、ＮＩＣ２０からＨＷ割込みの通知を受け取ると、ＯＳ４０から与えられたＣＰＵａ１〜ａｎの情報、次のＤＭＡ受信バッファに関する情報に基づいて、次回にＨＷ割り込みを通知するＣＰＵを他のＣＰＵ（次のＣＰＵ）変更する。
【００７３】
具体的には、割込み通知機構３０は、次のＤＭＡ受信バッファに対応するＣＰＵを、次回にＨＷ割り込みを通知するＣＰＵに設定する。例えば、次のＤＭＡ受信バッファがＤＭＡ受信バッファｂ３である場合、割込み通知機構３０は、ＤＭＡ受信バッファｂ３に対応するＣＰＵａ３を次回にＨＷ割り込みを通知するＣＰＵに設定する。
【００７４】
なお、割込み通知機構３０が次回にＨＷ割り込みを通知するＣＰＵを決定するとともに、決定したＣＰＵの情報をＮＩＣ２０に送信してもよい。この場合、ＮＩＣ２０は、割込み通知機構３０によって決定されたＣＰＵの情報に対応するＤＭＡ受信バッファを次のＤＭＡ受信バッファに設定する。
【００７５】
また、本実施の形態では、各ＤＭＡ受信バッファｂ１〜ｂｎに順番にＤＭＡ転送していく場合について説明したが、他の手順によってＤＭＡ受信バッファｂ１〜ｂｎにＤＭＡ転送してもよい。
【００７６】
例えば、ＨＷ割込みを受け取った際に複数のＣＰＵに同じＨＷ割込みを一斉に通知する割り込み通知機構３０と、ＯＳ４０からＤＭＡ受信バッファの変更指示を受けずにＤＭＡ受信バッファを変更できるＮＩＣ２０と、を用いる。
【００７７】
この場合、ＮＩＣ２０は、ＯＳ４０から用意された複数のＤＭＡ受信バッファに対して、所定のパケット数（例えば１パケット）ずつラウンドロビンでＤＭＡ転送を行う。具体的には、ＮＩＣ２０は、ＤＭＡ転送を開始してから所定の時間を経過した後、またはＤＭＡ転送したパケットが所定のパケット数（例えば全てのパケット）に達したら、割込み通知機構３０にＨＷ割込みを通知する。そして、割り込み通知機構３０は、ＨＷ割込みを受け取ると、ＤＭＡ受信バッファｂ１〜ｂｎに対応する各ＣＰＵａ１〜ａｎに対して一斉に割り込み通知を行う。
【００７８】
パケット集約機構６１では、各ネットワークドライバーｄ１〜ｄｎから受信完了通知を受け取ると、ＯＳ４０から与えられたキューの順番の情報に基づいて各キューｃ１〜ｃｎに格納されている先頭のパケットを上位レイヤ側（上位レイヤ処理部６２）にラウンドロビンでパケット転送していく。
【００７９】
このように実施の形態２によれば、プロセッサＣＰＵのうちパケットの受信処理を行っていないＣＰＵであってかつ処理負荷が低いＣＰＵを選択してＨＷ割込みの通知を行なうので、ＣＰＵへの負荷分散を行なうことが可能となり、迅速にパケット受信を行なうことが可能となる。
【００８０】
また、ＮＩＣ２０は、予めＯＳ４０から与えられた情報（カーネル空間内に用意したＤＭＡ受信バッファｂ１〜ｂｎの情報）に基づいて、次にパケットを受信させるＤＭＡ受信バッファを切替えるので、ＨＷ割込み通知を行なうたびにＯＳ４０からＮＩＣ２０へＤＭＡ受信バッファを変更させる指示を送る必要がなくなる。したがって、ＯＳ４０の処理負荷が低減される。
【００８１】
また、割込み通知機構３０は、予めＯＳ４０から与えられた情報（ＨＷ割込み通知を行ってもよいＣＰＵａ１〜ａｎの情報）に基づいて、次に割込み通知を行なうＣＰＵを切替えるので、ＨＷ割込み通知を行なうたびにＯＳ４０からＮＩＣ２０へＣＰＵを変更させる指示を送る必要がなくなる。したがって、ＯＳ４０の処理負荷が低減される。
【００８２】
また、ＮＩＣ２０は、各ＤＭＡ受信バッファｂ１〜ｂｎに対して所定数のパケットずつラウンドロビンでＤＭＡ転送し、ＤＭＡ転送が完了した後に各ＣＰＵａ１〜ａｎに割込み通知を行なうので、各ＤＭＡ受信バッファｂ１〜ｂｎと各ＣＰＵａ１〜ａｎの制御が容易になる。
【００８３】
また、パケット集約機構６１は、各キューｃ１〜ｃｎにポーリングを行なうとによって各キューｃ１〜ｃｎを監視し、この監視結果に基づいてパケット受信の順序制御するので、予めＯＳ４０からパケット集約機構６１にパケットが転送されるキューの順番の情報を与えておく必要がない。したがって、ＯＳ４０の負荷を低減することが可能となる。
【産業上の利用可能性】
【００８４】
以上のように、本発明に係るパケット処理装置は、ネットワークインタフェイスデバイスからのパケット受信に適している。
【図面の簡単な説明】
【００８５】
【図１】実施の形態１に係るパケット処理装置の構成を示すブロック図である。
【図２】パケット処理装置の動作手順を示すフローチャートである。
【図３】ＣＰＵによるパケットの受信処理の手順を説明するための図である。
【図４】実施の形態２に係るパケット処理装置の構成を示すブロック図である。
【符号の説明】
【００８６】
１  パケット受信処理部
４  ＯＳ記憶部
１０  物理デバイス
１５  ＮＩＣ−ＰＨＹ間ＩＦ
２０  ＮＩＣ
２１  フレームバッファ
２２  ＭＡＣレイヤ処理部
３０  割込み通知機構
３１  負荷判別機構
４０  ＯＳ
５０  受信部
６０  パケット集約処理部
６１  パケット集約機構
６２  上位レイヤ処理部
１０１，１０２  パケット処理装置
ａ１〜ａｎ，６３  ＣＰＵ
ｂ１〜ｂｎ  ＤＭＡ受信バッファ
ｃ１〜ｃｎ  キュー
ｄ１〜ｄｎ  ネットワークドライバ
【図１】
2008257642.tif 000003
【図２】
2008257642.tif 000004
【図３】
2008257642.tif 000005
【図４】
2008257642.tif 000006