(57)【要約】【課題】仮想機能ごとに処理性能を確保できるようにする。【解決手段】それぞれ一以上の仮想インタフェース（ＶＮＩＣ）を有する複数の仮想機能（ＶＮＦ）の処理（パケット処理）を、複数のプロセッサコア（スレッド）２２１〜２２３によって実行し、前記一以上の仮想インタフェースが前記複数のプロセッサコア２２１〜２２３のうちの一のプロセッサコアに属するように、前記複数の仮想機能を前記仮想機能毎に前記複数のプロセッサコアに割り当てる。【選択図】図８
2017207834.tif 000002
【特許請求の範囲】
【請求項１】
それぞれ一以上の仮想インタフェースを有する複数の仮想機能の処理を、複数のプロセッサコアによって実行し、
前記一以上の仮想インタフェースが前記複数のプロセッサコアのうちの一のプロセッサコアに属するように、前記複数の仮想機能を前記仮想機能毎に前記複数のプロセッサコアに割り当てる、
処理を、コンピュータに実行させる、プログラム。
【請求項２】
前記プロセッサコアの処理性能に対する前記仮想機能毎の処理性能の割合を示す値に基づき、前記プロセッサコアの処理性能を超えない範囲で、前記複数の仮想機能を前記仮想機能毎に前記複数のプロセッサコアに割り当てる、
処理を、前記コンピュータに実行させる、請求項１に記載のプログラム。
【請求項３】
新たに前記複数のプロセッサコアのうちの一のプロセッサコアに割り当てる仮想インタフェースを含む仮想機能を前記複数のプロセッサコアのうちの一のプロセッサコアに割り当てる際、前記仮想機能に係る第１識別情報が登録済みか否かを判断し、
前記第１識別情報が登録済みである場合、前記仮想機能を割り当てられた前記一のプロセッサコアの第２識別情報を取得し、
取得した第２識別情報に対応する前記一のプロセッサコアに、前記仮想機能の前記新たな仮想インタフェースを割り当てる、
処理を、前記コンピュータに実行させる、請求項２に記載のプログラム。
【請求項４】
前記第１識別情報が未登録である場合、前記複数のプロセッサコアのそれぞれに割り当てられた前記仮想機能毎の処理性能の割合を示す値の合計値を算出し、
前記複数のプロセッサコアのそれぞれについて算出した合計値と、前記プロセッサコアの処理性能に対する前記仮想機能の処理性能の割合を示す値と、に基づき、前記仮想機能を割り当て可能なプロセッサコアを決定する、
処理を、前記コンピュータに実行させる、請求項３に記載のプログラム。
【請求項５】
前記複数のプロセッサコアを前記合計値の大きい順にソートし、
ソート後の順に、ソートした前記複数のプロセッサコアの空き割合を示す値と前記仮想機能の処理性能の割合を示す値とを比較することで、前記仮想機能を割り当て可能なプロセッサコアを決定する、
処理を、前記コンピュータに実行させる、請求項４に記載のプログラム。
【請求項６】
前記仮想機能を割り当て可能なプロセッサコアを決定できない場合、前記複数のプロセッサコアに既に割り当てられた前記複数の仮想機能、及び前記仮想機能を、前記仮想機能毎の処理性能の割合を示す値及び前記仮想機能の処理性能の割合を示す値の大きい順にソートし、
ソートした前記複数の仮想機能及び前記仮想機能を、ソート後の順に、前記仮想機能毎に前記複数のプロセッサコアに再度割り当てる、
処理を、前記コンピュータに実行させる、請求項４または請求項５に記載のプログラム。
【請求項７】
それぞれ一以上の仮想インタフェースを有する複数の仮想機能の処理を、複数のプロセッサコアによって実行する処理部と、
前記処理部を制御する制御部と、を備え、
前記制御部は、
前記一以上の仮想インタフェースが前記複数のプロセッサコアのうちの一のプロセッサコアに属するように、前記複数の仮想機能を前記仮想機能毎に前記複数のプロセッサコアに割り当てる、情報処理装置。
【請求項８】
情報処理装置と、
前記情報処理装置に対するアクセスを行なう端末装置と、を備え、
前記情報処理装置は、
それぞれ一以上の仮想インタフェースを有する複数の仮想機能の処理を、複数のプロセッサコアによって実行する処理部と、
前記端末装置からの指示に応じて、前記処理部を制御する制御部と、を備え、
前記制御部は、
前記一以上の仮想インタフェースが前記複数のプロセッサコアのうちの一のプロセッサコアに属するように、前記複数の仮想機能のそれぞれを前記仮想機能毎に前記複数のプロセッサコアに割り当てる、情報処理システム。
【請求項９】
それぞれ一以上の仮想インタフェースを有する複数の仮想機能の処理を、複数のプロセッサコアによって実行し、
前記一以上の仮想インタフェースが前記複数のプロセッサコアのうちの一のプロセッサコアに属するように、前記複数の仮想機能を前記仮想機能毎に前記複数のプロセッサコアに割り当てる、情報処理方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、プログラム、情報処理装置、情報処理システム、及び情報処理方法
に関する。
【背景技術】
【０００２】
近年、パケット処理をポーリング方式で行なうＯＳＳ（Open Source Software）が提供されるようになっている。これに伴い、各種システムでは、割込み方式よりもパケット処理を高速に行なうことの可能なポーリング方式が採用されるようになっている。
【０００３】
また、仮想化技術の発展に伴い、ルータ，ファイアウォール，ロードバランサなどのネットワーク機能をＶＭ（Virtual Machine；仮想マシン）によって実現させるＮＦＶ（Network Functions Virtualization；ネットワーク機能仮想化）技術が、ネットワークシステムに適用されるようになっている。
【０００４】
このため、近年では、情報処理システムにおいて、パケット処理をポーリング方式で行なう技術と、ＮＦＶ技術とが併用されるようになっている。
【０００５】
このような情報処理システムでは、一つのハードウェア上において複数のネットワーク機能が備えられ、マルチテナント構成が採用されている。サービス提供者は、一つのハードウェア上で様々なサービスを提供したいと考えており、一つのハードウェア上で、様々な種類や性能のＶＮＦ（Virtualized Network Functions；仮想ネットワーク機能）を動作させる。
【先行技術文献】
【特許文献】
【０００６】
【特許文献１】国際公開第２０１５／１４１３３７号
【特許文献２】国際公開第２０１４／１２５８１８号
【発明の概要】
【発明が解決しようとする課題】
【０００７】
しかし、パケット処理をポーリング方式で行なう際、あるＶＮＦにパケット処理が偏ると、他のＶＮＦのパケット処理性能が低下する場合がある。マルチテナント環境でＮＦＶサービスを提供するには、リソースを仮想的に分割して、テナントごとの独立性を高めることが求められている。このため、ポーリング方式のマルチテナント環境においても、ＶＮＦごとにパケット処理性能を確保することが課題になっている。
【０００８】
一つの側面では、本件明細書に開示の発明は、仮想機能ごとに処理性能を確保できるようにすることを目的とする。
【課題を解決するための手段】
【０００９】
本件のプログラムは、以下の処理（１）及び（２）をコンピュータに実行させる。
（１）それぞれ一以上の仮想インタフェースを有する複数の仮想機能の処理を、複数のプロセッサコアによって実行する処理。
（２）前記一以上の仮想インタフェースが前記複数のプロセッサコアのうちの一のプロセッサコアに属するように、前記複数の仮想機能を前記仮想機能毎に前記複数のプロセッサコアに割り当てる処理。
【発明の効果】
【００１０】
仮想機能ごとに処理性能を確保することができる。
【図面の簡単な説明】
【００１１】
【図１】ポーリング方式を採用するＮＦＶシステムの構成及び動作の一例を示すブロック図である。
【図２】図１に示す例における、パケット送受信処理を行なうポーリングスレッドと、ＮＩＣ（Network Interface Card）と、ＣＰＵ（Central Processing Unit）コアとの関係を示す図である。
【図３】図１に示すＮＦＶシステムの動作を説明する図である。
【図４】図１に示すＮＦＶシステムの動作を説明する図である。
【図５】図１に示すＮＦＶシステムの動作を概略的に説明するブロック図である。
【図６】図１に示すＮＦＶシステムの動作を詳細に説明するフローチャートである。
【図７】図１に示すＮＦＶシステムの動作を詳細に説明するフローチャートである。
【図８】本実施形態の情報処理システム及び情報処理装置のハードウェア構成及び機能構成を示すブロック図である。
【図９】図８に示す情報処理システムの動作を概略的に説明するブロック図である。
【図１０】図８に示す情報処理システムの動作を詳細に説明するフローチャートである。
【図１１】図８に示す情報処理システムの動作を詳細に説明するフローチャートである。
【図１２】図８に示す情報処理システムの動作を説明する図である。
【図１３】本実施形態におけるインタフェース情報テーブルの一例を示す図である。
【図１４】本実施形態におけるインタフェース情報構造体の一例を示す図である。
【図１５】本実施形態の技術を図１に示す情報処理システムに適用した場合の動作の一例を示すブロック図である。
【図１６】図１５に示す例における、パケット送受信処理を行なうポーリングスレッドと、ＮＩＣと、ＣＰＵコアとの関係を示す図である。
【発明を実施するための形態】
【００１２】
以下に、図面を参照し、本願の開示するプログラム、情報処理装置、情報処理システム、及び情報処理方法の実施形態について、詳細に説明する。ただし、以下に示す実施形態は、あくまでも例示に過ぎず、実施形態で明示しない種々の変形例や技術の適用を排除する意図はない。すなわち、本実施形態を、その趣旨を逸脱しない範囲で種々変形して実施することができる。また、各図は、図中に示す構成要素のみを備えるという趣旨ではなく、他の機能を含むことができる。そして、各実施形態は、処理内容を矛盾させない範囲で適宜組み合わせることが可能である。
【００１３】
〔１〕関連技術について
ここで、図１を参照しながら、ポーリング方式を採用するＮＦＶシステムの構成及び動作の一例を、本願に関連する技術（以下、関連技術という）として説明する。図１は当該関連技術を示すブロック図である。
【００１４】
図１に示すＮＦＶシステムには、マルチコアプロセッサを有するＰＣ（Personal Computer）サーバが備えられる。マルチコアプロセッサは複数のＣＰＵコア（プロセッサコア）を有する。一台のＰＣサーバ（ホスト）上には、ネットワーク機能を提供する複数（図１では３）のＶＮＦが配備される。各ＶＮＦは、ホスト（Host）上のゲスト（Guest）として、ＶＭによって実現される。各ＶＮＦは、複数（図１では２）の仮想インタフェース（ＶＮＩＣ；Virtual Network Interface Card）を有する。また、ＰＣサーバは、外部とのパケットの送受信を行なう複数（図１では２）の物理インタフェース（ＰＮＩＣ；Physical Network Interface Card）を有する。
【００１５】
図１において、３つのＶＮＦは、各ＶＮＦを特定するＶＮＦ番号１〜３を用いて、それぞれＶＮＦ１，ＶＮＦ２，ＶＮＦ３と表記される。また、ＶＮＦ１に備えられる２つのＶＮＩＣは、各ＶＮＩＣを特定するＶＮＩＣ番号１，２を用いて、それぞれＶＮＩＣ１，ＶＮＩＣ２と表記される。ＶＮＦ２に備えられる２つのＶＮＩＣは、各ＶＮＩＣを特定するＶＮＩＣ番号３，４を用いて、それぞれＶＮＩＣ３，ＶＮＩＣ４と表記される。ＶＮＦ３に備えられる２つのＶＮＩＣは、各ＶＮＩＣを特定するＶＮＩＣ番号５，６を用いて、それぞれＶＮＩＣ５，ＶＮＩＣ６と表記される。ＰＣサーバに備えられる２つのＰＮＩＣは、各ＰＮＩＣを特定するＰＮＩＣ番号１，２を用いて、それぞれＰＮＩＣ１，ＰＮＩＣ２と表記される。各ＶＮＩＣや各ＰＮＩＣには、受信ポートＲＸ及び送信ポートＴＸが備えられる。
【００１６】
各ＶＮＦ内のパケット送受信は、各ＶＮＦに割り当てられたＣＰＵコアによって処理される。つまり、ホスト上のパケット送受信については、ポーリングスレッド（Polling thread）で処理され、ホストのＣＰＵコアによって処理される。図１では、３つのＣＰＵコアが、それぞれPolling thread1, Polling thread2, Polling thread3を割り当てられる。３つのＣＰＵコアは、各ＣＰＵコアを特定するコアＩＤ１〜３を用いて、それぞれＣＰＵ１，ＣＰＵ２，ＣＰＵ３と表記される。
【００１７】
図１に示すＶＮＦシステムにおいて、各ポーリングスレッドにどのポート（ＮＩＣ）の処理を割り当てるかは、ランダムに決定されている。図１に示す例では、Polling thread1（ＣＰＵ１）がＶＮＩＣ１，ＶＮＩＣ２，ＶＮＩＣ３のパケット送受信処理を行ない、Polling thread2（ＣＰＵ２）がＶＮＩＣ４，ＶＮＩＣ５，ＶＮＩＣ６のパケット送受信処理を行なう。Polling thread3（ＣＰＵ３）は、ＰＮＩＣ１，ＰＮＩＣ２のパケット送受信処理を行なう。なお、以下では、パケット送受信処理を単にパケット処理という場合がある。
【００１８】
ここで、図２に、図１に示す例における、パケット送受信処理を行なうポーリングスレッドと、当該ポーリングスレッドに割り当てられるＮＩＣ（仮想／物理インタフェース）と、当該ポーリングスレッドが動作するＣＰＵコアとの関係を示す。図２に示すように、一のポーリングスレッドは、一のＣＰＵコアを使用して動作する。そして、図１に示す構成では、ＶＮＩＣ１〜ＶＮＩＣ３のパケット送受信処理はＣＰＵ１で実行され、ＶＮＩＣ４〜ＶＮＩＣ６のパケット送受信処理はＣＰＵ２で実行され、ＰＮＩＣ１及びＰＮＩＣ２のパケット送受信処理はＣＰＵ３で実行される。
【００１９】
したがって、各ＶＮＦのポーリングスレッド（ＣＰＵコア）への割当て状態をＶＮＦ単位で見ると、ＶＮＦ１は一のPolling thread1（ＣＰＵコア１）に割り当てられ、ＶＮＦ３は一のPolling thread3（ＣＰＵコア３）に割り当てられる。しかし、ＶＮＦ２は、二のPolling thread1（ＣＰＵコア１）及びPolling thread2（ＣＰＵコア２）に跨って割り当てられる。つまり、ＶＮＦ２に属する二のＶＮＩＣ３及びＶＮＩＣ４が、それぞれ、異なる二のPolling thread1（ＣＰＵコア１）及びPolling thread2（ＣＰＵコア２）に割り当てられる。
【００２０】
なお、ポーリングスレッド（Polling thread1〜Polling thread3）はポーリング処理であるため、パケット処理を行なっているか行なっていないかに関わらず、ポーリングスレッドによるＣＰＵコアの使用率は常に１００％となる。
【００２１】
図３は、図１に示す構成において３つのＶＮＦ１〜ＶＮＦ３のパケット処理性能が同じ場合にＶＮＦ１〜ＶＮＦ３が最大性能で動作した際の、各Polling thread1〜Polling thread3（ＣＰＵ１〜ＣＰＵ３）の全性能に対するパケット処理の割合を示す。各ＶＮＦのパケット処理性能が同じで各ＶＮＦのパケット処理性能に対しポーリングスレッドの方が高速である場合、一のＣＰＵコアが処理可能な時間内にパケット処理は完了する。このため、各ＶＮＦは、自身の最大パケット処理性能で動作することができ、ＶＮＦどうしでポーリングスレッドのパケット処理時間を奪い合うことがない。したがって、ＶＮＦどうしの性能干渉は発生しない。
【００２２】
しかし、実際のサービスにおいて、全てのＶＮＦが同じ種類で同じパケット処理性能であることはほとんどなく、ＶＮＦごとにパケット処理性能が異なる。例えば、図４に示すように、ＶＮＦ３のパケット処理性能が高い場合、ＣＰＵ２で処理しているＶＮＩＣ５及びＶＮＩＣ６のパケット処理割合が増加する。これに伴いＣＰＵ２で処理しているパケット量がＣＰＵ２で処理可能なパケット量を超えた場合、超えた分のパケット処理をＣＰＵ２で行なうことはできない。このため、パケットロスが発生し、ＶＮＦ３の性能が低下する。このとき、同じＣＰＵ２で動作しているＶＮＩＣ４のパケット処理時間も短くなり、ＶＮＩＣ４の属するＶＮＦ２のパケット処理性能も低下してしまう。
【００２３】
さらに、実際には全てのＶＮＩＣが同じパケット量で通信することはなく、特定のＶＮＩＣのみのパケット処理量が増大した場合にも、当該特定のＶＮＩＣの属するＶＮＦ以外の他のＶＮＦのパケット処理性能に影響を与え、当該他のＶＮＦの処理性能の低下を招く。
【００２４】
上述のようなＶＮＦごとの処理性能の低下は、ＮＦＶサービスを提供する事業者（提供者）にとって、顧客と合意したパケット処理性能を保証することができない事態に陥るため、大きな問題である。したがって、上述のごとくポーリング方式でパケット処理を行なう環境においても、ＶＮＦ（仮想機能）ごとにパケット処理性能を確保できるようにすることが望まれている。
【００２５】
以下、上述した関連技術としてのＮＦＶシステムの動作について、図５〜図７を参照しながら説明する。まず、図５に示すブロック図（処理Ｐ１〜Ｐ６）を参照しながら、図１に示すＮＦＶシステム（関連技術）の動作について概略的に説明する。なお、図５に示すＮＦＶシステムでは、図１に示す例と異なり、ＰＮＩＣが省略され、ＶＮＦ１及びＶＮＦ３はそれぞれ３つのＶＮＩＣを有し、ＶＮＦ２は２つのＶＮＩＣを有している。
【００２６】
ＰＣサーバには、ＧＵＩ（Graphical User Interface）またはＣＬＩ（Command Line Interface）を用いＮＦＶサービス提供者によって操作される端末装置が接続される。当該端末装置は、例えばＰＣであり、ＰＣサーバに直接的に接続されてもよいし、ネットワークを介してＰＣサーバに接続されてもよい。また、当該端末装置としての機能は、ＰＣサーバに含まれてもよい。当該端末装置においては、上記提供者の指示に応じてＰＣサーバに対するアクセスを行ないＰＣサーバを制御するための、コントローラアプリケーション（Controller APL）が実行される。
【００２７】
処理Ｐ１：  Controller APLが、提供者からの指示に従い、新たに追加するＮＩＣのインタフェース名と種別を指定して、ＰＣサーバのデータベース（ＤＢ）へ通知する。インタフェース名は、例えば、ＶＮＩＣ１〜ＶＮＩＣ６，ＰＮＩＣ１，ＰＮＩＣ２である。種別は、例えば、ＮＩＣがＶＮＩＣ（仮想インタフェース）であるかＰＮＩＣ（物理インタフェース）であるかを示す情報である。種別としては、仮想／物理以外のインタフェース種別を示す情報が含まれてもよい。なお、以下において、種別（仮想／物理等）を問わない「インタフェース」については単に「ＮＩＣ」と記載する場合がある。
【００２８】
処理Ｐ２：  ＤＢは、Controller APLからインタフェース名と種別の通知を受けると、受領したインタフェース名と種別をＤＢ上のインタフェース情報テーブルへ登録する（ＤＢプロセス；DB Process）。
【００２９】
処理Ｐ３：  ＤＢにインタフェース名と種別が登録されると、ＤＢから内部ＳＷプロセス（Internal SW (switch) Process）へ、インタフェース名と種別が登録された旨が通知される。ＤＢから当該通知を受けた内部ＳＷプロセスは、ＤＢから、インタフェース名と種別を取得し内部ＳＷプロセス用のメモリ領域におけるインタフェース情報構造体へ登録する。
【００３０】
処理Ｐ４：  インタフェース情報構造体への登録を完了すると、内部ＳＷプロセスにおいて、ハッシュ値計算により、インタフェース（ＶＮＩＣ）の順序がランダムに決定される。
【００３１】
処理Ｐ５：  内部ＳＷプロセスによって、ポーリングスレッド（Polling thread1〜Polling thread3）が起動される。
【００３２】
処理Ｐ６：  処理Ｐ４で決定された順序で、各ポーリングスレッドにインタフェース（ＶＮＩＣ）が割り当てられる。つまり、インタフェース（ＶＮＩＣ）が各ポーリングスレッドにランダムに割り当てられる。
【００３３】
この後、各ポーリングスレッドが、動作を開始し、割り当てられたインタフェース（ＶＮＩＣ）のパケットを処理する。
【００３４】
ついで、図６及び図７に示すフローチャート（ステップＳ１１〜Ｓ１６；Ｓ２１〜Ｓ２５；Ｓ３１〜Ｓ３９；Ｓ４１〜Ｓ４６）に従って、図１に示すＮＦＶシステム（関連技術）の動作について、より詳細に説明する。
【００３５】
なお、ステップＳ１１〜Ｓ１６の処理は、ＮＦＶサービス提供者による指示に従う端末装置（Controller APL）の動作に対応する処理である。ステップＳ２１〜Ｓ２５の処理はＤＢプロセスの動作に対応する処理である。ステップＳ３１〜Ｓ３９及びＳ４１〜Ｓ４６の処理は、内部ＳＷプロセスの動作に対応する処理であり、特に、ステップＳ４１〜Ｓ４６の処理は、各ポーリングスレッドの動作に対応する処理である。
【００３６】
ＮＦＶサービス提供者（以下、単に提供者という場合がある）は、Controller APLを実行する端末装置において、新たに追加するＶＮＦの種類を選択する（図６のステップＳ１１）。また、提供者は、端末装置において、当該ＶＮＦへ割り当てるリソース、例えばＶＭ／ＶＮＦの処理性能を選択する（図６のステップＳ１２）。さらに、提供者は、端末装置において、ＶＮＦで作成するＶＮＩＣの数を決定する（図６のステップＳ１３）。そして、提供者は、端末装置において、各ＮＩＣのインタフェース名とインタフェース種別とを指定してＰＣサーバのＤＢプロセスへ通知する（図６のステップＳ１４）。ステップＳ１４の処理は、図５の処理Ｐ１に対応する。
【００３７】
ＰＣサーバのＤＢプロセスは、起動後（図６のステップＳ２１）、Controller APLからの通知を受けると、受領したインタフェース名をＤＢ上のインタフェース情報テーブルへ登録する（図６のステップＳ２２）。同様に、ＤＢプロセスは、受領したインタフェース種別をＤＢ上のインタフェース情報テーブルへ登録する（図６のステップＳ２３）。ステップＳ２２及びＳ２３の処理は、図５の処理Ｐ２に対応する。
【００３８】
一方、ＰＣサーバの内部ＳＷプロセスは、起動されると（図６のステップＳ３１）、ＣＰＵコアの数分のポーリングスレッドを自動的に作成し（図６のステップＳ３２）、作成されたポーリングスレッドが自動的に起動される（図６のステップＳ４１）。ＣＰＵコアの数は所定パラメータによって予め与えられる。
【００３９】
この後、ＰＣサーバの内部ＳＷプロセスは、インタフェース名と種別のＤＢへの登録完了通知をＤＢから通知されると、ＤＢから、インタフェース名とインタフェース種別とを取得する。そして、ＰＣサーバの内部ＳＷプロセスは、インタフェース名をインタフェース情報構造体へ登録するとともに（図６のステップＳ３３）、インタフェース種別をインタフェース情報構造体へ登録する（図６のステップＳ３４）。ステップＳ３３及びＳ３４の処理は、図５の処理Ｐ３に対応する。
【００４０】
インタフェース情報構造体への登録を完了すると、内部ＳＷプロセスは、ハッシュ値計算により、インタフェース（ＶＮＩＣ）の順序をランダムに決定する（図６のステップＳ３５）。ステップＳ３５の処理は、図５の処理Ｐ４に対応する。
【００４１】
順序決定後、内部ＳＷプロセスは、インタフェースの作成に成功したか否か、つまりステップＳ３３〜Ｓ３５の処理を完了したか否かを判断する（図７のステップＳ３６）。インタフェースの作成に失敗した場合（ステップＳ３６のＮＯルート）、内部ＳＷプロセスは、失敗した旨をＤＢプロセスに通知する（図７のステップＳ２４）。さらに、ＤＢプロセスは、失敗した旨を提供者（Controller APL）に通知する（図７のステップＳ１５）。
【００４２】
一方、インタフェースの作成に成功した場合（ステップＳ３６のＹＥＳルート）、内部ＳＷプロセスは、成功した旨をＤＢプロセスに通知する（図７のステップＳ２５）。さらに、ＤＢプロセスは、成功した旨を提供者（Controller APL）に通知する（図７のステップＳ１６）。また、内部ＳＷプロセスは、プロセス起動時に自動的に作成されたポーリングスレッドを全て削除し（図７のステップＳ３７）、全てのポーリングスレッドが停止される（図７のステップＳ４２）。
【００４３】
この後、内部ＳＷプロセスは、ＣＰＵコアの数分のポーリングスレッドを作成し（図７のステップＳ３８）、作成されたポーリングスレッドが起動される（図７のステップＳ４３）。ステップＳ４３の処理は、図５の処理Ｐ５に対応する。内部ＳＷプロセスは、ポーリングスレッドの作成後、次のインタフェースが作成されるまで待機する（図７のステップＳ３９）。
【００４４】
また、ポーリングスレッドの起動後、各ポーリングスレッドには、ステップＳ３５で決定された順序で、インタフェース（ＶＮＩＣ）が割り当てられる（図７のステップＳ４４）。つまり、インタフェース（ＶＮＩＣ）が各ポーリングスレッドにランダムに割り当てられる。ステップＳ４４の処理は、図５の処理Ｐ６に対応する。
【００４５】
そして、各ポーリングスレッドが、動作を開始し、割り当てられたインタフェース（ＶＮＩＣ）のパケットを処理する（図７のステップＳ４５）。各ポーリングスレッドは、パケット処理の完了後、次のインタフェースが作成されるまで待機する（図７のステップＳ４６）。
【００４６】
〔２〕本願技術の概要
本実施形態においては、ポーリング方式でパケット処理を行なう環境においても、ＶＮＦ（仮想機能）ごとにパケット処理性能を確保することを可能にする。
【００４７】
このため、本願の技術では、それぞれ一以上のＶＮＩＣ（仮想インタフェース）を有する複数のＶＮＦ（仮想機能）のパケット処理が複数のＣＰＵコア（プロセッサコア；ポーリングスレッド）によって実行される。その際、一以上のＶＮＩＣが複数のＣＰＵコアのうちの一のＣＰＵコアに属するように、複数のＶＮＦがＶＮＦ毎に複数のＣＰＵコアに割り当てられる。また、重み付け値に基づき、ＣＰＵコアの最大パケット処理性能を超えない範囲で、複数のＶＮＦがＶＮＦ毎に複数のＣＰＵコアに割り当てられる。ここで、重み付け値は、ＶＮＦ毎に予め算出取得される値で、例えば、ＣＰＵコア（ポーリングスレッド）の最大パケット処理性能に対するＶＮＦ毎の最大パケット処理性能の割合を示す値である（下記（１）式参照）。
【００４８】
つまり、本願の技術では、実際にＮＦＶサービスを提供するＣＰＵ（マルチコアプロセッサ）を用いて、１ＣＰＵコアあたりのポーリングスレッドの最大パケット処理性能と、ＶＮＦごとの最大パケット処理性能とが、事前に測定される。そして、ＣＰＵコアの最大パケット処理性能に対する各ＶＮＦの最大パケット処理性能の割合を示す値が、各ＶＮＦの重み付け値として決定される。
【００４９】
また、本願の技術では、ＶＮＩＣまたはＰＮＩＣは、ＮＩＣ単位でポーリングスレッドにマッピングされる（割り当てられる）のではなく、ＶＮＦ単位でマッピングされる（割り当てられる）。つまり、本願の技術では、同じＶＮＦに属する複数のＶＮＩＣを同一のＣＰＵコア（ポーリングスレッド）に割り当てる第１機能が備えられる。
【００５０】
さらに、本願の技術では、重み付け値を用いて、ポーリングスレッドごとに当該ポーリングスレッドの最大パケット処理性能を超えないように、ポーリングスレッドにＶＮＩＣがマッピングされる（割り当てられる）。このとき、処理量の多い（重み付け値の大きい）ＶＮＦから順に、ＣＰＵコア（ポーリングスレッドの動作環境）の処理能力を超えない範囲で、ＶＮＦがＣＰＵコアに割り当てられる。つまり、本願の技術では、ＶＮＦの性能に応じてポーリングスレッド（ホストのＣＰＵ）の処理性能を超えないようにポーリングスレッドを適切に選択する第２機能が備えられる。
【００５１】
上述した第１機能によって、ＶＮＦごとにパケット処理性能を確保することができ、特定のＶＮＩＣにパケット処理量が偏った場合においてもＶＮＦどうしの性能干渉を防ぐことができる。
【００５２】
また、上述した第２機能によって、ＶＮＦ単位で最大パケット処理性能を確保することができ、且つ、あるＶＮＦが他のＶＮＦのパケット処理性能に影響を及ぼすのを抑止することができる。
【００５３】
上述したように、本願の技術によれば、様々なパケット処理性能を有するＶＮＦが、各ＶＮＦの最大パケット処理性能を出すことが可能なＮＦＶシステム（情報処理システム）を構築できる。その結果、ベストエフォート型ではなく、最大性能を保証した形でＮＶＦサービスを提供することができる。
【００５４】
また、本願の技術によれば、様々なパケット処理性能を有するＶＮＦが最大パケット処理性能で動作した場合においても、他のＶＮＦのパケット処理性能に影響を与えることがないＮＦＶシステムを構築できる。その結果、ＮＦＶ環境でマルチテナンシーを実現することができ、テナントユーザ間のリソースの独立性が高まる。
【００５５】
さらに、本願の技術によれば、上述のようにパケット処理をポーリング方式で行なう環境においてＶＮＦのパケット処理性能を確保する仕組みが確立される。また、特定のＮＩＣにパケット処理量が偏った場合においても、他のＮＩＣや他のＶＮＦのパケット処理性能に影響を与えることがない。
【００５６】
〔３〕本実施形態のハードウエア構成及び機能構成
図８を参照しながら、本実施形態の情報処理システム（ＮＦＶシステム）１０及び情報処理装置（ＰＣサーバ）２０のハードウェア構成及び機能構成について説明する。図８はそのハードウェア構成及び機能構成を示すブロック図であり、図８に示すように、本実施形態の情報処理システム１０は、ＰＣサーバ２０と端末装置３０とを含む。
【００５７】
端末装置３０は、例えばＰＣであり、ＧＵＩまたはＣＬＩを用いＮＦＶサービス提供者によって操作されＰＣサーバ２０に対するアクセスを行なう。端末装置３０は、ＰＣサーバ２０に直接的に接続されてもよいし、ネットワーク（図示略）を介してＰＣサーバ２０に接続されてもよい。また、端末装置３０としての機能は、ＰＣサーバ２０に含まれてもよい。端末装置３０においては、上記提供者の指示に応じてＰＣサーバ２０に対するアクセスを行ないＰＣサーバ２０を制御するための、コントローラアプリケーション（Controller APL；図９参照）が実行される。
【００５８】
なお、端末装置３０には、ＣＰＵ等の処理部や、各種データを記憶する記憶部のほか、入力部、表示部、及び各種インタフェースが含まれてもよい。このとき、処理部，記憶部，入力部，表示部，及び各種インタフェースは、バス等を介して相互に通信可能に接続される。
【００５９】
入力部は、例えば、キーボード及びマウスであり、ユーザによって操作され、端末装置３０やＰＣサーバ２０に対する各種指示を行なう。なお、マウスに代え、タッチパネル，タブレット，タッチパッド，トラックボール等が用いられてもよい。表示部は、例えば、ＣＲＴ（Cathode Ray Tube）を用いた表示装置や液晶表示装置等であり、各種処理に係る情報を表示出力する。また、表示部とともに、各種処理に係る情報を印刷出力する出力部が備えられてもよい。各種インタフェースは、例えば、端末装置３０とＰＣサーバ２０との間を接続してデータの送受信を行なうケーブル用あるいはネットワーク用のインタフェースを含んでもよい。
【００６０】
ＰＣサーバ（情報処理装置）２０は、記憶部２１及び処理部２２を含むほか、端末装置３０と同様の入力部，表示部，及び各種インタフェースを含んでもよい。このとき、記憶部２１，処理部２２，入力部，表示部，及び各種インタフェースは、バス等を介して相互に通信可能に接続される。
【００６１】
記憶部２１は、処理部２２による各種処理に必要な各種データを格納する。記憶部２１としては、ＲＯＭ（Read Only Memory），ＲＡＭ（Random Access Memory），ＳＣＭ（Storage Class Memory），ＳＳＤ（Solid State Drive），ＨＤＤ（Hard Disk Drive）のうちの少なくとも一つが含まれていればよい。
【００６２】
上記各種データとしては、後述するインタフェース情報テーブル２１１やインタフェース情報構造体２１２が含まれるほか、プログラム２１０などが含まれる。記憶部２１には、後述するインタフェース情報テーブル２１１を登録保存するＤＢ（データベース）や、後述するインタフェース情報構造体２１２を登録保存するメモリ領域が含まれる。インタフェース情報テーブル２１１については、図９，図１０，図１３を参照しながら後述する。また、インタフェース情報構造体２１２については、図９，図１０，図１４を参照しながら後述する。
【００６３】
プログラム２１０としては、処理部２２に実行させるＯＳ（Operating System）プログラムやアプリケーションプログラムが含まれてもよい。アプリケーションプログラムには、処理部２２のＣＰＵコア２２０を後述する制御部として機能させるプログラムが含まれてもよい。また、アプリケーションプログラムには、端末装置３０またはＣＰＵコア２２０に、下記（１）式によって重み付け値を算出取得する処理を実行させるプログラムが含まれていてもよい。さらに、アプリケーションプログラムには、端末装置３０によって実行される上記コントローラアプリケーション（Controller APL；図９参照）が含まれていてもよい。
【００６４】
プログラム２１０に含まれるアプリケーションプログラム等は、光ディスク，メモリ装置，メモリカード等の非一時的な可搬型記録媒体に記録されてもよい。可搬型記録媒体に格納されたプログラムは、例えば処理部２２からの制御により、記憶部２１にインストールされた後、実行可能になる。また、処理部２２が、可搬型記録媒体から直接プログラムを読み出して実行することもできる。
【００６５】
なお、光ディスクは、光の反射によって読み取り可能にデータを記録された可搬型の非一時的な記録媒体である。光ディスクとしては、Ｂｌｕ−ｒａｙ，ＤＶＤ（Digital Versatile Disc），ＤＶＤ−ＲＡＭ，ＣＤ−ＲＯＭ（Compact Disc Read Only Memory），ＣＤ−Ｒ（Recordable）／ＲＷ（ReWritable）等が挙げられる。メモリ装置は、機器接続インタフェース（図示略）との通信機能を搭載した非一時的な記録媒体、例えばＵＳＢ（Universal Serial Bus）メモリである。メモリカードは、メモリリーダライタ（図示略）を介し処理部２２に接続されてデータの書込／読出対象になる、カード型の非一時的な記録媒体である。
【００６６】
処理部２２は、複数（図８では４）のＣＰＵコア（プロセッサコア）２２０〜２２３を有するＣＰＵ（マルチコアプロセッサ）である。一台のＰＣサーバ（ホスト）２０上には、ネットワーク機能を提供する複数（図８では３）のＶＮＦ（仮想機能）が配備される。各ＶＮＦは、ホスト上のゲストとして、ＶＭによって実現される。各ＶＮＦは、複数（図８では２）のＶＮＩＣ（仮想インタフェース）を有する。処理部２２は、複数のＶＮＦのパケット処理（パケット送受信処理）を、それぞれＣＰＵコア（ポーリングスレッド）２２１〜２２３によって実行する。なお、図８では図示していないが、ＰＣサーバ２０は、外部とのパケットの送受信を行なう物理インタフェース（ＰＮＩＣ）を有していてもよい。
【００６７】
図８において、３つのＶＮＦは、各ＶＮＦを特定するＶＮＦ番号（第１識別情報）１〜３を用いて、それぞれＶＮＦ１，ＶＮＦ２，ＶＮＦ３と表記される。また、ＶＮＦ１に備えられる２つのＶＮＩＣは、各ＶＮＩＣを特定するＶＮＩＣ番号１，２を用いて、それぞれＶＮＩＣ１，ＶＮＩＣ２と表記される。ＶＮＦ２に備えられる２つのＶＮＩＣは、各ＶＮＩＣを特定するＶＮＩＣ番号３，４を用いて、それぞれＶＮＩＣ３，ＶＮＩＣ４と表記される。ＶＮＦ３に備えられる２つのＶＮＩＣは、各ＶＮＩＣを特定するＶＮＩＣ番号５，６を用いて、それぞれＶＮＩＣ５，ＶＮＩＣ６と表記される。
【００６８】
ＶＮＦ１〜ＶＮＦ３内のパケット送受信は、各ＶＮＦに割り当てられたＣＰＵコア２２１〜２２３によって処理される。つまり、ホスト上のパケット送受信については、ポーリングスレッド（Polling thread）で処理され、ホストのＣＰＵコア２２１〜２２３によって処理される。図８では、３つのＣＰＵコア２２１〜２２３が、それぞれPolling thread1, Polling thread2, Polling thread3を割り当てられる。３つのＣＰＵコア２２１〜２２３は、各ＣＰＵコアを特定するコアＩＤ（第２識別情報）１〜３を用いて、それぞれＣＰＵ１，ＣＰＵ２，ＣＰＵ３と表記される。
【００６９】
一方、本実施形態の処理部２２におけるＣＰＵコア２２０は、プログラム２１０に含まれるアプリケーションプログラムを実行することで、制御部として機能する。制御部２２０は、端末装置３０からの指示に応じて、処理部２２（ＣＰＵコア２２１〜２２３）を制御する。
【００７０】
制御部２２による制御を開始するのに先立ち、本実施形態では、以下のような最大パケット処理性能が、事前に測定され、例えば端末装置３０に保存される。つまり、実際にＮＦＶサービスを提供するＣＰＵ（マルチコアプロセッサ）２２を用いて、１ＣＰＵコアあたりのポーリングスレッド（ＣＰＵコア）の最大パケット処理性能と、ＶＮＦごとの最大パケット処理性能とが事前に測定され保存される。ここで、最大パケット処理性能は、ＣＰＵコアまたはＶＮＦが単位時間あたりに処理可能なパケット数の最大値であり、その単位は例えばｐｐｓ (packets per second)である。
【００７１】
そして、端末装置３０においては、Controller APL（図９参照）により、下記（１）式を用いてＶＮＦごとの重み付け値が決定され保存される。なお、ＶＮＦごとの重み付け値を決定して保存する処理は、端末装置３０で行なってもよいし、ＰＣサーバ２０の処理部２２で行なってもよい。
【００７２】
［ＶＮＦごとの重み付け値］
＝［ＶＮＦの最大パケット処理性能］／［ポーリングスレッドの最大パケット処理性能］
×１００          （１）
【００７３】
ここで、上記（１）式によって決定される重み付け値は、ＣＰＵコアの最大パケット処理性能つまりポーリングスレッドの１ＣＰＵコアあたりに処理可能なパケット処理性能
に対する各ＶＮＦの最大パケット処理性能の割合を示す値である。ＶＮＦの最大パケット処理性能が、ポーリングスレッドの１ＣＰＵコアあたりに処理可能なパケット処理性能であるとき、当該ＶＮＦの重み付け値は１００になる。
【００７４】
そして、本実施形態の制御部２２０は、以下のような機能を果たす。
【００７５】
まず、制御部２２０は、一以上のＶＮＩＣが複数のＣＰＵコア２２１〜２２３のうちの一のＣＰＵコアに属するように、複数のＶＮＦのそれぞれをＶＮＦ毎に複数のＣＰＵコア２２１〜２２３に割り当てる。つまり、制御部２２０は、ＶＮＩＣを、ＶＮＩＣ単位でポーリングスレッドに割り当てるのではなく、ＶＮＦ単位で割り当てる。これにより、制御部２２０は、同じＶＮＦに属する複数のＶＮＩＣを同一のＣＰＵコア（ポーリングスレッド）に割り当てる第１機能を果たす。
【００７６】
このとき、本実施形態では、ＶＮＩＣの作成時に、作成対象のＶＮＩＣをどのＶＮＦで使用するかを示すＶＮＦ番号（第１識別情報）が追加される。そして、作成対象のＶＮＩＣ（インタフェース名／種別）とＶＮＦ（ＶＮＦ番号）とが、紐付けられた形で、インタフェース情報テーブル２１１（図１３参照）やインタフェース情報構造体２１２（図１４参照）において登録管理される。ＶＮＩＣのパケット処理を行なうポーリングスレッドを選択する際、制御部２２０は、インタフェース情報構造体２１２を参照することで、同一のＶＮＦに属するＶＮＩＣは、全て同じポーリングスレッドに割り当てられる。
【００７７】
また、制御部２２０は、上述のごとく決定された重み付け値を用いて、ポーリングスレッドごとに当該ポーリングスレッドの最大パケット処理性能を超えないように、ポーリングスレッドにＶＮＩＣを割り当てる。その際、制御部２２０は、後述するごとく、現在のポーリングスレッドの割当状況を取得し、空きのあるポーリングスレッドを決定する。そして、処理量の多い（重み付け値の大きい）ＶＮＦから順に、ＣＰＵコア（ポーリングスレッドの動作環境）の処理能力を超えない範囲で、ＶＮＦをＣＰＵコアに割り当てる。これにより、制御部２２０は、ＶＮＦの性能に応じてポーリングスレッドの処理性能を超えないようにポーリングスレッドを適切に選択する第２機能を果たす。
【００７８】
制御部２２０は、上述した第２機能を果たす際、さらに、以下のような機能を果たす。
【００７９】
制御部２２０は、新たに複数のＣＰＵコア２２１〜２２３のいずれかに割り当てる仮想インタフェースを含むＶＮＩＣを含むＶＮＦ（以下、対象ＶＮＦという場合がある）を複数のＣＰＵコア２２１〜２２３のいずれかに割り当てる際、対象ＶＮＦに係るＶＮＦ番号（第１識別情報）が、インタフェース情報構造体２１２に登録済みか否かを判断する。ＶＮＦ番号が登録済みである場合、制御部２２０は、対象ＶＮＦを割り当てられた一のＣＰＵコアのコアＩＤ（第２識別情報）を取得しインタフェース情報構造体２１２に登録する（図１４参照）。そして、制御部２２０は、取得したコアＩＤに対応する一のＣＰＵコアに、対象ＶＮＦの新たなＶＮＩＣを割り当てる。
【００８０】
一方、ＶＮＦ番号がインタフェース情報構造体２１２に未登録である場合、制御部２２０は、複数のＣＰＵコア２２１〜２２３のそれぞれに割り当てられたＶＮＦ毎の重み付け値の合計値を算出する。そして、制御部２２０は、各ＣＰＵコアについて算出した合計値と、対象ＶＮＦについての重み付け値と、に基づき、対象ＶＮＦを割り当て可能なＣＰＵコアを決定する。
【００８１】
このとき、制御部２２０は、複数のＣＰＵコアを前記合計値の大きい順にソートする。そして、制御部２２０は、ソート後の順に、ソートした複数のＣＰＵコア２２１〜２２３の空き割合を示す値と対象ＶＮＦについての重み付け値とを比較することで、対象ＶＮＦを割り当て可能なＣＰＵコアを決定する。
【００８２】
対象ＶＮＦを割り当て可能なＣＰＵコアを決定できない場合、制御部２２０は、複数のＣＰＵコア２２１〜２２３に既に割り当てられた複数のＶＮＦ、及び対象ＶＮＦを、各ＶＮＦについての重み付け値の大きい順にソートする。そして、制御部２２０は、ソートした複数のＶＮＦ及び対象ＶＮＦを、ソート後の順に、ＶＮＦ毎に複数のＣＰＵコア２２１〜２２３に再度割り当てる。なお、各ＶＮＦについての重み付け値は、ＶＮＦ毎の最大パケット処理性能の割合を示す値及び対象ＶＮＦの最大パケット処理性能の割合を示す値である。
【００８３】
〔４〕本実施形態の動作
次に、上述した本実施形態としての情報処理システム（ＮＦＶシステム）１０及びＰＣサーバ２０の動作について、図９〜図１６を参照しながら説明する。まず、図９に示すブロック図（処理Ｐ１１〜Ｐ１８）を参照しながら、図８に示す本実施形態のＮＦＶシステム１０及びＰＣサーバ２０の動作について概略的に説明する。なお、図９に示すＮＦＶシステム１０では、図８に示す例と異なり、ＶＮＦ１及びＶＮＦ３はそれぞれ３つのＶＮＩＣを有し、ＶＮＦ２は２つのＶＮＩＣを有している。
【００８４】
Controller APLが処理Ｐ１１〜Ｐ１８を実行する前に、１ＣＰＵコアあたりのポーリングスレッドの最大パケット処理性能（性能値）と、ＶＮＦごとの最大パケット処理性能（性能値）とが測定され保存される。
【００８５】
処理Ｐ１１：  端末装置３０において、Controller APLが、事前に測定保存されたＶＮＦごとの性能値とポーリングスレッドの性能値とに基づき、上記（１）式を用いて、ＶＮＦごとの重み付け値を決定する。
【００８６】
処理Ｐ１２：  Controller APLが、提供者からの指示に従い、新たに追加するＮＩＣのインタフェース名／種別とともに、当該ＮＩＣの属するＶＮＦを特定するＶＮＦ番号と、当該ＶＮＦの重み付け値とを指定して、ＰＣサーバ２０のＤＢ（記憶部２１）へ通知する。インタフェース名は、例えば、ＶＮＩＣ１〜ＶＮＩＣ６，ＰＮＩＣ１，ＰＮＩＣ２である。種別は、例えば、ＮＩＣがＶＮＩＣであるかＰＮＩＣであるかを示す情報である。種別としては、仮想／物理以外のインタフェース種別を示す情報が含まれてもよい。
【００８７】
処理Ｐ１３：  ＤＢは、Controller APLからインタフェース名／種別、ＶＮＦ番号、重み付け値の通知を受けると、受領したインタフェース名／種別、ＶＮＦ番号、重み付け値を、図１３に示すように、インタフェース（ＮＩＣ）ごとに、ＤＢ上のインタフェース情報テーブル２１１へ登録する（ＤＢプロセス）。なお、ＶＮＦ番号は、インタフェース（ＮＩＣ）とＶＮＦとの関係情報に相当する。
【００８８】
処理Ｐ１４：  ＤＢにインタフェース名／種別、ＶＮＦ番号、重み付け値が登録されると、ＤＢから内部ＳＷプロセス（Internal SW Process）へ、新たな情報が登録された旨が通知される。ＤＢから当該通知を受けた内部ＳＷプロセスは、ＤＢから、インタフェース名／種別、ＶＮＦ番号、重み付け値を取得し、図１４に示すように、インタフェース（ＮＩＣ）ごとに、内部ＳＷプロセス用のメモリ領域（記憶部２１）におけるインタフェース情報構造体２１２へ登録する。この時点で、当該インタフェース（ＮＩＣ）のパケット処理を担当するＣＰＵコア（ポーリングスレッド）は未だ決定されていないため、当該インタフェース（ＮＩＣ）に対応するＣＰＵコアのコアＩＤ欄は空欄になっている。なお、当該コアＩＤは、ポーリングスレッド（ＣＰＵコア）とインタフェース（ＮＩＣ）とのマッピング情報に相当する。
【００８９】
処理Ｐ１５：  ここで、図１〜図７を参照しながら上述した関連技術では、インタフェース（ＶＮＩＣ）が各ポーリングスレッドにランダムに割り当てられる。これに対し、本実施形態のＰＣサーバ２０では、制御部（ＣＰＵコア）２２０が、ＣＰＵコアの固定割当機能や、空きＣＰＵコア取得機能や、ＶＮＦをＶＮＦ単位で同一ＣＰＵコアに割り当てる機能などを用いて、ＶＮＩＣを割り当てるポーリングスレッドを決定する。つまり、制御部２２０は、インタフェース（ＶＮＩＣ）の重み付け値と、処理性能に空きのあるＣＰＵコア（空きＣＰＵコア）とから、適切なポーリングスレッドを選択し、選択したポーリングスレッドにインタフェース（ＶＮＩＣ）を割り当てる。そして、選択したポーリングスレッド（ＣＰＵコア）を特定するコアＩＤが、インタフェース情報構造体２１２に登録される。当該処理Ｐ１５においては、より詳細に、以下に説明する処理Ｐ１５−１〜処理Ｐ１５−５が実行される。
【００９０】
処理Ｐ１５−１：  新たに複数のＣＰＵコア２２１〜２２３のいずれかに割り当てる仮想インタフェースを含むＶＮＩＣを含むＶＮＦ（対象ＶＮＦ）を複数のＣＰＵコア２２１〜２２３のいずれかに割り当てる際、制御部２２０は、インタフェース情報構造体２１２を参照し、対象ＶＮＦに係るＶＮＦ番号がインタフェース情報構造体２１２に登録済みか否かを判断する。ＶＮＦ番号が登録済みである場合、制御部２２０は、対象ＶＮＦを割り当てられた一のＣＰＵコアのコアＩＤを取得し、処理Ｐ１５−５へ移行する。
【００９１】
処理Ｐ１５−２：  一方、ＶＮＦ番号がインタフェース情報構造体２１２に未登録である場合、制御部２２０は、複数のＣＰＵコア２２１〜２２３（複数のポーリングスレッド）のそれぞれに割り当てられたＶＮＦ毎の重み付け値の合計値を算出する。
【００９２】
処理Ｐ１５−３：  制御部２２０は、複数のＣＰＵコア２２１〜２２３（Polling thread1〜Polling thread3）を、処理Ｐ１５−２で算出した合計値の大きい順にソートする。そして、制御部２２０は、ソート後の順に、ソートした複数のＣＰＵコア２２１〜２２３の空き割合を示す値と対象ＶＮＦについての重み付け値とを比較することで、対象ＶＮＦを割り当て可能（挿入可能）なＣＰＵコア（ポーリングスレッド）を決定する。挿入可能なポーリングスレッドを決定することができた場合、制御部２２０は、処理Ｐ１５−５へ移行する。
【００９３】
処理Ｐ１５−４：  対象ＶＮＦを挿入可能なポーリングスレッドを決定できない場合、制御部２２０は、複数のＣＰＵコア２２１〜２２３に既に割り当てられた複数のＶＮＦ、及び対象ＶＮＦを、各ＶＮＦについての重み付け値の大きい順にソートする。そして、制御部２２０は、ソートした複数のＶＮＦ及び対象ＶＮＦを、ソート後の順に、ＶＮＦ毎に複数のＣＰＵコア２２１〜２２３に再度割り当て、全インタフェース（ＮＩＣ）のパケット処理を担当するＣＰＵコアのコアＩＤを再設定する。
【００９４】
処理Ｐ１５−５：  制御部２２０は、処理Ｐ１５−１で取得したコアＩＤ、または、処理Ｐ１５−３で決定されたＣＰＵコアのコアＩＤ、または、処理Ｐ１５−４で再設定されたコアＩＤを、インタフェース情報構造体２１２に登録する。
【００９５】
処理Ｐ１６：  内部ＳＷプロセス（制御部２２０）は、ポーリングスレッド（Polling thread1〜Polling thread3）を起動する。
【００９６】
処理Ｐ１７：  内部ＳＷプロセス（制御部２２０）は、ポーリングスレッドのコアＩＤをポーリングスレッドの起動順序に従って決定する。
【００９７】
処理Ｐ１８：  内部ＳＷプロセス（制御部２２０）は、インタフェース情報構造体２１２を参照し、ポーリングスレッドのコアＩＤとインタフェース（ＶＮＩＣ）のコアＩＤとが一致したインタフェースを、当該コアＩＤのポーリングスレッド（ＣＰＵコア）に割り当てる。
【００９８】
この後、各ポーリングスレッド（各ＣＰＵコア２２１〜２２３）が、動作を開始し、割り当てられたインタフェース（ＶＮＩＣ）のパケットを処理する。
【００９９】
ついで、図１０及び図１１に示すフローチャート（ステップＳ１０１〜Ｓ１０７；Ｓ２０１〜Ｓ２０７；Ｓ３０１〜Ｓ３１７；Ｓ４０１〜Ｓ４０７）に従って、図８や図９に示すＮＦＶシステム１０の動作について、より詳細に説明する。
【０１００】
なお、ステップＳ１０１〜Ｓ１０７の処理は、ＮＦＶサービス提供者による指示に従う端末装置３０（Controller APL）の動作に対応する処理である。ステップＳ２０１〜Ｓ２０７の処理はＤＢプロセスの動作に対応する処理である。ステップＳ３０１〜Ｓ３１７及びＳ４０１〜Ｓ４０７の処理は、内部ＳＷプロセス（制御部２２０）の動作に対応する処理であり、特に、ステップＳ４０１〜Ｓ４０７の処理は、各ポーリングスレッド（ＣＰＵコア２２１〜２２３）の動作に対応する処理である。
【０１０１】
ＮＦＶサービス提供者は、Controller APLを実行する端末装置３０において、新たに追加するＶＮＦの種類を選択する（図１０のステップＳ１０１）。また、提供者は、端末装置３０において、当該ＶＮＦへ割り当てるリソース、例えばＶＭ／ＶＮＦの処理性能を選択する（図１０のステップＳ１０２）。さらに、提供者は、端末装置３０において、ＶＮＦで作成するＶＮＩＣの数を決定する（図１０のステップＳ１０３）。
【０１０２】
また、端末装置３０において、事前に測定保存されたＶＮＦごとの性能値とポーリングスレッドの性能値とに基づき、上記（１）式を用いて、ＶＮＦごとの重み付け値が決定される（図１０のステップＳ１０４）。ステップＳ１０４の処理は、図９の処理Ｐ１１に対応する。
【０１０３】
そして、提供者は、端末装置３０において、各ＮＩＣのインタフェース名と、各ＮＩＣのインタフェース種別と、当該ＮＩＣの属するＶＮＦを特定するＶＮＦ番号と、当該ＶＮＦの重み付け値とを指定して、ＰＣサーバ２０のＤＢ（記憶部２１）へ通知する（図１０のステップＳ１０５）。ステップＳ１０５の処理は、図９の処理Ｐ１２に対応する。
【０１０４】
ＰＣサーバ２０のＤＢプロセスは、起動後（図１０のステップＳ２０１）、Controller APLからの通知を受けると、受領したインタフェース名をＤＢ上のインタフェース情報テーブル２１１へ登録する（図１０のステップＳ２０２；図１３参照）。同様に、ＤＢプロセスは、受領したインタフェース種別をＤＢ上のインタフェース情報テーブル２１１へ登録する（図１０のステップＳ２０３；図１３参照）。さらに、ＤＢプロセスは、受領したＶＮＦ番号をＤＢ上のインタフェース情報テーブル２１１へ登録するとともに（図１０のステップＳ２０４；図１３参照）、受領した重み付け値をＤＢ上のインタフェース情報テーブル２１１へ登録する（図１０のステップＳ２０５；図１３参照）。ステップＳ２０２〜Ｓ２０５の処理は、図９の処理Ｐ１３に対応する。
【０１０５】
一方、ＰＣサーバ２０の内部ＳＷプロセスは、起動されると（図１０のステップＳ３０１）、ＣＰＵコアの数分のポーリングスレッドを自動的に作成し（図１０のステップＳ３０２）、作成されたポーリングスレッドが自動的に起動される（図１０のステップＳ４０１）。ＣＰＵコアの数は所定パラメータによって予め与えられる。
【０１０６】
この後、ＰＣサーバ２０の内部ＳＷプロセス（制御部２２０）は、インタフェース名／種別やＶＮＦ番号や重み付け値のＤＢへの登録完了通知をＤＢから通知されると、ＤＢから、インタフェース名／種別やＶＮＦ番号や重み付け値を取得する。そして、ＰＣサーバ２０の内部ＳＷプロセスは、インタフェース名をインタフェース情報構造体２１２へ登録し（図１０のステップＳ３０３；図１４参照）、インタフェース種別をインタフェース情報構造体２１２へ登録する（図１０のステップＳ３０４；図１４参照）。同様に、内部ＳＷプロセスは、ＶＮＦ番号をインタフェース情報構造体２１２へ登録し（図１０のステップＳ３０５；図１４参照）、重み付け値をインタフェース情報構造体２１２へ登録する（図１０のステップＳ３０６；図１４参照）。ステップＳ３０３〜Ｓ３０６の処理は、図９の処理Ｐ１４に対応する。
【０１０７】
インタフェース情報構造体２１２への登録を完了すると、内部ＳＷプロセス（制御部２２０）は、インタフェース情報構造体２１２を参照し、対象ＶＮＦに係るＶＮＦ番号がインタフェース情報構造体２１２に存在する（登録済み）か否かを判断する（図１１のステップＳ３０７）。ＶＮＦ番号が存在する場合（ステップＳ３０７のＹＥＳルート）、制御部２２０は、対象ＶＮＦを割り当てられた一のＣＰＵコアのコアＩＤ、つまり対象ＶＮＦのインタフェース（ＶＮＩＣ）のＣＰＵコアＩＤを取得し（図１１のステップＳ３０８）、ステップＳ３１３の処理へ移行する。ステップＳ３０７及びＳ３０８の処理は、前述した処理１５−１に対応する。
【０１０８】
一方、ＶＮＦ番号がインタフェース情報構造体２１２に未登録である場合、制御部２２０は、複数のポーリングスレッドのそれぞれに割り当てられた現在のＶＮＦ毎の重み付け値の合計値を算出取得する（図１１のステップＳ３０９）。ステップＳ３０９の処理は、前述した処理Ｐ１５−２に対応する。
【０１０９】
この後、制御部２２０は、Polling thread1〜Polling thread3を、ステップＳ３０９で算出した合計値の大きい順にソートする。そして、制御部２２０は、ソート後の順に、ソートした複数のＣＰＵコア２２１〜２２３の空き割合を示す値と対象ＶＮＦ（追加するＶＮＦ）についての重み付け値とを比較することで、対象ＶＮＦを挿入可能なポーリングスレッドを決定取得する（図１１のステップＳ３１０）。挿入可能なポーリングスレッドを決定することができた場合、つまり挿入可能なポーリングスレッドが有る場合（図１１のステップＳ３１１のＹＥＳルート）、制御部２２０は、ステップＳ３１３の処理へ移行する。ステップＳ３１０及びＳ３１１の処理は、前述した処理Ｐ１５−３に対応する。
【０１１０】
対象ＶＮＦを挿入可能なポーリングスレッドを決定できない場合、つまり挿入可能なポーリングスレッドが無い場合（図１１のステップＳ３１１のＮＯルート）、制御部２２０は、複数のＣＰＵコア２２１〜２２３に既に割り当てられた複数のＶＮＦ、及び対象ＶＮＦを、各ＶＮＦについての重み付け値の大きい順にソートする。そして、制御部２２０は、ソートした複数のＶＮＦ及び対象ＶＮＦを、ソート後の順に、ＶＮＦ毎に複数のポーリングスレッドに再度割り当て、全インタフェース（ＮＩＣ）のパケット処理を担当するＣＰＵコアのコアＩＤを再設定する（図１１のステップＳ３１２）。ステップＳ３１２の処理は、前述した処理Ｐ１５−４に対応する。
【０１１１】
そして、制御部２２０は、ステップＳ３０８またはＳ３１０またはＳ３１２で取得または決定または再設定されたコアＩＤを、インタフェース情報構造体２１２に登録する（図１１のステップＳ３１３）。
【０１１２】
この後、内部ＳＷプロセスは、インタフェースの作成に成功したか否か、つまりステップＳ３０３〜Ｓ３１４の処理を完了したか否かを判断する（図１１のステップＳ３１４）。インタフェースの作成に失敗した場合（ステップＳ３１４のＮＯルート）、内部ＳＷプロセスは、失敗した旨をＤＢプロセスに通知する（図１１のステップＳ２０６）。さらに、ＤＢプロセスは、失敗した旨を提供者（端末装置３０のController APL）に通知する（図１１のステップＳ１０６）。
【０１１３】
一方、インタフェースの作成に成功した場合（ステップＳ３１４のＹＥＳルート）、内部ＳＷプロセスは、成功した旨をＤＢプロセスに通知する（図１１のステップＳ２０７）。さらに、ＤＢプロセスは、成功した旨を提供者（端末装置３０のController APL）に通知する（図１１のステップＳ１０７）。また、内部ＳＷプロセスは、プロセス起動時に自動的に作成されたポーリングスレッドを全て削除し（図１１のステップＳ３１５）、全てのポーリングスレッドが停止される（図１１のステップＳ４０２）。
【０１１４】
この後、内部ＳＷプロセスは、ＣＰＵコアの数分のポーリングスレッドを作成し（図１１のステップＳ３１６）、作成されたポーリングスレッドが起動される（図１１のステップＳ４０３）。ステップＳ４０３の処理は、図９の処理Ｐ１６に対応する。内部ＳＷプロセスは、ポーリングスレッドの作成後、次のインタフェースが作成されるまで待機する（図１１のステップＳ３１７）。
【０１１５】
また、ポーリングスレッドの起動後、内部ＳＷプロセス（制御部２２０）は、ポーリングスレッドのコアＩＤをポーリングスレッドの起動順序によって決定する（図１１のステップＳ４０４）。ステップＳ４０４の処理は、図９の処理Ｐ１７に対応する。
【０１１６】
この後、内部ＳＷプロセス（制御部２２０）は、インタフェース情報構造体２１２を参照し、ポーリングスレッドのコアＩＤとインタフェース（ＶＮＩＣ）のコアＩＤとが一致したインタフェースを、当該コアＩＤのポーリングスレッド（ＣＰＵコア）に割り当てる（図１１のステップＳ４０５）。ステップＳ４０５の処理は、図９の処理Ｐ１８に対応する。
【０１１７】
そして、各ポーリングスレッド（各ＣＰＵコア２２１〜２２３）が、動作を開始し、割り当てられたインタフェース（ＶＮＩＣ）のパケットを処理する（図１１のステップＳ４０６）。各ポーリングスレッドは、パケット処理の完了後、次のインタフェースが作成されるまで待機する（図１１のステップＳ４０７）。
【０１１８】
次に、図１２を参照しながら、図４に示す関連技術の動作一例について、本実施形態の情報処理システム１０を適用した場合の動作について説明する。図１２では、本実施形態の情報処理システム１０によって、ポーリングスレッドとＮＩＣ（インタフェース）とが最適にマッピングされている。
【０１１９】
ここで、図４及び図１２に示す例では、ＶＮＦ１が２つのインタフェース（ポート）ＶＮＩＣ１及びＶＮＩＣ２を有し、ＶＮＦ２が２つのインタフェースＶＮＩＣ３及びＶＮＩＣ４を有し、ＶＮＦ３が２つのインタフェースＶＮＩＣ５及びＶＮＩＣ６を有している。そして、ＶＮＦ１の重み付け値が５０、ＶＮＦ２の重み付け値が５０、ＶＮＦ３の重み付け値が９０であったとする。
【０１２０】
このとき、図４に示す関連技術の動作一例では、ＶＮＩＣまたはＰＮＩＣは、ＮＩＣ単位でポーリングスレッドに対しランダムにマッピングされる。このため、図４に示すように、ＶＮＦ２は、二のPolling thread1及びPolling thread2に跨って割り当てられる。つまり、ＶＮＦ２に属する二のＶＮＩＣ３及びＶＮＩＣ４が、それぞれ、異なる二のPolling thread1及びPolling thread2に割り当てられる。また、図４に示す例では、ＶＮＦ３のパケット処理性能が高いため、Polling thread2で処理しているＶＮＩＣ５及びＶＮＩＣ６のパケット処理割合が増加し、前述したようにPolling thread2においてパケットロスが発生し、ＶＮＦ３の性能が低下してしまう。
【０１２１】
これに対し、本実施形態によれば、ＶＮＩＣまたはＰＮＩＣは、ＮＩＣ単位でポーリングスレッドにマッピングされるのではなく、ＶＮＦ単位でマッピングされる。つまり、同じＶＮＦに属する複数のＶＮＩＣは、同一のポーリングスレッドに割り当てられる（第１機能）。また、本実施形態によれば、ＶＮＦの性能に応じてポーリングスレッドの処理性能（重み付け値１００）を超えないようにポーリングスレッドが適切に選択される（第２機能）。
【０１２２】
したがって、本実施形態によれば、図１２に示すように、Polling thread1には、重み付け値５０のＶＦＮ１（ＶＮＩＣ１＋ＶＮＩＣ２）と、重み付け値５０のＶＦＮ２（ＶＮＩＣ３＋ＶＮＩＣ４）とがマッピングされる。このとき、ＶＦＮ１の重み付け値５０とＶＦＮ２の重み付け値５０との合計値は１００であり、Polling thread1の最大パケット処理性能に対応する重み付け値１００を超えていない。また、図１２に示すように、Polling thread2には、Polling thread2の最大パケット処理性能（重み付け値１００）を超えることなく、重み付け値９０のＶＮＦ３がマッピングされる。
【０１２３】
このように、本実施形態によれば、ＶＮＦごとにパケット処理性能を確保することができ、特定のＶＮＩＣにパケット処理量が偏った場合においてもＶＮＦどうしの性能干渉を防ぐことができる。また、ＶＮＦ単位で最大パケット処理性能を確保することができ、且つ、あるＶＮＦが他のＶＮＦのパケット処理性能に影響を及ぼすのを抑止することができる。
【０１２４】
上述したように、本実施形態によれば、様々なパケット処理性能を有するＶＮＦが、各ＶＮＦの最大パケット処理性能を出すことが可能な情報処理システム１０を構築することができる。その結果、ベストエフォート型ではなく、最大性能を保証した形でＮＶＦサービスを提供することができる。
【０１２５】
また、本実施形態によれば、様々なパケット処理性能を有するＶＮＦが最大パケット処理性能で動作した場合においても、他のＶＮＦのパケット処理性能に影響を与えることがないＮＦＶシステム１０を構築することができる。その結果、ＮＦＶ環境でマルチテナンシーを実現することができ、テナントユーザ間のリソースの独立性が高まる。
【０１２６】
さらに、本実施形態によれば、上述のようにパケット処理をポーリング方式で行なう環境においてＶＮＦのパケット処理性能を確保する仕組みが確立される。また、特定のＮＩＣにパケット処理量が偏った場合においても、他のＮＩＣや他のＶＮＦのパケット処理性能に影響を与えることがない。
【０１２７】
次に、図１３及び図１４を参照しながら、インタフェース情報テーブル２１１及びインタフェース情報構造体２１２について説明する。図１３は、本実施形態におけるインタフェース情報テーブル２１１の一例を示す図である。図１４は、本実施形態におけるインタフェース情報構造体２１２の一例を示す図である。
【０１２８】
ここでも、図１２に示す例と同様、ＶＮＦ１が２つのインタフェース（ポート）ＶＮＩＣ１及びＶＮＩＣ２を有し、ＶＮＦ２が２つのインタフェースＶＮＩＣ３及びＶＮＩＣ４を有し、ＶＮＦ３が２つのインタフェースＶＮＩＣ５及びＶＮＩＣ６を有している。
【０１２９】
そして、図１３及び図１４には、ＶＮＦ１の重み付け値が５０、ＶＮＦ２の重み付け値が５０、ＶＮＦ３の重み付け値が９０であった場合の、インタフェース情報テーブル２１１及びインタフェース情報構造体２１２の登録内容の具体例が示されている。
【０１３０】
特に、図１３においては、上述した処理Ｐ１３（図１０のステップＳ２０２〜Ｓ２０５）によって各種情報を登録されたインタフェース情報テーブル２１１の内容が示されている。また、図１４に示すように、インタフェース情報構造体２１２の内容は、インタフェース情報テーブル２１１にコアＩＤ欄を追加した形式であり、上述した処理Ｐ１４及びＰ１５−５（図１０のステップＳ３０３〜Ｓ３０６及び図１１のステップＳ３１３）によって登録されたものである。
【０１３１】
次に、図１及び図２を参照しながら前述した関連技術に対し、本実施形態の情報処理システム１０を適用した場合の動作について説明する。ここで、図１５及び図１６は、図１及び図２に対応するもので、図１５は、本実施形態の技術を図１に示す情報処理システムに適用した場合の動作の一例を示すブロック図である。図１６は、図１５に示す例における、パケット送受信処理を行なうポーリングスレッドと、ＮＩＣと、ＣＰＵコアとの関係を示す図である。
【０１３２】
図１及び図２に示す関連技術では、ポーリングスレッドがどのポート（ＶＮＩＣ／ＰＮＩＣ）の処理を担当するかをランダムに決定しているため、ポーリングスレッドとポートとは、ＶＮＦの最大処理性能を考慮したマッピング関係になっていない。これに対し、本実施形態の技術を適用すると、図１５に示すように、ポーリングスレッドとポートとは、ＶＮＦの最大処理性能を考慮したマッピング関係になっている。つまり、特定のＶＮＩＣに処理が偏った場合でも他のＶＮＦへ性能影響を与えないように、同じＶＮＦに属するＶＮＩＣは、同じポーリングスレッドで処理されるように配置される。
【０１３３】
ここで、ＶＮＦ１がＶＮＩＣ１及びＶＮＩＣ２を、ＶＮＦ２がＶＮＩＣ３及びＶＮＩＣ４を、ＶＮＦ３がＶＮＩＣ５及びＶＮＩＣ６を有し、ＶＮＦ１の重み付け値が５０、ＶＮＦ２の重み付け値が５０、ＶＮＦ３の重み付け値が９０であったとする。このとき、図１に示すマッピング関係は、本実施形態の技術によって図１５に示すマッピング関係に改善される。つまり、ＶＮＦ１の重み付け値５０とＶＮＦ２の重み付け値５０との合計値は１００であるため、ＶＮＦ１及びＶＮＦ２は一つのポーリングスレッドで処理可能である。また、ＶＮＦ３の重み付け値は９０であるため、ＶＮＦ１またはＶＮＦ２のＶＮＩＣと同じポーリングスレッドでＶＮＦ３を処理ことはできない。その結果、図１５に示すように、Polling thread1が、ＶＮＦ１及びＶＮＦ２の４つのＶＮＩＣつまりＶＮＩＣ１〜ＶＮＩＣ４のパケット送受信処理を行ない、Polling thread2がＶＮＦ３の２つのＶＮＩＣつまりＶＮＩＣ５及びＶＮＩＣ６のパケット送受信処理を行なう。
【０１３４】
また、図２に示すように、図１に示す関連技術では、ＶＮＩＣ１〜ＶＮＩＣ３のパケット送受信処理はＣＰＵ１で実行され、ＶＮＩＣ４〜ＶＮＩＣ６のパケット送受信処理はＣＰＵ２で実行され、ＰＮＩＣ１及びＰＮＩＣ２のパケット送受信処理はＣＰＵ３で実行される。これに対し、図１６に示すように、図１５に示す本実施形態の技術では、ＶＮＩＣ１〜ＶＮＩＣ４のパケット送受信処理はＣＰＵ１で実行され、ＶＮＩＣ５及びＶＮＩＣ６のパケット送受信処理はＣＰＵ２で実行され、ＰＮＩＣ１及びＰＮＩＣ２のパケット送受信処理はＣＰＵ３で実行される。
【０１３５】
〔５〕その他
以上、本発明の好ましい実施形態について詳述したが、本発明は、係る特定の実施形態に限定されるものではなく、本発明の趣旨を逸脱しない範囲内において、種々の変形、変更して実施することができる。
【０１３６】
例えば、上述した実施形態では、情報処理システムが、ポーリング方式を採用するＮＦＶシステムである場合について説明したが、本発明は、これに限定されるものでなく、各種機能を仮想化して提供する情報処理システムであれば、上述した実施形態と同様に適用され、上述した実施形態と同様の作用効果を得ることができる。
また、上述した実施形態では、パケット処理をポーリングで行なう環境でＶＮＦごとにパケット処理性能を確保する場合について説明したが、本発明は、これに限定されるものでなく、パケット処理以外の各種処理にも上述した実施形態と同様に適用され、上述した実施形態と同様の作用効果を得ることができる。
【０１３７】
〔６〕付記
以上の実施形態に関し、さらに以下の付記を開示する。
【０１３８】
（付記１）
それぞれ一以上の仮想インタフェースを有する複数の仮想機能の処理を、複数のプロセッサコアによって実行し、
前記一以上の仮想インタフェースが前記複数のプロセッサコアのうちの一のプロセッサコアに属するように、前記複数の仮想機能を前記仮想機能毎に前記複数のプロセッサコアに割り当てる、
処理を、コンピュータに実行させる、プログラム。
【０１３９】
（付記２）
前記プロセッサコアの処理性能に対する前記仮想機能毎の処理性能の割合を示す値に基づき、前記プロセッサコアの処理性能を超えない範囲で、前記複数の仮想機能を前記仮想機能毎に前記複数のプロセッサコアに割り当てる、
処理を、前記コンピュータに実行させる、付記１に記載のプログラム。
【０１４０】
（付記３）
新たに前記複数のプロセッサコアのうちの一のプロセッサコアに割り当てる仮想インタフェースを含む仮想機能を前記複数のプロセッサコアのうちの一のプロセッサコアに割り当てる際、前記仮想機能に係る第１識別情報が登録済みか否かを判断し、
前記第１識別情報が登録済みである場合、前記仮想機能を割り当てられた前記一のプロセッサコアの第２識別情報を取得し、
取得した第２識別情報に対応する前記一のプロセッサコアに、前記仮想機能の前記新たな仮想インタフェースを割り当てる、
処理を、前記コンピュータに実行させる、付記２に記載のプログラム。
【０１４１】
（付記４）
前記第１識別情報が未登録である場合、前記複数のプロセッサコアのそれぞれに割り当てられた前記仮想機能毎の処理性能の割合を示す値の合計値を算出し、
前記複数のプロセッサコアのそれぞれについて算出した合計値と、前記プロセッサコアの処理性能に対する前記仮想機能の処理性能の割合を示す値と、に基づき、前記仮想機能を割り当て可能なプロセッサコアを決定する、
処理を、前記コンピュータに実行させる、付記３に記載のプログラム。
【０１４２】
（付記５）
前記複数のプロセッサコアを前記合計値の大きい順にソートし、
ソート後の順に、ソートした前記複数のプロセッサコアの空き割合を示す値と前記仮想機能の処理性能の割合を示す値とを比較することで、前記仮想機能を割り当て可能なプロセッサコアを決定する、
処理を、前記コンピュータに実行させる、付記４に記載のプログラム。
【０１４３】
（付記６）
前記仮想機能を割り当て可能なプロセッサコアを決定できない場合、前記複数のプロセッサコアに既に割り当てられた前記複数の仮想機能、及び前記仮想機能を、前記仮想機能毎の処理性能の割合を示す値及び前記仮想機能の処理性能の割合を示す値の大きい順にソートし、
ソートした前記複数の仮想機能及び前記仮想機能を、ソート後の順に、前記仮想機能毎に前記複数のプロセッサコアに再度割り当てる、
処理を、前記コンピュータに実行させる、付記４または付記５に記載のプログラム。
【０１４４】
（付記７）
それぞれ一以上の仮想インタフェースを有する複数の仮想機能の処理を、複数のプロセッサコアによって実行する処理部と、
前記処理部を制御する制御部と、を備え、
前記制御部は、
前記一以上の仮想インタフェースが前記複数のプロセッサコアのうちの一のプロセッサコアに属するように、前記複数の仮想機能を前記仮想機能毎に前記複数のプロセッサコアに割り当てる、情報処理装置。
【０１４５】
（付記８）
前記制御部は、
前記プロセッサコアの処理性能に対する前記仮想機能毎の処理性能の割合を示す値に基づき、前記プロセッサコアの処理性能を超えない範囲で、前記複数の仮想機能を前記仮想機能毎に前記複数のプロセッサコアに割り当てる、付記７に記載の情報処理装置。
【０１４６】
（付記９）
前記制御部は、
新たに前記複数のプロセッサコアのうちの一のプロセッサコアに割り当てる仮想インタフェースを含む仮想機能を前記複数のプロセッサコアのうちの一のプロセッサコアに割り当てる際、前記仮想機能に係る第１識別情報が登録済みか否かを判断し、
前記第１識別情報が登録済みである場合、前記仮想機能を割り当てられた前記一のプロセッサコアの第２識別情報を取得し、
取得した第２識別情報に対応する前記一のプロセッサコアに、前記仮想機能の前記新たな仮想インタフェースを割り当てる、付記８に記載の情報処理装置。
【０１４７】
（付記１０）
前記制御部は、
前記第１識別情報が未登録である場合、前記複数のプロセッサコアのそれぞれに割り当てられた前記仮想機能毎の処理性能の割合を示す値の合計値を算出し、
前記複数のプロセッサコアのそれぞれについて算出した合計値と、前記プロセッサコアの処理性能に対する前記仮想機能の処理性能の割合を示す値と、に基づき、前記仮想機能を割り当て可能なプロセッサコアを決定する、付記９に記載の情報処理装置。
【０１４８】
（付記１１）
前記制御部は、
前記複数のプロセッサコアを前記合計値の大きい順にソートし、
前記ソート順に、ソートした前記複数のプロセッサコアの空き割合を示す値と前記仮想機能の処理性能の割合を示す値とを比較することで、前記仮想機能を割り当て可能なプロセッサコアを決定する、付記１０に記載の情報処理装置。
【０１４９】
（付記１２）
前記制御部は、
前記仮想機能を割り当て可能なプロセッサコアを決定できない場合、前記複数のプロセッサコアに既に割り当てられた前記複数の仮想機能、及び前記仮想機能を、前記仮想機能毎の処理性能の割合を示す値及び前記仮想機能の処理性能の割合を示す値の大きい順にソートし、
ソートした前記複数の仮想機能及び前記仮想機能を、ソート後の順に、前記仮想機能毎に前記複数のプロセッサコアに再度割り当てる、付記１０または付記１１に記載の情報処理装置。
【０１５０】
（付記１３）
情報処理装置と、
前記情報処理装置に対するアクセスを行なう端末装置と、を備え、
前記情報処理装置は、
それぞれ一以上の仮想インタフェースを有する複数の仮想機能の処理を、複数のプロセッサコアによって実行する処理部と、
前記端末装置からの指示に応じて、前記処理部を制御する制御部と、を備え、
前記制御部は、
前記一以上の仮想インタフェースが前記複数のプロセッサコアのうちの一のプロセッサコアに属するように、前記複数の仮想機能のそれぞれを前記仮想機能毎に前記複数のプロセッサコアに割り当てる、情報処理システム。
【０１５１】
（付記１４）
前記制御部は、
前記プロセッサコアの処理性能に対する前記仮想機能毎の処理性能の割合を示す値に基づき、前記プロセッサコアの処理性能を超えない範囲で、前記複数の仮想機能を前記仮想機能毎に前記複数のプロセッサコアに割り当てる、付記１３に記載の情報処理システム。
【０１５２】
（付記１５）
それぞれ一以上の仮想インタフェースを有する複数の仮想機能の処理を、複数のプロセッサコアによって実行し、
前記一以上の仮想インタフェースが前記複数のプロセッサコアのうちの一のプロセッサコアに属するように、前記複数の仮想機能を前記仮想機能毎に前記複数のプロセッサコアに割り当てる、情報処理方法。
【０１５３】
（付記１６）
前記プロセッサコアの処理性能に対する前記仮想機能毎の処理性能の割合を示す値に基づき、前記プロセッサコアの処理性能を超えない範囲で、前記複数の仮想機能を前記仮想機能毎に前記複数のプロセッサコアに割り当てる、付記１５に記載の情報処理方法。
【０１５４】
（付記１７）
新たに前記複数のプロセッサコアのうちの一のプロセッサコアに割り当てる仮想インタフェースを含む仮想機能を前記複数のプロセッサコアのうちの一のプロセッサコアに割り当てる際、前記仮想機能に係る第１識別情報が登録済みか否かを判断し、
前記第１識別情報が登録済みである場合、前記仮想機能を割り当てられた前記一のプロセッサコアの第２識別情報を取得し、
取得した第２識別情報に対応する前記一のプロセッサコアに、前記仮想機能の前記新たな仮想インタフェースを割り当てる、付記１６に記載の情報処理方法。
【０１５５】
（付記１８）
前記第１識別情報が未登録である場合、前記複数のプロセッサコアのそれぞれに割り当てられた前記仮想機能毎の処理性能の割合を示す値の合計値を算出し、
前記複数のプロセッサコアのそれぞれについて算出した合計値と、前記プロセッサコアの処理性能に対する前記仮想機能の処理性能の割合を示す値と、に基づき、前記仮想機能を割り当て可能なプロセッサコアを決定する、付記１７に記載の情報処理方法。
【０１５６】
（付記１９）
前記複数のプロセッサコアを前記合計値の大きい順にソートし、
ソート後の順に、ソートした前記複数のプロセッサコアの空き割合を示す値と前記仮想機能の処理性能の割合を示す値とを比較することで、前記仮想機能を割り当て可能なプロセッサコアを決定する、付記１８に記載の情報処理方法。
【０１５７】
（付記２０）
前記仮想機能を割り当て可能なプロセッサコアを決定できない場合、前記複数のプロセッサコアに既に割り当てられた前記複数の仮想機能、及び前記仮想機能を、前記仮想機能毎の処理性能の割合を示す値及び前記仮想機能の処理性能の割合を示す値の大きい順にソートし、
ソートした前記複数の仮想機能及び前記仮想機能を、ソート後の順に、前記仮想機能毎に前記複数のプロセッサコアに再度割り当てる、付記１８または付記１９に記載の情報処理方法。
【符号の説明】
【０１５８】
１０    情報処理システム（ＮＦＶシステム）
２０    ＰＣサーバ（情報処理装置，コンピュータ）
２１    記憶部
２１０    プログラム
２１１    インタフェース情報テーブル
２１２    インタフェース情報構造体
２２    マルチコアプロセッサ（ＣＰＵ，処理部）
２２０    ＣＰＵコア（制御部，プロセッサコア，ＣＰＵ０）
２２１〜２２３    ＣＰＵコア（ポーリングスレッド，プロセッサコア，ＣＰＵ１〜ＣＰＵ３）
３０    端末装置
ＰＮＩＣ１，ＰＮＩＣ２    物理ネットワークインタフェースカード（物理インタフェース）
ＶＮＩＣ１〜ＶＮＩＣ６    仮想ネットワークインタフェースカード（仮想インタフェース）
ＶＮＦ１〜ＶＮＦ３    仮想ネットワーク機能（仮想機能）
ＲＸ    受信ポート
ＴＸ    送信ポート
【図１】
2017207834.tif 000003
【図２】
2017207834.tif 000004
【図３】
2017207834.tif 000005
【図４】
2017207834.tif 000006
【図５】
2017207834.tif 000007
【図６】
2017207834.tif 000008
【図７】
2017207834.tif 000009
【図８】
2017207834.tif 000010
【図９】
2017207834.tif 000011
【図１０】
2017207834.tif 000012
【図１１】
2017207834.tif 000013
【図１２】
2017207834.tif 000014
【図１３】
2017207834.tif 000015
【図１４】
2017207834.tif 000016
【図１５】
2017207834.tif 000017
【図１６】
2017207834.tif 000018