(57)【特許請求の範囲】
【請求項１】
複数のプラットフォームと、
拡張バスを介して前記複数のプラットフォームを通信可能に接続する中継装置と、
を備え、
前記複数のプラットフォームのうちの第１プラットフォームは、
前記複数のプラットフォームのうちの前記第１プラットフォームとは異なる第２プラットフォームへのデータの送信要求に応じて、前記第１プラットフォームの送信用バッファに前記データを書き込み、前記第２プラットフォームに対して前記データの受信要求を送信する第１ブリッジドライバを備え、
前記第２プラットフォームは、
前記第１ブリッジドライバにより送信された前記受信要求に応じて、前記中継装置を介して前記送信用バッファから前記第２プラットフォームの所定の記憶領域に転送された前記データを取得するための受信処理スレッドの実行の可否を制御するためのセマフォを制御するセマフォ制御ドライバと、
解放済みの前記セマフォが存在する場合に、当該セマフォを獲得した上で前記受信処理スレッドを実行することで前記中継装置を介して前記送信用バッファから前記所定の記憶領域に転送された前記データを取得し、前記第１プラットフォームに対して前記データの受信完了通知を送信する第２ブリッジドライバと、
を備え、
前記セマフォ制御ドライバは、解放済みの前記セマフォの数と固定の閾値との比較結果に応じて、前記セマフォを解放するか否かを選択的に切り替える、
情報処理システム。
【請求項２】
中継装置により拡張バスを介して通信可能に接続された複数のプラットフォームに含まれるプラットフォームであって、
前記複数のプラットフォームのうちの前記プラットフォームとは異なる他のプラットフォームであって、前記プラットフォームへのデータの送信要求に応じて前記他のプラットフォームの送信用バッファに前記データを書き込み、前記プラットフォームに対して前記データの受信要求を送信する前記他のプラットフォーム、により送信された前記データの受信要求に応じて、前記中継装置を介して前記送信用バッファから前記プラットフォームの所定の記憶領域に転送された前記データを取得するための受信処理スレッドの実行の可否を制御するためのセマフォを制御するセマフォ制御ドライバと、
解放済みの前記セマフォが存在する場合に、当該セマフォを獲得した上で前記受信処理スレッドを実行することで前記中継装置を介して前記送信用バッファから前記所定の記憶領域に転送された前記データを取得し、前記他のプラットフォームに対して前記データの受信完了通知を送信するブリッジドライバと、
を備え、
前記セマフォ制御ドライバは、解放済みの前記セマフォの数と固定の閾値との比較結果に応じて、前記セマフォを解放するか否かを選択的に切り替える、
プラットフォーム。
【請求項３】
中継装置により拡張バスを介して通信可能に接続された複数のプラットフォームに含まれるプラットフォームとしてのコンピュータに、
前記複数のプラットフォームのうちの前記プラットフォームとは異なる他のプラットフォームであって、前記プラットフォームへのデータの送信要求に応じて前記他のプラットフォームの送信用バッファに前記データを書き込み、前記プラットフォームに対して前記データの受信要求を送信する前記他のプラットフォーム、により送信された前記データの受信要求に応じて、前記中継装置を介して前記送信用バッファから前記プラットフォームの所定の記憶領域に転送された前記データを取得するための受信処理スレッドの実行の可否を制御するためのセマフォを制御することと、
解放済みの前記セマフォが存在する場合に、当該セマフォを獲得した上で前記受信処理スレッドを実行することで前記中継装置を介して前記送信用バッファから前記所定の記憶領域に転送された前記データを取得し、前記他のプラットフォームに対して前記データの受信完了通知を送信することと、
解放済みの前記セマフォの数と固定の閾値との比較結果に応じて、前記セマフォを解放するか否かを選択的に切り替えることと、
を実行させるための、プログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本開示は、情報処理システム、プラットフォーム、およびプログラムに関する。
【背景技術】
【０００２】
複数のプロセッサ（プラットフォーム）と、当該複数のプロセッサを通信可能に接続するバスを有する中継装置と、を備えた情報処理システムが知られている。このような情報処理システムでは、プロセッサ間におけるデータの送受信が、いずれかの装置のバッファを介して行われることが一般的である。
【先行技術文献】
【特許文献】
【０００３】
【特許文献１】特開２００８−０４１０２７号公報
【発明の概要】
【発明が解決しようとする課題】
【０００４】
ところで、上記のような送信用バッファを介したプロセッサ（プラットフォーム）間でのデータの送受信においては、送信用バッファからデータを取得するための受信処理スレッドの実行制御を実現するため、セマフォが利用される場合がある。この場合、たとえば、データを受信する側のプロセッサは、データを送信する側のプロセッサからの受信要求を示すハードウェア割り込みを受けた際、優先度の高いハードウェア割り込みの処理を最小限にするため、セマフォを１つ解放する処理のみ実行する。受信処理スレッドは、解放されたセマフォを１つ獲得した上でデータの取得を進める。
【０００５】
しかしながら、プロセッサ間での通信が頻繁に発生する場合、解放されるセマフォの数が短時間で膨大なものとなる。これに対して、解放されたセマフォを１つ獲得した上で実行される受信処理スレッドは、通常、中継装置を介して転送されるデータを１度に取得できる限り取得する。
【０００６】
したがって、解放されるセマフォの数が膨大なものになっている場合、解放されるセマフォの数と同数の受信処理スレッドを実行すると、取得すべきデータが無いにも関わらず受信処理スレッドが繰り返し実行される可能性がある。その結果、プロセッサのリソースの無駄による通信性能の低下が発生する可能性がある。
【課題を解決するための手段】
【０００７】
本開示の第１態様にかかる情報処理システムは、複数のプラットフォームと、中継装置と、を備える。中継装置は、拡張バスを介して複数のプラットフォームを通信可能に接続する。複数のプラットフォームのうちの第１プラットフォームは、第１ブリッジドライバを備える。第１ブリッジドライバは、複数のプラットフォームのうちの第１プラットフォームとは異なる第２プラットフォームへのデータの送信要求に応じて、第１プラットフォームの送信用バッファにデータを書き込み、第２プラットフォームに対してデータの受信要求を送信する。第２プラットフォームは、セマフォ制御ドライバと、第２ブリッジドライバと、を備える。セマフォ制御ドライバは、第１ブリッジドライバにより送信された受信要求に応じて、中継装置を介して送信用バッファから第２プラットフォームの所定の記憶領域に転送されたデータを取得するための受信処理スレッドの実行の可否を制御するためのセマフォを制御する。第２ブリッジドライバは、解放済みのセマフォが存在する場合に、当該セマフォを獲得した上で受信処理スレッドを実行することで中継装置を介して送信用バッファから所定の記憶領域に転送されたデータを取得し、第１プラットフォームに対してデータの受信完了通知を送信する。セマフォ制御ドライバは、解放済みのセマフォの数と固定の閾値との比較結果に応じて、セマフォを解放するか否かを選択的に切り替える。
【０００８】
本開示の第２態様にかかるプラットフォームは、中継装置により拡張バスを介して通信可能に接続された複数のプラットフォームに含まれる。プラットフォームは、セマフォ制御ドライバと、ブリッジドライバと、を備える。セマフォ制御ドライバは、複数のプラットフォームのうちのプラットフォームとは異なる他のプラットフォームであって、プラットフォームへのデータの送信要求に応じて送信用バッファにデータを書き込み、プラットフォームに対してデータの受信要求を送信する他のプラットフォーム、により送信されたデータの受信要求に応じて、中継装置を介して送信用バッファからプラットフォームの所定の記憶領域に転送されたデータを取得するための受信処理スレッドの可否を制御するためのセマフォを制御する。ブリッジドライバは、解放済みのセマフォが存在する場合に、当該セマフォを獲得した上で受信処理スレッドを実行することで中継装置を介して送信用バッファから所定の記憶領域に転送されたデータを取得し、他のプラットフォームに対してデータの受信完了通知を送信する。セマフォ制御ドライバは、解放済みのセマフォの数と固定の閾値との比較結果に応じて、セマフォを解放するか否かを選択的に切り替える。
【０００９】
本開示の第３態様にかかるプログラムは、中継装置により拡張バスを介して通信可能に接続された複数のプラットフォームに含まれるプラットフォームとしてのコンピュータに、複数のプラットフォームのうちのプラットフォームとは異なる他のプラットフォームであって、プラットフォームへのデータの送信要求に応じて他のプラットフォームの送信用バッファにデータを書き込み、プラットフォームに対してデータの受信要求を送信する他のプラットフォーム、により送信されたデータの受信要求に応じて、中継装置を介して送信用バッファからプラットフォームの所定の記憶領域に転送されたデータを取得するための受信処理スレッドの実行の可否を制御するためのセマフォを制御することと、解放済みのセマフォが存在する場合に、当該セマフォを獲得した上で受信処理スレッドを実行することで中継装置を介して送信用バッファから所定の記憶領域に転送されたデータを取得し、他のプラットフォームに対してデータの受信完了通知を送信することと、解放済みのセマフォの数と固定の閾値との比較結果に応じて、セマフォを解放するか否かを選択的に切り替えることと、を実行させるためのプログラムである。
【発明の効果】
【００１０】
本開示の情報処理システム、プラットフォーム、およびプログラムによれば、プラットフォーム間での通信が頻繁に発生する場合における通信性能の低下を抑制することができる。
【図面の簡単な説明】
【００１１】
【図１】図１は、実施形態にかかる情報処理システムの全体構成を示した例示的かつ模式的なブロック図である。
【図２】図２は、実施形態にかかる情報処理システムのプラットフォームおよび中継装置にハードウェア構成を例示的かつ模式的なブロック図である。
【図３】図３は、実施形態にかかるプラットフォームのソフトウェア構成を示した例示的かつ模式的なブロック図である。
【図４】図４は、実施形態にかかる情報処理システムが実行する通信処理を説明するための例示的かつ模式的な図である。
【図５】図５は、実施形態にかかる送信用バッファを介したデータの送受信を説明するための例示的かつ模式的な図である。
【図６】図６は、実施形態にかかるプラットフォーム間でのデータの送受信時に情報処理システムにおいて実行される処理の流れを示した例示的かつ模式的なシーケンス図である。
【図７】図７は、実施形態にかかるプラットフォーム間でのデータの送受信時に受信側のプラットフォームにおいて実行されるセマフォの解放処理の流れを示したシーケンス図である。
【図８】図８は、実施形態にかかる受信処理スレッドにおいて実行される処理の流れをシーケンス図的に示した例示的かつ模式的な図である。
【発明を実施するための形態】
【００１２】
以下、本開示の実施形態および変形例を図面に基づいて説明する。以下に記載する実施形態および変形例の構成、ならびに当該構成によってもたらされる作用および効果は、あくまで一例であって、以下の記載内容に限られるものではない。
【００１３】
＜実施形態＞
図１は、実施形態にかかる情報処理システム１の全体構成を示した例示的かつ模式的なブロック図である。
【００１４】
図１に示されるように、実施形態にかかる情報処理システム１は、複数のプラットフォーム１０−１〜１０−８、および中継装置３０を備えている。プラットフォーム１０−１〜１０−８は、たとえば中継装置３０が設けられたボード上の複数のスロットに挿入されている。これにより、プラットフォーム１０−１〜１０−８は、中継装置３０を介して互いに通信可能に接続されている。
【００１５】
なお、以下では、互いに区別する必要が無い場合、複数のプラットフォーム１０−１〜１０−８のうちの任意のプラットフォームを、単にプラットフォーム１０と記載することがある。また、図１には、情報処理システム１が８個のプラットフォーム１０を備える構成が例示されているが、実施形態において、プラットフォーム１０の個数は、複数であれば、８個以外であってもよい。
【００１６】
また、以下では、プラットフォーム１０と中継装置３０との間の通信がＰＣＩｅ（Peripheral  Component  Interconnect-Express）（登録商標）に基づく通信規格に従って実行される場合について説明するが、実施形態では、ＰＣＩｅ（登録商標）以外の通信規格に従った通信が実行されてもよい。
【００１７】
プラットフォーム１０−１〜２−８は、情報処理システム１の制御部およびＧＵＩ（Graphical  User  Interface）として機能するホスト装置と、ＡＩ（Artificial  Intelligence）推論処理および画像処理などを実行する演算装置と、を含んでいる。以下では、一例として、プラットフォーム１０−１がホスト装置として機能し、プラットフォーム１０−２〜１０−８が演算装置として機能するものとする。なお、演算装置としてのプラットフォーム１０−２〜１０−８は、それぞれが異なる機能を有していてもよいし、少なくとも一部が共通する機能を有していてもよい。
【００１８】
プラットフォーム１０−１〜２−８は、それぞれ、ルートコンプレックス１１−１〜１１−８を備えており、中継装置３０は、ルートコンプレックス１１−１〜１１−８にそれぞれ対応したエンドポイント３１−１〜３１−８を備えている。以下では、互いに区別する必要が無い場合、ルートコンプレックス１１−１〜１１−８のうちの任意のルートコンプレックスを単にルートコンプレックス１１と記載し、エンドポイント３１−１〜３１−８のうちの任意のエンドポイントを単にエンドポイント３１と記載することがある。
【００１９】
なお、図１には、プラットフォーム１０とルートコンプレックス１１とが１対１で対応している構成が例示されているが、実施形態では、プラットフォーム１０とルートコンプレックス１１とが必ずしも１対１で対応している必要はない。たとえば、実施形態では、１つのプラットフォーム１０が２個以上のルートコンプレックス１１を備えていてもよい。
【００２０】
上述したプラットフォーム１０および中継装置３０は、次の図２に示されるようなハードウェア構成を有している。
【００２１】
図２は、実施形態にかかる情報処理システム１のプラットフォーム１０および中継装置３０のハードウェア構成を示した例示的かつ模式的なブロック図である。
【００２２】
まず、プラットフォーム１０のハードウェア構成について説明する。
【００２３】
図２に示されるように、プラットフォーム１０−１は、ルートコンプレックス１１−１と、プロセッサ１２−１と、メモリ１３−１と、記憶部１４−１と、を備えている。これらのハードウェア（回路：circuitry）は、バス（不図示）を介して通信可能に接続されている。
【００２４】
また、他のプラットフォーム１０−２〜１０−８も、プラットフォーム１０−１と同様のハードウェア構成を備えている。すなわち、プラットフォーム１０−２〜１０−８は、それぞれ、ルートコンプレックス１１−２〜１１−８と、プロセッサ１２−２〜１２−８と、メモリ１３−２〜１３−８と、記憶部１４−２〜１４−８と、を備えている。
【００２５】
以下では、互いに区別する必要が無い場合、プロセッサ１２−１〜１２−８のうちの任意のプロセッサを単にプロセッサ１２と記載し、メモリ１３−１〜１３−８のうちの任意のメモリを単にメモリ１３と記載し、記憶部１４−１〜１４−８のうちの任意の記憶部を単に記憶部１４と記載することがある。
【００２６】
ルートコンプレックス１１は、対応するエンドポイント３１との通信を実行する。実施形態において、ルートコンプレックス１１とエンドポイント３１とは、たとえば通信規格の一つとしてのＰＣＩｅ（Peripheral  Component  Interconnect  Express）（登録商標）に従って通信を実行する。ただし、プラットフォーム１０と中継装置３０とは、ＰＣＩｅ（登録商標）以外の他の通信規格に従って通信を実行してもよい。
【００２７】
プロセッサ１２は、プラットフォーム１０の各部の制御を司る。プロセッサ１２は、たとえばＣＰＵ（Central  Processing  Unit）、ＭＰＵ（Micro  Processing  Unit）、ＤＳＰ（Digital  Signal  Processor）、ＡＳＩＣ（Application  Specific  Integrated  Circuit）、ＰＬＤ（Programmable  Logic  Device）、またはＦＰＧＡ（Field  Programmable  Gate  Array）などにより構成される。プロセッサ１２は、マルチコアプロセッサとして構成されていてもよいし、２以上のプロセッサの組合せとして構成されていてもよい。
【００２８】
メモリ１３は、プロセッサ１２による制御に必要なデータおよびプロセッサ１２による制御の結果として生成されるデータなどを記憶する。メモリ１３は、たとえばＲＯＭ（Read  Only  Memory）およびＲＡＭ（Random  Access  Memory）などにより構成される。ＲＯＭは、たとえばプロセッサ１２が実行する各種のソフトウェア（コンピュータプログラム）や当該ソフトウェア用のデータを記憶し、ＲＡＭは、ＲＯＭに記憶されるソフトウェアを実行するための作業領域をプロセッサ１２に提供する。
【００２９】
記憶部１４は、たとえばプロセッサ１２が実行する各種のソフトウェア（コンピュータプログラム）および他のプラットフォーム１０との間で送受信するデータなどを含む各種のデータを（不揮発的に）記憶する。記憶部１４は、たとえばＨＤＤ（Hard  Disk  Drive）、ＳＳＤ（Solid  State  Drive）、およびＳＣＭ（Storage  Class  Memory）などにより構成される。
【００３０】
プラットフォーム１０は、メモリ１３または記憶部１４に格納されたコンピュータプログラムをプロセッサ１２により実行することで、ＡＩ推論処理または画像処理を実行するための各種の機能を実現する。
【００３１】
なお、上記のコンピュータプログラムは、必ずしもメモリ１３または記憶部１４に記憶されている必要はない。たとえば、上記のコンピュータプログラムは、フレキシブルディスク（ＦＤ）のような各種の磁気ディスク、またはＤＶＤ（Digital  Versatile  Disk）のような各種の光ディスクなどといった、コンピュータで読み取り可能な記録媒体にインストール可能な形式または実行可能な形式で記録されたコンピュータプログラムプロダクトとして提供されてもよい。
【００３２】
また、上記のコンピュータプログラムは、インターネットなどのネットワーク経由で提供または配布されてもよい。すなわち、上記のコンピュータプログラムは、は、インターネットなどのネットワークに接続されたコンピュータ上に格納された状態で、当該コンピュータからネットワーク経由でダウンロードする、といった形で提供されてもよい。
【００３３】
次に、プラットフォーム１０間の通信を中継する中継装置３０のハードウェア構成について説明する。
【００３４】
図２に示されるように、中継装置３０は、エンドポイント３１と、プロセッサ３２と、メモリ３３と、記憶部３４と、内部バス３５と、拡張バス３６と、を備えている。
【００３５】
エンドポイント３１は、プラットフォーム１０に対応するように設けられる。エンドポイント３１は、拡張バス３６を介して、プラットフォーム１０のうちの第１プラットフォームから当該第１プラットフォームとは異なる第２プラットフォームへのデータの送信（転送）を実行する。
【００３６】
たとえば、ルートコンプレックス１１−５がＤＭＡ（Direct  Memory  Access）転送によりプラットフォーム１０−１にデータを送信すると、中継装置３０は、ルートコンプレックス１１−５に対応したエンドポイント３１−１から拡張バス３６を介してデータを受信し、受信したデータをプラットフォーム１０−１に転送する。
【００３７】
プロセッサ３２は、中継装置３０の各部を制御する。プロセッサ３２は、プロセッサ１２は、たとえばＣＰＵ、ＭＰＵ、ＤＳＰ、ＡＳＩＣ、ＰＬＤ、またはＦＰＧＡなどにより構成される。プロセッサ１２は、マルチコアプロセッサとして構成されていてもよいし、２以上のプロセッサの組合せとして構成されていてもよい。
【００３８】
メモリ３３は、プロセッサ３２による制御に必要なデータおよびプロセッサ３２による制御の結果として生成されるデータなどを記憶する。メモリ３３は、たとえばＲＯＭおよびＲＡＭなどにより構成される。
【００３９】
記憶部３４は、各種のデータを（不揮発的に）記憶する。記憶部３４は、たとえばＨＤＤ、ＳＳＤ、およびＳＣＭなどにより構成される。
【００４０】
中継装置３０は、メモリ３３または記憶部３４に格納されたコンピュータプログラムをプロセッサ３２により実行することで、プラットフォーム１０間の通信を中継するための各種の機能を実現する。
【００４１】
内部バス３５は、プロセッサ３２、メモリ３３、記憶部３４、および拡張バス３６を通信可能に接続する。
【００４２】
拡張バス３６は、複数のエンドポイント３１、および内部バス３５を通信可能に接続する。これにより、拡張バス３６は、複数のエンドポイント３１間でのデータの転送、すなわちプラットフォーム１０間でのデータの転送が可能になる。なお、拡張バス３６は、例えばＰＣＩｅ（登録商標）に準拠したバスである。
【００４３】
以上のようなハードウェア構成に基づき、実施形態にかかるプラットフォーム１０は、次の図３に示されるようなソフトウェア構成を実現する。
【００４４】
図３は、実施形態にかかるプラットフォーム１０のソフトウェア構成を示した例示的かつ模式的な図である。
【００４５】
図２に示されるように、ホスト装置としてのプラットフォーム１０−１は、ＢＩＯＳ(Basic  Input  Output  System)２０２と、ＯＳ(Operating  System)２０３と、ドライバ２０４と、サービス２０５と、仮想ＬＡＮ（Local  Area  Network）ドライバ２０６と、分散制御部２０７と、共通ソフトウェア２０８と、を実現する。これらのソフトウェア構成に基づき、プラットフォーム１０−１は、アプリケーション２０９を実行し、プラットフォーム１０−１に備えられたハードウェア資源としてのＰＣ（Personal  Computer）プラットフォーム１００１を制御する。
【００４６】
ＢＩＯＳ２０２は、プラットフォーム１０−１の起動時におけるＯＳ２０３の読み込み、およびプラットフォーム１０−１に対する基本的な入出力制御などを実行する。ＯＳ２０３は、たとえばＷｉｎｄｏｗｓ（登録商標）であるが、他のＯＳであってもよい。
【００４７】
ＯＳ２０３は、上記の拡張バスを制御するためのブリッジドライバ２０４Ａを含む各種のドライバ２０４を読み込むことで、プラットフォーム１０−１のルートコンプレックス１１−１にアクセスし、他のプラットフォーム１０との間で通信を実行する。また、ＯＳ２０３は、様々な制御を行うためのサービス２０５を読み込むことで、様々な処理を実行する。
【００４８】
仮想ＬＡＮドライバ２０６および分散制御部２０７は、ドライバ２０４およびサービス２０５の上層に実現されている。そして、共通ソフトウェア２０８は、仮想ＬＡＮドライバ２０６および分散制御部２０７の上層でかつアプリケーション２０９の下層に実現されている。これにより、アプリケーション２０９は、共通ソフトウェア２０８を介して仮想ＬＡＮドライバ２０６にアクセスすることで、他のプラットフォーム１０が仮想的なＬＡＮ上に存在するものとみなして、他のプラットフォーム１０との間で通信を実行する。
【００４９】
一方、演算装置としてのプラットフォーム１０−２および１０−３は、Ｂｏｏｔｌｏａｄｅｒ２１２と、ＯＳ２１３と、ドライバ２１４と、仮想ＬＡＮドライバ２１５と、分散制御部２１６と、共通ソフトウェア２１７と、を実現する。これらのソフトウェア構成に基づき、プラットフォーム１０−２および１０−３は、それぞれ、分散処理Ａおよび分散処理Ｂを実行し、プラットフォーム１０−２および１０−３に備えられたハードウェア資源としてのハードウェアプラットフォーム１０１１を制御する。
【００５０】
なお、図３では、簡単化のため、プラットフォーム１０−２および１０−３のソフトウェア構成についてのみ図示されているが、実施形態では、演算装置としての他のプラットフォーム１０−４〜１０−８も、プラットフォーム１０−２および１０−３と同様のソフトウェア構成を実現しうる。
【００５１】
Ｂｏｏｔｌｏａｄｅｒ２１２は、対応するプラットフォーム１０の電源投入時に起動し、ＯＳ２１３を起動させる。ＯＳ２０３は、たとえばＬｉｎｕｘ（登録商標）であるが、他のＯＳであってもよい。
【００５２】
ＯＳ２１３は、上記の拡張バスを制御するためのブリッジドライバ２１４Ａを含む各種のドライバ２１４を読み込むことで、対応するルートコンプレックス１１にアクセスし、他のプラットフォーム１０との間との間で通信を実行する。
【００５３】
仮想ＬＡＮドライバ２１５および分散制御部２１６は、ドライバ２１４の上層に実現されている。そして、共通ソフトウェア２１７は、仮想ＬＡＮドライバ２１５および分散制御部２１６の上層でかつ対応する分散処理の下層に実現されている。これにより、分散処理Ａ、分散処理Ｂは、共通ソフトウェア２１７を介して仮想ＬＡＮドライバ２１５にアクセスすることで、他のプラットフォーム１０が仮想的なＬＡＮ上に存在するものとみなして、他のプラットフォーム１０との間で通信を実行する。
【００５４】
以上のソフトウェア構成に基づき、実施形態にかかる情報処理システム１は、プラットフォーム１０間での通信の際に、次の図４に示されるような通信処理を実行する。図４には、ホスト装置としてのプラットフォーム１０−１と演算装置としてのプラットフォーム１０−５との間の通信処理が例示されているが、他のプラットフォーム１０間の通信処理も同様に実行されうる。
【００５５】
図４は、実施形態にかかる情報処理システム１が実行する通信処理を説明するための例示的かつ模式的な図である。
【００５６】
図４に示されるように、情報処理システム１は、所定の複数の層を含むレイヤー構造を有している。情報処理システム１は、複数の層を介して、プラットフォーム１０間での通信を実行する。
【００５７】
たとえば、ホスト装置としてのプラットフォーム１０−１のソフトウェアが演算装置としてのプラットフォーム１０−５へとデータを送信（転送）する場合について説明する。この場合、プラットフォーム１０−１のソフトウェアは、プラットフォーム１０−１のトランザクション層、データリンク層、および物理層（ＰＨＹ）を介して、中継装置３０の物理層、より具体的にはプラットフォーム１０−１が接続されたエンドポイント３１−１に対応した物理層にデータを転送する。
【００５８】
エンドポイント３１−１に対応した物理層にデータが転送された場合、中継装置３０は、当該データを、データリンク層を介してトランザクション層に受け渡す。そして、中継装置３０は、トランザクション層において、プラットフォーム１０−５が接続されたエンドポイント３１−５にトンネリングによりデータを転送する。そして、中継装置３００は、トンネリングにより転送されたデータを、データリンク層およびエンドポイント３１−５に対応した物理層を介して、プラットフォーム１０−５の物理層に転送する。
【００５９】
なお、プラットフォーム１０−５は、中継装置３０から転送されたデータを、物理層、データリンク層、およびトランザクション層を介して、ソフトウェアに受け渡す。
【００６０】
このように、実施形態では、中継装置３０のトランザクション層におけるデータのトンネリングにより、プラットフォーム１０−１からプラットフォーム１０−５へのデータの転送が実現される。また、プラットフォーム１０−５からプラットフォーム１０−１へのデータの転送は、上記とは逆の順序でデータが各層を移動することで実現される。
【００６１】
なお、実施形態では、特定のプラットフォーム１０に対して他のプラットフォーム１０からのデータの転送が集中しない場合、異なる任意の複数組のプラットフォーム１０間において並行してデータの転送を実行することも可能である。
【００６２】
すなわち、特定のプラットフォーム１０に対して他のプラットフォーム１０からの複数の通信が集中する場合、中継装置３０は、当該他のプラットフォーム１０からの複数の通信をシリアルに処理する。しかしながら、異なるプラットフォーム１０同士が通信し、特定のプラットフォーム１０に通信が集中しない場合には、中継装置３０は、プラットフォーム１０間の複数の通信を並行して処理することが可能である。
【００６３】
ここで、実施形態において、プラットフォーム１０間でのデータの送受信は、次の図５に示されるような形で、各プラットフォーム１０に設けられる送信用バッファ５０２を介して実行される。なお、図５では、中継装置３０の図示が省略されているが、図４を参照して既に説明した通り、プラットフォーム１０間におけるＤＭＡ（Direct  Memory  Access）によるデータの送受信は、中継装置３０により中継される。
【００６４】
図５は、実施形態にかかる送信用バッファ５０２を介したデータの送受信を説明するための例示的かつ模式的な図である。
【００６５】
図５に示されるように、各プラットフォーム１０は、各プラットフォーム１０に送信するデータを書き込む記憶領域としての送信用バッファ５０２を有している。ここでは、プラットフォーム１０−１〜１０−８がそれぞれ有する送信用バッファ５０２−１〜５０２−８を総称して送信用バッファ５０２と記載している（ただし、図５に図示されているのは送信用バッファ５０２−１および５０２−５のみである）。送信用バッファ５０２は、たとえばメモリ１３上に実現される。
【００６６】
なお、図５に示される例は、上述した図４に示される例と同様、プラットフォーム１０−５からプラットフォーム１０−１へとデータが送信される場合を想定している。したがって、以下では、プラットフォーム１０−５の送信用バッファ５０２−５を介したデータの送受信について主に説明する。
【００６７】
図５に示される例では、まず、ステップＳ５０１において、プラットフォーム１０−５のたとえば仮想ＬＡＮドライバ２０６は、プラットフォーム１０−１へのデータの送信要求を、プラットフォーム１０−５の送信用バッファ５０２−５のうちＳｌｏｔ＃０で示される領域に対して発行する。
【００６８】
ここで、Ｓｌｏｔ＃０で示される領域とは、プラットフォーム１０−１へのデータの送信用の領域である。送信用バッファ５０２−５は、Ｓｌｏｔ＃０で示されるアドレスレンジの他にも、他のプラットフォーム１０へのデータの送信用の複数の領域を有している。
【００６９】
そして、ステップＳ５０２において、プラットフォーム１０−５のブリッジドライバ２１４Ａは、上記の送信要求に応じて、Ｓｌоｔ＃０で示される領域に、プラットフォーム１０−１に送信すべきデータを書き込む。
【００７０】
そして、ステップＳ５０３において、中継装置３０（図５には不図示）は、たとえばＥＰｔｏＥＰ（Endpoint  to  Endpoint）などの処理により、プラットフォーム１０−５に対応したエンドポイント３１−５とプラットフォーム１０−１に対応したエンドポイント３１−１とを接続し、プラットフォーム１０−５からプラットフォーム１０−１へとデータを転送する。
【００７１】
ところで、プラットフォーム１０−５のブリッジドライバ２１４Ａは、上記のステップＳ５０２におけるデータの書き込みが終了すると、プラットフォーム１０−１に対して中継装置３０を介したデータの受信要求を行う。
【００７２】
そして、ステップＳ５０４において、プラットフォーム１０−１のブリッジドライバ２０４Ａは、プラットフォーム１０−５からの受信要求に応じて、中継装置３０を介してプラットフォーム１０−５から転送されたデータを取得し、取得したデータを、メモリ１３−１に設けられるバッファを介して記憶部１４０１に格納する。
【００７３】
このようにして、中継装置３０を介したプラットフォーム１０−５からプラットフォーム１０−１へのデータの送受信が実行される。
【００７４】
なお、図５に示されるように、プラットフォーム１０−１も、プラットフォーム１０−５の送信用バッファ５０２−５と同様の送信用バッファ５０２−１が設けられている。プラットフォーム１０−１は、送信用バッファ５０２−１を利用して、他のプラットフォーム１０へのデータの送信を実行することが可能である。さらに、図５では図示が省略されているが、他のプラットフォーム１０も、同様の送信用バッファ５０２を有している。したがって、実施形態では、任意のプラットフォーム１０間におけるデータの送受信を上記と同様の処理により実現することが可能である。
【００７５】
上記のような処理の流れは、次の図６に示されるようなシーケンス図として表すことができる。
【００７６】
図６は、実施形態にかかるプラットフォーム１０間でのデータの送受信時に情報処理システム１において実行される処理の流れを示した例示的かつ模式的なシーケンス図である。
【００７７】
ここでは、一例として、プラットフォーム１０−５からプラットフォーム１０−１へのデータの送信（転送）について説明する。図６に示される例では、プラットフォーム１０−５の仮想ＬＡＮドライバ２１５およびブリッジドライバ２１４Ａがそれぞれ「送信側仮想ＬＡＮドライバ」および「送信側ブリッジドライバ」として図示され、プラットフォーム１０−１のブリッジドライバ２０４Ａが「受信側ブリッジドライバ」として図示されている。
【００７８】
図６に示されるように、実施形態では、まず、ステップＳ６１０において、送信側仮想ＬＡＮドライバとしての仮想ＬＡＮドライバ２１５は、送信側ブリッジドライバとしてのブリッジドライバ２１４Ａに対して、プラットフォーム１０−１へのデータの送信要求を実行する。
【００７９】
そして、ステップＳ６２０において、ブリッジドライバ２１４Ａは、仮想ＬＡＮドライバ２１５からの送信要求に応じて、プラットフォーム１０−５の送信用バッファ５０２−５のうちプラットフォーム１０−１へのデータの送信用の領域に、送信するデータを書き込み、中継装置３０にプラットフォーム１０−１へのデータの転送を実行させる。このとき、ブリッジドライバ２１４Ａは、送信用バッファ５０２−５のうちのデータが書き込まれた領域を、上書き不可能なロック領域に設定する。
【００８０】
そして、ステップＳ６３０において、ブリッジドライバ２１４Ａは、受信側ブリッジドライバとしてのブリッジドライバ２０４Ａに、中継装置３０を介してデータの受信要求を行う。
【００８１】
そして、ステップＳ６４０において、ブリッジドライバ２０４Ａは、ブリッジドライバ２１４Ａからの受信要求に応じて、送信用バッファ５０２−５から中継装置３０を介して転送されたデータを取得する。このとき、送信用バッファ５０２−５におけるデータの取得が完了した箇所（領域）には、送受信完了のフラグが設定される。
【００８２】
そして、ステップＳ６５０において、ブリッジドライバ２０４Ａは、データの取得の完了に応じて、ブリッジドライバ２１４Ａに、中継装置３０を介して受信完了通知を送信する。
【００８３】
そして、ステップＳ６６０において、ブリッジドライバ２１４Ａは、ブリッジドライバ２０４Ａからの受信完了通知に応じて、送信用バッファ５０２−５のうち書き込まれたデータの送受信が完了した箇所を解放する。なお、送信用バッファ５０２の解放とは、送信用バッファ５０２において上書き不可能なロック領域として設定された領域を、上書き可能なアンロック領域として再設定することである。また、データの送受信が完了しているか否かは、上述した送受信完了のフラグなどに基づいて判定される。
【００８４】
なお、図６に示される例は、あくまで一例である。実施形態では、プラットフォーム１０−５以外の他のプラットフォーム１０のブリッジドライバ２０４Ａまたは２１４Ａが送信側ブリッジドライバになり、プラットフォーム１０−１以外の他のプラットフォーム１０のブリッジドライバ２１４Ａが受信側ブリッジドライバになる場合も考えられる。
【００８５】
ところで、上記のような送信用バッファ５０２を介したデータの送受信においては、送信用バッファ５０２からデータを取得するための受信処理スレッドの実行に関する排他制御を実現するため、セマフォが利用される場合がある。この場合、たとえば、データを受信する側のプラットフォーム１０は、データを送信する側のプラットフォーム１０からの受信要求に応じてセマフォを１つ解放し、受信処理スレッドは、解放されたセマフォを１つ獲得した上でデータの取得を進める。
【００８６】
なお、セマフォとは、並行して動作するプログラムの制御を行うための変数である。本明細書において、セマフォは、情報処理システム１において複数存在するスレッドの動作を制御するために設定される。たとえば、ある特定のスレッド群の実行に、セマフォによる制約をつけたとする。まず、セマフォの初期値が０の状態では、スレッド群は、いずれも動作することができず、待機し続ける状態になる。このとき、スレッド群のいずれか、あるいはそれ以外のプログラムがセマフォを「解放」することで、セマフォがインクリメントされて１となる。セマフォが「解放」されて１になったことを確認したいずれかのスレッドは、セマフォの「獲得」を行うとともにセマフォをデクリメントして０に戻し、動作を開始する。
【００８７】
通常、セマフォを用いたスレッド管理を実施する場合には、動作させたいスレッドの数だけセマフォを解放し、スレッド１つ１つにそれらのセマフォを獲得させる、という形で、スレッドの同時実行数が制御される。また、別の使い方として、動作させたいスレッドの個数が最大１つの場合にセマフォを用いることでスレッドの実行および停止を制御する、という使い方もある。この場合、セマフォが１または０となるよう制御され、セマフォが１であればスレッドが実行され、セマフォが０であればスレッドが停止されることが通常である。
【００８８】
上記を踏まえて、実施形態にかかる情報処理システム１のような、複数のプラットフォーム１０が設けられた構成では、プラットフォーム１０間での通信が頻繁に発生する場合も発生しうる。この場合、解放されるセマフォの数が短時間で膨大なものとなる。これに対して、解放されたセマフォを１つ獲得した上で実行される受信処理スレッドは、通常、中継装置３０を介して転送されるデータを取得できる限り取得する。
【００８９】
したがって、解放されるセマフォの数が膨大なものになっている場合、解放されるセマフォの数と同数の受信処理スレッドを実行すると、取得すべきデータが無いにも関わらず受信処理スレッドが繰り返し実行される可能性がある。その結果、プロセッサ１２のリソースの無駄による通信性能の低下が発生する可能性がある。
【００９０】
そこで、実施形態では、次の図７に示されるような処理に基づき、解放されるセマフォの数の上限を示す閾値が設定されている。
【００９１】
図７は、実施形態にかかるプラットフォーム１０間でのデータの送受信時に受信側のプラットフォーム１０において実行されるセマフォの解放処理の流れを示したシーケンス図である。
【００９２】
図７に示される例も、図５および図６に示される例と同様、プラットフォーム１０−５からプラットフォーム１０−１へのデータの送信（転送）時を想定している。図７に示される例では、プラットフォーム１０−１のＯＳ２０３、ブリッジドライバ２１４Ａ、および仮想ＬＡＮドライバ２１５が、それぞれ、「受信側ＯＳ」、「受信側ブリッジドライバ」、および「受信側仮想ＬＡＮドライバ」として図示されている。
【００９３】
図７に示されるように、実施形態では、まず、ステップＳ７１０において、受信側ＯＳとしてのＯＳ２０３は、受信要求を受け付ける。この受信要求は、上述したステップＳ６３０において送信側ブリッジドライバから送信されるものと同様である。
【００９４】
ＯＳ２０３は、受信要求に応じて、受信側ブリッジドライバとしてのブリッジドライバ２０４Ａを介して、受信側仮想ＬＡＮドライバとしての仮想ＬＡＮドライバ２０６に対して、解放されるセマフォを上記の閾値以下の範囲で制御する処理を起動するよう指示する。より具体的に、ステップＳ７２０において、ＯＳ２０３は、ブリッジドライバ２０４Ａに対して起動の指示を出力し、ステップＳ７３０において、ブリッジドライバ２０４Ａは、仮想ＬＡＮドライバ２０６に対して起動の指示を出力する。
【００９５】
そして、仮想ＬＡＮドライバ２０６は、解放済みのセマフォが閾値未満か否かを判定する。たとえば、閾値をＮとした場合、仮想ＬＡＮドライバ２０６は、解放済みのセマフォがＮ−１以下か否かを判定する。そして、仮想ＬＡＮドライバ２０６は、解放済みのセマフォがＮ−１以下である場合にのみ、ステップＳ７４０の処理を実行する。
【００９６】
ステップＳ７４０において、仮想ＬＡＮドライバ２０６は、セマフォをインクリメントすることで１つ解放する。なお、セマフォは、ＯＳ２０３により管理されるのが通常であるので、セマフォの解放は、たとえばＯＳコールなどを利用して実行される。
【００９７】
ここで、実施形態において、閾値としてのＮは、１に設定されても良いし、１よりも大きい値（たとえば１００）に設定されてもよい。また、閾値としてのＮは、可変の値として設定されてもよい。この場合、閾値としてのＮは、プロセッサ１２の負荷を考慮して設定されうる。たとえば、閾値としてのＮは、プラットフォーム１０の起動時において取得されるプロセッサ１２の性能に応じて設定されうる。なお、プロセッサ１２の負荷は、プラットフォーム１０が稼働する時間帯によっても変動しうるので、閾値としてのＮは、プラットフォーム１０が稼働する時間帯に応じて設定されてもよい。
【００９８】
上記の判定処理において解放済みのセマフォがＮ−１より大きいと判定された場合、または、解放済みのセマフォがＮ−１以下であるとの判定結果に応じて上記のステップＳ７４０の処理が実行された場合、仮想ＬＡＮドライバ２０６は、ブリッジドライバ２０４Ａを介して、ＯＳ２０３に対して処理の完了を通知する。より具体的に、ステップＳ７５０において、仮想ＬＡＮドライバ２０６は、ブリッジドライバ２０４Ａに対して処理の完了を通知し、ステップＳ７６０において、ブリッジドライバ２０４Ａは、ＯＳ２０３に対して処理の完了を通知する。
【００９９】
このように、実施形態では、仮想ＬＡＮドライバ２０６が、解放されるセマフォの数を閾値（たとえばＮ）以下の範囲で制御するセマフォ制御ドライバとして機能する。なお、データの送受信の方向が上記とは逆である場合は、仮想ＬＡＮドライバ２１５が、セマフォ制御ドライバとして機能しうる。セマフォに関する上記の閾値は、たとえばセマフォ制御ドライバにより設定される。
【０１００】
そして、実施形態では、上記のような処理に応じて、解放されたセマフォを獲得するとともにデータの受信を実行するための受信処理スレッドが、次の図８に示されるような流れで実行される。
【０１０１】
図８は、実施形態にかかる受信処理スレッドにおいて実行される処理の流れをシーケンス図的に示した例示的かつ模式的な図である。
【０１０２】
図８に示される処理は、上述した図６のステップＳ６４０に示される処理を詳細に表したものである。したがって、受信処理スレッドを実行する主体は、受信側ブリッジドライバである。図８に示される例では、図６に示される例と同様、プラットフォーム１０−５からプラットフォーム１０−１へのデータの送信（転送）が実行される場合を想定している。
【０１０３】
図８に示されるように、実施形態では、まず、受信側ブリッジドライバとしてのブリッジドライバ２０４Ａは、解放済みのセマフォが１以上であるか否かを判定する。この判定処理は、解放済みのセマフォが１以上であると判定されるまでループする。そして、解放済みのセマフォが１以上であると判定された場合、ステップＳ８１０の処理が実行される。
【０１０４】
ステップＳ８１０において、ブリッジドライバ２０４Ａは、セマフォを１つ獲得し、判定処理のループを抜ける。なお、セマフォの解放と同様、セマフォの獲得も、たとえばＯＳコールなどを利用して実行される。
【０１０５】
そして、ステップＳ８２０において、ブリッジドライバ２０４Ａは、中継装置３０を介して転送されるデータを取得できるだけ取得するための受信処理を実行する。受信処理の完了時には、上述した図６のステップ６５０に示されるような受信完了通知が出力される。そして、上記の判定処理まで処理が戻る。
【０１０６】
以上説明したように、実施形態にかかるセマフォ制御ドライバとしての仮想ＬＡＮドライバ２０６（または２１５）は、送信側ブリッジドライバとしてのブリッジドライバ２１４Ａ（または２０４Ａ）により送信された受信要求に応じてセマフォを制御する。セマフォとは、送信用バッファ５０２からデータを取得するための受信処理スレッドの実行に関する排他制御を実現するためのデータである。セマフォ制御ドライバは、解放済みのセマフォの数と閾値との比較結果に応じて、セマフォを解放するか否かを選択的に切り替える。
【０１０７】
上記のような構成によれば、解放されるセマフォの数を閾値により制限することができる。これにより、プラットフォーム１０間での通信が頻繁に発生する場合に、解放されるセマフォの数が短時間で膨大なものになるのを抑制することができる。その結果、取得すべきデータが無いにも関わらず受信処理スレッドが繰り返し実行される前述したような不都合を抑制し、プロセッサ１２のリソースの無駄による通信性能の低下を抑制することができる。
【０１０８】
なお、実施形態において、上記の閾値は、可変の値として設定されうる。このような構成によれば、可変の閾値により、様々なシチュエーションにおける通信性能の低下の抑制を実現することができる。
【０１０９】
より具体的に、実施形態において、上記の閾値は、データを受信する側のプラットフォーム１０の起動時において取得される当該プラットフォーム１０のプロセッサ１２の性能、または当該プラットフォーム１０が動作する時間帯に応じて設定されうる。このような構成によれば、プロセッサ１２の負荷を適切に考慮して適切な閾値を設定することができる。
【０１１０】
＜変形例＞
なお、上述した実施形態では、各部のＩ／ＯインターフェースとしてＰＣＩｅ（登録商標）が例示されているが、Ｉ／ＯインターフェースはＰＣＩｅ（登録商標）に限定されない。たとえば、各部のＩ／Ｏインターフェースは、データ転送バスによって、デバイス（周辺制御コントローラ）とプロセッサとの間でデータ転送を行える技術であればよい。データ転送バスは、１個の筐体等に設けられたローカルな環境（たとえば、１つのシステムまたは１つの装置）で高速にデータを転送できる汎用のバスであってよい。Ｉ／Ｏインターフェースは、パラレルインターフェース及びシリアルインターフェースのいずれであってもよい。
【０１１１】
Ｉ／Ｏインターフェースは、ポイント・ツー・ポイント接続ができ、データをパケットベースでシリアル転送可能な構成でよい。なお、Ｉ／Ｏインターフェースは、シリアル転送の場合、複数のレーンを有してよい。Ｉ／Ｏインターフェースのレイヤー構造は、パケットの生成及び復号を行うトランザクション層と、エラー検出等を行うデータリンク層と、シリアルとパラレルとを変換する物理層と、を有してよい。また、Ｉ／Ｏインターフェースは、階層の最上位であり１または複数のポートを有するルートコンプレックス、Ｉ／Ｏデバイスであるエンドポイント、ポートを増やすためのスイッチ、および、プロトコルを変換するブリッジなどを含んでよい。Ｉ／Ｏインターフェースは、送信するデータとクロック信号とをマルチプレクサによって多重化して送信してもよい。この場合、受信側は、デマルチプレクサでデータとクロック信号とを分離してよい。
【符号の説明】
【０１１２】
１  情報処理システム
１０、１０−１〜１０−８  プラットフォーム（第１プラットフォーム、第２プラットフォーム）
３０  中継装置
３６  拡張バス
２０４Ａ、２１４Ａ  ブリッジドライバ（第１ブリッジドライバ、第２ブリッジドライバ）
２０６、２１５  仮想ＬＡＮドライバ（セマフォ制御ドライバ）
５０２  送信用バッファ
【要約】
【課題】プラットフォーム間での通信が頻繁に発生する場合における通信性能の低下を抑制する。
【解決手段】本開示の第１態様にかかる情報処理システムは、複数のプラットフォームと、中継装置と、を備える。第１プラットフォームの第１ブリッジドライバは、送信要求に応じて、送信用バッファにデータを書き込むとともに中継装置にデータの転送を実行させ、第２プラットフォームに対して受信要求を送信する。第２プラットフォームのセマフォ制御ドライバは、受信要求に応じて、受信処理スレッドの実行に関する排他制御を実現するためのセマフォを制御する。第２プラットフォームの第２ブリッジドライバは、解放済みのセマフォが存在する場合に、当該セマフォを獲得するとともにデータを取得し、受信完了通知を送信する。セマフォ制御ドライバは、解放済みのセマフォの数と閾値との比較結果に応じて、セマフォを解放するか否かを選択的に切り替える。
【選択図】図７【図１】
0006836088.tif 000002
【図２】
0006836088.tif 000003
【図３】
0006836088.tif 000004
【図４】
0006836088.tif 000005
【図５】
0006836088.tif 000006
【図６】
0006836088.tif 000007
【図７】
0006836088.tif 000008
【図８】
0006836088.tif 000009