新デザインに移行します。メニューから切り替えられます。Chineseこのアプリケーションの一部のコンテンツは現在ご利用になれません。この状況が続く場合は、次のお問い合わせ先までご連絡ください。unit)コアへ適切に分散する受信パケット分散方法、キュー選択器、パケット処理装置、および記録媒体に関する。Virtualization)等で仮想化することが検討されている。この場合、携帯端末からのユーザデータパケットを受信して処理するデータブレーンパケット処理装置は、バーチャルマシン上で実現される。system)上で実行する方式をいう。Project)で規定されている既存2G/3G網を収容しつつ、新たなLTEアクセス網を収容する能力を持つ。Access)、3GPP2などのnon−3GPPアクセスを含めた多様なアクセスネットワークを収容することができる。gateway)から構成され、さらには、S−GW/P−GWの統合型のゲートウェイも提供可能である。ハンドオーバといったモビリティ管理を行うノードである。S−GWは、LTEおよび3Gシステムへアクセスを行う携帯端末の音声やパケットなどのユーザデータを処理するノードである。Subsystem)あるいは外部パケット網とのインタフェースを持つノードである。protocol)で実現するためのサブシステムである。Architecture)サーバの仮想化基盤上で実現する。Devices,Inc.)などのインテル互換CPUを搭載したサーバのことである。IAサーバはPCサーバとも呼ばれる。PCサーバは、パーソナルコンピュータ(PC)を基本に設計・製造されたサーバである。NodeB)は、LTEにおける無線基地局(e−NodeB)である。図中の携帯端末は、いわゆるガラパゴス携帯、スマートフォン、タブレット端末を想定している。前述したように、NFVは、専用ハードウェアで実現されていたモバイルコア等のネットワークを汎用サーバのソフトウェアで実現できることを目的としている。データプレーンパケット処理装置は、汎用サーバに搭載されたマルチコアCPU上で仮想化されたバーチャルマシン上のソフトフェアとして実現される。マルチコアCPUは、複数のCPUコアを備える。マルチコアCPU上で、データプレーンパケット処理装置の処理能力を向上させるためには、複数のCPUコアでパケット処理動作を行い、さらにそのCPUコア数に応じて性能をスケールさせる必要がある。使用するCPUコア数に応じた性能スケールをソフトウェア処理で実現するには、通常、次の方法が採用される。Card)から、バーチャルマシン上の受信専用CPUコアにてパケットを刈り取る。次に、そのパケットを各CPUコア(パケット処理コア)に振り分ける。それらのパケットを受け取った各々のCPUコア(パケット処理コア)にてパケット処理する。ここで、性能を向上させるためには、外部から入力されるユーザデータパケット(受信パケット)を、バーチャルマシンに割り当てられた複数のCPUコアへ適切に配分(分散)することが必要である。このような受信パケットを分散する方法に関する先行技術(関連技術)は、従来から種々知られている。特開2010−226275号公報(特許文献1)は、マルチコアプロセッサを利用してパケットを処理する際、マルチコアプロセッサのリソースを有効利用できるようにした、「通信装置」を開示している。この特許文献1に開示された通信装置では、複数のマルチコアプロセッサ部の内のどのマルチコアプロセッサ部へデータパケットを出力するべきかを決定する場合、IPデータパケットの「あて先IPアドレス」、「ソースIPアドレス」、「プロトコル番号」などの情報からハッシュ関数を用いて算出した値をもとに、出力先のマルチコアプロセッサ部を決定する方式を採用している。マルチコアプロセッサ部の内部には複数のコアが配置されている。各コアはそれぞれ複数のスレッドを同時に実行できる構成となっている。受信コントロール部は、新規に受信したデータパケットをメインメモリにストアすると共に、ワークコントロール部に対して上記データパケットの処理をワークという形で受け渡し、ワークに対するスレッドの割り当てを依頼する機能を有する。特開2011−077746号公報(特許文献2)は、各コアがパケットを最大限に並列処理可能な、「ネットワーク中継装置」を開示している。特許文献2に開示されたネットワーク中継装置は、受信待ちキューと、下位フロー識別部と、上位フロー識別待ちキューと、転送処理待ちキューと、上位フロー識別/転送処理部と、送信待ちキューとから構成されている。ネットワーク中継装置がパケットを受信したとき、受信待ちキューにパケットを一時的に保持する。下位フロー識別部は受信待ちキューからパケットを1つ取り出し、例えばIPヘッダの送信元IPアドレスや宛先IPアドレスなどのヘッダ情報を用いてハッシュ関数を計算し、計算したハッシュ関数により、下位フロー毎に上位フロー識別待ちキューにパケットを振り分ける。上位フロー識別/転送処理部は、上位フロー識別処理を転送処理の2つの処理を1つのコア上同居させた処理部である。本実施例においてマルチコアCPUを用いたが、複数のCPUを用いて実施してもよい。Card)のパケット送信遅延を少なくする、「仮想計算機システム」を開示している。特許文献3に開示された仮想計算機システムにおいて、複数の仮想計算機と物理NICとは共通バスにより相互接続されている。これら仮想計算機の各々は仮想ネットワークインタフェースカード(VNIC)を有している。物理ネットワークインタフェースカード(物理NIC)は、共通バスに接続されてVNICにより共有(共用)されている。物理NICは、ネットワークから受信したパケットについて受信した順番で処理を行う。ネットワークからネットワークI/Fが、受信バケット番号1(以下単に番号1と称す)の受信パケットデータを受信すると、受信バッファにこの受信パケットデータを格納する。受信バッファは、格納された番号1の受信パケットデータから受信対象のIPアドレスデータを抜き出し、この受信パケットのIPアドレスに対応する受信キューを選択する。特開2011−141587号公報(特許文献4)は、ネットワークにアップロードした単一の情報量の多いデータに対して、応答時間を短縮する、「分散処理システム」を開示している。特許文献4に開示された分散処理システムは、受付応答装置と、分断統合装置と、複数の処理装置と、1つ以上のキュー監視装置と、を含んで構成される。受付応答装置は、ユーザ端末からネットワークを介してデータ(アップロードデータ)を受信する。分断統合装置は、受付応報装置が受け付けたデータを取得して、そのデータを分断して断片データを生成し、さらに処理された断片データを統合する。複数の処理装置は、断片データを取得し、データ処理を行う。1つ以上のキュー監視装置は、分断統合装置から出力された断片データを取得してキューとして記憶し、処理装置からの要求により断片データを処理装置に送信する。処理装置は、キュー管理装置から断片データを取得し、その取得した断片データに対し所定のデータ処理を実行する。この処理装置は、キュー選択部と、断片データ取得部と、データ処理部と、断片データ結果出力部とを含んで構成される。キュー選択部は、断片データの取得元となるキュー管理装置を選択する。このときのキュー管理装置の選択は、例えば、ラウンドロビン法等の分散アルゴリズムを用いて行われる。断片データ取得部は、キュー選択ぶにより選択されたキュー管理装置に、断片データの取得要求を送信し、キュー管理装置から断片データを取得する。Problem[0004]汎用サーバをNFVにて仮想化し、それ上のバーチャルマシンにてユーザデータ処理装置を構成する場合、スループット性能に課題がある。その理由は、ネットワーク専用ハードウェアで構成されたユーザデータ処理装置と異なり、全ての機能をソフトウェアで実現するためである。OS(バーチャルマシン)側からホストOSを経由せず直接NIC経由で外部との通信が可能となる。このため、ホストOS側との通信に必要なオーバーヘッドを排除することができ、性能を向上させることができる。外部から入力されるユーザパケットデータをバーチャルマシンに割り当てられた複数のCPUコアへ適切に分配できなければ、CPUコア数に応じて性能がスケールできない課題がある。特定のCPUコアに処理負荷が偏り、全てのCPUコアリソースを使い切ることができないからである。CPUコアが1つであれば、問題がないが、マルチコアプロセッサ上でCPUコア数に比例して性能を向上させることができない。関連技術では、複数のCPUコアとして、複数のパケット処理コアとは別に受信専用コアを配備し、例えば、上記特許文献4に開示されているように、本受信専用コアで各パケット処理コアにラウンドロビンロジック等で受信パケットを分配することで分散することが可能である。受信されるパケット長等のぱらつきにより、特定のパケット処理コアにロングパケットあるいはショートパケットが集中的に分配される可能性がある。パケットサイズにより1パケットあたりのCPUコアの負荷は変動する。そのため、CPUコア負荷の観点からは、結果として偏りが発生し、CPUコア数に比例して性能スケールさせることができない。その結果、処理能力を最大化することはできない。受信専用コアによる分配ロジックを変更し、これらの課題を解決しようとすることも考えられる。この場合、分配ロジックが複雑になるため分配能力が低下し、分散可能となるCPUコア(パケット処理コア)の数が減少し、スケールできるCPUコア数が制限される。その結果として、マルチコアプロセッサ上での性能を最大化できない課題がある。ラウンドロビンのような単純なロジックでも、パケットを受信し、転送先のCPUコア(パケット処理コア)を決定し、パケットを転送する処理が発生する。そのため、転送先のCPUコア(パケット処理コア)が増えた場合、パケット転送の際に発生する各CPUコア(パケット処理コア)間の排他制御が増大し、受信専用コアがボトルネックとなり、性能スケールできない課題がある。Protocol)でカプセル化され、ノード装置間通信用のノードIPアドレスが付与され、このノードIPアドレスを使って通信される。このノードIPアドレスは、パケットを受信する装置としては全て同じ送信先IPアドレスになる。Scaling)機能を使い、NIC側でIPアドレスに従って、分散させることは可能である。EPC等のモバイルネットワークで使用するノードIPアドレスは、パケット処理装置としては同じ値になるため、事実上分散させることはできない課題がある。分散させたいユーザIPアドレスはカプセル化されたパケットのペイロード中に存在するため、汎用NICに具備されているRSS機能ではユーザIPアドレスを参照できない課題がある。以上を纏めると、関連のNFV等の技術を使った仮想化環境上で構成される、パケット処理装置における受信パケットの負荷分散方法には、次のような課題がある。第1の課題は、関連技術の装置では、受信専用コアとしてCPUコアリソースを占有し、さらにパケット処理コアと受信専用コアとの間のパケット授受によるオーバーヘッドにより、1CPUコアあたりのパケット処理性能が劣化することである。その理由は、次の通りである。SRIOV等の機能を使いNIC上に複数のVFを構築した場合、VF上の受信パケットキューは1つしか構成できない。そのため、この受信パケットをNICの受信パケットキューから刈り取る受信専用コアを配備しなければならない。第2の課題は、携帯端末単位でのパケットの分散ができず、特定の受信パケットキューあるいはパケット処理コアに負荷が集中してしまい、パケット処理するCPUコアを増やしても、CPUコア数に応じてパケット処理性能がスケールできないことである。その理由は、次の通りである。Function)機能と同様にVF上で複数の受信パケットキューを構築し、RSS機能により各受信パケットキューにパケットを分散することができるNICカードが実現できたとする。その場合でも、EPC等のモバイルネットワークにおけるユーザパケットデータは、GTPにてカプセル化される。そのため、携帯端末のIPアドレスはペイロード中に格納され、パケットのヘッダに付与されるIPアドレスは、EPC内部の各ノード間で送受信するためのノードIPアドレスである。その結果、標準的にNICに具備されているRSS機能では、このノードIPアドレスに基づいてしか、NICの各受信パケットキューに受信パケットを分散させることが出来ない。第3の課題は、ユーザの利用形態あるいはアプリケーションの特性に応じて、各パケット処理コアの負荷は平滑化することができず、パケット処理するCPUコアの数を増やしても、CPUコア数に応じてパケット処理性能がスケールできないことである。その理由は、次の通りである。携帯端末のユーザIPアドレスベースでのパケット分散ができたとしても、ユーザパケットデータ長は一定ではなく、ユーザ毎あるいはアプリケーション毎にパケット長が異なる。その結果、処理するパケットデータの長が異なると、CPUコアの負荷もパケット毎に変動する。特許文献1は、単に、IPデータパケットの情報からハッシュ関数を用いて算出した値をもとに、出力先のマルチコアプロセッサ部を決定する、技術的思想を開示しているに過ぎない。特許文献2は、単に、パケットを受信したとき、受信待ちキューにパケットを一時的に保持し、受信待ちキューからパケットを1つ取り出し、取り出したパケットのIPヘッダのヘッダ情報を用いてハッシュ関数を計算し、計算したハッシュ値により、下位フロー毎に上位フロー識別待ちキューにパケットを振り分け、上位フロー識別待ちキューにあるパケットを刈り取って、上位フロー識別処理を行う、技術的思想を開示しているに過ぎない。特許文献3は、単に、受信パケットデータから受信対象のIPアドレスデータを抜き出し、この受信パケットのIPアドレスに対応する受信キューを選択する、技術的思想を開示しているに過ぎない。特許文献4は、前述したように、単に、キュー管理装置の選択を、ラウンドロビン法等の分散アルゴリズムを用いて行う、技術的思想を開示しているに過ぎない。本発明の目的は、CPUコア数に応じてユーザデータパケットの処理能力をスケールさせることができる、受信パケット分散方法、キュー選択器、パケット処理装置、および記録媒体を提供することにある。Solution[0005]本発明の一形態は、携帯端末からのユーザデータパケットを受信パケットとして受信し、バーチャルマシンに割り当てられた複数のCPUコアにそれぞれ対応し、かつそれぞれキュー番号が割り当てられた複数のキューへ、前記受信パケットを分散する受信パケット分散方法であって、前記ユーザデータパケットを前記受信パケットとして受信し、前記受信パケットのペイロードに位置するユーザIPアドレスを抽出し、該抽出したユーザIPアドレスのハッシュ値を計算し、該ハッシュ値に基づいて、前記受信パケットを格納すべきキューのキュー番号を選択し、前記複数のCPUコア毎にCPU使用率を格納する判定テーブルを参照し、前記CPU使用率に基づいて、前記選択したキュー番号を、前記受信パケットを格納すべきキューのキュー番号とするか否かを決定し、該決定したキュー番号のキューに前記受信パケットを格納すること、を特徴とする。Effects[0006]本発明によれば、CPUコア数に応じてユーザデータパケットの処理能力をスケールさせることができる。Drawings[0007]図1は、モバイルネットワークをNFVで仮想化する例を説明する図である。図2は、本発明の第1の実施例に係るパケット処理装置の構成を示すブロック図である。図3は、図2に示したパケット処理御装置に使用される、判定デーブルの一例を示す図である。図4は、図2に示したパケット処理御装置に使用される、キュー選択器の構成を示すブロック図である。図5は、図2に示したパケット処理御装置に使用される、キュー選択器の動作を説明するためのフローチャートである。Embodiments[0008][関連技術]本発明の理解を容易にするために、以下では本発明に関連する技術について説明する。Virtualization)等で仮想化することがある。この場合、携帯端末からのユーザデータパケットを処理するデータブレーンパケット処理装置は、バーチャルマシン上で実現される。NFVは、専用ハードウェアで実現されていたモバイルコア等のネットワークを汎用サーバのソフトウェアで実現できることを目的としている。データプレーンパケット処理装置は、汎用サーバに搭載されたマルチコアCPU上で仮想化されたバーチャルマシン上のソフトフェアとして実現される。マルチコアCPUは、複数のCPUコアを備える。マルチコアCPU上で、データプレーンパケット処理装置の処理能力を向上させるためには、複数のCPUコアでパケット処理動作を行い、さらにそのCPUコア数に応じて性能をスケールさせる必要がある。使用するCPUコア数に応じた性能スケールをソフトウェア処理で実現するには、通常、次の方法が採用される。汎用サーバにおけるパケット受信部であるNICから、バーチャルマシン上の受信専用コアにてパケットを刈り取る。次に、そのパケットを各CPUコア(パケット処理コア)に振り分ける。それらのパケットを受け取った各々のCPUコア(パケット処理コア)にてパケット処理する。この方法では、CPUコアをスケールさせる前に比べて、受信専用コアのCPUリソースを余計に消費し、また、分散させるCPUコアの数が増えた場合、受信専用コアがボトルネックとなり性能スケールができないという問題がある。[実施の形態]この問題を解決するために、本発明の実施形態では、図2に示すようなインテリジェントな機能を具備したネットワークインタフェースカード(NIC)11を使ったパケット処理装置10を構成する。汎用サーバに挿入されたインテリジェントな機能を具備したNIC11で、ユーザデータパケットを受信すると、キュー選択器14は、パケットの振り分けを行い、各キュー15−0、・・・、15−mへパケットデータを積み込む。ここで、mは2以上の整数である。この時、キュー選択器14は、判定テーブル13に従って、振り分け先を決定する。キュー選択器14は、判定テーブル13を参照して、第0乃至第mのCPUコア18−0、・・・、18−mから展開されるCPU使用率等に基づいて、適切なキューにパケットデータを振り分ける。EPC等のモバイルコアネットワークでは、EPC等モバイルコアネットワーク装置間通信用のノードIPアドレスと、ユーザ毎に割り当てられるユーザIPアドレスと、の2種類のIPアドレスがある。Protocol)にてカプセル化され、ノードIPアドレスが付与される。Scaling)機能にてIPアドレスのハッシュ値を計算し、このハッシュ値に基づき分散を行うことが可能である。EPC等のモバイルコアネットワークのユーザデータパケットは、通常、NICでは、ノードIPアドレスのハッシュ値に従ったパケット振り分けになる。このため、同一ネットワーク装置から送信される、あるいは同一ネットワーク装置に送信される、ユーザデータパケットを受信するケースにおいては、同一のCPUコアにユーザデータパケットが集中し、パケットの分散処理が期待通りに行われない。ユーザIPアドレスは、パケットのペイロードに位置するため、汎用のNICのRSS機能では、ユーザIPアドレスのハッシュ値に従ったパケット振り分けができない。そこで、本発明の実施形態では、判定テーブル13は、第0乃至第mのCPUコア18−0、・・・、18−mから展開された送信元ユーザIPアドレス、送信先ユーザIPアドレスに従って、振り分けるキュー15−0、・・・、15−mを決定したハッシュテーブルを作成する。キュー選択器14は、受信したパケットのペイロード中に位置するユーザIPアドレスを抽出し、ハッシュ値を計算した後、判定テーブル13を参照し、受信したパケットを格納するキューを選択する。その後、キュー選択器14は、判定テーブル13におけるCPU使用率を参照する。選択したキューに割り当てられているCPUコアのCPU使用率が閾値以上の場合、キュー選択器14は、閾値以下のCPU使用率であるCPUコアの中で最も低いCPUコアに割り当てられるキューを決定する。キュー選択器14は、決定したキューに受信パケットを格納する。全てのCPUコアのCPU使用率が閾値以上になった場合、キュー選択器14は、100%と古い閾値の間で新たな閾値を設定し、この新たな閾値に従って同様なキュー選択決定処理を行う。全てのCPUコア使用率が新たな閾値を超える場合、キュー選択器14は、同様に閾値の使用率100%に達するまで再設定を行い、これを繰り返す。第0乃至第mのCPUコア18−0、・・・、18−mは、それぞれ、割り当てられているインテリジェントな機能を具備したNIC11上のキュー15−0、・・・、15−mをポーリングすることで、パケットを随時刈り取り、第0乃至第mのCPUコア18−0、・・・、18−mで引き取ったユーザデータパケットの処理を行う。このように、本発明の実施形態では、インテリジェントな機能を具備したNIC11上に実装される判定テーブル13とキュー選択器14にて、各CPUコア18−0、・・・、18−mに受信したユーザデータパケットが分散され、各CPUコア18−0、・・・、18−mのCPUコアリソースが平滑化される。そのため、全てのCPUコアリソース使い切ることができ、CPUコア数に応じてユーザデータパケットの処理能力をスケールさせることが可能となる。以下、図面を参照して、本発明の実施例とその動作について詳細に説明する。1[0009]図2は、本発明の第1の実施例に係るパケット処理装置10の構成を示すブロック図である。パケット処理装置10は、インテリジェントな機能を具備したNIC11と、複数のパケット処理用バーチャルマシンとを備えている。図示の例では、複数のパケット処理用バーチャルマシンとして、第0のパケット処理用バーチャルマシン17−0乃至第nのパケット処理用バーチャルマシン(図示せず)の、合計(n+1)のパケット処理用バーチャルマシンを備えている。ここで、nは1以上の整数である。Function)12−0〜12−nとを具備する。PF16上には仮想的に複数のVF12−0〜12−nが構成され、各バーチャルマシン17−0・・・は各VF12−0〜12−nを使用してパケットを送受信することができる。本例では、複数のVFとして、第0のVF12−0乃至第nのVF12−nの、合計(n+1)個のVFを備えている。第0乃至第nのVF12−0〜12−nの各々は、同じ構成をしている。したがって、以下では、第0のVF12−0を代表として説明し、他のVFについての説明を省略する。第0のVF12−0は、判定テーブル13と、キュー選択器14と、複数のキュー15−0〜15−mとを備えている。図示の例では、複数のキューとして、第0のキュー15−0乃至第mのキュー15−mの、合計(m+1)個のキューを備えている。第0のパケット処理用バーチャネルマシン17−0は、複数のCPUコア18−0〜18−mを備えている。図示の例では、複数のCPUコアとして、第0のCPUコア18−0乃至第mのCPUコア18−mの、合計(m+1)個のCPUコアを備えている。図2に示されるように、複数のキュー15−0〜15−mは、第0のパケット処理用バーチャルマシン17−0に割り当てられた複数のCPUコア18−0〜18−mにそれぞれ対応している。第0乃至第mのキュー15−0〜15−mには、それぞれ、#0〜#mのキュー番号が割り当てられている。判定テーブル13は、図3に示されるように、複数のCPUコア18−0〜18−mごとにCPU使用率を格納する。図3に示す例では、第0のCPUコア18−0のCPU使用率は1%であり、第1のCPUコアのCPU使用率は20%であり、第mのCPUコア18−mのCPU使用率は5%である。判定テーブル13は、CPU使用率の他に、上述したような、複数のCPUコア18−0〜18−mから展開された送信元ユーザIPアドレス、送信先ユーザIPアドレスに従って、振り分けるキュー15−0〜15−mを決定したハッシュテーブルや、処理すべき対象となるユーザIPアドレス等の呼処理情報をも格納する。本発明の実施形態によるパケット処理装置10は、インテリジェントな機能を有するNIC11内のキュー選択器14でユーザデータパケットを受信すると、後述のように、第0乃至第mのキュー15−0〜15−mのどのキューに受信パケットを格納すべきかを決定する。キュー選択器14は、携帯端末からユーザデータパケットを受信パケットとして受信し、後述のように、複数のキュー15−0〜15−mへ、受信パケットを分配して格納する。図4は、キュー選択器14の構成を示すブロック図である。キュー選択器14は、受信手段141と、抽出手段142と、計算・選択手段143と、決定手段144と、格納手段145とを備えている。図5は、キュー選択器14の動作を説明するためのフローチャートである。受信手段141は、ユーザデータパケットを受信パケットとして受信する(図5のステップS101)。抽出手段142は、受信パケットのペイロードに位置するユーザIPアドレスを抽出する(図5のステップS102)。計算・選択手段143は、抽出したユーザIPアドレスのハッシュ値を計算し、このハッシュ値に基づいて、受信データを格納すべきキューのキュー番号を選択する(図5のステップS103)。決定手段144は、判定テーブル13を参照し(図5のステップS104)、CPU使用率に基づいて、後述のように、選択したキュー番号を、受信パケットを格納すべきキューのキュー番号とするか否かを決定する(図5のステップS105〜S109参照)。格納手段145は、決定したキュー番号のキューに受信パケットを格納する(図5のステップS110)。本実施形態では、このキューから受信パケットを刈り取ることによって、CPUコアの負荷分散を図っている。次に、図5を参照して、決定手段144の動作について更に詳細に説明する。ハッシュ値に基づくキュー番号を決定する前に、決定手段144は、判定テーブル13を参照し(ステップS104)、選択したキュー番号にアサインされたCPUコアの使用率が予め定められた閾値以下であることを確認した上で(ステップS105のYes)、キュー番号を決定する(ステップS106)。ユーザIPアドレスに基づくハッシュ値により、受信パケットのキューへの分散を図っても、パケット長等のトラヒック特性等によりCPUコアの負荷は一様ではない。そのため、通常では、CPUコア毎に負荷の偏りが発生する。判定テーブル13にてCPUコアのCPU使用率が閾値以上である場合(ステップS105のNo)、決定手段144は、閾値以下でもっとも使用率が低いCPUコアに割り当てられたキューのキュー番号を決定する(ステップS107のNo、ステップS109)。格納手段145は、その決定したキュー番号のキューにその受信パケットを格納する(ステップS110)。全てのCPUコアのCPU使用率が閾値以上の場合(ステップS107のYes)、決定手段144は、新たな閾値を決定(設定)し(ステップS108)、その新たな閾値に基づき同様の論理でキュー番号を決定する(ステップS107〜S109)。判定テーブル13には、パケット処理装置10のバーチャルマシン17−0に割り当てられた複数のCPUコア18−0〜18−mから定期的に送信される各CPUコアのCPU使用率の情報が格納される。このようにして、本実施例では、各CPUコア18−0〜18−mの負荷を平滑化し、全てのCPUコアリソースを平等に使うことで、CPUコア数に応じ性能をスケールさせ、ハードウェアにおけるCPU性能の最大限に使用することができる。図5を参照して、キュー選択器14の動作について説明する。キュー選択器14は、ユーザデータパケットを受信パケットとして受信し(ステップS101)、受信パケット中のペイロード中に格納されているユーザIPアドレスを抽出し(ステップS102)、このIPアドレスのハッシュ値を計算することで格納すべきキューのキュー番号を選択する(ステップS103)。キュー番号を決定する前に、キュー選択器14は、判定テーブル13を参照し(ステップS104)、この判定テーブル13に示される各CPUコアのCPU使用率の情報を参照し、閾値以下であることを確認し(ステップS105のYes)、閾値以下であればキュー番号を決定する(ステップS106)。閾値以上であれば(ステップS105のNo)、キュー選択器14は、閾値以下で最もCPU使用率が低いCPUコアにアサインされたキューのキュー番号を選択し決定する(ステップS107のNo、ステップS109)。全てのCPUコアの使用率が閾値以上の場合(ステップS107のYes)、キュー選択器14は、再度新たな閾値を設定し(ステップS108)、同様の論理でキュー番号を決定する(ステップS107〜S109)。各CPUコア18−0〜18−mは、対応するキュー15−0〜15−mに格納されたパケットを刈り取り、プロトコル処理等のパケット処理を行う。以上説明したように、本発明の実施例においては、以下に記載するような効果を奏する。第1の効果は、CPUコアリソースを使わずに受信パケットを分散でき、またパケットを分散する受信専用コア無しで受信パケットを分散することができ、CPUコアスケール時に受信専用コアのボトルネックを回避して、性能スケールが可能となることである。その理由は、NICカード上の判定テーブル13に対して、パケット処理装置10として割り当てられた各CPUコア18−0〜18−mのCPU使用率の情報、処理すべき対象となるユーザIPアドレス等の呼処理情報を随時登録し、この判定テーブル13に従って、NIC11で受信したパケット処理を行うCPUコアが担当すべきキューを決定するからである。第2の効果は、携帯端末のユーザ単位に受信したパケットを各CPUコア18−0〜18−mに分散させ、各CPUコアの負荷を平準化することで、装置としてのパケット処理性能の最大化を実現できることである。その理由は、NIC11におけるキュー選択器14の機能にて受信パケットペイロードに位置するカプセル化されたユーザIPアドレスを検出し、判定テーブル13を参照し、このユーザIPアドレスのハッシュ値等に従って、受信パケットを格納するNIC上のキューを決定するからである。第3の効果は、ユーザデータパケットのパケット長等のばらつきによるCPUコアの負荷の偏りを解消し、各CPUコアの負荷を平準化することで、装置としてのパケット処理性能の最大化を実現できることである。その理由は、各CPUコア18−0〜18−mから判定テーブル13にて集約されたダイナミックなCPU使用率に従い、CPU使用率がある一定以下のCPUコアを特定し、受信パケットを格納するNIC11上のキューを決定するからである。以上、実施の形態を参照して本願発明を説明したが、本願発明は上記実施の形態に限定されるものではない。本願発明の構成や詳細には、本願発明のスコープ内で当業者が理解し得る様々な変更をすることができる。上記の実施形態の一部又は全部は、以下の付記のようにも記載されうるが、以下には限られない。受信パケット分散方法。(付記2)前記選択したキュー番号にアサインされた前記CPUコアのCPU使用率が予め定められた閾値以下である場合、前記決定することは、当該選択したキュー番号を、前記決定したキュー番号として決定する、付記1に記載の受信パケット分散方法。(付記3)前記選択したキュー番号にアサインされた前記CPUコアのCPU使用率が前記閾値以上である場合、前記決定することは、前記閾値以下で最も使用率が低いCPUコアに割り当てられたキューのキュー番号を、前記決定したキュー番号として決定する、付記2に記載の受信パケット分散方法。(付記4)全てのCPUコアのCPU使用率が前記閾値以上の場合、前記決定することは、新たな閾値を決定し、該新たな閾値に基づいて、前記受信パケットを格納すべきキューのキュー番号を決定する、付記3に記載の受信パケット分散方法。該決定したキュー番号のキューに前記受信パケットを格納する格納手段と、を備えることを特徴とするキュー選択器。当該選択したキュー番号を、前記決定したキュー番号として決定する、付記5に記載のキュー選択器。前記閾値以下で最も使用率が低いCPUコアに割り当てられたキューのキュー番号を、前記決定したキュー番号として決定する、付記6に記載のキュー選択器。新たな閾値を決定し、該新たな閾値に基づいて、前記受信パケットを格納すべきキューのキュー番号を決定する、付記7に記載のキュー選択器。前記受信パケットを、前記判定テーブルを参照して、前記複数のキューの適切なキューに振り分けるキュー選択器と、を備えることを特徴とするパケット処理装置。該決定したキュー番号のキューに前記受信パケットを格納する格納手段と、を備える、付記9に記載のパケット処理装置。当該選択したキュー番号を、前記決定したキュー番号として決定する、付記10に記載のパケット処理装置。前記閾値以下で最も使用率が低いCPUコアに割り当てられたキューのキュー番号を、前記決定したキュー番号として決定する、付記11に記載のパケット処理装置。新たな閾値を決定し、該新たな閾値に基づいて、前記受信パケットを格納すべきキューのキュー番号を決定する、付記12に記載のパケット処理装置。(付記14)前記複数のCPUコアは、定期的に、それぞれのCPU使用率を前記判定テーブルに送信して格納する、付記10乃至13のいずれか1つに記載のパケット処理装置。(付記15)前記複数のCPUコアは、それぞれ、対応するキューに格納された受信パケットを刈り取り、パケット処理を行う、付記10乃至14のいずれか1つに記載のパケット処理装置。該決定したキュー番号のキューに前記受信パケットを格納する格納手順と、を実行させる記録媒体。前記受信パケットを、前記判定テーブルを参照して、前記複数のキューの適切なキューに振り分けるキュー選択器と、を備えるネットワークインタフェースカード。該決定したキュー番号のキューに前記受信パケットを格納する格納手段と、を備える、付記17に記載のネットワークインタフェースカード。当該選択したキュー番号を、前記決定したキュー番号として決定する、付記18に記載のネットワークインタフェースカード。前記閾値以下で最も使用率が低いCPUコアに割り当てられたキューのキュー番号を、前記決定したキュー番号として決定する、付記19に記載のネットワークインタフェースカード。新たな閾値を決定し、該新たな閾値に基づいて、前記受信パケットを格納すべきキューのキュー番号を決定する、付記20に記載のネットワークインタフェースカード。CPUコアこの出願は、2014年3月19日に出願された日本出願特願2014−056036号を基礎とする優先権を主張し、その開示の全てをここに取り込む。受信パケット分散方法。[2]前記選択したキュー番号にアサインされた前記CPUコアのCPU使用率が予め定められた閾値以下である場合、前記決定することは、当該選択したキュー番号を、前記決定したキュー番号として決定する、請求項1に記載の受信パケット分散方法。[3]前記選択したキュー番号にアサインされた前記CPUコアのCPU使用率が前記閾値以上である場合、前記決定することは、前記閾値以下で最も使用率が低いCPUコアに割り当てられたキューのキュー番号を、前記決定したキュー番号として決定する、請求項2に記載の受信パケット分散方法。[4]全てのCPUコアのCPU使用率が前記閾値以上の場合、前記決定することは、新たな閾値を決定し、該新たな閾値に基づいて、前記受信パケットを格納すべきキューのキュー番号を決定する、請求項3に記載の受信パケット分散方法。該決定したキュー番号のキューに前記受信パケットを格納する格納手段と、を備えることを特徴とするキュー選択器。前記受信パケットを、前記判定テーブルを参照して、前記複数のキューの適切なキューに振り分けるキュー選択器と、を備えることを特徴とするパケット処理装置。[7]前記複数のCPUコアは、定期的に、それぞれのCPU使用率を前記判定テーブルに送信して格納する、請求項6に記載のパケット処理装置。[8]前記複数のCPUコアは、それぞれ、対応するキューに格納された受信パケットを刈り取り、パケット処理を行う、請求項6又は7に記載のパケット処理装置。該決定したキュー番号のキューに前記受信パケットを格納する格納手順と、を実行させる記録媒体。前記受信パケットを、前記判定テーブルを参照して、前記複数のキューの適切なキューに振り分けるキュー選択器と、を備えるネットワークインタフェースカード。受信パケット分散方法。[2]前記選択したキュー番号にアサインされた前記CPUコアのCPU使用率が予め定められた閾値以下である場合、前記決定することは、当該選択したキュー番号を、前記決定したキュー番号として決定する、請求項1に記載の受信パケット分散方法。[3]前記選択したキュー番号にアサインされた前記CPUコアのCPU使用率が前記閾値以上である場合、前記決定することは、前記閾値以下で最も使用率が低いCPUコアに割り当てられたキューのキュー番号を、前記決定したキュー番号として決定する、請求項2に記載の受信パケット分散方法。[4]全てのCPUコアのCPU使用率が前記閾値以上の場合、前記決定することは、新たな閾値を決定し、該新たな閾値に基づいて、前記受信パケットを格納すべきキューのキュー番号を決定する、請求項3に記載の受信パケット分散方法。該決定したキュー番号のキューに前記受信パケットを格納する格納手段と、を備えることを特徴とするキュー選択器。前記受信パケットを、前記判定テーブルを参照して、前記複数のキューの適切なキューに振り分けるキュー選択器と、を備えることを特徴とするパケット処理装置。[7]前記複数のCPUコアは、定期的に、それぞれのCPU使用率を前記判定テーブルに送信して格納する、請求項6に記載のパケット処理装置。[8]前記複数のCPUコアは、それぞれ、対応するキューに格納された受信パケットを刈り取り、パケット処理を行う、請求項6又は7に記載のパケット処理装置。前記受信パケットを、前記判定テーブルを参照して、前記複数のキューの適切なキューに振り分けるキュー選択器と、を備えるネットワークインタフェースカード。unit)コアへ適切に分散する受信パケット分散方法、キュー選択器、パケット処理装置、および記録媒体に関する。Virtualization)等で仮想化することが検討されている。この場合、携帯端末からのユーザデータパケットを受信して処理するデータブレーンパケット処理装置は、バーチャルマシン上で実現される。system)上で実行する方式をいう。Project)で規定されている既存2G/3G網を収容しつつ、新たなLTEアクセス網を収容する能力を持つ。Access)、3GPP2などのnon?3GPPアクセスを含めた多様なアクセスネットワークを収容することができる。gateway)から構成され、さらには、S?GW/P?GWの統合型のゲートウェイも提供可能である。ハンドオーバといったモビリティ管理を行うノードである。S?GWは、LTEおよび3Gシステムへアクセスを行う携帯端末の音声やパケットなどのユーザデータを処理するノードである。Subsystem)あるいは外部パケット網とのインタフェースを持つノードである。protocol)で実現するためのサブシステムである。Architecture)サーバの仮想化基盤上で実現する。Devices,Inc.)などのインテル互換CPUを搭載したサーバのことである。IAサーバはPCサーバとも呼ばれる。PCサーバは、パーソナルコンピュータ(PC)を基本に設計・製造されたサーバである。NodeB)は、LTEにおける無線基地局(e−NodeB)である。図中の携帯端末は、いわゆるガラパゴス携帯、スマートフォン、タブレット端末を想定している。[0009]前述したように、NFVは、専用ハードウェアで実現されていたモバイルコア等のネットワークを汎用サーバのソフトウェアで実現できることを目的としている。データプレーンパケット処理装置は、汎用サーバに搭載されたマルチコアCPU上で仮想化されたバーチャルマシン上のソフトフェアとして実現される。マルチコアCPUは、複数のCPUコアを備える。[0010]マルチコアCPU上で、データプレーンパケット処理装置の処理能力を向上させるためには、複数のCPUコアでパケット処理動作を行い、さらにそのCPUコア数に応じて性能をスケールさせる必要がある。[0011]使用するCPUコア数に応じた性能スケールをソフトウェア処理で実現するには、通常、次の方法が採用される。Card)から、バーチャルマシン上の受信専用CPUコアにてパケットを刈り取る。次に、そのパケットを各CPUコア(パケット処理コア)に振り分ける。それらのパケットを受け取った各々のCPUコア(パケット処理コア)にてパケット処理する。[0012]ここで、性能を向上させるためには、外部から入力されるユーザデータパケット(受信パケット)を、バーチャルマシンに割り当てられた複数のCPUコアへ適切に配分(分散)することが必要である。[0013]このような受信パケットを分散する方法に関する先行技術(関連技術)は、従来から種々知られている。[0014]例えば、特開2010−226275号公報(特許文献1)は、マルチコアプロセッサを利用してパケットを処理する際、マルチコアプロセッサのリソースを有効利用できるようにした、「通信装置」を開示している。[0015]この特許文献1に開示された通信装置では、複数のマルチコアプロセッサ部の内のどのマルチコアプロセッサ部へデータパケットを出力するべきかを決定する場合、IPデータパケットの「あて先IPアドレス」、「ソースIPアドレス」、「プロトコル番号」などの情報からハッシュ関数を用いて算出した値をもとに、出力先のマルチコアプロセッサ部を決定する方式を採用している。マルチコアプロセッサ部の内部には複数のコアが配置されている。各コアはそれぞれ複数のスレッドを同時に実行できる構成となっている。受信コントロール部は、新規に受信したデータパケットをメインメモリにストアすると共に、ワークコントロール部に対して上記データパケットの処理をワークという形で受け渡し、ワークに対するスレッドの割り当てを依頼する機能を有する。[0016]また、特開2011−077746号公報(特許文献2)は、各コアがパケットを最大限に並列処理可能な、「ネットワーク中継装置」を開示している。[0017]特許文献2に開示されたネットワーク中継装置は、受信待ちキューと、下位フロー識別部と、上位フロー識別待ちキューと、転送処理待ちキューと、上位フロー識別/転送処理部と、送信待ちキューとから構成されている。ネットワーク中継装置がパケットを受信したとき、受信待ちキューにパケットを一時的に保持する。下位フロー識別部は受信待ちキューからパケットを1つ取り出し、例えばIPヘッダの送信元IPアドレスや宛先IPアドレスなどのヘッダ情報を用いてハッシュ関数を計算し、計算したハッシュ関数により、下位フロー毎に上位フロー識別待ちキューにパケットを振り分ける。上位フロー識別/転送処理部は、上位フロー識別処理を転送処理の2つの処理を1つのコア上同居させた処理部である。本実施例においてマルチコアCPUを用いたが、複数のCPUを用いて実施してもよい。Card)のパケット送信遅延を少なくする、「仮想計算機システム」を開示している。[0019]特許文献3に開示された仮想計算機システムにおいて、複数の仮想計算機と物理NICとは共通バスにより相互接続されている。これら仮想計算機の各々は仮想ネットワークインタフェースカード(VNIC)を有している。物理ネットワークインタフェースカード(物理NIC)は、共通バスに接続されてVNICにより共有(共用)されている。物理NICは、ネットワークから受信したパケットについて受信した順番で処理を行う。ネットワークからネットワークI/Fが、受信バケット番号1(以下単に番号1と称す)の受信パケットデータを受信すると、受信バッファにこの受信パケットデータを格納する。受信バッファは、格納された番号1の受信パケットデータから受信対象のIPアドレスデータを抜き出し、この受信パケットのIPアドレスに対応する受信キューを選択する。[0020]さらにまた、特開2011−141587号公報(特許文献4)は、ネットワークにアップロードした単一の情報量の多いデータに対して、応答時間を短縮する、「分散処理システム」を開示している。[0021]特許文献4に開示された分散処理システムは、受付応答装置と、分断統合装置と、複数の処理装置と、1つ以上のキュー監視装置と、を含んで構成される。受付応答装置は、ユーザ端末からネットワークを介してデータ(アップロードデータ)を受信する。分断統合装置は、受付応報装置が受け付けたデータを取得して、そのデータを分断して断片データを生成し、さらに処理された断片データを統合する。複数の処理装置は、断片データを取得し、データ処理を行う。1つ以上のキュー監視装置は、分断統合装置から出力された断片データを取得してキューとして記憶し、処理装置からの要求により断片データを処理装置に送信する。処理装置は、キュー管理装置から断片データを取得し、その取得した断片データに対し所定のデータ処理を実行する。この処理装置は、キュー選択部と、断片データ取得部と、データ処理部と、断片データ結果出力部とを含んで構成される。キュー選択部は、断片データの取得元となるキュー管理装置を選択する。このときのキュー管理装置の選択は、例えば、ラウンドロビン法等の分散アルゴリズムを用いて行われる。断片データ取得部は、キュー選択ぶにより選択されたキュー管理装置に、断片データの取得要求を送信し、キュー管理装置から断片データを取得する。Problem[0023]汎用サーバをNFVにて仮想化し、それ上のバーチャルマシンにてユーザデータ処理装置を構成する場合、スループット性能に課題がある。その理由は、ネットワーク専用ハードウェアで構成されたユーザデータ処理装置と異なり、全ての機能をソフトウェアで実現するためである。OS(バーチャルマシン)側からホストOSを経由せず直接NIC経由で外部との通信が可能となる。このため、ホストOS側との通信に必要なオーバーヘッドを排除することができ、性能を向上させることができる。外部から入力されるユーザパケットデータをバーチャルマシンに割り当てられた複数のCPUコアへ適切に分配できなければ、CPUコア数に応じて性能がスケールできない課題がある。特定のCPUコアに処理負荷が偏り、全てのCPUコアリソースを使い切ることができないからである。CPUコアが1つであれば、問題がないが、マルチコアプロセッサ上でCPUコア数に比例して性能を向上させることができない。[0025]関連技術では、複数のCPUコアとして、複数のパケット処理コアとは別に受信専用コアを配備し、例えば、上記特許文献4に開示されているように、本受信専用コアで各パケット処理コアにラウンドロビンロジック等で受信パケットを分配することで分散することが可能である。受信されるパケット長等のぱらつきにより、特定のパケット処理コアにロングパケットあるいはショートパケットが集中的に分配される可能性がある。パケットサイズにより1パケットあたりのCPUコアの負荷は変動する。そのため、CPUコア負荷の観点からは、結果として偏りが発生し、CPUコア数に比例して性能スケールさせることができない。その結果、処理能力を最大化することはできない。[0026]また、受信専用コアによる分配ロジックを変更し、これらの課題を解決しようとすることも考えられる。この場合、分配ロジックが複雑になるため分配能力が低下し、分散可能となるCPUコア(パケット処理コア)の数が減少し、スケールできるCPUコア数が制限される。その結果として、マルチコアプロセッサ上での性能を最大化できない課題がある。[0027]ラウンドロビンのような単純なロジックでも、パケットを受信し、転送先のCPUコア(パケット処理コア)を決定し、パケットを転送する処理が発生する。そのため、転送先のCPUコア(パケット処理コア)が増えた場合、パケット転送の際に発生する各CPUコア(パケット処理コア)間の排他制御が増大し、受信専用コアがボトルネックとなり、性能スケールできない課題がある。Protocol)でカプセル化され、ノード装置間通信用のノードIPアドレスが付与され、このノードIPアドレスを使って通信される。このノードIPアドレスは、パケットを受信する装置としては全て同じ送信先IPアドレスになる。Scaling)機能を使い、NIC側でIPアドレスに従って、分散させることは可能である。EPC等のモバイルネットワークで使用するノードIPアドレスは、パケット処理装置としては同じ値になるため、事実上分散させることはできない課題がある。[0029]さらに、分散させたいユーザIPアドレスはカプセル化されたパケットのペイロード中に存在するため、汎用NICに具備されているRSS機能ではユーザIPアドレスを参照できない課題がある。[0030]以上を纏めると、関連のNFV等の技術を使った仮想化環境上で構成される、パケット処理装置における受信パケットの負荷分散方法には、次のような課題がある。[0031]第1の課題は、関連技術の装置では、受信専用コアとしてCPUコアリソースを占有し、さらにパケット処理コアと受信専用コアとの間のパケット授受によるオーバーヘッドにより、1CPUコアあたりのパケット処理性能が劣化することである。その理由は、次の通りである。SRIOV等の機能を使いNIC上に複数のVFを構築した場合、VF上の受信パケットキューは1つしか構成できない。そのため、この受信パケットをNICの受信パケットキューから刈り取る受信専用コアを配備しなければならない。[0032]第2の課題は、携帯端末単位でのパケットの分散ができず、特定の受信パケットキューあるいはパケット処理コアに負荷が集中してしまい、パケット処理するCPUコアを増やしても、CPUコア数に応じてパケット処理性能がスケールできないことである。その理由は、次の通りである。Function)機能と同様にVF上で複数の受信パケットキューを構築し、RSS機能により各受信パケットキューにパケットを分散することができるNICカードが実現できたとする。その場合でも、EPC等のモバイルネットワークにおけるユーザパケットデータは、GTPにてカプセル化される。そのため、携帯端末のIPアドレスはペイロード中に格納され、パケットのヘッダに付与されるIPアドレスは、EPC内部の各ノード間で送受信するためのノードIPアドレスである。その結果、標準的にNICに具備されているRSS機能では、このノードIPアドレスに基づいてしか、NICの各受信パケットキューに受信パケットを分散させることが出来ない。[0033]第3の課題は、ユーザの利用形態あるいはアプリケーションの特性に応じて、各パケット処理コアの負荷は平滑化することができず、パケット処理するCPUコアの数を増やしても、CPUコア数に応じてパケット処理性能がスケールできないことである。その理由は、次の通りである。携帯端末のユーザIPアドレスベースでのパケット分散ができたとしても、ユーザパケットデータ長は一定ではなく、ユーザ毎あるいはアプリケーション毎にパケット長が異なる。その結果、処理するパケットデータの長が異なると、CPUコアの負荷もパケット毎に変動する。[0034]なお、特許文献1は、単に、IPデータパケットの情報からハッシュ関数を用いて算出した値をもとに、出力先のマルチコアプロセッサ部を決定する、技術的思想を開示しているに過ぎない。[0035]特許文献2は、単に、パケットを受信したとき、受信待ちキューにパケットを一時的に保持し、受信待ちキューからパケットを1つ取り出し、取り出したパケットのIPヘッダのヘッダ情報を用いてハッシュ関数を計算し、計算したハッシュ値により、下位フロー毎に上位フロー識別待ちキューにパケットを振り分け、上位フロー識別待ちキューにあるパケットを刈り取って、上位フロー識別処理を行う、技術的思想を開示しているに過ぎない。[0036]特許文献3は、単に、受信パケットデータから受信対象のIPアドレスデータを抜き出し、この受信パケットのIPアドレスに対応する受信キューを選択する、技術的思想を開示しているに過ぎない。[0037]特許文献4は、前述したように、単に、キュー管理装置の選択を、ラウンドロビン法等の分散アルゴリズムを用いて行う、技術的思想を開示しているに過ぎない。[0038]本発明の目的は、CPUコア数に応じてユーザデータパケットの処理能力をスケールさせることができる、受信パケット分散方法、キュー選択器、パケット処理装置、および記録媒体を提供することにある。Solution[0039]本発明の一形態は、携帯端末からのユーザデータパケットを受信パケットとして受信し、バーチャルマシンに割り当てられた複数のCPUコアにそれぞれ対応し、かつそれぞれキュー番号が割り当てられた複数のキューへ、前記受信パケットを分散する受信パケット分散方法であって、前記ユーザデータパケットを前記受信パケットとして受信し、前記受信パケットのペイロードに位置するユーザIPアドレスを抽出し、該抽出したユーザIPアドレスのハッシュ値を計算し、該ハッシュ値に基づいて、前記受信パケットを格納すべきキューのキュー番号を選択し、前記複数のCPUコア毎にCPU使用率を格納する判定テーブルを参照し、前記CPU使用率に基づいて、前記選択したキュー番号を、前記受信パケットを格納すべきキューのキュー番号とするか否かを決定し、該決定したキュー番号のキューに前記受信パケットを格納すること、を特徴とする。Effects[0040]本発明によれば、CPUコア数に応じてユーザデータパケットの処理能力をスケールさせることができる。図1は、モバイルネットワークをNFVで仮想化する例を説明する図である。図2は、本発明の第1の実施例に係るパケット処理装置の構成を示すブロック図である。図3は、図2に示したパケット処理御装置に使用される、判定デーブルの一例を示す図である。図4は、図2に示したパケット処理御装置に使用される、キュー選択器の構成を示すブロック図である。図5は、図2に示したパケット処理御装置に使用される、キュー選択器の動作を説明するためのフローチャートである。Embodiments[0042][関連技術]本発明の理解を容易にするために、以下では本発明に関連する技術について説明する。Virtualization)等で仮想化することがある。この場合、携帯端末からのユーザデータパケットを処理するデータブレーンパケット処理装置は、バーチャルマシン上で実現される。[0044]NFVは、専用ハードウェアで実現されていたモバイルコア等のネットワークを汎用サーバのソフトウェアで実現できることを目的としている。データプレーンパケット処理装置は、汎用サーバに搭載されたマルチコアCPU上で仮想化されたバーチャルマシン上のソフトフェアとして実現される。マルチコアCPUは、複数のCPUコアを備える。[0045]マルチコアCPU上で、データプレーンパケット処理装置の処理能力を向上させるためには、複数のCPUコアでパケット処理動作を行い、さらにそのCPUコア数に応じて性能をスケールさせる必要がある。[0046]使用するCPUコア数に応じた性能スケールをソフトウェア処理で実現するには、通常、次の方法が採用される。汎用サーバにおけるパケット受信部であるNICから、バーチャルマシン上の受信専用コアにてパケットを刈り取る。次に、そのパケットを各CPUコア(パケット処理コア)に振り分ける。それらのパケットを受け取った各々のCPUコア(パケット処理コア)にてパケット処理する。[0047]しかしながらこの方法では、CPUコアをスケールさせる前に比べて、受信専用コアのCPUリソースを余計に消費し、また、分散させるCPUコアの数が増えた場合、受信専用コアがボトルネックとなり性能スケールができないという問題がある。[実施の形態]この問題を解決するために、本発明の実施形態では、図2に示すようなインテリジェントな機能を具備したネットワークインタフェースカード(NIC)11を使ったパケット処理装置10を構成する。[0048]汎用サーバに挿入されたインテリジェントな機能を具備したNIC11で、ユーザデータパケットを受信すると、キュー選択器14は、パケットの振り分けを行い、各キュー15−0、・・・、15−mへパケットデータを積み込む。ここで、mは2以上の整数である。[0049]この時、キュー選択器14は、判定テーブル13に従って、振り分け先を決定する。キュー選択器14は、判定テーブル13を参照して、第0乃至第mのCPUコア18−0、・・・、18−mから展開されるCPU使用率等に基づいて、適切なキューにパケットデータを振り分ける。[0050]EPC等のモバイルコアネットワークでは、EPC等モバイルコアネットワーク装置間通信用のノードIPアドレスと、ユーザ毎に割り当てられるユーザIPアドレスと、の2種類のIPアドレスがある。Protocol)にてカプセル化され、ノードIPアドレスが付与される。Scaling)機能にてIPアドレスのハッシュ値を計算し、このハッシュ値に基づき分散を行うことが可能である。[0052]しかしながら、EPC等のモバイルコアネットワークのユーザデータパケットは、通常、NICでは、ノードIPアドレスのハッシュ値に従ったパケット振り分けになる。このため、同一ネットワーク装置から送信される、あるいは同一ネットワーク装置に送信される、ユーザデータパケットを受信するケースにおいては、同一のCPUコアにユーザデータパケットが集中し、パケットの分散処理が期待通りに行われない。[0053]ユーザIPアドレスは、パケットのペイロードに位置するため、汎用のNICのRSS機能では、ユーザIPアドレスのハッシュ値に従ったパケット振り分けができない。[0054]そこで、本発明の実施形態では、判定テーブル13は、第0乃至第mのCPUコア18−0、・・・、18−mから展開された送信元ユーザIPアドレス、送信先ユーザIPアドレスに従って、振り分けるキュー15−0、・・・、15−mを決定したハッシュテーブルを作成する。[0055]キュー選択器14は、受信したパケットのペイロード中に位置するユーザIPアドレスを抽出し、ハッシュ値を計算した後、判定テーブル13を参照し、受信したパケットを格納するキューを選択する。その後、キュー選択器14は、判定テーブル13におけるCPU使用率を参照する。選択したキューに割り当てられているCPUコアのCPU使用率が閾値以上の場合、キュー選択器14は、閾値以下のCPU使用率であるCPUコアの中で最も低いCPUコアに割り当てられるキューを決定する。[0056]キュー選択器14は、決定したキューに受信パケットを格納する。全てのCPUコアのCPU使用率が閾値以上になった場合、キュー選択器14は、100%と古い閾値の間で新たな閾値を設定し、この新たな閾値に従って同様なキュー選択決定処理を行う。全てのCPUコア使用率が新たな閾値を超える場合、キュー選択器14は、同様に閾値の使用率100%に達するまで再設定を行い、これを繰り返す。[0057]第0乃至第mのCPUコア18−0、・・・、18−mは、それぞれ、割り当てられているインテリジェントな機能を具備したNIC11上のキュー15−0、・・・、15−mをポーリングすることで、パケットを随時刈り取り、第0乃至第mのCPUコア18−0、・・・、18−mで引き取ったユーザデータパケットの処理を行う。[0058]このように、本発明の実施形態では、インテリジェントな機能を具備したNIC11上に実装される判定テーブル13とキュー選択器14にて、各CPUコア18−0、・・・、18−mに受信したユーザデータパケットが分散され、各CPUコア18−0、・・・、18−mのCPUコアリソースが平滑化される。そのため、全てのCPUコアリソース使い切ることができ、CPUコア数に応じてユーザデータパケットの処理能力をスケールさせることが可能となる。[0059]以下、図面を参照して、本発明の実施例とその動作について詳細に説明する。[実施例1]図2は、本発明の第1の実施例に係るパケット処理装置10の構成を示すブロック図である。[0060]パケット処理装置10は、インテリジェントな機能を具備したNIC11と、複数のパケット処理用バーチャルマシンとを備えている。図示の例では、複数のパケット処理用バーチャルマシンとして、第0のパケット処理用バーチャルマシン17?0乃至第nのパケット処理用バーチャルマシン(図示せず)の、合計(n+1)のパケット処理用バーチャルマシンを備えている。ここで、nは1以上の整数である。Function)12−0〜12−nとを具備する。PF16上には仮想的に複数のVF12−0〜12−nが構成され、各バーチャルマシン17−0・・・は各VF12−0〜12−nを使用してパケットを送受信することができる。本例では、複数のVFとして、第0のVF12−0乃至第nのVF12−nの、合計(n+1)個のVFを備えている。[0062]第0乃至第nのVF12−0〜12−nの各々は、同じ構成をしている。したがって、以下では、第0のVF12−0を代表として説明し、他のVFについての説明を省略する。[0063]第0のVF12−0は、判定テーブル13と、キュー選択器14と、複数のキュー15−0〜15−mとを備えている。図示の例では、複数のキューとして、第0のキュー15−0乃至第mのキュー15−mの、合計(m+1)個のキューを備えている。[0064]一方、第0のパケット処理用バーチャネルマシン17?0は、複数のCPUコア18−0〜18−mを備えている。図示の例では、複数のCPUコアとして、第0のCPUコア18−0乃至第mのCPUコア18−mの、合計(m+1)個のCPUコアを備えている。[0065]図2に示されるように、複数のキュー15−0〜15−mは、第0のパケット処理用バーチャルマシン17−0に割り当てられた複数のCPUコア18−0〜18−mにそれぞれ対応している。第0乃至第mのキュー15−0〜15−mには、それぞれ、#0〜#mのキュー番号が割り当てられている。[0066]判定テーブル13は、図3に示されるように、複数のCPUコア18−0〜18−mごとにCPU使用率を格納する。図3に示す例では、第0のCPUコア18−0のCPU使用率は1%であり、第1のCPUコアのCPU使用率は20%であり、第mのCPUコア18−mのCPU使用率は5%である。[0067]尚、判定テーブル13は、CPU使用率の他に、上述したような、複数のCPUコア18−0〜18−mから展開された送信元ユーザIPアドレス、送信先ユーザIPアドレスに従って、振り分けるキュー15−0〜15−mを決定したハッシュテーブルや、処理すべき対象となるユーザIPアドレス等の呼処理情報をも格納する。[0068]本発明の実施形態によるパケット処理装置10は、インテリジェントな機能を有するNIC11内のキュー選択器14でユーザデータパケットを受信すると、後述のように、第0乃至第mのキュー15−0〜15−mのどのキューに受信パケットを格納すべきかを決定する。キュー選択器14は、携帯端末からユーザデータパケットを受信パケットとして受信し、後述のように、複数のキュー15−0〜15−mへ、受信パケットを分配して格納する。[0069]図4は、キュー選択器14の構成を示すブロック図である。キュー選択器14は、受信手段141と、抽出手段142と、計算・選択手段143と、決定手段144と、格納手段145とを備えている。[0070]図5は、キュー選択器14の動作を説明するためのフローチャートである。[0071]受信手段141は、ユーザデータパケットを受信パケットとして受信する(図5のステップS101)。抽出手段142は、受信パケットのペイロードに位置するユーザIPアドレスを抽出する(図5のステップS102)。計算・選択手段143は、抽出したユーザIPアドレスのハッシュ値を計算し、このハッシュ値に基づいて、受信データを格納すべきキューのキュー番号を選択する(図5のステップS103)。[0072]決定手段144は、判定テーブル13を参照し(図5のステップS104)、CPU使用率に基づいて、後述のように、選択したキュー番号を、受信パケットを格納すべきキューのキュー番号とするか否かを決定する(図5のステップS105〜S109参照)。[0073]格納手段145は、決定したキュー番号のキューに受信パケットを格納する(図5のステップS110)。[0074]本実施形態では、このキューから受信パケットを刈り取ることによって、CPUコアの負荷分散を図っている。[0075]次に、図5を参照して、決定手段144の動作について更に詳細に説明する。[0076]ハッシュ値に基づくキュー番号を決定する前に、決定手段144は、判定テーブル13を参照し(ステップS104)、選択したキュー番号にアサインされたCPUコアの使用率が予め定められた閾値以下であることを確認した上で(ステップS105のYes)、キュー番号を決定する(ステップS106)。[0077]ユーザIPアドレスに基づくハッシュ値により、受信パケットのキューへの分散を図っても、パケット長等のトラヒック特性等によりCPUコアの負荷は一様ではない。そのため、通常では、CPUコア毎に負荷の偏りが発生する。[0078]判定テーブル13にてCPUコアのCPU使用率が閾値以上である場合(ステップS105のNo)、決定手段144は、閾値以下でもっとも使用率が低いCPUコアに割り当てられたキューのキュー番号を決定する(ステップS107のNo、ステップS109)。格納手段145は、その決定したキュー番号のキューにその受信パケットを格納する(ステップS110)。[0079]全てのCPUコアのCPU使用率が閾値以上の場合(ステップS107のYes)、決定手段144は、新たな閾値を決定(設定)し(ステップS108)、その新たな閾値に基づき同様の論理でキュー番号を決定する(ステップS107〜S109)。[0080]尚、判定テーブル13には、パケット処理装置10のバーチャルマシン17?0に割り当てられた複数のCPUコア18−0〜18−mから定期的に送信される各CPUコアのCPU使用率の情報が格納される。[0081]このようにして、本実施例では、各CPUコア18−0〜18−mの負荷を平滑化し、全てのCPUコアリソースを平等に使うことで、CPUコア数に応じ性能をスケールさせ、ハードウェアにおけるCPU性能の最大限に使用することができる。[0082]図5を参照して、キュー選択器14の動作について説明する。[0083]キュー選択器14は、ユーザデータパケットを受信パケットとして受信し(ステップS101)、受信パケット中のペイロード中に格納されているユーザIPアドレスを抽出し(ステップS102)、このIPアドレスのハッシュ値を計算することで格納すべきキューのキュー番号を選択する(ステップS103)。[0084]キュー番号を決定する前に、キュー選択器14は、判定テーブル13を参照し(ステップS104)、この判定テーブル13に示される各CPUコアのCPU使用率の情報を参照し、閾値以下であることを確認し(ステップS105のYes)、閾値以下であればキュー番号を決定する(ステップS106)。[0085]閾値以上であれば(ステップS105のNo)、キュー選択器14は、閾値以下で最もCPU使用率が低いCPUコアにアサインされたキューのキュー番号を選択し決定する(ステップS107のNo、ステップS109)。全てのCPUコアの使用率が閾値以上の場合(ステップS107のYes)、キュー選択器14は、再度新たな閾値を設定し(ステップS108)、同様の論理でキュー番号を決定する(ステップS107〜S109)。[0086]各CPUコア18−0〜18−mは、対応するキュー15−0〜15−mに格納されたパケットを刈り取り、プロトコル処理等のパケット処理を行う。[0087]以上説明したように、本発明の実施例においては、以下に記載するような効果を奏する。[0088]第1の効果は、CPUコアリソースを使わずに受信パケットを分散でき、またパケットを分散する受信専用コア無しで受信パケットを分散することができ、CPUコアスケール時に受信専用コアのボトルネックを回避して、性能スケールが可能となることである。その理由は、NICカード上の判定テーブル13に対して、パケット処理装置10として割り当てられた各CPUコア18−0〜18−mのCPU使用率の情報、処理すべき対象となるユーザIPアドレス等の呼処理情報を随時登録し、この判定テーブル13に従って、NIC11で受信したパケット処理を行うCPUコアが担当すべきキューを決定するからである。[0089]第2の効果は、携帯端末のユーザ単位に受信したパケットを各CPUコア18−0〜18−mに分散させ、各CPUコアの負荷を平準化することで、装置としてのパケット処理性能の最大化を実現できることである。その理由は、NIC11におけるキュー選択器14の機能にて受信パケットペイロードに位置するカプセル化されたユーザIPアドレスを検出し、判定テーブル13を参照し、このユーザIPアドレスのハッシュ値等に従って、受信パケットを格納するNIC上のキューを決定するからである。[0090]第3の効果は、ユーザデータパケットのパケット長等のばらつきによるCPUコアの負荷の偏りを解消し、各CPUコアの負荷を平準化することで、装置としてのパケット処理性能の最大化を実現できることである。その理由は、各CPUコア18−0〜18−mから判定テーブル13にて集約されたダイナミックなCPU使用率に従い、CPU使用率がある一定以下のCPUコアを特定し、受信パケットを格納するNIC11上のキューを決定するからである。[0091]以上、実施の形態を参照して本願発明を説明したが、本願発明は上記実施の形態に限定されるものではない。本願発明の構成や詳細には、本願発明のスコープ内で当業者が理解し得る様々な変更をすることができる。[0092]上記の実施形態の一部又は全部は、以下の付記のようにも記載されうるが、以下には限られない。受信パケット分散方法。(付記2)前記選択したキュー番号にアサインされた前記CPUコアのCPU使用率が予め定められた閾値以下である場合、前記決定することは、当該選択したキュー番号を、前記決定したキュー番号として決定する、付記1に記載の受信パケット分散方法。(付記3)前記選択したキュー番号にアサインされた前記CPUコアのCPU使用率が前記閾値以上である場合、前記決定することは、前記閾値以下で最も使用率が低いCPUコアに割り当てられたキューのキュー番号を、前記決定したキュー番号として決定する、付記2に記載の受信パケット分散方法。(付記4)全てのCPUコアのCPU使用率が前記閾値以上の場合、前記決定することは、新たな閾値を決定し、該新たな閾値に基づいて、前記受信パケットを格納すべきキューのキュー番号を決定する、付記3に記載の受信パケット分散方法。該決定したキュー番号のキューに前記受信パケットを格納する格納手段と、を備えることを特徴とするキュー選択器。当該選択したキュー番号を、前記決定したキュー番号として決定する、付記5に記載のキュー選択器。前記閾値以下で最も使用率が低いCPUコアに割り当てられたキューのキュー番号を、前記決定したキュー番号として決定する、付記6に記載のキュー選択器。新たな閾値を決定し、該新たな閾値に基づいて、前記受信パケットを格納すべきキューのキュー番号を決定する、付記7に記載のキュー選択器。前記受信パケットを、前記判定テーブルを参照して、前記複数のキューの適切なキューに振り分けるキュー選択器と、を備えることを特徴とするパケット処理装置。該決定したキュー番号のキューに前記受信パケットを格納する格納手段と、を備える、付記9に記載のパケット処理装置。当該選択したキュー番号を、前記決定したキュー番号として決定する、付記10に記載のパケット処理装置。前記閾値以下で最も使用率が低いCPUコアに割り当てられたキューのキュー番号を、前記決定したキュー番号として決定する、付記11に記載のパケット処理装置。新たな閾値を決定し、該新たな閾値に基づいて、前記受信パケットを格納すべきキューのキュー番号を決定する、付記12に記載のパケット処理装置。(付記14)前記複数のCPUコアは、定期的に、それぞれのCPU使用率を前記判定テーブルに送信して格納する、付記10乃至13のいずれか1つに記載のパケット処理装置。(付記15)前記複数のCPUコアは、それぞれ、対応するキューに格納された受信パケットを刈り取り、パケット処理を行う、付記10乃至14のいずれか1つに記載のパケット処理装置。該決定したキュー番号のキューに前記受信パケットを格納する格納手順と、を実行させる記録媒体。前記受信パケットを、前記判定テーブルを参照して、前記複数のキューの適切なキューに振り分けるキュー選択器と、を備えるネットワークインタフェースカード。該決定したキュー番号のキューに前記受信パケットを格納する格納手段と、を備える、付記17に記載のネットワークインタフェースカード。当該選択したキュー番号を、前記決定したキュー番号として決定する、付記18に記載のネットワークインタフェースカード。前記閾値以下で最も使用率が低いCPUコアに割り当てられたキューのキュー番号を、前記決定したキュー番号として決定する、付記19に記載のネットワークインタフェースカード。新たな閾値を決定し、該新たな閾値に基づいて、前記受信パケットを格納すべきキューのキュー番号を決定する、付記20に記載のネットワークインタフェースカード。CPUコアこの出願は、2014年3月19日に出願された日本出願特願2014-056036号を基礎とする優先権を主張し、その開示の全てをここに取り込む。