(57)【要約】【課題】マルチコアＣＰＵ（Central Processing Unit）を搭載したルータにおいて、複数のＣＰＵコアが同時に送信処理を行っている環境で帯域制御を実現する。【解決手段】ルータの有する複数の通信Ｉ／Ｆ部の各々に対してマルチコアＣＰＵのＣＰＵコアを一つずつ対応づける。各ＣＰＵコアには、自身に対応づけられた通信Ｉ／Ｆ部を介して受信したデータブロックの送信先に対応する通信Ｉ／Ｆ部をルーティングテーブルを参照して特定し、その通信Ｉ／Ｆ部の送信キューに当該データブロックを書き込むとともにその書き込みが完了するまでの間、他のＣＰＵコアによる当該送信キューへの書き込みを禁止する第１の処理と、自身に対応付けられた通信Ｉ／Ｆ部の送信キューに格納されているデータブロックを帯域制御を行いつつ送出する第２の処理と、を実行させる【選択図】図１
2014179838.tif 000002
【特許請求の範囲】
【請求項１】
複数の通信インタフェース部と、
通信インタフェース毎に設けられた送信キューと、
複数の通信インタフェース部の各々に一つずつ対応付けられた複数のＣＰＵコアと、を備え、
複数のＣＰＵコアの各々は、
送信先アドレスを含むヘッダを付与されたデータブロックの送信を行う際に、その送信先に対応する通信インタフェース部を特定し、当該通信インタフェース部の送信キューに当該データブロックを書き込むとともにその書き込みが完了するまでの間、他のＣＰＵコアによる当該送信キューへのデータブロックの書き込みを禁止する第１の処理と、
自身に対応付けられた通信インタフェース部の送信キューに格納されているデータブロックを、ＱｏＳを行いつつ当該通信インタフェース部を介して送信する第２の処理と、を実行する
ことを特徴とする通信装置。
【請求項２】
各ＣＰＵコアの処理負荷を計測し、処理負荷の軽いＣＰＵコアほど、多くの通信インタフェースに対応付けられるようにＣＰＵコアと通信インタフェース部との対応付けを変更する変更手段をさらに有することを特徴とする請求項１に記載の通信装置。
【請求項３】
前記変更手段は、通信インタフェース部を介して行われる通信のトラフィックを通信インタフェース毎に計測し、処理負荷の重いＣＰＵコアほど、トラフィックの少ない通信インタフェースに対応付けられるようにＣＰＵコアと通信インタフェース部との対応付けを変更することを特徴とする請求項２に記載の通信装置。
【請求項４】
送信先アドレスを含むヘッダを付与されたデータブロックの送信先アドレスと複数の通信インタフェース部の各々とを対応付ける情報の書き込まれたテーブルが記憶された記憶部を備え、
前記複数のＣＰＵコアの各々は、前記複数の通信インタフェース部の何れかを介して受信したデータブロックを送信対象のデータブロックとして前記第１の処理を実行し、前記第１の処理においては、前記テーブルの格納内容を参照して送信対象のデータブロックの送信先に対応する通信インタフェース部を特定することを特徴とする請求項１〜３の何れか１項に記載の通信装置。
【請求項５】
コンピュータに、
送信先アドレスを含むヘッダを付与されたデータブロックの送信を行う際に、当該コンピュータに接続された複数の通信インタフェース部であって、各々に送信キューの設けられた複数の通信インタフェース部のうち、送信対象のデータブロックの送信先に対応する通信インタフェース部を特定し、該当する通信インタフェース部の送信キューに当該データブロックを書き込むとともにその書き込みが完了するまでの間、他のコンピュータによる当該送信キューへのデータブロックの書き込みを禁止する第１の処理と、
自身に対応付けられた通信インタフェース部の送信キューに格納されているデータブロックを、ＱｏＳを行いつつ当該通信インタフェース部を介して送出する第２の処理と、
を実行させることを特徴とするプログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
この発明は、ＱｏＳ（Quality of Service）を行いつつ通信網へデータを送出する技術に関する。
【背景技術】
【０００２】
ＱｏＳとは、データ通信の種類に応じて必要な通信品質が得られるように、パケットなどのデータブロックの送出制御を行う技術のことをいう。ＱｏＳの具体的な実現方法としては、優先制御と帯域制御の２種類が挙げられる。図４は、一般的なＱｏＳの概要を説明するための図である。ＱｏＳでは、送信対象のデータブロックは各々のペイロード部に書き込まれているデータの種類や各々の伝送に用いられる通信プロトコルの種類に応じてクラス分けされ、クラス毎に設けられたキュー（以下、クラス別キュー）に一旦蓄積される。これらクラス別キューに蓄積されたデータブロックは、スケジューラによって読み出され、通信網へと送出される。このクラス別キューからのデータブロックの読み出し制御によって前述した優先制御や帯域制御が実現される。例えば、クラス別キュー毎に優先度を定めておき、各クラス別キューについてそのクラス別キューよりも優先度の高い他のクラス別キューにデータブロックが格納されている間は、そのクラス別キューからのデータブロックを読み出さないようにすることで優先制御が実現される。また、クラス別キュー毎に目標通信レートを定めておき、実際の通信レートが目標通信レートに近似した値となるように各クラス別キューからのデータブロックの読み出しを行うことで帯域制御が実現される。なお、通信レートとは、単位時間当たりのデータ送信量のことをいう。
【０００３】
ＱｏＳは、ルータやスイッチングハブといった中継装置や情報配信サーバなど、通信網へデータを送出する通信装置において行われる。例えば、中継装置においてＱｏＳを行う場合、前述したクラス分けおよび各クラス別キューからのデータブロックの読み出し制御を当該中継装置のメインＣＰＵ（Central Processing Unit）に実行させることが一般的であった。しかし、中継装置が多数の通信網に接続されている場合、各通信網に接続されている通信インタフェース毎にクラス別キュー（以下、１つの通信インタフェース部に対して設けられている複数のクラス別キューを「送信キュー」と総称する）を設け、通信インタフェース毎に送信キューへのデータブロックの書き込みおよび送信キューからのデータブロックの読み出し制御を行う必要がある。このため、中継装置に設けられる通信インタフェースの数や各送信キューを構成するクラス別キューの数によっては、中継装置のメインＣＰＵの処理負荷が過剰に高くなり、スループット（単位時間当たり転送可能なデータ量）が低下する虞がある。このようなスループットの低下を回避するための技術の一例としては、特許文献１に開示の技術が挙げられる。特許文献１に開示の技術では、各送信キューへのデータブロックの書き込みおよび各送信キューからのデータブロックの読み出しを行う専用コントローラをメインＣＰＵとは別個に設けることで、スループットの低下が回避される。
【先行技術文献】
【特許文献】
【０００４】
【特許文献１】特開２０１０−２２６２７５号公報
【発明の概要】
【発明が解決しようとする課題】
【０００５】
特許文献１に開示の技術のように、各送信キューへのデータブロックの書き込みおよび各送信キューからのデータブロックの読み出しを行う専用コントローラを設ける態様では、中継装置のコストが増加し、市場競争力の低下を招くといった問題がある。極端なコスト増加を抑えつつ、スループットの低下を招かないようにするには、中継装置のメインＣＰＵとしてマルチコアＣＰＵを用いることが考えられる。マルチコアＣＰＵとは、複数のＣＰＵコア（演算回路とＬ１キャッシュとを含む半導体集積回路）と、これら複数のＣＰＵコアにより共有されるバスインタフェースやＬ２キャッシュを１つのプロセッサ・パッケージ内に封入して構成されたＣＰＵのことを言う。このようなマルチコアＣＰＵであれば、複数のＣＰＵコアの各々に並列にデータブロックの中継処理（およびこれに伴うキュー制御）を行わせることでスループットの低下を回避することができ、また、メインＣＰＵの他にキュー制御のための専用コントローラを設ける態様に比較してコストの増加を低く抑えることができるからである。
【０００６】
しかしながら、中継装置のメインＣＰＵとしてマルチコアＣＰＵを用いたとしても、期待したほどの効果が得られない場合がある。以下、ＱｏＳとして帯域制御を行う場合を例にとってその理由を説明する。中継装置のメインＣＰＵとしてマルチコアＣＰＵを用い、各ＣＰＵコアにデータブロックの中継制御およびこれに伴うキュー制御を独立に行わる場合、一つの通信インタフェース部を介して複数のＣＰＵコアが同時にパケットを送信しようとする、といった事象が発生し得る。帯域制御を行う場合、通信インタフェース毎に実際の通信レートを計算する必要があり、実際の通信レートの計算が正しく行われるようにするためには、一つの通信インタフェース部に対して複数のＣＰＵコアが同時に送信処理等を行わないよう排他制御する必要がある。このため、中継装置のメインＣＰＵとしてマルチコアＣＰＵを用いたとしても、ＱｏＳを行う場合には、排他制御による処理待ちが多発し、マルチコアＣＰＵ本来の性能を発揮できなくなってしまうのである。
【０００７】
本発明は上記課題に鑑みて為されたものであり、マルチコアＣＰＵを搭載した通信装置において、複数のＣＰＵコアが同時に送信処理を行っている環境でスループットの低下を抑えつつＱｏＳを実現する技術を提供することを目的とする。
【課題を解決するための手段】
【０００８】
上記課題を解決するために本発明は、複数の通信インタフェース部と、通信インタフェース毎に設けられた送信キューと、複数の通信インタフェース部の各々に一つずつ対応付けられた複数のＣＰＵコアと、を備え、複数のＣＰＵコアの各々は、送信先アドレスを含むヘッダを付与されたデータブロックの送信を行う際に、その送信先に対応する通信インタフェース部を特定し、当該通信インタフェース部の送信キューに当該データブロックを書き込むとともにその書き込みが完了するまでの間、他のＣＰＵコアによる当該送信キューへのデータブロックの書き込みを禁止する第１の処理と、自身に対応付けられた通信インタフェース部の送信キューに格納されているデータブロックを、ＱｏＳを行いつつ当該通信インタフェース部を介して送信する第２の処理と、を実行することを特徴とする通信装置、を提供する。
【０００９】
本発明の通信装置では、送信キューへのデータブロックの書き込み（以下、「エンキュー」と呼ぶ）の間だけ他のＣＰＵコアによる当該送信キューへのエンキューが禁止され（すなわち、排他制御が実行され）、送信キューからのデータブロックの読み出し（以下、「デキュー」と呼ぶ）の際には排他制御は行われない。このため、送信キューへのエンキューおよびデキューの両方で排他制御を行う場合に比較して排他制御による待ち時間が少なくなり、排他制御を行うことに起因するスループットの低下を抑えることができる。加えて、本発明の通信装置では、各通信インタフェース部に対応づけられたＣＰＵコアのみがその通信インタフェース部を用いたデータの送信を行うため、通信レートの計算や優先制御に支障が生じることもない。つまり、本発明によれば、マルチコアＣＰＵを搭載した通信装置において、複数のＣＰＵコアが同時に送信処理を行っている環境でスループットの低下を抑えつつ、ＱｏＳを行うことが可能になる。なお、本発明の別の態様としてはコンピュータ（ＣＰＵコア）に上記第１の処理と第２の処理とを実行させるプログラムを提供する態様も考えられる。
【００１０】
より好ましい態様としては、各ＣＰＵコアの処理負荷（例えば、単位時間当たりのＣＰＵ利用率の平均値や駆動タスク数の平均値など）を計測し、処理負荷の軽いＣＰＵコアほど、多くの通信インタフェースに対応付けられるようにＣＰＵコアと通信インタフェース部との対応付けを変更する変更手段を上記通信装置に設ける態様が考えられ、さらに好ましい態様としては、通信インタフェース部を介して行われる通信のトラフィック（例えば、単位時間当たりの各クラスのデータ送信量の総和）を通信インタフェース毎に計測し、処理負荷の重いＣＰＵコアほど、トラフィックの少ない通信インタフェースに対応付けられるようにＣＰＵコアと通信インタフェース部との対応付けを変更する処理を上記変更手段に実行させる態様が考えられる。これらの態様によれば、各ＣＰＵコアの処理負荷に大きなバラツキが生じることを回避することができる。
【００１１】
上記通信装置の具体例としては、ルータやスイッチングハブなどの中継装置、クライアントから送信されたリクエストメッセージに応じて情報を配信する情報配信装置（情報配信サーバ）が挙げられる。上記通信装置が中継装置である場合、受信したデータブロックの送信先と複数の通信インタフェース部とを対応付ける情報の書き込まれたテーブルの記憶された記憶部を備えていることが一般的である。例えば、上記通信装置がルータであれば上記テーブルは所謂ルーティングテーブルであり、上記通信装置がスイッチングハブであれば上記テーブルは所謂ＭＡＣ（Media Access Control）アドレステーブルである。そこで、上記通信装置が中継装置である場合には、複数の通信インタフェース部の何れかを介して受信したデータブロックを送信対象のデータブロックとして第１の処理を実行し、この第１の処理においては、上記テーブルの格納内容を参照して送信対象のデータブロックの送信先に対応する通信インタフェース部を特定する処理を各ＣＰＵコアに実行させるようにすれば良い。また、上記通信装置が情報配信装置である場合には、リクエストメッセージを受信した通信インタフェース部を送信対象のデータブロック（すなわち、リクエストメッセージにより送信を要求されたデータがペイロード部に書き込まれたデータブロック）の送信先に対応する通信インタフェース部として第１の処理を各ＣＰＵコアに実行させるようにすれば良い。
【００１２】
なお、各ＣＰＵコアの処理能力が充分高い場合には、送信キューからのデキューの際にも排他制御を実行させる（すなわち、前記第２の処理において、自身に対応付けられた通信インタフェース部の送信キューに格納されているデータブロックを読み出す際に、その読み出しが完了するまでの間、他のＣＰＵコアによる当該送信キューへのデータパケットの書き込みを禁止する処理を各ＣＰＵコアに実行させる）ことも考えられる。各ＣＰＵコアの処理能力が充分に高ければ、送信キューへのエンキューに要する処理時間および送信キューからのデキューに要する処理時間が充分に短くなり、送信キューへのエンキューおよびデキューの両方で排他制御を行ったとしても、スループットが大幅に低下することはないからである。しかしながら、送信キューへのエンキューおよび送信キューからのデキューの両方で排他制御を行ったとしても、送信キューへのエンキューの際にのみ排他制御を行う態様に比較して特段の効果を奏する訳ではなく、また、送信キューからのデキューの際の排他待ちの分だけスループットが低下することは避けられない。したがって、送信キューへのエンキューの際にのみ排他制御を行う態様であれば充分である。
【図面の簡単な説明】
【００１３】
【図１】この発明の一実施形態の中継装置１０の構成例を示す図である。
【図２】キューの実装態様を説明するための図である。
【図３】中継装置１０の動作を説明するための図である。
【図４】ＱｏＳを説明するための図である。
【発明を実施するための形態】
【００１４】
以下、図面を参照しつつ、本発明の実施形態について説明する。
図１は、本発明の通信装置の一実施形態の中継装置１０の構成例を示す図である。
中継装置１０は、所謂ルータである。ルータとは、ＯＳＩ（Open Systems Interconnection）参照モデルにおける第３層（すなわち、ネットワーク層）の通信プロトコルにしたがって送受信されるデータブロック（すなわち、パケット）の中継制御を行う通信装置のことをいう。図１に示すように、中継装置１０は、制御部１００、通信インタフェース（以下、「Ｉ／Ｆ」と略記）部１２０−ｎ（ｎ＝１〜４）、記憶部１３０、およびこれら構成要素間のデータ授受を仲介するバス１４０を含んでいる。
【００１５】
制御部１００は、中継装置１０のメインＣＰＵである。制御部１００は、所謂マルチコアＣＰＵであり、キャッシュメモリ（図１では、図示略）を共有する複数のＣＰＵコアを有している。図１に示すように、本実施形態の制御部１００は、４つのＣＰＵコア（ＣＰＵコア１１０−１、１１０−２、１１０−３および１１０−４）を有している。ＣＰＵコア１１０−ｎ（ｎ＝１〜４）の各々は、記憶部１３０に記憶されている中継制御プログラム１３４ｃを実行することによりパケットの中継制御を行う。
【００１６】
通信Ｉ／Ｆ部１２０−ｎ（ｎ＝１〜４）の各々は例えばＮＩＣ（Network Interface Card）であり、各々異なる通信網に接続されている。通信Ｉ／Ｆ部１２０−ｎ（ｎ＝１〜４）の各々には、その接続先の通信網から受信したパケットがその受信順に格納されるキュー（以下、受信キュー）と、同通信網へ送出するパケットがクラス毎に格納される送信キュー（前述したように、複数のクラス別キューからなる送信キュー）と、が対応付けられている。さらに、本実施形態では、通信Ｉ／Ｆ部１２０−ｎにはＣＰＵコア１１０−ｎが対応付けられている。このように、通信Ｉ／Ｆ部１２０−ｎに対してＣＰＵコア１１０−ｎを対応付けた理由については後に明らかにする。
【００１７】
記憶部１３０は、図１に示すように、揮発性記憶部１３２と不揮発性記憶部１３４とを含んでいる。揮発性記憶部１３２は例えばＲＡＭ（Random Access Memory）であり、中継制御プログラム１３４ｃを実行する際のワークエリアとしてＣＰＵコア１１０−ｎ（ｎ＝１〜４）の各々によって使用される。また、揮発性記憶部１３２は、通信Ｉ／Ｆ部１２０−ｎの受信キュー１３２ａ−ｎとして機能するとともに、通信Ｉ／Ｆ部１２０−ｎの送信キュー１３２ｂ−ｎとして機能する。なお、送信キュー１３２ｂ−ｎを構成する各クラス別キューおよび受信キュー１３２ａ−ｎの具体的な実現態様としては、図２に示す構造の単方向リストを用い、エンキューの際には当該リストの末尾にエントリ（データと、後続のデータの格納先アドレスを示すポインタからなるデータセット）を追加し、デキューの際には先頭のエントリからデータを読み出し、当該先頭のエントリをリストから削除する態様が考えられる。
【００１８】
不揮発性記憶部１３４は例えばフラッシュメモリやハードディスクで構成されている。不揮発性記憶部１３４には、送信先管理テーブル１３４ａ、クラス分類テーブル１３４ｂ、および中継制御プログラム１３４ｃが予め格納されている。送信先管理テーブル１３４ａは、所謂ルーティングテーブルであり、通信Ｉ／Ｆ部１２０−ｎ（ｎ＝１〜４）の各々を示す識別子に対応付けて通信Ｉ／Ｆ部１２０−ｎから送出するべきデータパケットを示す情報（送信先アドレス、または送信先アドレスの範囲を示す情報）が予め格納されている。クラス分類テーブル１３４ｂは、通信Ｉ／Ｆ部１２０−ｎを介して受信したパケットをクラス分けするためのテーブルであり、クラス分けの指標（例えば、プロトコル種別）と分類先のクラスとの関係を示す情報が予め格納されている。
【００１９】
中継制御プログラム１３４ｃは、送信先アドレスに基づくパケットの中継制御をＣＰＵコア１１０−ｎ（ｎ＝１〜４）の各々に実行させるためのプログラムである。この中継制御プログラム１３４ｃは、中継装置１０の電源（図１では図示略）が投入されたことを契機として制御部１００によって揮発性記憶部１３２に読み出される。同様に、送信先管理テーブル１３４ａおよびクラス分類テーブル１３４ｂも中継装置１０の電源投入を契機として制御部１１０によって揮発性記憶部１３２に読み出される。揮発性記憶部１３２へ読み出された中継制御プログラム１３４ｃはＣＰＵコア１１０−ｎ（ｎ＝１〜４）の各々によって別個独立に実行される。中継制御プログラム１３４ｃにしたがって作動しているＣＰＵコア１１０−ｎは、送信キュー１３２ｂ−ｎへのエンキュー処理および送信キュー１３２ｂ−ｎからのデキュー処理の２種類を実行する。
【００２０】
エンキュー処理は、予め定められた時間間隔で周期的に、或いはＣＰＵコア１１０−ｎに対応付けられた通信Ｉ／Ｆ部１２０−ｎの受信キュー１３２ａ−ｎにパケットが書き込まれる毎に実行される処理である。このエンキュー処理では、ＣＰＵコア１１０−ｎは、受信キュー１３２ａ−ｎに格納されているパケットのうちのもっとも古いもの（図２に示すリスト構造における先頭のエントリに格納されているパケット）を読み出し、送信先管理テーブル１３４ａの格納内容を参照して当該パケットの送出を行うべき通信Ｉ／Ｆ部１２０−ｋを特定するとともに、クラス分類テーブル１３４ｂを参照して当該パケットのクラスを判別する。次いで、ＣＰＵコア１１０−ｎは、当該パケットを通信Ｉ／Ｆ部１２０−ｋの送信キュー１３２ｂ−ｋの該当するクラス別キュー書き込むとともに、その書き込みが完了するまでの間、他のＣＰＵコア１１０−ｍ（ｍ≠ｎ）による当該クラス別キューへのパケットの書き込みを禁止する排他制御を行う。
【００２１】
例えば、図３（Ａ）に示すように、ＣＰＵコア１１０−１が送信キュー１３２ｂ−３のあるクラス別キューにパケットＰ１をエンキューしているときに、ＣＰＵコア１１０−２が同じクラス別キューにパケットＰ２をエンキューしようとした場合、ＣＰＵコア１１０−１のエンキュー処理が終了するまでＣＰＵコア１１０−２の動作はブロックされる。これは、図３（Ｂ）に示すように、１つのクラス別キューの末尾に２つのパケットが登録されるといった不整合が発生しないようにするためである。なお、パケットのクラスの判別およびクラス分けについては既存のＱｏＳにおけるものを利用すれば良く、排他制御についてはセマフォなどの周知技術を用いるようにすれば良い。
【００２２】
デキュー処理も、予め定められた時間間隔で周期的に、或いはＣＰＵコア１１０−ｎに対応付けられた通信Ｉ／Ｆ部１２０−ｎの送信キュー１３２ｂ−ｎにパケットが書き込まれる毎に実行される処理である。このデキュー処理では、ＣＰＵコア１１０−ｎは、送信キュー１３２ｂ−ｎを構成する各クラス別キューに格納されているパケットを、実際の通信レートが目標通信レートに近似した値となるように読み出し速度の調整を行いつつ読み出し、通信Ｉ／Ｆ部１２０−ｎを介して送信（すなわち、帯域制御を行いつつ送信）する。
【００２３】
ここで注目すべき点は、本実施形態の中継装置１０では、送信キュー１３２ｂ−ｋのクラス別キューへのパケットの書き込みの間だけ他のＣＰＵコア１１０−ｍ（ｍ≠ｎ）による当該クラス別キューへのパケットの書き込みを禁止する排他制御がＣＰＵ１１０−ｎによって実行され、送信キュー１３２ｂ−ｎからのパケットのデキューの際には排他制御は行われない、という点である。本実施形態では、各通信Ｉ／Ｆ部１２０−ｎに対応づけられたＣＰＵコア１１０−ｎのみがその通信Ｉ／Ｆ部１２０の送信キュー１３２ｂ−ｎからのパケットのデキューを行う。このため、１つのクラス別キューに対して複数のＣＰＵコア１１０−ｎが同時にデキュー処理を行うことはなく、デキュー処理において排他制御を行う必要はないからである。
【００２４】
このように、本実施形態の中継装置１０では、送信キューへのエンキューを行う場合にのみ排他制御が行われる。ＱｏＳにおいて最も負荷が高い処理はデキュー時の送信レート計算だが、本実施形態では当該処理を行う際に排他制御を行う必要がないため、スループット低下を抑えることができる。加えて、本実施形態では、各通信Ｉ／Ｆ部１２０−ｎに対応づけられたＣＰＵコア１１０−ｎのみがその通信Ｉ／Ｆ部１２０−ｎを用いたデータの送信を行うため、実際の通信レートの計算に支障が生じることもない。
【００２５】
なお、マルチユーザ環境におけるデータベースの排他制御では、データベースへのデータの書き込みが行われている間、他者による当該データの更新を禁止する排他制御が行われることは勿論、当該データの読み出しも禁止されることが一般的である。これは、所謂ダーティリード（更新処理中のデータがコミットされる前に読み出され、その後更新処理のロールバックが発生すると、結果的に誤ったデータがユーザに提示されること）の発生を回避するためである。一般的なデータベースにおける排他制御と対比すると、本実施形態のエンキュー処理において、そのエンキュー処理にてパケットの書き込みを行っている送信キューからのデキューを禁止していない点が何らかの問題を生じさせることはないかといった疑問が生じるかも知れない。
【００２６】
しかし、本実施形態のエンキュー処理では、送信キュー（より正確には送信キューに含まれる何れかのクラス別キュー）の末尾へのパケットの追加が行われるのであって送信キューに格納済のデータの更新が行われる訳ではない。そして、データベースアクセスとは異なり、エンキュー処理のロールバックが行われることも無い。このため、本実施形態では、エンキュー処理にてパケットの書き込みを行っている送信キューからのデキューを禁止しなくても、ダーティリードのような問題は発生しないのである。また、本実施形態のエンキュー処理では、パケットの書き込み先となるクラス別キューは１つであるから、排他制御の際に特段の工夫をしなくても、所謂デッドロックが発生することも無い。
【００２７】
以上説明したように本実施形態によれば、制御部１００としてマルチコアＣＰＵを搭載した中継装置１０において各ＣＰＵコア１１０−ｎが同時に送信処理を行っている環境で、スループットの低下を抑えつつ、帯域制御を行うことが可能になる。
【００２８】
以上本発明の一実施形態について説明したが、この実施形態に以下の変形を加えても勿論良い。
（１）上記実施形態では、ＱｏＳとして帯域制御を行う場合について説明したが、帯域制御に換えて優先制御を行っても良く、また、帯域制御と優先制御とを組み合わせて行っても良い。また、上記実施形態では、エンキュー処理における排他制御をクラス別キュー単位で行った。これは、排他制御における粒度を極力小さくし、排他待ちが多発しないようにするためである。しかし、エンキュー処理における排他制御を、送信キュー単位で行っても良い。ここで、送信キュー単位で排他制御を行うとは、送信キューを構成する複数のクラス別キューのうちの何れかに対して、あるＣＰＵコアがパケットの書き込みを行っている間は、パケットの書き込み先のクラス別キューが異なる場合であっても他のＣＰＵコアによるパケットの書き込みを禁止することを言う。エンキュー処理における排他制御を送信キュー単位で行うようにすると、上記実施形態に比較して排他待ちが多発する可能性が高くなるが、排他制御が簡略化され、排他制御に要するリソース（例えば、セマフォを利用して排他制御を行う場合にはセマフォ値を格納するための記憶容量など）が少なくて済むなどの利点もある。
【００２９】
（２）上記実施形態の中継装置１０は、４個の通信Ｉ／Ｆ部と各通信Ｉ／Ｆ部に１つずつ対応付けられた４個のＣＰＵコアとを有していたが、中継装置１０が有する通信Ｉ／Ｆ部の数は、２または３個、或いは５個以上であっても良く、また、中継装置１０が有するＣＰＵコアの数も、２または３個、或いは５個以上であっても良い。また、上記実施形態では、通信Ｉ／Ｆ部１２０−ｎとＣＰＵコア１１０−ｎとが一対一に対応付けられていたが、通信Ｉ／Ｆ部１２０−ｎから見て一つのＣＰＵコア１１０−ｎが対応付けられている態様であれば良く、一つのＣＰＵコア１１０−ｎが複数の通信Ｉ／Ｆ部１２０−ｎに対応づけられていても良い。一つの送信キューからのデキューを予め定められた一つのＣＰＵコア１１０−ｎが常に担当する態様であれば、通信レートの計算に支障は生じず、デキュー処理において排他制御を行わなくても特段の問題は生じないからである。したがって、中継装置１０に設けられている通信Ｉ／Ｆ部の数とＣＰＵコアの数は同じである必要はなく、前者よりも後者の方が少なくても良い。また、上記実施形態では、各ＣＰＵコア１１０−ｎに、自身に対応付けられた通信Ｉ／Ｆ部１２０の受信キュー１３２ａ−ｎに格納されたパケットを対象としてエンキュー処理を行わせたが、他の受信キューに格納されたパケットを対象としてエンキュー処理を行わせても勿論良い。すなわち、エンキュー処理においてパケットの読み出し先となる受信キューと同エンキュー処理においてパケットの書き込み先となる送信キューとが、各々異なる通信Ｉ／Ｆ部に対応付けられたものであっても良い。
【００３０】
（３）上記実施形態では、通信Ｉ／Ｆ部１２０−ｎとＣＰＵコア１１０−ｎの対応関係が固定されていたが、各ＣＰＵコア１１０−ｎの処理負荷を計測し、処理負荷の軽いＣＰＵコア１１０−ｎほど、多くの通信Ｉ／Ｆ部１２０−ｎに対応付けられるようにＣＰＵコア１１０−ｎと通信Ｉ／Ｆ部１２０−ｎとの対応付けを動的に変更する処理を実行する変更手段（例えば、制御部１００とは別個の制御部）を中継装置１０に設けても良く、また、制御部１００が有する複数のＣＰＵコア１１０−ｎの何れを上記変更手段として機能させても良い。また、通信Ｉ／Ｆ部１２０−ｎを介して行われる通信のトラフィックを通信Ｉ／Ｆ部１２０−ｎ毎に計測する処理と、処理負荷の重いＣＰＵコアほど、トラフィックの少ない通信Ｉ／Ｆ部１２０に対応付けられるようにＣＰＵコア１１０−ｎと通信Ｉ／Ｆ部１２０−ｎとの対応付けを動的に変更する処理を上記変更手段に実行させるようにしても良い。
【００３１】
（４）上記実施形態では、複数のＣＰＵコアを有するマルチコアＣＰＵをメインＣＰＵ（制御部１００）として有するルータへの適用例を説明した。しかし、各々１つのＣＰＵコアを有するシングルコアＣＰＵを複数有し、これら複数のシングコアＣＰＵをメインＣＰＵとして機能させるルータに本発明を適用しても勿論良い。また、ルータではなく、スイッチングハブ（すなわち、ＯＳＩ参照モデルにおける第２層（データリンク層）においてデータ通信を中継する中継装置）に本発明を適用しても勿論良い。この場合、データリンク層におけるデータの送受信単位であるフレームが、エンキュー処理およびデキュー処理における処理単位のデータブロックとなる。また、ルータやスイッチングハブなどの中継装置ではなく、通信網を介してクライアント装置から送信されてくるリクエストメッセージに応じて各種情報の配信を行う情報配信装置に本発明を適用しても良い。
【００３２】
要は、複数の通信インタフェース部と、通信インタフェース毎に設けられた送信キューと、複数の通信インタフェース部の各々に一つずつ対応付けられた複数のＣＰＵコアと、を備えた通信装置であれば、複数のＣＰＵコアの各々に、送信先アドレスを含むヘッダを付与されたデータブロックの送信を行う際に、その送信先に対応する通信インタフェース部を特定し、当該通信インタフェース部の送信キューに当該データブロックを書き込むとともにその書き込みが完了するまでの間、他のＣＰＵコアによる当該送信キューへのデータブロックの書き込みを禁止する第１の処理と、自身に対応付けられた通信インタフェース部の送信キューに格納されているデータブロックを、ＱｏＳを行いつつ当該通信インタフェース部を介して送信する第２の処理と、を実行させることで、上記実施形態と同一の効果が奏される。
【００３３】
（５）上記実施形態では、ＣＰＵコア１１０−ｎ（ｎ＝１〜４）の各々に本発明の特徴を顕著に示す中継制御処理（送信キュー１３２ｂ−ｎへのエンキュー処理および送信キュー１３２ｂ−ｎからのデキュー処理）を実行させる中継制御プログラム１３４ｃが不揮発性記憶部１３４に予め格納されていた。しかし、中継制御プログラム１３４ｃを例えばＣＤ−ＲＯＭ（Compact Disk-Read Only Memory）などのコンピュータ読み取り可能な記録媒体に書き込んで配布しても良く、また、インターネットなどの電気通信回線経由のダウンロードにより配布しても良い。
【符号の説明】
【００３４】
１０…中継装置、１００…制御部、１１０−ｎ（ｎ＝１〜４）…ＣＰＵコア、１２０−ｎ（ｎ＝１〜４）…通信Ｉ／Ｆ部、１３０…記憶部、１３２…揮発性記憶部、１３２ａ−ｎ（ｎ＝１〜４）…受信キュー、１３２ｂ−ｎ…送信キュー、１３４…不揮発性記憶部、１３４ａ…送信先管理テーブル、１３４ｂ…クラス分類テーブル、１３４ｃ…中継制御プログラム、１４０…バス。
【図１】
2014179838.tif 000003
【図２】
2014179838.tif 000004
【図３】
2014179838.tif 000005
【図４】
2014179838.tif 000006