(57)【要約】      （修正有）【課題】データが送信されるタイミングの最悪遅延を保証しながら、データを効率的に転送制御する。【解決手段】スイッチ装置は、その入力処理部に選択部と判定部とを備える。選択部は、第１データの送信タイミングが、第１データの優先度毎に定められた送信スケジュール情報と同期されたタスクスケジュール情報に基づいて、第１データの転送処理を実行する第１タスクを選択し、選択された第１タスクにより実行される転送処理の終了時刻を計算する。判定部は、終了時刻と現在時刻とから、第１データの転送処理が実行可能か否かを判定する。選択部により選択された第１タスクは、転送処理が実行可能な場合、送信スケジュール情報に基づいて、第１データの転送処理を実行する。【選択図】図９
2020048045.tif 000002
【特許請求の範囲】
【請求項１】
第１データの送信タイミングが、前記第１データの優先度毎に定められた送信スケジュール情報と同期されたタスクスケジュール情報に基づいて、前記第１データの転送処理を実行する第１タスクを選択し、選択された第１タスクにより実行される転送処理の終了時刻を計算する選択部と、
前記終了時刻と現在時刻とから、前記第１データの転送処理が実行可能か否かを判定する判定部と、を備え、
前記選択部により選択された第１タスクは、転送処理が実行可能な場合、前記送信スケジュール情報に基づいて、前記第１データの転送処理を実行する、
スイッチ装置。
【請求項２】
前記送信スケジュール情報と、前記タスクスケジュール情報とは、前記第１タスクの選択制御の開始時刻を、前記送信スケジュール情報に基づく送信タイミング制御の開始時刻と合せることにより同期される、
請求項１に記載のスイッチ装置。
【請求項３】
前記第１タスクが参照するバッファへ前記第１データが投入されたことを検知すると、前記第１タスクに対する割り込みが有効である場合に、前記判定部へ通知する割込み処理部を更に備え、
前記選択部は、前記第１タスクを選択する際に、選択される前記第１タスクに対する割り込みを無効化し、
前記選択部により選択された第１タスクは、転送処理中に、転送可能な前記第１データが前記バッファに存在しない場合に、割り込みを有効にして転送処理を中断し、
前記判定部は、前記割込み処理部から通知を受信した場合、割り込みが有効にされていた前記第１タスクによって前記第１データの転送処理が実行可能か否かを判定する、
請求項１に記載のスイッチ装置。
【請求項４】
前記選択部は、前記第１タスクの転送処理が中断された場合、第２データの転送処理を実行する第２タスクを選択し、
前記選択部により選択された第２タスクは、割り込みが有効にされていた前記第１タスク、又は、新たな第１タスクが前記選択部により選択されるまでの間、前記第２データの転送処理を実行する、
請求項３に記載のスイッチ装置。
【請求項５】
前記第１タスクは、ノンプリエンプティブタスクであり、
前記第２タスクは、プリエンプティブタスクである、
請求項４に記載のスイッチ装置。
【請求項６】
前記送信スケジュール情報は、ＩＥＥＥ８０２．１Ｑｂｖのゲートコントロールリストである、
請求項５に記載のスイッチ装置。
【請求項７】
前記選択部により選択された第１タスクにより転送可能な前記第１データが前記バッファに存在せず、かつ、前記終了時刻までに前記ゲートコントロールリストの状態が変化する場合、前記ゲートコントロールリストの状態が変化する時刻に前記割込み処理部に通知するアラーム部を更に備え、
前記割込み処理部は、前記アラーム部から通知を受信した場合、前記判定部へ通知し、
前記判定部は、前記割込み処理部から通知を受信した場合、割り込みが有効にされていた前記第１タスクによって前記第１データの転送処理が実行可能か否かを判定する、
請求項６に記載のスイッチ装置。
【請求項８】
前記第１タスク毎に、前記第１タスクを実行するプロセッサが割り当てられ、
転送される前記第１データを保持するバッファは、前記プロセッサ及び転送先の組み合わせ毎に割り当てられており、
前記第１データの入力を受け付け、前記第１データを転送する第１タスクは、前記第１データの入力を受け付け、前記第１データを転送する第１タスクが実行されるプロセッサに割り当てられたバッファに前記第１データと、前記第１データの書き込み時刻とを書き込み、
転送された前記第１データを、転送先へ出力する第１タスクは、前記プロセッサ及び前記転送先の組み合わせ毎に割り当てられバッファから、前記書き込み時刻が古い順に前記第１データを読み出す、
請求項１に記載のスイッチ装置。
【請求項９】
選択部が、第１データの送信タイミングが、前記第１データの優先度毎に定められた送信スケジュール情報と同期されたタスクスケジュール情報に基づいて、前記第１データの転送処理を実行する第１タスクを選択し、選択された第１タスクにより実行される転送処理の終了時刻を計算するステップと、
判定部が、前記終了時刻と現在時刻とから、前記第１データの転送処理が実行可能か否かを判定するステップと、
前記選択部により選択された第１タスクが、転送処理が実行可能な場合、前記送信スケジュール情報に基づいて、前記第１データの転送処理を実行するステップと、
を含むスイッチング方法。
【請求項１０】
コンピュータを、
第１データの送信タイミングが、前記第１データの優先度毎に定められた送信スケジュール情報と同期されたタスクスケジュール情報に基づいて、前記第１データの転送処理を実行する第１タスクを選択し、選択された第１タスクにより実行される転送処理の終了時刻を計算する選択部と、
前記終了時刻と現在時刻とから、前記第１データの転送処理が実行可能か否かを判定する判定部として機能させ、
前記選択部により選択された第１タスクは、転送処理が実行可能な場合、前記送信スケジュール情報に基づいて、前記第１データの転送処理を実行する、
プログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明の実施形態はスイッチ装置、スイッチング方法及びプログラムに関する。
【背景技術】
【０００２】
工場内の各産業用機器間を接続する産業用ネットワーク、及び、車内の制御コントローラを接続する車載ネットワークなどの分野では、高いリアルタイム性が求められる。近年、産業用ネットワーク及び車載ネットワークなどでは、イーサネット（登録商標）などの通信規格の利用が進んでおり、様々なリアルタイムイーサネット規格が提案されている。
【先行技術文献】
【特許文献】
【０００３】
【特許文献１】特開２００１―２１６１７０号公報
【特許文献２】特開２００６―２６８０９２号公報
【特許文献３】特開２００７―３２３２５６号公報
【特許文献４】特開平６―１９８２３号公報
【発明の概要】
【発明が解決しようとする課題】
【０００４】
しかしながら、従来の技術では、データが送信されるタイミングの最悪遅延を保証しながら、データを効率的に転送制御することが困難だった。
【課題を解決するための手段】
【０００５】
実施形態のスイッチ装置は、選択部と判定部とを備える。選択部は、第１データの送信タイミングが、前記第１データの優先度毎に定められた送信スケジュール情報と同期されたタスクスケジュール情報に基づいて、前記第１データの転送処理を実行する第１タスクを選択し、選択された第１タスクにより実行される転送処理の終了時刻を計算する。判定部は、前記終了時刻と現在時刻とから、前記第１データの転送処理が実行可能か否かを判定する。前記選択部により選択された第１タスクは、転送処理が実行可能な場合、前記送信スケジュール情報に基づいて、前記第１データの転送処理を実行する。
【図面の簡単な説明】
【０００６】
【図１】仮想マシン間でデータを転送するスイッチ装置の例を示す概略図。
【図２】ＩＥＥＥ８０２．１Ｑｂｖに対応したスイッチ装置、及び、スイッチ装置に接続される通信端末の例を示す概略図。
【図３】ネットワークのＩ／Ｏ処理を専用仮想マシンで実現した場合のＩＥＥＥ８０２．１Ｑｂｖに対応したスイッチ装置の例を示す概略図。
【図４】第１実施形態のスイッチ装置の入出力処理の例を示す概略図。
【図５】第１実施形態のタスクの実行イメージを示す図。
【図６】第１実施形態のスイッチ装置のタスクの制御例を示す図。
【図７Ａ】第１実施形態のタスクスケジュール情報の例１を示す図。
【図７Ｂ】第１実施形態のタスクスケジュール情報の例２を示す図。
【図８】第１実施形態のタスクの起動処理の例を示すフローチャート。
【図９】第１実施形態の入力処理部の機能構成の例を示す図。
【図１０】第１実施形態のデータの入力処理の例を示すフローチャート。
【図１１】第１実施形態の出力処理部の機能構成の例を示す図。
【図１２】第１実施形態のデータの出力処理の例を示すフローチャート。
【図１３】第１実施形態のタスクの実行イメージを示す図。
【図１４】第２実施形態の入力処理部の機能構成の例を示す図。
【図１５】第２実施形態の出力処理部の機能構成の例を示す図。
【図１６Ａ】第２実施形態のタスクスケジュール情報の例１を示す図。
【図１６Ｂ】第２実施形態のタスクスケジュール情報の例２を示す図。
【図１７】第２実施形態のタスクの起動処理の例を示すフローチャート。
【図１８】第２実施形態のデータの入力処理の例を示すフローチャート。
【図１９】第２実施形態のデータの出力処理の例を示すフローチャート。
【図２０】第２実施形態のタスクの実行イメージを示す図。
【図２１】第３実施形態の入力処理部の機能構成の例を示す図。
【図２２】第３実施形態の出力処理部の機能構成の例を示す図。
【図２３】第３実施形態の第２アラーム部へ設定する時間を示す図。
【図２４】第３実施形態のタスクの起動処理の例を示すフローチャート。
【図２５】第３実施形態のデータの入力処理の例を示すフローチャート。
【図２６】第３実施形態のデータの出力処理の例を示すフローチャート。
【図２７】第４実施形態のタスクの制御例を示す図である。
【図２８】第４実施形態のタスクの実行イメージを示す図。
【図２９】第４実施形態の入力処理部の機能構成の例を示す図。
【図３０】第４実施形態の出力処理部の機能構成の例を示す図。
【図３１】第１乃至第４実施形態のスイッチ装置のハードウェア構成の例を示す図。
【発明を実施するための形態】
【０００７】
以下に添付図面を参照して、スイッチ装置、スイッチング方法及びプログラムの実施形態を詳細に説明する。
【０００８】
（第１実施形態）
はじめに、高いリアルタイム性が求められる産業用ネットワーク及び車載ネットワークなどの分野で利用されている規格の例について説明する。
【０００９】
例えば、イーサネット（登録商標）上でリアルタイム性を実現する規格として、ＴＳＮ（Ｔｉｍｅ−Ｓｅｎｓｉｔｉｖｅ  Ｎｅｔｗｏｒｋｉｎｇ）の規格化が、ＩＥＥＥ  ８０２．１  ＴＳＮ  Ｔａｓｋで進んでいる。ＴＳＮは複数の規格から構成される。ＴＳＮは、プロオーディオなどで用いられている低遅延性を実現するＡＶＢ（Ａｕｄｉｏ／Ｖｉｄｅｏ  Ｂｒｉｄｇｉｎｇ）を拡張した規格である。ＴＳＮは、産業用ネットワーク及び車載ネットワークなどにも適用できるようにするため、ＡＶＢよりも高いリアルタイム性に加えて、高信頼性の実現を目指す規格である。
【００１０】
ＴＳＮ規格の１つにＩＥＥＥ  ８０２．１Ｑｂｖがある。ＩＥＥＥ  ８０２．１Ｑｂｖは、優先度が異なる複数の送信バッファ（ＩＥＥＥ  ８０２．１Ｑｂｖでは、送信キュー）を事前に設定した送信スケジュール情報（ゲートコントロールリスト）に従って制御することで、優先度ごとにデータ（フレーム）の送信タイミングを厳密に制御することが可能になる。各送信バッファにはデータの送信を許可するゲートを設ける。ゲートが開いている場合（オープン状態）は、データの送信が許可され、閉じている場合（クローズ状態）はデータの送信は禁止される。
【００１１】
ゲートコントロールリストには、一周期分の各ゲートの状態が格納される。ＩＥＥＥ  ８０２．１Ｑｂｖに対応したＮＩＣ（Ｎｅｔｗｏｒｋ  Ｉｎｔｅｒｆａｃｅ  Ｃａｒｄ）などは、現在時刻、ゲートコントロールリスト、及び、ゲートコントロールの開始時刻（基準時刻）などに基づいて、送信が許可された優先度のキューを選択してデータ（フレーム）の送信処理を実施する。このように、ゲートコントロールリストに従って、厳密にデータ送信タイミングを制御することで、優先度が異なるデータ間での送信タイミングの衝突を防ぎ、送信遅延時間及び送信処理時間の揺らぎなどをより小さくすることが可能になる。
【００１２】
次に、産業用システム及び車載システムなどに仮想化技術などのソフトウェア技術を適用する場合の例について説明する。例えば、仮想マシン間を接続するスイッチ（仮想スイッチ）をソフトウェアで実現することが考えられる。
【００１３】
図１は、仮想マシン１３ａ及び１３ｂ間でデータを転送するスイッチ装置１００の例を示す概略図である。図１の例は、ホストプロセッサ１０上で動作する仮想マシン１２によりスイッチ機能を実現する場合を示す。
【００１４】
スイッチ装置１００は、ホストプロセッサ１０、ＮＩＣ３０ａ及び３０ｂを備える。ホストプロセッサ１０は、仮想マシンモニタ１１、仮想マシン１２、１３ａ及び１３ｂを備える。
【００１５】
ホストプロセッサ１０は、スイッチ装置１００を制御する装置である。
【００１６】
ＮＩＣ３０ａ及び３０ｂは、スイッチ装置１００の物理インタフェースである。
【００１７】
仮想マシンモニタ１１は、仮想マシン１２、１３ａ及び１３ｂを制御する。仮想マシン１２、１３ａ及び１３ｂは、仮想マシンモニタ１１上で動作する。
【００１８】
仮想マシン１２は、ソフトウェアスイッチ１４を備える。ソフトウェアスイッチ１４は、ネットワークドライバ１５ａ、ネットワークドライバ１５ｂ、フォワーディング処理部１６、ＦＤＢ（ｆｏｒｗａｒｄｉｎｇ／ｆｉｌｔｅｒｉｎｇ  ｄａｔａｂａｓｅ）１７、バックエンド仮想ネットワークドライバ１８ａ及び１８ｂを備える。
【００１９】
ネットワークドライバ１５ａは、ＮＩＣ３０ａとフォワーディング処理部１６との間の通信を制御する。同様に、ネットワークドライバ１５ｂは、ＮＩＣ３０ｂとフォワーディング処理部１６との間の通信を制御する。
【００２０】
フォワーディング処理部１６は、ＦＤＢ１７を参照して、データ（フレーム）の転送を制御する。
【００２１】
バックエンド仮想ネットワークドライバ１８ａは、仮想マシン１３ａとの間の通信を制御する。同様に、バックエンド仮想ネットワークドライバ１８ｂは、仮想マシン１３ｂとの間の通信を制御する。
【００２２】
仮想マシン１３ａは、フロントエンド仮想ネットワークドライバ１９ａ及びアプリ／スタック２０ａを備える。フロントエンド仮想ネットワークドライバ１９ａは、アプリ／スタック２０ａとソフトウェアスイッチ１４との間の通信を制御する。
【００２３】
同様に、仮想マシン１３ｂは、フロントエンド仮想ネットワークドライバ１９ｂ及びアプリ／スタック２０ｂを備える。フロントエンド仮想ネットワークドライバ１９ｂは、アプリ／スタック２０ｂとソフトウェアスイッチ１４との間の通信を制御する。
【００２４】
次に、上述の図１のように、仮想マシン１３ａ及び１３ｂ間を接続するスイッチ（仮想スイッチ）をソフトウェア（ソフトウェアスイッチ１４）で実現する場合の問題点について説明する。例えば、ソフトウェアは、ハードウェアと違い、実行するタスクの同時実行数に制限があるという問題がある。
【００２５】
一般的に、ハードウェアでは、スイッチに接続される機器の台数（ネットワークポート数）分の転送処理が同時に実行できるように設計される。一方で、ソフトウェアでは、実行するＣＰＵの数でしか同時に処理を実行できない。通常ソフトウェアではタスクやスレッドを並列実行しているが、これはＯＳなどの機能を利用してＣＰＵリソースを時分割で利用しているにすぎない。
【００２６】
リアルタイム性が要求されない一般的なソフトウェアスイッチであれば問題ないが、リアルタイム性が要求されるスイッチでは、ＯＳのタスクスケジューリングやコンテキストスイッチなどによる見積困難な処理時間の揺らぎは大きな問題となる。このため、ソフトウェアスイッチでリアルタイム通信を実現する場合、事前にスケジューリングされたフレームの送信（転送）タイミングに同期して、ソフトウェアスイッチの各タスクを実行する必要がある。
【００２７】
また、キューに格納されたフレームの転送を開始する方法も考慮する必要がある。一般的に、キューに格納されたフレームを転送する方法として、割り込みを利用する方法、及び、ポーリングを利用する方法の２つがある。前者は、キューにフレームが存在する場合にのみ処理を実行するためＣＰＵ利用効率が良いが、割り込み処理のオーバヘッドが発生する。後者は、常にキューを監視してフレーム転送を実施するため、高速なフレーム転送を実現できるが、キューにフレームが存在しない場合もＣＰＵリソースを消費してしまう。
【００２８】
割り込みによる転送、及び、ポーリングによる転送のハイブリッド処理として、Ｌｉｎｕｘ（登録商標）で用いられるＮＡＰＩ（ＮＥＷ  ＡＰＩ）という方式がある。ＮＡＰＩは、キューにフレームが存在する間は、ポーリングで動作し、キューが空になったら割り込み待ち状態に移行する。これにより、ポーリングによる高速なフレーム転送を実現しつつ、キューにフレームが存在しない場合は、ＣＰＵリソースを別の処理（タスク）に割り当てることが可能になる。
【００２９】
しかしながら、リアルタイム通信が必要なネットワークスイッチでは、（ＮＡＰＩも含む）割り込みを起点として転送処理を開始する方法は、どのタイミングで割り込みが発生するかが想定できず、見積困難な処理時間を発生させてしまう。例えば、通常、割り込みに係わる処理は最優先で実行されるため、あるネットワークインタフェースのフレーム転送処理を実施している最中に、別のネットワークインタフェースの割り込みが発生すると、想定外の処理遅延が発生してしまう。
【００３０】
［前提説明１］
第１実施形態で説明するスイッチ装置は、ＩＥＥＥ８０２．１ＱＢｖのような、事前にスケジュールされたタイミングでフレームを送信するネットワークスイッチである。以降は、ＩＥＥＥ８０２．１Ｑｂｖを想定して説明をするが、本実施形態のスイッチ装置はこれに限定されるものではない。
［前提説明２］
図２は、ＩＥＥＥ８０２．１Ｑｂｖに対応したスイッチ装置１００−２、及び、スイッチ装置１００−２に接続される通信端末２００ａ及び２００ｂの例を示す概略図である。スイッチ装置１００−２は、ＴＳＮスイッチである。スイッチ装置１００−２のスイッチ機能は、ハードウェアにより実現されていてもよいし、ソフトウェアにより実現されていてもよい。
【００３１】
スイッチ装置１００−２は、受信処理部１０１ａ、受信処理部１０１ｂ、送信処理部１０２ａ、送信処理部１０２ｂ、フォワーディング処理部１０３、ＦＤＢ１０４、ＧＣＬ１０５ａ及びＧＣＬ１０５ｂを備える。
【００３２】
受信処理部１０１ａは、通信端末２００ａからデータ（フレーム）を受信する。同様に、受信処理部１０１ｂは、通信端末２００ｂからデータを受信する。
【００３３】
送信処理部１０２ａは、ＩＥＥＥ８０２．１ＱｂｖのＧＣＬ１０５ａに従って、どの送信キューのデータ（フレーム）を通信端末２００ａに送信するかを制御する。同様に、送信処理部１０２ｂは、ＩＥＥＥ８０２．１ＱｂｖのＧＣＬ１０５ｂに従って、どの送信キューのデータを通信端末２００ｂに送信するかを制御する。
【００３４】
フォワーディング処理部１０３及びＦＤＢ１０４の説明は、図１と同様なので省略する。
【００３５】
通信端末２００ａは、受信処理部２０１ａ及び送信処理部２０２ａを備える。受信処理部２０１ａは、スイッチ装置１００−２からデータを受信する。送信処理部２０２ａは、ＩＥＥＥ８０２．１ＱｂｖのＧＣＬ２０３ａに従って、どの送信キューのデータ（フレーム）をスイッチ装置１００−２に送信するかを制御する。
【００３６】
通信端末２００ｂは、受信処理部２０１ｂ及び送信処理部２０２ｂを備える。受信処理部２０１ｂ及び送信処理部２０２ｂの説明は、受信処理部２０１ａ及び送信処理部２０２ａと同様なので省略する。
【００３７】
なお、スイッチ装置１００−２に仮想マシンが接続される場合の構成も、上述の図２の構成と同様である。ただし、Ｘｅｎ（登録商標）で用いられるＳｐｌｉｔ  Ｄｒｉｖｅｒ  Ｍｏｄｅｌのように、各仮想マシンのネットワークのＩ／Ｏ処理を分離し、１つの仮想マシン上で処理する図３のような構成も考えられる。
【００３８】
図３はネットワークのＩ／Ｏ処理を専用仮想マシンで実現した場合のＩＥＥＥ８０２．１Ｑｂｖに対応したスイッチ装置１００−３の例を示す概略図である。スイッチ装置１００−３では、スイッチ機能が、ＩＥＥＥ８０２．１Ｑｂｖに対応したソフトウェアスイッチ（仮想ＴＳＮスイッチ）１１０により実現されている。
【００３９】
図３のような構成により、ソフトウェアスイッチ１１０のみがリアルタイム通信のための処理を実行し、他の仮想マシンではＩＥＥＥ８０２．１Ｑｂｖのような送信タイミングの制御をしなくて良いという利点がある。以降は、図３のような構成を想定して、実施形態の説明をするが、本実施形態は図３の構成に限定されるものではない。
【００４０】
図４は第１実施形態のスイッチ装置１００−３の入出力処理の例を示す概略図である。第１実施形態のスイッチ装置１００−３は、仮想マシン１３ａ、仮想マシン１３ｂ及びＮＩＣ３０と接続される。スイッチ装置１００−３は、仮想マシン１３ａ、仮想マシン１３ｂ及びＮＩＣ３０の間でデータ転送処理（フレーム転送処理）を実施する。
【００４１】
ソフトウェアスイッチ１１０は、仮想マシン１３ａ、仮想マシン１３ｂ及びＮＩＣ３０と接続するネットワークポート毎に、入力処理部３０１ａ〜ｃ、出力処理部３０２ａ〜ｃ、入力バッファ３０３ａ〜ｃ、転送バッファ３０４ａ〜ｃ及び出力バッファ３０５ａ〜ｃを備える。
【００４２】
入力処理部３０１ａ〜ｃを区別しない場合、単に入力処理部３０１という。同様に、出力処理部３０２ａ〜ｃを区別しない場合、単に出力処理部３０２という。同様に、入力バッファ３０３ａ〜ｃを区別しない場合、単に入力バッファ３０３という。同様に、転送バッファ３０４ａ〜ｃを区別しない場合、単に転送バッファ３０４という。同様に、出力バッファ３０５ａ〜ｃを区別しない場合、単に出力バッファ３０５という。
【００４３】
なお、図４の入力処理部３０１は、図３の受信処理部１０１及びフォワーディング処理部１０３に対応する。また、図４の出力処理部３０２は、図３の送信処理部１０２に対応する。
【００４４】
入力処理部３０１ａは、入力バッファ３０３ａを介して仮想マシン１３ａからデータ（フレーム）を受信すると、当該データのヘッダ情報を参照して転送先のネットワークポートを決定し、該当する転送バッファ３０４へデータを書き込む。入力処理部３０１ａは、例えば、データの宛先が仮想マシン１３ｂの場合、転送バッファ３０４ｂへデータを書き込む。
【００４５】
出力処理部３０２ａは、転送バッファ３０４ａからデータを取得すると、出力バッファ３０５ａを介して仮想マシン１３ａへデータを出力する。
【００４６】
入力処理部３０１ｂ及び３０１ｃの説明は、入力処理部３０１ａと同様なので省略する。同様に、出力処理部３０２ｂ及び３０２ｃの説明は、出力処理部３０２ａと同様なので省略する。
【００４７】
第１実施形態のスイッチ装置１００−３は、各ネットワークポートの入力処理部３０１及び出力処理部３０２を１つのタスクとし、あらかじめスケジュールされたタイミングで起動する。これにより、コンテキストスイッチなどによる見積困難な処理時間の揺らぎを排除する。
【００４８】
図５は第１実施形態のタスクの実行イメージを示す図である。図５の例は、ソフトウェアスイッチ１１０を動作させるＣＰＵが１つの場合のタスクの実行イメージを示す。また、図５の例は、物理ネットワークの通信速度が１Ｇｂｐｓである場合を示す。
【００４９】
ソフトウェアスイッチ１１０は、各タスクを周期的に実行する。ｂｒ＿ｏｕｔ（ｐｉｆ）は、出力処理部３０２ｃのタスクを示す。ｂｒ＿ｉｎ（ｐｉｆ）は、入力処理部３０１ｃのタスクを示す。ｂｒ＿ｏｕｔ（ｖｉｆ１）は、出力処理部３０２ａのタスクを示す。ｂｒ＿ｉｎ（ｖｉｆ１）は、入力処理部３０１ａのタスクを示す。ｂｒ＿ｏｕｔ（ｖｉｆ２）は、出力処理部３０２ｂのタスクを示す。ｂｒ＿ｉｎ（ｖｉｆ２）は、入力処理部３０１ｂのタスクを示す。
【００５０】
図６は第１実施形態のスイッチ装置１００−３のタスクの制御例を示す図である。
【００５１】
アラーム部３０６は、指定された時間が経過した場合、選択部３０７へ通知する。アラーム部３０６の動作は、一定間隔（設定された時間周期）で通知を繰り返す動作でも良いし、指定された時間が経過したら一度だけ通知を行う動作でも良い。
【００５２】
選択部３０７は、アラーム部３０６の通知によって起動され、タスクスケジュール情報３０８を参照して、起動するタスクを選択する。
【００５３】
タスクスケジュール情報３０８には、タスクの起動タイミングを示す情報が格納される。
【００５４】
図７Ａは第１実施形態のタスクスケジュール情報３０８の例１を示す図である。図７Ａの例は、起動周期（ｔｉｃｋ）が一定（１０００ｎｓ）の場合を示す。すなわち、図７Ａのタスクスケジュール情報３０８の例は、全てのタスクの実行時間が同一である場合を示す。この場合、アラーム部３０６は１０００ｎｓ間隔で起床して、選択部３０７に通知するという動作を繰り返す。
【００５５】
ｂａｓｅ＿ｔｉｍｅ（ＧＣＬ）は、送信スケジュール情報の一例であるＩＥＥＥ８０２．１Ｑｂｖのゲートコントロールリストを使用したゲート制御の開始時刻（基準時刻）を示す。送信スケジュール情報には、データの送信タイミングが、当該データの優先度毎に定められている。
【００５６】
ｎｅｘｔ＿ｔａｓｋ（ＩＤ）は、次に実行されるタスクを示す。
【００５７】
図７Ｂは第１実施形態のタスクスケジュール情報３０８の例２を示す図である。図７Ｂの例は、割り当てられる実行時間がタスク毎に異なる場合を示す。この場合、選択部３０７は、次に起床するまでの時間をその都度、アラーム部３０６へ設定する。
【００５８】
図７Ａ及び図７Ｂの例では、選択部３０７は、ｎｅｘｔ＿ｔａｓｋに指定されたＩＤ＝５のタスク（ｂｒ＿ｏｕｔ（ｖｉｆ２））を選択する。次に、選択部３０７は、ｎｅｘｔ＿ｔａｓｋを更新し、次の起動時に選択するタスクを指定しておく。
【００５９】
最後に、選択部３０７は、タスクの終了時間を算出し、選択したタスクを起動する。タスクの終了時間は、現在時刻にタスクの実行時間（図７Ａの場合はｔｉｃｋの値）を加算した値、基準時刻（ｂａｓｅ＿ｔｉｍｅ）からのタスク実行時間の累積値、これらの値に実行時間の揺らぎを考慮した値などが考えられるが、これらに限定されない。
【００６０】
なお図７Ａ及び図７Ｂの説明では、選択部３０７が、タスクの終了時刻を算出する場合について説明したが、選択部３０７は各タスクにタスクの実行時間（図７Ａの場合はｔｉｃｋの値）を通知し、各タスクが終了時間を計算してもよい。
【００６１】
ここで、タスクスケジュール情報３０８について補足する。図７Ａ及び７Ｂのタスクスケジュール情報３０８には、各タスクを示す情報が実行順に並び、タスクを起動する際の基準時刻（ｂａｓｅ＿ｔｉｍｅ）、次に実行するタスクの情報（ｎｅｘｔ＿ｔａｓｋ）を含むが、これに限定されない。
【００６２】
アラームが初めて起動される時刻は、ｂａｓｅ＿ｔｉｍｅに指定された時刻になる。ここで、第１実施形態では、ｂａｓｅ＿ｔｉｍｅは、例えばデータ（フレーム）の送信スケジュール情報（ＩＥＥＥ８０２．１Ｑｂｖのゲートコントロールで利用される情報）で用いられる基準時刻の値が設定される。
【００６３】
すなわち、送信スケジュール情報と、タスクスケジュール情報３０８とは、タスクの選択制御の開始時刻を、送信スケジュール情報に基づく送信タイミング制御の開始時刻と合せることにより同期される。
【００６４】
なお、データの送信スケジュール情報の基準時刻とは別の値（変数）を、ｂａｓｅ＿ｔｉｍｅとして設ける場合には、タスクスケジュール情報３０８のｂａｓｅ＿ｔｉｍｅと、データの送信スケジュール情報のそれぞれの基準時刻とを同期させる。
【００６５】
図６の説明に戻る。図６の例では、タスクスケジュール情報３０８に含まれるタスクは、入力処理部３０１ａ〜ｃ及び出力処理部３０２ａ〜ｃである。例えば、ＦＤＢ（ｆｏｒｗａｒｄｉｎｇ／ｆｉｌｔｅｒｉｎｇ  ｄａｔａｂａｓｅ）の古いエントリを削除するタスク（図７Ａのｆｄｂ＿ｃｌｅａｎ）、スイッチの統計情報を処理するタスクなどもタスクスケジュール情報に含まれても良い。また、タスクスケジュール情報で指定されるタスクは、ノンプリエンプティブタスクを想定し、実行中に他のタスクに割り込まれないタスクとする。
【００６６】
入力バッファ３０３は、仮想マシン１３からスイッチ装置１００−３へデータを受け渡す際に利用されるバッファである。入力バッファ３０３は、スイッチ側に備えても良いし、仮想マシン側に備えても良いし、ＶＭＭ（Ｖｉｒｔｕａｌ  Ｍａｃｈｉｎｅ  Ｍｏｎｉｔｏｒ、またはハイパーバイザー）側に備えても良い。ＩＥＥＥ８０２．１Ｑｂｖの場合、入力バッファ３０３は、トラフィッククラス毎に分割されたキューである。
【００６７】
入力処理部３０１は、選択部３０７からの通知を受けて起動し、入力バッファ３０３のデータ（フレーム）を読み出し、転送先を判定して、該当する転送バッファ３０４へ当該データを書き込む。
【００６８】
転送バッファ３０４は、入力処理部３０１から出力処理部３０２へデータを受け渡す際に利用されるバッファである。ＩＥＥＥ８０２．１Ｑｂｖの場合、転送バッファ３０４は、トラフィッククラス毎に分割されたキューである。
【００６９】
出力処理部３０２は、選択部３０７からの通知を受けて起動し、転送バッファ３０４のデータを読み出し、出力バッファ３０５へ当該データを書き込む。
【００７０】
出力バッファ３０５は、スイッチ装置１００−３から、仮想マシン１３又はＮＩＣ３０へデータを受け渡す際に利用されるバッファである。出力バッファ３０５は、スイッチ側に備えても良いし、仮想マシン側に備えても良いし、ＶＭＭ（Ｖｉｒｔｕａｌ  Ｍａｃｈｉｎｅ  Ｍｏｎｉｔｏｒ、またはハイパーバイザー）側に備えても良い。
【００７１】
なお、図６の説明では、入力処理部３０１が、ネットワークポート毎（仮想マシン１３及びＮＩＣ３０）に備えられている場合について説明したが、例えば入力処理部３０１を１つにして、参照するネットワークポートを切り替える方式でもよい。出力処理部３０２についても同様である。
【００７２】
また例えば、仮想インタフェース（仮想マシン１３）の入出力制御をする入力処理部３０１及び出力処理部３０２と、物理インタフェース（ＮＩＣ３０）の入出力制御をする入力処理部３０１及び出力処理部３０２と、に分けて制御する構成にしてもよい。
【００７３】
図８は第１実施形態のタスクの起動処理の例を示すフローチャートである。はじめに、選択部３０７が、タスクスケジュール情報３０８を参照して、起動するタスクを選択する（ステップＳ１）。次に、選択部３０７が、次回実行するタスクを示すｎｅｘｔ＿ｔａｓｋを指定することにより、タスクスケジュール情報３０８を更新する（ステップＳ２）。次に、選択部３０７が、ステップＳ１の処理により選択されたタスクの終了時間を、上述の方法により計算する（ステップＳ３）。次に、選択部３０７が、ステップＳ１の処理により選択されたタスクを起動する（ステップＳ４）。次に、ステップＳ１の処理により選択されたタスクが、当該タスクの処理を実行する（ステップＳ５）。
【００７４】
以上が、第１実施形態のスイッチ装置１００−３のタスク起動動作である。次に、選択部３０７によって起動される入力処理部３０１及び出力処理部３０２の動作について説明する。
【００７５】
＜入力処理部の処理＞
図９は第１実施形態の入力処理部３０１ａの機能構成の例を示す図である。第１実施形態の入力処理部３０１ａは、ＦＤＢ１０４、送信スケジュール情報１０６、転送処理部３１０及び判定部３２０を備える。転送処理部３１０は、読み出し部３１１、転送先決定部３１２及び書き込み部３１３を備える。
【００７６】
判定部３２０は、１フレームを転送するのに必要な最悪処理時間を保持する。最悪処理時間は、最大フレーム長のフレーム処理時間、送信スケジュール情報の探索時間、ＦＤＢ１０４の探索時間、及び、ブロードキャストの処理時間などを考慮して算出される。
【００７７】
送信スケジュール情報の探索時間については、例えばＩＥＥＥ８０２．１Ｑｂｖの場合、優先度の高いトラフィッククラスから順番に送信フレームが存在するか確認されるため、一番優先度が低いトラフィッククラスのみにフレームが存在する場合が最も処理に時間がかかる。
【００７８】
ＦＤＢ１０４の探索時間については、例えばＦＤＢ１０４がハッシュで管理される場合、ハッシュ値の衝突の有無などで、処理時間が変動する。
【００７９】
ブロードキャストの処理時間については、例えばネットワークポート数に応じてブロードキャスト時の処理が増大する。
【００８０】
判定部３２０は、現在時刻、最悪処理時間、及び、選択部３０７により受け取った終了時刻から、１フレーム分の送信が可能であるか否かを判定する。
【００８１】
送信スケジュール情報１０６は、事前に設定されたフレームの送信タイミングを示す情報を保持する。ＩＥＥＥ８０２．１Ｑｂｖの場合、送信スケジュール情報１０６は、ゲートコントロールリスト（ＧＣＬ）、及び、ゲートコントロールに必要な各種情報（基準時刻を含む）である。
【００８２】
ＦＤＢ１０４は、フレームの送信先を決定するための情報が含まれる。第１実施形態では、転送先のネットワークポート（ネットワークインタフェース）の識別子、ＭＡＣアドレス、ＶＬＡＮ  ＩＤ、及び、最終送信時刻などの情報が格納される。
【００８３】
転送処理部３１０は、送信スケジュール情報１０６を基にタイミングを制御しながら入力バッファ３０３ａからデータ（フレーム）を読み出す。図９の例では、入力バッファ３０３ａに含まれるＴＣ（Ｔｒａｆｆｉｃ  Ｃｌａｓｓ）０〜７のいずれかのバッファからデータが読み出される。次に、転送処理部３１０は、ＦＤＢ１０４を参照して宛先となるネットワークポートを決定し、該当する転送バッファ３０５へデータを書き込む。転送処理部３１０はデータの書き込みが完了すると、判定部３２０へ通知する。転送処理は、判定部３２０により処理できないと判定されるまで繰り返される。
【００８４】
図１０は第１実施形態のデータの入力処理の例を示すフローチャートである。はじめに、判定部３２０が、入力処理部３０１（タスク）の処理を実行する時間があるか否かを判定する（ステップＳ１１）。
【００８５】
次に、読み出し部３１１が、送信スケジュール情報１０６に基づいて、転送処理を実施する入力バッファ（図９の例では、ＴＣ０〜ＴＣ７のいずれか）を選択する（ステップＳ１２）。次に、読み出し部３１１は、ステップＳ１２で選択された入力バッファに送信可能なデータ（フレーム）が存在するか否かを判定する（ステップＳ１３）。送信可能なフレームが存在しない場合（ステップＳ１３，Ｎｏ）、処理はステップＳ１１に戻る。
【００８６】
送信可能なフレームが存在する場合（ステップＳ１３，Ｙｅｓ）、読み出し部３１１は、ステップＳ１２で選択されたバッファからフレームを読み出す（ステップＳ１４）。次に、転送先決定部３１２が、フレームのヘッダに含まれる送信元情報に基づいてＦＤＢ１０４を更新する（ステップＳ１５）。
【００８７】
次に、転送先決定部３１２が、フレームのヘッダに含まれる宛先情報が、ＦＤＢ１０４に存在するか否かを判定する（ステップＳ１６）。フレームのヘッダに含まれる宛先情報が、ＦＤＢ１０４に存在する場合（ステップＳ１６，Ｙｅｓ）、当該フレームをユニキャストで送信する。具体的には、書き込み部３１３が、ＦＤＢ１０４に記載された宛先の転送バッファ３０４に、ステップＳ１４の処理で読み出されたフレームを書き込む（ステップＳ１７）。
【００８８】
フレームのヘッダに含まれる宛先情報が、ＦＤＢ１０４に存在しない場合（ステップＳ１６，Ｎｏ）、当該フレームをブロードキャストで送信する。具体的には、書き込み部３１３が、自身の転送バッファ３０４以外のすべての転送バッファ３０４に、ステップＳ１４の処理で読み出されたフレームを書き込む（ステップＳ１８）。
【００８９】
ここで、転送先決定部３１２の処理について補足する。
【００９０】
（ＦＤＢ１０４の更新処理についての補足）
転送先決定部３１２は、読み出したフレームの”送信元”情報（ＭＡＣアドレス、及び、ＶＬＡＮ  ＩＤ）を含むエントリがＦＤＢ１０４に存在する場合、当該エントリの最終転送時刻に現在時刻を設定することにより、ＦＤＢ１０４を更新する。なお、古いエントリ（長い間送信がされていないエントリ）は最終送信時間を利用して、削除される。例えば、ｆｄｂ＿ｃｌｅａｎタスクが実行されたときに、最終送信時間が古い順に古いエントリが削除される。
【００９１】
一方、読み出したフレームの”送信元”情報（ＭＡＣアドレス、及び、ＶＬＡＮ  ＩＤ）を含むエントリがＦＤＢ１０４に存在しない場合、転送先決定部３１２は、エントリを新たに登録することにより、ＦＤＢ１０４を更新する。
【００９２】
（ユニキャスト／ブロードキャストについての補足）
転送先決定部３１２は、読み出しフレームの”宛先”情報（ＭＡＣアドレス、ＶＬＡＮ  ＩＤ）を含むエントリがＦＤＢ１０４に存在する場合、当該フレームをユニキャストで転送する。
【００９３】
一方、読み出しフレームの”宛先”情報（ＭＡＣアドレス、ＶＬＡＮ  ＩＤ）を含むエントリがＦＤＢ１０４に存在しない場合、転送先決定部３１２は、当該フレームをブロードキャストで転送する。
【００９４】
＜出力処理部の処理＞
図１１は第１実施形態の出力処理部３０２ａの機能構成の例を示す図である。第１実施形態の出力処理部３０２ａは、送信スケジュール情報１０６、転送処理部３１０及び判定部３２０を備える。転送処理部３１０は、読み出し部３１１及び書き込み部３１３を備える。送信スケジュール情報１０６、転送処理部３１０（読み出し部３１１及び書き込み部３１３）、及び、判定部３２０の説明は、図９と同様なので省略する。
【００９５】
図１２は第１実施形態のデータの出力処理の例を示すフローチャートである。ステップＳ２１〜Ｓ２４の説明は図１０のステップＳ１１〜Ｓ１４と同様なので省略する。書き込み部３１３は、ステップＳ２４の処理により読み出されたデータ（フレーム）を出力バッファ３０５に書き込む（ステップＳ２５）。
【００９６】
以上、説明したように、第１実施形態のスイッチ装置１００−３では、選択部３０７が、データ（第１データ）の送信タイミングが、当該第１データの優先度毎に定められた送信スケジュール情報１０６と同期されたタスクスケジュール情報３０８に基づいて、当該第１データの転送処理を実行するタスク（第１タスク）を選択し、選択された第１タスクにより実行される転送処理の終了時刻を計算する。判定部３２０が、当該終了時刻と現在時刻とから、当該第１データの転送処理が実行可能か否かを判定する。そして、選択部３０７により選択された第１タスクが、転送処理が実行可能な場合、送信スケジュール情報１０６に基づいて、第１データの転送処理を実行する。
【００９７】
＜第１実施形態の効果＞
第１実施形態のスイッチ装置１００−３によれば、データ（フレーム）の送信タイミングと同期してタスクの起動タイミングを制御することで、図１３のように事前にスケジュールされたタイミングで各タスクが順番に処理される。
【００９８】
図１３は第１実施形態のタスクの実行イメージを示す図である。選択部３０７は、例えばＲＴＯＳ（Ｒｅａｌ−ｔｉｍｅ  ｏｐｅｒａｔｉｎｇ  ｓｙｓｔｅｍ）のアラーム機能などにより一定間隔で起動される。選択部３０７は、内部で管理するタスクスケジュール情報３０８に基づいて、タスクを起床する。
【００９９】
起床するタスクは、ｂｒ＿ｏｕｔ（ｐｉｆ）、ｂｒ＿ｉｎ（ｐｉｆ）、ｂｒ＿ｏｕｔ（ｖｉｆ１）、ｂｒ＿ｉｎ（ｖｉｆ１）、ｂｒ＿ｏｕｔ（ｖｉｆ２）、及び、ｂｒ＿ｉｎ（ｖｉｆ２）のいずれかである。ｂｒ＿ｏｕｔ（ｐｉｆ）、ｂｒ＿ｉｎ（ｐｉｆ）、ｂｒ＿ｏｕｔ（ｖｉｆ１）、ｂｒ＿ｉｎ（ｖｉｆ１）、ｂｒ＿ｏｕｔ（ｖｉｆ２）、及び、ｂｒ＿ｉｎ（ｖｉｆ２）の説明は、図５と同じなので省略する。
【０１００】
起床したタスクは、タスクスケジュール情報３０８で指定された実行時間中は、ポーリング動作でフレーム転送処理を実行する。
【０１０１】
図１３のように各タスクが動作することにより、タスクの実行時間が厳密に管理され、予測不能な処理時間の揺らぎ（コンテキストスイッチなどに伴う見積困難な処理時間の揺らぎ）を排除することができる。これにより、最悪遅延を保証することが可能になる。
【０１０２】
なお上述の説明では、簡単のため、ネットワークポートを３つの場合について説明したが、ネットワークポート数は任意でよい。
【０１０３】
（第２実施形態）
次に第２実施形態について説明する。第２実施形態の説明では、第１実施形態と同様な説明については省略する。第２実施形態では、更にタスクの割り込み制御をする場合について説明する。
【０１０４】
図１４は第２実施形態の入力処理部３０１ａの機能構成の例を示す図である。第２実施形態の入力処理部３０１ａは、ＦＤＢ１０４、送信スケジュール情報１０６、転送処理部３１０、判定部３２０及び割込み処理部３２１を備える。転送処理部３１０は、読み出し部３１１、転送先決定部３１２及び書き込み部３１３を備える。
【０１０５】
図１５は第２実施形態の出力処理部３０２ａの機能構成の例を示す図である。第２実施形態の出力処理部３０２ａは、送信スケジュール情報１０６、転送処理部３１０、判定部３２０及び割込み処理部３２１を備える。転送処理部３１０は、読み出し部３１１及び書き込み部３１３を備える。
【０１０６】
すなわち、第２実施形態では、第１実施形態の構成に割込み処理部３２１が更に追加されている。
【０１０７】
割込み処理部３２１は、仮想マシン１３ａが入力バッファ３０３ａにデータ（フレーム）を書き込んだ場合に発生する割り込み信号や、入力処理部３０１が転送バッファ３０４ａにデータ書き込んだ場合に発生する割り込み信号を検知し、割り込みが有効である場合に、判定部３２０へ通知する。割込みが有効であるか否かは、割込みマスクによって制御される。割り込み信号は、仮想マシン１３ａのドライバが、フレーム投入時に発生させても良いし、入力処理部３０３が転送バッファへフレームを書き込み時に発生させても良いし、ハイパーバイザーが発生させても良い。また、割り込み信号を用いるのではなく、入力処理部３０１ａ（割り込み処理部３２１）が入力バッファ３０３ａを、出力処理部３０２ａが転送バッファ３０４ａをポーリングで監視し、フレームが投入されることを検知する方法で代替しても良い。
【０１０８】
図１６Ａは第２実施形態のタスクスケジュール情報２０８の例１を示す図である。図１６Ａの例は、起動周期（ｔｉｃｋ）が一定（１０００ｎｓ）の場合を示す。すなわち、図１６Ａのタスクスケジュール情報３０８の例は、全てのタスクの実行時間が同一である場合を示す。この場合、アラーム部３０６は１０００ｎｓ間隔で起床して、選択部３０７に通知するという動作を繰り返す。
【０１０９】
図１６Ｂは第２実施形態のタスクスケジュール情報３０８の例２を示す図である。図１６Ｂの例は、割り当てられる実行時間がタスク毎に異なる場合を示す。この場合、選択部３０７は、次に起床するまでの時間をその都度、アラーム部３０６へ設定する。
【０１１０】
第２実施形態では、前回実行されたタスクを示すｐｒｅｖ＿ｔａｓｋ（ＩＤ）が追加されている。
【０１１１】
選択部３０７は選択したタスクを起動する際に、前回実行したタスク（ｐｒｅｖ＿ｔａｓｋ）の割込み処理部３２１に対して、割り込みを無効化（マスク）するように設定する。次に、選択部３０７は、起動するタスク（ｎｅｘｔ＿ｔａｓｋ）の判定部３２０へ終了時刻を通知して、タスク（ｎｅｘｔ＿ｔａｓｋ）を起動する。
【０１１２】
入力処理部３０１（出力処理部３０２）は、第１実施形態と同様の処理を実施するが、読み出し部３１１がバッファを参照した際にデータ（フレーム）が存在しなければ、割込み処理部３２１の割り込み処理を有効化して終了する。
【０１１３】
アラーム部３０６が新たに動作する前（アラーム部３０６が起動した場合、割り込みが無効になる）に、キューにフレームが投入されると、割込み処理部３２１により検知され、フレーム転送処理が再開される。
【０１１４】
図１７は第２実施形態のタスクの起動処理の例を示すフローチャートである。はじめに、選択部３０７が、タスクスケジュール情報３０８を参照して、起動するタスクを選択する（ステップＳ３１）。次に、選択部３０７が、前回実行していたタスク（ｐｒｅｖ＿ｔａｓｋ）の割り込みを無効にする（ステップＳ３２）。
【０１１５】
次に、選択部３０７が、タスクスケジュール情報３０８のｎｅｘｔ＿ｔａｓｋ及びｐｒｅｖ＿ｔａｓｋを更新する（ステップＳ３３）。次に、選択部３０７が、ステップＳ３１の処理により選択されたタスクの終了時間を、第１実施形態と同様の方法により計算する（ステップＳ３４）。次に、選択部３０７が、ステップＳ３１の処理により選択されたタスクを起動する（ステップＳ３５）。次に、ステップＳ３１の処理により選択されたタスクが、当該タスクの処理を実行する（ステップＳ３６）。
【０１１６】
図１８は第２実施形態のデータの入力処理の例を示すフローチャートである。はじめに、割込み処理部３２１が、タスク実行中の割り込みを無効化する（ステップＳ４１）。
【０１１７】
ステップＳ４２〜ステップＳ４９の説明は、第１実施形態と同様のため省略する。
【０１１８】
第２実施形態では、送信可能なフレームが存在しない場合（ステップＳ４４，Ｎｏ）、割り込みを有効化する（ステップＳ５０）。
【０１１９】
図１９は第２実施形態のデータの出力処理の例を示すフローチャートである。はじめに、割込み部３２１が、タスク実行中の割り込みを無効化する（ステップＳ６１）。ステップＳ６２〜Ｓ６５の説明は。図１８のステップＳ４２〜Ｓ４５と同様なので省略する。書き込み部３１３は、ステップＳ６５の処理により読み出されたデータ（フレーム）を出力バッファ３０５に書き込む（ステップＳ６６）。
【０１２０】
第２実施形態では、送信可能なフレームが存在しない場合（ステップＳ６４，Ｎｏ）、割り込みを有効化する（ステップＳ６７）。
【０１２１】
図２０は第２実施形態のタスクの実行イメージを示す図である。第１実施形態では、データ（フレーム）が存在しない場合もタスクの終了時刻までは動作を繰り返していた（ポーリング動作）。一方で、第２実施形態では、タスクの実行中に送信可能なフレームが存在しない場合は、割り込みを有効化して動作を終了する。これにより、図２０のように、フレームが存在しない場合には別のタスクを実行することが可能になる（割り込み処理とポーリングのハイブリッド）。但し、キューにフレームが投入された場合には、転送処理部３１０は、直ちに転送処理を再開する。このため、転送処理部３１０の中断中に実行されるタスクは、優先度が低いプリエンプティブタスク（処理の割り込みが可能なタスク）である必要がある。
【０１２２】
プリエンプティブタスクは、例えばＦＤＢの古いエントリを削除するタスク、スイッチの統計情報処理、及び、リアルタイム通信ではないベストエフォートトラフィックの転送処理など、リアルタイム性への要求が低い処理を実行するタスクである。
【０１２３】
具体的には、選択部３０７は、ノンプリエンティブタスク（第１タスク）の転送処理が中断された場合、プリエンプティブタスク（第２データ）の転送処理を実行する第２タスク（図２０の例では、非リアルタイムタスク）を選択する。そして、選択部３０７により選択された第２タスクは、割り込みが有効にされていた第１タスク、又は、新たな第１タスクが選択部３０７により選択されるまでの間、第２データの転送処理を実行する。
【０１２４】
なお、割り込み動作に移行する際の条件（送信可能なフレームが存在しないと判定する条件）は、例えばバッファが空の場合である。また例えば、割り込み動作に移行する際の条件は、バッファにフレームが存在するがゲートが閉じている場合である。また例えば、割り込み動作に移行する際の条件は、バッファにフレームが存在しゲートも空いているが、Ｑｂｖのガードバンド判定で送信できない場合である。
【０１２５】
以上、説明したように、第２実施形態のスイッチ装置１００−３では、割込み処理部３２１が、タスク（第１タスク）が参照するバッファへ第１データが投入されたことを検知すると、当該第１タスクに対する割り込みが有効である場合に、判定部３２０へ通知する。選択部３０７が、第１タスクを選択する際に、選択される第１タスクに対する割り込みを無効化する。選択部３０７により選択された第１タスクは、転送処理中に、転送可能な第１データがバッファに存在しない場合に、割り込みを有効にして転送処理を中断する。そして、判定部３２０が、割込み処理部から通知を受信した場合、割り込みが有効にされていた第１タスクによって第１データの転送処理が実行可能か否かを判定する。
【０１２６】
＜第２実施形態の効果＞
第２実施形態によれば、データ（フレーム）の送信タイミングと同期してタスクの起動タイミングを制御し、フレーム転送処理のタスクの実行中に送信可能なフレームが存在しない場合は別のタスクを実行可能にすることで、処理の最悪遅延は保証しつつ、処理効率を向上させることができる。
【０１２７】
（第３実施形態）
次に第３実施形態について説明する。第３実施形態の説明では、第２実施形態と同様な説明については省略する。第３実施形態では、バッファの状態と、送信スケジュール情報１０６の状態変化とを考慮した割り込み制御をする場合について説明する。
【０１２８】
図２１は第３実施形態の入力処理部３０１ａの機能構成の例を示す図である。第３実施形態の入力処理部３０１ａは、ＦＤＢ１０４、送信スケジュール情報１０６、転送処理部３１０、判定部３２０及び割込み処理部３２１を備える。転送処理部３１０は、読み出し部３１１、転送先決定部３１２及び書き込み部３１３を備える。
【０１２９】
図２２は第２実施形態の出力処理部３０２ａの機能構成の例を示す図である。第２実施形態の出力処理部３０２ａは、送信スケジュール情報１０６、転送処理部３１０、判定部３２０及び割込み処理部３２１を備える。転送処理部３１０は、読み出し部３１１及び書き込み部３１３を備える。
【０１３０】
第３実施形態では、第２アラーム部３０６ｂが、割込み処理部３２１にアラームを通知する。なお、第１アラーム部３０６ａの動作は、第２実施形態のアラーム部３０６と同じである。
【０１３１】
第２実施形態のように、送信可能なデータ（フレーム）が存在しなかったため、割り込みを有効にしてタスクを終了すると、送信フレームは新たに投入されていないが、送信スケジュール情報１０６（例えばＧＣＬ）の状態が変化する場合がある。この場合、送信可能なフレームが存在しているのに、タスク（入力処理部３０１及び出力処理部３０２）が動作しなくなってしまう。
【０１３２】
そこで、第３実施形態では、転送処理部３１０が、図２３に示すように、割り込みを有効化してタスクを終了する際に、ＧＣＬが次に変化するまでの時間を第２アラーム部３０６ｂに設定する。図２３に記載のＯはＯｐｅｎを示し、ＣはＣｌｏｓｅを示す。
【０１３３】
第２アラーム部３０６ｂが、図２３のように設定された時間が経過後にアラームを通知する。すなわち、第２アラーム部３０６ｂは、選択部３０７により選択された第１タスクにより転送可能な第１データがバッファに存在せず、かつ、終了時刻までにゲートコントロールリストの状態が変化する場合、ゲートコントロールリストの状態が変化する時刻に割込み処理部３２１に通知する。割込み処理部３２１は、第２アラーム部３０６ｂから通知を受信した場合、判定部３２０へ通知する。そして、判定部３２０は、割込み処理部３２１から通知を受信した場合、割り込みが有効にされていた第１タスクによって第１データの転送処理が実行可能か否かを判定する。
【０１３４】
これにより、バッファにデータ（フレーム）は存在したが、ＧＣＬの状態によって送信ができなかったフレームを、ＧＣＬの状態変化後に送信することが可能になる。
【０１３５】
なお、転送処理部３１０は、ＧＣＬの変化時間がタスク終了時刻よりも後ならば、第２アラーム部３０６ｂに時間を設定しない（第２アラーム部３０６ｂを動作させない）。この場合、第３実施形態の動作は、第２実施形態と同じ動作になる。
【０１３６】
図２４は第３実施形態のタスクの起動処理の例を示すフローチャートである。はじめに、選択部３０７が、タスクスケジュール情報３０８を参照して、起動するタスクを選択する（ステップＳ７１）。次に、選択部３０７が、前回実行していたタスク（ｐｒｅｖ＿ｔａｓｋ）の割り込みを無効にし、第２アラーム部３０６ｂを停止する（ステップＳ７２）。
【０１３７】
ステップＳ７３〜ステップＳ７６の説明は、第２実施形態のステップＳ３３〜ステップＳ３６と同様なので省略する。
【０１３８】
図２５は第３実施形態のデータの入力処理の例を示すフローチャートである。ステップＳ８１〜ステップＳ９０の説明は、第２実施形態のステップＳ４１〜ステップＳ５０と同様なので省略する。
【０１３９】
転送処理部３１０は、送信スケジュール情報１０６（例えばＧＣＬ）が次に変化するまでの時間（図２３参照）を第２アラーム部３０６ｂに設定する（ステップＳ９１）。
【０１４０】
図２６は第２実施形態のデータの出力処理の例を示すフローチャートである。ステップＳ１０１〜ステップＳ１０７の説明は、第２実施形態のステップＳ６１〜ステップＳ６７と同様なので省略する。
【０１４１】
転送処理部３１０は、送信スケジュール情報１０６（例えばＧＣＬ）が次に変化するまでの時間（図２３参照）を第２アラーム部３０６ｂに設定する（ステップＳ１０８）。
【０１４２】
＜第３実施形態の効果＞
以上、説明したように、第３実施形態のスイッチ装置１００−３によれば、バッファにデータ（フレーム）は存在したが、ＧＣＬの状態によって送信ができなかったフレームを、ＧＣＬの状態変化後に送信することが可能になる。
【０１４３】
（第４実施形態）
次に第４実施形態について説明する。第２実施形態の説明では、第１実施形態と同様な説明については省略する。第４実施形態では、マルチコアでタスクを実行する場合について説明する。
【０１４４】
図２７は第４実施形態のタスクの制御例を示す図である。図２７の例では、タスク毎に当該タスクを実行するＣＰＵが指定されている。例えば、入力処理部３０１ａは、ＣＰＵ１で実行されるが、ＣＰＵ２では実行されない。一方、例えば、入力処理部３０１ｄは、ＣＰＵ２で実行されるが、ＣＰＵ１では実行されない。
【０１４５】
図２７のように、タスク毎に当該タスクを実行するＣＰＵを指定することで、図２８のようにデータ（フレーム）の送信スケジュール情報１０６と同期しながら複数のタスクを実行することが可能になる。
【０１４６】
図２８は第４実施形態のタスクの実行イメージを示す図である。ＣＰＵ１では、選択部３０７が、ａｌａｒｍ１の周期で各タスクを選択し、起動する。ＣＰＵ２では、選択部３０７が、ａｌａｒｍ２の周期で各タスクを選択し、起動する。
【０１４７】
一方で、複数のタスク（入力処理部３０１）が同時に実行されると、転送バッファ３０４への書き込み時に競合が発生する。アクセス競合を回避するためには一般的にロックを用いるが、リアルタイム処理が必要なタスクでは、ロックを取るまでの時間が想定困難な遅延時間となってしまう。
【０１４８】
ロックを用いない別の方法としては、同時に実行されるタスク数だけバッファを分割する（ＣＰＵごとにアクセスするバッファを分ける）方法がある。しかし、この方法だと、バッファからフレームを読み出す出力処理部３０２は、どちらのバッファに先にフレームが投入されたかが分からなくなってしまう。通常のスイッチ装置ではラウンドロビンなどの方法でバッファからフレームを読み出せば問題ないが、事前にスケジュールされたタイミングでフレームを送信するリアルタイム通信では、フレーム順序が変わってしまうことは問題となる。
【０１４９】
以上のことから、第４実施形態では、図２９及び図３０のように、ＣＰＵ毎に分離した転送バッファ３０４を用意し、当該転送バッファ３０４の各トラフィッククラスのキューにタイムスタンプ（ＴＳ）を保持する領域を確保する。
【０１５０】
図２９は第４実施形態の入力処理部３０１ａの機能構成の例を示す図である。第４実施形態の入力処理部３０１ａは、ＦＤＢ１０４、送信スケジュール情報１０６、転送処理部３１０及び判定部３２０を備える。転送処理部３１０は、読み出し部３１１、転送先決定部３１２及び書き込み部３１３−２を備える。
【０１５１】
第４実施形態では、書き込み部３１３−２が第１実施形態の書き込み部３１３と異なる。書き込み部３１３−２は、転送バッファ３０４へデータ（フレーム）を書き込む際に、自身のタスクを実行しているＣＰＵ側のバッファを選択し、フレームと合わせて現在時刻（タイムスタンプ）を書き込む。
【０１５２】
例えば、ＣＰＵ１で動作する入力処理部３０１ａが、仮想マシン１３ｂへフレームを転送する場合は、転送バッファ３０４ｂ−１に当該データを書き込む。
【０１５３】
図３０は第４実施形態の出力処理部３０２ａの機能構成の例を示す図である。第４実施形態の出力処理部３０２ａは、送信スケジュール情報１０６、転送処理部３１０及び判定部３２０を備える。転送処理部３１０は、読み出し部３１１−２及び書き込み部３１３を備える。
【０１５４】
第４実施形態では、読み出し部３１１−２が第１実施形態の読み出し部３１１と異なる。読み出し部３１１−２は、データ（フレーム）を読み出す際にタイムスタンプを比較して、書き込みされた時間が早い方のバッファからフレームを読み出す。
【０１５５】
＜第４実施形態の効果＞
上述の図２９及び図３０の構成により、第４実施形態によれば、見積困難な遅延を排除しつつ、データ（フレーム）の送信スケジュール情報１０６で指定された順序で、フレームを処理することが可能になる。
【０１５６】
なお上述の説明では、簡単のため、コアが２つ（ＣＰＵ１及び２）の場合について説明したが、コアの数は任意でよい。
【０１５７】
すなわち、第１タスク毎に、当該第１タスクを実行するプロセッサが割り当てられ、転送される第１データを保持するバッファが、プロセッサ及び転送先の組み合わせ毎に割り当てられていればよい。この場合、第１データの入力を受け付け、当該第１データを転送する第１タスクは、当該第１データの入力を受け付け、当該第１データを転送する第１タスクが実行されるプロセッサに割り当てられたバッファに当該第１データと、当該第１データの書き込み時刻（タイムスタンプ）とを書き込む。そして、転送された第１データを、転送先へ出力する第１タスクは、プロセッサ及び転送先の組み合わせ毎に割り当てられバッファから、書き込み時刻が古い順に第１データを読み出す。
【０１５８】
最後に第１乃至第第４実施形態のスイッチ装置１００−３のハードウェア構成の例について説明する。
【０１５９】
［ハードウェア構成の例］
図３１は第１乃至第４実施形態のスイッチ装置１００−３のハードウェア構成の例を示す図である。第１乃至第４実施形態のスイッチ装置１００−３は、制御装置４０１、主記憶装置４０２、補助記憶装置４０３、表示装置４０４、入力装置４０５及び通信装置４０６を備える。制御装置４０１、主記憶装置４０２、補助記憶装置４０３、表示装置４０４、入力装置３０５及び通信装置４０６は、バス４１０を介して接続されている。
【０１６０】
制御装置４０１は、補助記憶装置４０３から主記憶装置４０２に読み出されたプログラムを実行する。主記憶装置４０２は、ＲＯＭ（Ｒｅａｄ  Ｏｎｌｙ  Ｍｅｍｏｒｙ）及びＲＡＭ（Ｒａｎｄｏｍ  Ａｃｃｅｓｓ  Ｍｅｍｏｒｙ）等のメモリである。補助記憶装置４０３は、ＨＤＤ（Ｈａｒｄ  Ｄｉｓｋ  Ｄｒｉｖｅ）及びメモリカード等である。
【０１６１】
表示装置４０４には、スイッチ装置１００−３の状態等を表示する装置である。表示装置４０４は、例えば液晶ディスプレイ等である。
【０１６２】
入力装置４０５には、スイッチ装置１００−３を操作する装置である。入力装置４０５は、例えばキーボード及びマウス等である。
【０１６３】
通信装置４０６は、外部の機器等と通信する装置である。
【０１６４】
第１乃至第４実施形態のスイッチ装置１００−３で実行されるプログラムは、インストール可能な形式又は実行可能な形式のファイルでＣＤ−ＲＯＭ、メモリカード、ＣＤ−Ｒ及びＤＶＤ等のコンピュータで読み取り可能な記憶媒体に記録されてコンピュータ・プログラム・プロダクトとして提供される。
【０１６５】
また第１乃至第４実施形態のスイッチ装置１００−３で実行されるプログラムを、インターネット等のネットワークに接続されたコンピュータ上に格納し、ネットワーク経由でダウンロードさせることにより提供するように構成してもよい。
【０１６６】
また第１乃至第４実施形態のスイッチ装置１００−３で実行されるプログラムをダウンロードさせずにインターネット等のネットワーク経由で提供するように構成してもよい。
【０１６７】
また第１乃至第４実施形態のスイッチ装置１００−３のプログラムを、ＲＯＭ等に予め組み込んで提供するように構成してもよい。
【０１６８】
第１乃至第４実施形態のスイッチ装置１００−３で実行されるプログラムは、第１乃至第４実施形態のスイッチ装置１００−３の機能ブロックのうち、プログラムによっても実現可能な機能ブロックを含むモジュール構成となっている。当該各機能ブロックは、実際のハードウェアとしては、制御装置４０１が記憶媒体からプログラムを読み出して実行することにより、上記各機能ブロックが主記憶装置４０２上にロードされる。すなわち上記各機能ブロックは主記憶装置４０２上に生成される。
【０１６９】
なお各機能ブロックの一部又は全部をソフトウェアにより実現せずに、ＩＣ等のハードウェアにより実現してもよい。
【０１７０】
また複数のプロセッサを用いて各機能を実現する場合、各プロセッサは、各機能のうち１つを実現してもよいし、各機能のうち２以上を実現してもよい。
【０１７１】
本発明のいくつかの実施形態を説明したが、これらの実施形態は、例として提示したものであり、発明の範囲を限定することは意図していない。これら新規な実施形態は、その他の様々な形態で実施されることが可能であり、発明の要旨を逸脱しない範囲で、種々の省略、置き換え、変更を行うことができる。これら実施形態やその変形は、発明の範囲や要旨に含まれるとともに、特許請求の範囲に記載された発明とその均等の範囲に含まれる。
【符号の説明】
【０１７２】
１３  仮想マシン
３０  ＮＩＣ
１００  スイッチ装置
１０４  ＦＤＢ
１０６  送信スケジュール情報
１１０  ソフトウェアスイッチ
３０１  入力処理部
３０２  出力処理部
３０３  受信バッファ
３０４  転送バッファ
３０５  出力バッファ
３０６  アラーム部
３０７  選択部
３０８  タスクスケジュール情報
３１０  転送処理部
３１１  読み出し部
３１２  転送先決定部
３１３  書き込み部
３２０  判定部
３２１  割込み部
４０１  制御装置
４０２  主記憶装置
４０３  補助記憶装置
４０４  表示装置
４０５  入力装置
４０４  通信装置
４１０  バス
【図１】
2020048045.tif 000003
【図２】
2020048045.tif 000004
【図３】
2020048045.tif 000005
【図４】
2020048045.tif 000006
【図５】
2020048045.tif 000007
【図６】
2020048045.tif 000008
【図７Ａ】
2020048045.tif 000009
【図７Ｂ】
2020048045.tif 000010
【図８】
2020048045.tif 000011
【図９】
2020048045.tif 000012
【図１０】
2020048045.tif 000013
【図１１】
2020048045.tif 000014
【図１２】
2020048045.tif 000015
【図１３】
2020048045.tif 000016
【図１４】
2020048045.tif 000017
【図１５】
2020048045.tif 000018
【図１６Ａ】
2020048045.tif 000019
【図１６Ｂ】
2020048045.tif 000020
【図１７】
2020048045.tif 000021
【図１８】
2020048045.tif 000022
【図１９】
2020048045.tif 000023
【図２０】
2020048045.tif 000024
【図２１】
2020048045.tif 000025
【図２２】
2020048045.tif 000026
【図２３】
2020048045.tif 000027
【図２４】
2020048045.tif 000028
【図２５】
2020048045.tif 000029
【図２６】
2020048045.tif 000030
【図２７】
2020048045.tif 000031
【図２８】
2020048045.tif 000032
【図２９】
2020048045.tif 000033
【図３０】
2020048045.tif 000034
【図３１】
2020048045.tif 000035