(57)【要約】【目的】  複数のカプセル化インターフェースでIOアダプタのDMAエンジンを共有する場合に、カプセル化インタフェース毎にデータ転送帯域を保証するIOアダプタを提供する。【構成】  IOドライバ101はカプセル化インターフェースKI1、KI2の生成状態と設定する帯域情報を保持するカプセル化インターフェース情報テーブル114を持ち、データ転送時にカプセル化インターフェースのディスクリプタを、設定した帯域情報を満たすデータバッファサイズ毎にグループ12111、12112…に分割し、ディスクリプタ登録手段119により一定サイクル時間毎にグループの１つをディスクリプタリング1211にコピーしてDMA転送を行う。このコピー制御のために、IOドライバ101はカプセル化インターフェースのサイクル時間毎のディスクリプタのエントリ数を管理するリング予約情報テーブル115と、ディスクリプタのグループの１つの転送が終了する毎にリング予約情報テーブル115のエントリを更新するリング予約解除手段120を持つ。【選択図】  図１
2008165724.tif 000002
【特許請求の範囲】
【請求項１】
１個以上のDMAエンジンと１個以上のディスクリプタ制御部を持ち、主記憶メモリ上に前記ディスクリプタ制御部に対応したディリプタを保持するためのリングバッファであるディスクリプタリングを形成し、前記DMAエンジンを用いてデータ通信を行うための任意の通信プロトコルをカプセル化したインターフェースであるカプセル化インターフェースを１つ以上生成してデータ通信を行う機能を持ち、かつ情報処理装置を管理する管理ソフトウェアから設定を行うための管理インターフェースを備えたIOアダプタであって、
前記IOアダプタのドライバであるIOドライバ部に、
前記カプセル化インターフェースの情報として、少なくとも前記カプセル化インターフェースを識別するためのカプセル化インターフェース識別子と、前記カプセル化インターフェースが使用する帯域情報とを持つカプセル化インターフェース情報テーブルと、
前記ディスクリプタリングの情報として少なくともディスクリプタリングを使用する前記カプセル化インターフェース毎に所定のサイクル時間あたりに消費するディスクリプタのエントリ数を持つリング予約情報テーブルと、
前記管理ソフトウェアからの前記カプセル化インターフェースの生成要求時に、前記IOアダプタが接続されたネットワーク内で一意なカプセル化インターフェース識別子を生成し、該カプセル化インターフェース識別子と設定する帯域情報とを前記カプセル化インターフェース情報テーブルに保存するカプセル化インターフェース情報テーブル設定手段と、
アプリケーションプログラムからのデータ転送要求時に、データ転送用の制御情報や転送するデータのアドレス情報が書かれたディスクリプタを生成し、アプリケーションプログラムからカプセル化インターフェース識別子を受け取り、前記カプセル化インターフェース識別子に対応した帯域情報をカプセル化インターフェース情報テーブルから取得し、前記帯域情報に基づき帯域を制限するために一定時間毎に転送するデータサイズ毎に作成した前記ディスクリプタを１個以上のディスクリプタグループに分けるディスクリプタ生成手段と、
前記アプリケーションプログラムからのデータ転送要求時に、前記リング予約情報テーブルを参照し前記ディスクリプタリングの空き状況を確認し該データ転送が可能な前記ディスクリプタリングを選択し、該データ転送で使用する前記ディスクリプタリングのディスクリプタのエントリ数をリング予約情報に登録するリング予約手段と、
前記アプリケーションプログラムからのデータ転送要求時に、前記サイクル時間毎に前記リング予約情報テーブルを参照し、前記ディスクリプタリングを使用する前記カプセル化インターフェースの前記ディスクリプタグループの１つを前記ディスクリプタリングにメモリコピーしDMA転送を実行するディスクリプタ登録手段と、
前記ディスクリプタグループのデータ転送終了時に、前記リング予約情報から該当する前記カプセル化インターフェースの予約情報を削除するリング予約解除手段とを持つことを特徴とするIOアダプタ。
【請求項２】
請求項１に記載のIOアダプタにおいて、前記カプセル化インターフェース情報テーブルに、前記カプセル化インターフェースの情報として少なくともデータ転送の優先度を表す優先度情報を持ち、前記アプリケーションプログラムからのデータ転送要求時に、前記リング予約手段は、前記カプセル化インターフェース情報テーブルを参照し、前記優先度情報を基に前記カプセル化インターフェースが使用するディスクリプタリングを選択する機能を持つことを特徴とするIOアダプタ。
【請求項３】
請求項１に記載のIOアダプタにおいて、前記IOドライバ部に、前記アプリケーションプログラムからのデータ転送要求時に前記カプセル化インターフェースに設定された帯域情報を変更する場合に、前記カプセル化インターフェース情報テーブルの該当する前記カプセル化インターフェースの帯域情報を変更し、前記リング予約テーブルの該当する前記カプセル化インターフェースの予約情報を削除する帯域変更手段を持ち、
前記ディスクリプタ生成手段は、前記カプセル化インターフェースに設定された帯域情報を変更する場合に、変更された前記帯域情報に基づき帯域を制限するために一定時間毎に転送するデータサイズ毎に前記作成したディスクリプタを１個以上のディスクリプタグループに分け直す機能を持ち、
前記リング予約手段は、前記カプセル化インターフェースに設定された帯域情報を変更する場合に、前記リング予約情報テーブルを参照し前記ディスクリプタリングの空き状況を確認し該データ転送が可能な前記ディスクリプタリングを再選択し、該データ転送で使用する前記ディスクリプタリングのディスクリプタのエントリ数をリング予約情報に再登録する機能を持つことを特徴とするIOアダプタ。
【請求項４】
請求項１に記載のIOアダプタにおいて、前記管理ソフトウェアにIOアダプタを設定するためのユーザインターフェースを持ち、前記ユーザインターフェースは、前記カプセル化インターフェースの新規作成を設定機能、前記カプセル化インターフェースの削除を設定する機能、前記カプセル化インターフェースの識別子を表示する機能、及び前記カプセル化インターフェースの帯域情報を設定する機能の少なくとも一つを有することを特徴とするIOアダプタ。
【請求項５】
請求項１に記載のIOアダプタにおいて、前記カプセル化インターフェースのディスクリプタのフィールドに、該ディスクリプタと次のディスクリプタとの転送データバッファの物理メモリアドレスが連続であるかを示す物理メモリ連続フィールドを持ち、前記IOアダプタは、少なくとも１つ以上のディスクリプタの履歴を持ち、前記DMAエンジンがDMA転送処理を行う際に、DMA転送処理中のディスクリプタの１つの前のディスクリプタの前記物理メモリ連続フィールドを参照し、物理メモリが連続の場合は、主記憶メモリからDMA転送処理中のディスクリプタの内、転送データバッファの物理メモリアドレス等の不要な部分の読み込みを行わずに、以前のディスクリプタの情報から算出した値を用いてDMA転送処理を行うことを特徴とするIOアダプタ。
【請求項６】
１個以上のDMAエンジンと１個以上のディスクリプタ制御部を持ち、主記憶メモリに前記ディスクリプタ制御部に対応したディリプタを保持するためのリングバッファであるディスクリプタリングを形成し、前記DMAエンジンを用いてデータ通信を行うための任意の通信プロトコルをカプセル化したインターフェースであるカプセル化インターフェースを１つ以上生成してデータ通信を行う機能を持ち、かつ情報処理装置を管理する管理ソフトウェアから設定を行うための管理インターフェースを備えたIOアダプタのデータ転送方法において、
前記カプセル化インターフェースを生成する手順として、
前記管理ソフトウェアから前記カプセル化インターフェース生成の要求を受けると、前記IOアダプタが接続されたネットワーク内で一意なカプセル化インターフェース識別子を生成するステップと、
前記カプセル化インターフェースの情報項目として、前記カプセル化インターフェース識別子と、前記カプセル化インターフェースが使用する帯域情報とを少なくとも持つカプセル化インターフェース情報テーブルに、生成した前記カプセル化インターフェース識別子と前記管理ソフトウェアから指定された帯域情報とを登録するステップと、
生成した前記カプセル化インターフェース識別子を前記管理ソフトウェアに通知するステップとを持つことを特徴とするIOアダプタのデータ転送方法。
【請求項７】
請求項６に記載のIOアダプタのデータ転送方法において、前記カプセル化インターフェースを削除する手順として、前記管理ソフトウェアから前記カプセル化インターフェース削除の要求を受けると、前記カプセル化インターフェース情報テーブルから、削除を要求された前記カプセル化インターフェース識別子に対応した情報を削除するステップと、前記管理ソフトウェアに前記カプセル化インターフェースの削除の完了を通知するステップとを更に持つことを特徴とするIOアダプタのデータ転送方法。
【請求項８】
請求項６に記載のIOアダプタのデータ転送方法において、
前記カプセル化インターフェースを用いたデータ転送の手順として、
アプリケーションプログラムから前記カプセル化インターフェース識別子を指定したデータ転送要求を受けると、前記カプセル化インターフェース情報テーブルから、指定されたカプセル化インターフェース識別子に対応する帯域情報を取得するステップと、
データ転送用の制御情報および転送するデータのアドレス情報が書かれたディスクリプタを生成し、取得した前記帯域情報に基づき一定サイクル時間内に転送するデータサイズに対応したディスクリプタの個数を決定して前記作成したディスクリプタを前記個数ごとのディスクリプタグループに分けるステップと、
情報項目として少なくとも前記ディスクリプタリングを使用するカプセル化インターフェース毎に前記サイクル時間内に消費するディスクリプタのエントリ数を持つリング予約情報テーブルを参照し、前記ディスクリプタリングの空き状況を確認し該データ転送が可能なディスクリプタリングを選択し、前記サイクル時間内にデータ転送で消費するディスクリプタのエントリ数として前記ディスクリプタグループのディスクリプタ個数を前記リング予約情報テーブルに登録するステップとを持ち、
該データ転送の全ディスクリプタのデータ転送処理が終わるまで繰返す手順として、
前記一定サイクル時間毎に、前記ディスクリプタリングが予約できたか確認し、予約できていれば前記リング予約情報テーブルを参照し、前記ディスクリプタリングを使用する前記カプセル化インターフェースの前記ディスクリプタグループの１つを前記ディスクリプタリングにメモリコピーしDMA転送を実行するステップと、
前記ディスクリプタグループのデータ転送終了時に、前記リング予約情報テーブルから該当するカプセル化インターフェースの予約情報を削除するステップと、
該データ転送の全ディスクリプタのデータ転送処理が終わったかを確認するステップとを持つことを特徴とするIOアダプタのデータ転送方法。
【請求項９】
請求項８に記載のIOアダプタのデータ転送方法において、
前記カプセル化インターフェースを用いたデータ転送中に帯域情報を変更する手順として、
前記管理ソフトウェアから前記カプセル化インターフェース識別子を指定して帯域情報の変更要求を受けるステップと
前記カプセル化インターフェース情報テーブルに、変更を要求された前記カプセル化インターフェース識別子に対応する帯域情報を前記管理ソフトウェアから指定された帯域情報に変更するステップと、
前記管理ソフトウェアに前記カプセル化インターフェースの帯域情報の変更の完了を通知するステップと、
前記リング予約テーブルの該当する前記カプセル化インターフェース識別子の予約情報を削除するステップと、
変更された前記帯域情報に基づき、一定サイクル時間内に転送するデータサイズに対応したディスクリプタの個数を再決定して、データ転送要求時に生成したディスクリプタを前記決定した個数毎のディスクリプタグループに分け直すステップと、
前記リング予約情報テーブルを参照し、前記ディスクリプタリングの空き状況を確認し該データ転送が可能な前記ディスクリプタリングを再選択し、前記サイクル時間内にデータ転送で消費する前記ディスクリプタリングのディスクリプタのエントリ数をリング予約情報に再登録するステップとを持つことを特徴とするIOアダプタのデータ転送方法。
【請求項１０】
汎用処理を行う機能を持つ１以上の汎用処理モジュールと、モジュール固有の専用処理機能を持つ１以上の専用処理モジュールと、 前記汎用処理モジュールと専用処理モジュールの管理を行う管理モジュールと、これらモジュール間を接続し通信データのスイッチングを行う１以上のIOスイッチから構成され、それぞれのモジュールは前記IOスイッチを用いて通信するための１以上のIOアダプタを持ち、前記汎用処理モジュールと前記専用処理モジュールを組合わせて１以上の異なる種別の情報プラットフォーム装置を構成する複合型情報プラットフォーム装置において、
前記IOアダプタが、請求項１〜請求項５のいずれかに記載のIOアダプタであることを特徴とする複合型情報プラットフォーム装置。
【請求項１１】
１個以上のDMAエンジンと１個以上のディスクリプタ制御部を持ち、仮想マシンモニター部用の主記憶メモリ上に前記ディスクリプタ制御部に対応したディリプタを保持するためのリングバッファであるディスクリプタリングを形成するIOアダプタであり、前記DMAエンジンを用いてデータ通信を行うための任意の通信プロトコルをカプセル化したインターフェースであるカプセル化インターフェースを１つ以上構成し、前記仮想マシンモニター部が構成する論理パーティション上で稼動するアプリケーションプログラム間でデータ通信を行う機能を持ち、情報処理装置を管理する管理ソフトウェアからIOアダプタの設定を行うための管理インターフェースを持つIOアダプタにおいて、
前記仮想マシンモニター部に、
前記カプセル化インターフェースの情報として少なくとも、前記カプセル化インターフェースを識別するためのカプセル化インターフェース識別子と、前記カプセル化インターフェースが使用する帯域情報と、を持つカプセル化インターフェース情報テーブルと、
前記ディスクリプタリングの情報として少なくともディスクリプタリングを使用する前記カプセル化インターフェース毎に所定のサイクル時間あたりに消費するディスクリプタのエントリ数を持つリング予約情報テーブルと、
前記カプセル化インターフェースの生成要求時に、前記IOアダプタが接続されたネットワーク内で一意なカプセル化インターフェース識別子を生成し、該カプセル化インターフェース識別子と設定する帯域情報とを前記カプセル化インターフェース情報テーブルに保存するカプセル化インターフェース情報テーブル設定手段と、
前記論理パーティション上で稼動する前記アプリケーションプログラムからのデータ転送要求時に、データ転送用の制御情報や転送するデータのアドレス情報が書かれたディスクリプタを生成し、前記アプリケーションプログラムが使用するカプセル化インターフェースのカプセル化インターフェース識別子に対応した帯域情報をカプセル化インターフェース情報テーブルから取得し、前記帯域情報に基づき帯域を制限するために一定時間毎に転送するデータサイズ毎に前記作成したディスクリプタを１個以上のディスクリプタグループに分けるディスクリプタ生成手段と、
前記論理パーティション上で稼動する前記アプリケーションプログラムからのデータ転送要求時に、前記リング予約情報テーブルを参照し前記ディスクリプタリングの空き状況を確認し該データ転送が可能な前記ディスクリプタリングを選択し、該データ転送で使用する前記ディスクリプタリングのディスクリプタのエントリ数をリング予約情報に登録するリング予約手段と、
前記論理パーティション上で稼動する前記アプリケーションプログラムからのデータ転送要求時に、前記サイクル時間毎に前記リング予約情報テーブルを参照し、前記ディスクリプタリングを使用する前記カプセル化インターフェースの前記ディスクリプタグループの１つを前記ディスクリプタリングにメモリコピーしDMA転送を実行するディスクリプタ登録手段と、
前記論理パーティション上で稼動する前記アプリケーションプログラムからのデータ転送要求時に、前記ディスクリプタグループのデータ転送終了時に、前記リング予約情報から該当する前記カプセル化インターフェースの予約情報を削除するリング予約解除手段とを持つことを特徴とするIOアダプタ。
【請求項１２】
請求項１１に記載のIOアダプタにおいて、
前記論理パーティション上で稼動する前記アプリケーションプログラムからのデータ転送要求時に、前記アプリケーションプログラムからカプセル化インターフェース識別子を受け取り、このカプセル化インターフェース識別子に対応した帯域情報をカプセル化インターフェース情報テーブルから取得し、前記帯域情報に基づき帯域を制限するために一定時間毎に転送するデータサイズ毎に前記作成したディスクリプタを１個以上のディスクリプタグループに分けるディスクリプタ生成手段を持つことを特徴とするIOアダプタ。
【請求項１３】
請求項１１に記載のIOアダプタにおいて、前記管理ソフトウェアに前記仮想マシンモニタ部およびIOアダプタを設定するためのユーザインターフェースを持ち、前記ユーザインターフェースは、前記カプセル化インターフェースの新規作成を設定する機能、前記カプセル化インターフェースの削除を設定する機能、前記カプセル化インターフェースの識別子を表示する機能、及び前記カプセル化インターフェースの帯域情報を設定する機能の少なくとも一つを有すること、及び
前記カプセル化インターフェースを前記論理パーティションに割当てを行う機能、割当てを変更する機能、割当てを削除する機能の少なくとも一つを有することを特徴とするIOアダプタ。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、サーバ装置、ストレージ装置、ネットワークスイッチ装置等に代表される情報プラットフォーム装置に搭載されるIOアダプタのデータ転送技術に関して、特に任意のプロトコルをカプセル化して装置間でデータ通信を行うカプセル化インターフェース技術に対して、複数のカプセル化インターフェースの帯域制御に有効な技術に関するものである。
【背景技術】
【０００２】
インターネットサイトに代表されるITシステムでは、システムを構成するサーバ装置、ストレージ装置、クライアント端末等を相互に接続し、様々なプロトコルを用いてデータ通信が行われる。プロトコルの例としては、イーサーネット、ファイバーチャネル、InfiniBandなどがある。このようなデータ通信では、互いに通信を行う各装置にプロトコル専用のIOアダプタを搭載し、IOアダプタの入出力ポート同士をバックプレーンやケーブルで互いに接続する。また、多数の装置を接続する場合には、プロトコル専用のIOスイッチを数段経由して接続する。装置上で動作するアプリケーションプログラムがデータ転送を行う場合は、一般的に装置上で稼動するオペレーションシステム上のプロトコル専用のIOドライバのアプリケーションプログラムインターフェースを用いる。例えば、イーサネットプロトコルの場合は、装置にIOアダプタとしてネットワークインターフェースカード（NIC）を搭載し、IOスイッチとしてイーサーネットスイッチを用い、相互接続用ケーブルとしてはツイストペアケーブルを用いる。またアプリケーションプログラムは、オペレーションシステム上で動作するNICドライバによりデータ通信を行うことができる。このような装置間の通信に用いられるIOアダプタは、一般的に通信性能の向上のためDMA（Direct Memory Access）転送方式が用いられる。DMA転送は、IOアダプタがCPU（Central Processing Unit）を介さずに直接主記憶メモリにアクセスして、データ転送を行う転送方法である。DMA転送を用いるとCPUを使用しないでデータ転送ができるためデータ転送が高速化されるとともに、CPU側にもデータ転送の処理の負荷がかからないという利点がある。
【０００３】
従来のDMA転送を用いた帯域制御技術としては、IOアダプタ部にタイマーカウンタを持ち設定された帯域を満たす間だけDMAエンジンを有効にするという方法が用いられる。なお、この種のデータ転送装置については、特許文献１に記載されている。
【０００４】
近年装置間の通信に用いられるIOインターフェースは、シリアル転送が主流になり物理配線当たりの転送帯域の大容量化が進んでいる。一方、サーバ装置等の装置に搭載されるプロセッサは、マルチコア化によりプロセッサチップ当たりの処理性能が向上している。このため１つのプロセッサチップに複数のアプリケーションプログラムを動作させて用いる使い方が増えている。このように物理配線当たりの転送帯域容量と１プロセッサチップ当たりの処理性能は増加するが、1プロセッサ当たりのI/O物理配線数は増加しない。このため１つの物理配線を論理的に分割し複数のアプリケーションプログラムで共有する必要がある。１つの物理配線を論理的に分割する技術としては、ベースとなるインターフェースに任意のプロトコルをカプセル化して転送するカプセル化インターフェース技術がある。このようなインターフェースとしては、例えばInfiniBandやPCI Express Advanced Switching Interconnectがある。このカプセル化インターフェースをアプリケーションプログラム毎に割り当てることで、１つの物理配線を複数のアプリケーションプログラムで共有して使用することができる。
【０００５】
【特許文献１】特開２００２−１８３０７８号公報
【発明の開示】
【発明が解決しようとする課題】
【０００６】
ところが、従来のカプセル化インターフェース技術では、次のような問題点があることが本発明者により見い出された。カプセル化インターフェース技術に対して、上記のようなDMA転送を用いた帯域制御技術を適用する場合はDMAエンジン単位の帯域制御しかできないため、カプセル化インターフェース毎に帯域制御を行うことができないという課題がある。このため、カプセル化インターフェースをアプリケーションプログラム毎に割り当てても、アプリケーションプログラムに必要な通信帯域を保証することができないという問題が生じる。
【０００７】
そこで本発明では、IOアダプタに構成される複数のカプセル化インターフェースがDMAエンジンを共有していても、それらカプセル化インターフェース毎の帯域を制御するIOアダプタ、およびそのデータ転送方法を提供することを目的とする。
【課題を解決するための手段】
【０００８】
本願で開示する発明の代表的実施例に従えば、１個以上のDMAエンジンと１個以上のディスクリプタ制御部を持ち、主記憶メモリに前記ディスクリプタ制御部に対応したディリプタを保持するためのリングバッファであるディスクリプタリングを形成し、前記DMAエンジンを用いてデータ通信を行うための任意の通信プロトコルをカプセル化したインターフェースであるカプセル化インターフェースを１つ以上構成して、データ通信を行う機能を持ち、かつ情報処理装置を管理する管理ソフトウェアからIOアダプタの設定を行うための管理インターフェースを持つIOアダプタであって、前記IOアダプタのドライバであるIOドライバ部に、前記カプセル化インターフェースの情報として少なくとも、前記カプセル化インターフェースを識別するためのカプセル化インターフェース識別子と、前記カプセル化インターフェースが使用する帯域情報とを持つカプセル化インターフェース情報テーブルと、前記ディスクリプタリングの情報として少なくともディスクリプタリングを使用する前記カプセル化インターフェース毎に所定のサイクル時間あたりに消費するディスクリプタのエントリ数を持つリング予約情報テーブルと、前記管理ソフトウェアからの前記カプセル化インターフェースの生成要求時に、前記IOアダプタが接続されたネットワーク内で一意なカプセル化インターフェース識別子を生成し、該カプセル化インターフェース識別子と設定する帯域情報とを前記カプセル化インターフェース情報テーブルに保存するカプセル化インターフェース情報テーブル設定手段と、アプリケーションプログラムからのデータ転送要求時に、データ転送用の制御情報や転送するデータのアドレス情報が書かれたディスクリプタを生成し、アプリケーションプログラムからカプセル化インターフェース識別子を受け取り、前記カプセル化インターフェース識別子に対応した帯域情報をカプセル化インターフェース情報テーブルから取得し、前記帯域情報に基づき帯域を制限するために一定時間毎に転送するデータサイズ毎に作成した前記ディスクリプタを１個以上のディスクリプタグループに分けるディスクリプタ生成手段と、前記アプリケーションプログラムからのデータ転送要求時に、前記リング予約情報テーブルを参照し前記ディスクリプタリングの空き状況を確認し該データ転送が可能な前記ディスクリプタリングを選択し、該データ転送で使用する前記ディスクリプタリングのディスクリプタのエントリ数をリング予約情報に登録するリング予約手段と、前記アプリケーションプログラムからのデータ転送要求時に、前記サイクル時間毎に前記リング予約情報テーブルを参照し、前記ディスクリプタリングを使用する前記カプセル化インターフェースの前記ディスクリプタグループの１つを前記ディスクリプタリングにメモリコピーしDMA転送を実行するディスクリプタ登録手段と、前記ディスクリプタグループのデータ転送終了時に、前記リング予約情報から該当する前記カプセル化インターフェースの予約情報を削除するリング予約解除手段とを持つことを特徴とするIOアダプタによって上記の新規な課題を解決する。
【０００９】
また、別の観点に従えば、１個以上のDMAエンジンと１個以上のディスクリプタ制御部を持ち、主記憶メモリに前記ディスクリプタ制御部に対応したディリプタを保持するためのリングバッファであるディスクリプタリングを形成し、前記DMAエンジンを用いてデータ通信を行うための任意の通信プロトコルをカプセル化したインターフェースであるカプセル化インターフェースを１つ以上構成してデータ通信を行う機能を持ち、かつ情報処理装置を管理する管理ソフトウェアからIOアダプタの設定を行うための管理インターフェースを備えたIOアダプタのデータ転送方法において、
前記カプセル化インターフェースを生成する手順として、
前記管理ソフトウェアから前記カプセル化インターフェース生成の要求を受けると、前記IOアダプタが接続されたネットワーク内で一意なカプセル化インターフェース識別子を生成するステップと、
前記カプセル化インターフェースの情報項目として、前記カプセル化インターフェース識別子と、前記カプセル化インターフェースが使用する帯域情報とを少なくも持つカプセル化インターフェース情報テーブルに、生成した前記カプセル化インターフェース識別子と前記管理ソフトウェアから指定された帯域情報とを登録するステップと、
生成した前記カプセル化インターフェース識別子を前記管理ソフトウェアに通知するステップとを持つことを特徴とするデータ転送方法により上記の課題を解決する。
【００１０】
更には、前記カプセル化インターフェースを削除する手順として、前記管理ソフトウェアから前記カプセル化インターフェース削除の要求を受けると、前記カプセル化インターフェース情報テーブルから、削除を要求された前記カプセル化インターフェース識別子に対応した情報を削除するステップと、前記管理ソフトウェアに前記カプセル化インターフェースの削除の完了を通知するステップとを持つことを特徴とするデータ転送方法により上記の課題を解決する。
【００１１】
更には、前記カプセル化インターフェースを用いたデータ転送の手順として、アプリケーションプログラムから前記カプセル化インターフェース識別子を指定したデータ転送の要求を受けると、前記カプセル化インターフェース情報テーブルから、指定されたカプセル化インターフェース識別子に対応する帯域情報を取得するステップと、データ転送用の制御情報および転送するデータのアドレス情報が書かれたディスクリプタを生成し、取得した前記帯域情報に基づき一定サイクル時間内に転送するデータサイズに対応したディスクリプタの個数を決定して前記作成したディスクリプタを前記個数ごとのディスクリプタグループに分けるステップと、前記ディスクリプタリングの情報項目として少なくとも前記ディスクリプタリングを使用するカプセル化インターフェース毎に前記サイクル時間内にデータ転送で消費するディスクリプタのエントリ数として前記ディスクリプタグループのディスクリプタのエントリ数を持つリング予約情報テーブルを参照し、前記ディスクリプタリングの空き状況を確認し該データ転送が可能なディスクリプタリングを選択し、前記サイクル時間内にデータ転送で消費するディスクリプタのエントリ数を前記リング予約情報テーブルに登録するステップとを持ち、
該データ転送の全ディスクリプタのデータ転送処理が終わるまで繰返す手順として、前記一定サイクル時間毎に、前記ディスクリプタリングが予約できたか確認し、予約できていれば前記リング予約情報テーブルを参照し、前記ディスクリプタリングを使用する前記カプセル化インターフェースの前記ディスクリプタグループの１つを前記ディスクリプタリングにメモリコピーしDMA転送を実行するステップと、前記ディスクリプタグループのデータ転送終了時に、前記リング予約情報テーブルから該当するカプセル化インターフェースの予約情報を削除するステップと、該データ転送の全ディスクリプタのデータ転送処理が終わったかを確認するステップとを持つことを特徴とするデータ転送方法により上記の課題を解決する。
【発明の効果】
【００１２】
本願において開示される発明のうち、代表的なものによって得られる効果を簡単に説明すれば以下の通りである。
【００１３】
アプリケーションプログラムがカプセル化インターフェースを用いて１つの物理配線を共有する場合に、保証された通信帯域分を使用することが可能となる。
【００１４】
また、カプセル化インターフェース毎の帯域制御をIOドライバまたはVMM部で行うため、IOアダプタのハードウェア論理を減らすことができ、LSIチップ面積を削減できるためLSIコスト削減することができる。
【００１５】
さらに、カプセル化インターフェース毎の粒度の細かい帯域制御を動的に行うことができるため、IOインターフェース内の輻輳を削減でき安定したデータ通信を行うことができる。
【発明を実施するための最良の形態】
【００１６】
以下、本発明の実施の形態を図面に基づいて詳細に説明する。なお、実施の形態を説明するために全図において、同一の部材には原則として同一の符号を付し、その繰り返しの説明は原則として省略する。
【実施例１】
【００１７】
図１は本発明の実施例１のIOアダプタおよびIOドライバのブロック図である。図２は実施例１のIOアダプタを搭載した計算機装置間でのデータ通信の一例を示す説明図である。図２に示すように、本発明のIOアダプタを用いた典型的なデータ通信の構成は、計算機装置1001、1002、1003のそれぞれにIOアダプタ1041、1042、1043を搭載し、オペレーションシステム（OS）1021、1022、1023上でIOアダプタ1041、1042、1043のドライバであるIOドライバ1011、1012、1013が動作する。計算機装置間1001、1002、1003は、それぞれ物理配線PLによりIOスイッチ105に接続され、互いにデータ通信を行うことができる。計算機装置上で動作するアプリケーションプログラム1061、1062、1063、1064がIOアダプタ1041、1042、1043を用いてデータ通信を行う場合は、任意のプロトコルをIOアダプタのベースとなるプロトコルにカプセル化して通信するインターフェースであるカプセル化インターフェースを構成する。図２では、２つのカプセル化インターフェースKI1 2001、カプセル化インターフェースKI2 2002を構成した例を示す。図２２は実施例１のIOアダプタを用いたカプセル化インターフェースのデータパケットの一例を示す説明図である。図２２に示すように、カプセル化インターフェースのKI1、KI2のデータパケットは、少なくともベースとなるプロトコルのヘッダ部2201とカプセル化したプロトコルの全体からなるカプセル化プロトコル部2202から構成され、ベースプロトコルの種類によっては、エラー訂正フィールド等を含むベースプロトコルテイラー部2203から構成される。図２に示す例では、アプリケーションプログラム1061、1063にはカプセル化インターフェースKI1 2001を、アプリケーションプログラム1062、1064にはカプセル化インターフェースKI2 2002を割り当てている。アプリケーションプログラム1061からアプリケーションプログラム1063にデータ転送を行う場合は、アプリケーションプログラム1061がIOドライバ1011に対してデータ転送リクエストを行い、オペレーションシステム1021、IOアダプタ1041を経てカプセル化したデータパケットが転送される。データパケットは、IOアダプタ1041から物理配線PLを通りIOスイッチ105でスイッチングされ、データ転送先の計算機装置1003に搭載されたIOアダプタ1043に到着する。IOアダプタ1043に到着したデータパケットはオペレーションシステム1023、IOドライバ1013を経て、データ転送先のアプリケーションプログラム1063にデータが転送される。ここでは、計算機装置間のデータ転送の例について示したが、計算機装置に限定されるものではなく、例えば、ストレージ装置のRAID（Redundant Arrays of Inexpensive Disks）コントローラやネットワークスイッチ装置のラインカードでも良い。本発明では、上記データ転送でのデータ転送元のIOアダプタに次に説明するような特徴を持つ。図１に示すように、データ転送元の計算機装置1001は、物理配線PLとIOスイッチ105を経由して、データ転送先の計算機装置1002に接続される。管理サーバ108は、システム内の装置である計算機装置1001、1002、IOスイッチ105を管理する管理ソフトウェア109が動作する管理用のサーバである。図２の説明で述べたように、それぞれの計算機装置1001、1002にはIOアダプタ1041、1042が搭載される。図１では、データ転送先の計算機装置1002上で稼動するソフトウェアプログラムについては記載を省略���ているが、実際は図２の説明で述べたような構成になっている。計算機装置1001は、IOアダプタ1041、主記憶メモリ103、オペレーティングシステム102、IOドライバ101、1個以上のデータ転送元のアプリケーションプログラム1061、1062、…から構成されている。IOアダプタ1041には、DMA転送処理を行うDMAエンジン111と1個以上のディスクリプタ制御部1121、1122、…から構成されている。主記憶メモリ103は、DMA転送時に作られるデータ転送方法やデータが格納されたバッファのアドレスを含むディスクリプタ転送順にリングバッファに格納したディスクリプタリング1221、1222、…と、カプセル化インターフェース毎に一時的に作られるディスクリプタ1211、1222から構成されている。ディスクリプタリング1221、1222、…の数は、IOアダプタ1041の動作が有効なディスクリプタ制御部1121、1122、…の数と同じである。ディスクリプタ制御部1121、1122、…は、主記憶メモリ103のディスクリプタリング1221、1222、…に登録されている最初のディスクリプタのアドレスと最後のディスクリプタのアドレスを管理し、DMAエンジン111からデータ転送の要求DSCをされた場合に最初のディスクリプタのアドレスにあるディスクリプタをメモリリードアクセスDRCにより取得し、ディスクリプタの内容に従ったデータ転送処理を行う。DMAエンジン111は、複数のディスクリプタ制御部1121、1122、…をもつ場合は、ディスクリプタ制御部間の調停を行う。調停の方法の例としては、単純なラウンドロビン、ディスクリプタ制御部毎に優先度を持たせて優先度に応じて時分割する方法等があるが特定の方法に限定されるものではない。IOドライバ101は、カプセル化インターフェース情報テーブル設定手段116、ディスクリプタ生成手段117、リング予約手段118、ディスクリプタ登録手段119、リング予約解除手段120を持ち、情報テーブルとして、カプセル化インターフェース情報テーブル114、リング予約情報テーブル115を持つ。
【００１８】
次に実施例１において、IOアダプタ1041を用いたカプセル化インターフェースKI1、KI2のデータ転送方法についてフローチャートを用いて説明する。このデータ転送方法は、実施例１においては、以下の３つの方法から成る。方法（1）は、カプセル化インターフェースKI1、KI2を使用するために生成する方法である（カプセル化インターフェース生成方法）。
方法（2）は、カプセル化インターフェースKI1、KI2を使用を終了するために削除する方法である（カプセル化インターフェース削除方法）。方法（3）は、アプリケーションプログラム1071、1072がカプセル化インターフェースKI1、KI2を使用してデータを転送する方法である（カプセル化インターフェースを使用したデータ転送方法）。以下、各方法について順次説明する。
【００１９】
最初に、方法（1）（カプセル化インターフェース生成方法）について、図１０を用いて説明する。図１０は、実施例１のIOアダプタを用いたカプセル化インターフェース生成方法のフローチャートである。管理ソフトウェア109は、管理インターフェース124によりIOドライバ101に対して計算機装置1001と計算機装置1002間のデータ転送を行うためのカプセル化インターフェースの生成、削除を行う機能を持つ。管理インターフェース124の一例としては、LANを用いた方法があるが特定の方法に限定されるものではない。図１に示す例では、アプリケーションプログラム1061に対してカプセル化インターフェースKI1が割り当てられ、アプリケーションプログラム1062に対してカプセル化インターフェースKI2が割り当てられる。カプセル化インターフェース情報テーブル設定手段116は、管理ソフトウェア109からのカプセル化インターフェースの生成の要求を受けて（ステップS1001）、カプセル化インターフェースに対してシステム内で一意な識別子を生成し（ステップS1002）、カプセル化インターフェースの識別子と管理ソフトウェア109から指定されたカプセル化インターフェースに割り当てるデータ転送帯域情報をカプセル化インターフェース情報テーブル114に登録する（ステップS1003）。ここでのシステムの範囲は、IOスイッチ105で接続されたIOアダプタ1041、1042を搭載した装置群を指す。図１の例では、カプセル化インターフェースの識別子としてKI1、KI2が生成されている。この識別子KI1、KI2は、アプリケーションプログラムがカプセル化インターフェースを使用する際にどのカプセル化インターフェースを使用するか指定するのに必要なため、カプセル化インターフェース情報テーブル設定手段116は、生成したカプセル化インターフェースの識別子（KI1やKI2）を管理ソフトウェア109に通知する（ステップS1004）。
【００２０】
次に、カプセル化インターフェース生成方法について、図１１を用いて説明する。図１１は、実施例１のIOアダプタを用いたカプセル化インターフェース削除方法のフローチャートである。カプセル化インターフェース情報テーブル設定手段116は、管理ソフトウェア109からのカプセル化インターフェースの削除の要求を受けて（ステップS1101）、削除対象のカプセル化インターフェースの情報をカプセル化インターフェース情報テーブル114から削除する（ステップS1102）。カプセル化インターフェース情報テーブル設定手段116は、削除が完了したことを管理ソフトウェア109に通知する（ステップS1103）。
【００２１】
図３は、実施例１のIOドライバ（図１）が有するカプセル化インターフェース情報テーブルを示す説明図である。カプセル化インターフェース情報テーブル114は、表形式で表すと図３の表FT3に示すように、カプセル化インターフェースの識別子K301、カプセル化インターフェースに割り当てるデータ転送帯域情報K302、の列で構成される。図３に示すように、カプセル化インターフェースの識別子KI1には、データ転送帯域情報として10MB/sが、カプセル化インターフェースの識別子KI2には、データ転送帯域情報として50MB/sが、登録されている。
【００２２】
次に、カプセル化インターフェースを使用したデータ転送方法について、図１２を用いて説明する。図１２は、実施例１のIOアダプタによるカプセル化インターフェースを使用したデータ転送方法のフローチャートである。アプリケーションプログラム1061、1062がカプセル化インターフェースKI1、KI2を用いてデータ転送を行う場合は、IOドライバのデータ転送用のアプリケーションプログラムインターフェース1261、1262を用いて、カプセル化インターフェースの識別子1071、1072を指定してデータ転送要求を行う（ステップS1201）。IOドライバ101は、アプリケーションプログラム1061、1062からのデータ転送要求を受けて、ディスクリプタ生成手段117が、カプセル化インターフェース情報テーブル参照127によりカプセル化インターフェース情報テーブル114からカプセル化インターフェースの識別子1071、1072に対応したデータ転送帯域情報K302を取得する（ステップS1202）。また、ディスクリプタ生成手段117は、ディスクリプタ生成要求1281、1282により主記憶メモリ領域103にカプセル化インターフェース毎のディスクリプタ1211、1212を生成する。一般に、一回のデータ転送に複数のディスクリプタが生成される。さらに、上記取得したデータ転送帯域情報K302を基に、下記式を満たすようにディスクリプタをグループ化する（ステップS1203）。
ΣBS＝BW×CT
この式で、ディスクリプタ当りのデータサイズBSはディスクリプタ生成時に各ディスクリプタのデータバッファのサイズで、データ転送帯域BWはデータ転送帯域情報K302から得られる値で、１サイクル時間CTはIOドライバで設定した特定の時間である。すなわち、一定のサイクル時間CT内に転送すべきデータサイズBW×CTに対応したディスクリプタの個数を決定し、その個数毎にディスクリプタをグループ化する。
【００２３】
図１では、12111、12112、12113、12114、…はカプセル化インターフェースKI1のグループ化したディスクリプタであり、12121、12122、12123、…はカプセル化インターフェースKI1のグループ化したディスクリプタである。ディスクリプタ当りのデータサイズが固定の4KB、１サイクル時間CTが1msecの場合は、カプセル化インターフェースKI1の設定されたデータ転送帯域は10MB/secなので、１グループ当りのディスクリプタの個数は、0.001×10×1024／4＝2.56個で整数化してx=3個となる。また、カプセル化インターフェースKI1の設定されたデータ転送帯域は50MB/secなので、１グループ当りのディスクリプタの個数は、0.001×50×1024／4＝12.8個で整数化してy=13個となる。
【００２４】
図４は、図１のIOドライバのカプセル化インターフェースKI1のディスクリプタをグループ化した一例を示す説明図である。また図５は、図１のIOドライバのカプセル化インターフェースKI2のディスクリプタをグループ化した一例を示す説明図である。図４に示すように、カプセル化インターフェースKI1では、グループ当り3個のディスクリプタにグループ化され、KI1グループ１にはディスクリプタ1〜ディスクリプタ3が、KI1グループ2にはディスクリプタ4〜ディスクリプタ6が、KI1グループ１にはディスクリプタ7〜ディスクリプタ9が割り当てられる。また、図５に示すように、カプセル化インターフェースKI2では、グループ当り13個のディスクリプタにグループ化され、KI2グループ１にはディスクリプタ1〜ディスクリプタ13が、KI2グループ2にはディスクリプタ14〜ディスクリプタ26が割り当てられる。
【００２５】
図１７は、図１のIOドライバのカプセル化インターフェースKI1のディスクリプタの一例を示す説明図である。図１７に示すようにカプセル化インターフェースKI1のディスクリプタ1211は、複数のディスクリプタ17011、17012、17013、17014、17015、17016、…から構成される。個々のディスクリプタは、データ転送を行うのに必要な情報を保持するデータ転送制御フィールド1702、ディスクリプタグループ12111、12112の最後のディスクリプタであるかを示すグループ終了フィールド17031、17032、転送データのバッファの先頭アドレスを保持するデータバッファアドレスフィールド1704から構成される。グループ終了フィールドは、グループの最後のディスクリプタ17013、17016の時は、グループ終了フィールド（＝Ｙ）17032であり、グループの最後でないディスクリプタ17011、17012、17014、17015の時は、グループ終了フィールド（＝Ｎ）17031である。グループ終了フィールド（＝Ｙ）17032のときは、DMAエンジン111はデータ転送終了時に転送終了を通知するハードウェア割り込み134を上げる。
【００２６】
次にリング予約手段118は、リング予約要求129によりリング予約情報テーブル115を参照してカプセル化インターフェースのデータ転送が可能なディスクリプタリングを選択し、選択したディスクリプタリングのリング予約情報テーブル115にカプセル化インターフェースが各サイクル時間内に消費するディスクリプタのエントリ数を登録する（ステップS1204）。この登録するエントリ数とは、先のステップS1203で決定した１グループあたりのディスクリプタの個数と等しい。
【００２７】
図６は、図１のIOドライバが有するディスクリプタリング１のリング予約情報テーブルの予約内容を示し、カプセル化インターフェースKI1を予約登録する前の状態を示す。図７は、同じくリング予約情報テーブルの予約内容で、カプセル化インターフェースKI1を予約登録した後の状態を示す。リング予約情報テーブル115は、表形式で表すと図６の表FT61に示すように、サイクル時間の識別子K611、各カプセル化インターフェースが使用するディスクリプタのエントリ数K612、の列で構成される。図６の表FT61は、カプセル化インターフェースKI1を予約登録前であり、カプセル化インターフェースKI2のみが予約されている場合を示したものである。従って、カプセル化インターフェース識別子KI2のエントリ数K6122の列のみが登録されている。上述のようにカプセル化インターフェースKI2のグループ当りのディスクリプタ数は13個なので、各サイクル時間のディスクリプタのエントリ数は13になっている。一方、図７の表FT62は、カプセル化インターフェースKI1を予約登録後のリング予約情報テーブル115を示したものである。図７に示すようにカプセル化インターフェースKI1が使用するディスクリプタのエントリ数K6121の列が追加されている。上述のようにカプセル化インターフェースKI1のグループ当りのディスクリプタ数は3個なので、各サイクル時間のディスクリプタのエントリ数は3になっている。
【００２８】
次にディスクリプタ登録手段119は、一定時間ウェイトすることにより一定サイクル時間CT毎に（ステップS1205）、カプセル化インターフェースKI1、KI2がディスクリプタリングを予約できたか確認する（ステップS1206）。予約ができていない場合は、ステップS1204を再実行する。予約ができている場合は、リング予約情報テーブル参照131によりリング予約情報テーブルから、現在のサイクル時間の識別子（図７のK611）から各カプセル化インターフェースKI1、KI2のディスクリプタのエントリ数K6121、K6122を取得する。この情報を基にディスクリプタ登録手段119は、ディスクリプタコピー要求132により各カプセル化インターフェースのディスクリプタ1211、1212の１つのグループをディスクリプタリング1221、1222にメモリコピー1331、1332を行う（ステップS1207）。図１に示す例では、カプセル化インターフェースKI1のディスクリプタのグループ12111、カプセル化インターフェースKI2のディスクリプタのグループ12121を、ディスクリプタリング1221のリングバッファ領域の1231、1232にメモリコピーをしている。
【００２９】
図９は、実施例１のIOドライバのディスクリプタリングの構成の一例を示す説明図である。図９に示すように、ディスクリプタリング1221の構成は、リングバッファ領域1231にカプセル化インターフェースKI1のディスクリプタのグループ12111のディスクリプタ1〜ディスクリプタ3の3個がコピーされ、リングバッファ領域1232にカプセル化インターフェースKI2のディスクリプタのグループ12121のディスクリプタ1〜ディスクリプタ13の13個がコピーされている。図９に示す例では、カプセル化インターフェースKI1、KI2のみがディスクリプタリング1221を使用しているので、リングバッファの他の領域901は、ディスクリプタのエントリが無い。また、最初のディスクリプタのエントリであるカプセル化インターフェースKI1のディスクリプタ1がディスクリプタリング1221のヘッドポインタHPとなり、最後のディスクリプタのエントリであるカプセル化インターフェースKI2のディスクリプタ13がディスクリプタリング1221のテイルポインタTPとなる。ディスクリプタ登録手段119に一定サイクル時間CTを知らせる方法としては、例えば、図１に示すようなオペレーションシステム102が持つ機能であるシステムタイマ113により一定サイクル時間CT毎にソフトウェア割り込み130を受ける方法がある。しかし、一定サイクル時間CTを通知できる方法であれば良く、特定の方法に限定されるものではない。図１に示す方法以外にも、例えばハードウェアタイマカウンタにより一定サイクル時間CTを計測し、ハードウェア割り込みを受けるという方法もある。ディスクリプタリング1221、1222にディスクリプタを登録することにより、IOアダプタ1041のDMAエンジン111の機能により、転送するデータパケットが生成され、データ転送が行われる。次に一定サイクル時間CTにおけるデータ転送後の後処理として、リング予約解除手段120は、DMAエンジン111からのカプセル化インターフェースKI1、KI2のディスクリプタグループ1231、1232の転送が終了したハードウェア割り込み134を受けて、リング予約情報テーブル更新要求135により、リング予約情報テーブル115の該当するカプセル化インターフェースKI1、KI2のディスクリプタのエントリ数K612を削除する（ステップS1208）。図８は、カプセル化インターフェースK1のディスクリプタのグループ1231のデータを転送後、リング予約解除手段120が予約情報を解除した状態のリング予約情報テーブル115の予約内容を示したものである。図８に示すように、予約情報の解除によりサイクル時間t1のカプセル化インターフェースKI1のディスクリプタのエントリ数K6121が0に変更されている。次にカプセル化インターフェースの全ディスクリプタグループのデータ転送処理が終了したか判断する（ステップ1209）。これにより、全ディスクリプタグループのデータ転送処理が未完了の場合はステップS1205〜ステップS1209を繰り返し実行する。
【００３０】
以上述べた実施例１では、DMAエンジン111を複数のアプリケーションプログラムで共有した場合でも、カプセル化インターフェースKI1、KI2毎にデータ転送帯域を制御することが可能になる。これにより、アプリケーションプログラムがカプセル化インターフェースを用いて１つの物理配線を共有する場合に、保証された通信帯域分を使用することが可能になる。
【実施例２】
【００３１】
次に本発明の実施例２のIOアダプタの構成について図１３を用いて説明する。図１３は、実施例２によるカプセル化インターフェース情報テーブルの一例を示す説明図である。実施例２のIOアダプタは、図１に示す実施例１のIOアダプタと比較してカプセル化インターフェース情報テーブル114の部分が異なる。以下では実施例１と異なる部分を中心に説明する。
【００３２】
図１３に示すように実施例２では、カプセル化インターフェース情報テーブル114に優先度情報K1301が追加される。この優先度情報によりカプセル化インターフェースKI1、KI2間の優先度制御を行う。優先度制御の方法としては、例えば、優先度情報毎にディスクリプタリング1221、1222、…を変え、DMAエンジン111のディスクリプタ制御部1121、1122、…の調停方法に優先度を付けるという方法がある。しかしながら優先度を持たせる方法を特定の方法に限定されるものではない。カプセル化インターフェースKI1、KI2に優先度情報K1301を持たせるため、以下に述べる点が追加される。カプセル化インターフェース生成時に、管理ソフトウェア109は、優先度情報を付加してカプセル化インターフェース生成要求124を行う。さらに、カプセル化インターフェース情報テーブル設定手段116は、カプセル化インターフェースをカプセル化インターフェース情報テーブル114に登録する際に、優先度情報K1301も合わせて登録する。また、カプセル化インターフェースを使用したデータ転送時に、リング予約手段118は、優先度情報K1301を基に使用するディスクリプタリング1221、1222を選択する。ディスクリプタリング1221、1222を選択する方法の例としては、優先度1の場合はディスクリプタリング1221を選択し、優先度2の場合はディスクリプタリング1222を選択する、という方法があるが、特定の方法に限定するものではない。以上述べた実施例２により、優先度情報を基にカプセル化インターフェース間の優先制御を行うことが可能になる。
【実施例３】
【００３３】
次に本発明の実施例３のIOアダプタの構成について図１４、図１５を用いて説明する。図１４は実施例３のIOアダプタおよびIOドライバのブロック図である。図１５は、実施例３のIOアダプタによる帯域情報変更時のカプセル化インターフェースを使用したデータ転送方法のフローチャートである。実施例３のIOアダプタは、図１に示す実施例１のIOアダプタと比較してIOドライバ部分が一部異なる。すなわち、図１４に示すように実施例３のIOドライバ101には帯域変更手段1400が追加される。
【００３４】
帯域情報変更時にアプリケーションプログラム1071、1072がカプセル化インターフェースKI1、KI2を使用してデータを転送する場合について図１５にそって実施例３の動作を説明する。管理ソフトウェア109は管理インターフェース1401によりIOドライバ101に対して、特定のカプセル化インターフェース（ここでは、カプセル化インターフェースKI1とする）の帯域情報の変更を要求する（ステップS1501）。この要求を受けて帯域変更手段1400は、カプセル化インターフェース情報テーブル設定手段116に対して帯域情報の変更要求1402を行い、カプセル化インターフェース情報テーブル設定手段116はカプセル化インターフェース情報テーブル116のカプセル化インターフェースKI1の帯域情報（図３のK302）を変更する（ステップS1502）。次に帯域変更手段1400は、リング予約手段118に対して予約情報の削除要求1404を行い、リング予約手段118はリング予約情報テーブル115からカプセル化インターフェースKI1のディスクリプタのエントリ数（図７のK6121）を削除する（ステップS1503）。次に帯域変更手段1400は、ディスクリプタ生成手段117に対してディスクリプタの再グループ化要求1403を行う。これによりディスクリプタ生成手段117は主記憶メモリ上のカプセル化インターフェースKI1のディスクリプタ1211を変更後の帯域情報を基に再グループ化を行う（ステップS1504）。次に帯域変更手段1400は、リング予約手段118に対してディスクリプタリングの予約要求1404を行い、リング予約手段118はリング予約情報テーブル115を参照しカプセル化インターフェースKI1のデータ転送が可能なディスクリプタリングを選択し、選択したディスクリプタリングのリング予約情報テーブル115にカプセル化インターフェースKI1が各サイクル時間毎に消費するディスクリプタのエントリ数を再登録する（ステップS1505）。その後の動作は、一定サイクル時間TC毎にカプセル化インターフェースKI1、KI2がディスクプタリングを予約できたかを確認し、予約ができている場合はリング予約情報テーブルに記載された各カプセル化インターフェースのサイクル時間毎に消費するディスクリタのエントリ数に従いディスクリプタグループをディスクリプタリング1221にメモリコピーしてDMA転送を実行するというものである。この動作を実現するステップS1205〜ステップS1209の処理については、図１２に示す実施例１のデータ転送動作のステップS1205〜ステップS1209と同じであるため説明を省略する。
【００３５】
以上述べた実施例３により、カプセル化インターフェース毎の粒度の細かい帯域制御をデータ転送途中にも動的に行うことができるため、IOインターフェースの輻輳を削減でき安定したデータ通信を行うことが可能になる。
【実施例４】
【００３６】
次に本発明の実施例４のIOアダプタの構成について図１６を用いて説明する。図１６は、実施例４の管理ソフトウェアのグラフィカルな管理インターフェースを示す説明図である。実施例４におけるIOアダプタの構成は、図１に示す実施例１のIOアダプタと比較して管理ソフトウェアの部分が異なる。以下では実施例１と異なる部分を中心に説明する。実施例４では、管理ソフトウェア109に、図１６に示すIOアダプタ設定用の管理インターフェース1602を持つ。管理ソフトウェア109は、一般的に管理用のディスプレイである管理コンソール1601を持つ。管理インターフェース1602は、IOアダプタ毎のIOアダプタ設定部16031、16032、…を持つ。IOアダプタ設定部16031、16032、…は、それぞれのIOアダプタに構成されるカプセル化インターフェース毎のカプセル化インターフェース設定部16041、16042、16043、16044、新規のカプセル化インターフェースを生成する新規生成設定部16121、16122から構成される。それぞれのカプセル化インターフェース設定部16041、16042、16043、16044は、カプセル化インターフェースのIOアダプタ内の番号を示すインターフェース番号表示部16051、16052、16053、16054、カプセル化インターフェースの識別子を表示するカプセル化インターフェースの識別子表示部16061、16062、16063、16064、カプセル化されるプロトコルの種別を設定するプロトコル種別設定部16061、16062、16063、16064、カプセル化インターフェースに割り当てる帯域情報を設定する帯域情報設定部16081、16082、16083、16084、カプセル化インターフェースに割り当てる優先度情報を設定する優先度情報設定部16091、16092、16093、16094、カプセル化インターフェースを構成する物理経路を設定するパス情報設定部16101、16102、16103、16104、現在構成されているカプセル化インターフェースを削除する削除設定部16111、16112、16113、16114から構成される。
【実施例５】
【００３７】
次に本発明の実施例５のIOアダプタの構成について図１８と図１９を用いて説明する。図１８は、実施例５のIOドライバのカプセル化インターフェースKI1のディスクリプタの一例を示す。図１９は、実施例５のIOアダプタの構成を示す。実施例５におけるIOアダプタの構成は、図１に示す実施例１のIOアダプタと比較してディスクリプタの構成部分とIOアダプタの構成部分のみが異なる。以下では実施例１と異なる部分を中心に説明する。
【００３８】
図１８に示すように実施例５のカプセル化インタフェース(図示したのはKI1)のディスクリプタ1211は、転送データバッファ1802の物理メモリアドレスが該当ディスクリプタと次のディスクリプタの間で連続かどうかを示す物理メモリ連続フィールド18011、18012を含む。連続である場合はそのこと（＝Ｙ）を示す物理メモリ連続フィールド18011が、不連続である場合はそのこと（＝Ｎ）を示す物理メモリ連続フィールド18012が付加される。図１８に示す例では、転送データバッファ1802は、転送データバッファ18031〜18034、および、転送データバッファ18035〜18037が連続であり、これらの間は非連続1804である。これらの転送データバッファの物理メモリアドレスa1〜a7は、ディスクリプタのデータバッファアドレスフィールド17041、17042、…に代入される。転送バッファアドレスの非連続を示すために、ディスクリプタ４ 17014の物理メモリ連続フィールド18012は、非連続を示すものが入力される。その他のディスクリプタでは物理メモリは連続であるので、物理メモリ連続フィールド18011は、連続を示すものが入力される。
【００３９】
次に図１９を用いて、この物理メモリ連続フィールドのIOアダプタ1041内での処理方法について説明する。図１９に示すように、実施例５では、図１の実施例１のIOアダプタ1041の構成に連続メモリ制御部1901が追加される。連続メモリ制御部1901は、ディスクリプタ制御部112からディスクリプタを取得し1902、カプセル化インターフェースKI1のディスクリプタの履歴を少なくとも１つ以上保持して、現在処理しているディスクリプタの１つ前のディスクリプタの物理メモリ連続フィールド17031、17032の値を基に、物理メモリ連続フィールド（＝Ｙ）17031のときは、現在処理しているディスクリプタについては、物理メモリ連続フィールド17031、17032等の最低限必要なフィールドのみを主記憶メモリからリードし、また転送データバッファーのアドレスも１つ前のディスクリプタの物理メモリアドレスから計算したものを使用してDMA転送処理を行う。以上述べた実施例５では、実施例１に示すように転送データバッファをディスクリプタ毎に一定の小さなデータサイズに分割しても、主記憶メモリからディスクリプタや転送データバッファをリードする際にかかるオーバヘッドを削減することが可能になる。
【実施例６】
【００４０】
次に本発明の実施例６のIOアダプタの構成について図２０と図２１を用いて説明する。図２０は実施例６のVMM（Virtual Machine Monitor）に適用した場合のIOアダプタおよびIOドライバのブロック図である。図２１は実施例６の論理パーティション（LPAR）の主記憶メモリとVMMの主記憶メモリの対応関係の一例を示す説明図である。実施例６のIOアダプタの構成は、図１に示す実施例１のIOアダプタと比較して、IOドライバ101、および、オペレーションシステム102の機能部分がVMM 2008に変更になった点と、LPAR 2007の構成が追加された点が異なる。以下では実施例１と異なる部分を中心に説明する。
【００４１】
図２０に示すように、実施例６ではアプリケーションプログラム20031、20032は、VMM 2008の仮想化機能によりLPAR 2007上で動作する。LPAR 2007は、LPAR用の主記憶メモリ2006、ゲストオペレーションシステム2005、ゲストオペレーションシステム向けIOドライバ2004、アプリケーションプログラム20031、20032から構成される。アプリケーションプログラム20031、20032は、カプセル化インターフェースを使用するためカプセル化インターフェースの識別子KI1 1071 、KI2 1072を保持する。ここでのIOドライバ2004は、実施例１でのIOドライバ101が持つ機能は持たない。実施例６では、実施例１でのIOドライバ101およびオペレーションシステム103の機能は、VMM 2008が持つ。すなわち、VMM2008は、カプセル化インターフェース情報テーブル設定手段116、ディスクリプタ生成手段117、リング予約手段118、ディスクリプタ登録手段119、リング予約解除手段120、カプセル化インターフェース情報テーブル114、リング予約情報テーブル115、システムタイマ113から構成される。また、実施例１での主記憶メモリ103は、VMM用の主記憶メモリ2009となる。これ以外の構成については、実施例１と同じである。
【００４２】
次に図２１を用いて、実施例６の論理パーティション（LPAR）の主記憶メモリ2006とVMMの主記憶メモリ2009の対応関係について示す。図２１は、LPAR上のIOドライバ2004がLPAR用の主記憶メモリ2006に仮想ディスクリプタリング2102を持つ場合について示したものである。仮想ディスクリプタリング2102には、カプセル化インターフェースKI1のディスクリプタ2103が構成される。また、2104は仮想ディスクリプタリング2102のリングバッファの内、ディスクリプタのエントリが無い部分である。カプセル化インターフェースKI1のディスクリプタ2103の情報からVMMが持つ仮想メモリ-物理メモリ変換処理2105によりVMM用主記憶メモリに2009に実施例１と同様にカプセル化インターフェースのディスクリプタ1211とグループ化分けが行われる。さらに、実施例１と同様にVMM 2008が持つディスクリプタ登録手段119により物理のディスクリプタリング1221にディスクリプタグループ1231がコピー1331される。ここで示した論理パーティション（LPAR）の主記憶メモリ2006とVMMの主記憶メモリ2009の対応関係は一例であり、特定の方法に限定されるものではない。例えば、LPAR上のIOドライバ2004が仮想ディスクリプタリング2102を持たない場合は、LPAR用主記憶メモリ上の転送データバッファの情報が直接VMMに提供されても良い。以上述べた本特許の第６の実施例により、本特許のIOアダプタの帯域制御方法をVMMで構成したLPAR上のアプリケーションプログラムでも使用することが可能になる。
【実施例７】
【００４３】
次に本発明の実施例７のIOアダプタの構成について図２３を用いて説明する。図２３は、実施例７のVMMに適用した場合のIOアダプタおよびIOドライバの管理ソフトウェアのグラフィカルな管理インターフェースを示す説明図である。実施例７におけるIOアダプタの構成は、図２０に示す実施例６のIOアダプタと比較して管理ソフトウェアの部分が異なる。また、図１６に示す実施例４のIOアダプタ設定用の管理インターフェースと対比すると、各IOアダプタのカプセル化インターファース毎の設定部に、そのカプセル化インターフェースをどのＬＰＡＲに割り当てるかを設定するための手段が追加されている。
【００４４】
以下では、実施例４と異なる部分を中心に説明する。実施例７では、図２３に示すように、管理ソフトウェア109に、VMMおよびIOアダプタ設定用の管理インターフェース2302を持つ。管理インターフェース2302は、IOアダプタ毎のIOアダプタ設定部23031…を持つ。図２３ではIOアダプタ番号１以外のIOアダプタの設定部は図示が省略されている。IOアダプタ設定部23031は、対応するIOアダプタに構成されるカプセル化インターフェース毎のカプセル化インターフェース設定部23041、23042を持つ。カプセル化インターフェース設定部23041、23042には、それぞれインターフェース番号表示部16051、16052、カプセル化インターフェースの識別子表示部16061、16062、プロトコル種別設定部16061、16062、帯域情報設定部16081、16082、優先度情報設定部16091、16092、パス情報設定部16101、16102、並びに、削除設定部16111、16112を含む。これらは、図１６に示す実施例４のIOアダプタ設定用の管理インターフェースと同様である。それに加えて、実施例７ではカプセル化インターフェース毎にどのLPARに割り当てるかを設定する割当てLPAR情報設定部23131、23132、を持つ。このユーザインターフェースにより、カプセル化インターフェースとLPARとの新規割当て、割当て変更、割当て削除が可能となる。
【実施例８】
【００４５】
次に本発明の実施例８のIOアダプタの構成について図２４を用いて説明する。図２４は実施例８のVMMに適用した場合のIOアダプタおよびIOドライバのブロック図である。実施例６のIOアダプタの構成は、図２０に示す実施例６のIOアダプタと比較して、アプリケーションプログラム20031、20032がカプセル化インターフェースの識別子KI1、KI2（図２０の1071, 1072）を保持しない点が異なる。以下では実施例６と異なる部分を中心に説明する。図２４に示すように、実施例８ではVMM 2008にカプセル化インターフェース毎にIOアダプタ1041をエミュレートするインスタンスである仮想IOアダプタ24011、24012を持つ。LPAR 2007上のIOドライバ2004は、仮想IOアダプタ24011、24012を物理的なIOアダプタ1041と同じように使うことが可能である。VMM 2008によりLPAR  2007に対する仮想IOアダプタ24011、24012の割当てが決められているので、アプリケーションプログラム20031、20032が、カプセル化インターフェースを用いて通信を行う場合は特定の仮想IOアダプタ24011、24012に対してデータ転送要求を行う。実施例８では、アプリケーションプログラム20031、20032の代りに仮想IOアダプタ24011、24012がカプセル化インターフェースの識別子KI1 1071 、KI2 1072を保持する。これにより仮想IOアダプタ24011、24012が１つの物理配線を共有する場合に、保証された通信帯域分を使用することが可能になる。これ以外の構成については、実施例６と同じである。なお、図２４では、LPAR 2007と仮想IOアダプタ24011、24012は１対１の場合を記載しているが、N対M（N、Mは1以上の任意の整数）であっても良い。
【００４６】
以上、本発明者によってなされた発明を実施の形態に基づき具体的に説明したが、本発明は前記実施の形態に限定されるものではなく、その要旨を逸脱しない範囲で種々変更可能であることはいうまでもない。
【産業上の利用可能性】
【００４７】
本発明のIOアダプタのデータ転送方法は、サーバ装置、ストレージ装置、ネットワークスイッチ装置等に代表される情報プラットフォーム装置間のデータ通信に適している。
【図面の簡単な説明】
【００４８】
【図１】本発明の実施例１のIOアダプタおよびIOドライバのブロック図である。
【図２】実施例１のIOアダプタを搭載した計算機装置間でのデータ通信の一例を示す説明図である。
【図３】実施例のIOドライバが有するカプセル化インターフェース情報テーブルの一例を示す説明図である。
【図４】実施例１のIOドライバのカプセル化インターフェースKI1のディスクリプタをグループ化した一例を示す説明図である。
【図５】実施例１のIOドライバのカプセル化インターフェースKI2のディスクリプタをグループ化した一例を示す説明図である。
【図６】実施例１のIOドライバが有するディスクリプタリング１のリング予約情報テーブルのカプセル化インターフェースKI1を予約登録前の一例を示す説明図である。
【図７】実施例１のIOドライバが有するディスクリプタリング１のリング予約情報テーブルのカプセル化インターフェースKI1を予約登録後の一例を示す説明図である。
【図８】実施例１のIOドライバが有するディスクリプタリング１のリング予約情報テーブルのカプセル化インターフェースKI1の予約情報解除後の一例を示す説明図である。
【図９】実施例１のIOドライバのディスクリプタリング１の構成の一例を示す説明図である。
【図１０】実施によるカプセル化インターフェース生成方法のフローチャートである。
【図１１】実施例１によるカプセル化インターフェース削除方法のフローチャートである。
【図１２】実施例１によるカプセル化インターフェースを使用したデータ転送方法のフローチャートである。
【図１３】本発明の実施例２によるカプセル化インターフェース情報テーブルの一例を示す説明図である。
【図１４】本発明の実施例３のIOアダプタおよびIOドライバのブロック図である。
【図１５】実施例３態による帯域情報変更時のカプセル化インターフェースを使用したデータ転送方法のフローチャートである。
【図１６】本発明の実施例４の管理ソフトウェアのグラフィカルな管理インターフェースを示す説明図である。
【図１７】実施例１のIOドライバのカプセル化インターフェースKI1のディスクリプタの一例を示す説明図である。
【図１８】本発明の実施例５のIOドライバのカプセル化インターフェースKI1のディスクリプタの一例を示す説明図である。
【図１９】実施例５のIOアダプタの構成を示すブロック図である。
【図２０】本発明の実施例６のVMM（Virtual Machine Monitor）に適用した場合のIOアダプタおよびIOドライバのブロック図である。
【図２１】実施例６による論理パーティション（LPAR）の主記憶メモリとVMMの主記憶メモリの対応関係の一例を示す説明図である。
【図２２】実施例１のIOアダプタを用いたカプセル化インターフェースのデータパケットの一例を示す説明図である。
【図２３】本発明の実施例７の管理ソフトウェアのグラフィカルな管理インターフェースを示す説明図である。
【図２４】本発明の実施例８のVMM（Virtual Machine Monitor）に適用した場合のIOアダプタおよびIOドライバのブロック図である。
【符号の説明】
【００４９】
1001、1002、1003                          計算機装置
101、1011、1012、1013              IOドライバ
102、1021、1022、1023              オペレーションシステム
103                     主記憶メモリ
104、1041、1042、1043              IOアダプタ
105                     IOスイッチ
1061、1062、…     アプリケーションプログラム
1072、1072         カプセル化インターフェース識別子
108                     管理サーバ
109                     管理ソフトウェア
111                     DAMエンジン
1121、1122、…     ディスクリプタ制御部
113                     オペレーションシステムのシステムタイマ
114                     カプセル化インターフェース情報テーブル
115                     リング予約情報テーブル
116                     カプセル化インターフェース情報テーブル設定手段
117                     ディスクリプタ生成手段
118                     リング予約手段
119                     ディスクリプタ登録手段
120                     リング予約解除手段
1211                   カプセル化インターフェースKI1のディスクリプタ
12111、12112、12113、12114        カプセル化インターフェースKI1のディスクリプタグループ
1212                   カプセル化インターフェースKI2のディスクリプタ
12121、12122、12123、12124        カプセル化インターフェースKI2のディスクリプタグループ
1221、1222、…     ディスクリプタリング
1231、1232         ディスクリプタリングに登録されたカプセル化インターフェースKI1、KI2のディスクリプタグループ
124                     管理インターフェース
125                     カプセル化インターフェース情報テーブル更新要求
1261、1262         IOドライバのデータ転送用のアプリケーションプログラムプログラムインターフェース
127                     カプセル化インターフェース情報テーブル参照
1281、1282         ディスクリプタ生成要求
129                     リング予約要求、
130                     システムタイマ113からの一定サイクル時間CT毎にソフトウェア割り込み
131                     リング予約情報テーブル参照
132                     ディスクリプタコピー要求
1331、1332         ディスクリプタグループのディスクリプタリングへのコピー
134                     ディスクリプタグループのデータ転送処理の終了を通知するハードウェア割り込み
135                     リング予約情報テーブル更新要求
2001、2002         カプセル化インターフェースKI1、KI2
1400                   帯域変更手段
1401                   管理インターフェース
1402                   帯域情報の変更要求
1403                   ディスクリプタの再グループ化要求
1404                   ディスクリプタリングの予約要求
1601                   管理コンソール
1602                   管理インターフェース
16031、16032、…               IOアダプタ設定部
16041、16042、16043、16044        IOアダプタに構成されるカプセル化インターフェース毎のカプセル化インターフェース設定部
16051、16052、16053、16054        カプセル化インターフェースのIOアダプタ内の番号を示すインターフェース番号表示部
16061、16062、16063、16064        カプセル化インターフェースの識別子を表示するカプセル化インターフェースの識別子表示部
16071、16072、16073、16074        カプセル化されるプロトコルの種別を設定するプロトコル種別設定部
16081、16082、16083、16084        カプセル化インターフェースに割り当てる帯域情報を設定する帯域情報設定部
16091、16092、16093、16094        カプセル化インターフェースに割り当てる優先度情報を設定する優先度情報設定部
16101、16102、16103、16104        カプセル化インターフェースを構成する物理経路を設定するパス情報設定部
16111、16112、16113、16114        現在構成されているカプセル化インターフェースを削除する削除設定部
16111、16112                   新規のカプセル化インターフェースを生成する新規生成設定部
17011、17012、17013、17014、17015、17016            カプセル化インターフェースのディスクリプタ
1702                   データ転送を行うのに必要な情報を保持するデータ転送制御フィールド
17031、17032                   グループ終了フィールド
1704                   データバッファアドレスフィールド
18011、18012                   物理メモリ連続フィールド
1802                   転送データバッファ
18031、18032、18033、18034、18035、18036、18037 ディスクリプタ単位の転送データバッファ
1804                   転送データバッファの非連続部分
1901                   連続メモリ制御部
1902                   ディスクリプタを取得
1903                   物理メモリ連続の制御
20031、20032                   アプリケーションプログラム
2004                   ゲストオペレーションシステム向けIOドライバ
2005                   ゲストオペレーションシステム
2006                   LPAR用の主記憶メモリ
2007                   LPAR
2008                   VMM
2009                   VMM用の主記憶メモリ
2102                   仮想ディスクリプタリング
2103                   カプセル化インターフェースKI1のディスクリプタ
2104                   仮想ディスクリプタリング2102のリングバッファの内、ディスクリプタのエントリが無い部分
2105                   VMMが持つ仮想メモリ-物理メモリ変換処理
2201                   ベースプロトコルのヘッダ部
2202                   カプセル化プロトコル部
2203                   ベースプロトコルテイラー部
2302                   管理インターフェース
23031、23032                   IOアダプタ設定部
23041、23042    IOアダプタに構成されるカプセル化インターフェース毎のカプセル化インターフェース設定部
23131、23132    割当てLPAR情報設定部
24011、24012                   仮想IOアダプタ
FT3                     カプセル化インターフェース情報テーブル
K301                   カプセル化インターフェースの識別子
K302                   データ転送帯域情報
FT61                   リング予約情報テーブル（カプセル化インターフェースKI1を予約登録前）
FT62                   リング予約情報テーブル（カプセル化インターフェースKI1を予約登録後）
FT63                   リング予約情報テーブル（カプセル化インターフェースK1のディスクリプタのグループ1231のデータを転送後）
K611                   サイクル時間の識別子
K612、K6121、K6122                      カプセル化インターフェースが使用するディスクリプタのエントリ数
a1、a2、a3、a4、a5、a6、a7            転送データバッファの物理メモリアドレス
PL                       物理配線
DSC                     DMAエンジン111からデータ転送の要求
DRC                     メモリリードアクセス
x                         カプセル化インターフェースKI1のグループ当りのディスクリプタ個数
y                         カプセル化インターフェースKI2のグループ当りのディスクリプタ個数
BS                       ディスクリプタ当りのデータサイズ
BW                       データ転送帯域
CT                       １サイクル時間。
【図１】
2008165724.tif 000003
【図２】
2008165724.tif 000004
【図３】
2008165724.tif 000005
【図４】
2008165724.tif 000006
【図５】
2008165724.tif 000007
【図６】
2008165724.tif 000008
【図７】
2008165724.tif 000009
【図８】
2008165724.tif 000010
【図９】
2008165724.tif 000011
【図１０】
2008165724.tif 000012
【図１１】
2008165724.tif 000013
【図１２】
2008165724.tif 000014
【図１３】
2008165724.tif 000015
【図１４】
2008165724.tif 000016
【図１５】
2008165724.tif 000017
【図１６】
2008165724.tif 000018
【図１７】
2008165724.tif 000019
【図１８】
2008165724.tif 000020
【図１９】
2008165724.tif 000021
【図２０】
2008165724.tif 000022
【図２１】
2008165724.tif 000023
【図２２】
2008165724.tif 000024
【図２３】
2008165724.tif 000025
【図２４】
2008165724.tif 000026