JP2003216592A - ヘッド・オンリ循環バッファを介してインフィニバンド・ワーク及び完了キューを管理する方法及び装置 - Google Patents

ヘッド・オンリ循環バッファを介してインフィニバンド・ワーク及び完了キューを管理する方法及び装置

Info

Publication number
JP2003216592A
JP2003216592A JP2002275672A JP2002275672A JP2003216592A JP 2003216592 A JP2003216592 A JP 2003216592A JP 2002275672 A JP2002275672 A JP 2002275672A JP 2002275672 A JP2002275672 A JP 2002275672A JP 2003216592 A JP2003216592 A JP 2003216592A
Authority
JP
Japan
Prior art keywords
queue
work
completion
index
tail
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.)
Pending
Application number
JP2002275672A
Other languages
English (en)
Inventor
Richard Louis Arndt
リチャード・ルイス・アルント
David F Craddock
デービッド・エフ・クラッドック
Thomas A Gregg
トーマス・アンソニー・グレッグ
Ian David Judd
イアン・デービット・ジャド
Gregory Francis Pfister
グレゴリー・フランシス・ファイスター
Renato John Recio
レナト・ジョン・レシオ
William Schmidt Donald
ドナルド・ウィリアム・シュミット
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
International Business Machines Corp
Original Assignee
International Business Machines Corp
Priority date (The priority date 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 date listed.)
Filing date
Publication date
Application filed by International Business Machines Corp filed Critical International Business Machines Corp
Publication of JP2003216592A publication Critical patent/JP2003216592A/ja
Pending legal-status Critical Current

Links

Classifications

    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L49/00Packet switching elements
    • H04L49/90Buffering arrangements
    • H04L49/901Buffering arrangements using storage descriptor, e.g. read or write pointers
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L49/00Packet switching elements
    • H04L49/90Buffering arrangements

Landscapes

  • Engineering & Computer Science (AREA)
  • Computer Networks & Wireless Communication (AREA)
  • Signal Processing (AREA)
  • Computer And Data Communications (AREA)
  • Multi Processors (AREA)

Abstract

(57)【要約】 (修正有) 【課題】 コンシューマからチャネル・アダプタ・ハー
ドウェアにワーク・リクエストを送るための及びいくつ
かの最適化技法と共にワーク完了をコンシューマに送る
ための方法、装置、及びプログラムを提供する。 【解決手段】 ホスト及びI/Oエンド・ノードと、ス
イッチと、ルータと、これらのコンポーネントを相互接
続するリンクとを有する分散型コンピューティング・シ
ステムが提供される。エンド・ノードは、メッセージを
送信及び受信するために送信及び受信キュー・ペアを使
用する。エンド・ノードは、いつメッセージが完全に送
信又は受信されたか、及びメッセージの送信又は受信プ
ロセス中にエラーが生じたかどうかをエンド・ユーザに
知らせるために完了キューを使用する。ハードウェアに
おけるヘッド・ポインタだけを使用してコンシューマか
らチャネル・アダプタ・ハードウェアへのワーク・リク
エストの転送を制御する機構が開示される。

Description

【発明の詳細な説明】
【0001】
【発明の属する技術分野】本発明は、データ処理システ
ムの改良に関する。更に詳しく云えば、本発明は、キュ
ー・ペア及び完了キューを効率的にハードウェアで実現
するために、キュー・ペアに対するヘッド・ポインタ及
び完了キューに対するテール・ポインタだけを使用して
循環バッファを管理する装置及び方法に関する。
【0002】
【従来の技術】インフィニバンド(IB)は、入出力装
置(I/O)及び汎用コンピューティング・ノード相互
間のプロセス間通信(IPC)のために使用可能なハー
ドウェアのメッセージ・パス機構を提供する。コンシュ
ーマは、IBチャネル・アダプタ(CA)における送信
/受信ワーク・キューに送信/受信メッセージを送付す
ることによって、IBメッセージ・パス・ハードウェア
をアクセスする。送信/受信ワーク・キュー(WQ)
は、コンシューマにキュー・ペア(QP)として割り当
てられる。コンシューマは、完了キュー(CQ)からI
B送信及び受信ワーク完了(WC)を介してこれらのメ
ッセージの結果を検索する。
【0003】ソースCAは、アウトバウンド・メッセー
ジをセグメント化してそれらを宛先に送るという動作を
扱う。宛先CAは、インバウンド・メッセージを再アセ
ンブルしてそれらを宛先のコンシューマにより指定され
たメモリ・スペースに入れるという動作を扱う。CAの
タイプには、ホストCA及びターゲットCAの2つがあ
る。ホストCAは、IBファブリックをアクセスするた
めに、汎用コンピューティング・ノードによって使用さ
れる。コンシューマは、ホストCAの機能をアクセスす
るために、IBバーブ(verb)を使用する。バーブを解
釈してCAを直接にアクセスするソフトウェアは、チャ
ネル・インターフェース(CI)として知られている。
【0004】
【発明が解決しようとする課題】コンシューマからCA
ハードウェアにワーク・リクエストをパスするための、
効率的な機構が必要である。更に、CAハードウェアが
コンシューマにワーク完了をパスするためにも同様の機
構が必要である。従って、コンシューマからCAハード
ウェアにワーク・リクエストを送るために、及びいくつ
かの最適化技法と共にワーク完了をコンシューマに送る
ために、そのような方法、装置、及びプログラムを持つ
ことが有利であろう。
【0005】
【課題を解決するための手段】本発明は、(ホスト及び
I/O)エンド・ノードと、スイッチと、ルータと、こ
れらのコンポーネントを相互接続するリンクとを有する
分散型コンピューティング・システムを提供する。エン
ド・ノードは、メッセージを送信及び受信するために送
信及び受信キュー・ペアを使用する。エンド・ノード
は、いつメッセージが完全に送信又は受信されたか、及
びメッセージの送信又は受信プロセス中にエラーが生じ
たかどうかをエンド・ユーザに知らせるために完了キュ
ーを使用する。本発明は、これらのキュー・ペア及び完
了キューをハードウェアで実現するための機構を開示す
る。ハードウェアにおけるヘッド・ポインタだけを使用
してコンシューマからCAハードウェアへのワーク・リ
クエストの転送を制御するための方法が、ハードウェア
におけるテール・ポインタだけを使用してCAハードウ
ェアからコンシューマにワーク完了を送るための方法と
共に開示される。この方式では、CAハードウェアは、
ワーク・リクエストが完了したことをCIに知らせるこ
とができ、システム・メモリへの単一の書き込みだけで
ワーク完了情報を与えることができる。更に、種々のメ
モリ構成のもとでこのプロセスの全体的な効率を改善す
るために使用し得るいくつかの機構が提供される。
【0006】
【発明の実施の形態】本発明は、ワーク・キューのため
のハードウェアにおけるヘッド・ポインタ及び完了キュ
ーのためのハードウェアにおけるテール・ポインタを使
用してワーク・キュー及び完了キューを管理するための
装置及び方法を提供する。本発明は、ハードウェア、ソ
フトウェア、又はハードウェア及びソフトウェアの組み
合わせで実施可能である。本発明は、エンド・ノード
と、スイッチと、ルータと、これらのコンポーネントを
相互接続するリンクとを有するシステム・エリア・ネッ
トワーク(SAN)において実施されることが望まし
い。各エンド・ノードは、メッセージを送信及び受信す
るために、送信及び受信キュー・ペアを使用する。エン
ド・ノードは、メッセージをパケットの形にセグメント
化し、リンクを介してそれらのパケットを送信する。ス
イッチ及びルータは、エンド・ノードを相互接続し、パ
ケットを適切なエンド・ノードに経路指定する。エンド
・ノードは、宛先においてそれらのパケットをメッセー
ジの形に再アセンブルする。
【0007】図1は、本発明の望ましい実施例に従って
分散型コンピュータ・システムを示す図である。図1に
示された分散型コンピュータ・システムは、システム・
エリア・ネットワーク(SAN)100の形を取り、単
に例示の目的で示される。後述される本発明の実施例
は、他の数多くのタイプ及び構成のコンピュータ・シス
テムにおいて実施可能である。例えば、本発明を実施す
るコンピュータ・システムは、1つのプロセッサ及び幾
つかの入出力(I/O)アダプタを有する小型サーバか
ら、数百個又は数千個のプロセッサ及び数千個のI/O
アダプタを有する超並列スーパコンピュータ・システム
までの範囲に及び得る。更に、本発明は、インターネッ
ト又はイントラネットによって接続されたリモート・コ
ンピュータ・システムの施設においても実施され得る。
【0008】SAN100は、分散型コンピュータ・シ
ステムにおけるノードを相互接続する高帯域幅の低待ち
時間ネットワークである。ノードは、ネットワークの1
つ又は複数のリンクに接続され、ネットワーク内にメッ
セージの発信元及び(又は)宛先を形成する任意のコン
ポーネントである。図示の例では、SAN100は、ホ
スト・プロセッサ・ノード102、ホスト・プロセッサ
・ノード104、新磁気ディスク制御機構(RAID)
サブシステム・ノード106、及びI/Oシャシー・ノ
ード108の形式のノードを含む。図1に示されたノー
ドは、単なる例示のためのものであり、ここでは、SA
N100は、任意の数及び任意のタイプの独立したプロ
セッサ・ノード、I/Oアダプタ・ノード、及びI/O
装置ノードを接続することができる。それらのノードの
何れも、SAN100においてメッセージ又はフレーム
を発信し又はそれらを最終的に使用する装置であるとし
て定義されるエンド・ノードとして機能し得る。
【0009】本発明の1つの実施例では、分散型コンピ
ュータ・システムにはエラー処理機構が存在する。この
場合、そのエラー処理機構は、SAN100のような分
散型コンピュータ・システムにおけるエンド・ノード相
互間の高い信頼度の接続又は高い信頼度のデータグラム
通信を可能にする。
【0010】本願において使用されるメッセージは、デ
ータ交換に関するアプリケーション定義の単位であり、
連携したプロセス相互間の通信に関する基本単位であ
る。パケットは、ネットワーク・プロトコル・ヘッダ又
はトレーラによりカプセル化された1単位のデータであ
る。ヘッダは、一般に、SAN100を介してフレーム
を送るための制御及び経路指定情報を提供する。トレー
ラは、一般に、パケットが破壊された内容を配送しない
ことを保証するための制御データ及び巡回冗長検査(C
RC)データを含む。
【0011】SAN100は、分散型コンピュータ・シ
ステムにおけるI/O及びプロセッサ間通信(IPC)
の両方をサポートする通信及び管理機構を含む。図1に
示されたSAN100は、交換回線通信ファブリック1
16を含み、これは、多くの装置が安全な且つ遠隔的に
管理された環境において高帯域幅及び低待ち時間でデー
タを同時に転送することを可能にする。エンド・ノード
は、複数のポートを介して通信を行うことができ、SA
Nファブリックを介して複数のパスを利用することがで
きる。図1に示されたSANを介した複数のポート及び
パスは、フォールト・トレランス(fault tolerance)
及び増加帯域幅データ転送のために使用され得る。
【0012】図1におけるSAN100は、スイッチ1
12、114、146、及びルータ117を含む。スイ
ッチは、複数のリンクを接続する装置であり、小規模ヘ
ッダの宛先ローカル識別コード(DLID)フィールド
を使用して、サブネット内の1つのリンクから他のリン
クへのパケットの経路指定を可能にする。ルータは、複
数のサブネットを接続する装置であり、大規模ヘッダの
宛先グローバル・ユニーク識別コード(DGUID)を
使用して、第1サブネットにおける1つのリンクから第
2サブネットにおける他のリンクにフレームを経路指定
することができる。
【0013】1つの実施例では、リンクは、エンド・ノ
ード、スイッチ、又はルータのような任意の2つのネッ
トワーク・ファブリック・エレメント相互間の全二重チ
ャネルである。適当なリンクの例は、バックプレーン及
び印刷回路ボード上の銅ケーブル、光ケーブル、及び印
刷回路銅トレースを含むが、それに限定されるものでは
ない。
【0014】高い信頼度のサービス・タイプに対して
は、ホスト・プロセッサのエンド・ノード及びI/Oア
ダプタのエンド・ノードのようなエンド・ノードが、リ
クエスト・パケット及びリターン肯定応答パケットを発
生する。スイッチ及びルータは、ソースから宛先にパケ
ットを送り込む。ネットワークにおける各ステージで更
新される可変CRCトレーラ・フィールドを除いて、ス
イッチは、パケットを未修正のまま送り込む。ルータ
は、可変CRCトレーラ・フィールドを更新し、しかも
パケットが経路指定される時にはヘッダにおける他のフ
ィールドを修正する。
【0015】図1に示されたSAN100では、ホスト
・プロセッサ・ノード102、104、及びI/Oシャ
シー・ノード108が、SAN100に対してインター
フェースするための少なくとも1つのチャネル・アダプ
タ(CA)を含む。1つの実施例では、各チャネル・ア
ダプタは、SANファブリック116を介して送信され
たパケットのソースを明確にするか又はそのパケットを
シンクさせるに十分な細部にわたってチャネル・アダプ
タ・インターフェースを具現化するエンドポイントであ
る。ホスト・プロセッサ・ノード102は、ホスト・チ
ャネル・アダプタ(HCA)118及び120の形をし
たチャネル・アダプタを含む。ホスト・プロセッサ・ノ
ード104は、ホスト・チャネル・アダプタ(HCA)
122及び124を含む。ホスト・プロセッサ・ノード
102は、バス・システム134によって相互接続され
た中央処理装置(CPU)126−130及びメモリ1
32も含む。ホスト・プロセッサ・ノード104は、同
様に、バス・システム144によって相互接続された中
央処理装置(CPU)136−140及びメモリ142
を含む。
【0016】ホスト・チャネル・アダプタ118及び1
20は、スイッチ112及び114への接続を提供し、
一方、ホスト・チャネル・アダプタ122及び124
は、スイッチ112及び114への接続を提供する。
【0017】1つの実施例では、ホスト・チャネル・ア
ダプタはハードウェアで実装される。この実施方法で
は、ホスト・チャネル・アダプタのハードウェアは、中
央処理装置及びI/Oアダプタ通信のオーバヘッドの大
部分をオフロードする。ホスト・チャネル・アダプタに
関するこのハードウェアの実施方法は、通信プロトコル
と関連した従来のオーバヘッドのない交換回線ネットワ
ークを介した多重同時通信も可能にする。1つの実施例
では、それらのホスト・チャネル・アダプタ及び図1に
おけるSAN100は、オペレーティング・システム・
カーネル・プロセスを含むことなく分散型コンピュータ
・システムのI/O及びプロセッサ間通信(IPC)の
コンシューマにゼロのプロセッサ−コピー・データ転送
を提供し、高い信頼度の耐障害通信を提供するためのハ
ードウェアを使用する。
【0018】図1に示されるように、ルータ117は、
他のホスト又は他のルータへの広域ネットワーク(WA
N)又はローカル・エリア・ネットワーク(LAN)の
接続部に結合される。図1におけるI/Oシャシー・ノ
ード108は、I/Oスイッチ146及び複数のI/O
モジュール148−156を含む。これらの例では、そ
れらのI/Oモジュールはアダプタ・カードの形を取
る。図1に示された例示のアダプタ・カードは、I/O
モジュール148のためのSCSIアダプタ・カード;
I/Oモジュール152のためのファイバ・チャネル・
ハブ及びファイバ・チャネル−調整済みループ(FC−
AL)装置へのアダプタ・カード;I/Oモジュール1
50のためのイーサネット(R)・アダプタ・カード;
I/Oモジュール154のためのグラフィックス・アダ
プタ・カード;及びI/Oモジュール156のためのビ
デオ・アダプタ・カードを含む。任意の既知のタイプの
アダプタ・カードが実装可能である。I/Oアダプタ・
カードは、更に、そのアダプタ・カードをSANファブ
リックに結合するためにI/Oアダプタ・バックプレー
ンにおいてスイッチを含む。これらのモジュールは、タ
ーゲット・チャネル・アダプタ(TCA)158−16
6を含む。
【0019】この例では、図1におけるRAIDサブシ
ステム・ノード106は、プロセッサ168、メモリ1
70、ターゲット・チャネル・アダプタ(TCA)17
2、及び複数の冗長な又はストライピングされた記憶デ
ィスク・ユニット174を含む。ターゲット・チャネル
・アダプタ172は、十分に機能的なホスト・チャネル
・アダプタであってもよい。
【0020】SAN100は、I/Oのためのデータ通
信及びプロセッサ間通信を処理する。SAN100は、
I/Oのために必要な高帯域幅及び拡張容易性をサポー
トし、更に、プロセッサ間通信のために必要な極めて小
さい待ち時間及び小さいCPUオーバヘッドをサポート
する。ユーザ・クライアントは、オペレーティング・シ
ステム・カーネル・プロセスを迂回し、効率的なメッセ
ージ送信プロトコルを可能にするホスト・チャネル・ア
ダプタのようなネットワーク通信ハードウェアを直接に
アクセスすることができる。SAN100は、現在のコ
ンピューティング・モジュールに適しており、I/O及
びコンピュータ・クラスタ通信という新しい形式のため
のビルディング・ブロックである。更に、図1における
SAN100は、I/Oアダプタ・ノードがそれらの間
で通信すること、又は分散型コンピュータ・システムに
おけるいずれかの又はすべてのプロセッサ・ノードと通
信することを可能にする。SAN100にI/Oアダプ
タを付加することによって、その結果生じるI/Oアダ
プタ・ノードは、SAN100における任意のホスト・
プロセッサ・ノードと実質的に同じ通信能力を有する。
【0021】1つの実施例では、図1に示されたSAN
100がチャネル・セマンティックス及びメモリ・セマ
ンティックスをサポートする。チャネル・セマンティッ
クスは、送信/受信オペレーション又はプッシュ通信オ
ペレーションと呼ばれることがある。チャネル・セマン
ティックスは、ソース装置がデータをプッシュし、宛先
装置がそのデータの最終的な宛先を決定するという従来
のI/Oチャネルにおいて使用された通信のタイプであ
る。チャネル・セマンティックスにおいて、ソース・プ
ロセスから送られたパケットは、宛先プロセスの通信ポ
ートを指定するが、宛先プロセスのメモリ・スペースに
おける何処にそのパケットが書き込まれるべきかを指定
しない。従って、チャネル・セマンティックスでは、宛
先プロセスは、送信されたデータを何処に入れるべきか
を事前割り当てする。
【0022】メモリ・セマンティックスでは、ソース・
プロセスは、リモート・ノードの宛先プロセスの仮想ア
ドレス・スペースを直接に読み取るか又は書き込む。リ
モート・ノードの宛先プロセスは、データのためのバッ
ファのロケーションとのみ通信する必要があり、如何な
るデータの転送にも関与する必要がない。従って、メモ
リ・セマンティックスでは、ソース・プロセスは、宛先
プロセスの宛先バッファ・メモリ・アドレスを含むデー
タ・パケットを送る。メモリ・セマンティックスでは、
宛先プロセスは、ソース・プロセスがそれのメモリをア
クセスすることに対する許可を予め与える。
【0023】チャネル・セマンティックス及びメモリ・
セマンティックスは、一般に、I/O及びプロセッサ間
通信の両方を必要とする。一般的なI/Oオペレーショ
ンは、チャネル・セマンティックス及びメモリ・セマン
ティックスの組み合わせを使用する。図1に示された分
散型コンピュータ・システムの例示的なI/Oオペレー
ションでは、ホスト・プロセッサ102のようなホスト
・プロセッサ・ノードが、チャネル・セマンティックス
を使用してRAIDサブシステムのターゲット・チャネ
ル・アダプタ(TCA)172のようなディスクI/O
アダプタにディスク書き込みコマンドを送ることによっ
て、I/Oオペレーションを開始させる。ディスクI/
Oアダプタは、そのコマンドを調べ、メモリ・セマンテ
ィックスを使用してホスト・プロセッサ・ノードのメモ
リ・スペースからデータ・バッファを直接に読み取る。
データ・バッファが読み取られた後、ディスクI/Oア
ダプタはチャネル・セマンティックスを使用してI/O
完了メッセージをホスト・プロセッサ・ノードにプッシ
ュ・バックする。
【0024】1つの典型的な実施例では、図1に示され
た分散型コンピュータ・システムが、全メモリに対する
正しい且つ適切なアクセスを保証するために仮想アドレ
ス及び仮想メモリ保護機構を使用するオペレーションを
実行する。そのような分散型コンピュータ・システムに
おいて実行されるアプリケーションは、如何なるオペレ
ーションに対しても物理的アドレシングを使用する必要
がない。
【0025】次に図2を参照すると、本発明の望ましい
実施例に従って、ホスト・プロセッサ・ノードの機能的
ブロック図が示される。ホスト・プロセッサ・ノード2
00は、図1におけるホスト・プロセッサ・ノード10
2のようなホスト・プロセッサ・ノードの1つの例であ
る。この例では、図2に示されたホスト・プロセッサ・
ノード200は一連のコンシューマ202−208を含
む。それらのコンシューマは、ホスト・プロセッサ・ノ
ード200において実行されるプロセスである。ホスト
・プロセッサ・ノード200は、チャネル・アダプタ2
10及び212も含む。チャネル・アダプタ210はポ
ート214及び216を含み、一方、チャネル・アダプ
タ212はポート218及び220を含む。各ポートは
1つのリンクに接続している。それらのポートは、図1
におけるSAN100のような1つのSANサブネット
又は複数のSANサブネットに接続することができる。
これらの例では、チャネル・アダプタは、ホスト・チャ
ネル・アダプタの形式を取る。
【0026】コンシューマ202−208は、バーブ・
インターフェース222並びにメッセージ及びデータ・
サービス224を介してSANにメッセージを転送す
る。バーブ・インターフェースは、本質的には、ホスト
・チャネル・アダプタの機能に関する抽象的な記述であ
る。オペレーティング・システムは、それのプログラミ
ング・インターフェースを介してバーブ機能のうちの幾
つか又はすべてを公開することが可能である。基本的に
は、このインターフェースは、ホストの行為を定義す
る。更に、ホスト・プロセッサ・ノード200は、メッ
セージ及びデータ・サービス224を含む。そのメッセ
ージ及びデータ・サービスは、バーブ層よりも高いレベ
ルのインターフェースであり、チャネル・アダプタ21
0及びチャネル・アダプタ212を介して受信されたメ
ッセージ及びデータを処理するために使用される。メッ
セージ及びデータ・サービス224は、メッセージ及び
他のデータを処理するために、コンシューマ202−2
08に対するインターフェースを提供する。
【0027】次に、図3の(A)を参照すると、本発明
の望ましい実施例に従って、ホスト・チャネル・アダプ
タを表す図が示される。図3の(A)に示されたホスト
・チャネル・アダプタ300Aは、一連のキュー・ペア
(QP)302A−310Aを含み、それらのキュー・
ペアは、メッセージをホスト・チャネル・アダプタ・ポ
ート312A−316Aに転送するために使用される。
ホスト・チャネル・アダプタ・ポート312A−316
Aへのデータのバッファリングが仮想レーン(virtual
lane - VL)318A−334Aを介して行われる。
なお、各VLは、それ自身のフロー・コントロールを有
する。サブネット・マネージャは、各物理的ポートに対
するローカル・アドレス、即ち、ポートのLIDを有す
るチャネル・アダプタを構成する。サブネット・マネー
ジャ・エージェント(SMA)336Aは、チャネル・
アダプタを構成する目的でサブネット・マネージャと通
信を行うエンティティである。メモリ変換及び保護機構
(MTP)338Aは、仮想アドレスを物理アドレスに
変換し、アクセス権を検証する機構である。ダイレクト
・メモリ・アクセス(DMA)340Aは、キュー・ペ
ア302A−310Aに関連してメモリ341Aを使用
するダイレクト・メモリ・アクセス・オペレーションを
行う。
【0028】図3の(A)に示されたホスト・チャネル
・アダプタ300Aのような単一のチャネル・アダプタ
は、数千個のキュー・ペアをサポートすることができ
る。対照的に、I/Oアダプタにおけるターゲット・チ
ャネル・アダプタは、一般に、ずっと小さい数のキュー
・ペアしかサポートしない。各キュー・ペアは、送信ワ
ーク・キュー(SWQ)及び受信ワーク・キューより成
る。送信ワーク・キューは、チャネル及びメモリ・セマ
ンティック・メッセージを送るために使用される。受信
ワーク・キューは、チャネル・セマンティック・メッセ
ージを受信する。コンシューマは、オペレーティング・
システム特有のプログラミング・インターフェースをコ
ールする。そのプログラミング・インターフェースは、
本願ではバーブ(verb)と呼ばれ、ワーク・リクエスト
(WR)をワーク・キューに入れるためのものである。
【0029】図3の(B)は、本発明の望ましい実施例
に従ってスイッチ300Bを示す。スイッチ300B
は、仮想レーン306Bのような仮想レーンを介して多
数のポート304Bと通信を行うパケット・リレー30
2Bを含む。一般に、スイッチ300Bのようなスイッ
チは、1つのポートから同じスイッチにおける他の任意
のポートにパケットを経路指定することができる。
【0030】同様に、図3の(C)は、本発明の望まし
い実施例に従ってルータ300Cを示す。ルータ300
Cは、仮想レーン306Cのような仮想レーンを介して
多数のポート304Cと通信を行うパケット・リレー3
02Cを含む。スイッチ300Bと同様に、ルータ30
0Cは、一般に、1つのポートから同じルータにおける
他の任意のポートにパケットを経路指定することができ
るであろう。
【0031】チャネル・アダプタ、スイッチ、及びルー
タは、単一の物理リンク内の複数の仮想レーンを使用す
る。図3の(A)、(B)、及び(C)に示されるよう
に、物理ポートは、エンド・ノード、スイッチ、及びル
ータをサブネットに接続する。SANファブリックに導
入されたパケットは、そのパケットのソースからそのパ
ケットの宛先まで1つ又は複数の仮想レーンを辿る。選
択される仮想レーンは、そのパケットと関連したサービ
ス・レベルからマップされる。所与の物理リンクでは、
一時に1つの仮想レーンしか進行しない。仮想レーン
は、他の仮想レーンに影響を与えることなく、リンク・
レベル・フロー制御を1つの仮想レーンに適用するため
の技法を提供する。1つの仮想レーン上のパケットが競
合のためにサービス品質(QOS)を損なう時、異なる
仮想レーンにおけるパケットが進行することを可能にさ
れる。仮想レーンは、数多くの理由のために使用され、
それらのうちの幾つかを次に示す。
【0032】仮想レーンはQOSを提供する。1つの例
示的な実施例では、或る仮想レーンがQOSを提供する
ために高い優先順位又は等時性トラフィックに対して予
約される。
【0033】仮想レーンはデッドロック回避方法を提供
する。仮想レーンは、ループを含むトポロジがすべての
物理リンクにわたってパケットを送ることを可能にし、
そのループがデッドロックを生じ得るバック・プレッシ
ャ依存関係を生じさせないことを保証される。
【0034】仮想レーンは、ラインの頭部(head of li
ne)ブロッキングを緩和する。スイッチが、所与の仮想
レーンを利用するパケットにとって利用可能なクレジッ
トを最早持たない時、十分なクレジットを有する異なる
仮想レーンを利用するパケットは順方向に進行すること
を許される。
【0035】次に、図4を参照すると、本発明の望まし
い実施例に従って、ワーク・リクエストの処理を表す図
が示される。図4において、受信ワーク・キュー40
0、送信ワーク・キュー402、及び完了キュー404
がコンシューマ406からのリクエスト及びコンシュー
マ406に対するリクエストを処理するために存在す
る。コンシューマ406からのこれらのリクエストは、
最終的には、ハードウェア408に送られる。この例で
は、コンシューマ406は、ワーク・リクエスト410
及び412を発生し、ワーク完了414を受信する。図
4に示されるように、ワーク・キュー上に入れられたワ
ーク・リクエストは、ワーク・キュー・エレメント(W
QE)と呼ばれる。
【0036】送信ワーク・キュー402は、SANファ
ブリックを介して送信されるべきデータを記述したワー
ク・キュー・エレメント(WQE)422−428を含
む。受信ワーク・キュー400は、SANファブリック
からの着信チャネル・セマンティック・データをどこに
入れるべきかを記述したワーク・キュー・エレメント
(WQE)416−420を含む。ワーク・キュー・エ
レメントは、ホスト・チャネル・アダプタにおけるハー
ドウェア408によって処理される。
【0037】バーブは、完了したワークを完了キュー4
04から検索するための機構も提供する。図4に示され
るように、完了キュー404は、完了キュー・エレメン
ト(CQE)430−436を含んでいる。完了キュー
・エレメントは、以前に完了したワーク・キュー・エレ
メントに関する情報を含んでいる。完了キュー404
は、複数のキュー・ペアに対して単一ポイントの完了通
知を作成するために使用される。完了キュー・エレメン
トは、完了キューにおけるデータ構造である。このエレ
メントは、完了済みワーク・キュー・エレメントを記述
する。完了キュー・エレメントは、キュー・ペア及び完
了した特定のワーク・キュー・エレメントを決定するに
十分な情報を含んでいる。完了キュー・コンテキスト
は、長さに対するポインタ及び個々の完了キューを管理
するために必要な他の情報に対するポインタを含む情報
のブロックである。
【0038】図4に示された送信ワーク・キュー402
のためのサポートされる例示のワーク・リクエストは次
のようなものである。送信ワーク・リクエストは、リモ
ート・ノードの受信ワーク・キュー・エレメントによっ
て参照されたデータ・セグメントに一組のローカル・デ
ータ・セグメントを押し込むためのチャネル・セマンテ
ィック・オペレーションである。例えば、ワーク・キュ
ー・エレメント428は、データ・セグメント4(43
8)、データ・セグメント5(440)、及びデータ・
セグメント6(442)に対する基準を含んでいる。送
信ワーク・リクエストのデータ・セグメントの各々は、
仮想的に連続したメモリ領域を含んでいる。ローカル・
データ・セグメントを参照するために使用される仮想ア
ドレスは、ローカル・キュー・ペアを作成したプロセス
のアドレス・コンテキスト内にある。
【0039】リモート・ダイレクト・メモリ・アクセス
(RDMA)の読み取りワーク・リクエストは、リモー
ト・ノードにおける仮想的に連続したメモリ・スペース
を読み取るためにメモリ・セマンティック・オペレーシ
ョンを行う。メモリ・スペースは、メモリ領域の一部分
又はメモリ・ウィンドウの一部分であってもよい。メモ
リ領域は、仮想アドレス及び長さによって定義された仮
想的に連続したメモリ・アドレスの事前登録されたセッ
トのことである。メモリ・ウィンドウは、事前登録され
た領域にバインドされている仮想的に連続したメモリ・
アドレスのセットにのことである。
【0040】「RDMA読み取り」ワーク・リクエスト
は、リモート・エンド・ノードにおける仮想的に連続し
たメモリ・スペースを読み取り、仮想的に連続したロー
カル・メモリ・スペースにそのデータを書き込む。送信
ワーク・リクエストと同様に、ローカルデータ・セグメ
ントを参照するために「RDMA読み取り」ワーク・キ
ュー・エレメントによって使用される仮想アドレスは、
ローカル・キュー・ペアを作成したプロセスのアドレス
・コンテキストにある。例えば、受信ワーク・キュー4
00におけるワーク・キュ−・エレメント416は、デ
ータ・セグメント1(444)、データ・セグメント2
(446)、及びデータ・セグメント3(448)を参
照する。リモート仮想アドレスは、「RDMA読み取
り」ワーク・キュー・エレメントによってターゲットに
されたリモート・キュー・ペアを所有するプロセスのア
ドレス・コンテキストにある。
【0041】「RDMA書き込み」ワーク・キュー・エ
レメントは、リモート・ノードにおける仮想的に連続し
たメモリ・スペースを書き込むためのメモリ・セマンテ
ィック・オペレーションを行う。「RDMA書き込み」
ワーク・キュー・エレメントは、ローカルの仮想的に連
続したメモリ・スペースのスキャッタ・リスト及びロー
カル・メモリ・スペースが書き込まれるリモート・メモ
リ・スペースの仮想アドレスを含む。
【0042】「RDMAフェッチOp」ワーク・キュー
・エレメントは、リモート・ワードにおけるアトミック
・オペレーション行うためのメモリ・セマンティック・
オペレーションを提供する。「RDMAフェッチOp」
ワーク・キュー・エレメントは、「RDMA読み取
り」、「修正」、及び「RDMA書き込み」オペレーシ
ョンを結合したものである。「RDMAフェッチOp」
ワーク・キュー・エレメントは、等しい場合の「比較交
換(Compare and Swap)」のような幾
つかの読み取り/修正/書き込みオペレーションをサポ
ートすることができる。バインド(アンバインド)リモ
ート・アクセス・キー(Rキー)ワーク・キュー・エレ
メントは、メモリ・ウィンドウをメモリ領域に関連付け
る(関連を解く)ことによってメモリ・ウィンドウを修
正(破壊)するためのコマンドをホスト・チャネル・ア
ダプタ・ハードウェアに供給する。Rキーは、各RDM
Aアクセスの一部であり、リモート・プロセスがバッフ
ァへのアクセスを許可したことを検証するために使用さ
れる。
【0043】1つの実施例では、図4に示された受信ワ
ーク・キュー400は、受信ワーク・キュー・エレメン
トと呼ばれる1つのタイプのワーク・キュー・エレメン
トしかサポートしない。受信ワーク・キュー・エレメン
トは、着信する送信メッセージが書き込まれるローカル
・メモリ・スペースを記述するチャネル・セマンティッ
ク・オペレーションを行う。受信ワーク・キュー・エレ
メントは、幾つかの仮想的に連続したメモリ・スペース
を記述したスキャッタ・リストを含む。着信する送信メ
ッセージは、これらのメモリ・スペースに書き込まれ
る。仮想アドレスは、ローカル・キュー・ペアを作成し
たプロセスのアドレス・コンテキストにある。
【0044】プロセッサ間通信のために、ユーザ・モー
ド・ソフトウェア・プロセスは、バッファがメモリ内に
存在する位置からキュー・ペアを介して直接にデータを
転送する。1つの実施例では、それらのキュー・ペアを
介した転送は、オペレーティング・システムを迂回し、
わずかなホスト命令サイクルしか消費しない。キュー・
ペアは、オペレーティング・システムのカーネル関与の
ないプロセッサ−コピー・データ転送をゼロにさせる。
プロセッサ−コピー・データ転送がゼロであることは、
高い帯域幅及び小さい待ち時間という通信の効率的なサ
ポートを提供する。
【0045】キュー・ペアが作成される時、そのキュー
・ペアは、1つの選択されたタイプのトランスポート・
サービスを提供するようにセットされる。1つの実施例
では、本発明を実施する分散型コンピュータ・システム
が4つのタイプのトランスポート・サービス、即ち、高
い信頼度の接続サービス、低い信頼度の接続サービス、
高い信頼度のデータグラム接続サービス、及び低い信頼
度のデータグラム接続サービスをサポートする。
【0046】高い信頼度の及び低い信頼度の接続サービ
スは、ローカル・キュー・ペアを1つの、しかも唯一の
リモート・キュー・ペアと関連付ける。接続サービス
は、プロセスが、そのSANファブリックを介して通信
を行うべき各プロセスに対してキュー・ペアを作成する
ことを必要とする。従って、N個のホスト・プロセッサ
・ノードの各々がP個のプロセスを含み、各ノードにお
けるP個のプロセスすべてが他のすべてのノードにおけ
るすべてのプロセスと通信を行うことを望んでいる場
合、各ホスト・プロセッサ・ノードは、P2*(N−
1)個のキュー・ペアを必要とする。更に、プロセス
は、キュー・ペアを、同じホスト・チャネル・アダプタ
における他のキュー・ペアに結合することができる。
【0047】図5には、分散型プロセス相互間で通信を
行うために高い信頼度の接続サービスを使用する分散型
コンピュータ・システムの一部分が概略的に示される。
図5における分散型コンピュータ・システム500は、
ホスト・プロセッサ・ノード1、ホスト・プロセッサ・
ノード2、及びホスト・プロセッサ・ノード3を含む。
ホスト・プロセッサ・ノード1は、プロセスA(51
0)を含む。ホスト・プロセッサ・ノード3は、プロセ
スC(520)及びプロセスD(530)を含む。ホス
ト・プロセッサ・ノード2は、プロセスE(540)を
含む。
【0048】ホスト・プロセッサ・ノード1は、キュー
・ペア4、6、及び7を含み、それらのキュー・ペアの
各々は送信ワーク・キュー及び受信ワーク・キューを有
する。ホスト・プロセッサ・ノード2はキュー・ペア9
を有し、ホスト・プロセッサ・ノード3はキュー・ペア
2及び5を有する。分散型コンピュータ・システム50
0の高い信頼度の接続サービスは、ローカル・キュー・
ペアを1つの、しかも唯一のリモート・キュー・ペアと
関連付ける。従って、キュー・ペア4は、キュー・ペア
2と通信を行うために使用される。キュー・ペア7は、
キュー・ペア5と通信を行うために使用される。キュー
・ペア6は、キュー・ペア9と通信を行うために使用さ
れる。
【0049】高い信頼度の接続サービスにおける1つの
キュー・ペアに入れられたWQEは、その接続されたキ
ュー・ペアの「受信WQE」によって参照される受信メ
モリ・スペースにデータを書き込ませる。RDMAオペ
レーションは、接続されたキュー・ペアのアドレス・ス
ペースにおいて動作する。
【0050】本発明の1つの実施例では、高い信頼度の
接続サービスは、ハードウェアがシーケンス番号を維持
し且つすべてのパケット転送を確認するので、信頼し得
るものにされる。ハードウェア及びSANドライバ・ソ
フトウェアの組み合わせは、失敗した如何なる通信も再
試行する。キュー・ペアのプロセス・クライアントは、
ビット・エラー、受信アンダーラン、及びネットワーク
輻輳が存在する場合でも、高い信頼度の通信を得る。S
ANファブリックに代替えとなるパスが存在する場合、
ファブリック・スイッチ、リンク、又はチャネル・アダ
プタ・ポートの障害が存在する場合でも、高い信頼度の
通信が維持され得る。
【0051】更に、SANファブリックを通してデータ
を高い信頼度で配送するために、肯定応答が使用可能で
ある。肯定応答は、プロセス・レベル肯定応答、即ち、
受信プロセスがそのデータを消滅させてしまったことを
確認する肯定応答であってもよく、そうでなくてもよ
い。別の方法として、肯定応答は、データがそれの宛先
に到達したことだけを表すものであってもよい。
【0052】高い信頼度のデータグラム・サービスがロ
ーカル・エンド・ツー・エンド(EE)コンテキストを
1つの、しかも唯一のリモート・エンド・ツー・エンド
・コンテキストと関連付ける。高い信頼度のデータ・グ
ラム・サービスは、1つのキュー・ペアのクライアント
・プロセスが他の任意のリモート・ノードにおける他の
任意のキュー・ペアと通信を行うことを可能にする。受
信ワーク・キューにおいて、高い信頼度のデータグラム
・サービスは、他の任意のリモート・ノードにおける任
意の送信ワーク・キューからの着信メッセージを許容す
る。
【0053】高い信頼度のデータグラム・サービスは、
その高い信頼度のデータグラム・サービスがコネクショ
ンレス型のものであるので、拡張容易性を大きく改善す
る。従って、一定数のキュー・ペアを有するエンド・ノ
ードは、高い信頼度のデータグラム・サービスによっ
て、高い信頼度の接続トランスポート・サービスによる
よりもずっと多くのプロセスと通信を行うことができ
る。例えば、N個のホスト・プロセッサ・ノードの各々
がP個のプロセスを含み、各ノードにおけるP個のプロ
セスすべてが他のすべてのノードにおけるすべてのプロ
セスと通信を行うことを望んでいる場合、高い信頼度の
接続サービスは、各ノードにおいてP2*(N−1)個
のキュー・ペアを必要とする。比較すると、コネクショ
ンレス型の高い信頼度のデータグラム・サービスは、全
く同じ通信に対して、各ノードにおいて、P個のキュー
・ペア+(N−1)個のEEコンテキストしか必要とし
ない。
【0054】図6には、分散したプロセス相互間で通信
を行うために高い信頼度のデータグラム・サービスを使
用する分散型コンピュータ・システムの一部分が示され
る。図6における分散型コンピュータ・システム600
は、ホスト・プロセッサ・ノード1、ホスト・プロセッ
サ・ノード2、及びホスト・プロセッサ・ノード3を含
む。ホスト・プロセッサ・ノード1は、キュー・ペア4
を有するプロセスA(610)を含む。ホスト・プロセ
ッサ・ノード2は、キュー・ペア24を有するプロセス
C(620)及びキュー・ペア25を有するプロセスD
(630)を含む。ホスト・プロセッサ・ノード3は、
キュー・ペア14を有するプロセスE(640)を含
む。
【0055】分散型コンピュータ・システム600にお
いて実施される高い信頼度のデータグラム・サービスで
は、キュー・ペアは、コネクションレス型トランスポー
ト・サービスと呼ばれるものにおいて結合される。例え
ば、高い信頼度のデータグラム・サービスは、キュー・
ペア4をキュー・ペア24、25、及び14に結合す
る。詳しく云えば、高い信頼度のデータグラム・サービ
スは、キュー・ペア4の送信ワーク・キューがキュー・
ペア24、25、及び14における受信ワーク・キュー
にメッセージを高い信頼度で転送することを可能にす
る。同様に、キュー・ペア24、25、及び14の送信
ワーク・キューは、キュー・ペア4における受信ワーク
・キューに高い信頼度でメッセージを転送することがで
きる。
【0056】本発明の1つの実施例では、高い信頼度の
データグラム・サービスは、高い信頼度の接続サービス
と同程度の信頼性を保証するために、各メッセージ・フ
レームと関連したシーケンス番号及び肯定応答を使用す
る。エンド・ツー・エンド(EE)コンテキストは、シ
ーケンス番号、肯定応答、及びタイム・アウト値を憶え
ておくためにエンド・ツー・エンド特有の状態を維持す
る。EEコンテキストに保持されたエンド・ツー・エン
ド状態は、1対のエンド・ノードの間のすべてのコネク
ションレス型キュー・ペア通信によって共用される。各
エンド・ノードは、それが高い信頼度のデータグラム・
サービスにおいて通信を行いたいすべてのエンド・ノー
ドに対して少なくとも1つのEEコンテキストを必要と
する(例えば、所与のエンド・ノードは、N個の他のエ
ンド・ノードとの高い信頼度のデータグラム・サービス
を持つことができるためには少なくともN個のEEコン
テキストを必要とする)。
【0057】低い信頼度のデータグラム・サービスはコ
ネクションレス型である。低い信頼度のデータ・グラム
・サービスは、新しいスイッチ、ルータ、及びエンド・
ノードを見つけてそれらを所与の分散型コンピュータ・
システムに統合するために、管理アプリケーションによ
って使用される。低い信頼度のデータグラム・サービス
は、高い信頼度の接続サービス及び高い信頼度のデータ
グラム・サービスの信頼性保証を提供しない。従って、
低い信頼度のデータグラム・サービスは、各エンド・ノ
ードに維持された少ない状態情報でもって動作する。
【0058】次に、図7を参照すると、本発明の望まし
い実施例に従って、データ・パケットを表す図が示され
る。データ・パケットは、SANファブリックを通して
経路指定される1単位の情報である。データ・パケット
は、エンド・ノード・ツー・エンド・ノード構成であ
り、従って、エンド・ノードによって作成及び消費され
る。チャネル・アダプタ(ホスト又はターゲット)を行
き先とするパケットに対して、SANファブリックにお
けるスイッチ及びルータによって、データ・パケットが
生成されることはなく、消費されることもない。チャネ
ル・アダプタを行き先とするデータ・パケットの代り
に、スイッチ及びルータが単にリクエスト・パケット又
は肯定応答パケットを最終的な宛先の近くに移動し、そ
のプロセスにおいて種々のリンク・ヘッダ・フィールド
を修正する。パケットがサブネット境界と交差する時、
ルータは、そのパケットのネットワーク・ヘッダも修正
する。サブネットを横断する場合、シングル・パケット
はシングル・サービス・レベルに留まる。
【0059】メッセージ・データ700は、データ・セ
グメント1(702)、データ・セグメント2(70
4)、及びデータ・セグメント3(706)を含む。そ
れらのデータ・セグメントは、図4に示されたデータ・
セグメントと同じである。この例では、これらのデータ
・セグメントは、データ・パケット712におけるパケ
ット・ペイロード710に入れられるパケット708を
形成する。更に、データ・パケット712は、エラー・
チェックのために使用されるCRC714を含む。更
に、ルーティング・ヘッダ716及びトランスポート・
ヘッダ718がデータ・パケット712内に存在する。
ルーティング・ヘッダ716は、データ・パケット71
2に対するソース・ポート及び宛先ポートを識別するた
めに使用される。この例におけるトランスポート・ヘッ
ダ718は、データ・パケット712に対する宛先キュ
ー・ペアを指定する。更に、トランスポート・ヘッダ7
18は、データ・パケット712に対するオペレーショ
ン・コード、パケット・シーケンス番号、及びパーティ
ションのような情報も提供する。
【0060】オペレーション・コードは、そのパケット
がメッセージの第1のパケット、最後のパケット、中間
のパケット、又は唯一のパケットのどれであるかを識別
する。オペレーション・コードは、そのオペレーション
が送信、RDMA書き込み、RDMA読み取り、又はア
トミックのどれであるかも指定する。パケット・シーケ
ンス番号は、通信が確立される時に初期設定され、キュ
ー・ペアが新しいパケットを作成する度にインクリメン
トする。エンド・ノードのポートは、パーティションと
呼ばれる1つ又は複数のオーバラップする可能性のある
セットのメンバであるように構成され得る。
【0061】図8には、例示のリクエスト及び肯定応答
トランザクションを説明するために、分散型コンピュー
タ・システムの一部分が示される。図8における分散型
コンピュータ・システムは、ホスト・プロセッサ・ノー
ド802及びホスト・プロセッサ・ノード804を含
む。ホスト・プロセッサ・ノード802は、ホスト・チ
ャネル・アダプタ806を含む。ホスト・プロセッサ・
ノード804は、ホスト・チャネル・アダプタ808を
含む。図8における分散型コンピュータ・システムは、
スイッチ812及びスイッチ814を含むSANファブ
リック810を含む。そのSANファブリック810
は、ホスト・チャネル・アダプタ806をスイッチ81
2に結合するリンク;スイッチ812をスイッチ814
に結合するリンク、及びホスト・チャネル・アダプタ8
08をスイッチ814に結合するリンクを含む。
【0062】例示のトランザクションでは、ホスト・プ
ロセッサ・ノード802がクライアント・プロセスAを
含む。ホスト・プロセッサ・ノード804がクライアン
ト・プロセスBを含む。クライアント・プロセスAは、
キュー・ペア23(送信ワーク・キュー824及び受信
ワーク・キュー826)を介してホスト・チャネル・ア
ダプタ・ハードウェア806と相互作用する。クライア
ント・プロセスBは、キュー・ペア24(送信ワーク・
キュー828及び受信ワーク・キュー830)を介して
ホスト・チャネル・アダプタ・ハードウェア808と相
互作用する。キュー・ペア23及び24は、送信ワーク
・キュー及び受信ワーク・キューを含むデータ構造であ
る。プロセスAは、ワーク・キュー・エレメントをキュ
ー・ペア23の送信ワーク・キュー824に入力するこ
とによってメッセージ・リクエストを開始する。そのよ
うなワーク・キュー・エレメントは図4に示される。ク
ライアント・プロセスAのメッセージ・リクエストは、
送信ワーク・キュー・エレメントに含まれた集合リスト
によって参照される。集合リストにおける各データ・セ
グメントは、図4におけるメッセージ・パート1、2、
及び3をそれぞれ保持したデータ・セグメント1、2、
及び3によって表されるようなメッセージの一部分を含
む仮想的に連続したローカル・メモリ・スペースを指示
する。
【0063】ホスト・チャネル・アダプタ806におけ
るハードウェアは、ワーク・キュー・エレメントを読み
取り、仮想連続バッファに記憶されたメッセージを、図
7に示されたデータ・パケットのようなデータ・パケッ
トの形にセグメント化する。データ・パケットはSAN
ファブリックを通して経路指定され、高い信頼度の転送
サービスのために、最終的な宛先エンド・ノードによっ
て肯定応答される。連続して肯定応答されない場合、デ
ータ・パケットがソース・エンド・ノードによって再伝
送される。データ・パケットは、ソース・エンド・ノー
ドによって生成され、宛先エンド・ノードによって消費
される。
【0064】図9を参照すると、本発明に従って、分散
型ネットワーク・システムにおいて使用されるネットワ
ーク・アドレシングを表す図が示される。ホスト名は、
ホスト・プロセッサ・ノード又はI/Oアダプタ・ノー
ドのようなホスト・ノードに対して論理的識別を与え
る。ホスト名は、メッセージがそのホスト名によって識
別されたエンド・ノードにあるプロセスを宛先とするよ
うに、メッセージに対するエンド・ポイントを識別す
る。従って、1つのノードに対して1つのホスト名が存
在するが、ノードは複数のCAを有する。単一のIEE
E割り当ての64ビット識別子(EUI−64)902
が各コンポーネントに割り当てられる。コンポーネント
は、スイッチ、ルータ、又はCAであってもよい。
【0065】1つ又は複数のグローバル的にユニークな
ID(GUID)識別子904がCAポートに対して割
り当てられる。幾つかの理由で、複数のGUID(a.
k.a.IPアドレス)が使用され得る。それらの理由の
幾つかが以下の例で示される。1つの例では、異なるI
Pアドレスがエンド・ノードにおける異なるパーティシ
ョン又はサービスを識別する。別の実施例では、異なる
IPアドレスが異なるサービス品質(QOS)アトリビ
ュートを指定するために使用される。更にもう1つの実
施例では、異なるIPアドレスがイントラ・サブネット
・ルートを介して異なるパスを識別する。
【0066】1つのGUID908がスイッチ910に
割り当てられる。ローカルID(LID)は、単一のサ
ブネット内のCAポートを識別するために使用される短
いアドレスIDのことである。1つの実施例では、サブ
ネットは、216個までのエンド・ノード、スイッチ、及
びルータを有し、従って、LIDは16ビットである。
ソースLID(SLID)及び宛先LID(DLID)
は、ローカル・ネットワーク・ヘッダにおいて使用され
るソースLID及び宛先LIDである。シングルCAポ
ート906は、2LMC個までのLIDをそれに割り当て
られる。なお、LMCは、CAにおけるLIDマスク制
御フィールドを表す。マスクは、他のデータ・セットに
おけるビット・パターンを受け容れるために又は拒否す
るために使用されるビット・パターンである。
【0067】複数のLIDが、次のような例によって与
えられる幾つかの理由のために使用可能である。1つの
実施例では、種々のLIDがエンド・ノードにおける種
々のパーティション又はサービスを識別する。別の実施
例では、種々のLIDが種々のQOSアトリビュートを
指定するために使用される。更にもう1つの実施例で
は、種々のLIDがサブネットを通した種々のパスを指
定する。シングル・スイッチ・ポート914は、1つの
LID916をそれと関連付けられる。
【0068】LIDとGUIDとの間に1対1の対応関
係が必ずしも存在するわけではない。それは、CAが各
ポートに対するGUIDよりも多い又は少ないLIDを
持つことができるためである。複数のSANファブリッ
クに対して冗長なポート及び冗長な導電率を有するCA
に関して、それらのCAは、それのポートの各々におい
て同じLID及びGUIDを使用することができるが、
それを使用する必要はない。
【0069】図10には、本発明の望ましい実施例に従
って、分散型コンピュータ・システムの一部分が示され
る。分散型コンピュータ・システム1000は、サブネ
ット1002及びサブネット1004を含む。サブネッ
ト1002は、ホスト・プロセッサ・ノード(エンド・
ノード)1006、1008、及び1010を含む。サ
ブネット1004は、ホスト・プロセッサ・ノード(エ
ンド・ノード)1012及び1014を含む。サブネッ
ト1002は、スイッチ1016及び1018を含む。
サブネット1004は、スイッチ1020及び1022
を含む。
【0070】ルータは、サブネットを接続する。例え
ば、サブネット1002は、ルータ1024及び102
6によってサブネット1004に接続される。1つの実
施例では、サブネットは、216個までのエンド・ノー
ド、スイッチ、及びルータを有する。
【0071】サブネットは、単一のユニットとして管理
されるエンド・ノード及びカスケード・スイッチのグル
ープとして定義される。一般には、サブネットは、単一
の地理的又は機能的エリアを占める。例えば、1つの部
屋における単一のコンピュータ・システムが、サブネッ
トとして定義され得る。1つの実施例では、サブネット
におけるスイッチは、メッセージに対して非常に高速の
ワームホール(wormhole)又はカット・スルー
(cut−through)経路指定を行うことができ
る。
【0072】サブネット内のスイッチは、そのスイッチ
が着信メッセージ・パケットを素早く且つ効率的に経路
指定することを可能にするために、そのサブネットにお
ける独特のDLIDを検査する。1つの実施例では、ス
イッチは比較的簡単な回路であり、一般には、単一の集
積回路として実装される。サブネットは、カスケード・
スイッチによって形成された数百乃至数千個のエンド・
ノードを有することができる。
【0073】図10に示されるように、ずっと大きなシ
ステムに拡張するためには、サブネットがルータ102
4及び1026のようなルータに接続される。ルータ
は、IP宛先ID(例えば、IPv6宛先ID)を解釈
し、そのIPに適したパケットを経路指定する。
【0074】スイッチの例示的実施例が図3の(B)に
おいて概略的に示される。スイッチ又はルータにおける
各I/Oパスはポートを有する。一般に、スイッチは、
1つのポートから同じスイッチ上の他の任意のポートに
パケットを経路指定することができる。
【0075】サブネット1002又はサブネット100
4のようなサブネットでは、ソース・ポートから宛先ポ
ートまでのパスが宛先ホスト・チャネル・アダプタ・ポ
ートのLIDによって決定される。サブネット相互間に
おけるパスは、宛先ホスト・チャネル・アダプタ・ポー
トのIPアドレス(例えば、IPv6アドレス)によっ
て、及び宛先のサブネットに到達するために使用される
ルータ・ポートのLIDアドレスによって決定される。
【0076】1つの実施例では、リクエスト・パケット
及びリクエスト・パケットの対応する正の肯定応答(A
CK)又は負の肯定応答(NAK)フレームによって使
用されるパスは、対称的である必要はない。或る経路指
定を使用する1つの実施例では、スイッチがDLIDに
基づいて出力ポートを選択する。1つの実施例では、ス
イッチがそれのすべての入力ポートに対して一連の経路
指定の判断基準を使用する。1つの例示的実施例では、
経路指定の判断基準が1つの経路指定テーブルに含まれ
る。別の実施例では、スイッチが各入力ポートに対して
別の一組の基準を使用する。
【0077】本発明の分散型コンピュータ・システムに
おけるデータ・トランザクションは、一般に、幾つかの
ハードウェア及びソフトウェア・ステップから成る。ク
ライアント・プロセス・データ・トランスポート・サー
ビスは、ユーザ・モード又はカーネル・モード・プロセ
スであってもよい。クライアント・プロセスは、図3の
(A)、図5、及び図6に示されたキュー・ペアのよう
な1つ又は複数のキュー・ペアを介してホスト・チャネ
ル・アダプタ・ハードウェアをアクセスする。クライア
ント・プロセスは、本願では「バーブ」と呼ばれるオペ
レーティング・システム特有のプログラミング・インタ
ーフェースをコールする。バーブを実施するソフトウェ
ア・コードは、ワーク・キュー・エレメントを所与のキ
ュー・ペア・ワーク・キューに送付する。
【0078】ワーク・キュー・エレメントを送付する多
くの可能な方法があり、種々のコスト/パフォーマンス
設計ポイントを可能にするがインターオペラビリティ
(interoperability)には影響しない多くの可能なワー
ク・キュー・エレメント・フォーマットがある。しか
し、ユーザ・プロセスは、明確に定義された方法でバー
ブに対して通信を行わなければならず、SANファブリ
ックにまたがって伝送されるデータのフォーマット及び
プロトコルは、装置が異機種のベンダ環境において相互
協調処理することを可能にするために、完全に指定され
なければならない。
【0079】1つの実施例では、チャネル・アダプタ・
ハードウェアがワーク・キュー・エレメントの送付を検
出し、ワーク・キュー・エレメントをアクセスする。こ
の実施例では、チャネル・アダプタ・ハードウェアがワ
ーク・キュー・エレメントの仮想アドレスを変換及び検
証し、データをアクセスする。
【0080】発信メッセージは、1つ又は複数のデータ
・パケットの形に分割される。1つの実施例では、チャ
ネル・アダプタ・ハードウェアがトランスポート・ヘッ
ダ及びネットワーク・ヘッダを各パケットに加える。ト
ランスポート・ヘッダは、シーケンス番号及び他のトラ
ンスポート情報を含む。ネットワーク・ヘッダは、宛先
IPアドレス及び他のネットワーク経路指定情報のよう
な経路指定情報を含む。リンク・ヘッダは、宛先ローカ
ル識別コード(DLID)又は他のローカル経路指定情
報を含む。いつも、適切なリンク・ヘッダがパケットに
加えられる。宛先エンド・ノードがリモート・サブネッ
トにある場合、適切なグローバル・ネットワーク・ヘッ
ダが所与のパケットに加えられる。
【0081】高い信頼度のトランスポート・サービスが
使用される場合、リクエスト・データ・パケットがそれ
の宛先エンド・ノードに到達する時、そのリクエスト・
データ・パケットが検証され、宛先エンド・ノードにお
いて受け容れられたことをリクエスト・データ・パケッ
トの発信側に知らせるために、肯定応答データ・パケッ
トが宛先エンド・ノードによって使用される。肯定応答
データ・パケットは、1つ又は複数の有効な且つ受け容
れられたリクエスト・データ・パケットに肯定応答す
る。リクエスタは、それが何らかの肯定応答を受信する
前に、複数の未処理のリクエスト・データ・パケットを
持つことが可能である。1つの実施例では、複数の未処
理のメッセージ、即ち、リクエスト・データ・パケット
の数は、キュー・ペアが作成される時に決定される。
【0082】図11には、本発明を実施するための階層
化アーキテクチャ1100の1つの実施例が概略的に示
される。図11の階層化アーキテクチャの図は、データ
通信パスの種々の層及び層相互間で送られるデータ及び
制御情報の編成を示す。
【0083】ホスト・チャネル・アダプタ・エンド・ノ
ード・プロトコル層(例えば、エンド・ノード1111
によって使用される)は、コンシューマ1103によっ
て定義された高レベル・プロトコル1102、トランス
ポート層1104、ネットワーク層1106、リンク層
1108、及び物理層1110を含む。スイッチ層(例
えば、スイッチ1113によって使用される)は、リン
ク層1108及び物理層1110を含む。ルータ層(例
えば、ルータ1115によって使用される)は、ネット
ワーク層1106、リンク層1108、及び物理層11
10を含む。
【0084】階層化アーキテクチャ1100は、一般
に、古典的な通信スタックの輪郭を呈している。エンド
・ノード1111のプロトコル層に関して、例えば、高
レベル・プロトコル1102は、トランスポート層11
04においてメッセージを作成するためにバーブを使用
する。ネットワーク層1106は、ネットワーク・サブ
ネット相互間におけるパケットを経路指定する(111
6)。リンク層1108は、ネットワーク・サブネット
におけるパケットを経路指定する(1118)。物理層
1110は、ビット又はビットのグループを他の装置の
物理層に送る。それらの層の各々は、上位の層又は下位
の層が如何にしてそれらの機能を遂行するかを知らな
い。
【0085】コンシューマ1103及び1105は、エ
ンド・ノード相互間で通信を行うために他の層を使用す
るアプリケーション又はプロセスを表す。トランスポー
ト層1104は、終端間のメッセージ移動を行う。1つ
の実施例では、トランスポート層は、上記のような4つ
のタイプのトランスポート・サービス、即ち、高い信頼
度の接続サービス、高い信頼度のデータグラム・サービ
ス、低い信頼度のデータグラム・サービス、及び生のデ
ータグラム・サービスを提供する。ネットワーク層11
06は、サブネット又は複数のサブネットを介して宛先
エンド・ノードへのパケット経路指定を行う。リンク層
1108は、フロー制御された、エラー・チェックされ
た、及び優先順位付けられたパケット配送をリンクにま
たがって行う。
【0086】物理層1110は、テクノロジ依存性のビ
ット伝送を行う。ビット又はビットのグループがリンク
1122、1124、及び1126を介して物理層相互
間で送られる。リンクは、印刷回路銅トレース、銅ケー
ブル、光ケーブルでもって、又は他の適当なリンクでも
って実施され得る。
【0087】本発明は、図1乃至図11に関連して上述
したSAN環境において動作する。本発明は、ヘッド・
ポインタ及びテール・ポインタを使用して、SANアー
キテクチャにおいてワーク・キュー及び完了キューを管
理するための機構を提供する。ヘッド・ポインタ及びテ
ール・ポインタがそれぞれ使用される方法の理解を与え
るために、本発明の説明は、ワーク・キュー及び完了キ
ューの両方に関して行われるであろう。ワーク・キュー
及び完了キューによる本発明のオペレーションに関する
以下の説明が例示的なものであること、及び本発明の精
神及び技術的範囲を逸脱することなく修正が行われ得る
ことは明らかであろう。
【0088】A.ワーク・キューの構造 図12は、送信キュー又は受信キューであってもよい例
示的なワーク・キューを示す。ワーク・キュー1200
は、1つ又は複数のページから成り、それらのページ
は、一般に、4Kバイトであるが、他のサイズも使用可
能である。図12における例では、キューは、4つのペ
ージ、即ち、システム・メモリ1205に設けられたペ
ージ0(1201)、ページ1(1202)、ページ2
(1203)、及びページ3(1204)を使用する。
WQEサイズは、1ページに適合したWQEの数が2の
累乗となるように選択される。例えば、64バイトのW
QEの場合、64個のWQEが4Kのページに適合する
であろう。図12の例では、これは、256個のWQE
のキュー項目数(depth)を与えるであろう。ワーク・
キューを形成するページの数を変更することによって、
種々のキュー項目数が提供され得る。ハードウェアは、
ワーク・キューのサイズの選択においてかなりの融通性
を維持しながら、このページの数を2の累乗にすること
によって単純化される。
【0089】ワーク・キュー・ページ・テーブル(WQ
PT)1210が維持され、それはそのワーク・キュー
を形成するページのリスト1215を含む。これは、シ
ステム・メモリ又はHCAメモリ内に設けられ得るが、
いずれの場合も、それのロケーションはHCA1220
に記憶される。HCAは、各ワーク・キューのためのワ
ーク・キュー・ポインタ1230に対して2つのインデ
ックスを維持する。第1のWQPTインデックス123
2は、前述のWQPTにおいてインデックスするために
使用される。4ページから成るワーク・キューを有する
図12の例では、WQPTインデックスは2ビットであ
る。第2のインデックスは、WQページ・インデックス
1234であり、それは、ワーク・キューの各ページに
おいてインデックスするために使用される。例えば、6
4バイトWQE及び4Kページの場合、WQページ・イ
ンデックスは6ビットであろう。
【0090】ワーク・キューに対して、CIがテール・
ポインタ1250を維持し、HCAがヘッド・ポインタ
1236を維持する。CIによって維持されたテール・
ポインタは、次のWQEが設けられるワーク・キューに
おけるロケーションを指示する。HCAによって維持さ
れたヘッド・ポインタは、処理されるべき次のWQEの
ワーク・キューにおけるロケーションを指示する。
【0091】HCAは、キューにおけるWQEの数を表
すWQEカウンタ1260を維持し、WQEがWQEア
ダー1262を使用してキューに送られる時、CIがこ
のカウントをインクリメントすることを可能にするため
の機構を提供する。また、CIは、ワーク・キューにお
けるWQEの数を表すカウント1254を維持する。C
Iは、CQからそれの関連のCQEを検索することによ
って、それがWQEをエンキューする時に1だけそれの
WQEカウント1254をインクリメントし、WQEが
処理されてしまったことを確認する時に1だけそれをデ
クリメントする。HCAは、CIがそのWQEの数をエ
ンキューする時、CIによってWQEアダー1262に
書き込まれた数だけそれのWQEカウント1264をイ
ンクリメントする。HCAは、WQEが処理されてしま
った時、それのWQEカウント1264を1だけデクリ
メントする。
【0092】WQの初期状態はエンプティであり、それ
によって、HCAによって維持されたヘッド・インデッ
クス1236は、CIによって維持されるテール・イン
デックス1250に等しくなり、両方ともキューのヘッ
ド(即ち、先頭)を指示する。更に、HCA及びCIの
両方によって維持されたWQEカウントはゼロである。
【0093】B.完了キューの構造 図13は、例示的な完了キューを示す。完了キュー13
00は、1ページ又は複数ページから成り、そのページ
は、一般には、4Kバイトのサイズであるが、他のサイ
ズも使用可能である。図13における例では、キュー
は、4つのページ、即ち、システム・メモリ1305に
設けられたページ0(1301)、ページ1(130
2)、ページ2(1303)、及びページ3(130
4)を使用する。CQEサイズは、1ページに適合する
CQEの数が2の累乗となるように選択される。例え
ば、64バイトのCQEの場合、64個のCQEが4K
ページに適合するであろう。図13における例では、こ
れは、256個のCQEのキュー項目数を提供するであ
ろう。CQを形成するページの数を変更することによっ
て、種々のキュー項目数が提供され得る。このページの
数を2の累乗にすることによって、完了キューのサイズ
の選択において大きな融通性を維持しながら、ハードウ
ェアが簡素化される。
【0094】CQを形成するページのリスト1315を
含む完了キュー・ページ・テーブル(CQPT)131
0が維持される。これは、システム・メモリ又はHCA
メモリに設けられ得るが、いずれの場合も、そのロケー
ションはHCA1320に記憶される。HCAは、各C
Qのための完了キュー・ポインタ1330に対して2つ
のインデックスを維持する。第1のCQPTインデック
ス1332は、前述のCQPTをインデックスするため
に使用される。4ページから成るCQを有する図13に
おける例では、CQPTインデックスは2ビットであ
る。第2のインデックスはCQページ・インデックス1
334であり、それは、CQの各ページをインデックス
するために使用される。例えば、64バイトCQE及び
4Kページの場合、CQページ・インデックスは6ビッ
トになるであろう。
【0095】CQに対して、CIは、ヘッド・ポインタ
1340を維持し、HCAは、テール・ポインタ133
8を維持する。CIによって維持されたヘッド・ポイン
タ1340は、処理されるべき次のCQEの完了キュー
におけるロケーションを指示する。HCAによって維持
されたテール・ポインタは、次のCQEがエンキューさ
れる完了キューにおけるロケーションを指示する。
【0096】フリーCQEカウントは、CQにおいて得
られるエンプティ・スロットの数である。HCAは、C
QEカウンタ1360を維持し、CQEがフリーCQE
アダー1362を使用して処理されてしまった後、CI
がフリーCQEカウント1364に加わることを可能に
する機構を維持する。CIは、それがCQEを処理する
時、フリーCQEカウント1364を1だけインクリメ
ントする。CIは、フリーCQEアダー1362に1を
書き込むことによってこのインクリメントを遂行するよ
うにHCAに命令する。HCAは、CQEがCQにおい
てエンキューされる時、それのフリーCQEカウントを
1だけデクリメントする。
【0097】CQの初期状態はエンプティであり、それ
によって、HCAによって維持されたテール・インデッ
クス1338は、CIによって維持されたヘッド・イン
デックス1340に等しくなり、両方ともキューのヘッ
ドを参照する。更に、HCAによって維持されたフリー
CQEカウントは、CQに記憶され得るCQEの最大数
に等しい。
【0098】C.詳細なワーク・リクエスト・オペレー
ション 図14を参照すると、本発明の望ましい実施例に従っ
て、コンシューマがワーク・リクエストをワーク・キュ
ーに送付する時のチャネル・インターフェースのオペレ
ーションを表すフローチャートが示される。プロセス
は、ワーク・リクエストを受信することによって開始
し、CIは、WQEカウントのCIのローカル・コピー
を、そのワーク・キューに記憶され得るWQEの最大数
と比較することによって、そのワーク・キューが満杯で
あるかどうかをチェックする(ステップ1402)。そ
れらが等しい場合、そのキューは満杯であり、従って、
1つ又は複数のWQEが1つ又は複数のCQEを完了キ
ューに発信することによって処理されてしまったことを
HCAが表すまで、このワーク・リクエストは受け容れ
られない(ステップ1404)。そのキューがステップ
1402では満杯でない場合、WQEは、テール・イン
デックスによって参照されたロケーションに書き込まれ
る(ステップ1406)。
【0099】CIは、リクエストを定義するWQEを形
成し、このWQEをキューのテール(即ち、末尾)に書
き込む。テールのロケーションは、WQPTインデック
ス及びWQページ・インデックスの組み合わせであるテ
ール・インデックスから決定される。ページ・アドレス
及びそのページへのオフセットの組み合わせは、WQE
が置かれるアドレスを提供する。別の方法として、ワー
ク・キュー・ページが連続した仮想アドレス・スペース
に対応する場合、CIは、仮想アドレスであるWQテー
ル・ポインタを維持し、ハードウェア・アドレス変換機
構を使用してそのキューにおける適切なロケーションに
WQEを記憶する。
【0100】そこで、テール・インデックスはインクリ
メントされ、次のWQEが入れられるロケーションを指
示する(ステップ1408)。次に、CIは、HCA機
構を使用してHCAのWQEカウントを1だけインクリ
メントし(ステップ1410)、処理を必要とする1つ
又は複数のWQEがワーク・キュー上に存在するという
ことをHCAに知らせる。WQEカウントのCIのロー
カル・コピーもインクリメントされる。しかる後、プロ
セスは終了する。
【0101】テール・インデックスがインクリメントさ
れる時、ページ・インデックスがラップする場合、WQ
PTインデックスが1だけインクリメントされる。WQ
PTインデックスがラップする場合、ワーク・キューが
そのキューのヘッドにラップしている。CIがテール・
インデックスをチェック及び更新し、WQEをキューの
テールに書き込むプロセスにある間、他のプロセスによ
って使用されないようにこれらのリソースの排他的ロッ
クを得ることが必要である。
【0102】次に、図15を参照すると、本発明の望ま
しい実施例に従って、ホスト・チャネル・アダプタのオ
ペレーションを表すフローチャートが示される。プロセ
スが始まり、HCAは、WQEカウントを周期的にチェ
ックすることによってワーク・キューをモニタする(ス
テップ1502)。WQEカウントがゼロであるかどう
かに関する決定が行われる(ステップ1504)。それ
がゼロである場合、キューはエンプティであり、プロセ
スはWQEカウントを検査するためにステップ1502
に戻る。ステップ1504においてWQEカウントがゼ
ロでない場合、処理されるべきWQEが存在し、HCA
がリクエストされたメッセージを送信する。別の方法と
して、CIがHCAにおけるWQEカウントに加えるた
めの機構を使用する時、HCAは、処理されるべきWQ
Eが存在するという表示としてこれを使用してもよい。
【0103】処理すべきWQEが存在する時、HCA
は、WQEを含むページを先ず位置指定することによっ
てWQEのロケーションを決定する(ステップ150
6)。これは、HCAのヘッドWQPTインデックスを
使用してWQPTをインデックスすることにより行われ
る。しかる後、WQページ・インデックス及びWQEの
サイズに基づいて、そのページ内のロケーションが決定
される。
【0104】しかる後、プロセスはメッセージを送信す
る(ステップ1508)。必要とされ得るすべての肯定
応答が受信され、WQE処理が完了する。HCAは、ヘ
ッド・インデックスのそれ自身のコピーをインクリメン
トする(ステップ1510)。ヘッド・インデックスが
インクリメントされる時、ページ・インデックスがラッ
プする場合、WQPTインデックスが1だけインクリメ
ントされる。WQPTインデックスがラップする場合、
ワーク・キューがキューのヘッドにラップしている。H
CAがそれのWQEカウントを1だけデクリメントす
る。
【0105】WQE処理が完了した後、HCAは、CQ
EをCQのテールに書き込むことによってCIに通知す
る。このCQEにおけるフィールドの1つは、これが有
効なCQEであることをCIに表示する有効ビットであ
る。有効ビットが書き込まれる前に、又はそれが書き込
まれると同時に、CQEにおける他のフィールドがすべ
て書き込まれていることをハードウェアが保証しなけれ
ばならないということに留意してほしい。CQEを書き
込む前に、HCAは、先ず、フリーCQEカウントがゼ
ロであることをチェックすることによってCQが満杯で
ないことをチェックする(ステップ1512)。それが
ゼロである場合、CQは満杯であり、オペレーションが
エラーで終了する(ステップ1514)。ステップ15
12においてCQが満杯でない場合、HCAは、HCA
のテールCQPTインデックスを使用して先ずそのペー
ジを位置指定することにより、CQEを記憶すべきロケ
ーションを決定する(ステップ1516)。しかる後、
CQページ・インデックス及びCQEのサイズに基づい
てそのページ内のロケーションが決定され、プロセス
は、CQEを完了キューに書き込む(ステップ151
8)。そこで、HCAは、それのCQテール・インデッ
クスをインクリメントし、それによって、ページ・イン
デックスがラップする場合、CQPTインデックスが1
だけインクリメントされる(ステップ1520)。CQ
PTインデックスがラップする場合、CQテールはキュ
ーのヘッドにラップされている。HCAは、それのフリ
ーCQEカウントを1だけデクリメントし(ステップ1
522)、終了する。
【0106】次に、図16を参照すると、本発明の望ま
しい実施例に従って、コンシューマがワーク完了情報を
リクエストした時のチャネル・インターフェースのオペ
レーションを表すフローチャートが示される。プロセス
が始まり、そのプロセスは、CQのヘッドに置かれたC
QEがそれの有効性を表すためにそれの有効ビットをセ
ットされているかどうかをチェックする(ステップ16
02)。そこで、CIは、CQがエンプティであるかど
うかを決定する(ステップ1604)。CQがエンプテ
ィである場合、プロセスは終了する。ステップ1604
においてCQがエンプティでない場合、CIは、CQの
ヘッドにおけるCQEを読み取る(ステップ160
5)。このCQEは、CQページ・テーブルと結合して
CPヘッド・インデックスによって参照される。別の方
法として、CQページが連続した仮想アドレス・スペー
スに対応する場合、CIは、仮想アドレスであるCQヘ
ッド・ポインタを維持し、ハードウェアのアドレス変換
を使用してCQEをCQにおける適切なロケーションか
らフェッチする。そこで、ワーク完了情報をリクエスト
したコンシューマにその情報を戻すためにCQEの内容
が使用される(ステップ1606)。
【0107】CQEがCIによって処理されてしまった
後、CIがWQテール・インデックスをインクリメント
する方法と同様の方法でCQヘッド・インデックスがイ
ンクリメントされる(ステップ1608)。CIは、C
QEにおける有効ビットを、それが有効でないことを表
すようにセットすることによって、再びHCAによる使
用のためにCQEを利用可能にする(ステップ161
0)。そこで、CIは、HCA機構を使用してHCAの
フリーCQEカウントを1だけインクリメントすること
によって、CQEが処理されてしまったことをHCAに
知らせる(ステップ1612)。更に、CIは、WQ
WQEカウントのCIのコピーを1だけデクリメントす
ることによって、このCQEに対応したWQEを再利用
することができ(ステップ1614)、プロセスは終了
する。CIは、ワーク・キューにおけるスペースを空け
る前にCQ上に対応するスペースが存在することを保証
するために、WQEカウントのこの更新を行うことを要
求される。
【0108】CIは、CQヘッド・インデックスをチェ
ック及び更新し、CQEをそのキューのヘッドから読み
取り、そしてCQE有効ビットをリセットするというプ
ロセス中にある間、他のプロセスによって使用されない
ようにするために、これらのリソースの排他的ロックを
得る必要がある。
【0109】D.最適化 次に、本願における前述の基本的な方法に対する最適化
事項を箇条書きにして示す: (1)CIは、いくつかのWQEがワーク・キュー上に
置かれた後にHCAのWQEカウントを1回だけ更新す
ること及び送付されたWQEの数を加えることによっ
て、HCAへの書き込みの数を減らすことが可能であ
る。 (2)CIは、いくつかのCQEがCQから検索された
後にHCAのフリーCQEカウントを1回だけ更新する
ことによって、HCAへの書き込みの数を減らすことが
可能である。この場合、CAは、フリー・カウントを1
の代わりに可変数nだけインクリメントするための機構
を設ける必要がある。 (3)ワーク・キュー又はCQが仮想アドレス・スペー
スにおいて連続している場合、CIは、記憶又はフェッ
チを行うために、仮想アドレスを使用して及びハードウ
ェアのアドレス変換機構を使用してそのキューを参照す
ることが可能である。この場合、キューを参照するため
に使用される仮想アドレスは、ラップが生じた時を検出
するために、キューの末端の仮想アドレスに対してアク
セス及びチェックが行われた後、WQE又はCQEの長
さだけインクリメントされるであろう。 (4)キューが小さいか又はページ・サイズが大きい時
に起こり得る単一ページに適合したワーク・キューに対
して、WQPT及びWQPTインデックスが除去され得
る。その単一ページの実アドレスは、依然として記憶さ
れる必要があるであろう。 (5)キューが小さいか又はページ・サイズが大きい時
に起こり得る単一ページに適合したCQに対して、CQ
PT及びCQPTインデックスが除去され得る。その単
一ページの実アドレスは、依然として記憶される必要が
あるであろう。 (6)ワーク・キューが連続した実メモリに位置決めさ
れる場合、それは、CI及びHCAの両方によってアク
セス可能であり、WQPT及びWQPTインデックスは
除去され得る。 (7)CQが連続した実メモリに位置決めされる場合、
それはCI及びHCAの両方によってアクセス可能であ
り、CQPT及びCQPTインデックスは除去され得
る。
【0110】十分に機能するデータ処理システムに関連
して本発明を説明したけれども、本発明のプロセスが命
令に関するコンピュータ可読媒体の形で及び種々の形で
分配され得ること、及び本発明が分配を行うために実際
に使用される特定のタイプの信号保持媒体に関係なく等
しく適用することが当業者には明らかであるということ
に留意することは重要である。コンピュータ可読媒体の
例は、フロッピー(R)・ディスク、ハード・ディスク
・ドライブ、RAM、CD−ROM、DVD−ROMの
ような記録可能タイプの媒体、並びに、ディジタル及び
アナログ通信リンク、例えば、無線周波及び光波(ligh
t wave)伝送のような伝送形式を使用した有線又は無線
通信のような伝送タイプの媒体を含む。コンピュータ可
読媒体は、特定のデータ処理システムにおいて実際に使
用するためにデコードされるコード化フォーマットの形
式を取り得る。
【0111】本発明の記述は、例示及び説明を目的とし
て与えられ、網羅的であること又は開示された形式の発
明に限定されることを意図するものではない。当業者に
は、多くの修正及び変更が明らかであろう。実施例は、
発明の原理、実用的な応用例を最もよく説明するため
に、及び意図された特定の用途に適する種々の修正を伴
う種々の実施例に関して当業者以外の人が発明を理解し
得るように、選択及び記述された。
【0112】まとめとして、本発明の構成に関して以下
の事項を開示する。
【0113】(1)キューを管理するための方法にし
て、チャネル・インターフェースにおいてキュー・テー
ル・インデックスを発生するステップと、ホスト・チャ
ネル・アダプタにおいて前記キューに対するキュー・ヘ
ッド・インデックスを発生するステップと、前記ホスト
・チャネル・アダプタにおいて前記キューに対するキュ
ー・エントリ・カウントを発生するステップと、前記キ
ュー・ヘッド・インデックス、前記キュー・テール・イ
ンデックス、及び前記キュー・エントリ・カウントを使
用して前記キューを制御するステップと、を含む方法。 (2)前記キューがワーク・キューであり、前記ワーク
・キューが満杯であるかどうかを決定するために前記キ
ュー・エントリ・カウントが使用される、請求項1に記
載の方法。 (3)前記キューがワーク・キューであり、ワーク・キ
ュー・エントリがチャネル・インターフェースによって
書き込まれ得る前記ワーク・キューにおける位置を決定
するために前記キュー・テール・インデックスが使用さ
れる、請求項1に記載の方法。 (4)前記キューがワーク・キューであり、前記ホスト
・チャネル・アダプタによって処理されるべきワーク・
キュー・エントリを決定するために前記キュー・ヘッド
・インデックスが使用される、請求項1に記載の方法。 (5)前記キューがワーク・キューであり、前記ワーク
・キューがエンプティであるかどうかを決定するために
前記キュー・エントリ・カウントが使用される、請求項
1に記載の方法。 (6)前記キュー・ヘッド・インデックスがキュー・ポ
インタ・テーブル・インデックス及びキュー・ページ・
インデックスから成る、請求項1に記載の方法。 (7)前記キューがワーク・キューであり、前記キュー
を制御するステップは、前記ワーク・キューが満杯であ
るかどうかを決定すること、及び前記ワーク・キューが
満杯でない場合、ワーク・リクエストを受け入れること
を含む、請求項1に記載の方法。 (8)前記ワーク・リクエストを受け入れることは、前
記キュー・テール・ポインタによって識別された前記ワ
ーク・キューの位置に、前記ワーク・リクエストに対応
するワーク・キュー・エントリを書き込むこと、前記キ
ュー・テール・ポインタをインクリメントすること、及
び前記キュー・エントリ・カウントをインクリメントす
ることを含む、請求項7に記載の方法。 (9)前記キュー・エントリ・カウントをインクリメン
トすることは、前記キュー・テール・ポインタのインク
リメント毎には行われない、請求項8に記載の方法。 (10)前記キューがワーク・キューであり、前記キュ
ーを制御するステップは、前記ワーク・キューがエンプ
ティであるかどうかを決定すること、前記ワーク・キュ
ーがエンプティでない場合、前記ホスト・チャネル・ア
ダプタにおいて、前記キュー・ヘッド・インデックスに
対応するワーク・キュー・エントリを処理すること、及
び前記ワーク・キュー・エントリの処理が完了した後、
完了キューに完了キュー・エントリを送付することを含
む、請求項1に記載の方法。 (11)キューを管理するための方法にして、チャネル
・インターフェースにおいて前記キューに対するキュー
・ヘッド・インデックスを発生するステップと、ホスト
・チャネル・アダプタにおいて前記キューに対するキュ
ー・テール・インデックスを発生するステップと、前記
ホスト・チャネル・アダプタにおいて前記キューに対す
るフリー・キュー・エントリ・カウントを発生するステ
ップと、前記キュー・ヘッド・インデックス、前記キュ
ー・テール・インデックス、及び前記フリー・キュー・
エントリ・カウントを使用して前記キューを制御するス
テップと、を含む方法。 (12)前記キューが完了キューであり、前記チャネル
・インターフェースによって処理されるべき完了キュー
・エントリを識別するために前記キュー・ヘッド・イン
デックスが使用される、請求項11に記載の方法。 (13)前記キューが完了キューであり、前記完了キュ
ーがエンプティであるかどうかを決定するために前記フ
リー・キュー・エントリ・カウントが使用される、請求
項11に記載の方法。 (14)前記キューが完了キューであり、前記完了キュ
ーが満杯であるかどうかを決定するために前記フリー・
キュー・エントリ・カウントが使用される、請求項11
に記載の方法。 (15)前記キューが完了キューであり、完了キュー・
エントリが書き込まれる前記完了キューにおける位置を
識別するために前記キュー・テール・インデックスが使
用される請求項11に記載の方法。 (16)前記キュー・テール・インデックスがキュー・
ポインタ・テーブル・インデックス及びキュー・ページ
・インデックスから成る、請求項11に記載の方法。 (17)前記キューが完了キューであり、前記キューを
制御するステップは、前記完了キューが満杯であるかど
うかを決定すること、及び前記完了キューが満杯でない
場合、前記キュー・テール・インデックスによって識別
された前記完了キューの位置に完了キュー・エントリを
書き込むことを含む、請求項11に記載の方法。 (18)前記キューが完了キューであり、前記キューを
制御するステップは、前記完了キューがエンプティであ
るかどうかを決定すること、及び前記完了キューがエン
プティでない場合、前記キュー・ヘッド・インデックス
によって識別された完了キュー・エントリを処理するこ
とを含む、請求項17に記載の方法。 (19)コンピュータ可読媒体にあって、キューを管理
するためのコンピュータ・プログラムにして、チャネル
・インターフェースにおいてキュー・テール・インデッ
クスを発生するための命令と、ホスト・チャネル・アダ
プタにおいて前記キューに対するキュー・ヘッド・イン
デックスを発生するための命令と、前記ホスト・チャネ
ル・アダプタにおいて前記キューに対するキュー・エン
トリ・カウントを発生するための命令と、前記キュー・
ヘッド・インデックス、前記キュー・テール・インデッ
クス、及び前記キュー・エントリ・カウントを使用して
前記キューを制御するための命令と、を含むコンピュー
タ・プログラム。 (20)前記キューがワーク・キューであり、前記ワー
ク・キューが満杯であるかどうかを決定するために前記
キュー・エントリ・カウントが使用される、請求項19
に記載のコンピュータ・プログラム。 (21)前記キューがワーク・キューであり、前記ワー
ク・キューがエンプティであるかどうかを決定するため
に前記キュー・エントリ・カウントが使用される、請求
項19に記載のコンピュータ・プログラム。 (22)前記キューがワーク・キューであり、前記キュ
ーを制御するための命令は、前記ワーク・キューが満杯
であるかどうかを決定するための命令、及び前記ワーク
・キューが満杯でない場合、ワーク・リクエストを受け
入れるための命令を含む、請求項19に記載のコンピュ
ータ・プログラム。 (23)前記ワーク・リクエストを受け入れるための命
令は、前記キュー・テール・ポインタによって識別され
た前記ワーク・キューの位置に、前記ワーク・リクエス
トに対応するワーク・キュー・エントリを書き込むため
の命令、前記キュー・テール・ポインタをインクリメン
トするための命令、及び前記キュー・エントリ・カウン
トをインクリメントするための命令を含む、請求項22
に記載のコンピュータ・プログラム。 (24)前記キュー・エントリ・カウントは、前記キュ
ー・テール・ポインタのインクリメント毎には更新され
ない、請求項23に記載のコンピュータ・プログラム。 (25)前記キューがワーク・キューであり、前記キュ
ーを制御するための命令は、前記ワーク・キューがエン
プティであるかどうかを決定するための命令、前記ワー
ク・キューがエンプティでない場合、前記ホスト・チャ
ネル・アダプタにおいて、前記キュー・ヘッド・インデ
ックスに対応するワーク・キュー・エントリを処理する
ための命令、及び前記ワーク・キュー・エントリの処理
が完了した後、完了キューに完了キュー・エントリを送
付するための命令を含む、請求項19に記載のコンピュ
ータ・プログラム。 (26)コンピュータ可読媒体にあって、キューを管理
するためのコンピュータ・プログラムにして、チャネル
・インターフェースにおいて前記キューに対するキュー
・テール・インデックスを発生するための命令と、ホス
ト・チャネル・アダプタにおいて前記キューに対するキ
ュー・ヘッド・インデックスを発生するための命令と、
前記ホスト・チャネル・アダプタにおいて前記キューに
対するフリー・キュー・エントリ・カウントを発生する
ための命令と、前記キュー・ヘッド・インデックス、前
記キュー・テール・インデックス、及び前記フリー・キ
ュー・エントリ・カウントを使用して前記キューを制御
するための命令と、を含むコンピュータ・プログラム。 (27)前記キューが完了キューであり、前記完了キュ
ーがエンプティであるかどうかを決定するために前記フ
リー・キュー・エントリ・カウントが使用される、請求
項26に記載のコンピュータ・プログラム。 (28)前記キューが完了キューであり、前記完了キュ
ーが満杯であるかどうかを決定するために前記フリー・
キュー・エントリ・カウントが使用される、請求項26
に記載のコンピュータ・プログラム。 (29)前記キューが完了キューであり、前記キューを
制御するための命令は、前記完了キューが満杯であるか
どうかを決定するための命令、及び前記完了キューが満
杯でない場合、前記キュー・テール・インデックスによ
って識別された前記完了キューの位置に完了キュー・エ
ントリを書き込むための命令を含む、請求項26に記載
のコンピュータ・プログラム。 (30)前記キューが完了キューであり、前記キューを
制御するための命令は、前記完了キューがエンプティで
あるかどうかを決定するための命令、及び前記完了キュ
ーがエンプティでない場合、前記キュー・ヘッド・イン
デックスによって識別された完了キュー・エントリを処
理するための命令を含む、請求項29に記載のコンピュ
ータ・プログラム。 (31)ワーク・キューを管理するための装置にして、
チャネル・インターフェースと、前記チャネル・インタ
ーフェースに結合されたホスト・チャネル・アダプタと
を含み、前記チャネル・インターフェースが前記キュー
に対するキュー・テール・インデックスを含み、前記ホ
スト・チャネル・アダプタが前記キューに対するキュー
・ヘッド・インデックス及び前記キューに対するキュー
・エントリ・カウントを含み、前記ホスト・チャネル・
アダプタ及びチャネル・インターフェースが前記ヘッド
・インデックス、前記テール・インデックス、及び前記
キュー・エントリ・カウントを使用して前記キューを管
理する、装置。 (32)完了キューを管理するための装置にして、チャ
ネル・インターフェースと、前記チャネル・インターフ
ェースに結合されたホスト・チャネル・アダプタとを含
み、前記チャネル・インターフェースが前記キューに対
するキュー・ヘッド・インデックスを含み、前記ホスト
・チャネル・アダプタが前記キューに対するキュー・テ
ール・インデックス及び前記キューに対するキュー・エ
ントリ・カウントを含み、前記ホスト・チャネル・アダ
プタ及びチャネル・インターフェースが前記ヘッド・イ
ンデックス、前記テール・インデックス、及び前記キュ
ー・エントリ・カウントを使用して前記キューを管理す
る、装置。
【図面の簡単な説明】
【図1】本発明の望ましい実施例に従って示された分散
型コンピュータ・システムを表す図である。
【図2】本発明の望ましい実施例に従って示されたホス
ト・プロセッサ・ノードの機能的ブロック図である。
【図3】(A)は本発明の望ましい実施例に従って示さ
れたホスト・チャネル・アダプタの図であり、(B)は
本発明の望ましい実施例に従って示されたスイッチの図
であり、(C)は本発明の望ましい実施例に従って示さ
れたルータの図である。
【図4】本発明の望ましい実施例に従って、ワーク・リ
クエストの処理を図解した図である。
【図5】本発明の望ましい実施例に従って、高い信頼度
の接続サービスが使用される分散型コンピュータ・シス
テムの一部分を表す図である。
【図6】本発明の望ましい実施例に従って、高い信頼度
のデータグラム・サービス接続が使用される分散型コン
ピュータ・システムの一部分を表す図である。
【図7】本発明の望ましい実施例に従って、データ・パ
ケットを示す図である。
【図8】本発明の望ましい実施例に従って、分散型コン
ピュータ・システムの一部分を表す図である。
【図9】本発明の望ましい実施例に従って、分散型コン
ピュータ・システムにおいて使用されるネットワーク・
アドレッシングを示す図である。
【図10】本発明の望ましい実施例に従って、SANフ
ァブリック・サブネットの構造が図解された分散型コン
ピュータ・システムの一部分を表す図である。
【図11】本発明の望ましい実施例において使用された
層化された通信アーキテクチャを表す図である。
【図12】本発明の望ましい実施例に従って、ページ・
ポインタ、インデックス、及びアダーの組み合わせを使
用してキューをアクセスするために、ハードウェアとし
てはヘッド・ポインタしか使用しないワーク・キューの
例示的実施態様を示す図である。
【図13】本発明の望ましい実施例に従って、ページ・
ポインタ、インデックス、及びアダーの組み合わせを使
用してキューをアクセスするために、ハードウェアとし
てはテール・ポインタしか使用しない完了キューの例示
的実施態様を示す図である。
【図14】本発明の望ましい実施例に従って、コンシュ
ーマがワーク・キューにワーク・リクエストを送付する
時のチャネル・インターフェースのオペレーションを示
すフローチャートである。
【図15】本発明の望ましい実施例に従って、ホスト・
チャネル・アダプタのオペレーションを示すフローチャ
ートである。
【図16】本発明の望ましい実施例に従って、コンシュ
ーマがワーク完了情報ををリクエストした時のチャネル
・インターフェースのオペレーションを示すフローチャ
ートである。
【符号の説明】
400 受信ワーク・キュー 402 送信ワーク・キュー 404 完了キュー 406 コンシューマ 408 ハードウェア 410、412 ワーク・リクエスト 414 ワーク完了 416−428 ワーク・キュー・エレメント 430−436 完了キュー・エレメント
───────────────────────────────────────────────────── フロントページの続き (72)発明者 リチャード・ルイス・アルント アメリカ合衆国78746、テキサス州、オー スチン、バーン・スワロー・ドライブ 1607 (72)発明者 デービッド・エフ・クラッドック アメリカ合衆国12561、ニューヨーク州、 ニュー・パルツ、オールド・フォード・ロ ード 1130 (72)発明者 トーマス・アンソニー・グレッグ アメリカ合衆国12528、ニューヨーク州、 ハイランド、ベルビュー・ロード 121 (72)発明者 イアン・デービット・ジャド 英国S021 2EG、ウィンチェスター、 オッターボーン、コールス・メド 33 (72)発明者 グレゴリー・フランシス・ファイスター アメリカ合衆国78746、テキサス州、オー スチン、サー・アイボー・コーブ 5905 (72)発明者 レナト・ジョン・レシオ アメリカ合衆国78759、テキサス州、オー スチン、ウィネペッグ・コーブ 6707 (72)発明者 ドナルド・ウィリアム・シュミット アメリカ合衆国12484、ニューヨーク州、 ストーン・ブリッジ、ヴィンセント・レー ン 77 Fターム(参考) 5B045 BB17 BB28 BB34 BB42

Claims (32)

    【特許請求の範囲】
  1. 【請求項1】キューを管理するための方法にして、 チャネル・インターフェースにおいてキュー・テール・
    インデックスを発生するステップと、 ホスト・チャネル・アダプタにおいて前記キューに対す
    るキュー・ヘッド・インデックスを発生するステップ
    と、 前記ホスト・チャネル・アダプタにおいて前記キューに
    対するキュー・エントリ・カウントを発生するステップ
    と、 前記キュー・ヘッド・インデックス、前記キュー・テー
    ル・インデックス、及び前記キュー・エントリ・カウン
    トを使用して前記キューを制御するステップと、 を含む方法。
  2. 【請求項2】前記キューがワーク・キューであり、 前記ワーク・キューが満杯であるかどうかを決定するた
    めに前記キュー・エントリ・カウントが使用される、 請求項1に記載の方法。
  3. 【請求項3】前記キューがワーク・キューであり、 ワーク・キュー・エントリがチャネル・インターフェー
    スによって書き込まれ得る前記ワーク・キューにおける
    位置を決定するために前記キュー・テール・インデック
    スが使用される、 請求項1に記載の方法。
  4. 【請求項4】前記キューがワーク・キューであり、 前記ホスト・チャネル・アダプタによって処理されるべ
    きワーク・キュー・エントリを決定するために前記キュ
    ー・ヘッド・インデックスが使用される、 請求項1に記載の方法。
  5. 【請求項5】前記キューがワーク・キューであり、 前記ワーク・キューがエンプティであるかどうかを決定
    するために前記キュー・エントリ・カウントが使用され
    る、 請求項1に記載の方法。
  6. 【請求項6】前記キュー・ヘッド・インデックスがキュ
    ー・ポインタ・テーブル・インデックス及びキュー・ペ
    ージ・インデックスから成る、請求項1に記載の方法。
  7. 【請求項7】前記キューがワーク・キューであり、 前記キューを制御するステップは、 前記ワーク・キューが満杯であるかどうかを決定するこ
    と、及び前記ワーク・キューが満杯でない場合、ワーク
    ・リクエストを受け入れることを含む、請求項1に記載
    の方法。
  8. 【請求項8】前記ワーク・リクエストを受け入れること
    は、 前記キュー・テール・ポインタによって識別された前記
    ワーク・キューの位置に、前記ワーク・リクエストに対
    応するワーク・キュー・エントリを書き込むこと、 前記キュー・テール・ポインタをインクリメントするこ
    と、及び前記キュー・エントリ・カウントをインクリメ
    ントすることを含む、請求項7に記載の方法。
  9. 【請求項9】前記キュー・エントリ・カウントをインク
    リメントすることは、前記キュー・テール・ポインタの
    インクリメント毎には行われない、請求項8に記載の方
    法。
  10. 【請求項10】前記キューがワーク・キューであり、 前記キューを制御するステップは、 前記ワーク・キューがエンプティであるかどうかを決定
    すること、 前記ワーク・キューがエンプティでない場合、前記ホス
    ト・チャネル・アダプタにおいて、前記キュー・ヘッド
    ・インデックスに対応するワーク・キュー・エントリを
    処理すること、及び前記ワーク・キュー・エントリの処
    理が完了した後、完了キューに完了キュー・エントリを
    送付することを含む、請求項1に記載の方法。
  11. 【請求項11】キューを管理するための方法にして、 チャネル・インターフェースにおいて前記キューに対す
    るキュー・ヘッド・インデックスを発生するステップ
    と、 ホスト・チャネル・アダプタにおいて前記キューに対す
    るキュー・テール・インデックスを発生するステップ
    と、 前記ホスト・チャネル・アダプタにおいて前記キューに
    対するフリー・キュー・エントリ・カウントを発生する
    ステップと、 前記キュー・ヘッド・インデックス、前記キュー・テー
    ル・インデックス、及び前記フリー・キュー・エントリ
    ・カウントを使用して前記キューを制御するステップ
    と、 を含む方法。
  12. 【請求項12】前記キューが完了キューであり、 前記チャネル・インターフェースによって処理されるべ
    き完了キュー・エントリを識別するために前記キュー・
    ヘッド・インデックスが使用される、 請求項11に記載の方法。
  13. 【請求項13】前記キューが完了キューであり、 前記完了キューがエンプティであるかどうかを決定する
    ために前記フリー・キュー・エントリ・カウントが使用
    される、 請求項11に記載の方法。
  14. 【請求項14】前記キューが完了キューであり、 前記完了キューが満杯であるかどうかを決定するために
    前記フリー・キュー・エントリ・カウントが使用され
    る、 請求項11に記載の方法。
  15. 【請求項15】前記キューが完了キューであり、 完了キュー・エントリが書き込まれる前記完了キューに
    おける位置を識別するために前記キュー・テール・イン
    デックスが使用される請求項11に記載の方法。
  16. 【請求項16】前記キュー・テール・インデックスがキ
    ュー・ポインタ・テーブル・インデックス及びキュー・
    ページ・インデックスから成る、請求項11に記載の方
    法。
  17. 【請求項17】前記キューが完了キューであり、 前記キューを制御するステップは、 前記完了キューが満杯であるかどうかを決定すること、
    及び前記完了キューが満杯でない場合、前記キュー・テ
    ール・インデックスによって識別された前記完了キュー
    の位置に完了キュー・エントリを書き込むことを含む、
    請求項11に記載の方法。
  18. 【請求項18】前記キューが完了キューであり、 前記キューを制御するステップは、 前記完了キューがエンプティであるかどうかを決定する
    こと、及び前記完了キューがエンプティでない場合、前
    記キュー・ヘッド・インデックスによって識別された完
    了キュー・エントリを処理することを含む、請求項17
    に記載の方法。
  19. 【請求項19】コンピュータ可読媒体にあって、キュー
    を管理するためのコンピュータ・プログラムにして、 チャネル・インターフェースにおいてキュー・テール・
    インデックスを発生するための命令と、 ホスト・チャネル・アダプタにおいて前記キューに対す
    るキュー・ヘッド・インデックスを発生するための命令
    と、 前記ホスト・チャネル・アダプタにおいて前記キューに
    対するキュー・エントリ・カウントを発生するための命
    令と、 前記キュー・ヘッド・インデックス、前記キュー・テー
    ル・インデックス、及び前記キュー・エントリ・カウン
    トを使用して前記キューを制御するための命令と、 を含むコンピュータ・プログラム。
  20. 【請求項20】前記キューがワーク・キューであり、 前記ワーク・キューが満杯であるかどうかを決定するた
    めに前記キュー・エントリ・カウントが使用される、 請求項19に記載のコンピュータ・プログラム。
  21. 【請求項21】前記キューがワーク・キューであり、 前記ワーク・キューがエンプティであるかどうかを決定
    するために前記キュー・エントリ・カウントが使用され
    る、 請求項19に記載のコンピュータ・プログラム。
  22. 【請求項22】前記キューがワーク・キューであり、 前記キューを制御するための命令は、 前記ワーク・キューが満杯であるかどうかを決定するた
    めの命令、及び前記ワーク・キューが満杯でない場合、
    ワーク・リクエストを受け入れるための命令を含む、請
    求項19に記載のコンピュータ・プログラム。
  23. 【請求項23】前記ワーク・リクエストを受け入れるた
    めの命令は、 前記キュー・テール・ポインタによって識別された前記
    ワーク・キューの位置に、前記ワーク・リクエストに対
    応するワーク・キュー・エントリを書き込むための命
    令、 前記キュー・テール・ポインタをインクリメントするた
    めの命令、及び前記キュー・エントリ・カウントをイン
    クリメントするための命令を含む、請求項22に記載の
    コンピュータ・プログラム。
  24. 【請求項24】前記キュー・エントリ・カウントは、前
    記キュー・テール・ポインタのインクリメント毎には更
    新されない、請求項23に記載のコンピュータ・プログ
    ラム。
  25. 【請求項25】前記キューがワーク・キューであり、 前記キューを制御するための命令は、 前記ワーク・キューがエンプティであるかどうかを決定
    するための命令、 前記ワーク・キューがエンプティでない場合、前記ホス
    ト・チャネル・アダプタにおいて、前記キュー・ヘッド
    ・インデックスに対応するワーク・キュー・エントリを
    処理するための命令、及び前記ワーク・キュー・エント
    リの処理が完了した後、完了キューに完了キュー・エン
    トリを送付するための命令を含む、請求項19に記載の
    コンピュータ・プログラム。
  26. 【請求項26】コンピュータ可読媒体にあって、キュー
    を管理するためのコンピュータ・プログラムにして、 チャネル・インターフェースにおいて前記キューに対す
    るキュー・テール・インデックスを発生するための命令
    と、 ホスト・チャネル・アダプタにおいて前記キューに対す
    るキュー・ヘッド・インデックスを発生するための命令
    と、 前記ホスト・チャネル・アダプタにおいて前記キューに
    対するフリー・キュー・エントリ・カウントを発生する
    ための命令と、 前記キュー・ヘッド・インデックス、前記キュー・テー
    ル・インデックス、及び前記フリー・キュー・エントリ
    ・カウントを使用して前記キューを制御するための命令
    と、 を含むコンピュータ・プログラム。
  27. 【請求項27】前記キューが完了キューであり、 前記完了キューがエンプティであるかどうかを決定する
    ために前記フリー・キュー・エントリ・カウントが使用
    される、 請求項26に記載のコンピュータ・プログラム。
  28. 【請求項28】前記キューが完了キューであり、 前記完了キューが満杯であるかどうかを決定するために
    前記フリー・キュー・エントリ・カウントが使用され
    る、 請求項26に記載のコンピュータ・プログラム。
  29. 【請求項29】前記キューが完了キューであり、 前記キューを制御するための命令は、 前記完了キューが満杯であるかどうかを決定するための
    命令、及び前記完了キューが満杯でない場合、前記キュ
    ー・テール・インデックスによって識別された前記完了
    キューの位置に完了キュー・エントリを書き込むための
    命令を含む、請求項26に記載のコンピュータ・プログ
    ラム。
  30. 【請求項30】前記キューが完了キューであり、 前記キューを制御するための命令は、 前記完了キューがエンプティであるかどうかを決定する
    ための命令、及び前記完了キューがエンプティでない場
    合、前記キュー・ヘッド・インデックスによって識別さ
    れた完了キュー・エントリを処理するための命令を含
    む、請求項29に記載のコンピュータ・プログラム。
  31. 【請求項31】ワーク・キューを管理するための装置に
    して、 チャネル・インターフェースと、 前記チャネル・インターフェースに結合されたホスト・
    チャネル・アダプタとを含み、 前記チャネル・インターフェースが前記キューに対する
    キュー・テール・インデックスを含み、 前記ホスト・チャネル・アダプタが前記キューに対する
    キュー・ヘッド・インデックス及び前記キューに対する
    キュー・エントリ・カウントを含み、 前記ホスト・チャネル・アダプタ及びチャネル・インタ
    ーフェースが前記ヘッド・インデックス、前記テール・
    インデックス、及び前記キュー・エントリ・カウントを
    使用して前記キューを管理する、 装置。
  32. 【請求項32】完了キューを管理するための装置にし
    て、 チャネル・インターフェースと、 前記チャネル・インターフェースに結合されたホスト・
    チャネル・アダプタとを含み、 前記チャネル・インターフェースが前記キューに対する
    キュー・ヘッド・インデックスを含み、 前記ホスト・チャネル・アダプタが前記キューに対する
    キュー・テール・インデックス及び前記キューに対する
    キュー・エントリ・カウントを含み、 前記ホスト・チャネル・アダプタ及びチャネル・インタ
    ーフェースが前記ヘッド・インデックス、前記テール・
    インデックス、及び前記キュー・エントリ・カウントを
    使用して前記キューを管理する、 装置。
JP2002275672A 2001-09-24 2002-09-20 ヘッド・オンリ循環バッファを介してインフィニバンド・ワーク及び完了キューを管理する方法及び装置 Pending JP2003216592A (ja)

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
US09/961,900 2001-09-24
US09/961,900 US20030058875A1 (en) 2001-09-24 2001-09-24 Infiniband work and completion queue management via head only circular buffers

Publications (1)

Publication Number Publication Date
JP2003216592A true JP2003216592A (ja) 2003-07-31

Family

ID=25505164

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2002275672A Pending JP2003216592A (ja) 2001-09-24 2002-09-20 ヘッド・オンリ循環バッファを介してインフィニバンド・ワーク及び完了キューを管理する方法及び装置

Country Status (3)

Country Link
US (1) US20030058875A1 (ja)
JP (1) JP2003216592A (ja)
TW (1) TW583543B (ja)

Cited By (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2008152783A (ja) * 2006-12-19 2008-07-03 Internatl Business Mach Corp <Ibm> データ処理システム内で第1のホスト・システムと第2のホスト・システムとの間で通信するための方法、プログラム、およびシステム(トランザクション・プロトコルおよび共用メモリを使用するホスト・システム間の通信のためのシステムおよび方法)
JP4822224B2 (ja) * 2004-11-12 2011-11-24 インターナショナル・ビジネス・マシーンズ・コーポレーション キーを提供することなく要求者を認証するための方法およびシステム
EP2645248A1 (en) 2012-03-30 2013-10-02 Fujitsu Limited Information processing apparatus, arithmetic device, and information tansferring method

Families Citing this family (17)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US7068667B2 (en) * 2001-04-27 2006-06-27 The Boeing Company Method and system for path building in a communications network
US7200144B2 (en) * 2001-10-18 2007-04-03 Qlogic, Corp. Router and methods using network addresses for virtualization
US7447197B2 (en) * 2001-10-18 2008-11-04 Qlogic, Corporation System and method of providing network node services
US7310345B2 (en) * 2001-11-01 2007-12-18 International Business Machines Corporation Empty indicators for weighted fair queues
US20030101158A1 (en) * 2001-11-28 2003-05-29 Pinto Oscar P. Mechanism for managing incoming data messages in a cluster
US20080008202A1 (en) * 2002-10-31 2008-01-10 Terrell William C Router with routing processors and methods for virtualization
US7024613B2 (en) * 2003-02-06 2006-04-04 International Business Machines Corporation Method and apparatus for implementing infiniband transmit queue
US7212547B2 (en) * 2003-02-06 2007-05-01 International Business Machines Corporation Method and apparatus for implementing global to local queue pair translation
US7512143B2 (en) * 2003-10-16 2009-03-31 International Business Machines Corporation Buffer management for a target channel adapter
US8055818B2 (en) * 2004-08-30 2011-11-08 International Business Machines Corporation Low latency queue pairs for I/O adapters
US7356625B2 (en) * 2004-10-29 2008-04-08 International Business Machines Corporation Moving, resizing, and memory management for producer-consumer queues by consuming and storing any queue entries from an old queue before entries from a new queue
JP7010129B2 (ja) * 2018-04-19 2022-01-26 富士通株式会社 プロセッサ及び情報処理装置
EP4260195A1 (en) 2021-01-06 2023-10-18 Enfabrica Corporation Server fabric adapter for i/o scaling of heterogeneous and accelerated compute systems
WO2022262989A1 (en) * 2021-06-18 2022-12-22 Huawei Technologies Co., Ltd. A device and method for remote direct memory access
US11880593B2 (en) * 2021-08-13 2024-01-23 Samsung Electronics Co., Ltd. Host, operating method of host and storage system
WO2023147440A2 (en) * 2022-01-26 2023-08-03 Enfabrica Corporation System and method for one-sided read rma using linked queues
US20230289297A1 (en) * 2022-03-14 2023-09-14 Samsung Electronics Co., Ltd. Systems and methods for managing memory utilization

Family Cites Families (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US6170003B1 (en) * 1993-08-10 2001-01-02 International Computers Limited Apparatus and method for communicating messages between data processing nodes using remote reading of message queues
US5671365A (en) * 1995-10-20 1997-09-23 Symbios Logic Inc. I/O system for reducing main processor overhead in initiating I/O requests and servicing I/O completion events
US6006292A (en) * 1997-03-13 1999-12-21 Adaptec, Inc. Method of managing hardware control blocks utilizing endless queue maintained to never be empty and containing tail pointer only accessible by process executing on system processor
US5905905A (en) * 1997-08-05 1999-05-18 Adaptec, Inc. System for copying IOBS from FIFO into I/O adapter, writing data completed IOB, and invalidating completed IOB in FIFO for reuse of FIFO
US6609161B1 (en) * 2000-06-01 2003-08-19 Adaptec, Inc. Two-dimensional execution queue for host adapters

Cited By (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP4822224B2 (ja) * 2004-11-12 2011-11-24 インターナショナル・ビジネス・マシーンズ・コーポレーション キーを提供することなく要求者を認証するための方法およびシステム
JP2008152783A (ja) * 2006-12-19 2008-07-03 Internatl Business Mach Corp <Ibm> データ処理システム内で第1のホスト・システムと第2のホスト・システムとの間で通信するための方法、プログラム、およびシステム(トランザクション・プロトコルおよび共用メモリを使用するホスト・システム間の通信のためのシステムおよび方法)
EP2645248A1 (en) 2012-03-30 2013-10-02 Fujitsu Limited Information processing apparatus, arithmetic device, and information tansferring method
US9003082B2 (en) 2012-03-30 2015-04-07 Fujitsu Limited Information processing apparatus, arithmetic device, and information transferring method

Also Published As

Publication number Publication date
US20030058875A1 (en) 2003-03-27
TW583543B (en) 2004-04-11

Similar Documents

Publication Publication Date Title
US6789143B2 (en) Infiniband work and completion queue management via head and tail circular buffers with indirect work queue entries
US7283473B2 (en) Apparatus, system and method for providing multiple logical channel adapters within a single physical channel adapter in a system area network
US6725296B2 (en) Apparatus and method for managing work and completion queues using head and tail pointers
US7095750B2 (en) Apparatus and method for virtualizing a queue pair space to minimize time-wait impacts
US7555002B2 (en) Infiniband general services queue pair virtualization for multiple logical ports on a single physical port
JP4012545B2 (ja) リモート・ダイレクト・メモリ・アクセス対応ネットワーク・インタフェース・コントローラのスイッチオーバーとスイッチバックのサポート
US7133405B2 (en) IP datagram over multiple queue pairs
US7979548B2 (en) Hardware enforcement of logical partitioning of a channel adapter&#39;s resources in a system area network
US8341237B2 (en) Systems, methods and computer program products for automatically triggering operations on a queue pair
US7895601B2 (en) Collective send operations on a system area network
US7519650B2 (en) Split socket send queue apparatus and method with efficient queue flow control, retransmission and sack support mechanisms
US20030061296A1 (en) Memory semantic storage I/O
US7103626B1 (en) Partitioning in distributed computer system
US7165110B2 (en) System and method for simultaneously establishing multiple connections
US6718392B1 (en) Queue pair partitioning in distributed computer system
US6829685B2 (en) Open format storage subsystem apparatus and method
US20050018669A1 (en) Infiniband subnet management queue pair emulation for multiple logical ports on a single physical port
US7092401B2 (en) Apparatus and method for managing work and completion queues using head and tail pointers with end-to-end context error cache for reliable datagram
US20020133620A1 (en) Access control in a network system
US20030046505A1 (en) Apparatus and method for swapping-out real memory by inhibiting I/O operations to a memory region
JP2003216592A (ja) ヘッド・オンリ循環バッファを介してインフィニバンド・ワーク及び完了キューを管理する方法及び装置
US20020198927A1 (en) Apparatus and method for routing internet protocol frames over a system area network
WO2000072142A1 (en) Partitioning in distributed computer system
US6990528B1 (en) System area network of end-to-end context via reliable datagram domains
US6898638B2 (en) Method and apparatus for grouping data for transfer according to recipient buffer size

Legal Events

Date Code Title Description
A977 Report on retrieval

Free format text: JAPANESE INTERMEDIATE CODE: A971007

Effective date: 20050603

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20050817

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20051114

Free format text: JAPANESE INTERMEDIATE CODE: A821

Effective date: 20051114

RD12 Notification of acceptance of power of sub attorney

Free format text: JAPANESE INTERMEDIATE CODE: A7432

Effective date: 20051114

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A821

Effective date: 20051115

A02 Decision of refusal

Free format text: JAPANESE INTERMEDIATE CODE: A02

Effective date: 20060403

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A821

Effective date: 20060424

RD14 Notification of resignation of power of sub attorney

Free format text: JAPANESE INTERMEDIATE CODE: A7434

Effective date: 20060424