(57)【要約】ＣＰＵコア数に応じてユーザデータパケットの処理能力をスケールさせるために、キュー選択器は、ユーザデータパケットを受信パケットとして受信する受信手段と、受信パケットのペイロードに位置するユーザＩＰアドレスを抽出する抽出手段と、抽出したユーザＩＰアドレスのハッシュ値を計算し、ハッシュ値に基づいて、受信パケットを格納すべきキューのキュー番号を選択する計算・選択手段と、複数のＣＰＵコア毎にＣＰＵ使用率を格納する判定テーブルを参照し、ＣＰＵ使用率に基づいて、選択したキュー番号を、受信パケットを格納すべきキューのキュー番号とするか否かを決定する決定手段と、決定したキュー番号のキューに受信パケットを格納する格納手段と、を備える。
2015141337.tif 000002
【特許請求の範囲】
【請求項１】
携帯端末からのユーザデータパケットを受信パケットとして受信し、バーチャルマシンに割り当てられた複数のＣＰＵコアにそれぞれ対応し、かつそれぞれキュー番号が割り当てられた複数のキューへ、前記受信パケットを分散する方法であって、
前記ユーザデータパケットを前記受信パケットとして受信し、
前記受信パケットのペイロードに位置するユーザＩＰアドレスを抽出し、
該抽出したユーザＩＰアドレスのハッシュ値を計算し、該ハッシュ値に基づいて、前記受信パケットを格納すべきキューのキュー番号を選択し、
前記複数のＣＰＵコア毎にＣＰＵ使用率を格納する判定テーブルを参照し、前記ＣＰＵ使用率に基づいて、前記選択したキュー番号を、前記受信パケットを格納すべきキューのキュー番号とするか否かを決定し、
該決定したキュー番号のキューに前記受信パケットを格納する、
受信パケット分散方法。
【請求項２】
前記選択したキュー番号にアサインされた前記ＣＰＵコアのＣＰＵ使用率が予め定められた閾値以下である場合、前記決定することは、当該選択したキュー番号を、前記決定したキュー番号として決定する、請求項１に記載の受信パケット分散方法。
【請求項３】
前記選択したキュー番号にアサインされた前記ＣＰＵコアのＣＰＵ使用率が前記閾値以上である場合、前記決定することは、前記閾値以下で最も使用率が低いＣＰＵコアに割り当てられたキューのキュー番号を、前記決定したキュー番号として決定する、請求項２に記載の受信パケット分散方法。
【請求項４】
全てのＣＰＵコアのＣＰＵ使用率が前記閾値以上の場合、前記決定することは、新たな閾値を決定し、該新たな閾値に基づいて、前記受信パケットを格納すべきキューのキュー番号を決定する、請求項３に記載の受信パケット分散方法。
【請求項５】
携帯端末からのユーザデータパケットを受信パケットとして受信し、バーチャルマシンに割り当てられた複数のＣＰＵコアにそれぞれ対応し、かつそれぞれキュー番号が割り当てられた複数のキューへ、前記受信パケットを分配して格納するキュー選択器であって、
前記ユーザデータパケットを前記受信パケットとして受信する受信手段と、
前記受信パケットのペイロードに位置するユーザＩＰアドレスを抽出する抽出手段と、
該抽出したユーザＩＰアドレスのハッシュ値を計算し、該ハッシュ値に基づいて、前記受信パケットを格納すべきキューのキュー番号を選択する計算・選択手段と、
前記複数のＣＰＵコア毎にＣＰＵ使用率を格納する判定テーブルを参照し、前記ＣＰＵ使用率に基づいて、前記選択したキュー番号を、前記受信パケットを格納すべきキューのキュー番号とするか否かを決定する決定手段と、
該決定したキュー番号のキューに前記受信パケットを格納する格納手段と、
を備えることを特徴とするキュー選択器。
【請求項６】
携帯端末からのユーザデータパケットを受信パケットとして受信して処理するパケット処理装置であって、
それぞれキュー番号が割り当てられた複数のキューと、
該複数のキューにそれぞれ対応して、バーチャルマシンに割り当てられた複数のＣＰＵコアと、
前記複数のＣＰＵコア毎にＣＰＵ使用率を格納する判定テーブルと、
前記受信パケットを、前記判定テーブルを参照して、前記複数のキューの適切なキューに振り分けるキュー選択器と、
を備えることを特徴とするパケット処理装置。
【請求項７】
前記複数のＣＰＵコアは、定期的に、それぞれのＣＰＵ使用率を前記判定テーブルに送信して格納する、請求項６に記載のパケット処理装置。
【請求項８】
前記複数のＣＰＵコアは、それぞれ、対応するキューに格納された受信パケットを刈り取り、パケット処理を行う、請求項６又は７に記載のパケット処理装置。
【請求項９】
コンピュータに、携帯端末からのユーザデータパケットを受信パケットとして受信させ、バーチャルマシンに割り当てられた複数のＣＰＵコアにそれぞれ対応し、かつそれぞれキュー番号が割り当てられた複数のキューへ、前記受信パケットを分散させるプログラムを記録したコンピュータ読み取り可能な記録媒体であって、前記プログラムは前記コンピュータに、
前記ユーザデータパケットを前記受信パケットとして受信する受信手順と、
前記受信パケットのペイロードに位置するユーザＩＰアドレスを抽出する抽出手順と、
該抽出したユーザＩＰアドレスのハッシュ値を計算し、該ハッシュ値に基づいて、前記受信パケットを格納すべきキューのキュー番号を選択する計算・選択手順と、
前記複数のＣＰＵコア毎にＣＰＵ使用率を格納する判定テーブルを参照し、前記ＣＰＵ使用率に基づいて、前記選択したキュー番号を、前記受信パケットを格納すべきキューのキュー番号とするか否かを決定する決定手順と、
該決定したキュー番号のキューに前記受信パケットを格納する格納手順と、
を実行させる記録媒体。
【請求項１０】
携帯端末からのユーザデータパケットを受信パケットとして受信し、複数のバーチャルマシンの各々に割り当てられた複数のＣＰＵコアへ、前記受信パケットを分散するネットワークインタフェースカード（ＮＩＣ）であって、
前記ネットワークインタフェースカードは、複数のＶＦ（Ｖｉｒｔｕａｌ  Ｆｕｎｃｔｉｏｎ）と一つのＰＦ（Ｐｈｙｓｉｃａｌ  Ｆｕｎｃｔｉｏｎ）とを具備し、前記ＰＦ上に仮想的に前記複数のＶＦが構成され、各バーチャルマシンは各ＶＦを使用してパケットを送受信することができ、
各ＶＦは、
前記複数のＣＰＵコアにそれぞれ対応し、かつそれぞれキュー番号が割り当てられた複数のキューと、
前記複数のＣＰＵコア毎にＣＰＵ使用率を格納する判定テーブルと、
前記受信パケットを、前記判定テーブルを参照して、前記複数のキューの適切なキューに振り分けるキュー選択器と、
を備えるネットワークインタフェースカード。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、携帯端末からのユーザデータパケットを受信して処理するパケット処理装置に関し、特に、外部から入力されるユーザデータパケットを、バーチャルマシンに割り当てられた複数のＣＰＵ（ｃｅｎｔｒａｌ  ｐｒｏｃｅｓｓｉｎｇ  ｕｎｉｔ）コアへ適切に分散する受信パケット分散方法、キュー選択器、パケット処理装置、および記録媒体に関する。
【背景技術】
【０００２】
近年、ＬＴＥ（Ｌｏｎｇ  Ｔｅｒｍ  Ｅｖｏｌｕｔｉｏｎ）等を収容するＥＰＣ（Ｅｖｏｌｖｅｄ  Ｐａｃｋｅｔ  Ｃｏｒｅ）等のモバイルネットワークを、ＮＦＶ（Ｎｅｔｗｏｒｋ  Ｆｕｎｃｔｉｏｎｓ  Ｖｉｒｔｕａｌｉｚａｔｉｏｎ）等で仮想化することが検討されている。この場合、携帯端末からのユーザデータパケットを受信して処理するデータブレーンパケット処理装置は、バーチャルマシン上で実現される。
ここで、ＮＦＶとは、ネットワークを制御する通信機器の機能をソフトウェアとして実装し、汎用サーバの仮想化されたＯＳ（ｏｐｅｒａｔｉｎｇ  ｓｙｓｔｅｍ）上で実行する方式をいう。
ＥＰＣでは、３ＧＰＰ（３ｒｄ  Ｇｅｎｅｒａｔｉｏｎ  Ｐａｒｔｎｅｒｓｈｉｐ  Ｐｒｏｊｅｃｔ）で規定されている既存２Ｇ／３Ｇ網を収容しつつ、新たなＬＴＥアクセス網を収容する能力を持つ。ＥＰＣは、さらにはＷＬＡＮ（ｗｉｒｅｌｅｓｓ  Ｌｏｃａｌ  Ａｒｅａ  Ｎｅｔｗｏｒｋ）やＷｉＭＡＸ（Ｗｏｒｌｄｗｉｄｅ  Ｉｎｔｅｒｏｐｅｒａｂｉｌｉｔｙ  ｆｏｒ  Ｍｉｃｒｏｗａｖｅ  Ａｃｃｅｓｓ）、３ＧＰＰ２などのｎｏｎ−３ＧＰＰアクセスを含めた多様なアクセスネットワークを収容することができる。ＥＰＣは、ＭＭＥ（Ｍｏｂｉｌｉｔｙ  Ｍａｎａｇｅｍｅｎｔ  Ｅｎｔｉｔｙ）、Ｓ−ＧＷ（Ｓｅｒｖｉｎｇ  Ｇａｔｅｗａｙ）、Ｐ−ＧＷ（Ｐａｃｋｅｔ  ｄａｔａ  ｎｅｔｗｏｒｋ  ｇａｔｅｗａｙ）から構成され、さらには、Ｓ−ＧＷ／Ｐ−ＧＷの統合型のゲートウェイも提供可能である。
ここで、ＭＭＥとは、ＬＴＥ端末の位置登録や着信時の端末呼び出し処理、無線基地局間ハンドオーバといったモビリティ管理を行うノードである。Ｓ−ＧＷは、ＬＴＥおよび３Ｇシステムへアクセスを行う携帯端末の音声やパケットなどのユーザデータを処理するノードである。Ｐ−ＧＷは、コアネットワークとＩＭＳ（ＩＰ  Ｍｕｌｔｉｍｅｄｉａ  Ｓｕｂｓｙｓｔｅｍ）あるいは外部パケット網とのインタフェースを持つノードである。なお、ＩＭＳは、マルチメディアアプリケーションをＩＰ（ｉｎｔｅｒｎｅｔ  ｐｒｏｔｏｃｏｌ）で実現するためのサブシステムである。
ＮＦＶの仮想化においては、図１に示される矩形で囲んだ部分である、ＬＴＥ基地局を収容するモバイルコアネットワーク装置（ＥＰＣ）の、モビリティ制御などを担うＭＭＥ、加入者情報を管理するＨＳＳ（Ｈｏｍｅ  Ｓｕｂｓｃｒｉｂｅｒ  Ｓｅｒｖｅｒ）、ポリシーによって通信機能を制御するＰＣＲＦ（Ｐｏｌｉｃｙ  ａｎｄ  Ｃｈａｒｇｉｎｇ  Ｐｕｌｅｓ  Ｆｕｎｃｔｉｏｎ）、パケットを伝送するＳ／Ｐ−ＧＷの機能を、オールインワンで汎用ＩＡ（Ｉｎｔｅｌ  Ａｒｃｈｉｔｅｃｔｕｒｅ）サーバの仮想化基盤上で実現する。
尚、ＩＡサーバとは、通常のパーソナルコンピュータと同様のアーキテクチャをベースに、ＩｎｔｅｌのＩＡ−３２またはＩＡ−６４系のＣＰＵ（ｃｅｎｔｒａｌ  ｐｒｏｃｅｓｓｉｎｇ  ｕｎｉｔ）や、ＡＭＤ（Ａｄｖａｎｃｅｄ  Ｍｉｃｒｏ  Ｄｅｖｉｃｅｓ，Ｉｎｃ．）などのインテル互換ＣＰＵを搭載したサーバのことである。ＩＡサーバはＰＣサーバとも呼ばれる。ＰＣサーバは、パーソナルコンピュータ（ＰＣ）を基本に設計・製造されたサーバである。
なお、図１において、ｅＮＢ（ｅｖｏｌｖｅｄ  ＮｏｄｅＢ）は、ＬＴＥにおける無線基地局（ｅ−ＮｏｄｅＢ）である。また、図中の携帯端末は、いわゆるガラパゴス携帯、スマートフォン、タブレット端末を想定している。
前述したように、ＮＦＶは、専用ハードウェアで実現されていたモバイルコア等のネットワークを汎用サーバのソフトウェアで実現できることを目的としている。データプレーンパケット処理装置は、汎用サーバに搭載されたマルチコアＣＰＵ上で仮想化されたバーチャルマシン上のソフトフェアとして実現される。マルチコアＣＰＵは、複数のＣＰＵコアを備える。
マルチコアＣＰＵ上で、データプレーンパケット処理装置の処理能力を向上させるためには、複数のＣＰＵコアでパケット処理動作を行い、さらにそのＣＰＵコア数に応じて性能をスケールさせる必要がある。
使用するＣＰＵコア数に応じた性能スケールをソフトウェア処理で実現するには、通常、次の方法が採用される。まず、汎用サーバにおけるパケット受信部であるＮＩＣ（Ｎｅｔｗｏｒｋ  Ｉｎｔｅｒｆａｃｅ  Ｃａｒｄ）から、バーチャルマシン上の受信専用ＣＰＵコアにてパケットを刈り取る。次に、そのパケットを各ＣＰＵコア（パケット処理コア）に振り分ける。そして、それらのパケットを受け取った各々のＣＰＵコア（パケット処理コア）にてパケット処理する。
ここで、性能を向上させるためには、外部から入力されるユーザデータパケット（受信パケット）を、バーチャルマシンに割り当てられた複数のＣＰＵコアへ適切に配分（分散）することが必要である。
このような受信パケットを分散する方法に関する先行技術（関連技術）は、従来から種々知られている。
例えば、特開２０１０−２２６２７５号公報（特許文献１）は、マルチコアプロセッサを利用してパケットを処理する際、マルチコアプロセッサのリソースを有効利用できるようにした、「通信装置」を開示している。
この特許文献１に開示された通信装置では、複数のマルチコアプロセッサ部の内のどのマルチコアプロセッサ部へデータパケットを出力するべきかを決定する場合、ＩＰデータパケットの「あて先ＩＰアドレス」、「ソースＩＰアドレス」、「プロトコル番号」などの情報からハッシュ関数を用いて算出した値をもとに、出力先のマルチコアプロセッサ部を決定する方式を採用している。マルチコアプロセッサ部の内部には複数のコアが配置されている。各コアはそれぞれ複数のスレッドを同時に実行できる構成となっている。受信コントロール部は、新規に受信したデータパケットをメインメモリにストアすると共に、ワークコントロール部に対して上記データパケットの処理をワークという形で受け渡し、ワークに対するスレッドの割り当てを依頼する機能を有する。
また、特開２０１１−０７７７４６号公報（特許文献２）は、各コアがパケットを最大限に並列処理可能な、「ネットワーク中継装置」を開示している。
特許文献２に開示されたネットワーク中継装置は、受信待ちキューと、下位フロー識別部と、上位フロー識別待ちキューと、転送処理待ちキューと、上位フロー識別／転送処理部と、送信待ちキューとから構成されている。ネットワーク中継装置がパケットを受信したとき、受信待ちキューにパケットを一時的に保持する。下位フロー識別部は受信待ちキューからパケットを１つ取り出し、例えばＩＰヘッダの送信元ＩＰアドレスや宛先ＩＰアドレスなどのヘッダ情報を用いてハッシュ関数を計算し、計算したハッシュ関数により、下位フロー毎に上位フロー識別待ちキューにパケットを振り分ける。上位フロー識別／転送処理部は、上位フロー識別処理を転送処理の２つの処理を１つのコア上同居させた処理部である。本実施例においてマルチコアＣＰＵを用いたが、複数のＣＰＵを用いて実施してもよい。
さらに、特開２００９−２３９３７４号公報（特許文献３）は、複数の仮想計算機におけるＶＮＩＣ（Ｖｉｒｔｕａｌ  Ｎｅｔｗｏｒｋ  Ｉｎｔｅｒｆａｃｅ  Ｃａｒｄ）のパケット送信遅延を少なくする、「仮想計算機システム」を開示している。
特許文献３に開示された仮想計算機システムにおいて、複数の仮想計算機と物理ＮＩＣとは共通バスにより相互接続されている。これら仮想計算機の各々は仮想ネットワークインタフェースカード（ＶＮＩＣ）を有している。物理ネットワークインタフェースカード（物理ＮＩＣ）は、共通バスに接続されてＶＮＩＣにより共有（共用）されている。物理ＮＩＣは、ネットワークから受信したパケットについて受信した順番で処理を行う。ネットワークからネットワークＩ／Ｆが、受信バケット番号１（以下単に番号１と称す）の受信パケットデータを受信すると、受信バッファにこの受信パケットデータを格納する。受信バッファは、格納された番号１の受信パケットデータから受信対象のＩＰアドレスデータを抜き出し、この受信パケットのＩＰアドレスに対応する受信キューを選択する。
さらにまた、特開２０１１−１４１５８７号公報（特許文献４）は、ネットワークにアップロードした単一の情報量の多いデータに対して、応答時間を短縮する、「分散処理システム」を開示している。
特許文献４に開示された分散処理システムは、受付応答装置と、分断統合装置と、複数の処理装置と、１つ以上のキュー監視装置と、を含んで構成される。受付応答装置は、ユーザ端末からネットワークを介してデータ（アップロードデータ）を受信する。分断統合装置は、受付応報装置が受け付けたデータを取得して、そのデータを分断して断片データを生成し、さらに処理された断片データを統合する。複数の処理装置は、断片データを取得し、データ処理を行う。１つ以上のキュー監視装置は、分断統合装置から出力された断片データを取得してキューとして記憶し、処理装置からの要求により断片データを処理装置に送信する。処理装置は、キュー管理装置から断片データを取得し、その取得した断片データに対し所定のデータ処理を実行する。この処理装置は、キュー選択部と、断片データ取得部と、データ処理部と、断片データ結果出力部とを含んで構成される。キュー選択部は、断片データの取得元となるキュー管理装置を選択する。このときのキュー管理装置の選択は、例えば、ラウンドロビン法等の分散アルゴリズムを用いて行われる。断片データ取得部は、キュー選択ぶにより選択されたキュー管理装置に、断片データの取得要求を送信し、キュー管理装置から断片データを取得する。
【先行技術文献】
【特許文献】
【０００３】
【特許文献１】特開２０１０−２２６２７５号公報（［００１３］、［００１５］
【特許文献２】特開２０１１−０７７７４６号公報（［００１３］、［００１５］、［００２３］、［００２４］）
【特許文献３】特開２００９−２３９３７４号公報（図１、図９、［００２５］、［００６９］、［００７０］）
【特許文献４】特開２０１１−１４１５８７号公報（図１、［００３１］−［００３３］、［００５５］−［００５７］）
【発明の概要】
【発明が解決しようとする課題】
【０００４】
汎用サーバをＮＦＶにて仮想化し、それ上のバーチャルマシンにてユーザデータ処理装置を構成する場合、スループット性能に課題がある。その理由は、ネットワーク専用ハードウェアで構成されたユーザデータ処理装置と異なり、全ての機能をソフトウェアで実現するためである。
例えば、バーチャルマシンにて構成したユーザデータ処理装置は、ＳＲＩＯＶ（Ｓｉｎｇｌｅ  Ｒｏｏｔ  Ｉ／Ｏ  Ｖｉｒｔｕａｌｉｚａｔｉｏｎ）のような汎用機能を使い、ＶＦ（Ｖｉｒｔｕａｌ  Ｆｕｎｃｔｉｏｎ）パススルー機能を使うことで、Ｇｕｓｅｔ  ＯＳ（バーチャルマシン）側からホストＯＳを経由せず直接ＮＩＣ経由で外部との通信が可能となる。このため、ホストＯＳ側との通信に必要なオーバーヘッドを排除することができ、性能を向上させることができる。しかしながら、外部から入力されるユーザパケットデータをバーチャルマシンに割り当てられた複数のＣＰＵコアへ適切に分配できなければ、ＣＰＵコア数に応じて性能がスケールできない課題がある。何故ならば、特定のＣＰＵコアに処理負荷が偏り、全てのＣＰＵコアリソースを使い切ることができないからである。ＣＰＵコアが１つであれば、問題がないが、マルチコアプロセッサ上でＣＰＵコア数に比例して性能を向上させることができない。
関連技術では、複数のＣＰＵコアとして、複数のパケット処理コアとは別に受信専用コアを配備し、例えば、上記特許文献４に開示されているように、本受信専用コアで各パケット処理コアにラウンドロビンロジック等で受信パケットを分配することで分散することが可能である。しかしながら、受信されるパケット長等のぱらつきにより、特定のパケット処理コアにロングパケットあるいはショートパケットが集中的に分配される可能性がある。パケットサイズにより１パケットあたりのＣＰＵコアの負荷は変動する。そのため、ＣＰＵコア負荷の観点からは、結果として偏りが発生し、ＣＰＵコア数に比例して性能スケールさせることができない。その結果、処理能力を最大化することはできない。
また、受信専用コアによる分配ロジックを変更し、これらの課題を解決しようとすることも考えられる。しかしながら、この場合、分配ロジックが複雑になるため分配能力が低下し、分散可能となるＣＰＵコア（パケット処理コア）の数が減少し、スケールできるＣＰＵコア数が制限される。その結果として、マルチコアプロセッサ上での性能を最大化できない課題がある。
ラウンドロビンのような単純なロジックでも、パケットを受信し、転送先のＣＰＵコア（パケット処理コア）を決定し、パケットを転送する処理が発生する。そのため、転送先のＣＰＵコア（パケット処理コア）が増えた場合、パケット転送の際に発生する各ＣＰＵコア（パケット処理コア）間の排他制御が増大し、受信専用コアがボトルネックとなり、性能スケールできない課題がある。
また、ＥＰＣ等のモバイルネットワークで使用されるユーザデータは、ＧＴＰ（Ｇｅｎｅｒａｌ  Ｔｕｎｎｅｌ  Ｐｒｏｔｏｃｏｌ）でカプセル化され、ノード装置間通信用のノードＩＰアドレスが付与され、このノードＩＰアドレスを使って通信される。このノードＩＰアドレスは、パケットを受信する装置としては全て同じ送信先ＩＰアドレスになる。汎用ＮＩＣに実装されているＲＳＳ（Ｒｅｃｅｉｖｅ  Ｓｉｄｅ  Ｓｃａｌｉｎｇ）機能を使い、ＮＩＣ側でＩＰアドレスに従って、分散させることは可能である。しかしながら、ＥＰＣ等のモバイルネットワークで使用するノードＩＰアドレスは、パケット処理装置としては同じ値になるため、事実上分散させることはできない課題がある。
さらに、分散させたいユーザＩＰアドレスはカプセル化されたパケットのペイロード中に存在するため、汎用ＮＩＣに具備されているＲＳＳ機能ではユーザＩＰアドレスを参照できない課題がある。
以上を纏めると、関連のＮＦＶ等の技術を使った仮想化環境上で構成される、パケット処理装置における受信パケットの負荷分散方法には、次のような課題がある。
第１の課題は、関連技術の装置では、受信専用コアとしてＣＰＵコアリソースを占有し、さらにパケット処理コアと受信専用コアとの間のパケット授受によるオーバーヘッドにより、１ＣＰＵコアあたりのパケット処理性能が劣化することである。その理由は、次の通りである。ＳＲＩＯＶ等の機能を使いＮＩＣ上に複数のＶＦを構築した場合、ＶＦ上の受信パケットキューは１つしか構成できない。そのため、この受信パケットをＮＩＣの受信パケットキューから刈り取る受信専用コアを配備しなければならない。
第２の課題は、携帯端末単位でのパケットの分散ができず、特定の受信パケットキューあるいはパケット処理コアに負荷が集中してしまい、パケット処理するＣＰＵコアを増やしても、ＣＰＵコア数に応じてパケット処理性能がスケールできないことである。その理由は、次の通りである。ＮＩＣ上のＰＦ（Ｐｈｙｓｉｃａｌ  Ｆｕｎｃｔｉｏｎ）機能と同様にＶＦ上で複数の受信パケットキューを構築し、ＲＳＳ機能により各受信パケットキューにパケットを分散することができるＮＩＣカードが実現できたとする。その場合でも、ＥＰＣ等のモバイルネットワークにおけるユーザパケットデータは、ＧＴＰにてカプセル化される。そのため、携帯端末のＩＰアドレスはペイロード中に格納され、パケットのヘッダに付与されるＩＰアドレスは、ＥＰＣ内部の各ノード間で送受信するためのノードＩＰアドレスである。その結果、標準的にＮＩＣに具備されているＲＳＳ機能では、このノードＩＰアドレスに基づいてしか、ＮＩＣの各受信パケットキューに受信パケットを分散させることが出来ない。
第３の課題は、ユーザの利用形態あるいはアプリケーションの特性に応じて、各パケット処理コアの負荷は平滑化することができず、パケット処理するＣＰＵコアの数を増やしても、ＣＰＵコア数に応じてパケット処理性能がスケールできないことである。その理由は、次の通りである。携帯端末のユーザＩＰアドレスベースでのパケット分散ができたとしても、ユーザパケットデータ長は一定ではなく、ユーザ毎あるいはアプリケーション毎にパケット長が異なる。その結果、処理するパケットデータの長が異なると、ＣＰＵコアの負荷もパケット毎に変動する。
なお、特許文献１は、単に、ＩＰデータパケットの情報からハッシュ関数を用いて算出した値をもとに、出力先のマルチコアプロセッサ部を決定する、技術的思想を開示しているに過ぎない。
特許文献２は、単に、パケットを受信したとき、受信待ちキューにパケットを一時的に保持し、受信待ちキューからパケットを１つ取り出し、取り出したパケットのＩＰヘッダのヘッダ情報を用いてハッシュ関数を計算し、計算したハッシュ値により、下位フロー毎に上位フロー識別待ちキューにパケットを振り分け、上位フロー識別待ちキューにあるパケットを刈り取って、上位フロー識別処理を行う、技術的思想を開示しているに過ぎない。
特許文献３は、単に、受信パケットデータから受信対象のＩＰアドレスデータを抜き出し、この受信パケットのＩＰアドレスに対応する受信キューを選択する、技術的思想を開示しているに過ぎない。
特許文献４は、前述したように、単に、キュー管理装置の選択を、ラウンドロビン法等の分散アルゴリズムを用いて行う、技術的思想を開示しているに過ぎない。
本発明の目的は、ＣＰＵコア数に応じてユーザデータパケットの処理能力をスケールさせることができる、受信パケット分散方法、キュー選択器、パケット処理装置、および記録媒体を提供することにある。
【課題を解決するための手段】
【０００５】
本発明の一形態は、携帯端末からのユーザデータパケットを受信パケットとして受信し、バーチャルマシンに割り当てられた複数のＣＰＵコアにそれぞれ対応し、かつそれぞれキュー番号が割り当てられた複数のキューへ、前記受信パケットを分散する受信パケット分散方法であって、前記ユーザデータパケットを前記受信パケットとして受信し、前記受信パケットのペイロードに位置するユーザＩＰアドレスを抽出し、該抽出したユーザＩＰアドレスのハッシュ値を計算し、該ハッシュ値に基づいて、前記受信パケットを格納すべきキューのキュー番号を選択し、前記複数のＣＰＵコア毎にＣＰＵ使用率を格納する判定テーブルを参照し、前記ＣＰＵ使用率に基づいて、前記選択したキュー番号を、前記受信パケットを格納すべきキューのキュー番号とするか否かを決定し、該決定したキュー番号のキューに前記受信パケットを格納すること、を特徴とする。
【発明の効果】
【０００６】
本発明によれば、ＣＰＵコア数に応じてユーザデータパケットの処理能力をスケールさせることができる。
【図面の簡単な説明】
【０００７】
図１は、モバイルネットワークをＮＦＶで仮想化する例を説明する図である。
図２は、本発明の第１の実施例に係るパケット処理装置の構成を示すブロック図である。
図３は、図２に示したパケット処理御装置に使用される、判定デーブルの一例を示す図である。
図４は、図２に示したパケット処理御装置に使用される、キュー選択器の構成を示すブロック図である。
図５は、図２に示したパケット処理御装置に使用される、キュー選択器の動作を説明するためのフローチャートである。
【発明を実施するための形態】
【０００８】
［関連技術］
本発明の理解を容易にするために、以下では本発明に関連する技術について説明する。
前述したように、ＬＴＥ（Ｌｏｎｇ  Ｔｅｒｍ  Ｅｖｏｌｕｔｉｏｎ）等を収容するＥＰＣ（Ｅｖｏｌｖｅｄ  Ｐａｃｋｅｔ  Ｃｏｒｅ）等のモバイルネットワークをＮＦＶ（Ｎｅｔｗｏｒｋ  Ｆｕｎｃｔｉｏｎｓ  Ｖｉｒｔｕａｌｉｚａｔｉｏｎ）等で仮想化することがある。この場合、携帯端末からのユーザデータパケットを処理するデータブレーンパケット処理装置は、バーチャルマシン上で実現される。
ＮＦＶは、専用ハードウェアで実現されていたモバイルコア等のネットワークを汎用サーバのソフトウェアで実現できることを目的としている。データプレーンパケット処理装置は、汎用サーバに搭載されたマルチコアＣＰＵ上で仮想化されたバーチャルマシン上のソフトフェアとして実現される。マルチコアＣＰＵは、複数のＣＰＵコアを備える。
マルチコアＣＰＵ上で、データプレーンパケット処理装置の処理能力を向上させるためには、複数のＣＰＵコアでパケット処理動作を行い、さらにそのＣＰＵコア数に応じて性能をスケールさせる必要がある。
使用するＣＰＵコア数に応じた性能スケールをソフトウェア処理で実現するには、通常、次の方法が採用される。まず、汎用サーバにおけるパケット受信部であるＮＩＣから、バーチャルマシン上の受信専用コアにてパケットを刈り取る。次に、そのパケットを各ＣＰＵコア（パケット処理コア）に振り分ける。そして、それらのパケットを受け取った各々のＣＰＵコア（パケット処理コア）にてパケット処理する。
しかしながらこの方法では、ＣＰＵコアをスケールさせる前に比べて、受信専用コアのＣＰＵリソースを余計に消費し、また、分散させるＣＰＵコアの数が増えた場合、受信専用コアがボトルネックとなり性能スケールができないという問題がある。
［実施の形態］
この問題を解決するために、本発明の実施形態では、図２に示すようなインテリジェントな機能を具備したネットワークインタフェースカード（ＮＩＣ）１１を使ったパケット処理装置１０を構成する。
汎用サーバに挿入されたインテリジェントな機能を具備したＮＩＣ１１で、ユーザデータパケットを受信すると、キュー選択器１４は、パケットの振り分けを行い、各キュー１５−０、・・・、１５−ｍへパケットデータを積み込む。ここで、ｍは２以上の整数である。
この時、キュー選択器１４は、判定テーブル１３に従って、振り分け先を決定する。キュー選択器１４は、判定テーブル１３を参照して、第０乃至第ｍのＣＰＵコア１８−０、・・・、１８−ｍから展開されるＣＰＵ使用率等に基づいて、適切なキューにパケットデータを振り分ける。
ＥＰＣ等のモバイルコアネットワークでは、ＥＰＣ等モバイルコアネットワーク装置間通信用のノードＩＰアドレスと、ユーザ毎に割り当てられるユーザＩＰアドレスと、の２種類のＩＰアドレスがある。ユーザデータパケットは、ＧＴＰ（Ｇｅｎｅｒａｌ  Ｔｕｎｎｅｌｉｎｇ  Ｐｒｏｔｏｃｏｌ）にてカプセル化され、ノードＩＰアドレスが付与される。
汎用の物理ＮＩＣでは、ＶＦ（Ｖｉｒｔｕａｌ  Ｆｕｎｃｔｉｏｎ）上のＲＳＳ（Ｒｅｃｅｉｖｅ  Ｓｉｄｅ  Ｓｃａｌｉｎｇ）機能にてＩＰアドレスのハッシュ値を計算し、このハッシュ値に基づき分散を行うことが可能である。
しかしながら、ＥＰＣ等のモバイルコアネットワークのユーザデータパケットは、通常、ＮＩＣでは、ノードＩＰアドレスのハッシュ値に従ったパケット振り分けになる。このため、同一ネットワーク装置から送信される、あるいは同一ネットワーク装置に送信される、ユーザデータパケットを受信するケースにおいては、同一のＣＰＵコアにユーザデータパケットが集中し、パケットの分散処理が期待通りに行われない。
ユーザＩＰアドレスは、パケットのペイロードに位置するため、汎用のＮＩＣのＲＳＳ機能では、ユーザＩＰアドレスのハッシュ値に従ったパケット振り分けができない。
そこで、本発明の実施形態では、判定テーブル１３は、第０乃至第ｍのＣＰＵコア１８−０、・・・、１８−ｍから展開された送信元ユーザＩＰアドレス、送信先ユーザＩＰアドレスに従って、振り分けるキュー１５−０、・・・、１５−ｍを決定したハッシュテーブルを作成する。
キュー選択器１４は、受信したパケットのペイロード中に位置するユーザＩＰアドレスを抽出し、ハッシュ値を計算した後、判定テーブル１３を参照し、受信したパケットを格納するキューを選択する。その後、キュー選択器１４は、判定テーブル１３におけるＣＰＵ使用率を参照する。選択したキューに割り当てられているＣＰＵコアのＣＰＵ使用率が閾値以上の場合、キュー選択器１４は、閾値以下のＣＰＵ使用率であるＣＰＵコアの中で最も低いＣＰＵコアに割り当てられるキューを決定する。
キュー選択器１４は、決定したキューに受信パケットを格納する。全てのＣＰＵコアのＣＰＵ使用率が閾値以上になった場合、キュー選択器１４は、１００％と古い閾値の間で新たな閾値を設定し、この新たな閾値に従って同様なキュー選択決定処理を行う。また、全てのＣＰＵコア使用率が新たな閾値を超える場合、キュー選択器１４は、同様に閾値の使用率１００％に達するまで再設定を行い、これを繰り返す。
第０乃至第ｍのＣＰＵコア１８−０、・・・、１８−ｍは、それぞれ、割り当てられているインテリジェントな機能を具備したＮＩＣ１１上のキュー１５−０、・・・、１５−ｍをポーリングすることで、パケットを随時刈り取り、第０乃至第ｍのＣＰＵコア１８−０、・・・、１８−ｍで引き取ったユーザデータパケットの処理を行う。
このように、本発明の実施形態では、インテリジェントな機能を具備したＮＩＣ１１上に実装される判定テーブル１３とキュー選択器１４にて、各ＣＰＵコア１８−０、・・・、１８−ｍに受信したユーザデータパケットが分散され、各ＣＰＵコア１８−０、・・・、１８−ｍのＣＰＵコアリソースが平滑化される。そのため、全てのＣＰＵコアリソース使い切ることができ、ＣＰＵコア数に応じてユーザデータパケットの処理能力をスケールさせることが可能となる。
以下、図面を参照して、本発明の実施例とその動作について詳細に説明する。
【実施例１】
【０００９】
図２は、本発明の第１の実施例に係るパケット処理装置１０の構成を示すブロック図である。
パケット処理装置１０は、インテリジェントな機能を具備したＮＩＣ１１と、複数のパケット処理用バーチャルマシンとを備えている。図示の例では、複数のパケット処理用バーチャルマシンとして、第０のパケット処理用バーチャルマシン１７−０乃至第ｎのパケット処理用バーチャルマシン（図示せず）の、合計（ｎ＋１）のパケット処理用バーチャルマシンを備えている。ここで、ｎは１以上の整数である。
図２において、インテリジェントな機能を具備したＮＩＣ１１は、ＰＦ（Ｐｈｙｓｉｃａｌ  Ｆｕｎｃｔｉｏｎ）１６と、複数のＶＦ（Ｖｉｒｔｕａｌ  Ｆｕｎｃｔｉｏｎ）１２−０〜１２−ｎとを具備する。ＰＦ１６上には仮想的に複数のＶＦ１２−０〜１２−ｎが構成され、各バーチャルマシン１７−０・・・は各ＶＦ１２−０〜１２−ｎを使用してパケットを送受信することができる。本例では、複数のＶＦとして、第０のＶＦ１２−０乃至第ｎのＶＦ１２−ｎの、合計（ｎ＋１）個のＶＦを備えている。
第０乃至第ｎのＶＦ１２−０〜１２−ｎの各々は、同じ構成をしている。したがって、以下では、第０のＶＦ１２−０を代表として説明し、他のＶＦについての説明を省略する。
第０のＶＦ１２−０は、判定テーブル１３と、キュー選択器１４と、複数のキュー１５−０〜１５−ｍとを備えている。図示の例では、複数のキューとして、第０のキュー１５−０乃至第ｍのキュー１５−ｍの、合計（ｍ＋１）個のキューを備えている。
一方、第０のパケット処理用バーチャネルマシン１７−０は、複数のＣＰＵコア１８−０〜１８−ｍを備えている。図示の例では、複数のＣＰＵコアとして、第０のＣＰＵコア１８−０乃至第ｍのＣＰＵコア１８−ｍの、合計（ｍ＋１）個のＣＰＵコアを備えている。
図２に示されるように、複数のキュー１５−０〜１５−ｍは、第０のパケット処理用バーチャルマシン１７−０に割り当てられた複数のＣＰＵコア１８−０〜１８−ｍにそれぞれ対応している。また、第０乃至第ｍのキュー１５−０〜１５−ｍには、それぞれ、＃０〜＃ｍのキュー番号が割り当てられている。
判定テーブル１３は、図３に示されるように、複数のＣＰＵコア１８−０〜１８−ｍごとにＣＰＵ使用率を格納する。図３に示す例では、第０のＣＰＵコア１８−０のＣＰＵ使用率は１％であり、第１のＣＰＵコアのＣＰＵ使用率は２０％であり、第ｍのＣＰＵコア１８−ｍのＣＰＵ使用率は５％である。
尚、判定テーブル１３は、ＣＰＵ使用率の他に、上述したような、複数のＣＰＵコア１８−０〜１８−ｍから展開された送信元ユーザＩＰアドレス、送信先ユーザＩＰアドレスに従って、振り分けるキュー１５−０〜１５−ｍを決定したハッシュテーブルや、処理すべき対象となるユーザＩＰアドレス等の呼処理情報をも格納する。
本発明の実施形態によるパケット処理装置１０は、インテリジェントな機能を有するＮＩＣ１１内のキュー選択器１４でユーザデータパケットを受信すると、後述のように、第０乃至第ｍのキュー１５−０〜１５−ｍのどのキューに受信パケットを格納すべきかを決定する。すなわち、キュー選択器１４は、携帯端末からユーザデータパケットを受信パケットとして受信し、後述のように、複数のキュー１５−０〜１５−ｍへ、受信パケットを分配して格納する。
図４は、キュー選択器１４の構成を示すブロック図である。キュー選択器１４は、受信手段１４１と、抽出手段１４２と、計算・選択手段１４３と、決定手段１４４と、格納手段１４５とを備えている。
図５は、キュー選択器１４の動作を説明するためのフローチャートである。
受信手段１４１は、ユーザデータパケットを受信パケットとして受信する（図５のステップＳ１０１）。抽出手段１４２は、受信パケットのペイロードに位置するユーザＩＰアドレスを抽出する（図５のステップＳ１０２）。計算・選択手段１４３は、抽出したユーザＩＰアドレスのハッシュ値を計算し、このハッシュ値に基づいて、受信データを格納すべきキューのキュー番号を選択する（図５のステップＳ１０３）。
決定手段１４４は、判定テーブル１３を参照し（図５のステップＳ１０４）、ＣＰＵ使用率に基づいて、後述のように、選択したキュー番号を、受信パケットを格納すべきキューのキュー番号とするか否かを決定する（図５のステップＳ１０５〜Ｓ１０９参照）。
格納手段１４５は、決定したキュー番号のキューに受信パケットを格納する（図５のステップＳ１１０）。
本実施形態では、このキューから受信パケットを刈り取ることによって、ＣＰＵコアの負荷分散を図っている。
次に、図５を参照して、決定手段１４４の動作について更に詳細に説明する。
ハッシュ値に基づくキュー番号を決定する前に、決定手段１４４は、判定テーブル１３を参照し（ステップＳ１０４）、選択したキュー番号にアサインされたＣＰＵコアの使用率が予め定められた閾値以下であることを確認した上で（ステップＳ１０５のＹｅｓ）、キュー番号を決定する（ステップＳ１０６）。
ユーザＩＰアドレスに基づくハッシュ値により、受信パケットのキューへの分散を図っても、パケット長等のトラヒック特性等によりＣＰＵコアの負荷は一様ではない。そのため、通常では、ＣＰＵコア毎に負荷の偏りが発生する。
判定テーブル１３にてＣＰＵコアのＣＰＵ使用率が閾値以上である場合（ステップＳ１０５のＮｏ）、決定手段１４４は、閾値以下でもっとも使用率が低いＣＰＵコアに割り当てられたキューのキュー番号を決定する（ステップＳ１０７のＮｏ、ステップＳ１０９）。そして、格納手段１４５は、その決定したキュー番号のキューにその受信パケットを格納する（ステップＳ１１０）。
全てのＣＰＵコアのＣＰＵ使用率が閾値以上の場合（ステップＳ１０７のＹｅｓ）、決定手段１４４は、新たな閾値を決定（設定）し（ステップＳ１０８）、その新たな閾値に基づき同様の論理でキュー番号を決定する（ステップＳ１０７〜Ｓ１０９）。
尚、判定テーブル１３には、パケット処理装置１０のバーチャルマシン１７−０に割り当てられた複数のＣＰＵコア１８−０〜１８−ｍから定期的に送信される各ＣＰＵコアのＣＰＵ使用率の情報が格納される。
このようにして、本実施例では、各ＣＰＵコア１８−０〜１８−ｍの負荷を平滑化し、全てのＣＰＵコアリソースを平等に使うことで、ＣＰＵコア数に応じ性能をスケールさせ、ハードウェアにおけるＣＰＵ性能の最大限に使用することができる。
図５を参照して、キュー選択器１４の動作について説明する。
キュー選択器１４は、ユーザデータパケットを受信パケットとして受信し（ステップＳ１０１）、受信パケット中のペイロード中に格納されているユーザＩＰアドレスを抽出し（ステップＳ１０２）、このＩＰアドレスのハッシュ値を計算することで格納すべきキューのキュー番号を選択する（ステップＳ１０３）。
キュー番号を決定する前に、キュー選択器１４は、判定テーブル１３を参照し（ステップＳ１０４）、この判定テーブル１３に示される各ＣＰＵコアのＣＰＵ使用率の情報を参照し、閾値以下であることを確認し（ステップＳ１０５のＹｅｓ）、閾値以下であればキュー番号を決定する（ステップＳ１０６）。
閾値以上であれば（ステップＳ１０５のＮｏ）、キュー選択器１４は、閾値以下で最もＣＰＵ使用率が低いＣＰＵコアにアサインされたキューのキュー番号を選択し決定する（ステップＳ１０７のＮｏ、ステップＳ１０９）。全てのＣＰＵコアの使用率が閾値以上の場合（ステップＳ１０７のＹｅｓ）、キュー選択器１４は、再度新たな閾値を設定し（ステップＳ１０８）、同様の論理でキュー番号を決定する（ステップＳ１０７〜Ｓ１０９）。
各ＣＰＵコア１８−０〜１８−ｍは、対応するキュー１５−０〜１５−ｍに格納されたパケットを刈り取り、プロトコル処理等のパケット処理を行う。
以上説明したように、本発明の実施例においては、以下に記載するような効果を奏する。
第１の効果は、ＣＰＵコアリソースを使わずに受信パケットを分散でき、またパケットを分散する受信専用コア無しで受信パケットを分散することができ、ＣＰＵコアスケール時に受信専用コアのボトルネックを回避して、性能スケールが可能となることである。その理由は、ＮＩＣカード上の判定テーブル１３に対して、パケット処理装置１０として割り当てられた各ＣＰＵコア１８−０〜１８−ｍのＣＰＵ使用率の情報、処理すべき対象となるユーザＩＰアドレス等の呼処理情報を随時登録し、この判定テーブル１３に従って、ＮＩＣ１１で受信したパケット処理を行うＣＰＵコアが担当すべきキューを決定するからである。
第２の効果は、携帯端末のユーザ単位に受信したパケットを各ＣＰＵコア１８−０〜１８−ｍに分散させ、各ＣＰＵコアの負荷を平準化することで、装置としてのパケット処理性能の最大化を実現できることである。その理由は、ＮＩＣ１１におけるキュー選択器１４の機能にて受信パケットペイロードに位置するカプセル化されたユーザＩＰアドレスを検出し、判定テーブル１３を参照し、このユーザＩＰアドレスのハッシュ値等に従って、受信パケットを格納するＮＩＣ上のキューを決定するからである。
第３の効果は、ユーザデータパケットのパケット長等のばらつきによるＣＰＵコアの負荷の偏りを解消し、各ＣＰＵコアの負荷を平準化することで、装置としてのパケット処理性能の最大化を実現できることである。その理由は、各ＣＰＵコア１８−０〜１８−ｍから判定テーブル１３にて集約されたダイナミックなＣＰＵ使用率に従い、ＣＰＵ使用率がある一定以下のＣＰＵコアを特定し、受信パケットを格納するＮＩＣ１１上のキューを決定するからである。
以上、実施の形態を参照して本願発明を説明したが、本願発明は上記実施の形態に限定されるものではない。本願発明の構成や詳細には、本願発明のスコープ内で当業者が理解し得る様々な変更をすることができる。
上記の実施形態の一部又は全部は、以下の付記のようにも記載されうるが、以下には限られない。
（付記１）
携帯端末からのユーザデータパケットを受信パケットとして受信し、バーチャルマシンに割り当てられた複数のＣＰＵコアにそれぞれ対応し、かつそれぞれキュー番号が割り当てられた複数のキューへ、前記受信パケットを分散する方法であって、
前記ユーザデータパケットを前記受信パケットとして受信し、
前記受信パケットのペイロードに位置するユーザＩＰアドレスを抽出し、
該抽出したユーザＩＰアドレスのハッシュ値を計算し、該ハッシュ値に基づいて、前記受信パケットを格納すべきキューのキュー番号を選択し、
前記複数のＣＰＵコア毎にＣＰＵ使用率を格納する判定テーブルを参照し、前記ＣＰＵ使用率に基づいて、前記選択したキュー番号を、前記受信パケットを格納すべきキューのキュー番号とするか否かを決定し、
該決定したキュー番号のキューに前記受信パケットを格納する、
受信パケット分散方法。
（付記２）
前記選択したキュー番号にアサインされた前記ＣＰＵコアのＣＰＵ使用率が予め定められた閾値以下である場合、前記決定することは、当該選択したキュー番号を、前記決定したキュー番号として決定する、付記１に記載の受信パケット分散方法。
（付記３）
前記選択したキュー番号にアサインされた前記ＣＰＵコアのＣＰＵ使用率が前記閾値以上である場合、前記決定することは、前記閾値以下で最も使用率が低いＣＰＵコアに割り当てられたキューのキュー番号を、前記決定したキュー番号として決定する、付記２に記載の受信パケット分散方法。
（付記４）
全てのＣＰＵコアのＣＰＵ使用率が前記閾値以上の場合、前記決定することは、新たな閾値を決定し、該新たな閾値に基づいて、前記受信パケットを格納すべきキューのキュー番号を決定する、付記３に記載の受信パケット分散方法。
（付記５）
携帯端末からのユーザデータパケットを受信パケットとして受信し、バーチャルマシンに割り当てられた複数のＣＰＵコアにそれぞれ対応し、かつそれぞれキュー番号が割り当てられた複数のキューへ、前記受信パケットを分配して格納するキュー選択器であって、
前記ユーザデータパケットを前記受信パケットとして受信する受信手段と、
前記受信パケットのペイロードに位置するユーザＩＰアドレスを抽出する抽出手段と、
該抽出したユーザＩＰアドレスのハッシュ値を計算し、該ハッシュ値に基づいて、前記受信パケットを格納すべきキューのキュー番号を選択する計算・選択手段と、
前記複数のＣＰＵコア毎にＣＰＵ使用率を格納する判定テーブルを参照し、前記ＣＰＵ使用率に基づいて、前記選択したキュー番号を、前記受信パケットを格納すべきキューのキュー番号とするか否かを決定する決定手段と、
該決定したキュー番号のキューに前記受信パケットを格納する格納手段と、
を備えることを特徴とするキュー選択器。
（付記６）
前記選択したキュー番号にアサインされた前記ＣＰＵコアのＣＰＵ使用率が予め定められた閾値以下である場合、前記決定手段は、当該選択したキュー番号を、前記決定したキュー番号として決定する、付記５に記載のキュー選択器。
（付記７）
前記選択したキュー番号にアサインされた前記ＣＰＵコアのＣＰＵ使用率が前記閾値以上である場合、前記決定手段は、前記閾値以下で最も使用率が低いＣＰＵコアに割り当てられたキューのキュー番号を、前記決定したキュー番号として決定する、付記６に記載のキュー選択器。
（付記８）
全てのＣＰＵコアのＣＰＵ使用率が前記閾値以上の場合、前記決定手段は、新たな閾値を決定し、該新たな閾値に基づいて、前記受信パケットを格納すべきキューのキュー番号を決定する、付記７に記載のキュー選択器。
（付記９）
携帯端末からのユーザデータパケットを受信パケットとして受信して処理するパケット処理装置であって、
それぞれキュー番号が割り当てられた複数のキューと、
該複数のキューにそれぞれ対応して、バーチャルマシンに割り当てられた複数のＣＰＵコアと、
前記複数のＣＰＵコア毎にＣＰＵ使用率を格納する判定テーブルと、
前記受信パケットを、前記判定テーブルを参照して、前記複数のキューの適切なキューに振り分けるキュー選択器と、
を備えることを特徴とするパケット処理装置。
（付記１０）
前記キュー選択器は、
前記ユーザデータパケットを前記受信パケットとして受信する受信手段と、
前記受信パケットのペイロードに位置するユーザＩＰアドレスを抽出する抽出手段と、
該抽出したユーザＩＰアドレスのハッシュ値を計算し、該ハッシュ値に基づいて、前記受信パケットを格納すべきキューのキュー番号を選択する計算・選択手段と、
前記判定テーブルを参照し前記ＣＰＵ使用率に基づいて、前記選択したキュー番号を、前記受信パケットを格納すべきキューのキュー番号とするか否かを決定する決定手段と、
該決定したキュー番号のキューに前記受信パケットを格納する格納手段と、
を備える、付記９に記載のパケット処理装置。
（付記１１）
前記選択したキュー番号にアサインされた前記ＣＰＵコアのＣＰＵ使用率が予め定められた閾値以下である場合、前記決定手段は、当該選択したキュー番号を、前記決定したキュー番号として決定する、付記１０に記載のパケット処理装置。
（付記１２）
前記選択したキュー番号にアサインされた前記ＣＰＵコアのＣＰＵ使用率が前記閾値以上である場合、前記決定手段は、前記閾値以下で最も使用率が低いＣＰＵコアに割り当てられたキューのキュー番号を、前記決定したキュー番号として決定する、付記１１に記載のパケット処理装置。
（付記１３）
全てのＣＰＵコアのＣＰＵ使用率が前記閾値以上の場合、前記決定手段は、新たな閾値を決定し、該新たな閾値に基づいて、前記受信パケットを格納すべきキューのキュー番号を決定する、付記１２に記載のパケット処理装置。
（付記１４）
前記複数のＣＰＵコアは、定期的に、それぞれのＣＰＵ使用率を前記判定テーブルに送信して格納する、付記１０乃至１３のいずれか１つに記載のパケット処理装置。
（付記１５）
前記複数のＣＰＵコアは、それぞれ、対応するキューに格納された受信パケットを刈り取り、パケット処理を行う、付記１０乃至１４のいずれか１つに記載のパケット処理装置。
（付記１６）
コンピュータに、携帯端末からのユーザデータパケットを受信パケットとして受信させ、バーチャルマシンに割り当てられた複数のＣＰＵコアにそれぞれ対応し、かつそれぞれキュー番号が割り当てられた複数のキューへ、前記受信パケットを分散させるプログラムを記録したコンピュータ読み取り可能な記録媒体であって、前記プログラムは前記コンピュータに、
前記ユーザデータパケットを前記受信パケットとして受信する受信手順と、
前記受信パケットのペイロードに位置するユーザＩＰアドレスを抽出する抽出手順と、
該抽出したユーザＩＰアドレスのハッシュ値を計算し、該ハッシュ値に基づいて、前記受信パケットを格納すべきキューのキュー番号を選択する計算・選択手順と、
前記複数のＣＰＵコア毎にＣＰＵ使用率を格納する判定テーブルを参照し、前記ＣＰＵ使用率に基づいて、前記選択したキュー番号を、前記受信パケットを格納すべきキューのキュー番号とするか否かを決定する決定手順と、
該決定したキュー番号のキューに前記受信パケットを格納する格納手順と、
を実行させる記録媒体。
（付記１７）
携帯端末からのユーザデータパケットを受信パケットとして受信し、複数のバーチャルマシンの各々に割り当てられた複数のＣＰＵコアへ、前記受信パケットを分散するネットワークインタフェースカード（ＮＩＣ）であって、
前記ネットワークインタフェースカードは、複数のＶＦ（Ｖｉｒｔｕａｌ  Ｆｕｎｃｔｉｏｎ）と一つのＰＦ（Ｐｈｙｓｉｃａｌ  Ｆｕｎｃｔｉｏｎ）とを具備し、前記ＰＦ上に仮想的に前記複数のＶＦが構成され、各バーチャルマシンは各ＶＦを使用してパケットを送受信することができ、
各ＶＦは、
前記複数のＣＰＵコアにそれぞれ対応し、かつそれぞれキュー番号が割り当てられた複数のキューと、
前記複数のＣＰＵコア毎にＣＰＵ使用率を格納する判定テーブルと、
前記受信パケットを、前記判定テーブルを参照して、前記複数のキューの適切なキューに振り分けるキュー選択器と、
を備えるネットワークインタフェースカード。
（付記１８）
前記キュー選択器は、
前記ユーザデータパケットを前記受信パケットとして受信する受信手段と、
前記受信パケットのペイロードに位置するユーザＩＰアドレスを抽出する抽出手段と、
該抽出したユーザＩＰアドレスのハッシュ値を計算し、該ハッシュ値に基づいて、前記受信パケットを格納すべきキューのキュー番号を選択する計算・選択手段と、
前記判定テーブルを参照し、前記ＣＰＵ使用率に基づいて、前記選択したキュー番号を、前記受信パケットを格納すべきキューのキュー番号とするか否かを決定する決定手段と、
該決定したキュー番号のキューに前記受信パケットを格納する格納手段と、
を備える、付記１７に記載のネットワークインタフェースカード。
（付記１９）
前記選択したキュー番号にアサインされた前記ＣＰＵコアのＣＰＵ使用率が予め定められた閾値以下である場合、前記決定手段は、当該選択したキュー番号を、前記決定したキュー番号として決定する、付記１８に記載のネットワークインタフェースカード。
（付記２０）
前記選択したキュー番号にアサインされた前記ＣＰＵコアのＣＰＵ使用率が前記閾値以上である場合、前記決定手段は、前記閾値以下で最も使用率が低いＣＰＵコアに割り当てられたキューのキュー番号を、前記決定したキュー番号として決定する、付記１９に記載のネットワークインタフェースカード。
（付記２１）
全てのＣＰＵコアのＣＰＵ使用率が前記閾値以上の場合、前記決定手段は、新たな閾値を決定し、該新たな閾値に基づいて、前記受信パケットを格納すべきキューのキュー番号を決定する、付記２０に記載のネットワークインタフェースカード。
【符号の説明】
【００１０】
１０    パケット処理装置
１１    インテリジェントな機能を具備したネットワークインタフェースカード（ＮＩＣ）
１２−０〜１２−ｎ  ＶＦ（Ｖｉｒｔｕａｌ  Ｆｕｎｃｔｉｏｎ）
１３    判定テーブル
１４    キュー選択器
１５−０〜１５−ｍ    キュー
１６    ＰＦ（Ｐｈｙｓｉｃａｌ  Ｆｕｎｃｔｉｏｎ）
１７−０    パケット処理用バーチャルマシン
１８−０〜１８−ｍ    ＣＰＵコア
この出願は、２０１４年３月１９日に出願された日本出願特願２０１４−０５６０３６号を基礎とする優先権を主張し、その開示の全てをここに取り込む。
【図１】
2015141337.tif 000003
【図２】
2015141337.tif 000004
【図３】
2015141337.tif 000005
【図４】
2015141337.tif 000006
【図５】
2015141337.tif 000007
【手続補正書】
【提出日】平成28年8月24日(2016.8.24)
【手続補正１】
【補正対象書類名】特許請求の範囲
【補正対象項目名】全文
【補正方法】変更
【補正の内容】
【特許請求の範囲】
【請求項１】
携帯端末からのユーザデータパケットを受信パケットとして受信し、バーチャルマシンに割り当てられた複数のＣＰＵコアにそれぞれ対応し、かつそれぞれキュー番号が割り当てられた複数のキューへ、前記受信パケットを分散する方法であって、
前記ユーザデータパケットを前記受信パケットとして受信し、
前記受信パケットのペイロードに位置するユーザＩＰアドレスを抽出し、
該抽出したユーザＩＰアドレスのハッシュ値を計算し、該ハッシュ値に基づいて、前記受信パケットを格納すべきキューのキュー番号を選択し、
前記複数のＣＰＵコア毎にＣＰＵ使用率を格納する判定テーブルを参照し、前記ＣＰＵ使用率に基づいて、前記選択したキュー番号を、前記受信パケットを格納すべきキューのキュー番号とするか否かを決定し、
該決定したキュー番号のキューに前記受信パケットを格納する、
受信パケット分散方法。
【請求項２】
前記選択したキュー番号にアサインされた前記ＣＰＵコアのＣＰＵ使用率が予め定められた閾値以下である場合、前記決定することは、当該選択したキュー番号を、前記決定したキュー番号として決定する、請求項１に記載の受信パケット分散方法。
【請求項３】
前記選択したキュー番号にアサインされた前記ＣＰＵコアのＣＰＵ使用率が前記閾値以上である場合、前記決定することは、前記閾値以下で最も使用率が低いＣＰＵコアに割り当てられたキューのキュー番号を、前記決定したキュー番号として決定する、請求項２に記載の受信パケット分散方法。
【請求項４】
全てのＣＰＵコアのＣＰＵ使用率が前記閾値以上の場合、前記決定することは、新たな閾値を決定し、該新たな閾値に基づいて、前記受信パケットを格納すべきキューのキュー番号を決定する、請求項３に記載の受信パケット分散方法。
【請求項５】
携帯端末からのユーザデータパケットを受信パケットとして受信し、バーチャルマシンに割り当てられた複数のＣＰＵコアにそれぞれ対応し、かつそれぞれキュー番号が割り当てられた複数のキューへ、前記受信パケットを分配して格納するキュー選択器であって、
前記ユーザデータパケットを前記受信パケットとして受信する受信手段と、
前記受信パケットのペイロードに位置するユーザＩＰアドレスを抽出する抽出手段と、
該抽出したユーザＩＰアドレスのハッシュ値を計算し、該ハッシュ値に基づいて、前記受信パケットを格納すべきキューのキュー番号を選択する計算・選択手段と、
前記複数のＣＰＵコア毎にＣＰＵ使用率を格納する判定テーブルを参照し、前記ＣＰＵ使用率に基づいて、前記選択したキュー番号を、前記受信パケットを格納すべきキューのキュー番号とするか否かを決定する決定手段と、
該決定したキュー番号のキューに前記受信パケットを格納する格納手段と、
を備えることを特徴とするキュー選択器。
【請求項６】
携帯端末からのユーザデータパケットを受信パケットとして受信して処理するパケット処理装置であって、
それぞれキュー番号が割り当てられた複数のキューと、
該複数のキューにそれぞれ対応して、バーチャルマシンに割り当てられた複数のＣＰＵコアと、
前記複数のＣＰＵコア毎にＣＰＵ使用率を格納する判定テーブルと、
前記受信パケットを、前記判定テーブルを参照して、前記複数のキューの適切なキューに振り分けるキュー選択器と、
を備えることを特徴とするパケット処理装置。
【請求項７】
前記複数のＣＰＵコアは、定期的に、それぞれのＣＰＵ使用率を前記判定テーブルに送信して格納する、請求項６に記載のパケット処理装置。
【請求項８】
前記複数のＣＰＵコアは、それぞれ、対応するキューに格納された受信パケットを刈り取り、パケット処理を行う、請求項６又は７に記載のパケット処理装置。
【請求項９】
コンピュータに、携帯端末からのユーザデータパケットを受信パケットとして受信させ、バーチャルマシンに割り当てられた複数のＣＰＵコアにそれぞれ対応し、かつそれぞれキュー番号が割り当てられた複数のキューへ、前記受信パケットを分散させるプログラムであって、前記プログラムは前記コンピュータに、
前記ユーザデータパケットを前記受信パケットとして受信する受信手順と、
前記受信パケットのペイロードに位置するユーザＩＰアドレスを抽出する抽出手順と、
該抽出したユーザＩＰアドレスのハッシュ値を計算し、該ハッシュ値に基づいて、前記受信パケットを格納すべきキューのキュー番号を選択する計算・選択手順と、
前記複数のＣＰＵコア毎にＣＰＵ使用率を格納する判定テーブルを参照し、前記ＣＰＵ使用率に基づいて、前記選択したキュー番号を、前記受信パケットを格納すべきキューのキュー番号とするか否かを決定する決定手順と、
該決定したキュー番号のキューに前記受信パケットを格納する格納手順と、
を実行させる。
【請求項１０】
携帯端末からのユーザデータパケットを受信パケットとして受信し、複数のバーチャルマシンの各々に割り当てられた複数のＣＰＵコアへ、前記受信パケットを分散するネットワークインタフェースカード（ＮＩＣ）であって、
前記ネットワークインタフェースカードは、複数のＶＦ（Ｖｉｒｔｕａｌ  Ｆｕｎｃｔｉｏｎ）と一つのＰＦ（Ｐｈｙｓｉｃａｌ  Ｆｕｎｃｔｉｏｎ）とを具備し、前記ＰＦ上に仮想的に前記複数のＶＦが構成され、各バーチャルマシンは各ＶＦを使用してパケットを送受信することができ、
各ＶＦは、
前記複数のＣＰＵコアにそれぞれ対応し、かつそれぞれキュー番号が割り当てられた複数のキューと、
前記複数のＣＰＵコア毎にＣＰＵ使用率を格納する判定テーブルと、
前記受信パケットを、前記判定テーブルを参照して、前記複数のキューの適切なキューに振り分けるキュー選択器と、
を備えるネットワークインタフェースカード。
【手続補正２】
【補正対象書類名】明細書
【補正対象項目名】全文
【補正方法】変更
【補正の内容】
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、携帯端末からのユーザデータパケットを受信して処理するパケット処理装置に関し、特に、外部から入力されるユーザデータパケットを、バーチャルマシンに割り当てられた複数のＣＰＵ（ｃｅｎｔｒａｌ  ｐｒｏｃｅｓｓｉｎｇ  ｕｎｉｔ）コアへ適切に分散する受信パケット分散方法、キュー選択器、パケット処理装置、および記録媒体に関する。
【背景技術】
【０００２】
近年、ＬＴＥ（Ｌｏｎｇ  Ｔｅｒｍ  Ｅｖｏｌｕｔｉｏｎ）等を収容するＥＰＣ（Ｅｖｏｌｖｅｄ  Ｐａｃｋｅｔ  Ｃｏｒｅ）等のモバイルネットワークを、ＮＦＶ（Ｎｅｔｗｏｒｋ  Ｆｕｎｃｔｉｏｎｓ  Ｖｉｒｔｕａｌｉｚａｔｉｏｎ）等で仮想化することが検討されている。この場合、携帯端末からのユーザデータパケットを受信して処理するデータブレーンパケット処理装置は、バーチャルマシン上で実現される。
【０００３】
ここで、ＮＦＶとは、ネットワークを制御する通信機器の機能をソフトウェアとして実装し、汎用サーバの仮想化されたＯＳ（ｏｐｅｒａｔｉｎｇ  ｓｙｓｔｅｍ）上で実行する方式をいう。
【０００４】
ＥＰＣでは、３ＧＰＰ（３ｒｄ  Ｇｅｎｅｒａｔｉｏｎ  Ｐａｒｔｎｅｒｓｈｉｐ  Ｐｒｏｊｅｃｔ）で規定されている既存２Ｇ／３Ｇ網を収容しつつ、新たなＬＴＥアクセス網を収容する能力を持つ。ＥＰＣは、さらにはＷＬＡＮ（ｗｉｒｅｌｅｓｓ  Ｌｏｃａｌ  Ａｒｅａ  Ｎｅｔｗｏｒｋ）やＷｉＭＡＸ（Ｗｏｒｌｄｗｉｄｅ  Ｉｎｔｅｒｏｐｅｒａｂｉｌｉｔｙ  ｆｏｒ  Ｍｉｃｒｏｗａｖｅ  Ａｃｃｅｓｓ）、３ＧＰＰ２などのｎｏｎ?３ＧＰＰアクセスを含めた多様なアクセスネットワークを収容することができる。ＥＰＣは、ＭＭＥ（Ｍｏｂｉｌｉｔｙ  Ｍａｎａｇｅｍｅｎｔ  Ｅｎｔｉｔｙ）、Ｓ?ＧＷ（Ｓｅｒｖｉｎｇ  Ｇａｔｅｗａｙ）、Ｐ?ＧＷ（Ｐａｃｋｅｔ  ｄａｔａ  ｎｅｔｗｏｒｋ  ｇａｔｅｗａｙ）から構成され、さらには、Ｓ?ＧＷ／Ｐ?ＧＷの統合型のゲートウェイも提供可能である。
【０００５】
ここで、ＭＭＥとは、ＬＴＥ端末の位置登録や着信時の端末呼び出し処理、無線基地局間ハンドオーバといったモビリティ管理を行うノードである。Ｓ?ＧＷは、ＬＴＥおよび３Ｇシステムへアクセスを行う携帯端末の音声やパケットなどのユーザデータを処理するノードである。Ｐ?ＧＷは、コアネットワークとＩＭＳ（ＩＰ  Ｍｕｌｔｉｍｅｄｉａ  Ｓｕｂｓｙｓｔｅｍ）あるいは外部パケット網とのインタフェースを持つノードである。なお、ＩＭＳは、マルチメディアアプリケーションをＩＰ（ｉｎｔｅｒｎｅｔ  ｐｒｏｔｏｃｏｌ）で実現するためのサブシステムである。
【０００６】
ＮＦＶの仮想化においては、図１に示される矩形で囲んだ部分である、ＬＴＥ基地局を収容するモバイルコアネットワーク装置（ＥＰＣ）の、モビリティ制御などを担うＭＭＥ、加入者情報を管理するＨＳＳ（Ｈｏｍｅ  Ｓｕｂｓｃｒｉｂｅｒ  Ｓｅｒｖｅｒ）、ポリシーによって通信機能を制御するＰＣＲＦ（Ｐｏｌｉｃｙ  ａｎｄ  Ｃｈａｒｇｉｎｇ  Ｐｕｌｅｓ  Ｆｕｎｃｔｉｏｎ）、パケットを伝送するＳ／Ｐ?ＧＷの機能を、オールインワンで汎用ＩＡ（Ｉｎｔｅｌ  Ａｒｃｈｉｔｅｃｔｕｒｅ）サーバの仮想化基盤上で実現する。
【０００７】
尚、ＩＡサーバとは、通常のパーソナルコンピュータと同様のアーキテクチャをベースに、ＩｎｔｅｌのＩＡ−３２またはＩＡ−６４系のＣＰＵ（ｃｅｎｔｒａｌ  ｐｒｏｃｅｓｓｉｎｇ  ｕｎｉｔ）や、ＡＭＤ（Ａｄｖａｎｃｅｄ  Ｍｉｃｒｏ  Ｄｅｖｉｃｅｓ，Ｉｎｃ．）などのインテル互換ＣＰＵを搭載したサーバのことである。ＩＡサーバはＰＣサーバとも呼ばれる。ＰＣサーバは、パーソナルコンピュータ（ＰＣ）を基本に設計・製造されたサーバである。
【０００８】
なお、図１において、ｅＮＢ（ｅｖｏｌｖｅｄ  ＮｏｄｅＢ）は、ＬＴＥにおける無線基地局（ｅ−ＮｏｄｅＢ）である。また、図中の携帯端末は、いわゆるガラパゴス携帯、スマートフォン、タブレット端末を想定している。
【０００９】
前述したように、ＮＦＶは、専用ハードウェアで実現されていたモバイルコア等のネットワークを汎用サーバのソフトウェアで実現できることを目的としている。データプレーンパケット処理装置は、汎用サーバに搭載されたマルチコアＣＰＵ上で仮想化されたバーチャルマシン上のソフトフェアとして実現される。マルチコアＣＰＵは、複数のＣＰＵコアを備える。
【００１０】
マルチコアＣＰＵ上で、データプレーンパケット処理装置の処理能力を向上させるためには、複数のＣＰＵコアでパケット処理動作を行い、さらにそのＣＰＵコア数に応じて性能をスケールさせる必要がある。
【００１１】
使用するＣＰＵコア数に応じた性能スケールをソフトウェア処理で実現するには、通常、次の方法が採用される。まず、汎用サーバにおけるパケット受信部であるＮＩＣ（Ｎｅｔｗｏｒｋ  Ｉｎｔｅｒｆａｃｅ  Ｃａｒｄ）から、バーチャルマシン上の受信専用ＣＰＵコアにてパケットを刈り取る。次に、そのパケットを各ＣＰＵコア（パケット処理コア）に振り分ける。そして、それらのパケットを受け取った各々のＣＰＵコア（パケット処理コア）にてパケット処理する。
【００１２】
ここで、性能を向上させるためには、外部から入力されるユーザデータパケット（受信パケット）を、バーチャルマシンに割り当てられた複数のＣＰＵコアへ適切に配分（分散）することが必要である。
【００１３】
このような受信パケットを分散する方法に関する先行技術（関連技術）は、従来から種々知られている。
【００１４】
例えば、特開２０１０−２２６２７５号公報（特許文献１）は、マルチコアプロセッサを利用してパケットを処理する際、マルチコアプロセッサのリソースを有効利用できるようにした、「通信装置」を開示している。
【００１５】
この特許文献１に開示された通信装置では、複数のマルチコアプロセッサ部の内のどのマルチコアプロセッサ部へデータパケットを出力するべきかを決定する場合、ＩＰデータパケットの「あて先ＩＰアドレス」、「ソースＩＰアドレス」、「プロトコル番号」などの情報からハッシュ関数を用いて算出した値をもとに、出力先のマルチコアプロセッサ部を決定する方式を採用している。マルチコアプロセッサ部の内部には複数のコアが配置されている。各コアはそれぞれ複数のスレッドを同時に実行できる構成となっている。受信コントロール部は、新規に受信したデータパケットをメインメモリにストアすると共に、ワークコントロール部に対して上記データパケットの処理をワークという形で受け渡し、ワークに対するスレッドの割り当てを依頼する機能を有する。
【００１６】
また、特開２０１１−０７７７４６号公報（特許文献２）は、各コアがパケットを最大限に並列処理可能な、「ネットワーク中継装置」を開示している。
【００１７】
特許文献２に開示されたネットワーク中継装置は、受信待ちキューと、下位フロー識別部と、上位フロー識別待ちキューと、転送処理待ちキューと、上位フロー識別／転送処理部と、送信待ちキューとから構成されている。ネットワーク中継装置がパケットを受信したとき、受信待ちキューにパケットを一時的に保持する。下位フロー識別部は受信待ちキューからパケットを１つ取り出し、例えばＩＰヘッダの送信元ＩＰアドレスや宛先ＩＰアドレスなどのヘッダ情報を用いてハッシュ関数を計算し、計算したハッシュ関数により、下位フロー毎に上位フロー識別待ちキューにパケットを振り分ける。上位フロー識別／転送処理部は、上位フロー識別処理を転送処理の２つの処理を１つのコア上同居させた処理部である。本実施例においてマルチコアＣＰＵを用いたが、複数のＣＰＵを用いて実施してもよい。
【００１８】
さらに、特開２００９−２３９３７４号公報（特許文献３）は、複数の仮想計算機におけるＶＮＩＣ（Ｖｉｒｔｕａｌ  Ｎｅｔｗｏｒｋ  Ｉｎｔｅｒｆａｃｅ  Ｃａｒｄ）のパケット送信遅延を少なくする、「仮想計算機システム」を開示している。
【００１９】
特許文献３に開示された仮想計算機システムにおいて、複数の仮想計算機と物理ＮＩＣとは共通バスにより相互接続されている。これら仮想計算機の各々は仮想ネットワークインタフェースカード（ＶＮＩＣ）を有している。物理ネットワークインタフェースカード（物理ＮＩＣ）は、共通バスに接続されてＶＮＩＣにより共有（共用）されている。物理ＮＩＣは、ネットワークから受信したパケットについて受信した順番で処理を行う。ネットワークからネットワークＩ／Ｆが、受信バケット番号１（以下単に番号１と称す）の受信パケットデータを受信すると、受信バッファにこの受信パケットデータを格納する。受信バッファは、格納された番号１の受信パケットデータから受信対象のＩＰアドレスデータを抜き出し、この受信パケットのＩＰアドレスに対応する受信キューを選択する。
【００２０】
さらにまた、特開２０１１−１４１５８７号公報（特許文献４）は、ネットワークにアップロードした単一の情報量の多いデータに対して、応答時間を短縮する、「分散処理システム」を開示している。
【００２１】
特許文献４に開示された分散処理システムは、受付応答装置と、分断統合装置と、複数の処理装置と、１つ以上のキュー監視装置と、を含んで構成される。受付応答装置は、ユーザ端末からネットワークを介してデータ（アップロードデータ）を受信する。分断統合装置は、受付応報装置が受け付けたデータを取得して、そのデータを分断して断片データを生成し、さらに処理された断片データを統合する。複数の処理装置は、断片データを取得し、データ処理を行う。１つ以上のキュー監視装置は、分断統合装置から出力された断片データを取得してキューとして記憶し、処理装置からの要求により断片データを処理装置に送信する。処理装置は、キュー管理装置から断片データを取得し、その取得した断片データに対し所定のデータ処理を実行する。この処理装置は、キュー選択部と、断片データ取得部と、データ処理部と、断片データ結果出力部とを含んで構成される。キュー選択部は、断片データの取得元となるキュー管理装置を選択する。このときのキュー管理装置の選択は、例えば、ラウンドロビン法等の分散アルゴリズムを用いて行われる。断片データ取得部は、キュー選択ぶにより選択されたキュー管理装置に、断片データの取得要求を送信し、キュー管理装置から断片データを取得する。
【先行技術文献】
【特許文献】
【００２２】
【特許文献１】特開２０１０−２２６２７５号公報（［００１３］、［００１５］
【特許文献２】特開２０１１−０７７７４６号公報（［００１３］、［００１５］、［００２３］、［００２４］）
【特許文献３】特開２００９−２３９３７４号公報（図１、図９、［００２５］、［００６９］、［００７０］）
【特許文献４】特開２０１１−１４１５８７号公報（図１、［００３１］−［００３３］、［００５５］−［００５７］）
【発明の概要】
【発明が解決しようとする課題】
【００２３】
汎用サーバをＮＦＶにて仮想化し、それ上のバーチャルマシンにてユーザデータ処理装置を構成する場合、スループット性能に課題がある。その理由は、ネットワーク専用ハードウェアで構成されたユーザデータ処理装置と異なり、全ての機能をソフトウェアで実現するためである。
【００２４】
例えば、バーチャルマシンにて構成したユーザデータ処理装置は、ＳＲＩＯＶ（Ｓｉｎｇｌｅ  Ｒｏｏｔ  Ｉ／Ｏ  Ｖｉｒｔｕａｌｉｚａｔｉｏｎ）のような汎用機能を使い、ＶＦ（Ｖｉｒｔｕａｌ  Ｆｕｎｃｔｉｏｎ）パススルー機能を使うことで、Ｇｕｓｅｔ  ＯＳ（バーチャルマシン）側からホストＯＳを経由せず直接ＮＩＣ経由で外部との通信が可能となる。このため、ホストＯＳ側との通信に必要なオーバーヘッドを排除することができ、性能を向上させることができる。しかしながら、外部から入力されるユーザパケットデータをバーチャルマシンに割り当てられた複数のＣＰＵコアへ適切に分配できなければ、ＣＰＵコア数に応じて性能がスケールできない課題がある。何故ならば、特定のＣＰＵコアに処理負荷が偏り、全てのＣＰＵコアリソースを使い切ることができないからである。ＣＰＵコアが１つであれば、問題がないが、マルチコアプロセッサ上でＣＰＵコア数に比例して性能を向上させることができない。
【００２５】
関連技術では、複数のＣＰＵコアとして、複数のパケット処理コアとは別に受信専用コアを配備し、例えば、上記特許文献４に開示されているように、本受信専用コアで各パケット処理コアにラウンドロビンロジック等で受信パケットを分配することで分散することが可能である。しかしながら、受信されるパケット長等のぱらつきにより、特定のパケット処理コアにロングパケットあるいはショートパケットが集中的に分配される可能性がある。パケットサイズにより１パケットあたりのＣＰＵコアの負荷は変動する。そのため、ＣＰＵコア負荷の観点からは、結果として偏りが発生し、ＣＰＵコア数に比例して性能スケールさせることができない。その結果、処理能力を最大化することはできない。
【００２６】
また、受信専用コアによる分配ロジックを変更し、これらの課題を解決しようとすることも考えられる。しかしながら、この場合、分配ロジックが複雑になるため分配能力が低下し、分散可能となるＣＰＵコア（パケット処理コア）の数が減少し、スケールできるＣＰＵコア数が制限される。その結果として、マルチコアプロセッサ上での性能を最大化できない課題がある。
【００２７】
ラウンドロビンのような単純なロジックでも、パケットを受信し、転送先のＣＰＵコア（パケット処理コア）を決定し、パケットを転送する処理が発生する。そのため、転送先のＣＰＵコア（パケット処理コア）が増えた場合、パケット転送の際に発生する各ＣＰＵコア（パケット処理コア）間の排他制御が増大し、受信専用コアがボトルネックとなり、性能スケールできない課題がある。
【００２８】
また、ＥＰＣ等のモバイルネットワークで使用されるユーザデータは、ＧＴＰ（Ｇｅｎｅｒａｌ  Ｔｕｎｎｅｌ  Ｐｒｏｔｏｃｏｌ）でカプセル化され、ノード装置間通信用のノードＩＰアドレスが付与され、このノードＩＰアドレスを使って通信される。このノードＩＰアドレスは、パケットを受信する装置としては全て同じ送信先ＩＰアドレスになる。汎用ＮＩＣに実装されているＲＳＳ（Ｒｅｃｅｉｖｅ  Ｓｉｄｅ  Ｓｃａｌｉｎｇ）機能を使い、ＮＩＣ側でＩＰアドレスに従って、分散させることは可能である。しかしながら、ＥＰＣ等のモバイルネットワークで使用するノードＩＰアドレスは、パケット処理装置としては同じ値になるため、事実上分散させることはできない課題がある。
【００２９】
さらに、分散させたいユーザＩＰアドレスはカプセル化されたパケットのペイロード中に存在するため、汎用ＮＩＣに具備されているＲＳＳ機能ではユーザＩＰアドレスを参照できない課題がある。
【００３０】
以上を纏めると、関連のＮＦＶ等の技術を使った仮想化環境上で構成される、パケット処理装置における受信パケットの負荷分散方法には、次のような課題がある。
【００３１】
第１の課題は、関連技術の装置では、受信専用コアとしてＣＰＵコアリソースを占有し、さらにパケット処理コアと受信専用コアとの間のパケット授受によるオーバーヘッドにより、１ＣＰＵコアあたりのパケット処理性能が劣化することである。その理由は、次の通りである。ＳＲＩＯＶ等の機能を使いＮＩＣ上に複数のＶＦを構築した場合、ＶＦ上の受信パケットキューは１つしか構成できない。そのため、この受信パケットをＮＩＣの受信パケットキューから刈り取る受信専用コアを配備しなければならない。
【００３２】
第２の課題は、携帯端末単位でのパケットの分散ができず、特定の受信パケットキューあるいはパケット処理コアに負荷が集中してしまい、パケット処理するＣＰＵコアを増やしても、ＣＰＵコア数に応じてパケット処理性能がスケールできないことである。その理由は、次の通りである。ＮＩＣ上のＰＦ（Ｐｈｙｓｉｃａｌ  Ｆｕｎｃｔｉｏｎ）機能と同様にＶＦ上で複数の受信パケットキューを構築し、ＲＳＳ機能により各受信パケットキューにパケットを分散することができるＮＩＣカードが実現できたとする。その場合でも、ＥＰＣ等のモバイルネットワークにおけるユーザパケットデータは、ＧＴＰにてカプセル化される。そのため、携帯端末のＩＰアドレスはペイロード中に格納され、パケットのヘッダに付与されるＩＰアドレスは、ＥＰＣ内部の各ノード間で送受信するためのノードＩＰアドレスである。その結果、標準的にＮＩＣに具備されているＲＳＳ機能では、このノードＩＰアドレスに基づいてしか、ＮＩＣの各受信パケットキューに受信パケットを分散させることが出来ない。
【００３３】
第３の課題は、ユーザの利用形態あるいはアプリケーションの特性に応じて、各パケット処理コアの負荷は平滑化することができず、パケット処理するＣＰＵコアの数を増やしても、ＣＰＵコア数に応じてパケット処理性能がスケールできないことである。その理由は、次の通りである。携帯端末のユーザＩＰアドレスベースでのパケット分散ができたとしても、ユーザパケットデータ長は一定ではなく、ユーザ毎あるいはアプリケーション毎にパケット長が異なる。その結果、処理するパケットデータの長が異なると、ＣＰＵコアの負荷もパケット毎に変動する。
【００３４】
なお、特許文献１は、単に、ＩＰデータパケットの情報からハッシュ関数を用いて算出した値をもとに、出力先のマルチコアプロセッサ部を決定する、技術的思想を開示しているに過ぎない。
【００３５】
特許文献２は、単に、パケットを受信したとき、受信待ちキューにパケットを一時的に保持し、受信待ちキューからパケットを１つ取り出し、取り出したパケットのＩＰヘッダのヘッダ情報を用いてハッシュ関数を計算し、計算したハッシュ値により、下位フロー毎に上位フロー識別待ちキューにパケットを振り分け、上位フロー識別待ちキューにあるパケットを刈り取って、上位フロー識別処理を行う、技術的思想を開示しているに過ぎない。
【００３６】
特許文献３は、単に、受信パケットデータから受信対象のＩＰアドレスデータを抜き出し、この受信パケットのＩＰアドレスに対応する受信キューを選択する、技術的思想を開示しているに過ぎない。
【００３７】
特許文献４は、前述したように、単に、キュー管理装置の選択を、ラウンドロビン法等の分散アルゴリズムを用いて行う、技術的思想を開示しているに過ぎない。
【００３８】
本発明の目的は、ＣＰＵコア数に応じてユーザデータパケットの処理能力をスケールさせることができる、受信パケット分散方法、キュー選択器、パケット処理装置、および記録媒体を提供することにある。
【課題を解決するための手段】
【００３９】
本発明の一形態は、携帯端末からのユーザデータパケットを受信パケットとして受信し、バーチャルマシンに割り当てられた複数のＣＰＵコアにそれぞれ対応し、かつそれぞれキュー番号が割り当てられた複数のキューへ、前記受信パケットを分散する受信パケット分散方法であって、前記ユーザデータパケットを前記受信パケットとして受信し、前記受信パケットのペイロードに位置するユーザＩＰアドレスを抽出し、該抽出したユーザＩＰアドレスのハッシュ値を計算し、該ハッシュ値に基づいて、前記受信パケットを格納すべきキューのキュー番号を選択し、前記複数のＣＰＵコア毎にＣＰＵ使用率を格納する判定テーブルを参照し、前記ＣＰＵ使用率に基づいて、前記選択したキュー番号を、前記受信パケットを格納すべきキューのキュー番号とするか否かを決定し、該決定したキュー番号のキューに前記受信パケットを格納すること、を特徴とする。
【発明の効果】
【００４０】
本発明によれば、ＣＰＵコア数に応じてユーザデータパケットの処理能力をスケールさせることができる。
【図面の簡単な説明】
【００４１】
【図１】図１は、モバイルネットワークをＮＦＶで仮想化する例を説明する図である。
【図２】図２は、本発明の第１の実施例に係るパケット処理装置の構成を示すブロック図である。
【図３】図３は、図２に示したパケット処理御装置に使用される、判定デーブルの一例を示す図である。
【図４】図４は、図２に示したパケット処理御装置に使用される、キュー選択器の構成を示すブロック図である。
【図５】図５は、図２に示したパケット処理御装置に使用される、キュー選択器の動作を説明するためのフローチャートである。
【発明を実施するための形態】
【００４２】
［関連技術］
本発明の理解を容易にするために、以下では本発明に関連する技術について説明する。
【００４３】
前述したように、ＬＴＥ（Ｌｏｎｇ  Ｔｅｒｍ  Ｅｖｏｌｕｔｉｏｎ）等を収容するＥＰＣ（Ｅｖｏｌｖｅｄ  Ｐａｃｋｅｔ  Ｃｏｒｅ）等のモバイルネットワークをＮＦＶ（Ｎｅｔｗｏｒｋ  Ｆｕｎｃｔｉｏｎｓ  Ｖｉｒｔｕａｌｉｚａｔｉｏｎ）等で仮想化することがある。この場合、携帯端末からのユーザデータパケットを処理するデータブレーンパケット処理装置は、バーチャルマシン上で実現される。
【００４４】
ＮＦＶは、専用ハードウェアで実現されていたモバイルコア等のネットワークを汎用サーバのソフトウェアで実現できることを目的としている。データプレーンパケット処理装置は、汎用サーバに搭載されたマルチコアＣＰＵ上で仮想化されたバーチャルマシン上のソフトフェアとして実現される。マルチコアＣＰＵは、複数のＣＰＵコアを備える。
【００４５】
マルチコアＣＰＵ上で、データプレーンパケット処理装置の処理能力を向上させるためには、複数のＣＰＵコアでパケット処理動作を行い、さらにそのＣＰＵコア数に応じて性能をスケールさせる必要がある。
【００４６】
使用するＣＰＵコア数に応じた性能スケールをソフトウェア処理で実現するには、通常、次の方法が採用される。まず、汎用サーバにおけるパケット受信部であるＮＩＣから、バーチャルマシン上の受信専用コアにてパケットを刈り取る。次に、そのパケットを各ＣＰＵコア（パケット処理コア）に振り分ける。そして、それらのパケットを受け取った各々のＣＰＵコア（パケット処理コア）にてパケット処理する。
【００４７】
しかしながらこの方法では、ＣＰＵコアをスケールさせる前に比べて、受信専用コアのＣＰＵリソースを余計に消費し、また、分散させるＣＰＵコアの数が増えた場合、受信専用コアがボトルネックとなり性能スケールができないという問題がある。
［実施の形態］
この問題を解決するために、本発明の実施形態では、図２に示すようなインテリジェントな機能を具備したネットワークインタフェースカード（ＮＩＣ）１１を使ったパケット処理装置１０を構成する。
【００４８】
汎用サーバに挿入されたインテリジェントな機能を具備したＮＩＣ１１で、ユーザデータパケットを受信すると、キュー選択器１４は、パケットの振り分けを行い、各キュー１５−０、・・・、１５−ｍへパケットデータを積み込む。ここで、ｍは２以上の整数である。
【００４９】
この時、キュー選択器１４は、判定テーブル１３に従って、振り分け先を決定する。キュー選択器１４は、判定テーブル１３を参照して、第０乃至第ｍのＣＰＵコア１８−０、・・・、１８−ｍから展開されるＣＰＵ使用率等に基づいて、適切なキューにパケットデータを振り分ける。
【００５０】
ＥＰＣ等のモバイルコアネットワークでは、ＥＰＣ等モバイルコアネットワーク装置間通信用のノードＩＰアドレスと、ユーザ毎に割り当てられるユーザＩＰアドレスと、の２種類のＩＰアドレスがある。ユーザデータパケットは、ＧＴＰ（Ｇｅｎｅｒａｌ  Ｔｕｎｎｅｌｉｎｇ  Ｐｒｏｔｏｃｏｌ）にてカプセル化され、ノードＩＰアドレスが付与される。
【００５１】
汎用の物理ＮＩＣでは、ＶＦ（Ｖｉｒｔｕａｌ  Ｆｕｎｃｔｉｏｎ）上のＲＳＳ（Ｒｅｃｅｉｖｅ  Ｓｉｄｅ  Ｓｃａｌｉｎｇ）機能にてＩＰアドレスのハッシュ値を計算し、このハッシュ値に基づき分散を行うことが可能である。
【００５２】
しかしながら、ＥＰＣ等のモバイルコアネットワークのユーザデータパケットは、通常、ＮＩＣでは、ノードＩＰアドレスのハッシュ値に従ったパケット振り分けになる。このため、同一ネットワーク装置から送信される、あるいは同一ネットワーク装置に送信される、ユーザデータパケットを受信するケースにおいては、同一のＣＰＵコアにユーザデータパケットが集中し、パケットの分散処理が期待通りに行われない。
【００５３】
ユーザＩＰアドレスは、パケットのペイロードに位置するため、汎用のＮＩＣのＲＳＳ機能では、ユーザＩＰアドレスのハッシュ値に従ったパケット振り分けができない。
【００５４】
そこで、本発明の実施形態では、判定テーブル１３は、第０乃至第ｍのＣＰＵコア１８−０、・・・、１８−ｍから展開された送信元ユーザＩＰアドレス、送信先ユーザＩＰアドレスに従って、振り分けるキュー１５−０、・・・、１５−ｍを決定したハッシュテーブルを作成する。
【００５５】
キュー選択器１４は、受信したパケットのペイロード中に位置するユーザＩＰアドレスを抽出し、ハッシュ値を計算した後、判定テーブル１３を参照し、受信したパケットを格納するキューを選択する。その後、キュー選択器１４は、判定テーブル１３におけるＣＰＵ使用率を参照する。選択したキューに割り当てられているＣＰＵコアのＣＰＵ使用率が閾値以上の場合、キュー選択器１４は、閾値以下のＣＰＵ使用率であるＣＰＵコアの中で最も低いＣＰＵコアに割り当てられるキューを決定する。
【００５６】
キュー選択器１４は、決定したキューに受信パケットを格納する。全てのＣＰＵコアのＣＰＵ使用率が閾値以上になった場合、キュー選択器１４は、１００％と古い閾値の間で新たな閾値を設定し、この新たな閾値に従って同様なキュー選択決定処理を行う。また、全てのＣＰＵコア使用率が新たな閾値を超える場合、キュー選択器１４は、同様に閾値の使用率１００％に達するまで再設定を行い、これを繰り返す。
【００５７】
第０乃至第ｍのＣＰＵコア１８−０、・・・、１８−ｍは、それぞれ、割り当てられているインテリジェントな機能を具備したＮＩＣ１１上のキュー１５−０、・・・、１５−ｍをポーリングすることで、パケットを随時刈り取り、第０乃至第ｍのＣＰＵコア１８−０、・・・、１８−ｍで引き取ったユーザデータパケットの処理を行う。
【００５８】
このように、本発明の実施形態では、インテリジェントな機能を具備したＮＩＣ１１上に実装される判定テーブル１３とキュー選択器１４にて、各ＣＰＵコア１８−０、・・・、１８−ｍに受信したユーザデータパケットが分散され、各ＣＰＵコア１８−０、・・・、１８−ｍのＣＰＵコアリソースが平滑化される。そのため、全てのＣＰＵコアリソース使い切ることができ、ＣＰＵコア数に応じてユーザデータパケットの処理能力をスケールさせることが可能となる。
【００５９】
以下、図面を参照して、本発明の実施例とその動作について詳細に説明する。
［実施例１］
図２は、本発明の第１の実施例に係るパケット処理装置１０の構成を示すブロック図である。
【００６０】
パケット処理装置１０は、インテリジェントな機能を具備したＮＩＣ１１と、複数のパケット処理用バーチャルマシンとを備えている。図示の例では、複数のパケット処理用バーチャルマシンとして、第０のパケット処理用バーチャルマシン１７?０乃至第ｎのパケット処理用バーチャルマシン（図示せず）の、合計（ｎ＋１）のパケット処理用バーチャルマシンを備えている。ここで、ｎは１以上の整数である。
【００６１】
図２において、インテリジェントな機能を具備したＮＩＣ１１は、ＰＦ（Ｐｈｙｓｉｃａｌ  Ｆｕｎｃｔｉｏｎ）１６と、複数のＶＦ（Ｖｉｒｔｕａｌ  Ｆｕｎｃｔｉｏｎ）１２−０〜１２−ｎとを具備する。ＰＦ１６上には仮想的に複数のＶＦ１２−０〜１２−ｎが構成され、各バーチャルマシン１７−０・・・は各ＶＦ１２−０〜１２−ｎを使用してパケットを送受信することができる。本例では、複数のＶＦとして、第０のＶＦ１２−０乃至第ｎのＶＦ１２−ｎの、合計（ｎ＋１）個のＶＦを備えている。
【００６２】
第０乃至第ｎのＶＦ１２−０〜１２−ｎの各々は、同じ構成をしている。したがって、以下では、第０のＶＦ１２−０を代表として説明し、他のＶＦについての説明を省略する。
【００６３】
第０のＶＦ１２−０は、判定テーブル１３と、キュー選択器１４と、複数のキュー１５−０〜１５−ｍとを備えている。図示の例では、複数のキューとして、第０のキュー１５−０乃至第ｍのキュー１５−ｍの、合計（ｍ＋１）個のキューを備えている。
【００６４】
一方、第０のパケット処理用バーチャネルマシン１７?０は、複数のＣＰＵコア１８−０〜１８−ｍを備えている。図示の例では、複数のＣＰＵコアとして、第０のＣＰＵコア１８−０乃至第ｍのＣＰＵコア１８−ｍの、合計（ｍ＋１）個のＣＰＵコアを備えている。
【００６５】
図２に示されるように、複数のキュー１５−０〜１５−ｍは、第０のパケット処理用バーチャルマシン１７−０に割り当てられた複数のＣＰＵコア１８−０〜１８−ｍにそれぞれ対応している。また、第０乃至第ｍのキュー１５−０〜１５−ｍには、それぞれ、＃０〜＃ｍのキュー番号が割り当てられている。
【００６６】
判定テーブル１３は、図３に示されるように、複数のＣＰＵコア１８−０〜１８−ｍごとにＣＰＵ使用率を格納する。図３に示す例では、第０のＣＰＵコア１８−０のＣＰＵ使用率は１％であり、第１のＣＰＵコアのＣＰＵ使用率は２０％であり、第ｍのＣＰＵコア１８−ｍのＣＰＵ使用率は５％である。
【００６７】
尚、判定テーブル１３は、ＣＰＵ使用率の他に、上述したような、複数のＣＰＵコア１８−０〜１８−ｍから展開された送信元ユーザＩＰアドレス、送信先ユーザＩＰアドレスに従って、振り分けるキュー１５−０〜１５−ｍを決定したハッシュテーブルや、処理すべき対象となるユーザＩＰアドレス等の呼処理情報をも格納する。
【００６８】
本発明の実施形態によるパケット処理装置１０は、インテリジェントな機能を有するＮＩＣ１１内のキュー選択器１４でユーザデータパケットを受信すると、後述のように、第０乃至第ｍのキュー１５−０〜１５−ｍのどのキューに受信パケットを格納すべきかを決定する。すなわち、キュー選択器１４は、携帯端末からユーザデータパケットを受信パケットとして受信し、後述のように、複数のキュー１５−０〜１５−ｍへ、受信パケットを分配して格納する。
【００６９】
図４は、キュー選択器１４の構成を示すブロック図である。キュー選択器１４は、受信手段１４１と、抽出手段１４２と、計算・選択手段１４３と、決定手段１４４と、格納手段１４５とを備えている。
【００７０】
図５は、キュー選択器１４の動作を説明するためのフローチャートである。
【００７１】
受信手段１４１は、ユーザデータパケットを受信パケットとして受信する（図５のステップＳ１０１）。抽出手段１４２は、受信パケットのペイロードに位置するユーザＩＰアドレスを抽出する（図５のステップＳ１０２）。計算・選択手段１４３は、抽出したユーザＩＰアドレスのハッシュ値を計算し、このハッシュ値に基づいて、受信データを格納すべきキューのキュー番号を選択する（図５のステップＳ１０３）。
【００７２】
決定手段１４４は、判定テーブル１３を参照し（図５のステップＳ１０４）、ＣＰＵ使用率に基づいて、後述のように、選択したキュー番号を、受信パケットを格納すべきキューのキュー番号とするか否かを決定する（図５のステップＳ１０５〜Ｓ１０９参照）。
【００７３】
格納手段１４５は、決定したキュー番号のキューに受信パケットを格納する（図５のステップＳ１１０）。
【００７４】
本実施形態では、このキューから受信パケットを刈り取ることによって、ＣＰＵコアの負荷分散を図っている。
【００７５】
次に、図５を参照して、決定手段１４４の動作について更に詳細に説明する。
【００７６】
ハッシュ値に基づくキュー番号を決定する前に、決定手段１４４は、判定テーブル１３を参照し（ステップＳ１０４）、選択したキュー番号にアサインされたＣＰＵコアの使用率が予め定められた閾値以下であることを確認した上で（ステップＳ１０５のＹｅｓ）、キュー番号を決定する（ステップＳ１０６）。
【００７７】
ユーザＩＰアドレスに基づくハッシュ値により、受信パケットのキューへの分散を図っても、パケット長等のトラヒック特性等によりＣＰＵコアの負荷は一様ではない。そのため、通常では、ＣＰＵコア毎に負荷の偏りが発生する。
【００７８】
判定テーブル１３にてＣＰＵコアのＣＰＵ使用率が閾値以上である場合（ステップＳ１０５のＮｏ）、決定手段１４４は、閾値以下でもっとも使用率が低いＣＰＵコアに割り当てられたキューのキュー番号を決定する（ステップＳ１０７のＮｏ、ステップＳ１０９）。そして、格納手段１４５は、その決定したキュー番号のキューにその受信パケットを格納する（ステップＳ１１０）。
【００７９】
全てのＣＰＵコアのＣＰＵ使用率が閾値以上の場合（ステップＳ１０７のＹｅｓ）、決定手段１４４は、新たな閾値を決定（設定）し（ステップＳ１０８）、その新たな閾値に基づき同様の論理でキュー番号を決定する（ステップＳ１０７〜Ｓ１０９）。
【００８０】
尚、判定テーブル１３には、パケット処理装置１０のバーチャルマシン１７?０に割り当てられた複数のＣＰＵコア１８−０〜１８−ｍから定期的に送信される各ＣＰＵコアのＣＰＵ使用率の情報が格納される。
【００８１】
このようにして、本実施例では、各ＣＰＵコア１８−０〜１８−ｍの負荷を平滑化し、全てのＣＰＵコアリソースを平等に使うことで、ＣＰＵコア数に応じ性能をスケールさせ、ハードウェアにおけるＣＰＵ性能の最大限に使用することができる。
【００８２】
図５を参照して、キュー選択器１４の動作について説明する。
【００８３】
キュー選択器１４は、ユーザデータパケットを受信パケットとして受信し（ステップＳ１０１）、受信パケット中のペイロード中に格納されているユーザＩＰアドレスを抽出し（ステップＳ１０２）、このＩＰアドレスのハッシュ値を計算することで格納すべきキューのキュー番号を選択する（ステップＳ１０３）。
【００８４】
キュー番号を決定する前に、キュー選択器１４は、判定テーブル１３を参照し（ステップＳ１０４）、この判定テーブル１３に示される各ＣＰＵコアのＣＰＵ使用率の情報を参照し、閾値以下であることを確認し（ステップＳ１０５のＹｅｓ）、閾値以下であればキュー番号を決定する（ステップＳ１０６）。
【００８５】
閾値以上であれば（ステップＳ１０５のＮｏ）、キュー選択器１４は、閾値以下で最もＣＰＵ使用率が低いＣＰＵコアにアサインされたキューのキュー番号を選択し決定する（ステップＳ１０７のＮｏ、ステップＳ１０９）。全てのＣＰＵコアの使用率が閾値以上の場合（ステップＳ１０７のＹｅｓ）、キュー選択器１４は、再度新たな閾値を設定し（ステップＳ１０８）、同様の論理でキュー番号を決定する（ステップＳ１０７〜Ｓ１０９）。
【００８６】
各ＣＰＵコア１８−０〜１８−ｍは、対応するキュー１５−０〜１５−ｍに格納されたパケットを刈り取り、プロトコル処理等のパケット処理を行う。
【００８７】
以上説明したように、本発明の実施例においては、以下に記載するような効果を奏する。
【００８８】
第１の効果は、ＣＰＵコアリソースを使わずに受信パケットを分散でき、またパケットを分散する受信専用コア無しで受信パケットを分散することができ、ＣＰＵコアスケール時に受信専用コアのボトルネックを回避して、性能スケールが可能となることである。その理由は、ＮＩＣカード上の判定テーブル１３に対して、パケット処理装置１０として割り当てられた各ＣＰＵコア１８−０〜１８−ｍのＣＰＵ使用率の情報、処理すべき対象となるユーザＩＰアドレス等の呼処理情報を随時登録し、この判定テーブル１３に従って、ＮＩＣ１１で受信したパケット処理を行うＣＰＵコアが担当すべきキューを決定するからである。
【００８９】
第２の効果は、携帯端末のユーザ単位に受信したパケットを各ＣＰＵコア１８−０〜１８−ｍに分散させ、各ＣＰＵコアの負荷を平準化することで、装置としてのパケット処理性能の最大化を実現できることである。その理由は、ＮＩＣ１１におけるキュー選択器１４の機能にて受信パケットペイロードに位置するカプセル化されたユーザＩＰアドレスを検出し、判定テーブル１３を参照し、このユーザＩＰアドレスのハッシュ値等に従って、受信パケットを格納するＮＩＣ上のキューを決定するからである。
【００９０】
第３の効果は、ユーザデータパケットのパケット長等のばらつきによるＣＰＵコアの負荷の偏りを解消し、各ＣＰＵコアの負荷を平準化することで、装置としてのパケット処理性能の最大化を実現できることである。その理由は、各ＣＰＵコア１８−０〜１８−ｍから判定テーブル１３にて集約されたダイナミックなＣＰＵ使用率に従い、ＣＰＵ使用率がある一定以下のＣＰＵコアを特定し、受信パケットを格納するＮＩＣ１１上のキューを決定するからである。
【００９１】
以上、実施の形態を参照して本願発明を説明したが、本願発明は上記実施の形態に限定されるものではない。本願発明の構成や詳細には、本願発明のスコープ内で当業者が理解し得る様々な変更をすることができる。
【００９２】
上記の実施形態の一部又は全部は、以下の付記のようにも記載されうるが、以下には限られない。
（付記１）
携帯端末からのユーザデータパケットを受信パケットとして受信し、バーチャルマシンに割り当てられた複数のＣＰＵコアにそれぞれ対応し、かつそれぞれキュー番号が割り当てられた複数のキューへ、前記受信パケットを分散する方法であって、
前記ユーザデータパケットを前記受信パケットとして受信し、
前記受信パケットのペイロードに位置するユーザＩＰアドレスを抽出し、
該抽出したユーザＩＰアドレスのハッシュ値を計算し、該ハッシュ値に基づいて、前記受信パケットを格納すべきキューのキュー番号を選択し、
前記複数のＣＰＵコア毎にＣＰＵ使用率を格納する判定テーブルを参照し、前記ＣＰＵ使用率に基づいて、前記選択したキュー番号を、前記受信パケットを格納すべきキューのキュー番号とするか否かを決定し、
該決定したキュー番号のキューに前記受信パケットを格納する、
受信パケット分散方法。
（付記２）
前記選択したキュー番号にアサインされた前記ＣＰＵコアのＣＰＵ使用率が予め定められた閾値以下である場合、前記決定することは、当該選択したキュー番号を、前記決定したキュー番号として決定する、付記１に記載の受信パケット分散方法。
（付記３）
前記選択したキュー番号にアサインされた前記ＣＰＵコアのＣＰＵ使用率が前記閾値以上である場合、前記決定することは、前記閾値以下で最も使用率が低いＣＰＵコアに割り当てられたキューのキュー番号を、前記決定したキュー番号として決定する、付記２に記載の受信パケット分散方法。
（付記４）
全てのＣＰＵコアのＣＰＵ使用率が前記閾値以上の場合、前記決定することは、新たな閾値を決定し、該新たな閾値に基づいて、前記受信パケットを格納すべきキューのキュー番号を決定する、付記３に記載の受信パケット分散方法。
（付記５）
携帯端末からのユーザデータパケットを受信パケットとして受信し、バーチャルマシンに割り当てられた複数のＣＰＵコアにそれぞれ対応し、かつそれぞれキュー番号が割り当てられた複数のキューへ、前記受信パケットを分配して格納するキュー選択器であって、
前記ユーザデータパケットを前記受信パケットとして受信する受信手段と、
前記受信パケットのペイロードに位置するユーザＩＰアドレスを抽出する抽出手段と、
該抽出したユーザＩＰアドレスのハッシュ値を計算し、該ハッシュ値に基づいて、前記受信パケットを格納すべきキューのキュー番号を選択する計算・選択手段と、
前記複数のＣＰＵコア毎にＣＰＵ使用率を格納する判定テーブルを参照し、前記ＣＰＵ使用率に基づいて、前記選択したキュー番号を、前記受信パケットを格納すべきキューのキュー番号とするか否かを決定する決定手段と、
該決定したキュー番号のキューに前記受信パケットを格納する格納手段と、
を備えることを特徴とするキュー選択器。
（付記６）
前記選択したキュー番号にアサインされた前記ＣＰＵコアのＣＰＵ使用率が予め定められた閾値以下である場合、前記決定手段は、当該選択したキュー番号を、前記決定したキュー番号として決定する、付記５に記載のキュー選択器。
（付記７）
前記選択したキュー番号にアサインされた前記ＣＰＵコアのＣＰＵ使用率が前記閾値以上である場合、前記決定手段は、前記閾値以下で最も使用率が低いＣＰＵコアに割り当てられたキューのキュー番号を、前記決定したキュー番号として決定する、付記６に記載のキュー選択器。
（付記８）
全てのＣＰＵコアのＣＰＵ使用率が前記閾値以上の場合、前記決定手段は、新たな閾値を決定し、該新たな閾値に基づいて、前記受信パケットを格納すべきキューのキュー番号を決定する、付記７に記載のキュー選択器。
（付記９）
携帯端末からのユーザデータパケットを受信パケットとして受信して処理するパケット処理装置であって、
それぞれキュー番号が割り当てられた複数のキューと、
該複数のキューにそれぞれ対応して、バーチャルマシンに割り当てられた複数のＣＰＵコアと、
前記複数のＣＰＵコア毎にＣＰＵ使用率を格納する判定テーブルと、
前記受信パケットを、前記判定テーブルを参照して、前記複数のキューの適切なキューに振り分けるキュー選択器と、
を備えることを特徴とするパケット処理装置。
（付記１０）
前記キュー選択器は、
前記ユーザデータパケットを前記受信パケットとして受信する受信手段と、
前記受信パケットのペイロードに位置するユーザＩＰアドレスを抽出する抽出手段と、
該抽出したユーザＩＰアドレスのハッシュ値を計算し、該ハッシュ値に基づいて、前記受信パケットを格納すべきキューのキュー番号を選択する計算・選択手段と、
前記判定テーブルを参照し前記ＣＰＵ使用率に基づいて、前記選択したキュー番号を、前記受信パケットを格納すべきキューのキュー番号とするか否かを決定する決定手段と、
該決定したキュー番号のキューに前記受信パケットを格納する格納手段と、
を備える、付記９に記載のパケット処理装置。
（付記１１）
前記選択したキュー番号にアサインされた前記ＣＰＵコアのＣＰＵ使用率が予め定められた閾値以下である場合、前記決定手段は、当該選択したキュー番号を、前記決定したキュー番号として決定する、付記１０に記載のパケット処理装置。
（付記１２）
前記選択したキュー番号にアサインされた前記ＣＰＵコアのＣＰＵ使用率が前記閾値以上である場合、前記決定手段は、前記閾値以下で最も使用率が低いＣＰＵコアに割り当てられたキューのキュー番号を、前記決定したキュー番号として決定する、付記１１に記載のパケット処理装置。
（付記１３）
全てのＣＰＵコアのＣＰＵ使用率が前記閾値以上の場合、前記決定手段は、新たな閾値を決定し、該新たな閾値に基づいて、前記受信パケットを格納すべきキューのキュー番号を決定する、付記１２に記載のパケット処理装置。
（付記１４）
前記複数のＣＰＵコアは、定期的に、それぞれのＣＰＵ使用率を前記判定テーブルに送信して格納する、付記１０乃至１３のいずれか１つに記載のパケット処理装置。
（付記１５）
前記複数のＣＰＵコアは、それぞれ、対応するキューに格納された受信パケットを刈り取り、パケット処理を行う、付記１０乃至１４のいずれか１つに記載のパケット処理装置。
（付記１６）
コンピュータに、携帯端末からのユーザデータパケットを受信パケットとして受信させ、バーチャルマシンに割り当てられた複数のＣＰＵコアにそれぞれ対応し、かつそれぞれキュー番号が割り当てられた複数のキューへ、前記受信パケットを分散させるプログラムを記録したコンピュータ読み取り可能な記録媒体であって、前記プログラムは前記コンピュータに、
前記ユーザデータパケットを前記受信パケットとして受信する受信手順と、
前記受信パケットのペイロードに位置するユーザＩＰアドレスを抽出する抽出手順と、
該抽出したユーザＩＰアドレスのハッシュ値を計算し、該ハッシュ値に基づいて、前記受信パケットを格納すべきキューのキュー番号を選択する計算・選択手順と、
前記複数のＣＰＵコア毎にＣＰＵ使用率を格納する判定テーブルを参照し、前記ＣＰＵ使用率に基づいて、前記選択したキュー番号を、前記受信パケットを格納すべきキューのキュー番号とするか否かを決定する決定手順と、
該決定したキュー番号のキューに前記受信パケットを格納する格納手順と、
を実行させる記録媒体。
（付記１７）
携帯端末からのユーザデータパケットを受信パケットとして受信し、複数のバーチャルマシンの各々に割り当てられた複数のＣＰＵコアへ、前記受信パケットを分散するネットワークインタフェースカード（ＮＩＣ）であって、
前記ネットワークインタフェースカードは、複数のＶＦ（Ｖｉｒｔｕａｌ  Ｆｕｎｃｔｉｏｎ）と一つのＰＦ（Ｐｈｙｓｉｃａｌ  Ｆｕｎｃｔｉｏｎ）とを具備し、前記ＰＦ上に仮想的に前記複数のＶＦが構成され、各バーチャルマシンは各ＶＦを使用してパケットを送受信することができ、
各ＶＦは、
前記複数のＣＰＵコアにそれぞれ対応し、かつそれぞれキュー番号が割り当てられた複数のキューと、
前記複数のＣＰＵコア毎にＣＰＵ使用率を格納する判定テーブルと、
前記受信パケットを、前記判定テーブルを参照して、前記複数のキューの適切なキューに振り分けるキュー選択器と、
を備えるネットワークインタフェースカード。
（付記１８）
前記キュー選択器は、
前記ユーザデータパケットを前記受信パケットとして受信する受信手段と、
前記受信パケットのペイロードに位置するユーザＩＰアドレスを抽出する抽出手段と、
該抽出したユーザＩＰアドレスのハッシュ値を計算し、該ハッシュ値に基づいて、前記受信パケットを格納すべきキューのキュー番号を選択する計算・選択手段と、
前記判定テーブルを参照し、前記ＣＰＵ使用率に基づいて、前記選択したキュー番号を、前記受信パケットを格納すべきキューのキュー番号とするか否かを決定する決定手段と、
該決定したキュー番号のキューに前記受信パケットを格納する格納手段と、
を備える、付記１７に記載のネットワークインタフェースカード。
（付記１９）
前記選択したキュー番号にアサインされた前記ＣＰＵコアのＣＰＵ使用率が予め定められた閾値以下である場合、前記決定手段は、当該選択したキュー番号を、前記決定したキュー番号として決定する、付記１８に記載のネットワークインタフェースカード。
（付記２０）
前記選択したキュー番号にアサインされた前記ＣＰＵコアのＣＰＵ使用率が前記閾値以上である場合、前記決定手段は、前記閾値以下で最も使用率が低いＣＰＵコアに割り当てられたキューのキュー番号を、前記決定したキュー番号として決定する、付記１９に記載のネットワークインタフェースカード。
（付記２１）
全てのＣＰＵコアのＣＰＵ使用率が前記閾値以上の場合、前記決定手段は、新たな閾値を決定し、該新たな閾値に基づいて、前記受信パケットを格納すべきキューのキュー番号を決定する、付記２０に記載のネットワークインタフェースカード。
【符号の説明】
【００９３】
１０    パケット処理装置
１１    インテリジェントな機能を具備したネットワークインタフェースカード（ＮＩＣ）
１２−０〜１２−ｎ  ＶＦ（Ｖｉｒｔｕａｌ  Ｆｕｎｃｔｉｏｎ）
１３    判定テーブル
１４    キュー選択器
１５−０〜１５−ｍ    キュー
１６    ＰＦ（Ｐｈｙｓｉｃａｌ  Ｆｕｎｃｔｉｏｎ）
１７−０    パケット処理用バーチャルマシン
１８−０〜１８−ｍ    ＣＰＵコア
この出願は、２０１４年３月１９日に出願された日本出願特願２０１４-０５６０３６号を基礎とする優先権を主張し、その開示の全てをここに取り込む。
【国際調査報告】
2015141337.tif 000008
2015141337.tif 000009
2015141337.tif 000010
2015141337.tif 000011