JP4317348B2 - 情報処理装置及び入出力方法並びにプログラム - Google Patents
情報処理装置及び入出力方法並びにプログラム Download PDFInfo
- Publication number
- JP4317348B2 JP4317348B2 JP2002139572A JP2002139572A JP4317348B2 JP 4317348 B2 JP4317348 B2 JP 4317348B2 JP 2002139572 A JP2002139572 A JP 2002139572A JP 2002139572 A JP2002139572 A JP 2002139572A JP 4317348 B2 JP4317348 B2 JP 4317348B2
- Authority
- JP
- Japan
- Prior art keywords
- adapter
- state
- processes
- scheduler
- interrupt
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Expired - Fee Related
Links
Images
Classifications
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L47/00—Traffic control in data switching networks
- H04L47/50—Queue scheduling
- H04L47/62—Queue scheduling characterised by scheduling criteria
- H04L47/625—Queue scheduling characterised by scheduling criteria for service slots or service orders
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L49/00—Packet switching elements
- H04L49/90—Buffering arrangements
Landscapes
- Engineering & Computer Science (AREA)
- Computer Networks & Wireless Communication (AREA)
- Signal Processing (AREA)
- Computer And Data Communications (AREA)
- Data Exchanges In Wide-Area Networks (AREA)
Description
【発明の属する技術分野】
本発明は入出力アダプタ、特にディスク装置、ネットワーク等を、コンピュータ等に接続し、そのディスク装置やネットワークに使用するプロトコルを処理するアダプタに関する。
【0002】
【従来の技術】
ディスク接続方法やネットワークは、複数の種類が存在し、イーサネット(登録商標)、Fibre Channel、ATM、パラレルSCSIがその例である。
【0003】
これらのディスク接続方法やネットワークをホスト(コンピュータ)等の情報処理装置に接続するとき、ホストの内部I/Oバスと、ディスク接続方法やネットワークを結ぶアダプタを使用する。
【0004】
パーソナルコンピュータにおいては、PCIバスとイーサネットを結ぶネットワークアダプタがそのアダプタの一例である(PCIバスのコネクタに接続するカードという形式のアダプタが良くあるが、マザーボードにこれらのコンポーネントを直接組み付ける例もあり、この場合にもアダプタと呼ぶ)。
【0005】
図6を使用してコンピュータシステムのアダプタ、そしてオペレーティングシステム(以下、OS)のカーネルとプロセスの動作を説明する。
【0006】
本願明細書では、説明を分かりやすくするためにネットワークアダプタ、そしてネットワークでの通信に極めて一般的に使用されているTCP/IPプロトコル(W. Richard Stevens, “UNIX Network Programming,” Prentice Hall, U.S.A., 1990, ISBN 0-13-949876-1参照、以下参考文献1と呼ぶ)の通信の場合を中心に説明する。そして、TCP/IPで通信するためのソケットAPI(Application Programming Interface、プロセスがコンピュータやオペレーティングシステムのある機能を用いるために呼び出す関数の集合)を例に使用する(参考文献1参照)。また、OSとしてはLinuxカーネル(D. P. Bovet, M. Cesati, “Understanding the Linux Kernel,” O’Reilly & Associates, 2001, ISBN 0-596-00002-2参照、以下参考文献2と呼ぶ)を例にすることがある。なお、本発明においてはネットワークアダプタ、TCP/IPプロトコル、ソケットAPIやLinuxカーネルに制限されるものではない。
【0007】
まず、図6の場合、ホスト1の複数のプロセス(プログラム)31、32がアダプタ2を使用して通信する(図6と今後の図にネットワーク上の通信相手を図示しない)。カーネル4は、アダプタ2を制御し、プロセス31、32のデータと制御の多重化(マルチプレクシング、デマルチプレクシング)をする。次にこの多重化を説明する。
【0008】
まず、データの多重化について説明する。アダプタ2は複数のプロセス31、32のデータをまとめて送受信するため、カーネル4はバッファ45を介して複数プロセス31、32とアダプタ2の間でデータの多重化を行う。まず、受信処理について説明する。アダプタ2はネットワークからパケットを受信したとき、そのパケットをカーネル4のバッファ45に書き込む(アダプタは、DMAで主記憶の書き込み/読み出しができる)。
【0009】
そして、アダプタ2が受信完了のときに割り込みを起こし、その割り込みを、このアダプタ2の割り込み処理47のコードが処理し、デバイスドライバ46を呼び出す。デバイスドライバ46がバッファ45を読み出し、パケットの通信プロトコルを調べ、このプロトコル(この例ではTCP/IP)のプロトコル処理43を呼び出す。
【0010】
TCP/IPでは、予め確立された論理接続の上でデータを通信する。プロトコル処理43はTCP/IP処理を行うために、通信の状態の管理と、論理接続とプロセスとの連携などを記録するプロトコル処理表44を持つ。プロトコル処理43は、受信したデータの宛先となるプロセス31、32を調べ、このデータをこのプロセス31、32のバッファ33、34にそれぞれコピーし、受信したデータのバッファ45の領域を開放し、受信処理を完了する。
【0011】
送信処理はほぼ逆方向の処理を行う。まず、プロセス31、32が送信データ33、34を指定してプロトコル処理43を呼び出す。プロトコル処理43がそのデータ33、34をバッファ45にコピーし、このバッファ45上でパケットを組み立て、デバイスドライバ46を呼び出す。デバイスドライバ46がアダプタ2を制御し、パケットを送信させる。送信が完了したとき、アダプタ2が割り込みを起こし、この割り込みを割り込み処理47と、デバイスドライバ46が処理し、デバイスドライバ46が送信されたパケットのバッファ45の領域を開放する。
【0012】
次にプロセス制御の多重化を説明する。図6において、アダプタ2は複数のプロセス31、32に関する割り込みをまとめて起こすため、カーネル4が各プロセス31、32のプロセス制御のために割り込みの多重化も行う(この処理は普段「多重化」と呼ばれないが、データの多重化との類似を指摘するためにこの明細書はこの用語を使用する)。
【0013】
プロセス制御は主に、次に説明するプロセス状態の変更を行う。各プロセスは複数の状態があり、「実行中」(どれかのCPUがこのプロセスを実行しているという状態)、「実行可能」(プロセスが実行できるが、CPUが実行していない状態)、「I/O待ち」(プロセスが送受信などの完了を待っている状態)がその例である(参考文献2参考。Linuxのプロセスはこれらの状態があるが、Linuxのtask#structの状態は上記の3つの状態に一対一対応しない)。
【0014】
カーネル4が送受信時に各プロセス31、32の状態を管理し、プロセステーブル42に状態を記録する。
【0015】
図8に受信処理のタイムチャートを例にする。プロセス31、32がソケットAPIのブロッキング呼び出し(データ受信完了まで待つ)を使用したとき、カーネル4のプロトコル処理43が呼ばれる(800)。プロトコル処理43ではデータが受信されていない場合、カーネル4のスケジューラ41を呼び出し(801)プロセス31、32を実行中状態からI/O待ち状態に変更する。
【0016】
アダプタ2はデータ受信完了のときに割り込みを起こす(802)。割り込み処理47、デバイスドライバ46とプロトコル処理43が呼び出され(803、804)、プロトコル処理43は上記受信処理の中でどのプロセス31、32がこの受信に対応するかを調べ、状態変更が必要である場合にスケジューラ41を呼び出す(805)。スケジューラ41がデータを送受信したプロセス31、32を実行可能状態にする。
【0017】
その後(実行可能状態になった直後か、一つあるいは複数のタイマー5割込み(後述)の後)、このプロセス31、32が実行中状態となり(806)、受信処理を完了する(807)。
【0018】
なお、送受信に関わらず、タイマー5が定期的に割り込みを起こし(Linuxでは100Hz、参考文献1の140ページ参照)、タイマー処理48の後にスケジューラが呼ばれ(参考文献1の133及び142ページ参照)、必要があればスケジューラ41が実行可能と実行中プロセス31、32の中のどれを実行中、実行可能にするかを選択する。この処理でカーネルがタイムシェアリングを実現する。
【0019】
近年、ネットワーク性能がサーバ処理能力を大きく上回って向上してきた結果、TCP/IPプロトコルの処理がボトルネックとして顕在化してきた。
【0020】
その対策として、アダプタでのプロトコル処理の2つの方式、すなわちTCP/IPのハードウェア化(J. Hufferd, “The Outboarding of TCP/IP," e-Commerce Infrastructure Technology Conference and Tradeshow, February 2001, Monterey, U.S.A.参照)と、論理接続などのTCP/IP相当の機能を独自プロトコルで実現するInfiniBandネットワーク(InfiniBand Architecture Specification Volume 1 Release 1.0.a参照)が開発されてきた。
【0021】
図7にInfiniBandアダプタを例にしてプロトコルを処理するアダプタ600を説明する。
【0022】
このアダプタ600は、論理接続の通信エンドポイント610〜630で、各論理接続の処理と通信状態の管理をする(InfiniBandでは、この通信エンドポイントをQueue Pairと呼び、以下QPと略す)。
【0023】
プロセス31、32がプロトコル処理49とデバイスドライバ50を介して論理接続を確立するが、確立後にカーネル4を介さないでエンドポイント610〜630を直接アクセスする(プロトコル処理49、プロトコル処理表40、デバイスドライバ50はプロトコル処理43、プロトコル処理表44、デバイスドライバ46と同等であるが、前者のプロトコル処理は後者のプロトコル処理を含めず、接続管理の機能のみを含む)。
【0024】
そして、アダプタ600はプロセス31、32のデータ33、34を直接送受信するために複数の通信エンドポイント610〜630の多重処理64を行う。このため、アダプタ600の場合、カーネル4でなく、アダプタ600がデータの多重化を行う。
【0025】
InfiniBandアダプタ600を直接駆動するにはソケットと異なったAPIを使用するが、InfiniBand向けAPIにもブロッキング呼び出しが存在すると考えられる(これらのAPIは現在規格化中である)。
【0026】
上記図7のInfiniBandアダプタ600における処理を、上記図8のタイムチャートを用いて説明すると、アダプタ600がデータ送受信のプロトコル処理をするため、ブロッキング呼び出し(800)のときにプロトコル処理49がスケジューラ41の呼び出しをする(変形例としてここでは、特別なシステムコールを設ければ、プロセス31、32が直接スケジューラを呼べる)。送受信完了のときにアダプタ600が割込みを起こす(802)。
【0027】
【発明が解決しようとする課題】
上記図7の従来例においては、プロトコルを処理するアダプタ600は、データ送受信時にカーネル4をバイパスして、プロトコル処理43のバイパス、そしてプロセス31、32のバッファ33、34とバッファ45とのデータコピーをなくすことなどにより、CPU負荷を削減し、通常のアダプタ2(図6)のボトルネックの一部を解決する。
【0028】
しかしながら、プロトコルを処理するアダプタ600がデータの多重化を処理する一方、制御の多重化を行っていない。例えば、プロセス31、32がソケットAPIのブロッキング受信呼び出しを使用したとき、割り込みに関する処理、すなわち割り込み処理47、デバイスドライバ50、プロトコル処理49、スケジューラ41の処理(802〜805)が必要である。その結果、データ通信がカーネル4をバイパスする一方、制御はカーネル4をバイパスしないため、ボトルネックの一部が残ってしまう。
【0029】
つまり、アダプタ600は送受信が完了すると、割り込み処理47を行って、プロトコル処理49、スケジューラ41を呼び出し、データ送受信待ち(I/O待ち)となっていたプロセス31、32を実行可能にする訳であるが、図7で示したように、複数のエンドポイント610〜630で送受信が完了する度に割り込み処理を行う必要があるため、各プロセスが「I/O待ち」から「実行可能」となるまでに処理時間を要し、このためデータの多重化のみでは、アダプタ600における通信処理のオーバーヘッドを解消できない、という問題があった。
【0030】
そこで本発明は、上記問題点に鑑みてなされたもので、データの多重化を行うとともに割り込み処理にかかる時間を低減して、入出力の高速化を図ることを目的とする。
【0031】
【課題を解決するための手段】
本発明は、1つ以上のCPUと、主記憶手段と、外部装置または外部ネットワークとのデータ入出力を行うためのInfiniBandアダプタとを備えた情報処理装置が、オペレーティングシステム上で複数のアプリケーションを実行し、当該アプリケーションと前記InfiniBandアダプタとの間で通信を行う入出力方法において、前記アプリケーションの各々に、前記InfiniBandアダプタ上の通信エンドポイントを割り当て、各アプリケーションと前記InfiniBandアダプタに割り当てた通信エンドポイントとの間の論理接続をそれぞれ確立するステップと、前記論理接続のそれぞれが確立したときに、前記エンドポイントのそれぞれに対応して設けられた状態変更機構に対し、前記オペレーティングシステム内のスケジューラが管理するプロセステーブル内の、当該通信エンドポイントの接続相手である前記アプリケーションの状態を示す主記憶アドレスを記録するステップと、前記論理接続のひとつのデータの送受信時に、前記論理接続に対応するアプリケーションがブロッキング呼び出しを使用した場合に、前記オペレーティングシステムに含まれるプロトコル処理により、前記プロセステーブルに記録した前記アプリケーションの状態をIO待ち状態に変更するステップと、前記InfiniBandアダプタが、前記論理接続のデータ送受信を完了したときに、当該論理接続に対応する前記状態変更機構内に記録した主記憶アドレスにより前記接続相手であるアプリケーションの状態を示すエントリを特定して、当該エントリの値を「実行可能」を示す値に変更するステップと、前記InfiniBandアダプタが起動する割り込み、もしくはタイマ割り込みにより、前記スケジューラを呼び出し、前記通信相手であるアプリケーションを実行させるステップと、を含む。
【0032】
すなわち、プロセス31、32がブロッキング呼び出しをし、この呼び出しに関する送受信が完了したとき、アダプタ6がこのプロセス31、32のプロセステーブル42の状態を実行可能にする。このため、割り込みとカーネル4の処理なしでプロセス31、32の状態を変更できる。このプロセス31、32はその後のタイマー処理48によるスケジューラ41の実行時に実行中になる。
【0033】
一方、ホスト1にアイドル状態のCPUがあれば、性能を向上するために送受信完了時に実行可能になったプロセス31、32をすぐに実行中にする必要がある。このため、アイドル状態のCPUがあれば割り込みを起こす。割り込み処理の後にスケジューラ41が呼ばれ、このプロセス31、32が実行中になる。
【0034】
【発明の効果】
したがって本発明は、入出力動作が要求されると、InfiniBandアダプタによる入出力動作を実行するとともに、要求した処理を実行待ち(I/O待ち)状態にする。そして、InfiniBandアダプタは入出力動作が完了すると、処理の状態を直接的に実行待ち状態から実行可能状態へ変更するため、入出力動作が完了した時点から処理が再び実行されるまでの処理時間を短縮でき、入出力処理の高効率化による高速化を図ることが可能となるのである。
【0035】
【発明の実施の形態】
以下、本発明の一実施形態を添付図面に基づいて説明する。
【0036】
図1は、前記従来例の図7に示したInfiniBandアダプタに、本発明を適用した一例を示す。
【0037】
ホスト(コンピュータ)1のオペレーティングシステム上で稼働する複数のプロセス31、32(アプリケーション)が、InfiniBandアダプタ6を使用して、ホスト1の外部とネットワーク7を介して通信するもので、オペレーティングシステム(以下、OS)のカーネル4は、InfiniBandアダプタ6を制御して、プロセス31、32のデータ33、34と制御の多重化(マルチプレクシング、デマルチプレクシング)を行う。
【0038】
ここで、ホスト1のハードウェア構成の概略を図2に示す。
【0039】
ホスト1には、複数のCPU(プロセッサ)101、102がCPUバス103を介してメモリーコントローラ104に接続され、また、メモリーバス105を介してメモリーコントローラ104はメモリー106に接続されており、CPU101、102または他のデバイスからメモリー106のアクセスを行う。
【0040】
さらに、メモリーコントローラ104は、内部I/Oバス107を介してInfiniBandアダプタ6に接続され、CPU101、102は外部のネットワーク7と通信可能となる。
【0041】
なお、メモリーコントローラ104には、割り込みコントローラなどが含まれ、メモリー106が主記憶となる。また、CPU101、102は論理的に独立している仮想プロセッサで構成してもよい。
【0042】
図1において、アダプタ6は、論理接続の通信エンドポイント(Queue Pairで、以下QP)61〜63で、各論理接続の処理と通信状態の管理をする。
【0043】
プロセス31、32がプロトコル処理49とデバイスドライバ50を介して論理接続を確立するが、論理接続の確立後にはカーネル4を介さないでエンドポイント61〜63を直接アクセスする。
【0044】
そして、アダプタ6はプロセス31、32のデータ33、34を直接送受信するために複数の通信エンドポイント61〜63の多重処理64を行う。このため、InfiniBandアダプタ6の場合、カーネル4でなく、InfiniBandアダプタ6がデータの多重化を行う。
【0045】
オペレーティングシステムのプロセス制御は主に、次に説明するプロセス状態の変更を行う。各プロセスは複数の状態があり、「実行中」(どれかのCPUがこのプロセスを実行しているという状態)、「実行可能」(プロセスが実行できるが、CPUが実行していない状態)、「I/O待ち」(プロセスが送受信などの完了を待っている状態)がその例である(参考文献2参考。Linuxのプロセスはこれらの状態があるが、Linuxのtask#structの状態は上記の3つの状態に一対一対応しない)。
【0046】
ここで、OS(ここではLinux)のカーネル4には、プロセス31、32とアダプタ6の論理接続を確立するプロトコル処理49、デバイスドライバ50を備え、また、タイマー5によるタイマー処理48または割り込み処理47によってプロセス31、32を制御するスケジューラ41を備えている。
【0047】
さらに、スケジューラ41のテーブル42は、アダプタ6のエンドポイント61〜63にそれぞれ設けた状態変更機構65〜67により、直接書き込み可能に構成される。
【0048】
また、アイドル状態のCPUがあるか否かを示す稼働中フラグ68が設けられ、この稼働中フラグ68は、スケジューラ41によって設定され、アダプタ6からの割り込み要求をCPUの稼働状態に応じて制御可能とする。
【0049】
次に、各エンドポイント61〜63に設けた、状態変更機構65〜67について説明する。
【0050】
プロトコル処理49が、あるエンドポイント61〜63をあるプロセス31、32にアロケートし、このエンドポイント61〜63の論理接続を確立したとき、これらエンドポイント61〜63の状態変更機構65〜67に、プロセステーブル42上でこれらプロセス31、32の状態を示すエントリのアドレスを登録する。これにより、各エンドポイントの状態変更機構65〜67は、エンドポイント毎の論理接続に対応するプロセステーブル42上のエントリへ書き込み可能となる。
【0051】
そして、この状態変更機構65〜67へのエントリ登録時に、プロセステーブル42の各エントリのフィールド上で「実行可能」を示す値とバイト幅を状態変更機構65〜67に登録する。なお、スケジューラ41のプロセステーブル42は、主記憶上の所定の領域に予め設定された記憶領域である。
【0052】
また、論理接続上のデータ送受信時に、プロセス31、32がブロッキング呼び出しを使用した場合に、エンドポイント61〜63を起動して送受信を開始する際に、送受信完了時に状態を変更することを要求する(前記従来例と同じく、起動の処理を、標準APIの下にあるアダプタ6関連の通信ライブラリが実現する)。
【0053】
この状態変更機構65〜67の動作について、図3のタイムチャートを参照しながら説明する。
【0054】
そして、プロセス31、32がプロトコル処理49を呼び出し(図3の800)、プロトコル処理49がこのプロセスの状態をI/O待ちにし、スケジューラ41を呼び出す(801)(これで、実行可能のプロセス31、32があれば、これらのどれかが実行中になる)。
【0055】
送受信が完了したときに、エンドポイント61〜63が状態変更機構65〜67に登録されたエントリに基づいて、実行可能を示す値をDMAにより主記憶のプロセステーブル42に書き込み、プロセス31、32の状態をI/O待ちから実行可能に変更する(図1では例として、エンドポイント62の状態変更機構66からのプロセステーブル42への書き込みを矢印で示す)。一つあるいは複数のタイマー5割込みの後、このプロセス31、32が実行中になり(806)、ブロッキング呼び出しの処理を完了する(807)。
【0056】
エンドポイントの送受信完了時に、全てのCPUがビジーであれば、スケジューラを呼び出してもホスト1の性能が向上しない(実行中のプロセスのタイムカンタムが終わっておらず、プロセス31、32の状態が変更されないからである)。このため、状態変更機構65〜67からプロセステーブル42への書き込みで実行可能となったプロセスはその後のタイマー処理48のときに実行中になる。
【0057】
一方、アイドル状態のCPUがあれば、ホスト1の性能を向上するためにすぐにスケジューラを呼び出し、実行可能となったプロセスを実行中にする必要がある。
【0058】
その結果、CPUのビジー状態により割り込み制御(起こすか否か)が必要である。この割り込みの制御を行うために、アイドル状態のCPUがあるか否かを示すフラグとして上記稼動中フラグ68が設けられ、スケジューラ41が稼動中フラグ68を設定する。
【0059】
アイドル状態のCPUがある場合、稼動中フラグ68はアダプタ6からの割り込みを許可し、ない場合に割り込みをディスエーブル(禁止)する(但し、エラーなどの例外処理に関連する割り込みを抑止しない。これら例外処理については稼動中フラグ68で監視せずに、別の割り込みライン(図示せず)を使用することが望ましい)。
【0060】
次に、図4には上記割り込み処理の処理フローを示す。
【0061】
アダプタ6は、状態変更機構65〜67によりプロセステーブル42を変更した後に割り込みを起こし、割り込み処理47を起動する(802)。
【0062】
割り込み処理47がアダプタ6の状態を調べ、この割り込みがプロセス31〜32の状態の変更を目的とする情報を取得したら、デバイスドライバ50を呼ぶ必要がないことを判明する。これで、スケジューラ41が呼ばれ(808)、対象となるプロセス31〜32が実行可能になり(806)、ブロッキング呼び出しの処理を完了する(807)。
【0063】
なお、この図4では、一般的な処理の流れとして割込み処理47から直接スケジューラ41を呼ぶことを示している。但し、Linuxでは割込み処理47から直接スケジューラ41を呼べないため、ボトムハーフ等の処理を延期する方法を使用して間接的にスケジューラ41を呼ぶ。
【0064】
こうして、アダプタ6がエンドポイント61〜63の論理接続を確立したとき、プロセステーブル42上で論理接続を確立したプロセスに対応するエントリのアドレスを状態変更機構65〜67へ登録し、その後、送受信を行う。そして、送受信完了時には、アダプタ6の状態変更機構65〜67は、送受信に対応したプロセステーブル42上のエントリを、「I/O待ち」から「実行可能」に更新し、その後、アダプタ6が割り込みをかけることで、直接スケジューラ41を呼ぶことが可能となる。
【0065】
これにより、前記従来例では、図8で示したように、割り込み処理47は、デバイスドライバ50、プロトコル処理49、スケジューラ41の順で、順次処理を行っていたのに比して、本願発明によれば、割り込み処理47から直接スケジューラ41を呼ぶようにしたため、前記従来例の図8におけるステップ803、804、805が不要になって、これらの処理に要するオーバーヘッドを低減でき、送受信完了からプロセスの実行までの時間を短縮することが可能となり、この結果、プロセス31、32とアダプタ6間の通信(または入出力)処理の高速化を図ることが可能となるのである。
【0066】
本発明は、上記実施形態あるいはその変形例に限定されるものではなく、以下に例示する変形例あるいは他の変形例によっても実現可能であることは言うまでもない。また、上記複数の実施の形態あるいはその変形例として記載の技術あるいは以下の変形例の組み合わせによっても実現できる。
(変形例1)
上記図1では、プロトコル処理表40がプロトコル処理の情報を持つ。しかし、実際のカーネル4ではこの情報が複数の表として実現されることもあるが、本発明はこの場合にでも実現できる。
(変形例2)
本発明はInfiniBandアダプタ6に制限されておらず、他のプロトコル(TCP/IP等)を処理するアダプタにも使用できる。
【0067】
TCP/IPを処理するアダプタの場合には、個別にインプリメントされたエンドポイント61〜63がない場合が考えられる。しかし、このアダプタが各TCP/IP論理接続の状態を管理するため、この管理の中に状態変更機構65〜67相当の機能を追加することで本発明をインプリメントできる。
【0068】
そして、InfiniBandでは各送受信操作の完了が明確である一方、TCP/IPはストリーミングプロトコルであるため、データが連続に流れ、プロセス31、32の送受信の完了はプロトコルレベルから見えない。このため、一つのパケットの送受信、またはプロセス31、32が設定した最低限のデータ量などを送受信の完了の基準とする。
(変形例3)
本発明は、上記InfiniBandやTCP/IPのようなネットワークアダプタだけでなく、ディスクや他のアダプタにも使用できる。例えば、ディスクアダプタは従来、データを入出力(書き込み/読み出し)動作を起動するときに、書き込み/読み出しを対象とする主記憶アドレスとディスクブロックを指定し、これらの間で入出力が行われる。
【0069】
この従来のディスクアダプタに本発明を適用するために、上記の入出力動作を起動するための情報に状態変更機構65〜67相当の情報(書き込みアドレスと値とバイト幅)を追加し、そしてアダプタにこの状態変更機構65〜67相当の情報を送受信完了時にカーネル4側のプロセステーブル42へ書き込むための機能を追加すればよい。
(変形例4)
以上の説明では、論理接続確立のときに「実行可能」を示す値とそのバイト幅をアダプタ6に登録する例を示した。しかし、アダプタ6に「実行可能」を示す情報を登録するタイミングは上記に限定されるものではなく、例えば、アダプタ6の初期化のときに登録してもよい。そして、その値を各状態変更機構65〜67に登録することでなく、アダプタ全体にその値を登録する一つの機構を追加することも考えられる。
(変形例5)
上記図1において、アダプタ6の状態変更機構65〜67が書き込み先を、プロセステーブル42でなく、図5に示す別の表(表52)にすることが考えられる。
【0070】
この形態は、カーネル4の変更を削減し、ハードウェアにプロセステーブル42を直接アクセスさせないため、カーネル4に関する開発工数と信頼性の面では望ましい。この場合、カーネル4の状態変更タスク51がその表の値を定期的に調べ、アダプタ6からの書き込みが行なわれた場合に、対象とするプロセスのプロセステーブル42の状態を変更する。
【0071】
そして、アイドルCPUがあり、割り込みを起こした場合に、割り込み処理47からスケジューラ41を直接呼ばない。代わりに、状態変更タスク51を呼び、状態変更タスク51がプロセステーブル42を変更し、スケジューラ41を呼ぶ手順になる。
【0072】
状態変更タスク51が表52を定期的に調べる方法として、例えばLinuxではTask Queueを使用することが考えられる(A. Rubini, “Linux Device Drivers," O'Reilly & Associates, ISBN 1-56592-292-1参照)。アダプタ6を初期化したときにtq#timerタスクキューに書き込みを調べるタスクを入れ、そしてこの状態変更タスク51が、実行時に自分をこのタスクキューに再び追加することで、書き込みを調べるタスクがタイマー5割り込み毎に実行される。
【0073】
本変形例の場合、プロセステーブル42には、書き込むアドレスと値とバイト幅ではなく、プロセス識別子(プロセス番号など)を使用することが考えられる。なお、表52のデータ構造として、循環キューが考えられる。循環キューの場合、アダプタ6が循環キューに、状態変更するプロセス31、32の情報(識別子等)を書き込み、定期的にその情報を調べる状態変更タスク51がその情報を消費する。状態変更タスク51が消費した分をアダプタ6か状態変更機構66に知らせる(アダプタ6全体に一つの表52のみを設けた場合はアダプタ6に、状態変更機構66毎に表52を設けた場合に状態変更機構66に知らせる)。
【0074】
(変形例6)
以上の実施形態と変形例に、アダプタ6が主記憶にプロセス31、32に関する情報を書き込むことで、直接的か間接的に対象となるプロセスの状態を変更する。代わりに、図5に示すとおり、主記憶にないキュー53を設け、アダプタ6が状態変更するプロセス31、32の情報(識別子など)をこのキュー53に追加し、定期的にこのキュー53の情報を調べる状態変更タスク51(上記変形例5参照)がこの情報を読み出す方法が考えられる。
【0075】
このキュー53は、アダプタの内部の記憶手段(または記憶域)、または割り込みコントローラの内部の記憶手段(記憶域)などが考えられる。
【0076】
(変形例7)
上記実施形態に示した稼動中フラグ68は、ハードウェアまたはソフトウェアの何れかで実現できる。まず、ハードウェアによる実現方法としては、アダプタ6の一部、そしてホスト1の回路(割り込みコントローラ回路の内部など)が考えられる。
【0077】
次に、ソフトウェアによる実現方法としては、ホスト1の割り込みコントローラを設定して、アダプタ6からの割り込みをイネーブル/抑止することが考えられる。
【0078】
(変形例8)
以上の説明では説明や図を分かりやすくするために、アダプタ6は、上記図2で示したように、ホスト1の内部I/Oバス107とネットワーク7との間のアダプタにしたが、本発明はこの形態に制限されていない。他の形態の具体例として、InfiniBandと他ネットワークのアダプタが考えられる(この場合、InfiniBandが内部バスの位置付けを持つ)。そして、アダプタが一つまたは複数の接続でInfiniBandのみに接続され、InfiniBand上のTCP/IPを処理する形態も考えられる(この場合、内部バスと外部ネットワークがInfiniBandとなる)。
【0079】
(変形例9)
以上の説明では説明や図を分かりやすくするために、ホスト1がコンピュータのような情報処理装置を前提にした。しかし、本発明はこれらの情報処理装置に制限されておらず、例えばストレージ装置や、スイッチやルータのようなネットワーク装置、またはそれらのアダプタにも適用できる。この場合、装置は組み込み型装置向けオペレーティングシステムを使用し、このオペレーティングシステムにプロセス31、32という概念がないことがあるが、本発明は各I/O処理の制御に使用できる。
【0080】
(変形例10)
以上の説明では本発明はプロセス31、32の状態を制御しているが、本発明はプロセス31、32に制限されておらず、各プロセス31、32の中の処理スレッドの制御にも使用できる。
【0081】
なお、本発明を実施するためのプログラムは、それ単独であるいは他のプログラムと組み合わせて、ディスク記憶装置等のプログラム記憶媒体に記憶された販売することができる。また、本発明を実施するためのプログラムは、すでに使用されている通信を行うプログラムに追加される形式のプログラムでもよく、あるいはその通信用のプログラムの一部を置換する形式のプログラムでも良い。
【0082】
今回開示した実施の形態は、全ての点で例示であって制限的なものではないと考えられるべきである。本発明の範囲は上記した説明ではなくて特許請求の範囲によって示され、特許請求の範囲と均等の意味及び内容の範囲での全ての変更が含まれることが意図される。
【図面の簡単な説明】
【図1】本発明の一実施形態を示し、ホストの機能概略を示すブロック図である。
【図2】同じく、ハードウェアの概略図である。
【図3】アダプタの状態変更機構の動作を示すタイムチャートである。
【図4】アダプタからの割り込み処理を示すタイムチャートである。
【図5】他の実施形態を示し、ホストの機能概略を示すブロック図である。
【図6】従来例を示し、ネットワークアダプタを用いたホストの機能概略を示すブロック図。
【図7】他の従来例を示し、InfiniBandのアダプタを用いたホストの機能概略を示すブロック図。
【図8】同じく、従来例を示し、アダプタからの割り込み処理を示すタイムチャートである。
【符号の説明】
1 ホスト
4 カーネル
6 アダプタ
41 スケジューラ
42 プロセステーブル
61〜63 エンドポイント
65〜67 状態変更機構
Claims (2)
- 1つ以上のCPUと、主記憶手段と、外部装置または外部ネットワークとのデータ入出力を行うためのInfiniBandアダプタとを備えた情報処理装置が、オペレーティングシステム上で複数のアプリケーションを実行し、当該アプリケーションと前記InfiniBandアダプタとの間で通信を行う入出力方法において、
前記アプリケーションの各々に、前記InfiniBandアダプタ上の通信エンドポイントを割り当て、各アプリケーションと前記InfiniBandアダプタに割り当てた通信エンドポイントとの間の論理接続をそれぞれ確立するステップと、
前記論理接続のそれぞれが確立したときに、前記エンドポイントのそれぞれに対応して設けられた状態変更機構に対し、前記オペレーティングシステム内のスケジューラが管理するプロセステーブル内の、当該通信エンドポイントの接続相手である前記アプリケーションの状態を示す主記憶アドレスを記録するステップと、
前記論理接続のひとつのデータの送受信時に、前記論理接続に対応するアプリケーションがブロッキング呼び出しを使用した場合に、前記オペレーティングシステムに含まれるプロトコル処理により、前記プロセステーブルに記録した前記アプリケーションの状態をIO待ち状態に変更するステップと、
前記InfiniBandアダプタが、前記論理接続のデータ送受信を完了したときに、当該論理接続に対応する前記状態変更機構内に記録した主記憶アドレスにより前記接続相手であるアプリケーションの状態を示すエントリを特定して、当該エントリの値を「実行可能」を示す値に変更するステップと、
前記InfiniBandアダプタが起動する割り込み、もしくはタイマ割り込みにより、前記スケジューラを呼び出し、前記通信相手であるアプリケーションを実行させるステップと、
を含むことを特徴とする入出力方法。 - 前記エントリの値を「実行可能」を示す値に変更するステップの後に、アイドル状態のCPUが現に存在することを示すフラグをチェックするステップを有し、該フラグが真であると確認されたら前記InfiniBandアダプタから前記スケジューラへの割り込みを実行することを特徴とする請求項1の入出力方法。
Priority Applications (2)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP2002139572A JP4317348B2 (ja) | 2002-05-15 | 2002-05-15 | 情報処理装置及び入出力方法並びにプログラム |
US10/320,607 US7336664B2 (en) | 2002-05-15 | 2002-12-17 | Data processing device and its input/output method and program |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP2002139572A JP4317348B2 (ja) | 2002-05-15 | 2002-05-15 | 情報処理装置及び入出力方法並びにプログラム |
Publications (2)
Publication Number | Publication Date |
---|---|
JP2003330873A JP2003330873A (ja) | 2003-11-21 |
JP4317348B2 true JP4317348B2 (ja) | 2009-08-19 |
Family
ID=29416910
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
JP2002139572A Expired - Fee Related JP4317348B2 (ja) | 2002-05-15 | 2002-05-15 | 情報処理装置及び入出力方法並びにプログラム |
Country Status (2)
Country | Link |
---|---|
US (1) | US7336664B2 (ja) |
JP (1) | JP4317348B2 (ja) |
Families Citing this family (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20050050187A1 (en) * | 2003-09-03 | 2005-03-03 | International Business Machines Corporation | Method and apparatus for support of bottleneck avoidance in an intelligent adapter |
US7484016B2 (en) * | 2004-06-30 | 2009-01-27 | Intel Corporation | Apparatus and method for high performance volatile disk drive memory access using an integrated DMA engine |
US20060031837A1 (en) * | 2004-08-05 | 2006-02-09 | International Business Machines Corporation | Thread starvation profiler |
US7639715B1 (en) * | 2005-09-09 | 2009-12-29 | Qlogic, Corporation | Dedicated application interface for network systems |
US7735099B1 (en) | 2005-12-23 | 2010-06-08 | Qlogic, Corporation | Method and system for processing network data |
KR101409040B1 (ko) * | 2012-11-22 | 2014-06-18 | 엘에스산전 주식회사 | 피엘씨 시스템의 데이터 처리 장치 및 방법 |
Family Cites Families (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US6370592B1 (en) * | 1997-11-04 | 2002-04-09 | Hewlett-Packard Company | Network interface device which allows peripherals to utilize network transport services |
US6687905B1 (en) * | 2000-08-11 | 2004-02-03 | International Business Machines Corporation | Multiple port input/output job scheduling |
US6938111B2 (en) * | 2002-04-19 | 2005-08-30 | Siemens Aktiengesellschaft | Method for operating automation control equipment applications |
-
2002
- 2002-05-15 JP JP2002139572A patent/JP4317348B2/ja not_active Expired - Fee Related
- 2002-12-17 US US10/320,607 patent/US7336664B2/en not_active Expired - Fee Related
Also Published As
Publication number | Publication date |
---|---|
JP2003330873A (ja) | 2003-11-21 |
US20030214909A1 (en) | 2003-11-20 |
US7336664B2 (en) | 2008-02-26 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US10365830B2 (en) | Method, device, and system for implementing hardware acceleration processing | |
US7496699B2 (en) | DMA descriptor queue read and cache write pointer arrangement | |
US20180375782A1 (en) | Data buffering | |
JP5364773B2 (ja) | クライアントとサーバ間の接続を管理するためのシステムおよび方法 | |
EP2240852B1 (en) | Scalable sockets | |
US7200695B2 (en) | Method, system, and program for processing packets utilizing descriptors | |
US20020091826A1 (en) | Method and apparatus for interprocessor communication and peripheral sharing | |
US7937499B1 (en) | Methods and apparatus for dynamically switching between polling and interrupt mode for a ring buffer of a network interface card | |
JPH09231157A (ja) | コンピュータに接続されている入力/出力(i/o)デバイスを制御する方法 | |
JP4788124B2 (ja) | データ処理システム | |
WO2010043619A1 (en) | Data communications through a host fibre channel adapter | |
US20050097226A1 (en) | Methods and apparatus for dynamically switching between polling and interrupt to handle network traffic | |
US7552232B2 (en) | Speculative method and system for rapid data communications | |
CN115298656A (zh) | 用于调度可共享pcie端点设备的系统和方法 | |
US7209971B1 (en) | Architecture and run-time environment for network filter drivers | |
US20040223504A1 (en) | Apparatus and method for workflow-based routing in a distributed architecture router | |
JPH065524B2 (ja) | 記憶装置管理方法 | |
JP4317348B2 (ja) | 情報処理装置及び入出力方法並びにプログラム | |
JP2002208981A (ja) | 通信方法 | |
WO2007074343A2 (en) | Processing received data | |
US20020194332A1 (en) | Method and apparatus to manage resources for a multi-threaded device driver | |
CN113162932B (zh) | 一种基于套接字的异步i/o操作的方法和装置 | |
KR960006472B1 (ko) | TICOM IOP 환경에서 FDDI펌웨어(firmware) 구동방법 | |
CN117743252A (zh) | 基于Mailbox的异构Soc子系统间通信的方法 | |
Kcholi | Network Driver Interface Specification and Network Device Drivers |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
A621 | Written request for application examination |
Free format text: JAPANESE INTERMEDIATE CODE: A621 Effective date: 20050406 |
|
A977 | Report on retrieval |
Free format text: JAPANESE INTERMEDIATE CODE: A971007 Effective date: 20070823 |
|
A131 | Notification of reasons for refusal |
Free format text: JAPANESE INTERMEDIATE CODE: A131 Effective date: 20070911 |
|
A521 | Request for written amendment filed |
Free format text: JAPANESE INTERMEDIATE CODE: A523 Effective date: 20071112 |
|
A02 | Decision of refusal |
Free format text: JAPANESE INTERMEDIATE CODE: A02 Effective date: 20080805 |
|
A521 | Request for written amendment filed |
Free format text: JAPANESE INTERMEDIATE CODE: A523 Effective date: 20081006 |
|
A911 | Transfer to examiner for re-examination before appeal (zenchi) |
Free format text: JAPANESE INTERMEDIATE CODE: A911 Effective date: 20081010 |
|
TRDD | Decision of grant or rejection written | ||
A01 | Written decision to grant a patent or to grant a registration (utility model) |
Free format text: JAPANESE INTERMEDIATE CODE: A01 Effective date: 20090519 |
|
A01 | Written decision to grant a patent or to grant a registration (utility model) |
Free format text: JAPANESE INTERMEDIATE CODE: A01 |
|
A61 | First payment of annual fees (during grant procedure) |
Free format text: JAPANESE INTERMEDIATE CODE: A61 Effective date: 20090522 |
|
R150 | Certificate of patent or registration of utility model |
Free format text: JAPANESE INTERMEDIATE CODE: R150 |
|
FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20120529 Year of fee payment: 3 |
|
FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20120529 Year of fee payment: 3 |
|
FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20130529 Year of fee payment: 4 |
|
FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20130529 Year of fee payment: 4 |
|
LAPS | Cancellation because of no payment of annual fees |