JP5066702B2 - インテリジェントネットワークストレージインタフェースシステム及びデバイス - Google Patents
インテリジェントネットワークストレージインタフェースシステム及びデバイス Download PDFInfo
- Publication number
- JP5066702B2 JP5066702B2 JP2002531029A JP2002531029A JP5066702B2 JP 5066702 B2 JP5066702 B2 JP 5066702B2 JP 2002531029 A JP2002531029 A JP 2002531029A JP 2002531029 A JP2002531029 A JP 2002531029A JP 5066702 B2 JP5066702 B2 JP 5066702B2
- Authority
- JP
- Japan
- Prior art keywords
- data
- network
- host
- inic
- file
- 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
- 238000012545 processing Methods 0.000 claims abstract description 117
- 238000004891 communication Methods 0.000 claims abstract description 45
- 238000012546 transfer Methods 0.000 claims abstract description 42
- 230000007246 mechanism Effects 0.000 claims abstract description 12
- 239000000835 fiber Substances 0.000 claims abstract description 10
- 238000000034 method Methods 0.000 claims description 29
- 230000008569 process Effects 0.000 claims description 27
- 239000012634 fragment Substances 0.000 claims description 13
- 230000008520 organization Effects 0.000 abstract description 3
- 241000497429 Obus Species 0.000 abstract 1
- 239000000872 buffer Substances 0.000 description 103
- 230000032258 transport Effects 0.000 description 28
- 238000010586 diagram Methods 0.000 description 25
- 230000006870 function Effects 0.000 description 22
- 230000004044 response Effects 0.000 description 20
- 230000005540 biological transmission Effects 0.000 description 12
- 230000008901 benefit Effects 0.000 description 7
- NQQVFXUMIDALNH-UHFFFAOYSA-N picloram Chemical compound NC1=C(Cl)C(Cl)=NC(C(O)=O)=C1Cl NQQVFXUMIDALNH-UHFFFAOYSA-N 0.000 description 7
- 238000012360 testing method Methods 0.000 description 5
- 229920000638 styrene acrylonitrile Polymers 0.000 description 4
- 238000004458 analytical method Methods 0.000 description 3
- 238000005538 encapsulation Methods 0.000 description 3
- 238000013467 fragmentation Methods 0.000 description 3
- 238000006062 fragmentation reaction Methods 0.000 description 3
- 238000007726 management method Methods 0.000 description 3
- 238000007796 conventional method Methods 0.000 description 2
- 230000006855 networking Effects 0.000 description 2
- 230000002093 peripheral effect Effects 0.000 description 2
- 230000003068 static effect Effects 0.000 description 2
- 230000009471 action Effects 0.000 description 1
- 238000003491 array Methods 0.000 description 1
- 230000003139 buffering effect Effects 0.000 description 1
- 238000006243 chemical reaction Methods 0.000 description 1
- 238000012937 correction Methods 0.000 description 1
- 125000004122 cyclic group Chemical group 0.000 description 1
- 238000013500 data storage Methods 0.000 description 1
- 230000001934 delay Effects 0.000 description 1
- 238000005516 engineering process Methods 0.000 description 1
- 238000009499 grossing Methods 0.000 description 1
- 229940124524 integrase inhibitor Drugs 0.000 description 1
- 238000013507 mapping Methods 0.000 description 1
- 230000004048 modification Effects 0.000 description 1
- 238000012986 modification Methods 0.000 description 1
- 238000005192 partition Methods 0.000 description 1
- 238000000926 separation method Methods 0.000 description 1
- 238000012795 verification Methods 0.000 description 1
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F13/00—Interconnection of, or transfer of information or other signals between, memories, input/output devices or central processing units
- G06F13/10—Program control for peripheral devices
- G06F13/12—Program control for peripheral devices using hardware independent of the central processor, e.g. channel or peripheral processor
- G06F13/124—Program control for peripheral devices using hardware independent of the central processor, e.g. channel or peripheral processor where hardware is a sequential transfer control unit, e.g. microprocessor, peripheral processor or state-machine
- G06F13/128—Program control for peripheral devices using hardware independent of the central processor, e.g. channel or peripheral processor where hardware is a sequential transfer control unit, e.g. microprocessor, peripheral processor or state-machine for dedicated transfers to a network
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04Q—SELECTING
- H04Q3/00—Selecting arrangements
- H04Q3/0016—Arrangements providing connection between exchanges
- H04Q3/0029—Provisions for intelligent networking
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F3/00—Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
- G06F3/06—Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
- G06F3/0601—Interfaces specially adapted for storage systems
- G06F3/0602—Interfaces specially adapted for storage systems specifically adapted to achieve a particular effect
- G06F3/061—Improving I/O performance
- G06F3/0613—Improving I/O performance in relation to throughput
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F3/00—Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
- G06F3/06—Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
- G06F3/0601—Interfaces specially adapted for storage systems
- G06F3/0628—Interfaces specially adapted for storage systems making use of a particular technique
- G06F3/0655—Vertical data movement, i.e. input-output transfer; data movement between one or more hosts and one or more storage devices
- G06F3/0659—Command handling arrangements, e.g. command buffers, queues, command scheduling
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F3/00—Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
- G06F3/06—Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
- G06F3/0601—Interfaces specially adapted for storage systems
- G06F3/0668—Interfaces specially adapted for storage systems adopting a particular infrastructure
- G06F3/067—Distributed or networked storage systems, e.g. storage area networks [SAN], network attached storage [NAS]
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04Q—SELECTING
- H04Q2213/00—Indexing scheme relating to selecting arrangements in general and for multiplex systems
- H04Q2213/13093—Personal computer, PC
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04Q—SELECTING
- H04Q2213/00—Indexing scheme relating to selecting arrangements in general and for multiplex systems
- H04Q2213/13103—Memory
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04Q—SELECTING
- H04Q2213/00—Indexing scheme relating to selecting arrangements in general and for multiplex systems
- H04Q2213/13204—Protocols
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04Q—SELECTING
- H04Q2213/00—Indexing scheme relating to selecting arrangements in general and for multiplex systems
- H04Q2213/13299—Bus
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04Q—SELECTING
- H04Q2213/00—Indexing scheme relating to selecting arrangements in general and for multiplex systems
- H04Q2213/1332—Logic circuits
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04Q—SELECTING
- H04Q2213/00—Indexing scheme relating to selecting arrangements in general and for multiplex systems
- H04Q2213/13345—Intelligent networks, SCP
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- Microelectronics & Electronic Packaging (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Computer Hardware Design (AREA)
- Computer Networks & Wireless Communication (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
- Communication Control (AREA)
- Information Transfer Systems (AREA)
- Memory System Of A Hierarchy Structure (AREA)
- Two-Way Televisions, Distribution Of Moving Picture Or The Like (AREA)
Description
【技術分野】
本発明は、ネットワーク通信及びストレージに関する。
【0002】
【背景技術】
過去数10年以上に亘って、ネットワークコンピューティングの利益及び進歩がコンピュータネットワークの著しい成長を促しており、これがより一層の進歩、成長及び利益に拍車をかけている。しかしながら、この成長と共に従来のネットワークデバイスを用いる上で混乱及び障害が起こっている。例えば、ネットワークに接続されたコンピュータのCPUが、そのネットワーク通信を処理するのに使用する時間の部分が増加して、他の作業に使うことができる時間が少なくなっている場合がある。特に、ネットワークとディスクドライブのようなコンピュータの記憶装置との間でファイルデータを移動させることへの要求が加速度的に増えている。従来、このようなデータはネットワーク上での移動のためにパケットに分割され、各パケットは受信コンピュータのCPUによって一度に1つのレイヤが処理される制御情報のレイヤにカプセル化される。CPUの速度が一定の割合で増加しているにも拘わらず、このファイル転送のようなネットワークメッセージのプロトコル処理は、市販の最速CPUの利用可能な処理能力の大部分を消費する場合がある。
【0003】
このような状況は、その主な機能がネットワーク上でファイルデータを転送することによってその接続型ディスクまたはテープドライブ上でファイルを格納しかつ検索することであるネットワークファイルサーバにとって、より一層挑戦的なものになる場合がある。ネットワーク及びデータベースが成長するにつれて、そのようなサーバに格納される情報の量が爆発的に増加し、そのようなサーバ接続型記憶装置の限界を露呈している。ホストCPUにより処理されるプロトコルの上述した問題に加えて、従来の小型コンピュータシステムインタフェース(SCSI)インタフェースのようなパラレルデータチャネルの限界が、ストレージの必要性が増加するにつれて明らかになっている。例えば、パラレルSCSIインタフェースは、サーバに接続することができるストレージデバイスの数及びストレージデバイスとサーバ間の距離を制限する。
【0004】
Tom Clark著の書籍「Designing Storage Area Networks」(著作権1999年)に記載されるように、サーバ接続型のパラレルSCSIストレージデバイスの限界に対する1つの解決策は、ネットワークサーバの正面にある既存のローカルエリアネットワーク(LAN)に別のファイルサーバを接続することを必要とする。このネットワーク接続型ストレージ(NAS)によって、ネットワーク上の他のサーバ及びクライアントからNASファイルサーバへのアクセスが可能になるが、元のネットワークサーバに専用の記憶容量が増加するものではない。逆に、NASは、元のネットワークサーバが様々なNASファイルサーバと通信する必要があることから、そのサーバが必要とするプロトコル処理が増える場合がある。更に、NASファイルサーバのそれぞれが、次に、プロトコル処理の負担及びストレージインタフェースの限界を被ることになる。
【0005】
ストレージエリアネットワーキング(SAN)が、サーバの背後に接続されたストレージデバイスのネットワークでデイジーチェーンにより接続されたSCSIストレージデバイスを置き換えることによって、ネットワーク上でのファイル転送及び記憶に対する必要性の増加に対する別の解決策を提供している。イーサネットまたはファーストイーサネットのような従来のネットワーク規格の代わりに、SANは、ファイバチャネル(FC)と呼ばれる新しいネットワーキング規格を使用する。しかしながら、それが比較的最近の導入であるため、多くの市販されているFCデバイスは互いに互換性がない。また、FCネットワークはサーバと記憶装置のようなネットワーク上の2点間の通信のためにバンド幅を専用にすることがあり、前記2点が通信していない時はバンド幅が無駄になる。
【0006】
今や公知のNAS及びSANは、転送されかつ格納されるデータの形によって区別することができる。NASデバイスは一般にデータファイルを別のファイルサーバまたはクライアントへ及びそこから転送するのに対し、SAN上ではデバイスレベルのデータのブロックが転送される。このため、NASデバイスは通常記憶のためにファイルとブロック間で変換するためのファイルシステムを有するが、SANはそのようなファイルシステムを持たないストレージデバイスを備えることができる。
【0007】
これに代えて、NASファイルサーバは、イーサネットSANの一部分として、サーバに専用のイーサネットベースのネットワークに接続することができる。Marc Farleyは、その書籍「Building Storage Networks」(著作権2000年)において、イーサネット上でストレージプロトコルを実行することが可能であり、それによってファイバチャネルの非互換性の問題を解消できると述べている。しかしながら、SANのようなネットワークトポロジを使用することによってサーバに接続されたストレージデバイスの数の増加によって、そのサーバが実行しなければならないプロトコル処理の量が増加する。上述したように、このようなプロトコルの処理は既に最新型のサーバを乱用している。
【0008】
ファイル転送のようなネットワークメッセージの従来の処理の一例は、ネットワークデータの格納を遅くするいくつかの処理ステップを説明している。ネットワークインタフェースカード(NIC)は一般に、ホストがネットワークにアクセスできるようにする媒体アクセスコントロール(MAC)機能を提供することに加えて、ホストとネットワーク間の物理的接続を提供する。ホストに送られたネットワークメッセージのパケットがNICに到着すると、そのパケットのMACレイヤヘッダは処理されかつ前記パケットはNICにおいて巡回冗長検査(CRC)を受ける。次に前記パケットは、周辺装置相互接続(PCI)のような入力/出力(I/O)バスを通ってホストに送られかつホストメモリに格納される。次に、CPUが、プロトコルスタックからの命令を実行することによって、前記パケットのヘッダレイヤのそれぞれを順に処理する。これには、最初に前記パケットを格納するためにホストメモリバスを通る移動と、次に各ヘッダレイヤを順に処理するためにホストメモリバスを通る移動とが必要である。そのパケットの全ヘッダレイヤが処理された後、該パケットからのペイロードデータが、前記メッセージの他の同様に処理されたペイロードパケットと共にファイルキャッシュ内にグループ分けされる。前記データは、ディスク上に格納するためのファイルブロックとして前記ファイルシステムに従ってCPUにより再アセンブリされる。全パケットが処理されかつメッセージがファイルキャッシュにファイルブロックとして再アセンブリされた後、前記ファイルは、それぞれに数個のペイロードパケットから構築することができるデータブロックにして、ホストメモリバス及びI/Oバス上をホストストレージへディスク上で長期間格納するために、一般にI/OバスにブリッジされたSCSIバスを介して送られる。
【0009】
これに代えて、SAN上でファイルを格納するために、ファイルキャッシュの再アセンブリされたファイルがブロックでホストメモリバス及びI/Oバス上を前記SAN用に構成されたI/Oコントローラへ送られる。SANがFCネットワークである場合には、ファイバチャネルプロトコル(FCP)に従ってファイルブロックをSAN上のストレージデバイスに送ることができる特別のFCコントローラが設けられる。ファイルがNASデバイス上で格納されることになっている場合には、該ファイルはNASデバイスへ送りまたは再送することができ、これがパケットを上述したとほぼ同様に処理するが、NASデバイスのCPU、プロトコルスタック及びファイルシステムを使用し、NASデバイスの記憶装置に前記ファイルのブロックを格納する。
【0010】
このように、ホストに接続されたNASまたはSANでの格納のためにネットワークから該ホストに送られるファイルは、一般に前記ファイルの各メッセージパケットについてI/Oバスを通る2つの移動が必要である。更に、各パケットのヘッダレイヤの制御情報は、一時的に格納され、一度に1つのレイヤが処理されかつ次にI/Oバスへ送り戻されるので、ホストメモリバスを繰り返し通過することになる。このようなファイルをクライアントからのリクエストに応答してSAN上のストレージから検索することはまた、従来ホストCPU及びファイルシステムによる相当量の処理を必要とする。
【0011】
【発明の開示】
データ転送の制御をホストに残しつつ、ネットワークと記憶装置間のデータ転送を加速するためのハードウェア及び処理メカニズムを提供する、ローカルホストのためのインテリジェントネットワークインタフェースカード(INIC)のようなインタフェース装置が開示されている。このインタフェース装置は、ネットワークパケットヘッダを処理するためのハードウェア回路を有し、ネットワークと記憶装置間でのデータ転送のためのホストにより設定された専用の高速パスを使用することができる。ホストCPU及びプロトコルスタックにより、高速パス上でのデータ転送のためのプロトコル処理が回避され、ネットワーク及びストレージサブシステムの多くの要求からホストバスのバンド幅を解放する。独立ディスクの冗長アレイ(RAID)または複数のドライブからなる他の構成を有することができる記憶装置が、SCSIのようなパラレルチャネルによって、またはイーサネットもしくはファイバチャネルのようなシリアルチャネルによってインタフェース装置に接続することができ、かつインタフェース装置はPCIバスのようなI/Oバスによってローカルホストに接続することができる。追加の記憶装置を、SCSIのようなパラレルインタフェースによりローカルホストに接続することができる。
【0012】
ファイルキャッシュがホストをバイパスすることができるデータを格納するためにインタフェース装置上に設けられ、インタフェース装置のファイルキャッシュにおけるデータの編成が、ホスト上のファイルシステムによって制御される。この構成によって、リモートホストと記憶装置間のデータ転送が、データがインタフェース装置とI/Oバス上のローカルホストの間を通過することなく、インタフェース装置の高速パス上で処理することができる。また、従来の通信プロトコル処理と対照的に、高速パスデータのための制御信号がホストメモリバス上を繰り返し移動して一時的に格納され、かつ次にホストCPUにより一度に1レイヤが処理されるということがない。従って、ホストは、ホスト制御型記憶装置上でのファイル読出しまたは書込みのためのデータトラフィックの大部分に関与することから解放することができる。
【0013】
追加のインタフェース装置をI/Oバスを介してホストに接続することができ、追加の各インタフェース装置はホストファイルシステムにより制御されるファイルキャッシュを有し、かつ追加のネットワーク接続を提供しかつ/または追加の記憶装置に接続される。複数のインタフェース装置が単一のホストに接続されることによって、該ホストは複数のストレージネットワークを制御することができ、ホスト制御型ネットワークとの間のデータフローの大部分がホストプロトコル処理、I/Oバスを通る移動、ホストバスを通る移動、ホストメモリへの格納をバイパスする。ある実施例では、記憶装置がそのようなインタフェース装置にギガビットイーサネットネットワークにより接続することができ、前記欠陥なしでファイバチャネルの速度及びバンド幅を提供し、かつイーサネットベースのネットワークの大規模導入ベース及び互換性の利益が得られる。
【0014】
【発明を実施するための最良の形態】
本発明によるネットワークデータ通信システムの概要が図1に示されている。ホストコンピュータ20が、ローカルまたはワイドエリアネットワーク25もしくはインターネット28のようなネットワークに接続するための1つまたは複数のポートを有することができるインテリジェントネットワークインタフェースカード(INIC)22のようなインタフェース装置に接続されている。ホスト20は、ホストバス35によりホストメモリ33に接続された中央処理装置(CPU)30のようなプロセッサを有し、図示しないオペレーティングシステムが、ファイルシステム23を含む様々なタスク及び装置を監督するためにメモリ33に存在する。同様にホストメモリ33に格納されているのは、ネットワーク通信を処理するためのインストラクションのプロトコルスタック38、及びINIC22とプロトコルスタック38間を通信するINICドライバ39である。キャッシュマネージャ26は、ファイルシステム23及びWindows(登録商標)NTまたは2000の仮想メモリマネージャのような任意のメモリマネージャ27の制御下で動作して、ファイルストリームと称されるファイル部分をホストファイルキャッシュ24上に格納しかつ検索する。
【0015】
ホスト20は、PCIバスのようなI/Oバス40によってINIC22に接続され、これはホストI/Oブリッジ42によりホストバス35に結合されている。前記INICは、INICバス48により相互に接続されたインタフェースプロセッサ44及びメモリ46を有する。INICバス48は、INIC・I/Oブリッジ50を有するI/Oバス40に結合されている。同様にINICバス48に接続されているのは、ネットワークメッセージの上位レイヤプロセッシングを行うハードウェアシーケンサ52のセット即ち集合である。LAN/WAN25及びインターネット28への物理的接続は、従来の物理的レイヤハードウェアPHY58によって提供される。各PHY58装置は、媒体アクセスコントロール(MAC)60の対応する装置に接続され、各MAC装置によって、前記INICと前記ネットワークの1つとの間に従来型のデータリンクレイヤ接続が提供される。
【0016】
ディスクドライブまたはディスクドライブの集合と対応するコントローラのようなホスト記憶装置66が、SCSIアダプタのような従来のI/Oコントローラ64によりI/Oバス40と接続することができる。パラレルデータチャネル62がコントローラ64をホスト記憶装置66に接続している。これに代えて、ホスト記憶装置66は、独立ディスクの冗長アレイ(RAID)とすることができ、かつI/Oコントローラ64はRAIDコントローラとすることができる。ファイルシステム23の命令下で動作するI/Oドライバ67、例えばSCSIドライバモジュールがコントローラ64と対話して、ホスト記憶装置66へのデータの書込み及び読出しを行う。好ましくは、ホスト記憶装置66が、ホストメモリ33にキャッシュすることができる、ファイルシステム23を含むホスト20のオペレーティングシステムコードを有する。
【0017】
ディスクドライブまたはディスクドライブ及び対応するコントローラの集合のようなINIC記憶装置70が、マッチングインタフェースコントローラ、INIC・I/Oコントローラ72を介してINICバス48に接続され、これが次にパラレルデータチャネル75により前記INIC記憶装置に接続されている。INIC・I/Oコントローラ72は、SCSIコントローラとすることができ、これはパラレルデータチャネル75によりINIC記憶装置70に接続される。これに代えて、INIC記憶装置70はRAIDシステムとすることができ、かつI/Oコントローラ72をRAIDコントローラとし、多数のまたは分岐したデータチャネル75とすることができる。同様に、I/Oコントローラ72は、INIC記憶装置70のためのRAIDコントローラに接続されたSCSIコントローラとすることができる。別の実施例では、INIC記憶装置70は、ファイバチャネル(FC)ネットワーク75に接続され、かつI/Oコントローラ72はFCコントローラである。INIC・I/Oコントローラ72はINICバス48に接続されたように図示されているが、I/Oコントローラ72は、これに代えてI/Oバス40に接続することができる。INIC記憶装置70は、任意により、そこからオペレーティングシステムの核がロードされる、ホスト20のルートディスクを有することができる。INICメモリ46は、LAN/WN25のようなネットワークから受信しまたはそれに送信されるパケットを一時的に格納するためのフレームバッファ77を有する。また、INICメモリ46は、INIC記憶装置70に格納しまたはそこから検索するデータを一時的に格納するために、インタフェースファイルキャッシュ、INICファイルキャッシュ80を有する。INICメモリ46が図1においてそれを簡単にするために1個のブロックで記載されているが、メモリ46はINIC22の様々な位置に配置された別個の装置で形成することができ、かつダイナミックランダムアクセスメモリ(DRAM)、スタティックランダムアクセスメモリ(SRAM)、リードオンリメモリ(ROM)及び他の形態のメモリで構成することができる。
【0018】
ファイルシステム23は、記憶装置66、70及びファイルキャッシュ24、80の情報の編成に関する一般的な知識を有する高レベルのソフトウェアエンティティであり、ストレージアーキテクチュアの特性及び性能を実行するアルゴリズムを提供する。ファイルシステム23は、ファイルの階層構造として、記憶装置66、70及び各ファイルキャッシュ24、80に格納されている情報を論理的に編成するが、このような論理ファイルは、記憶装置66または70の異なるディスクの本質的に異なるブロックに物理的に配置できるものである。また、ファイルシステム23は、記憶装置66、70及びファイルキャッシュ24、80上でのファイルデータの格納及び検索を管理する。前記ファイルシステム下でホスト20上で動作するI/Oドライバ67ソフトウェアが、各記憶装置66、70のコントローラ64、72と対話して、データのブロックを操作し、即ちそれらの記憶装置からデータブロックを読み出しまたはそれらに書き込む。ホストファイルキャッシュ24及びINICファイルキャッシュ80によって、記憶装置66、70から読み出されまたはそれらに書き込まれるデータの記憶空間が提供され、前記データは記憶装置66、70の物理的ブロック形式とアプリケーションについて使用される論理的ファイル形式との間でファイルシステム23によりマッピングされる。ファイルに関連しかつホストファイルキャッシュ24及びINICファイルキャッシュ80に格納されるバイトの線形ストリームをファイルストリームと称する。ホストファイルキャッシュ24及びINICファイルキャッシュ80はそれぞれ、その対応するキャッシュに保持されるファイルストリームをリストするインデックスを有する。
【0019】
ファイルシステム23は、記憶装置66、70上のファイルブロックのアドレスを決定するのに使用することができるメタデータを有し、最近アクセスされたファイルブロックのアドレスへのポインタがメタデータキャッシュにキャッシュされる。ファイルブロックへのアクセスが、例えばLAN/WAN25上のリモートホストにより要求されると、ホストファイルキャッシュ24及びINICファイルキャッシュ80のインデックスが最初に参照されて、前記ブロックに対応するファイルストリームがそれらのキャッシュに格納されているかどうかを見る。前記ファイルストリームがファイルキャッシュ24または80に見当たらない場合には、そのブロックへのリクエストが、前記メタデータにより示された適当な記憶装置のアドレスへ送られる。1つまたは複数の従来のキャッシングアルゴリズムをファイルキャッシュ24及び80のキャッシュマネージャ26が用いて、前記キャッシュが空で新しいデータをキャッシュすべき場合にどのデータを捨てるべきかを選択する。INICファイルキャッシュ80上でのファイルストリームのキャッシングによって、INIC記憶装置70に格納されたファイルブロックのI/Oバス40及びデータチャネル75双方におけるトラフィックが大幅に減少する。
【0020】
ホスト20に送られたネットワークパケットがINIC22に到着すると、そのパケットのヘッダがシーケンサ52により処理されて、前記パケットを有効にしかつ該パケットのサマリまたは記述子が作成され、該サマリは前記パケットにプリペンドされかつフレームバッファ77に格納され、前記パケットへのポインタが9に記憶される。前記サマリは、前記パケットヘッダのプロトコルタイプ及びチェックサムの結果を表す状態語である。この状態語に含まれるものは、前記フレームが高速パスデータフローの対象であるかどうかを示すものである。従来の方法と異なり、トランスポート及びセッションレイヤの情報を含むプロトコル情報を有する上位レイヤヘッダが、シーケンサ52のハードウェア論理により処理されて、サマリが作成される。前記シーケンサの専用論理回路によって、パケットヘッダを、該パケットがネットワークから到着するのと同様に高速で仮想的に処理することが可能になる。
【0021】
次に、前記INICは、CPU30実行プロトコルスタック38によるヘッダの「低速パス」プロセッシングのために前記パケットをホストメモリ33に送るか、または「高速パス」に従って前記パケットデータを直接INICファイルキャッシュ80またはホストファイルキャッシュ24のいずれかに送るかを選択する。前記高速パスは、シーケンシャルでエラーのないメッセージ毎に複数のパケットを有するデータトラフィックの相当大部分について選択することができ、データを繰り返しコピーしたり、ホストメモリバス35を繰り返し往来するような、前記CPUによる各パケットの時間のかかるプロトコルプロセッシングが回避される。パケットがINICファイルキャッシュ80内に直接移される高速パス状況の場合、ホストバス35とI/Oバス40とにおける追加の往来が同様に回避される。低速パスプロセッシングは、INIC22の高速パスによって従来は転送されないあらゆるパケットをホスト20により従来通り処理できるようにする。
【0022】
ホスト20における高速パス能力を与えるためにリモートホストとの接続が最初に設定され、それにはハンドシェーク、認証及び他の接続初期化の手順を含むことができる。通信制御ブロック(CCB)が、TCP/IPまたはSPX/IPXプロトコルにより代表されるような接続ベースのメッセージのための接続初期設定手順の際にプロトコルスタック38により作成される。前記CCBは、ソース及びデスティネーションアドレス並びにポートのような接続情報を有する。TCP接続の場合、CCBは、ソース及びデスティネーション媒体アクセスコントロール(MAC)アドレス、ソース及びデスティネーションIPアドレス、ソース及びデスティネーションTCPポート、並びにスライディングウィンドウプロトコルのための送信受信ウィンドウ及びタイマのようなTCP変数からなる。接続が設定された後、前記CCBはINICドライバ39により前記ホストからINICメモリ46へ、そのメモリ46内にコマンドレジスタを書き込むことによって送られ、そこでは他のCCBと共にCCBキャッシュ74に格納することができる。また、前記INICは、前記CCBをパケットサマリと加速して突き合わせるためにキャッシュしたCCBに対応するハッシュテーブルを作成する。
【0023】
ファイル書込みのような前記CCBに対応するメッセージを前記INOCが受け取ると、該メッセージの最初のパケットのヘッダ部分がホスト20に送られて、CPU及びプロトコルスタック38により処理される。この前記ホストに送られたヘッダ部分は、前記パケットの一定のオフセットで始まることが知られている、前記メッセージのセッションレイヤヘッダを有し、かつ任意により前記パケットからいくつかのデータを含んでいる。プロトコルスタック38のセッションレイヤによる前記セッションレイヤヘッダのプロセッシングによって、前記ファイルに属するものとして前記データが認識されかつ前記メッセージのサイズが表示され、これらが前記ファイルシステムにより使用されて、前記メッセージデータをホストファイルキャッシュ24またはINICファイルキャッシュ80にキャッシュするかどうか、及び選択されたファイルキャッシュ内の前記データのデスティネーションを確保するかどうかが決定される。前記ホストに送られたヘッダ部分に何らかのデータが含まれていた場合には、それは前記デスティネーションに格納される。選択された前記ファイルキャッシュの前記デスティネーションのバッファアドレスのリストがINIC22に送られて、前記CCBにまたはそれと共に格納される。また、前記CCBは、メッセージの長さ及び処理されたパケットの数並びに順序のような、前記メッセージに関する状態情報を保持し、どのユーザが関与しているか及び転送情報毎の記憶空間を含む、各プロトコルレイヤに関するプロトコル及びステータス情報を提供する。
【0024】
前記CCBが一旦デスティネーションを示すと、該CCBに対応するパケットの高速パスプロセッシングが可能になる。次に受け取ったパケットをシーケンサ52により上述したようにプロセッシングしてパケットサマリを生成した後、前記パケットサマリのハッシュが前記ハッシュテーブルと比較され、かつ必要な場合には前記CCBキャッシュ74に格納されたCCBと比較され、高速パス接続が設定されているメッセージに前記パッケージが属するかどうかを決定する。パケットサマリがCCBに整合すると、他の例外的な条件が存在しないと仮定して、ネットワークまたはトランスポートレイヤヘッダ無しで、前記パケットのデータがダイレクトメモリアクセス(DMA)装置68により、前記CCBにより示されたファイルキャッシュ80またはファイルキャッシュ24のデスティネーションに送られる。
【0025】
前記メッセージからの全てのデータがファイルストリームとしてINICファイルキャッシュ80またはホストファイルキャッシュ24内にキャッシュされた後のいくつかの時点において、データのファイルストリームが、ファイルシステム23の制御下にあるDMA装置68により、そのファイルキャッシュからINIC記憶装置70またはホスト記憶装置66に、前記ファイルシステムの制御下で送られる。通例、ホストファイルキャッシュ24内にキャッシュされたファイルストリームは、INIC記憶装置66上に格納されるのに対し、INICファイルキャッシュ80内にキャッシュされたファイルストリームは、INIC記憶装置70上に格納されるが、このような構成は必ずしも必要でない。ファイル転送に関する後のリクエストは、そのリクエストが同一のソース及びデスティネーションIPアドレス及びポートを含んでいると仮定して、同じCCBにより取り扱うことができ、書込みリクエストの最初のパケットは前記ホストCPUにより処理されて、前記メッセージを格納するためのホストファイルキャッシュ24またはINICファイルキャッシュ80内の位置を決定する。また、前記ファイルキャッシュをバイパスしてリモートホストから受け取ったメッセージからのデータを格納するためのデスティネーションとしてINIC記憶装置70またはホスト記憶装置66上の位置を予定するように前記ファイルシステムを構成することが可能である。
【0026】
本発明の基本的な理解を促すための概要が図2に記載されており、同図では、各パスについての情報についての基本タイプを示すことによって、図1のネットワークデータ記憶システムのための情報の流れに関する主要なパスを分離している。図2は、細い矢印を有する基本的に制御情報からなる情報のフローパス、太く白い矢印を有する基本的にデータからなる情報のフローパス、及び太く黒い矢印を有する制御情報及びデータ双方からなる情報のフローパスを示している。ホスト20が基本的に制御情報の流れに関係しているのに対して、INIC記憶装置70は基本的にデータ転送に関連していることに注意する。
【0027】
LAN/WAN25のようなネットワークとINIC22間の情報の流れは制御情報及びデータを含むことができ、従って太く黒い矢印85で示されている。LAN/WAN25のようなネットワークとINIC22間の情報の流れ81の例は、ファイルの読出しまたは書込みに加えて、接続初期設定の対話及び肯定応答のような、制御情報に包含されるようなファイルデータを含むパケットとして送られる制御情報が含まれる。シーケンサ52がファイル書込みからの制御情報を処理し、かつデータ及び制御情報をINICフレームバッファ77との間でやりとりするが、従ってそれららの転送は太く黒い矢印88で表されている。フレームバッファ77に格納されるデータに関する制御情報は、細い矢印90で示すようにプロセッサ44により処理され、かつネットワーク接続初期設定パケット及びセッションレイヤヘッダのような制御情報は、太い矢印92で示すように、プロトコルスタック38に送られる。前記ホストにより接続が設定されると、その接続に関する、CCBのような制御情報を、細い矢印94で示すようにホストプロトコルスタック38とINICメモリ46との間で送ることができる。INIC記憶装置70から読み出されまたは書き込まれるデータの一時的な格納が、太く白い矢印96、98で示されるように、INICファイルキャッシュ80及びフレームバッファ77により行われる。INICファイルキャッシュ80に格納されている全てのファイルストリームの制御及び知識が、細い矢印91で示すように、ファイルシステム23によって提供される。ホスト記憶装置66がネットワークアクセス可能なデータを格納しない実施例では、ファイルシステムの情報が、矢印81で示すように、ホストファイルキャッシュ24とホスト記憶装置66との間で送られる。同図に記載されていない別の実施例では、ホスト記憶装置を備えておらず、または基本的にネットワークファイル転送のためにホスト記憶装置及びホストファイルキャッシュを用いることができる。
【0028】
図2からわかるように、ネットワークファイル読出しまたは書込みのデータは基本的にINIC22を通過しかつホスト20を避けており、制御情報が基本的に前記ホストとINIC間で送られる。このネットワークと記憶装置間のファイル転送に関する制御情報の分離によって、前記ホストは、前記ネットワークと記憶装置との間で前記INICを流れるファイル転送を管理することが可能になり、他方前記INICがそれらデータ転送のための高速パスを提供し、それによってデータ処理能力が加速される。前記INICのデータ高速パスにより得られる処理能力の増加によって、ホスト及びINICは、ファイルサーバとして機能することに加えて、例えば映像のような高バンド幅アプリケーションのデータベースサーバとして機能することができる。
【0029】
図3は、ネットワークから受け取ったメッセージを格納するために図1のシステムが実行するいくつかのステップを示している。LAN/WAN25のようなネットワークから送られたパケットは、最初にPHY装置58によりINIC22において受け取られ100、かつMAC装置60が前記パケットがホスト20にアドレス指定されていることを確認するようにリンクレイヤプロセッシングを実行する。次に、ネットワーク、前記パケットのトランスポート及び任意によりセッションレイヤヘッダがシーケンサ52により処理され102、それにより前記パケットが有効になりかつそれらヘッダのサマリが作成される。次に、前記サマリをパケットに追加して、フレームバッファ77の1つに格納する。次にプロセッサ44が、前記パケットサマリを検査することにより、前記パケットが高速パスプロセッシングの対象であるかどうかを決定する106。パケットが高速パスの対象であるかどうかは、単にサマリ内に示されているパケットのプロトコルによって決定することができる。パケットが高速パス対象でない場合には、そのパケットはプロトコルスタック38からのCPU30実行命令によって前記パケットのヘッダを処理するために、I/Oバス40を介してホストメモリ33に送られる108。
【0030】
前記パケットは高速パス対象である場合には、前記パケットサマリが、それぞれにCCBとして表される、前記カードによって取り扱われる高速パス接続の集合と前記サマリをCCBハッシュ及びCCBキャッシュと突き合わせることによって比較する。前記サマリが前記INICメモリに保持されているCCBと整合しない場合には、前記パケットは、プロトコルスタックからのCPU実行命令により前記パケットのヘッダを処理するためにホストメモリに送られる112。パケットが接続初期設定対話の一部分である場合には、前記パケットを用いて前記メッセージについてCCBを作成することができる115。前記パケットサマリがむしろ前記INICメモリに保持されているCCBに整合する場合には、前記プロセッサは、例えば断片化されたまたは壊れたパケットを含む例外状態を検討し、そのような例外状態が見つかった場合には、プロトコルプロセッシングのためにCCB及び前記パケットをホストプロトコルスタック38にフラッシュする。パケットサマリはCCBに整合しているが該パケットのデスティネーションがCCBで示されていない場合には、前記パケットのセッションレイヤヘッダをホストプロトコルスタック38に送って、前記ファイルシステムに従って、ホストファイルキャッシュまたはINICファイルキャッシュ内のデスティネーションを決定し122、そのデスティネーションのキャッシュアドレスのリストをCCBと共にINICに格納する。また、前記INICはCCBをホスト116にフラッシュさせかつパケットをスタックによるプロセッシングのためにホストに送らせることになる例外状態について前記パケットサマリを検査する114。
【0031】
パケットサマリがCCBに整合しかつ該パケットのデスティネーションが該CCBと共に格納され、かつ例外状態が存在しない場合には、前記パケットからのデータがDMAにより、CCBにより示されたホストファイルキャッシュまたはINICファイルキャッシュのデスティネーションに送られる125。この場合におけるメッセージパケットはホストプロトコルプロセッシングスタックによるヘッダのプロセッシングをバイパスし、高速パスデータ転送を提供する。パケットのデータが高速パスを介してINICファイルキャッシュ及びINICストレージに送られているような場合には、前記パケットはホストによるプロトコルプロセッシングを避けるだけでなく、前記I/Oバスまたはホストメモリバスを横切らないので、従来のネットワークストレージと比較して大幅に時間を節約するCPUプロセッシング及びバストラフィックが得られる。
【0032】
【発明の実施の形態】
図4は、LAN/WAN25のようなネットワークからのリクエスト200に応答して、ホスト記憶装置66またはINIC記憶装置70からファイルまたはファイルの一部分を検索するために図1のシステムによって実行されるいくつかのステップを示している。まず、リクエストパケットをプロトコルスタックにより処理し、それにより前記リクエストをファイルシステムに送る。前記ファイルシステムは前記リクエストに示されたファイルを、該ファイルに対応するファイルストリームがINICファイルキャッシュまたはホストファイルキャッシュにキャッシュされているかどうかを決定すること、及び前記ファイルストリームが前記キャッシュのいずれかにも配置されていない場合には前記ファイルに対応するブロックが前記ホスト記憶装置またはINIC記憶装置に格納されているかどうかを決定することを含めて、位置付けする。ファイルストリームが前記キャッシュのいずれにも配置されていないと仮定した場合、前記ファイルブロックはホストファイルキャッシュに読み取られ204、またはINICファイルキャッシュに読み取られる206。大抵の場合には、前記ホスト記憶装置に格納されたファイルブロックはホストファイルキャッシュ内に読み取られ、かつINIC記憶装置に格納されたファイルブロックはINICファイルに読み取られることになるが、このマッピングは必然ではない。例えば、ホスト記憶装置に格納されたファイルブロックをINICファイルキャッシュ内に読み取り、それによってホストメモリバス上のトラフィックを減少させることが好ましい場合がある。
【0033】
ファイルブロックがホストファイルキャッシュにキャッシュされていない場合には、前記ホストは前記リクエストに対応するCCBが前記INICにより保持されているかどうかを注意することによって、ファイルを高速パスプロセッシングにより送るかどうかを決定する210。前記ホストが高速パスを使うのではなく、低速パスによって前記ファイルをホストから送ることを選択した場合、前記ホストはプロトコルスタックを実行して、ホストファイルキャッシュに保持されているデータについてヘッダを作成し、かつ次に前記ヘッダ及びチェックサムをデータに追加して、従来と同様にINICによりネットワーク上を送信するためにネットワークフレームを作成する212。次に、INICはDMAを用いてホストから前記フレームを入手し214、かつ次にINICは前記フレームをネットワーク上に送る208。そうしないで前記ファイルを高速パスで送る場合には、INICプロセッサはCCBを用いてヘッダ及びチェックサムを作成し、ホストファイルキャッシュからのデータのフレームサイズのセグメントをDMAし、かつ次に前記ヘッダ及びチェックサムを前記データセグメントにプリペンドしてネットワークフレームを作成し218、前記ホストをプロトコルプロセッシングから解放する。
【0034】
同様にして、ファイルブロックがINICファイルキャッシュ内にキャッシュされた場合には、前記ホストがCCBがINICにより保持されているかどうかを注意することによって、高速パスプロセッシングにより前記ファイルを送るかどうかを決定する220。前記ホストが高速パスを使用しないことを選択した場合222、ホストCPUは、ファイルブロックデータについてヘッダ及びチェックサムを準備し、前記ヘッダをホストメモリに格納する。次に前記ホストは、INICに指示して、ホストメモリからのヘッダをINICメモリ内のデータにプリペンドすることによってネットワークフレームをアセンブリし、次にINICによりネットワークを介して送られるメッセージフレームを作成する。この高速パスを使用しない場合でさえ、データはI/Oバスを通ってホストに送られたりINICから戻されることが無く、I/Oバスまたはネットワークによりホストに接続された記憶装置上に配置されたファイルブロックの送信という従来方法と比較して、I/Oトラフィックが少なくなる。その代わりに高速パスが選択された場合225、INICプロセッサはCCBに対応するヘッダ及びチェックサムを作成し、かつ前記ヘッダ及びチェックサムをINICファイルキャッシュからのデータセグメントにプリペンドしてネットワークフレームを作成し、これは次にINICによってネットワーク上を送信される。この高速パスの場合には、前記ホストが、I/Oバストラフィックから解放されることに加えて、プロトコルプロセッシング及びホストメモリバストラフィックから解放される。
【0035】
図5は、ホスト20がI/Oバス40を介して、第1INIC22に加えていくつかのI/O・INICに接続されたネットワーク記憶システムを示している。本実施例の各INICは少なくとも1つのネットワークに接続されかつ少なくとも1つの記憶装置が接続されている。かくして第2INIC303はI/Oバス40に接続され、第2ネットワーク305への前記ホストのインタフェースを提供する。第1INIC22は、上述したように実際はいくつかのネットワークに接続するためにいくつかのネットワークポートを持つことができ、同様に第2INIC303も1つのネットワーク305以外のネットワークに接続することができるが、この図面では簡単化するために、各INICについて1つのネットワーク接続のみが示されている。第2INIC303は、第2INIC記憶装置308に接続されたSCSIアダプタのようなI/Oコントローラを有する。これに代えて、第2INIC記憶装置308はRAIDシステムとすることができ、かつ第2INIC303はRAIDコントローラを有しまたはそれと接続することができる。別の実施例では、第2INIC303が、FCネットワークループまたはFCアダプタ及びネットワークラインによって第2INIC記憶装置308に接続されたFCコントローラを有する。第N・INIC310で示されるように、N個のINICをホスト20にI/Oバスを介して接続することができる。第N・INIC310は、第Nネットワーク313及び第N記憶装置315にそれぞれ接続されたネットワークインタフェース及びストレージインタフェースを提供する回路及び制御インストラクションを有する。第N・INIC310はいくつかのネットワークに接続するためにいくつかのネットワークポートを持つことができ、かつ第2の第N・INIC310が同様に2以上のネットワークに接続することができる。第N・INIC310のストレージインタフェース回路及び制御インストラクションは、例えば、SCSIケーブルによって第N・INIC記憶装置315に接続されたSCSIコントローラを含むことができる。これに代えて、第N・INIC記憶装置315はRAIDシステムとすることができ、かつ第N・INIC315はRAIDコントローラを有しまたはそれに接続することができる。さらに別の実施例では、第N・INIC310が、FCアダプタ及びFCネットワークラインによって第N・INIC記憶装置315に接続されたFCコントローラを有する。
【0036】
前記ファイルシステムは、ネットワークアクセス可能ファイルが、ホスト記憶装置66ではなく、いずれか1つのネットワーク記憶装置66、305、315に格納されるように構成することができ、その代わりにそれはファイルシステムコード及びプロトコルスタックを含み、それらの複製が前記ホストにキャッシュされる。この構成によって、ホスト20はネットワークファイル転送を制御するが、それらファイル内のデータの相当大部分は、前記ホストに入ることすらなく、INIC22、203、310を通って高速パスにより転送することができる。ファイルブロックがネットワークと同じINICに接続された記憶装置との間で転送される場合には、ファイルデータは決してI/Oバスまたはホストメモリバスを横切ることがない。ファイルがネットワークと異なるINICに接続された記憶装置との間で転送される場合には、ファイルブロックはDMAによって、記憶装置に接続されたINIC上のファイルキャッシュとの間でI/Oバスを通して送ることができ、依然としてホストメモリバスを回避する。この通常は回避される最悪の場合では、データはあるINICから別のものに転送することができ、それには、2回のI/Oバス転送や従来通りの繰り返しのホストメモリバスへのアクセスではなく、それに伴うI/Oバスの転送が1回であり、同様にホストメモリバスが回避される。
【0037】
図6は、上述したINIC・I/Oコントローラ72を必要とすることなく、ネットワーク通信接続及びネットワークストレージ接続を提供するINIC400を含むネットワークストレージシステムを示している。簡潔にするために、ホスト20及び関連する要素は、図1から変更はないものとして図示されているが、これは必ずしも当てはまらない。本実施例のINICは、第1LAN414、第2LAN416、第1SAN418及び第2SAN420に接続されたネットワーク接続またはポートを有する。ネットワーク414、416、418、420のいずれかまたは全部は、イーサネット、ファーストイーサネットまたはギガビットイーサネット規格に従って動作することができる。例えば802.3z及び802.3ab規格で記述されるギガビットイーサネットは、1ギガビット/秒または10ギガビット/秒のデータ転送速度、もしくは将来的におそらくはより速い速度を提供する。SAN418、420は、TCP/IPまたはSCSIカプセル化プロトコルにおいてSCSIのようなストレージプロトコルを実行することができる。そのようなストレージプロトコルの1つが、J.Satran他によりthe Internet Engineering Task Force(IETF)のthe Internet-Draftにおいて「iSCSI(Internet SCSI)」の表題を付して2000年6月に、それより早い時期のInternet−Draftでは「SCSI/TCP(SCSI over TCP)」の表題を付して2000年2月に記載されている。イーサネットストレージと称される、このような別のプロトコルがセッションレイヤにおいてSCSIカプセル化プロトコル(SEP)を使用し、かつ基本的にTCPが使用されているWANまたはインターネット上でデータが転送されているかどうか、またはSTPが使用されるLANまたはSAN上でデータが転送されているかによって、トランスポートレイヤにおいてTCPまたはSANトランスポートプロトコル(STP)を用いることを提案している。
【0038】
ホスト20は、PCIバスのようなI/Oバス40によってINIC400に接続され、これはPCIバスインタフェースのようなINIC・I/Oブリッジ406によってINICバス404に接続されている。INIC400は、I/Oバス40によってINICメモリ410に接続された専用プロセッサ408を有する。INICメモリ410は、フレームバッファ430及びINICファイルキャッシュ433を有する。また、INICバス404には、ネットワーク、トランスポート及びセッションレイヤプロセッシングを含むネットワークメッセージのプロセッシングを提供するハードウェアシーケンサ412の集合が接続されている。LAN414、416及びSAN418、420への物理的接続は、従来の物理的レイヤハードウェアPHY422によって提供される。各PHY422装置は、媒体アクセスコントロール(MAC)424の対応する装置と接続され、MAC装置はそれぞれINIC400と1つのネットワークとの間にデータリンクレイヤ接続を提供する。
【0039】
図7は、INIC400と第1イーサネット−SCSIアダプタ452、第2イーサネット−SCSIアダプタ454、及び第3イーサネット−SCSIアダプタ456との間に接続されたギガビットイーサネットライン450を有するSAN418を示している。イーサネット−SCSIアダプタ452、454、456はTCP接続を形成しかつ遮断することができ、INIC400にSCSIコマンドを送りまたはそれから受け取り、かつ 450を介してINIC400にデータを送りまたはそれから受け取ることができる。第1記憶装置462が第1SCSIケーブル458によって第1イーサネット−SCSIアダプタ452に接続されている。同様に、第2記憶装置464が第2SCSIケーブル459によって第2イーサネット−SCSIアダプタ454に接続され、かつ第3記憶装置466が第3SCSIケーブル460によって第3イーサネット−SCSIアダプタ456に接続されている。記憶装置462、464、466はSCSI規格に従って各アダプタ452、454、456によって動作する。各記憶装置は、それぞれのアダプタにデイジーチェーン式に接続された多数のディスクドライブを含むことができる。
【0040】
図8は、第1イーサネット−SCSIアダプタ452を詳細に示しており、これは本実施例において図1に示すものと類似するINICである。アダプタ452は、従来のPHY470によって提供されるネットワークライン450との物理的レイヤ接続及び従来のMAC472によって提供される媒体アクセスを有する1個のネットワークポートを有する。上位レイヤプロセッシングを含むネットワークメッセージのパケットヘッダのプロセッシングは、アダプタバス477を介してプロセッサ480及びアダプタメモリ482に接続されたシーケンサ475によって提供される。アダプタメモリ482はフレームバッファ484及びファイルキャッシュ486を有する。また、アダプタバス477にはSCSIコントローラが接続され、かつこれはSCSIチャネル458によって第1記憶装置462に接続されている。アダプタ452とINIC20との1つの違いは、アダプタ452が低速パスメッセージを処理するためにCPU及びプロトコルスタックを有するホストに必ずしも接続されていないことである。本実施例において接続の設定は、例えば接続初期設定対話の際にアダプタ452に初期パケットをINIC400が送ることによって、アダプタ452により行われ、前記パケットはシーケンサ475により処理されかつプロセッサ480に送られてCCBを作成する。ソフトウェアプロトコルスタックを実行するCPUによる低速パスプロセッシングを必要とする一定の状態は、このようなアダプタ452とINIC400間の通信環境ではなお一層起こりにくいものである。アダプタ452とINIC400間で送られるメッセージは、SCSI/TCP及び簡易ネットワーク管理プロトコル(SNMP)のような単一のまたは限られたプロトコルレイヤの集合に従って構成することができ、かつ単一のソースへまたはそれから単一のもしくは制限された数のデスティネーションに送られる。従来の通信ネットワークに複雑な状態を生じさせる変数の多くを減らすことによって、高速パスプロセッシングの使用を増やすことができ、エラープロセッシングのためのアダプタ452の必要性が少なくなる。アダプタ452は、IP及びTCP上でいくつかのタイプのストレージプロトコルを処理する能力を持たせることができるが、それはアダプタ452が、INIC400に接続される代わりに、ネットワークストレージのためにそのようなプロトコルの1つを使用するホストに接続されるような場合である。ネットワーク450がストレージ転送に専用のSANではないが通信トラフィックを取り扱うような場合、低速パスパケットのためにプロトコルスタックを実行するCPUを有するホストに接続されたINICは、アダプタ452の代わりに用いることができる。
【0041】
図9に示すように、INIC400に類似する追加のINICが、I/Oバス40を介してホスト20に接続され、追加の各INICによって追加のLAN接続が提供されかつ/または追加のSANに接続されている。複数のINICは、第N・INIC490で表されており、これは第N・SAN492及び第N・LAN494に接続されている。ホスト20に接続された複数のINICによって、前記ホストは複数のストレージネットワークを制御することができ、ホスト制御ネットワークとの間で行き来するデータの流れの相当大部分がホストプロトコルプロセッシング、I/Oバスを介しての移動、ホストバスを介しての移動及びホストメモリへの格納をバイパスする。
【0042】
図1のINIC22がネットワーク25のようなネットワークから受信するメッセージパケットのプロセッシングが、図10により詳細に示されている。受け取ったメッセージパケットは、まず媒体アクセスコントローラ60に入り、これがネットワークへのINICアクセス及びパケットの受け取りを制御しかつネットワークプロトコル管理のための統計的情報を提供することができる。そこから、データは一度に1バイトづつ、本実施例では128ビットの幅を有するアセンブリレジスタ500内に流れる。このデータは、図11に関してより詳細に説明するように、フライバイシーケンサ502によって分類され、これはパケットのバイトをそれらが近くを飛ぶごとに調査し、それらのバイトから前記パケットを要約されるのに用いられることになるステータスを生成する。このように作成されたステータスは、マルチプレクサ505により前記データと併合され、その結果得られたデータがSRAM508に格納される。パケット制御シーケンサ510がフライバイシーケンサ502を監督し、媒体アクセスコントローラ60からの情報を調べ、データのバイトをカウントし、アドレスを生成し、かつアセンブリレジスタ500からSRAM508及び最終的にDRAM512へのデータの移動を管理する。パケット制御シーケンサ510は、SRAMコントローラ515を介してSRAM508のバッファを管理し、またデータをSRAM508からDRAM512のバッファに移動させる必要がある時、DRAMコントローラ518に知らせる。前記パケットに関するデータの移動が一旦完了しかつ全データがDRAM512のバッファに移動すると、パケットコントロールシーケンサ510は、フライバイシーケンサ502によって生成されたステータスを、パケットデータにプリペンドされるようにSRAM508に及びDRAM512バッファの開始部分に移動させる。次に、パケット制御シーケンサ510は、キューマネージャ520に受信バッファ記述子を受信9に入力するように要求し、これが次にプロセッサ44にパケットがハードウェア論理及びその要約されたステータスによって処理されたことを通知する。
【0043】
図11は、フライバイシーケンサ502がいくつかの階層を有することを示しており、各階層は一般にパケットヘッダの特定部分及び特定のプロトコルレイヤに、そのレイヤに関連するステータスを生成するために、焦点を合わせている。本実施例のフライバイシーケンサ502は、媒体アクセス制御シーケンサ540、ネットワークシーケンサ542、トランスポートシーケンサ546及びセッションシーケンサ548を有する。より上位のプロトコルレイヤに関係するシーケンサを追加で設けることができる。フライバイシーケンサ502は、パケット制御シーケンサ510によってリセットされ、かつ一定のバイトがアセンブリレジスタ500から利用可能であるかをフライバイシーケンサに知らせるパケット制御シーケンサによってポインタが与えられる。媒体アクセス制御シーケンサ540は、バイト0〜5を見ることによってパケットが別のホストではなくまたは別のホストに加えてホスト20にアドレス指定されていることを判断する。また、パケットのオフセット12、13が媒体アクセス制御シーケンサ540により処理されて、タイプフィールド、例えば前記パケットがイーサネットまたは802.3であるかどうかを決定する。タイプフィールドがイーサネットの場合、それらのバイトは更に前記パケットのネットワークプロトコルタイプを媒体アクセス制御シーケンサ540に知らせる。802.3の場合には、そうではなく、それらのバイトはフレーム全体の長さを示し、媒体アクセス制御シーケンサ540が前記パケット内に更に8バイトを調べて、ネットワークレイヤのタイプを決定することになる。
【0044】
大部分のパケットについて、ネットワークシーケンサ542が、受け取ったヘッダの長さが正しい長さであるかを検証し、かつネットワークレイヤのヘッドをチェックサムする。高速パスの対象について、ネットワークレイヤのヘッダは、媒体アクセス制御シーケンサ540により行われる分析から、IPまたはIPXであることがわかる。例えば、タイプフィールドが802.3でありかつネットワークプロトコルがIPであると仮定すると、ネットワークシーケンサ542は、IPタイプを決定するために、バイト22で始まることになるネットワークレイヤヘッダの最初のバイトを分析する。IPヘッダの最初のバイトは、ネットワークシーケンサにより処理されて、前記パケットが関連するIPタイプを決定することになる。前記パケットが例えばIPバージョン4に関するものであることを決定することで、ネットワークシーケンサ542による処理が更に行われ、該ネットワークシーケンサは前記パケットのトランスポートヘッダプロトコルを表示するためにIPヘッダ内への10バイトに配置されたプロトコルタイプをも見る。例えば、イーサネット上でのIPの場合、IPヘッダはオフセット14で始まり、かつプロトコルタイプバイトはオフセット23であり、これはネットワーク論理により処理されて、トランスポートレイヤプロトコルが例えばTCPであるかどうかを決定する。一般に20〜40バイトであるネットワークレイヤヘッダの長さから、ネットワークシーケンサ542は、トランスポートレイヤヘッダを検証するためにパケットのトランスポートレイヤヘッダの開始部分を決定する。トランスポートシーケンサ546は、トランスポートレイヤヘッダ及びデータのチェックサムを生成することができ、これには、少なくともTCPの場合にIPヘッダからの情報を含むことができる。
【0045】
TCPパケットの例について続けて説明すると、トランスポートシーケンサ546はまた、ヘッダのトランスポートレイヤ部分の最初のいくつかのバイトを分析して、前記パケットがNetBiosまたは別のプロトコルであるかどうかのようなメッセージについてTCPソース及びデスティネーションポートを部分的に決定する。TCPヘッダのバイト12をトランスポートシーケンサ546により処理されて、TCPヘッダの長さを決定しかつ検証する。TCPヘッダのバイト13は、認証フラグ及びプッシュフラグは別として、プロセッサにこのパケットを例外として分類させることがある、リセット及び終了のような予期しないオプションを示すことがあるフラグを有する。TCPオフセットバイト16、17は、ハードウェア論理によって取り出されかつ格納されるチェックサムであり、前記フレームの残りの部分は該チェックサムに対して検証される。
【0046】
セッションシーケンサ548は、セッションレイヤヘッダの長さを決定し、これは、NetBiosの場合にはたった4つのバイトであり、その内の2つがNetBiosペイロードデータの長さを知らせるが、これは他のプロトコルについてより大きくすることができる。また、セッションシーケンサ548を用いて、例えば、特に高速パスが有利であるような読出しまたは書込みとしてメッセージのタイプを分類することができる。メッセージのタイプによって、更に上位レイヤの論理プロセッシングが、パケット制御シーケンサ510及びフライバイシーケンサ502のハードウェア論理によって実行することができる。このようにして、シーケンサ52は、バイトの単一のストリームから選択したバイトの分類によってヘッダのハードウェアプロセッシングを知的に行い、パケットのステータスがオンザフライで決定された分類から構築される。全てのパケットがフライバイシーケンサ502により処理されたことをパケット制御シーケンサ510が一旦検出すると、パケット制御シーケンサ510は、フライバイシーケンサ502により生成されたステータス情報及びパケット制御シーケンサ510により生成されたあらゆるステータス情報を付け加え、かつプロセッサ44によるパケットの取り扱いに好都合なように、それらのステータス情報をパケットにプリペンド(前部に追加)する。パケット制御シーケンサ510により生成された追加のステータス情報には、媒体アクセスコントローラ60のステータス情報及び発見されたあらゆるエラー、またはアセンブリレジスタまたはDRAMバッファにおけるデータのオーバフロー、または前記パケットに関する他の様々な情報が含まれる。また、パケット制御シーケンサ510は、キューマネージャ520を介して受信バッファ9及び受信統計9への入力を記憶する。
【0047】
ハードウェア論理によりパケットを処理することの利点は、従来のシーケンシャルソフトウェアプロトコルプロセッシングと対照的に、パケットを格納したり、移動したり、コピーしたり、各プロトコルレイヤヘッダを処理するためにストレージから引き抜いたりする必要がなく、処理効率の大幅な増加及び各パケットについて処理時間の節約が得られることである。パケットは、ネットワークから受け取ったレートビットで、例えば100ベースT接続の場合に100メガビット/秒で処理することができる。このレートで受信されかつ60バイトの長さを有するパケットを分類するための時間は、従って約5ミリ秒である。このパケットをハードウェア論理で処理しかつパケットデータを高速パスを介してそのホストデスティネーションに送るための合計時間は、CPUの割込みの減少で得られる追加の時間の節約及びホストバスバンド幅の節約を考慮することさえ無く、従来のシーケンシャルソフトウェアプロトコルプロセッシングを用いる従来のCPUが必要とするものよりも、大幅に少なくすることができる。デスティネーションがINICキャッシュにあるような場合には、ホストバス35及びI/Oバス40について追加のバンド幅の節約が得られる。
【0048】
プロセッサ44は、フレームバッファ77に保持される各受信メッセージパケットについて、そのパケットが高速パスの対象であるかどうかを選択し、かつそうである場合には、前記パケットが属する接続について高速パスが既に接続されているかどうかを調べる。これをするために、プロセッサ44はまずヘッダのステータスサマリを調べて、パケットのヘッダが高速パスの対象について定義されたプロトコルからなるものであるかどうかを決定する。そうでない場合には、プロセッサ44は、INIC22内のDMAコントローラに命令して、前記パケットを低速パスプロセッシングのためのホストに送る。メッセージの低速パスプロセッシングの場合でさえ、このようにINIC22は、メッセージタイプの検証及び決定のような初期処理を実行し、かつ検証したメッセージを少なくともホストのデータリンクレイヤに送る。
【0049】
高速パス対象の場合、プロセッサ44は、ヘッダのステータスサマリがINICにより保持されてるCCBと一致するかどうかを調べる。そうである場合、前記パケットからのデータは、高速パスに沿って前記ホストのデスティネーション168に送られる。高速パス対象のパケットサマリがINICにより保持されるCCBと一致しない場合には、前記パケットは低速パスプロセッシングのために前記ホストに送られ、該メッセージのCCBを作成する。また、断片化されたメッセージや他の複雑さがある場合には高速パスが用いられないことがある。しかしながら、相当大部分のメッセージについては、INIC高速パスによってメッセージのプロセッシングを大幅に加速することができる。このようにINIC22は、与えられたパケットの運命を決定するためにいくつかのプロトコルレイヤのそれぞれにステートマシンを用いる従来のものと対照的に、オンザフライで集めた情報に基づいて、データをそのデスティネーションに直接送るかどうかを決定する単一のステートマシンプロセッサ44が提供される。
【0050】
CCBをINICのハッシュテーブルにキャッシングすることによって、到来するパケットを要約する語との素早い比較が行われ、パケットを高速パスを介して処理できるかどうかが決定される一方、一杯のCCBがプロセッシングのためにINICに保持される。この比較を加速する別の方法には、B−ツリーのようなソフトウェア処理またはコンテンツアドレス可能メモリ(CAM)のようなハードウェアアシストが含まれる。INICマイクロコードまたはコンパレータ回路がCCBとの整合を検出すると、DMAコントローラが前記パケットからのデータをホストメモリ33またはINICファイルキャッシュ80のデスティネーションにCPUによる割込み、プロトコルプロセッシングまたは複製なしで配置する。受信したメッセージのタイプによって、前記データのデスティネーションはホスト20、またはホストファイルキャッシュ24、INICファイルキャッシュ80のセッションレイヤ、プレゼンテーションレイヤまたはアプリケーションレイヤであったりする。
【0051】
ファイル転送のような大きなメッセージについて最も一般的に使用されているネットワークプロトコルの1つは、TCP/IP上のサーバメッセージブロック(SMB)である。SMBは、ファイルが書き込まれるプリンタまたはディスクのような特定の動作のために必要なリソースが前記動作が行われたホストに存在するかまたはそれに関連するかもしくはファイルサーバのようなネットワークに接続された別室のホストに配置されているかどうかを決定するリダイレクタソフトウェアと協力して動作することができる。SMB及びサーバフラッシュリダイレクタは、通常トランスポートレイヤからサービスを受ける。本発明では、SMB及びリダイレクタはそうではなく、INICからサービスを受けることができる。この場合、大きなSMBトランズアクションを受け取った時、INICバッファからDMAコントローラによってデータを送ることは、ホストが取り扱わなければならない割込みを大幅に少なくすることができる。更に、このDMAは、通常データをそのホストファイルキャッシュ24またはINICファイルキャッシュ80内のデスティネーションに移動させ、そこから次にブロックでホスト記憶装置66またはINIC記憶装置70へそれぞれフラッシュされる。
【0052】
SMB高速パス電送は一般に上述したSMB高速パス受信を逆にし、データのブロックがホスト記憶装置66またはINIC記憶装置70からホストファイルキャッシュ24またはINICファイルキャッシュ80へそれぞれ読み取られる一方、関連するプロトコルヘッダが、ネットワークラインを介してリモートホストへの伝送のために、INICにより前記データにプリペンドされる。カスタムハードウェア経由かつホストの繰り返し割込み無しにINICにより複数パケット及び複数TCP、IP、NetBios及びSMBプロトコルレイヤのプロセッシングによって、SMBメッセージをネットワークラインに伝送する速度を大幅に増加させることができる。図4に関連して上述したように、送信したファイルブロックがINIC記憶装置70上に格納される場合には、ホストバス35バンド幅及びI/Oバスバンド幅40における追加の節約を得ることができる。
【0053】
図12は、そのいずれも同図には記載されていないが、ネットワークメッセージを処理するために、INICと共にホストにより使用されるAlacritechのプロトコルスタック38を示している。INICドライバ560はINICをホストのオペレーティングシステムにリンクさせ、INICとプロトコルスタック38間で通信を送ることができる。本実施例のプロトコルスタック38はデータリンクレイヤ562、ネットワークレイヤ564、トランスポートレイヤ566、上位レイヤインタフェース568及び上位レイヤ570を有する。上位レイヤ570は、使用される特定のプロトコル及び通信されるメッセージによって、セッションレイヤ、プレゼンテーションレイヤ及び/またはアプリケーションレイヤを表すことができる。プロトコルスタック38は低速パスのパケットヘッダを処理し、接続を作りかつ壊し、INICへの高速パス接続のためにCCBを分配し、かつINICからホスト20へフラッシュされる高速パス接続のためにCCBを受け取る。上位レイヤインタフェース568は一般に、データリンクレイヤ562、ネットワークレイヤ564及びトランスポートレイヤ566により作成された接続及びステータス情報に基づいてCCBを組み立てること、及びINICデバイスドライバ560経由CCBをINICに分配すること、またはINICデバイスドライバ560経由INICからフラッシュされたCCBを受け取ることに責任を有する。
【0054】
図13は、マイクロソフト(登録商標)のオペレーティングシステムと協力してネットワーク通信を処理するための複数のプロトコルスタックを有するAlacrytechのプロトコルスタック38の別の実施例を示している。従来のマイクロソフトのTCP/IPプロトコルスタック580はMACレイヤ582、IPレイヤ584及びTCPレイヤ586を有する。コマンドドライバ590がホストスタック580と協力して動作し、ネットワークメッセージを処理する。コマンドドライバ590はMACレイヤ592、IP594及びAlacritechのTCP(APCP)レイヤ596を有する。従来のスタック580とコマンドドライバ590とが、INICデバイスドライバ570と対話するネットワークドライバインタフェース仕様(NDIS)レイヤ598を共有する。INICデバイスドライバ570は、従来のホストスタック580またはATCPドライバ590によって処理するために受信表示をソートする。PDIフィルタドライバ及び上位レイヤインタフェース572は同様に、TDIユーザ575からネットワークに送られるメッセージがコマンドドライバにかつ恐らくはINICの高速パスへ向きを変えられるか、またはホストスタックにより処理されるかを決定する。
【0055】
図14は、共にINICを有するサーバ600とクライアント602との間のSMBエクスチェンジを示しており、各INICは、ギガビットイーサネットコンプライアントで有り得るネットワーク604上でのデータの高速パス移動のためにその接続及びステータスを定義するCCBを有する。クライアント602はINIC606、802.3コンプライアントデータリンクレイヤ608、IPレイヤ610、TCPレイヤ611、ATCPレイヤ612、NetBiosレイヤ614及びSMBレイヤ616を有する。前記クライアントは、通信処理のために低速パス618及び高速パス620を有する。同様に、サーバ600はINIC622、802.3コンプライアントデータリンクレイヤ624、IPレイヤ626、TCPレイヤ627、ATCPレイヤ628、NetBiosレイヤ630及びSMBレイヤ632を有する。サーバ直接接続型記憶装置634が、SCSIチャネルのようなパラレルチャネル638上でサーバと接続される。これはINIC622にも接続されたI/Oバス639に接続されている。ネットワーク記憶装置640がネットワークライン644上でINIC622に接続され、かつNAS記憶装置642が、ギガビットイーサネットコンプライアントで有り得る同じネットワーク644に接続されている。サーバ600は、図14に示されてないファイルキャッシュとINIC622間でI/Oバス638上を通過する通信プロセッシングのための低速パス646及び高速パス648を有する。
【0056】
ネットワーク記憶装置640または642とクライアント602との間で転送される、I/Oバスを通らないデータのために、サーバの制御下でINIC622によりストレージ高速パスが提供される。データはSCSI/TCPまたはISCSIのようなブロック形式に従ってINIC622とネットワーク記憶装置640との間で通信され、データはTCP/NetBios/SMBのようなファイル形式に従ってINIC622とNAS記憶装置642との間で送信される。いずれのストレージ高速パスについても、INIC622が、記憶装置640または642との接続を定義する別のCCBを保持することができる。以下の説明を簡便にするために、そのサーバ600とのネットワーク604上での接続を定義するINIC606により保持されるCCBをクライアントCCBと称し、そのクライアント602とのネットワーク604上での接続を定義するINIC622により保持されるCCBをサーバCCBと称する。そのネットワーク記憶装置640とのネットワーク644上での接続を定義するINIC622により保持されたCCBをSAN・CCBと称し、そのNAS記憶装置642とのネットワーク644上での接続を定義するINIC622により保持されたCCBをNAS・CCBと称する。追加のネットワークライン650、652を別の通信及び/またはストレージネットワークと接続することができる。
【0057】
クライアント602が、ネットワーク記憶装置640上にブロックで格納されたサーバ600上の100KBファイルを読み出したいと仮定すると、前記クライアントは、ネットワーク604を通ってSMB読出しリクエストを送ることによって開始し、前記サーバ上のそのファイルの最初の64KBを要求することができる。この要求は、例えば76バイトだけであってもよく、前記サーバ上のINIC622はメッセージのタイプ(SMB)及び比較的小さいメッセージのサイズを認識し、前記76バイトを直接ATCPフィルタレイヤ628に送り、それが前記リクエストをサーバのNetBios630に送信する。NetBios630はセッションヘッダをSMB632に送り、これが前記読出しリクエストを処理して、要求されたデータがホストまたはINICファイルキャッシュ上に保持されているかどうかを決定する。要求されたデータがファイルキャッシュにより保持されていない場合、SMBはファイルシステムに読出しリクエストを出して、ネットワーク記憶装置640からのデータをINIC622ファイルキャッシュ内に書き込む。
【0058】
これを実行するために、ファイルシステムはINIC622に、ネットワーク記憶装置640から64KBのデータをINIC622ファイルキャッシュ内にフェッチするように指示する。次にINIC622は、前記データへのリクエストをネットワーク記憶装置640へネットワーク644で送信する。このリクエストは前記ブロックを読取る記憶装置640への1つまたは複数のSCSIコマンドの形を取ることができ、前記コマンドにはISCSIまたは類似のプロトコルに従って、TCP/IPヘッダが付加されている。記憶装置640上のコントローラがそのディスクドライブから要求されたブロックを読出し、ISCSIまたは類似のプロトコルヘッダを前記ブロックまたは該ブロックのフレームサイズの部分に付け加え、かつその結果得られるフレームをネットワーク644上でINIC622に送ることによって、前記コマンドに応答する。前記フレームはINIC622により受け取られ、INIC622シーケンサにより処理され、ストレージCCBと整合され、かつ要求された100KBファイルの一部分を形成するINICファイルキャッシュの64KBファイルストリームとして再び組立てられる。前記ファイルストリームがINIC622ファイルキャッシュ上に一旦格納されると、SMBは読出し応答を組立てかつそのファイルストリームを示すスキャッタギャザリストをINIC622に送り、かつ前記応答をINIC622に送って、サーバCCBに従ってネットワーク上で前記データを送る。INIC622は前記スキャッタギャザリストを用いて、そのファイルキャッシュからデータパケットを読出し、これは、サーバCCBに基づいてINICにより作成されたIP/TCP/NetBios/SMBヘッダとプリペンドされ、かつその結果のフレームをネットワーク604上に送る。前記ファイルの残りの36KBは、同様の手法で送られる。このようにして、ネットワーク記憶装置上のファイルは、サーバの制御下で、I/Oバスまたはサーバプロトコルスタックに出会うファイルからのデータ無しで転送することができる。
【0059】
クライアント602により要求されたデータがNAS記憶装置642上に格納される場合には、リクエストはサーバ600からその記憶装置642へ送ることができ、これはクライアント602にアドレス指定されたヘッダを有するデータを送ることによって応答し、サーバ600がルータとして機能する。サーバ600がプロキシサーバまたはウェブキャッシュサーバとして実行されるような実施例では、NAS記憶装置からのデータをサーバ600に送ることができ、これが前記データをそのファイルキャッシュに格納して、そのデータに関する将来のリクエストに対するより早い応答を提供する。この実施例では、サーバ600上のファイルシステムが、NAS記憶装置642上のファイルデータを要求するようにINICを指示し、これがファイルデータの最初の64KBを含む多数の約1.5KBパケットを送ることによって応答する。前記ファイルデータを含むパケットはINIC622が受信し、INIC受信シーケンサにより分類されかつNAS・CCBと整合され、最初のパケットからのセッションレイヤヘッダがホストスタックにより処理され、これがファイルシステムからINIC622ファイルキャッシュのアドレスのスキャッタギャザリストを入手して、前記パケットからのデータを格納する。前記スキャッタギャザリストはホストスタックによりINIC622に送られ、かつNAS・CCBと共に格納され、INIC622が、NAS・CCBに対応するあらゆる蓄積パケット及びその後に続くパケットからのデータを、スキャッタギャザリストに従ってファイルストリームとしてINIC622ファイルキャッシュ内へDMAし始める。次に、ホストファイルシステムがINIC622に指示して、クライアントCCBに基づいてヘッダを作成し、かつ前記ファイルストリームから読み出されたデータのパケットに、該データをクライアント602に送るためにヘッダをプリペンドする。前記ファイルの残りの36KBは同様の手法により送られ、かつ別のファイルストリームとしてINIC622ファイルキャッシュにキャッシュすることができる。ファイルストリームがINIC622ファイルキャッシュに保持されることによって、クライアント606のようなクライアントへの前記ファイルへの後から来るリクエストが、より早く処理することができる。
【0060】
クライアント602により要求されたファイルがキャッシュに存在せず、その代わりにファイルブロックとしてサーバ接続記憶装置634上に格納されていた場合には、サーバ622ファイルシステムがホストSCSIドライバを指示して、サーバ接続記憶装置634から100KBのデータをサーバ600ファイルキャッシュ内にフェッチさせる(前記ファイルシステムはINIC622ファイルキャッシュ上のデータをキャッシュしたくないと仮定する)。次に、ホストSCSIドライバがSCSIチャネル638上で前記データへのSCSIリクエストをサーバ直接接続型記憶装置634に送る。サーバ直接接続型記憶装置634上のコントローラが、要求されたブロックをそのディスクドライブから読出しかつ該ブロックをSCSIチャネル639上で前記SCSIドライバに送ることによって前記コマンドに応答し、これが前記ファイルシステムの命令下でキャッシュマネージャと対話して、前記ブロックをファイルストリームとしてサーバ600ファイルキャッシュに格納する。次にファイルシステムリダイレクタがSMBを指示して、 前記ファイルストリームのスキャッタギャザリストをINIC622に送り、これをINIC622が用いて、サーバ600ファイルストリームからデータパケットを読み出す。INIC622は、サーバCCBに基づいて作成されたヘッダで前記データパケットをプリペンドしかつその結果のフレームをネットワーク604上に送る。
【0061】
この応答が到着したときクライアント602上でINIC606が動作し、INIC606は受け取った第1フレームからこの接続が高速パス620プロセッシング(TCP/IP、NetBios、CCBをマッチング)を受け取っていることを認識し、SMB616がこの第1フレームを用いてメッセージのためのバッファステージを獲得する。バッファの割り当ては、あらゆるNetBios/SMBヘッダを含む前記フレームの最初の192バイトをATCP高速パス620を介してクライアントNetBios614に直接送り、適当なヘッダをNetBios/SMBに与えることによって提供される。NetBios/SMBはこれらのヘッダを分析し、リクエストIDとの整合によって、これが元の読出し接続への応答であることを認識し、かつその中にデータが配置されるクライアントファイルキャッシュのバッファの64KリストをATCPコマンドドライバに与える。この段階ではただ1つのフレームが到着しているが、このプロセッシングが行なわれている間により多くのフレームが到着し得る。前記クライアントバッファリストがATCPコマンドドライバ628に与えられるとすぐに、これはその転送情報をINIC606に送り、INIC606はDMAによりそれらのバッファ内に蓄積されている全てのフレームデータの送信を開始する。
【0062】
クライアント602がSMBファイルをサーバ600に書き込みたい場合には、書込みリクエストが、INIC622により保持されているCCBとマッチングするであろうネットワーク604上を送信される。ファイル書込みの最初のパケットからのセッションレイヤヘッダがサーバSMB632により処理されて、サーバ600またはINIC622ファイルキャッシュ内にバッファが割り当てられ、それらバッファに関するアドレスのスキャッタギャザリストが、高速パスプロセッシングが適当であると仮定した場合、INIC622へ戻される。SMBファイルデータを含むパケットがINIC622により受け取られ、INIC受信シーケンサにより分類されかつキューの中に配置される。INIC622プロセッサは、パケットがサーバCCBに対応していることを認識しかつ前記パケットからのデータをINIC622またはサーバ600ファイルキャッシュバッファ内にスキャッタギャザリストに従ってDMAして、ファイルストリームを形成する。
【0063】
次に、前記ファイルシステムが、前記ファイルストリームのサーバ記憶装置634、ネットワーク記憶装置640またはNAS記憶装置642への送信を編成する。ファイルストリームをサーバ記憶装置634に送るために、ファイルシステムはサーバ600内のSCSIドライバに命令して、前記ファイルストリームをファイルブロックとして記憶装置634に送る。ファイルストリームをネットワーク記憶装置640に送るために、ファイルシステムはINICに命令して、SAN・CCBに基づいてISCSIまたは類似のヘッダを作成し、それらのヘッダを前記スキャッタギャザリストに従って前記ファイルストリームから読み出したパケットにプリペンドし、その結果のフレームをネットワーク644上で記憶装置640に送る。例えば分散ファイルキャッシュまたはプロキシサーバの実行に有用で有り得るNAS記憶装置642に前記ファイルストリームを送るために、ファイルシステムリダイレクタは適当なNetBios/SMBヘッダをプリペンドし、かつINICに命令して、NAS・CCBに基づいてIP/TCPヘッダを作成し、かつそれらのヘッダを、スキャッタギャザリストに従って前記ファイルストリームから読み出されたパケットにプリペンドし、その結果のフレームをネットワーク644上で記憶装置642に送る。
【0064】
図15は図14に示すものと類似のものを示しているが、図15は、特にリアルタイムトランスポートプロトコル(RTP)及びリアルタイムトランスポートコントロールプロトコル(RTCP)が関係し得る音声及び映像通信のコンテキストにおいて、本発明のユーザデータグラムプロトコル(UDP)に焦点を合わせている。サーバ600は、図14に示すプロトコルレイヤに加えて、UDPレイヤ654、AUDPレイヤ655、RTP/RTCPレイヤ656及びアプリケーションレイヤ657を有する。同様に、クライアント602は、図14に示すプロトコルレイヤに加えてUDPレイヤ660、AUDPレイヤ661、RTP/RTCPレイヤ662及びアプリケーションレイヤ663を有する。図15にRTP/RTCPレイヤ656、662は図示されているが、セッション初期設定プロトコル(SIP)または媒体ゲートウェイコントロールプロトコル(MGCP)のような他のセッション及びアプリケーションプロトコルをUDPの上に用いることができる。
【0065】
オーディオ/ビデオインタフェース(AVI)666または類似の周辺装置がサーバ600のI/Oバス639に接続され、かつAVI666にはスピーカ668、マイク670、ディスプレイ672及びビデオカメラで有り得るカメラ674が接続されている。簡単にするために1つのインタフェースとして図示されているが、これに変えてAVI666は、サウンドカードまたはビデオカードのようなそれぞれI/Oバス639に接続される別個のインタフェースを有することができる。別の実施例では、AVIインタフェースがI/Oバスではなくホストバスに接続され、かつホストCPUのメモリコントローラまたはI/Oコントローラと一体にすることができる。AVI666は、音声または映像データのための一時的記憶装置として機能するメモリを有することができる。また、クライアント602はI/Oバス675を有し、AVI677はI/Oバス675に接続されている。AVI677に接続されているのは、スピーカ678、マイク680、ディスプレイ682、及びビデオカメラで有り得るカメラ684である。簡単にするために1つのインタフェースとして図示されているが、これに代えてAVI666は、サウンドカード及びビデオカードのようなそれぞれI/Oバス675に接続された別個のインタフェースを有することができる。
【0066】
TCPと異なり、UDPは従属性の接続を提供しない。その代わりに、UDPパケットはベストエフォートベースで送られ、かつ失われたまたは壊れたパケットはUDPより上位のレイヤがそのようなサービスを提供しない限り、再送されない。UDPは、接続を確立する必要なくIPを介してアプリケーションがデータを送る方法を提供する。しかしながら、UDPまたはネットワークファイルシステム(NFF)、TCP、RTCP、SIPまたはMGCPのような別のプロトコルによるリクエストに応答してソケットが指定され、そのソケットがUDPにより送られたメッセージを受け入れることができる受信装置上のポートを割り当てる。ソケットは、ソース及びデスティネーションIPアドレス並びにソース及びデスティネーションUDPポートを示すUDPにより用いられるアプリケーションプログラミングインタフェース(API)である。
【0067】
UDPを介して従来どおりに通信を送るために、セッションレイヤまたはアプリケーションレイヤのヘッダを含むことができ、かつ通常約8KBまでのNFSデフォルトサイズのデータグラムである64KBまでのデータグラムを、ホストコンピュータによりUDPヘッダでプリペンドしてIPレイヤに渡す。UDPヘッダは、ソース及びデスティネーションポート並びに任意のチェックサムを含む。イーサネット伝送の場合、UDPダイヤグラムは、必要に応じて、IPレイヤにより約1.5KBのフラグメントに分割され、IPヘッダでプリペンドされかつイーサネットヘッダ及びトレーラでのカプセル化のためにMACレイヤに与えられ、かつネットワーク上に送られる。IPヘッダは、UDPデータグラムに固有のIP識別フィールド(IP・ID)と、そのダイヤグラムのより多くのフラグメントが続いているかどうかを示すフラグフィールドと、前記フラグメントを正しい順序で再アセンブリするために、前記ダイヤグラムのどの1.5KBフラグメントがIPヘッダに接続されたかを示すフラグメントオフセットフィールドを有する。
【0068】
クライアント602からサーバ600への高速パスUDPデータ転送の場合、例えばクライアントアプリケーション663またはオーディオ/ビデオインタフェース677からのデータのファイルストリームは、ファイルシステムの命令下でINIC606のメモリ上に格納することができる。アプリケーション663は、例えば約8KBを有するように前記ファイルストリームを構成することができ、それはアプリケーション663の命令下でINIC606により獲得される上位レイヤヘッダを含むことができ、INIC606により受け取られる各ファイルストリームは、指定されたソケットに従ってINIC606によりUDPヘッダでプリペンドされ、UDPデータグラムを作成する。UDPデータグラムは、INIC606により6つの1.5KBメッセージフラグメントに分割され、それはそれぞれIP及びMACレイヤヘッダでプリペンドされて、ネットワーク604上に伝送されるIPパケットを作成する。
【0069】
INIC622は、INIC606から送られたイーサネットフレームをネットワーク604から受け取り、ヘッダをチェックサムしかつ処理して、関連するプロトコルを決定し、かつUDP及び上位レイヤヘッダをAUDPレイヤ655に送って、そのUDPデータグラムのパケットから前記データのデスティネーションアドレスのリストを入手する。UDP及び上位レイヤヘッダはUDPデータグラムからの最大6つまでのパケットの1つに含まれ、かつそのパケットは通常そのデータグラムからの他のパケットより先に受け取られる。前記パケットが間違った順序で到着する場合には、INIC622が再アセンブリバッファ内でUDPデータグラムからの前記最大6つのパケットを列に並ばせる。UDPデータグラムに対応するパケットは、そのIP・IDに基づいて識別され、フラグメントオフセットに基づいて連結される。UDP及び上位レイヤヘッダを含むパケットが処理されてデスティネーションアドレスが獲得された後、並べられた前記データをそれらのアドレスに書き込むことができる。UDPデータグラムからの全てのパケットが来ない可能性を説明するために、INIC622は、受け取ったデータの落とし込み(dropping)をトリガするタイマを用いることができる。
【0070】
リアルタイム音声または映像通信の場合、電気通信接続がサーバ600とクライアント602との間で最初に設定される。国際電気通信連合(ITU)H.323規格による通信では、電気通信接続の設定が、RTPを用いたデータの流れのためにソース及びデスティネーションUDPポートを指定するTCPダイヤログで実行される。電気通信接続設定のための別のTCPダイヤログが、RTCPを用いたデータフローをモニタするためにソース及びデスティネーションUDPポートを指定する。SIPによって電気通信接続を初期設定するための別のメカニズムが提供される。UDPソケットが指定された後、本発明によるサーバ600からクライアント602への音声または映像データの伝送を開始することができる。
【0071】
例えば、オーディオ/ビデオインタフェース666は、マイク670及びカメラ674からの音声及びイメージを、INIC622に利用可能なオーディオ/ビデオデータに変換する。サーバ600ファイルシステムの指示のもとで、INIC622は、RTPヘッダを含むAVデータの8KBファイルストリームを獲得し、かつそのデータをINICファイルキャッシュに格納することができる。電気通信接続に従って、INIC622はUDPヘッダを各ファイルストリームにプリペンドすることができ、次にこれが1.5KBのフラグメントに断片化され、そのそれぞれがIP及びイーサネットヘッダでプリペンドされて、ネットワーク604上に伝送される。これに変えて、INIC622はINICメモリ上に格納されたAVデータから1.5KBのUDPデータグラムを作成することができ、断片化を回避しかつUDP及びIP及びMACレイヤヘッダを同時に前記電気通信接続に対応するINIC622上に保持されたテンプレートから作成できるようにする。また、AVデータで8KBより大きいUDPデータグラムを作成することが可能であり、それが追加の分割を作成するが、データグラムごとにより大きなブロックのデータを転送することができる。RTPヘッダは、AVデータがオーディオ/ビデオインタフェース666によりパケット化される相対時間を表示するタイムスタンプを有する。
【0072】
ホストCPUによるAVデータの従来のプロトコルプロセッシングと対照的にINIC622は、UDPヘッダ作成、IP断片化及びIPヘッダ作成のタスクをオフロードすることができ、ホストCPUの複数のプロセッシングサイクル、複数の割り込みを不要にしかつホストパストラフィックを大幅に少なくすることができる。INIC622は、複数のヘッダを1度にプリペンドすることによって、より効率的にヘッダ作成タスクを実行することができる。更に、AVデータは、最初にI/Oバス639上をプロトコルプロセッシングスタックへ送られかつ次にRTP/UDP/IPパケットとしてI/Oバス639上を送り返されるよりはむしろ、I/Oバス639上でINIC622により直接アクセスすることができる。またこれらの効率上の利点は、従来のプロトコルプロセッシングに比較して、AVデータの送信における遅れを大幅に小さくすることができる。
【0073】
リアルタイム音声及び映像通信システムの対象は、通信における遅れやジッタが該システムを介して通信する人々に実質的に知覚できないことである。ジッタは、パケットを受信する遅れの変化によって生じ、これが、音や景色が記録されたテンポと比較してそれらが表示されるテンポに変動を生じさせることになる。上述したパケット化された音声及び/または映像を伝送する際の遅れを減少させる利点は、受信装置でのバッファリングを介してジッタもまた減少させるのに用いることができるが、これは遅れの減少によってジッタを円滑化するための受信装置における時間が増加するからである。AVデータを通信する際の遅れ及びジッタを更に減らすために、INIC622によりUDPデータグラムフラグメントにプリペンドされたIPまたはMACレイヤヘッダは、そのサービス分野での高品質のサービス(QOS)表示を含んでいる。この表示は、ネットワーク604により用いられて、例えば優先的にバンド幅を割り当てかつそれらのフレームについてキューに入れることによって、高QOSフレームの伝送を早めることができる。
【0074】
AVデータを含むフレームがINIC606により受信されると、QOSの表示がINIC606受信論理によってフラグを立てられ、かつパケットがINIC606の高い優先順位の受信キューにバッファされる。INIC606のハードウェア論理によってパケットのヘッダを分類しかつ検証することによって、従来のIP/UDPヘッダのプロセッシングに比較して、AVデータを受け取る際の遅れが減少する。各データグラムのUDPヘッダはAUDPレイヤに送ることができ、これが前記ヘッダを処理して、関連するソケットをアプリケーションに表示する。次に、前記アプリケーションはINIC606に指示して、そのUDPヘッダに対応するデータをオーディオ/ビデオインタフェース677のデスティネーションに送る。これに代えて、UDPデータグラムに対応する全てのフラグメントが前記受信キューに連結された後、前記データグラムをUDPヘッダ無しでファイルストリームとして前記ソケットに対応するオーディオ/ビデオインタフェース677のデスティネーションに書き込まれる。任意によって、UDPデータグラムは最初にINICメモリの別の部分に格納することができる。AVデータ及びRTPヘッダは、次にオーディオ/ビデオインタフェース677に送られ、そこで復号されてスピーカ678及びディスプレイ682で再生される。
【0075】
AVデータフロー全体及び受信したIP/UDPパケットの大部分のプロトコルプロセッシングはINIC606により取扱うことができ、クライアント602のCPUの複数のプロフェッシングサイクルを省略してホストバストラフィック及び割り込みを大幅に減少できることに注意する。更に、INIC606の専用ハードウェア論理によって、汎用CPUよりもより効率的にヘッダを分類することができる。また、AVデータは、INIC602により、最初にI/Oバス675上でプロトコルプロセッシングスタックに送られかつ次にI/Oバス675上でオーディオ/ビデオインタフェース677に送られるのではなく、I/Oバス675上をオーディオ/ビデオインタフェース677に直接提供することができる。
【0076】
図16は、ネットワークインタフェース、ストレージコントローラ及びプロトコルプロセッサの機能を1つのASICチップ703に結合させたINIC22の図を示している。本実施例におけるINIC22は、サーバ及びネットワークストレージアプリケーションのための高速プロトコルプロセッシング用に設計された全2重4チャネル10/100メガビット毎秒(Mbps)のインテリジェントネットワークインタフェースコントローラが提供される。また、INIC22は、パーソナルコンピュータ、ワークステーション、ルータまたはTCP/IP、PPCP/IPまたはSPX/IPXプロトコルが使用されている他のホストに接続することができる。このようなINICの説明は、本願明細書の冒頭部分に挙げた関連特許出願に記載されている。
【0077】
INIC22はネットワークコネクタによって4つのネットワークライン702、704、706、708に接続され、これらはツイストペア同軸ケーブルまたは光ファイバのような、それぞれの接続によって、米国カリフォルニア州94538、フリーモント、レイサイドパークウェイ47200のSEEQ Technology Incorporatedから市販されているモデル80220/80221イーサネットメディアインタフェースアダプタのような物理的レイヤチェック712、714、716、718を介して媒体独立インタフェース(MII)を提供する多数の異なるコンジットに沿ってデータを運ぶことができる。前記ラインは好ましくは802.3コンプライアントでありかつINICに関連して4つの完全なイーサネットノード、INIC支援の10ベースT、10ベースT2、100ベースTX、100ベースFX及び100ベースT4に加えて将来のインタフェース標準を構成する。物理的レイヤの識別及び初期設定が、ホストドライバの初期設定ルーチンを介して実行される。ネットワークライン702、704、706、708とINIC22との間の接続は、MACサブレイヤの基本機能を実行し、基本的にINICがネットワークライン702、704、706、708にアクセスする時に制御する論理回路を含むMAC装置MAC−A722、MAC−B724、MAC−C726、MAC−D728によって制御される。MAC装置722、724、726、728は、無差別モード、マルチキャストモードまたはユニキャストモードで動作することができ、INICがネットワークモニタとして機能し、ブロードキャストパケット及びマルチキャストパケットを受信し、かつ各ノードについて複数のMACアドレスを実行できるようにする。また、MAC装置722、724、726、728によって、単一のネットワーク管理プロトコル(SNMP)について使用可能な統計的情報が得られる。
【0078】
MAC装置722、724、726、728はそれぞれ、送受信シーケンサXMT&RCV−A732、XMT&RCV−B734、XMT&RCV−C736、XMT&RCV−D738に接続される。各送受信シーケンサは、メッセージフレームがそのシーケンサを通過する時、幾つかのプロトコルプロセッシングのステップをオンザフライで実行することができる。MAC装置と組み合わせて、送受信シーケンサ732、734、736、738は、ハードウェアにおけるデータリンク、ネットワーク、トランスポート、セッション及び適当な場合にはプレゼンテーション及びアプリケーションレイヤのプロトコルに関するパケットステータスを集めることができ、従来のシーケンシャルソフトウェアエンジンと比較してそのようなプロトコルプロセッシングのための時間を大幅に減少させることができる。送受信シーケンサ732、734、736、738はSRAM及びDMAコントローラ740に接続され、それらはDMAコントローラ742及びSRAM744を有し、これがスタティックランダムアクセスメモリ(SRAM)バッファ748を制御する。SRAM及びDMAコントローラ740は外部メモリコントロール750と対話して、外部メモリバス752を介して、ICチップ700の近くに配置されたダイナミックランダムアクセスメモリ(DRAM)バッファ755との間でフレームを送りかつ受信する。DRAMバッファ755は、4MB、8MB、16MBまたは32MBとして構成することができ、かつ任意によりチップ上に配置することができる。SRAM及びDMAコントローラ740は、本実施例ではINIC22とPCIインタフェースバス757との間のインタフェースを管理するPCIバスインタフェース装置(BIU)756であるI/Oブリッジに接続されている。64ビットの多重化BIU756によって、スレイブ及びマスタ機能双方についてPCIバス757との直接のインタフェースが得られる。INIC22は64ビットまたは32ビットのPCI環境で動作することができ、そのいずれの構成においても64ビットのアドレス指定をサポートする。
【0079】
マイクロプロセッサ780がSRAM及びDMAコントローラ740とPCI・BIU756に接続されているマイクロプロセッサ780の命令及びレジスタファイルはSRAMの書込み可能なオンチップコントロールストア(WCS)及びリードオンリメモリ(ROM)を有するオンチップコントロールストア780に存在する。マイクロプロセッサ780は、入力するフレームを処理し、ホストコマンドを処理し、ネットワークトラフィックを指示しかつPCIバストラフィックを指示することができるプログラマブルステートマシンを提供する。3つのプロセッサが、クロックサイクルごとに1つの命令を発しかつ完了する3段階パイプラインアーキテクチュアの共有ハードウェアを用いて実行される。受信プロセッサ782は、基本的に通信を受け取るために用いられるのに対し、送信プロセッサ784は、基本的に全2重通信を容易にする目的で通信を送るために用いられ、ユーティリティプロセッサ786は、PCIレジスタのアクセスを監督しかつ制御することを含む様々な機能を提供する。
【0080】
プロセッサ782、784、786のための命令がオンチップコントールストア781に存在するので、前記3つのプロセッサの機能は容易に再定義することができ、それによってマイクロプロセッサ780は所定の環境に適応することができる。例えば、受信機能に必要なプロセッシングの量が送信またはユーティリティ機能に必要なそれを上回ることがある。そのような場合、幾つかの受信機能が送信プロセッサ784及び/またはユーティリティプロセッサ786によって実行することができる。それに代えて、追加レベルのパイプライン方式を作って3つではなく4つまたはそれ以上の仮想プロセッサを設けることができ、その追加レベルに受信機能が指示される。
【0081】
本実施例のINIC22は、DRAM755のテーブルに保持される最大256のCCBをサポートすることができる。また、しかしながら、順次検索を省略するためにSRAM748には順番がハッシュ状態のCCBインデックスが存在する。一旦ハッシュが生成されると、CCBがSRAMにキャッシュされ、本実施例では60までのCCBがSRAMにキャッシュされる。SRAMにキャッシュされた60のCCBの割り当ては、以下に説明するように、最小使用頻度のレジスタによって操作される。これらキャッシュの配置は、送信プロセッサ784と受信プロセッサ786との間で共有され、それによってより大きなロードを有するプロセッサがより多くのキャッシュバッファを使用することができる。また、前記シーケンサ間で共有されるべき8つのヘッダバッファ及び8つのコマンドバッファが存在する。所定のヘッダまたはコマンドバッファは、特定のCCBバッファに統計的にリンクされないが、そのリンクは各フレームごとにダイナミックだからである。
【0082】
図17はパイプラインマイクロプロセッサ780の概観を示しており、受信、送信及びユーティリティプロセッサへの命令がクロックインクリメントI、II及びIIIによって交互に変わるそれぞれにパイプラインの段階に対応する3つのフェーズで実行される。各フェーズは異なる機能について責任を有し、前記3つのプロセッサのそれぞれが各クロックインクレメントの際に異なるフェーズを占有する。各プロセッサは通常コントロールストア781からの異なる命令ストリームに基づいて動作し、それぞれに前記フェーズのそれぞれを通してそれ自身のプログラムカウンタ及びステータスを有する。
【0083】
一般にパイプラインマイクロプロセッサの第1インストラクションフェーズ800は、命令を完了しかつ結果をデスティネーションオペランドに格納し、次の命令をフェッチし、かつその次の命令をインストラクションレジスタに格納する。第1のレジスタセット790によって、命令レジスタを含む多数のレジスタが提供され、かつ前記第1レジスタセットのためのコントロール792セットによって、第1レジスタセット790への記憶のためのコントロールが提供される。幾つかのアイテムがコントロール790による変更なしに第1フェーズを通過し、かつその代わりに単に第1レジスタセット790またはRAMファイルレジスタ833内にコピーされる。第2インストラクションフェーズ860はインストラクションデコーダ及びオペランドマルチプレクサ798を有し、これは一般に第1レジスタセット490のインストラクションレジスタ内に格納された命令をデコードし、かつ生成されている全てのオペランドを集め、これは次に第2のレジスタセット796のデコードレジスタに格納される。第3インストラクションフェーズ900で使用される第1レジスタセット790、第2レジスタセット796及び第3レジスタセット801は、図18A〜Cにより詳細に示すように、多数の同じレジスタを有する。インストラクションデコーダ及びオペランドマルチプレクサ798は、第1フェーズ806及び第2フェーズ860の双方で動作するRAMファイルレジスタ833の2つのアドレスおよびデータポートから読み出すことができる。プロセッサ780の第3フェーズ900は、演算論理装置(ALU)902を有し、これは一般に第2レジスタセットからのオペランドについて全てのALU動作を実行し、結果を第3レジスタセット801に含まれるリザルトレジスタに格納する。スタックエクスチェンジ808がレジスタスタックを順序付けすることができ、かつキューマネージャ803がプロセッサ780のキューを編成し、その結果が第3レジスタセットに格納される。
【0084】
インストラクションは、循環パイプライン805に示されるように第1フェーズに続き、第3フェーズが続く。全ての所定のフェーズにおける組み合わせ遅れを最小にするために、様々な機能が命令実行の3つのフェーズに渡って分散されていることに注意する。本実施例では66MHZの周波数で、各クロックインクレメントは15ナノ秒で完了し、3つの前記プロセッサのそれぞれについて1つの命令を完了するのに合計45ナノ秒を要する。インストラクションフェーズが循環する様子が図18A〜Cにより詳細に示されており、各フェーズが異なる図で示されている。
【0085】
より詳細に言えば、図18Aは、第1フェーズ800の幾つかの特定のハードウェア機能を示しており、一般に第1レジスタセット790及び関連するコントロール792を有する。第1レジスタセット792のコントロールには、アドレス及び書込みデータをSRAMアドレス及びデータレジスタ820内にロードするための論理コントロールである、SRAMコントロール820を有する。従って、第3フェーズ900からのALU902の出力は、SRAMコントロール802によってSRAMアドレス及びデータレジスタ820のアドレスレジスタまたはデータレジスタ内に配置される。同様にロードコントロール804がコンテキストレジスタ822にファイルするファイルのためのコンテキストを書き込むためのコントロールを提供し、かつ別のロードコントロール806が、様々な雑データをフリップフロップレジスタ825に格納するためのコントロールを提供する。キャリービットが設定されているかどうかというようなALU状態コードが、第1フェーズ800において実行される動作無しで、ALU状態コードレジスタ828内にクロックされる。フラグレコード808がロックを設定するような、フラグレジスタ830内に格納される様々な機能を実行する。
【0086】
RAMファイルレジスタ833は、アドレス及びデータのための1つの書込みポートとアドレス及びデータのための2つの読出しポートとを有し、それによって2以上のレジスタが同時に読み出すことができる。上述したように、RAMファイルレジスタ33は基本的に第1及び第2フェーズにまたがるが、それは第1フェーズ800において書き込まれかつ第2フェーズ860において読み出されるからである。コントロールストアインストラクション810によって、この図面には記載されていないコントロールストア781からの新しいデータによる前記プロセッサの再プログラミングが可能になり、前記インストラクションはインストラクションレジスタ830のみ格納される。このためのアドレスがフェッチコントロールレジスタ811において生成され、それによりどのアドレスにフェッチするかが決定され、アドレスがフェッチアドレスレジスタ838に格納される。ロードコントロール831がプログラムカウンタ840の命令を出し、これはコントロールストアのためのフェッチアドレスに良く似たように動作する。3つのレジスタからなる後入れ先出し方式のスタック844が、このフェーズで他の動作を受けることなく、第1レジスタセットにコピーされる。最後にデバッグアドレス848のためのロードコントロール817が任意により含まれ、それによって起こり得るエラーの修正が可能になる。
【0087】
図18Bは、RAMファイルレジスタ833からのアドレス及びデータの読出しを含む第2マイクロプロセッサフェーズ860を示している。スクラッチSRAM865が、最初の2つのフェーズを通過して第3で増分されるレジスタを有する、前記第1レジスタセットのSRAMアドレス及びデータレジスタ820から書き込まれる。スクラッチSRAM865は、スタック844、デバッグアドレス848、及び上述したSRAMアドレス及びデータレジスタを除いて、前記第1レジスタセットからの大部分のレジスタがそうであるように、インストラクションデコーダ及びオペランドマルチプレクサ798によって読み出される。インストラクションレコーダ及びオペランドマルチプレクサ798は、レジスタセット790の各レジスタ及びSRAM865を見て、インストラクションをデコードし、かつ次のフェーズにおける動作のためのオペランドを集め、特に以下のALU902に提供するオペランドを決定する。インストラクションデコーダ及びイペランドマルチプレクサ798の成果は、ALUオペランド879、882、ALU状態コードレジスタ880、及び本実施例では32のキューを制御することができるキューチャネル及びコマンド887レジスタを含む第2レジスタセット796の多数のレジスタに格納される。レジスタセット796のレジスタの幾つかは、デコーダ798により実質的にデコードすることなく、上述したインストラクションレジスタ835からほぼ直接にロードされ、プログラムコントロール890、リテラルフィールド889、テストセレクト884及びフラグ885が含まれる。第1フェーズ800のファイルコンテキスト822のような他のレジスタは、常に第2フェーズ860のファイルコンテキスト877に格納されるが、マルチプレクサ870により集められたオペランドとして取扱うこともできる。スタックレジスタ844は、単にスタックレジスタ894にコピーされる。プログラムカウンタ840はこのフェーズで増分され868、かつレジスタ892に格納される。また、任意のデバッグアドレス848が増分され、870、かつロードコントロール875が各フェーズでのエラーを制御できるようにする目的で、この時点でパイプライン805から供給することができ、その結果がデバッグアドレス898に格納される。
【0088】
図18Cは、ALU及びキュー動作を含む第3のマイクロプロセッサフェーズ900を示している。ALU902は加算器、優先順位エンコーダ及び他の標準的な論理機能を有する。ALUの結果はレジスタALU出力918、ALU状態コード920及びデスティネーションオペランドリザルト922に格納される。ファイルコンテキストレジスタ925、フラグセレクトレジスタ926及びリテラルフィールドレジスタ930は、先のフェーズ860から単にコピーされるだけである。テストマルチプレクサが設けられて、条件付ジャンプが結果としてジャンプになるかどうかが決定され、その結果がテストリザルトレジスタ924に格納される。テストマルチプレクサ904は、そうではなくフェッチコントロール811のような類似の決定と共に第1フェーズ800で実行することができる。スタックエクスチェンジ808が、プログラムカウンタをスタック879からフェッチし、またはそのスタック上にプログラムカウンタを置くことによってスタックを上下にシフトさせ、その結果がプログラムコントロール934、プログラムカウンタ938及びスタック940レジスタに格納される。SRAMアドレスは、任意によりこのフェーズ900で増分させることができる。このフェーズでもエラーを制御できるようにするために、別のデバッグアドレス942の別のロードコントロール910をこの時点でパイプライン805から強制することができる。この図面では一体に表されているQRAM&QARU906が、キューチャネル及びコマンドレジスタ887から読出し、SRAMに格納し、かつキューを再編成し、データのキューを管理するのに必要なようにデータ及びポインタを追加しまたは取り外し、結果をテストマルチプレクサ904及びキューフラグ及びキューアドレスレジスタ928に送る。このようにQRAM&QARU906は、従来はCPU上のソフトウェアにより順に実行されていたタスク、前記3つのプロセッサのためのキューを管理する義務を引き受け、代わりにキューマネージャ906によって加速されかつ実質的にパラレルなハードウェアキューイングが行なわれる。
【0089】
図19は、キューマネージャ906によって管理される32のハードウェアキューの内の2つを示しており、前記キューのそれぞれはSRAMヘッド、SRAM末尾及びTRAM本体内で情報を列に並べる能力をも有し、各キューの拡張及び個々の構成を可能にしている。このように、FIFO1000はSRAM記憶装置1005、1007、1009、1011を有し、それぞれが8バイトで合計32バイトを有するが、これら装置の数及び能力は、他の実施例において変えることができる。同様に、FIFO1002はSRAM記憶装置1013、1015、1017、1019を有する。SRAM装置1005、1007はFIFO1000のヘッドであり、かつ装置1009、1011はそのFIFOの末尾であるのに対し、装置113、115はFIFO1002のヘッドでありかつ装置117、119はそのFIFOの末尾である。FIFO1000の情報は矢印1022で示すように、ヘッドの装置1005または1007内に書き込むことができ、かつ矢印1025で示すように、末尾の装置1011または1009から読み出される。しかしながら、特定の項目はヘッドの装置1005または1007への書込み及び読出し両方を行なうことができ、または末尾の装置1009または1011への書込み及び読出し双方を行なうことができ、データの移動及び待ち時間を最小にする。同様に、FIFO1002の情報は一般に、矢印1033で示すように、ヘッドの装置1013または1015に書き込まれ、かつ矢印1039で示すように、末尾の装置1017または1019から読み出されるが、そうではなく、書き込まれた同じヘッドまたは末尾の装置から読み出すことができる。
【0090】
SRAM・FIFO1000、1002は双方共DRAM755に接続されており、それらFIFOが実質的に無限に拡張してSRAMヘッド及び末尾部分が一杯であるような状況を処理できるようにしている。例えば、Q0とラベル付けされた32のキューの最初のものは、矢印1027で示すように、FIFO700のヘッド部分または末尾部分で待ち行列に入れられる代わりに、キューマネージャの指示下で動作するDMA装置によって、DRAM755のエントリを待ち行列に入れることができる。DRAM755に格納されたエントリは、矢印1030で示すように、SRAM装置1009に戻り、そのFIFOの長さ及びフォールスルー時間を延長させる。SRAMからDRAMへの転換は、DRAMの方がより遅くかつDMAの動作が別の待ち時間を生じさせることから、一般にSRAMが一杯である場合のために取っておかれる。このようにQ0は、キューマネージャ803によってFIFO1000及びDRAM755の双方に格納されたエントリで構成することができる。同様に、例えばQ27に対応するFIFO1000に行きの情報は、矢印1035で示すように、DMAによってDRAM755内に動かすことができる。遅いとはいえコスト効果のよいDRAM803で待ち行列に入れる能力は、初期設定の際にユーザ定義可能なものであり、前記キューを所望のサイズに変更できるようにしている。DRAM755にキューされた情報は、矢印1037で示すように、SRAM装置1017に戻される。
【0091】
32個のハードウェアキューのそれぞれのステータスが、図20に示すように、4つの32ビットのレジスタからなる組み1040に保持されかつそれからアクセスされ、各レジスタの特定のビットが特定のキューに対応していると好都合である。前記レジスタには、Q−Out Ready1045、Q−In Ready1050、Q−Empty1055及びQ−Full1060のラベルが付されている。特定のビットがQ−Out Readyレジスタ1050で設定されると、そのビットに対応するキューは、読み出される準備のできた情報を有するのに対し、同じビットのQ−In Ready1052レジスタにおける設定は、前記キューが書き込まれる準備ができていることを意味している。同様に、特定のビットのQ−Emptyレジスタ1055の肯定的設定がそのビットに対応するキューが空であることを意味するのに対し、特定のビットのQ−Fullレジスタ1060における肯定的設定は、そのビットに対応するキューが一杯であることを意味する。このようにQ−Out Ready1045は、ビット27・1052、28・1054、29・1056及び30・1058を含むビット0・1046から31・1048を有する。Q−In Ready1050は、、ビット27・1066、28・1068、29・1070及び30・1072を含めて、ビット0・1062〜31・1064を有する。Q−Empty1055は、ビット27・1078、28・1080、29・1082及び30・1084を含めて、ビット0・1074〜31・1076を有し、Q−Full1070は、ビット27・1090、28・1092、29・1094及び30・1096を含めて、ビット0・1086〜31・1088を有する。
【0092】
FIFO1000に対応するQ0はフリーバッファキューであり、全ての使用可能なバッファのアドレスのリストを保持している。このキューは、前記マイクロプロセッサまたは他のデバイスがフリーバッファのアドレスを必要とする時にアドレス指定され、従って一般に分かる程度のDRAM755を有する。従って、フリーバッファのアドレスを必要とするデバイスは、Q−0を調べてそのアドレスを得ることになる。FIFO1002に対応するQ−27は、受信バッファ記述子のキューである。受け取ったフレームを受信シーケンサにより処理した後、シーケンサはQ−27に前記フレームの記述子を格納すると思われる。そのような記述子のロケーションがSRAMにおいてすぐに使用可能な場合には、Q−In Ready1050のビット27・1066が設定されることになる。そうでない場合には、前記シーケンサはキューマネージャがSRAMからDRAMへDMAの移動を開始させるのを待たなければならず、それにより空間を解放して受信記述子を格納する。
【0093】
SRAMと前記プロセッサ間、送信シーケンサと受信シーケンサ間、及びSRAMとDRAM間におけるキューエントリの動きを管理するキューマネージャの動作が、図21により詳細に示されている。前記キューを利用するリクエストは、プロセッサリクエスト1102、送信シーケンサリクエスト1104、及び受信シーケンサリクエスト1106を含む。前記キューへの他のリクエストは、DRAM対SRAMリクエスト1086及びSRAM対DRAMリクエスト1110であり、これはDRAMと前記キューのSRAMヘッド部分または末尾部分との間でデータを行ったり来たり動かす際にキューマネージャのために動作する。これら様々なリクエストのどれが次のサイクルでキューマネージャを使用することになるかを決定することは、優先順位論理アービタ1115によって処理される。高周波数動作を可能にするために、キューマネージャはパイプライン化され、レジスタA1118及びレジスタB1120によって一時的ストレージが提供されるのに対し、ステータスレジスタ1112は、次の更新までステータスを維持する。キューマネージャは、送受信シーケンサが要求するDMAについて偶数サイクルを、プロセッサのリクエストのために奇数サイクルを確保する。デュアルコープのQRAM1125が前記キューのそれぞれに関する変数、前記キューのSRAM状態に対応するヘッドライトポインタ、ヘッドリードポインタ、テールライトポインタ及びテールリードポインタ、並びに前記キューのDRAM状態及び前記キューのサイズに対応するボディライトポインタ及びボディリードポインタを含む各キューの変数を格納する。
【0094】
アービタ1115が実行すべき次の動作を選択した後QRAM825の変数はQALU1128により選択された動作に従って設置されかつ変更され、SRAM読出しリクエスト1130またはSRAM書込みリクエスト1140が生成される。前記変数が更新されかつ更新されたステータスがQRAM1125に加えてステータスレジスタ1122に格納される。前記ステータスはまたアービタ1115に供給されて、先に要求された動作が完了したという信号を送り、リクエストの重複を抑制する。ステータスレジスタ1122は、4つのキューレジスタQ−Out Ready1045、Q−In Ready1050、Q−Empty1055及びQ−Full1060を更新して、アクセスされた前記キューの新しいステータスを反映する。同様に、DMAを介してそのキューについてSRAMヘッド部分及び末尾部分にアクセスしかつそれからアクセスされたSRAMアドレス1133、ボディ書込みリクエスト1135及びボディ読出しリクエスト1138が更新される。これに代えて、Q書込みデータ1144で示すように、マルチプラクサ1146により選択されかつSRAM書込みリクエスト1140にパイプライン化されたキューに様々な処理を書き込みたい場合がある。SRAMコントローラは、アクセスされた前記キューの末尾部分に書き込みまたはヘッド部分を読み出し、かつ応答を返すことによって、読出し及び書込みリクエストを処理する。このようにして、様々なキューが用いられかつそれらのステータスが更新される。
【0095】
図22A〜Dは、どのコンテキストまたはCCBをINICキャッシュメモリ内に保持するかを選択するために使用される最小使用頻度レジスタ1200を示している本実施例のINICは、所定の時間で最大60のCCBをSRAMにキャッシュすることができ、従って新しいCCBがキャッシュされると、古いものは多くの場合捨てなければならず、捨てられるCCBは通常このレジスタ1200によって、その時点で最も使用されていないCCBが選択される。本実施例では、最大256のCCBのハッシュテーブルがSRAMに保持されるのに対し、最大256の満杯のCCBがDRAMに保持される。最小使用頻度レジスタ1200は、R0〜R15とラベル付けされた16の4ビットブロックを有し、そのそれぞれがSRAMキャッシュ装置に対応している。初期設定時、前記ブロックには0〜15の番号が付され、番号0が前記最小使用頻度(LRU)キャッシュ装置を表すブロックに任意に格納され、かつ番号15が最大使用頻度(MRU)キャッシュ装置を表すブロックに格納される。図22Aは、LRUブロックR0が番号9を保持し、かつMRUブロックR15が番号6を保持する任意の時点におけるレジスタ1200を示している。現在SRAMに保持されている別のCCBをキャッシュしようとする場合、LRUブロックR0が読み出されこれは図22Aにおいて番号9を保持し、かつ新しいCCBが番号9に対応するSRAMキャッシュ装置に格納される。番号9に対応する新しいCCBはこの時点で最大使用頻度CCBであるから、番号9が、図22Bに示すように、MRUブロックに格納される。他の番号は、番号1をLRUブロックに残して、全て1レジスタブロックずつ左へシフトされる。番号9に対応してSRAM装置に以前キャッシュされていたCCBは、速度は遅いがよりコスト効率的なDRAMに移動される。
【0096】
図22Cは、使用された次のCCBがすでにSRAMにキャッシュされた結果を示している。この実施例では、番号10に対応するSRAM装置にCCBがキャッシュされており、従ってそのCCBを用いた後、番号10がMRUブロックに格納される。以前により多く使用されていた番号10以外の番号のみ(レジスタブロックR9〜R15)が、番号1をLRUブロックに残して左側へシフトされる。このようにして、INICはSRAMキャッシュ内に最もアクティブなCCBを保持する。
【0097】
ある場合には、使用されているCCBは、制限されたキャッシュメモリ内に保持することが望ましくないものである。例えば、閉じつつあることが分かっているコンテキストについてCCBをキャッシュしないことが好ましく、従って他のキャッシュされたCCBをSRAMにより長く留めることことができる。この場合には、デキャッシュ可能なCCBを保持するキャッシュ装置を表す番号が、MRUブロックR15ではなくむしろLRUブロックR0に格納され、従ってデキャッシュ可能なCCBは、LRUブロックR0に保持される番号に対応するSRAM装置内にキャッシュされた新しいCCBの使用の直後に置き換えられることになる。図22Dは、番号8(図22CにおいてブロックR9にあったもの)が使用されかつその後閉じることになっているCCBに対応する場合を示している。この場合、番号8はブロックR9から取り外され、かつLRUブロックR0内に格納される。先にブロックR9の左側に格納されていた全ての数(R1〜R8)は、ここで1ブロック右側へシフトされる。
【0098】
図23は、最小使用頻度レジスタ1200を動作するのに用いられる論理装置のいくつかを示している。16個の3または4入力マルチプレクサ1210のアレイ、その内のマルチプレクサMUX0、MUX7、MUX8、MUX9及びMUX15のみが簡単にするために示されているが、最小使用頻度レジスタ1200の対応する16個のブロックに接続された出力を有する。例えば、MUX0の出力はブロックR0に格納され、MUX7の出力はブロックR7に格納される等である。各レジスタブロックの値は、ブロック番号をシフトする際に使用するために、その対応するマルチプレクサの入力及び両側に隣接するマルチプレクサの入力に接続されている。例えば、R8に格納される番号はMUX7、MUX8及びMUX9の入力に供給される。MUX0及びMUX15はそれぞれ隣接するブロックを1つだけ有し、それらマルチプレクサの特別の入力がそれぞれLRU及びMRUブロックの選択のために使用される。MUX15は4入力マルチプレクサとして図示されており、入力1215がR0に格納された番号を供給する。
【0099】
16個のコンパレタータ1220からアレイはそれぞれ、最少使用頻度レジスタ1200の対応するブロックに格納された値を受け取る。また、各コンパレータは、ライン1235に沿ってプロセッサ470から信号を受け取り、それによってプロセッサ470により送られたものと整合する番号を有するレジスタブロックが、論理回路1230に真を出力するのに対し、他の15個のコンパレータが偽を出力する。論理回路1230が、マルチプレクサへの入力を選択しかつ従ってレジスタブロック番号のシフトを制御するために、前記マルチプレクサのされぞれに繋がる一対の選択ラインを制御する。このように、選択ライン1239がMUX0を制御し、選択ライン1244がMUX7を制御し、選択ライン1249がMUX8を制御し、選択ライン1254がMUX9を制御し、かつ選択ライン1259がMUX15を制御する。
【0100】
CCBを使用しようとする時、プロセッサ470は、CCBが現在16個のキャッシュ装置の1つに保持されているCCBと整合するかどうかを調べる。整合が認められると、前記プロセッサは、そのキャッシュ装置に対応するブロック番号、例えば番号12と共に信号をライン1235に沿って送る。コンパレータ1220は、そのライン1235からの前記信号をブロック番号と比較し、かつコンパレータC8が前記信号に整合するブロックR8について真を出力するのに対し、他の全てのコンパレータは偽を出力する。論理回路1230は、プロセッサ470からの制御下で、選択ライン1259を用いて、MUX15についてライン1235からの入力を選択し、番号12をMRUブロックR15に格納する。また、論理回路1230は、MUX15は別にして、MUX8及びそれより上位のマルチプレクサに関する各対の選択線に信号を送り、MUX8及びそれより上位の各マルチプレクサへの入力として、1ブロック右側のレジスタブロック(R9〜R15)に格納されていた値を選択することによって、その出力を1ブロック左側へシフトする。MUX8の左側にあるマルチプレクサの出力は、一定に選択される。
【0101】
他方、プロセッサ470が16個のキャッシュ装置の中で前記CCBとの整合を見つけることができない場合には、前記プロセッサはライン1266に沿ってLRUブロックR0から読出しを行い、LRUブロックに対応するキャッシュを識別し、かつそのキャッシュに格納されていたデータをDRAMに書き込む。R0に格納されていた番号、本実施例では番号3、がMRUブロックR15に格納するためにMUX15への入力1215として選択ライン1259により選択される。他の15のマルチプレクサは、そのそれぞれのレジスタブロックに、各レジスタブロックのすぐ右側に格納されていた番号を出力する。
【0102】
前記プロセッサがCCBを使用後にキャッシュから取り外したいような場合には、MRUブロックR15よりもむしろLRUブロックR0が、そのCCBを保持するキャッシュ装置に対応する番号を置くために選択される。SRAMから取り外すためにLRUブロックR0に置かれるべきCCBに対応する数(例えば、ブロックR9に保持される番号1)は、プロセッサ470によりライン1235に沿って送られ、これはコンパレータC9によって整合される。前記プロセッサは論理回路1230に指示して、ライン1239でMUX0への入力1235を選択することによって、番号1をR0に入力させる。MUX9への選択ライン1254が入力として、レジスタブロックR8に保持されている番号を選択し、それによってR8からの番号がR9に格納される。R0とR9間の他のレジスタブロックにより保持されている番号が同様にして右側へシフトされ、R9の右側のレジスタブロックの番号が一定のまま残される。これによって、多くのサイクルについて閉じたCCBを保持することから不十分なキャッシュメモリが解放され、それらの識別番号がレジスタブロックを介してMRUからLRUブロックへ移動する。
【0103】
図24は、INICの詳細を追加して示しており、この記載では単一のネットワークシステムに焦点を置いている。INIC22は、PHYチップ712、ASICチップ700及びDRAM755を有する。PHYチップ712はINICカード22をネットワークコネクタ2101を介してネットワークライン2105に接続している。INIC22は、カードエッジコネクタ2107及びPCIバス757を介してホストのCPU(例えば、図1のホスト20のCPU30)に接続されている。ASICチップ700は、媒体アクセスコントロール(MAC)装置722、シーケンサブロック732、SRAMコントロール744、SRAM748、DRAMコントロール742、キューマネージャ803、プロセッサ780及びPCIバスインタフェース装置756を有する。シーケンサブロック732は、送信シーケンサ2104、受信シーケンサ2105、及びコンフィグレーションレジスタ2106を有する。MACデスティネーションアドレスはコンフィグレーションレジスタ2106に格納される。プロセッサ780により実行されるプログラムコードの一部分がROM(図示せず)に保有され、かつ一部分が書込み可能なコントロールストアSRAM(図示せず)に送られている。前記プログラムは、初期設定時にホスト20から書込み可能コントロールストアSRAMにダウンロードすることができる。
【0104】
図25は、図24の受信シーケンサ2105のより詳細な線図である。受信シーケンサ2105は、データ同期バッファ2200、パケット同期シーケンサ2201、データアセンブリレジスタ2202、プロトコルアナライザ2203、パケットプロセッシングシーケンサ2204、キューマネージャインタフェース2205、及びダイレクトメモリアクセス(DMA)コントロールブロック2206を有する。パケット同期シーケンサ2201及びデータ同期バッファ2200はMAC722のネットワーク同期式クロックを利用し、受信シーケンサ2105の残りの部分は固定周波数のクロックを利用する。破線2221は、クロックのドメイン境界を示している。
【0105】
図24及び図25の受信シーケンサ2105の動作について、ネットワークライン702からのTCP/IPパケットのINIC22上での受信に関連して説明する。初期設定時には、プロセッサ780がDRAM755をバッファに区分する。受信シーケンサ2105がDRAM755のバッファを用いて、到来するネットワークパケットデータを前記パケットのステータス情報と共に格納する。プロセッサ780は各バッファについて32ビットのバッファ記述子を作成する。バッファ記述子は、その関連するバッファのDRAMにおけるサイズ及びロケーションを示す。プロセッサ780は、これらのバッファ記述子をキューマネージャ803に書き込むことによって、「フリーバッファキュー」2108上にバッファ記述子を置く。キューマネージャ803は、「フリーバッファキュー」2108を含む複数のキューを保持する。この実施例では、様々なキューのヘッド部分及び末尾部分がSRAM748に置かれ、前記キューの中間部分がDRAM755に置かれる。
【0106】
ライン2229は、リクエストライン及びアドレスラインに関連するリクエストメカニズムを有する。同様にライン2230は、リクエストライン及びアドレスラインに関係するリクエストメカニズムを有する。キューマネージャ803はライン2229、2230を用いて、DRAMからSRAMへまたはSRAMからDRAMへキュー情報を転送するリクエストを出す。
【0107】
受信シーケンサのキューマネージャインタフェース2205は、パケットプロセッシングシーケンサ2204による使用のために、常にフリーバッファ記述子2207を保持しようとする。ビット2208は、フリーバッファ記述子2207がパケットプロセッシングシーケンサ2204により使用可能であることを表示するレディビットである。キューマネージャインタフェース2205がフリーバッファ記述子を持っていない(ビット2208が設定されていない)場合には、キューマネージャインタフェース2205はリクエストライン2205を介してキューマネージャ803から1を要求する。(リクエストライン2209は実際、動作がキューへの書込みである場合、リクエスト、キューID、読出し/書込み信号及びデータを通信するバスである。)
応答の際、キューマネージャ803は「フリーバッファキュー」2108の末尾部分からフリーバッファ記述子を検索し、次に応答ナイン2210上の応答信号を介してキューマネージャインタフェース2205に知らせる。キューマネージャインタフェース2205が応答信号を受け取ると、キューマネージャインタフェース2205はフリーバッファ記述子2207をロードし、かつレディビット2208を設定する。前記フリーバッファ記述子がSRAM748のフリーバッファキューの末尾部分にあったことから、キューマネージャインタフェース2205は、実際はSRAMコントロールブロック744の読出しデータバス2228からフリーバッファ記述子2207を受け取る。パケットプロセッシングシーケンサ2204は、リクエストライン2211を介してフリーバッファ記述子2207を要求する。キューマネージャインタフェース2205がフリーバッファ記述子2207を検索し、かつフリーバッファ記述子2207がパケットプロセッシングシーケンサによる利用が可能である場合、キューマネージャインタフェース2205はグラントライン2212を介してパケットプロセッシングシーケンサ2204に知らせる。この処理によって、フリーバッファ記述子はパケットプロセッシングシーケンサ2204による使用が可能になり、かつ受信シーケンサ2105が到来するパケットを処理できる状態となる。
【0108】
次に、TCP/IPパケットがネットワークコネクタ2101及び物理的レイヤインタフェース(PHY)712を介してネットワークライン2105から受け取られる。PHY712は、前記パケットをMAC722に媒体独立インタフェース(MII)パラレルバス2109を介して供給する。MAC722は前記パケットの処理を開始し、かつパケットの開始部分が受信されていることを示す「パケットの開始」信号をライン2213上にアサートする。データのバイトがMACに受信されかつMAC出力2215において利用可能になると、MAC722は「データ有効」信号をライン2214上にアサートする。前記「データ有効」信号を受け取ると、パケット同期シーケンサ2201がロード信号ライン2222を介してデータ同期バッファ2200を指示し、データライン2215から受け取ったバイトをロードする。データ同期バッファ2200は4バイトの深さを有する。次に、パケット同期シーケンサ2201がデータ同期バッファの書き込みポインタを増分させる。このデータ同期バッファの書き込みポインタは、ライン2216を介してパケットプロセッシングシーケンサ2204に利用可能となる。データライン2215から連続するデータのバイトは、このようにしてデータ同期バッファ2200内に刻時される。
【0109】
ライン2219上で利用可能なデータ同期バッファ読出しポインタがパケットプロセッシングシーケンサ2204によって保持される。パケットプロセッシングシーケンサ2204は、ライン2216上のデータ同期バッファ書き込みポインタをライン2219上のデータ同期バッファ読出しポインタと比較することによって、データ同期バッファ2200においてデータが使用可能であることを決定する。
【0110】
データアセンブリレジスタ2202は16バイト長のシフトレジスタ2217を有する。このレジスタ2217は、一度に1バイトが順にロードされ、かつパラレルにアンロードされる。データがレジスタ2217にロードされると、書込みポインタが増分される。この書込みポインタが、ライン2218を介してパケットプロセッシングシーケンサ2204に利用可能となる。同様に、データがレジスタ2217からアンロードされると、パケットプロセッシングシーケンサ2204により保持された読出しポインタが増分される。この読出しポインタは、ライン2220を介してデータアセンブリレジスタ2202に利用可能である。従って、パケットプロセッシングシーケンサ2204は、ライン2218上の書込みポインタをライン2220上の読出しポインタと比較することによって、レジスタ2217に利用可能な余裕があるかどうかを決定することができる。
【0111】
レジスタ2217に利用可能な余裕があるとパケットプロセッシングシーケンサ2204が決定した場合、パケットプロセッシングシーケンサ2204はデータアセンブリレジスタ2202に命令して、データ同期バッファ2200からデータのバイトをロードする。データアセンブリレジスタ2202は、ライン2218上のデータアセンブリレジスタ書込みポインタを増分し、かつパケットプロセッシングシーケンサ2204がライン2219上のデータ同期バッファ読出しポインタを増分する。レジスタ2217にシフトされたデータは、チェックサムを検証しかつ「ステータス」情報2223を生成するプロトコルアナライザ2203によってレジスタ出力で調べられる。
【0112】
DMAコントロールブロック2206は、64バイト受信FIFO2110を介して情報をレジスタ2217からバッファ2114へ動かす責任を有する。DMAコントロールブロック2206は、64バイトのSRAM748を用いて受信FIFO2110を2つの32バイトピンポンバッファとして実行する。DMAコントロールブロック2206は、書込みポインタ及び読出しポインタを用いて前記受信FIFOを実行する。転送されるべきデータがレジスタ2217において利用可能でありかつ空間がFIFO2110において利用可能であると、DMAコントロールブロック2206は、ライン2225を介してSRAMコントローラ744にSRAM書込みリクエストをアサートする。次にSRAMコントローラ744がデータをレジスタ2217からFIFO2110へ移動させ、かつライン2225を介して応答信号をDMAコントロールブロック2206へアサートする。ここで、DMAコントロールブロック2206が受信FIFO書込みポインタを増分させ、かつデータアセンブリレジスタ読出しポインタを増分させる。
【0113】
32バイトのデータが受信FIFO2110に預けられていると、DMAコントロールブロック2206はライン2226を介してDRAMコントローラ742にDRAM書込みリクエストを示す。この書込みリクエストは、DRAMリクエストアドレスに関して「バッファロードカウント」でOR演算したフリーバッファ記述子2207と、SRAM読出しアドレスに関する受信FIFO読出しポインタとから構成される。受信FIFO読出しポインタを用いて、DRAMコントローラ742はSRAM744に読出しリクエストをアサートする。SRAMコントローラ744は、SRAM748の受信FIFO2110から表示されたデータを戻しかつ応答信号をアサートすることによって、DRAMコントローラ742に応答する。DRAMコントローラ742は、前記データをDRAM書込みデータレジスタに格納し、DRAMリクエストアドレスをDRAMアドレスレジスタに格納し、かつ応答DMAコントロールブロック2206にアサートする。次に、DMAコントロールブロック2206は、受信FIFO読出しポインタをデクリメントする。次に、DRAMコントローラ742は、前記データをDRAM書込みデータレジスタからバッファ2114へ移動させる。このようにして、連続的な32バイトのチャンクからなるデータがSRAM748に格納されるので、DRAMコントロールブロック2206は、これら32バイトのチャンクからなるデータを一度にSRAM748からDRAM755のバッファ2214に移動させる。32バイトチャンクのデータをこのようにしてDRAM755に転送することによって、DRAMの比較的効率的なバーストモードを用いて、データをDRAMに書き込むことができる。
【0114】
パケットデータは、全てのパケットデータが受け取られるまで、ネットワークライン2105からバッファ2114へ流れ続ける。次に、MAC722は、ライン2227上に「フレーム終了」(即ちパケットの終了)信号をアサートすることによって、かつ最後のパケットステータス(MACパケットステータス)をパケット同期シーケンサ2204に示すことによって、到来するパケットが完了したことを表す。次にパケットプロセッシングシーケンサ2204が、最後にバッファ2114に転送するためにステータス2223(「プロトコルアナライザステータス」とも称する)及びMACパケットステータスをレジスタ2217へ移動させる。前記パケットの全データがバッファ2214内に置かれた後、ステータス2223及びMACパケットステータスは、図23に示すように関連するデータにプリペンドされて格納されるように、バッファ2214に転送される。
【0115】
全データ及びステータスがバッファ2114に転送された後、パケットプロセッシングシーケンサ2204が、フリーバッファ記述子2207、バッファロードカウント、MAC・ID及びステータスビット(「アテンションビット」とも称する)を連結することによって、サマリ2224(「受信パケット記述子」とも称する)を作成する。前記アテンションビットが1である場合、前記パケットは「高速パス対象」でなく、前記アテンションビットが0である場合には、前記パケットは「高速パス対象」となる。アテンションビットの値は、さもなければプロセッサ780が前記パケットが「高速パス対象」であるかどうかを決定するためにしなければならない多大な量の処理の結果を表す。例えば、アテンションビットが0であることは、前記パケットがTCPプロトコル及びIPプロトコルの両方を用いていることを示している。この多大な量の処理を事前にハードウェアで実行しかつ次に結果をアテンションビットにエンコードすることによって、パケットが本当の「高速パスパケット」であるかどうかに関してプロセッサ780が次に行なう決定が加速される。
【0116】
次に、パケットプロセッシングシーケンサ2204がサマリ2224に関連するレディビット(図示せず)を設定し、かつサマリ2224をキューマネージャインタフェース2205に提示する。次にキューマネージャインタフェース2205が、「サマリキュー」2112(「受信記述子キュー」とも称する)のヘッド部分に書込みを要求する。キューマネージャ803はこのリクエストを受け取り、サマリ2224をサマリキュー2212のヘッドに書き込み、かつライン2210を介してキューマネージャインタフェースに応答信号をアサートする。キューマネージャインタフェース2205が前記応答を受け取ると、キューマネージャインタフェース2205は、前記サマリに関連するレディビットをクリアすることによって、サマリ2224がサマリキュー2212にあることをパケットプロセッシングシーケンサ2204に知らせる。また、パケットプロセッシングシーケンサ2204は、MACパケットステータスとMAC・IDを連結することによって、前記パケットに関する追加のステータス情報(「ベクタ」とも称する)を生成する。パケットプロセッシングシーケンサ2204は、このベクタに関連するレディビット(図示せず)を設定し、かつこのベクタをキューマネージャインタフェース2205に提示する。キューマネージャインタフェース2205及びキューマネージャ803は、上述したようにサマリ2224がサマリキュー2112のヘッドに書き込まれたのと同様にして、このベクタを協同して「ベクタキュー」2113のヘッドに書き込む。前記パケットのベクタがベクタキュー2113に書き込まれると、キューマネージャインタフェース2205は、前記ベクタに関連するレディビットをリセットする。
【0117】
サマリ2224(バッファ2114を指すバッファ記述子を含む)が一旦サマリキュー2112に置かれかつパケットデータがバッファ2144に置かれると、プロセッサ780はサマリ2224をサマリキュー2112から検索して、前記「アテンションビット」を調べることができる。
【0118】
サマリ2224からのアテンションビットが数字の1である場合、プロセッサ780は、前記パケットが「高速パス対象」でないと決定し、プロセッサ780はパケットヘッダを調べる必要がない。バッファ2114からのステータス2223(最初の16バイト)のみがSRAMにDMA転送され、従ってプロセッサ780がこれを調べることができる。ステータス2223は、前記パケットがホストに転送されることになっていない種類のパケットであること(例えば、ホストが受け取るようにレジスタされていないマルチパストフレーム)を示す場合には、前記パケットは捨てられる(即ち、ホストに送られない)。ステータス2223が、前記パケットがホストに転送されるべきでないタイプのパケットであることを示していない場合には、パケット全体(ヘッダ及びデータ)が、「低速パス」移動及びホスト20のプロトコルスタックによるネットワークレイヤプロセッシングのためにホスト20のバッファに送られる。
【0119】
前記アテンションビットが0である場合、プロセッサ780は、前記パケットが「高速パス対象」であることを決定する。プロセッサ780が前記パケットを「高速パス対象」と決定した場合、プロセッサ780は前記サマリからのバッファ記述子を用いて、バッファ2114からの最初の約96バイトの情報をDRAM755からSRAM748の部分内にDMA転送し、それによってプロセッサ780がこれを調べることができる。この最初の約96バイトは、IPヘッダのIPソースアドレス、IPヘッダのIPデスティネーションアドレス、TCPヘッダのTCPソースアドレス及びTCPヘッダのTCPデスティネーションアドレスと共に、ステータス2223を含む。IPヘッダのIPソースアドレス、IPヘッダのIPデスティネーションアドレス、TCPヘッダのTCPソースアドレス及びTCPヘッダのTCPデスティネーションアドレスは一緒になって、前記パケットが関連する1つの接続コンテキスト(TCB)を独自に定義する。プロセッサ780は、これらのTCP及びIPヘッダのアドレスを調べ、前記パケットの接続コンテキストを決定する。次に、プロセッサ780は、INIC22の制御下にある接続コンテキストのリストを調査し、前記パケットがINIC22の制御下で接続コンテキスト(TCB)に関連しているかどうかを決定する。
【0120】
前記接続コンテキストが前記リストにない場合、前記「高速パス対象」パケットは「高速パスパケット」でないと決定される。そのような場合、パケット全体(ヘッダ及びデータ)は、ホスト20のプロトコルスタックによる「低速パス」処理のためにホスト20のバッファに転送される。
【0121】
他方、前記接続コンテキストが前記リストにある場合、ソフトウェアステートマシン2231、2232を含むプロセッサ780により実行されるソフトウェアが、多くの例外状態の中の1つを調べて、前記パケットが「高速パスパケット」であるか「高速パスパケット」でないかを決定する。これらの例外状態に含まれるのは、1)IP断片化が検出されたこと、2)IPオプションが検出されたこと、3)予期しないTCPフラグ(緊急ビットセット、リセットビットセット、SYNビットセットまたはFINビットセット)が検出されたこと、4)TCPヘッダのACKフィールドがTCPウィンドウの前にあり、またはTCPACKフィールドがTCPウィンドウの後にあり、またはTCPヘッダのACKフィールドがTCPウィンドウをシュリンクさせていること、5)TCPヘッダのACKフィールドが複製のACKでありかつACKフィールドが前記複製ACKのカウントを越えている(前記複製ACKのカウントがユーザが設定可能な値であること)、及び6)TCPヘッダのシーケンス番号が順番になっていない(パケットが順番どおりに受け取られていない)ことである。プロセッサ780により実行されるソフトウェアがこれら例外状態の1つを検出した場合、プロセッサ780は前記「高速パス対象」が「高速パスパケット」でないと決定する。このような場合、前記パケットの接続コンテキストは「フラッシュ」され(接続コンテキストはホストに戻される)、それによって前記接続コンテキストはもはやINIC22の制御下で接続コンテキストのリストに存在しないことになる。パケット全体(ヘッダ及びデータ)は、ホスト20のプロトコルスタックによる「低速パス」トランスポートレイヤ及びネットワークレイヤの処理のためにホスト20のバッファへ転送される。
【0122】
他方、プロセッサ780がそのような例外状態を発見しない場合、前記「高速パス対象」のパケットは本当の「高速パスパケット」であると決定される。次に、受信ステートマシン2232がTCPを介して前記パケットの処理を行なう。次にバッファ2114の前記パケットのデータ部分が別のDMAコントローラ(図21には図示せず)によって、バッファ2114からホストストレージ35のホスト割り当て型ファイルキャッシュに転送される。ある実施例では、ホスト20は「高速パスパケット」のTCP及びIPヘッダの分析を行なわない。「高速パスパケット」のTCP及びIPヘッダの全ての分析はINICカード20上で行なわれる。
【0123】
図26は、「高速パスパケット」(64kバイトセッションレイヤメッセージ2300のパケット)のデータのINIC22からホスト20への転送を示す線図である。破線2301の左側の線図の部分はINIC22を表し、破線2301の右側の線図の部分はホスト20を表す。64kバイトのセッションレイヤメッセージ2300は約45個のパケットを有し、図24ではその内の4つ(2302、2303、2304、2305)にラベルが付されている。第1パケット2302は、トランスポート及びネットワークレイヤヘッダ(例えば、TCP及びIPヘッダ)を含む部分2306と、セッションレイヤヘッドを含む部分2307と、データを含む部分2308とを有する。最初のステップでは、部分2307、部分2308からの最初の数バイトのデータ、及びパケット2300の接続コンテキスト識別子がINIC22からホスト20の256バイトのバッファ2309に転送される。第2ステップでは、この情報をホスト20が調査し、かつINIC22に前記データのデスティネーション(例えばストレージ35におけるファイルキャッシュ2311のロケーション)を戻す。また、ホスト20は、バッファ2309からのデータの最初の数バイトをファイルキャッシュ2311の第1部分2312の開始部分にコピーする。第3ステップでは、INIC22が部分2308からの前記データの残りの部分をホスト20へ、前記データの残りの部分がファイルキャッシュ2311の第1部分2312の残りの部分に格納されるように転送する。ネットワーク、トランスポートまたはセッションレイヤヘッダはファイルキャッシュ2311の第1部分2312に格納されない。次に、第2パケット2303のデータ部分2313がホスト20に、第2パケット2303のデータ部分2313がファイルキャッシュ2311の第2部分2314に格納されるように転送する。第2パケット2303のトランスポートレイヤ及びネットワークレイヤヘッダ部分2315はホスト20に転送されない。第1パケット2302のデータ部分と第2パケット2303のデータ部分との間でファイルキャッシュ2311に格納されるネットワーク、トランスポートまたはセッションレイヤヘッダはない。同様に、第2セッションレイヤメッセージの次のパケット2304のデータ部分2316はファイルキャッシュ2311に、第2パケット2303のデータ部分とファイルキャッシュ2311の第3パケット2304のデータ部分との間でネットワーク、トランスポートまたはセッションレイヤヘッダが存在しないように転送される。このようにして、前記セッションレイヤメッセージのパケットのデータ部分のみがファイルキャッシュ2311に置かれる。セッションレイヤメッセージ2300からのデータはブロックとしてファイルキャッシュ2311内に存在し、それによってこのブロックはネットワーク、トランスポートまたはセッションレイヤヘッダを含まない。
【0124】
より短い単一パケットのセッションレイヤメッセージの場合、前記セッションレイヤメッセージの部分2307及び2308は、上述した長いセッションレイヤメッセージの場合のように、接続コンテキスト識別子2310と共にホスト20の256バイトバッファ2309に転送される。単一パケットセッションレイヤメッセージの場合、しかしながら、この時点で転送が完了する。ホスト20はデスティネーションをINIC22に戻さず、かつINIC22はそのようなデスティネーションに後のデータを転送しない。
【0125】
全体として、上述したデータ通信を処理するためのデバイス及びシステムによって大きな接続ベースのメッセージを処理するために必要な時間及びホストリソースが大幅に低減される。プロトコル処理速度及び効率は従来のプロトコルソフトウェアを実行する汎用CPUと比較して、特別に設計されたプロトコル処理ハードウェアを有するインテリジェントネットワークインタフェースカード(INIC)により著しく加速され、かつホストCPUへの割り込みが大幅に減少する。これらの利益は、ネットワークストレージの用途の場合に大きく、そのような場合、ファイル転送からのデータはホストによりファイル転送の制御が維持されて、ホストメモリバス及びホストメモリI/Oバス双方を回避することができる。
【図面の簡単な説明】
【図1】 INICに接続された記憶装置のためのI/Oコントローラ及びファイルキャッシュを有するインテリジェントネットワークインタフェースカード(INIC)により複数のネットワークにより接続されたホストコンピュータを有するネットワークストレージシステムを示す図である。
【図2】 本発明による複数のネットワーク間でデータを転送する際のINIC及びホストコンピュータの機能を示す図である。
【図3】 図1のシステムによりネットワークからメッセージパケットを受信する際に必要なステップの順序を示すフロー図である。
【図4】 図1のシステムによりネットワークからのリクエストに応答してメッセージパケットをネットワークに送る際に必要なステップの順序を示すフロー図である。
【図5】 ホストコンピュータにより管理される複数のINICにより複数のネットワーク及び複数の記憶装置に接続されたホストコンピュータを有するネットワークストレージシステムを示す図である。
【図6】 I/Oコントローラ無しでインテリジェントネットワークインタフェースカード(INIC)により複数のLAN及び複数のSANに接続されたホストコンピュータを有するネットワークストレージシステムを示す図である。
【図7】 ネットワークラインと記憶装置間に接続されたイーサネットSCSIアダプタを有する、図6のSANの1つを示す図である。
【図8】 図6のイーサネット−SCSIアダプタの1つを示す図である。
【図9】 ホストコンピュータにより管理される複数のINICにより複数のLAN及び複数のSANに接続されたホストコンピュータを有するネットワークストレージシステムを示す図である。
【図10】 パケットコントロールシーケンサ及びフライバイシーケンサを有する、図1に示すINICの実施例のためのハードウェア論理を示す図である。
【図11】 INICにより受け取られるヘッダバイトを分析するための図10のフライバイシーケンサを示す図である。
【図12】 低速パスでパケットを処理することに加え、高速パスのために通信制御ブロックを作成しかつ制御するための図1の専用ホストプロトコルスタックを示す図である。
【図13】 NetBios通信用に構成されたマイクロソフトのTCP/IPスタック及びAlacrytechのコマンドドライバを示す図である。
【図14】 ネットワーク記憶装置を有するサーバとクライアント間でのNetBios通信エクスチェンジを示す図である。
【図15】 図14のサーバとクライアント間で音声または映像データを転送することができるユーザデータグラムプロトコル(UDP)エクスチェンジを示す図である。
【図16】 図1のINICに含まれるハードウェア機能を示す図である。
【図17】 それぞれにプロセッサを有する3つのフェーズを含む、図16のINICに含まれる3つ組のパイプライン化マイクロプロセッサを示す図である。
【図18A】 図17のパイプライン化マイクロプロセッサの第1フェーズを示す図である。
【図18B】 図17のパイプライン化マイクロプロセッサの第2フェーズを示す図である。
【図18C】 図17のパイプライン化マイクロプロセッサの第3フェーズを示す図である。
【図19】 図17のマイクロプロセッサと対話しかつSRAM及びDRAMを有する複数のキュー記憶装置を示す図である。
【図20】 図19のキュー記憶装置のためのステータスレジスタセットを示す図である。
【図21】 図19及び図20のキュー記憶装置及びステータスレジスタと対話するキューマネージャを示す図である。
【図22】 A図〜D図は、キャッシュメモリを割り当てるために用いられる最小使用頻度レジスタの様々な段階をそれぞれ示す図である。
【図23】 図22A〜Dの最小使用頻度レジスタを動作するために用いられるデバイスを示す図である。
【図24】 図16のINICの別の実施例を示す図である。
【図25】 図24の受信シーケンサ2105を詳細に示す図である。
【図26】 ネットワークから受け取ったデータのためのキャッシュファイルにデスティネーションを獲得するためのメカニズムを示す図である。
Claims (35)
- ネットワークと記憶装置間で情報を転送するための装置であって、
ファイルシステムを動作させるCPUと、ホストメモリバスにより前記CPUに接続されたホストメモリとを有するホストコンピュータと、
前記ホストコンピュータと前記ネットワークと前記記憶装置とに接続され、前記ネットワークと記憶装置間で通信されるデータを格納するのに適したインタフェースファイルキャッシュを含むインタフェースメモリを有するインタフェース装置とを備え、
前記インタフェースファイルキャッシュが前記ファイルシステムにより制御され、
前記ホストコンピュータが、通信制御ブロックを作成しかつ前記通信制御ブロックを前記インタフェース装置へ送るように構成され、
前記インタフェース装置が、前記通信制御ブロックに従って前記ネットワークと前記ファイルキャッシュ間で前記データを通信するように構成されていることを特徴とする装置。 - 前記ホストコンピュータが、通信制御ブロックを作成しかつ前記通信制御ブロックを前記インタフェース装置へ送るように構成され、かつ
前記インタフェース装置が、前記通信制御ブロックに従って前記記憶装置を前記ファイルキャッシュ間で前記データを通信するように構成されていることを特徴とする請求項1に記載の装置。 - 前記データが前記ホストコンピュータに入力しないことを特徴とする請求項1に記載の装置。
- 前記データが、前記ネットワークと前記インタフェース装置間をファイル形式で通信され、かつ
前記データが前記インタフェース装置と前記記憶装置間をブロック形式で通信されることを特徴とする請求項1に記載の装置。 - 前記データがトランスポートレイヤヘッダを含むヘッダに添付され、かつ前記インタフェース装置が前記トランスポートレイヤヘッダを処理するように構成されたメカニズムを有することを特徴とする請求項1に記載の装置。
- 前記インタフェース装置が、前記ホストを有する第1パスを介して、または前記ホストを有しない第2パスを介して前記ネットワークと前記記憶装置間で前記データを転送するかどうかを選択するように構成されたメカニズムを有することを特徴とする請求項1に記載の装置。
- 前記インタフェース装置が、前記記憶装置に接続されたSCSIコントローラを有することを特徴とする請求項1に記載の装置。
- 前記インタフェース装置が、前記記憶装置に接続されたファイバチャネルコントローラを有することを特徴とする請求項1に記載の装置。
- 前記インタフェース装置が、前記記憶装置に接続されたRAIDコントローラを有することを特徴とする請求項1に記載の装置。
- 前記インタフェース装置が、前記ネットワーク及び前記記憶装置の少なくとも一方に接続されたネットワークポートを有することを特徴とする請求項1に記載の装置。
- 前記ホストコンピュータ、前記ネットワーク及び第2記憶装置に接続された第2インタフェース装置を更に備え、
前記第2インタフェース装置が、前記ネットワークと前記第2記憶装置間で通信されるデータを格納するのに適した第2インタフェースファイルキャッシュを含む第2インタフェースメモリを有し、
前記第2インタフェースファイルキャッシュが前記ファイルシステムにより制御されることを特徴とする請求項1に記載の装置。 - ネットワークと記憶装置間で情報を転送するための装置であって、
ホストメモリバスによりホストメモリに接続されたプロセッサを有し、前記ホストメモリが、ネットワーク接続を定義する通信制御ブロックを作成するように前記プロセッサにより動作可能なプロトコルスタックを有するホストコンピュータと、
前記ホストコンピュータに接続されかつ前記ネットワークと前記記憶装置間に結合されたインタフェース装置とを備え、前記インタフェース装置が、前記通信制御ブロックを格納するのに適したインタフェースメモリと、データを前記通信制御ブロックと関連付け、それにより前記データが前記ホストコンピュータに出会うことなく前記ネットワークと前記記憶装置間で通信されるように構成されたメカニズムとを有することを特徴とする装置。 - 前記ホストコンピュータがファイルシステムを有し、かつ前記インタフェースメモリが前記データを格納するのに適したファイルキャッシュを有し、前記ファイルシステムが前記データの前記ファイルキャッシュへの格納を管理することを特徴とする請求項12に記載の装置。
- 前記データが、トランスポートレイヤヘッダを含む少なくとも1つのパケットで前記ネットワーク上を移動し、かつ前記インタフェース装置が前記ヘッダを処理するための回路を有することを特徴とする請求項12に記載の装置。
- 前記トランスポートレイヤヘッダがTCPヘッダであることを特徴とする請求項14に記載の装置。
- 前記トランスポートレイヤヘッダがUDPヘッダであることを特徴とする請求項14に記載の装置。
- 前記インタフェース装置が入力/出力バスにより前記ホストコンピュータに接続され、かつ前記通信コントロールブロックが前記入力/出力バス上で前記インタフェース装置と前記ホストコンピュータ間を移動することを特徴とする請求項12に記載の装置。
- 前記インタフェース装置が更に、前記記憶装置に接続されたSCSIコントローラを有することを特徴とする請求項12に記載の装置。
- 前記インタフェース装置が更に、前記記憶装置に接続されたファイバチャネルコントローラを有することを特徴とする請求項12に記載の装置。
- 前記インタフェース装置が更に、前記記憶装置に接続されたRAIDコントローラを有することを特徴とする請求項12に記載の装置。
- 前記インタフェース装置が前記記憶装置と、少なくとも1つのネットワークポートにより前記ネットワークに接続されていることを特徴とする請求項12に記載の装置。
- 前記通信制御ブロックに対応する先のまたは後のデータが前記ホストコンピュータを通過することを特徴とする請求項12に記載の装置。
- 前記ホストコンピュータが、前記インタフェース装置によってアクセス可能なUDPソケットを指定するように構成され、かつ前記インタフェース装置が、前記UDPソケットに従って前記ネットワークと前記ファイルキャッシュ間で前記データを通信するように構成されていることを特徴とする請求項12に記載の装置。
- ネットワークと記憶装置間で情報を転送するための装置であって、
ファイルシステムを動作させるCPUと、ホストバスにより前記CPUに接続されたホストメモリとを有し、前記ファイルシステムにより情報がファイルの階層構造として論理的に編成されるホストコンピュータと、
前記ホストコンピュータ、前記ネットワーク及び前記記憶装置に接続され、前記ファイルシステムの制御下で前記ネットワークと前記記憶装置間で通信されるデータを格納するのに適したインタフェースファイルキャッシュを含むインタフェースメモリを有し、前記ファイルシステムによって前記ファイルキャッシュ内の情報が前記ファイルの階層構造の一部として論理的に編成されるようにしたインタフェース装置とを備え、
前記ホストコンピュータが、前記インタフェース装置によりアクセス可能なUDPソケットを指定するように構成され、かつ、
前記インタフェース装置が、前記UDPソケットに従って前記ネットワークと前記ファイルキャッシュ間で前記データを通信するように構成されていることを特徴とする装置。 - 前記ホストコンピュータが、前記インタフェース装置によりアクセス可能なアプリケーションレイヤヘッダを作成するように構成され、かつ前記インタフェース装置が前記アプリケーションレイヤヘッダを前記データにプリペンドするように構成されていることを特徴とする請求項24に記載の装置。
- 前記ホストコンピュータが、前記インタフェース装置によりアクセス可能なリアルタイムトランスポートプロトコルヘッダを作成するように構成され、かつ前記インタフェース装置が前記リアルタイムトランスポートプロトコルヘッダを前記データにプリペンドするように構成されていることを特徴とする請求項24に記載の装置。
- 前記データが関連するUDPヘッダと共に格納され、かつ前記インタフェース装置が前記UDPヘッダを処理するように構成されたメカニズムを有することを特徴とする請求項24に記載の装置。
- 前記データが前記インタフェース装置によりUDPヘッダでプリペンドされてUDPデータグラムを作成し、かつ前記インタフェース装置が前記データグラムを複数のフラグメントに分割するように構成されたメカニズムを有することを特徴とする請求項24に記載の装置。
- 前記データが複数のフラグメントに配置され、かつ前記インタフェース装置が、UDPヘッダに対応する前記フラグメントを連結するように構成されたメカニズムを有することを特徴とする請求項24に記載の装置。
- 前記データが前記ホストコンピュータに入力しないことを特徴とする請求項24に記載の装置。
- 前記データが音声データを含むことを特徴とする請求項24に記載の装置。
- 前記データが映像データを含むことを特徴とする請求項24に記載の装置。
- 前記データがリアルタイム通信の一部であることを特徴とする請求項24に記載の装置。
- ネットワークと記憶装置間で情報を転送するための装置であって、
ファイルシステムを動作させるCPUと、メモリバスにより前記CPUに接続されたメモリとを有するコンピュータと、
前記コンピュータ、前記ネットワーク及び前記記憶装置に接続され、前記ネットワークと記憶装置間で通信されるデータを格納するインタフェースファイルキャッシュを含むインタフェースメモリを有するインタフェース装置とを備え、
前記インタフェースファイルキャッシュが前記ファイルシステムにより制御され、
前記データが前記インタフェース装置と前記記憶装置間での前記データの転送の際にiSCSIヘッダに添付され、
前記コンピュータが、通信制御ブロックを作成し、かつ前記通信制御ブロックを前記インタフェース装置へ送るように構成され、
前記インタフェース装置が、前記通信制御ブロックに従って前記ネットワークと前記ファイルキャッシュ間で前記データを通信するように構成されていることを特徴とする装置。 - 前記インタフェース装置がギガビットイーサネットネットワークにより前記記憶装置に接続されていることを特徴とする請求項34に記載の装置。
Applications Claiming Priority (7)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
US09/675,700 | 2000-09-29 | ||
US09/675,484 US6807581B1 (en) | 2000-09-29 | 2000-09-29 | Intelligent network storage interface system |
US09/675,700 US8621101B1 (en) | 2000-09-29 | 2000-09-29 | Intelligent network storage interface device |
US09/675,484 | 2000-09-29 | ||
US09/802,551 US7076568B2 (en) | 1997-10-14 | 2001-03-09 | Data communication apparatus for computer intelligent network interface card which transfers data between a network and a storage device according designated uniform datagram protocol socket |
US09/802,551 | 2001-03-09 | ||
PCT/US2001/030150 WO2002027519A1 (en) | 2000-09-29 | 2001-09-24 | Intelligent network storage interface system and devices |
Publications (2)
Publication Number | Publication Date |
---|---|
JP2004510252A JP2004510252A (ja) | 2004-04-02 |
JP5066702B2 true JP5066702B2 (ja) | 2012-11-07 |
Family
ID=27418299
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
JP2002531029A Expired - Fee Related JP5066702B2 (ja) | 2000-09-29 | 2001-09-24 | インテリジェントネットワークストレージインタフェースシステム及びデバイス |
Country Status (6)
Country | Link |
---|---|
EP (1) | EP1330725B1 (ja) |
JP (1) | JP5066702B2 (ja) |
CN (1) | CN1276372C (ja) |
AT (1) | ATE550852T1 (ja) |
AU (1) | AU2001296331A1 (ja) |
WO (1) | WO2002027519A1 (ja) |
Families Citing this family (70)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US7039717B2 (en) | 2000-11-10 | 2006-05-02 | Nvidia Corporation | Internet modem streaming socket method |
US7007103B2 (en) | 2002-04-30 | 2006-02-28 | Microsoft Corporation | Method to offload a network stack |
US7181531B2 (en) * | 2002-04-30 | 2007-02-20 | Microsoft Corporation | Method to synchronize and upload an offloaded network stack connection with a network stack |
JP2004192493A (ja) | 2002-12-13 | 2004-07-08 | Hitachi Ltd | 記憶デバイス制御装置、情報処理装置、およびプログラム |
US7376082B2 (en) * | 2002-12-31 | 2008-05-20 | International Business Machines Corporation | Quality of service for iSCSI |
CN100336050C (zh) * | 2003-04-04 | 2007-09-05 | 清华大学 | 海量网络存储器设备及其实现方法 |
CN100338910C (zh) * | 2003-07-15 | 2007-09-19 | 中兴通讯股份有限公司 | 网络信息交换中多端口收发包数统计方法 |
JP4391178B2 (ja) | 2003-09-17 | 2009-12-24 | 富士通株式会社 | ストレージ制御装置およびストレージ制御プログラム |
US7103683B2 (en) | 2003-10-27 | 2006-09-05 | Intel Corporation | Method, apparatus, system, and article of manufacture for processing control data by an offload adapter |
US6996070B2 (en) | 2003-12-05 | 2006-02-07 | Alacritech, Inc. | TCP/IP offload device with reduced sequential processing |
US8065439B1 (en) | 2003-12-19 | 2011-11-22 | Nvidia Corporation | System and method for using metadata in the context of a transport offload engine |
US8176545B1 (en) | 2003-12-19 | 2012-05-08 | Nvidia Corporation | Integrated policy checking system and method |
US7349999B2 (en) * | 2003-12-29 | 2008-03-25 | Intel Corporation | Method, system, and program for managing data read operations on network controller with offloading functions |
US7783880B2 (en) | 2004-11-12 | 2010-08-24 | Microsoft Corporation | Method and apparatus for secure internet protocol (IPSEC) offloading with integrated host protocol stack management |
US8015373B2 (en) * | 2005-05-13 | 2011-09-06 | Hewlett-Packard Development Company, L.P. | Information sharing between a backup storage device and a management appliance |
US7675854B2 (en) | 2006-02-21 | 2010-03-09 | A10 Networks, Inc. | System and method for an adaptive TCP SYN cookie with time validation |
CN100396059C (zh) * | 2006-03-03 | 2008-06-18 | 清华大学 | 分裂式网络处理器控制信息高速缓冲存储器 |
EP1858227A1 (en) * | 2006-05-16 | 2007-11-21 | THOMSON Licensing | Network storage device with separated control and storage data interfaces |
US7876768B2 (en) | 2006-06-30 | 2011-01-25 | Ver Steeg William C | Systems and methods of assembling an elementary stream from an encapsulated multimedia transport stream |
US7895635B2 (en) | 2006-06-30 | 2011-02-22 | Versteeg William C | Systems and methods of assembling an elementary stream from an encapsulated multimedia transport stream |
KR100823734B1 (ko) * | 2006-07-07 | 2008-04-21 | 한국전자통신연구원 | iSCSI를 위한 데이터 가속 장치 및 이를 이용한iSCSI 저장 시스템 |
JP2009009250A (ja) * | 2007-06-27 | 2009-01-15 | Nec Network & Sensor Systems Ltd | 通信システム、通信機器及びそれらに用いるデータ転送方法 |
CN100451976C (zh) * | 2007-07-23 | 2009-01-14 | 清华大学 | 基于海量数据分级存储系统的迁移管理方法 |
JP5049834B2 (ja) * | 2008-03-26 | 2012-10-17 | 株式会社東芝 | データ受信装置、データ受信方法およびデータ処理プログラム |
US9960967B2 (en) | 2009-10-21 | 2018-05-01 | A10 Networks, Inc. | Determining an application delivery server based on geo-location information |
WO2012011253A1 (ja) * | 2010-07-23 | 2012-01-26 | 日本電気株式会社 | デバイス間データ転送装置、方法およびプログラム |
US9215275B2 (en) | 2010-09-30 | 2015-12-15 | A10 Networks, Inc. | System and method to balance servers based on server load status |
CN102447727A (zh) * | 2010-10-13 | 2012-05-09 | 智微科技股份有限公司 | 网络附接储存装置与设定网络附接储存装置的方法 |
US9021146B2 (en) * | 2011-08-30 | 2015-04-28 | Apple Inc. | High priority command queue for peripheral component |
US8897154B2 (en) | 2011-10-24 | 2014-11-25 | A10 Networks, Inc. | Combining stateless and stateful server load balancing |
US9386088B2 (en) * | 2011-11-29 | 2016-07-05 | A10 Networks, Inc. | Accelerating service processing using fast path TCP |
US9094364B2 (en) | 2011-12-23 | 2015-07-28 | A10 Networks, Inc. | Methods to manage services over a service gateway |
US10044582B2 (en) | 2012-01-28 | 2018-08-07 | A10 Networks, Inc. | Generating secure name records |
US8782221B2 (en) | 2012-07-05 | 2014-07-15 | A10 Networks, Inc. | Method to allocate buffer for TCP proxy session based on dynamic network conditions |
JP5910745B2 (ja) * | 2012-07-05 | 2016-04-27 | 富士通株式会社 | データバックアップ方法、及びインタフェースカード |
US9843484B2 (en) | 2012-09-25 | 2017-12-12 | A10 Networks, Inc. | Graceful scaling in software driven networks |
US10021174B2 (en) | 2012-09-25 | 2018-07-10 | A10 Networks, Inc. | Distributing service sessions |
EP2901308B1 (en) | 2012-09-25 | 2021-11-03 | A10 Networks, Inc. | Load distribution in data networks |
US9531846B2 (en) | 2013-01-23 | 2016-12-27 | A10 Networks, Inc. | Reducing buffer usage for TCP proxy session based on delayed acknowledgement |
US9992107B2 (en) | 2013-03-15 | 2018-06-05 | A10 Networks, Inc. | Processing data packets using a policy based network path |
US10027761B2 (en) | 2013-05-03 | 2018-07-17 | A10 Networks, Inc. | Facilitating a secure 3 party network session by a network device |
US10038693B2 (en) | 2013-05-03 | 2018-07-31 | A10 Networks, Inc. | Facilitating secure network traffic by an application delivery controller |
KR101502146B1 (ko) * | 2013-09-24 | 2015-03-13 | 주식회사 케이티 | 엑세스 네트워크에서의 홈 네트워크 신호 중계 장치 및 이를 이용한 엑세스 네트워크에서의 홈 네트워크 신호 중계 방법 |
US10230770B2 (en) | 2013-12-02 | 2019-03-12 | A10 Networks, Inc. | Network proxy layer for policy-based application proxies |
CN105981338B (zh) * | 2013-12-08 | 2019-10-08 | 跨端口网路解决公司 | 用于使用i/o设备链路在主机之间建立高速网络通信和文件传输的链路系统 |
US10020979B1 (en) | 2014-03-25 | 2018-07-10 | A10 Networks, Inc. | Allocating resources in multi-core computing environments |
US9942152B2 (en) | 2014-03-25 | 2018-04-10 | A10 Networks, Inc. | Forwarding data packets using a service-based forwarding policy |
US9942162B2 (en) | 2014-03-31 | 2018-04-10 | A10 Networks, Inc. | Active application response delay time |
US9806943B2 (en) | 2014-04-24 | 2017-10-31 | A10 Networks, Inc. | Enabling planned upgrade/downgrade of network devices without impacting network sessions |
US9906422B2 (en) | 2014-05-16 | 2018-02-27 | A10 Networks, Inc. | Distributed system to determine a server's health |
US9733847B2 (en) * | 2014-06-02 | 2017-08-15 | Micron Technology, Inc. | Systems and methods for transmitting packets in a scalable memory system protocol |
US9992229B2 (en) | 2014-06-03 | 2018-06-05 | A10 Networks, Inc. | Programming a data network device using user defined scripts with licenses |
US9986061B2 (en) | 2014-06-03 | 2018-05-29 | A10 Networks, Inc. | Programming a data network device using user defined scripts |
US10129122B2 (en) | 2014-06-03 | 2018-11-13 | A10 Networks, Inc. | User defined objects for network devices |
CN104063344B (zh) | 2014-06-20 | 2018-06-26 | 华为技术有限公司 | 一种存储数据的方法及网络接口卡 |
US9661007B2 (en) * | 2015-03-18 | 2017-05-23 | Intel Corporation | Network interface devices with remote storage control |
US10581976B2 (en) | 2015-08-12 | 2020-03-03 | A10 Networks, Inc. | Transmission control of protocol state exchange for dynamic stateful service insertion |
US10243791B2 (en) | 2015-08-13 | 2019-03-26 | A10 Networks, Inc. | Automated adjustment of subscriber policies |
US10620957B2 (en) * | 2015-10-22 | 2020-04-14 | Texas Instruments Incorporated | Method for forming constant extensions in the same execute packet in a VLIW processor |
CN108028833B (zh) | 2015-12-30 | 2020-05-08 | 华为技术有限公司 | 一种nas数据访问的方法、系统及相关设备 |
US10318288B2 (en) | 2016-01-13 | 2019-06-11 | A10 Networks, Inc. | System and method to process a chain of network applications |
KR102507219B1 (ko) * | 2016-02-02 | 2023-03-09 | 에스케이하이닉스 주식회사 | 시스템 및 시스템의 동작 방법 |
US10397095B2 (en) * | 2017-01-03 | 2019-08-27 | Cisco Technology, Inc. | Detecting and mitigating loops |
US10389835B2 (en) | 2017-01-10 | 2019-08-20 | A10 Networks, Inc. | Application aware systems and methods to process user loadable network applications |
EP3388904B1 (en) * | 2017-04-13 | 2023-03-15 | duagon AG | Multicore architecture, interface card and method of processing data packets |
US11394776B2 (en) * | 2018-06-07 | 2022-07-19 | Tuxera, Inc. | Systems and methods for transport layer processing of server message block protocol messages |
CN110888675B (zh) * | 2018-09-11 | 2021-04-06 | 深圳云天励飞技术有限公司 | 硬件系统和电子设备 |
CN113438097B (zh) * | 2021-05-21 | 2022-08-23 | 翱捷科技股份有限公司 | 一种网络加速的实现方法及装置 |
CN113722120B (zh) * | 2021-07-30 | 2024-04-05 | 龙芯中科(太原)技术有限公司 | 集成电路及其实现程序开发的方法 |
US11522931B1 (en) * | 2021-07-30 | 2022-12-06 | Avago Technologies International Sales Pte. Limited | Systems and methods for controlling high speed video |
Family Cites Families (9)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US6085234A (en) * | 1994-11-28 | 2000-07-04 | Inca Technology, Inc. | Remote file services network-infrastructure cache |
JPH09128314A (ja) * | 1995-11-06 | 1997-05-16 | Matsushita Electric Ind Co Ltd | 通信制御装置 |
US6067569A (en) | 1997-07-10 | 2000-05-23 | Microsoft Corporation | Fast-forwarding and filtering of network packets in a computer system |
JPH1145203A (ja) * | 1997-07-28 | 1999-02-16 | Matsushita Electric Ind Co Ltd | ファイル管理装置 |
US6389479B1 (en) * | 1997-10-14 | 2002-05-14 | Alacritech, Inc. | Intelligent network interface device and system for accelerated communication |
JP3407628B2 (ja) * | 1997-12-19 | 2003-05-19 | 株式会社日立製作所 | 計算機システム |
US6101547A (en) * | 1998-07-14 | 2000-08-08 | Panasonic Technologies, Inc. | Inexpensive, scalable and open-architecture media server |
US6301612B1 (en) * | 1998-08-12 | 2001-10-09 | Microsoft Corporation | Establishing one computer as a replacement for another computer |
SG77650A1 (en) * | 1998-09-07 | 2001-01-16 | Victor Company Of Japan | A scalable delivery scheme of compressed video |
-
2001
- 2001-09-24 JP JP2002531029A patent/JP5066702B2/ja not_active Expired - Fee Related
- 2001-09-24 AU AU2001296331A patent/AU2001296331A1/en not_active Abandoned
- 2001-09-24 EP EP01977193A patent/EP1330725B1/en not_active Expired - Lifetime
- 2001-09-24 CN CN01818509.6A patent/CN1276372C/zh not_active Expired - Fee Related
- 2001-09-24 AT AT01977193T patent/ATE550852T1/de active
- 2001-09-24 WO PCT/US2001/030150 patent/WO2002027519A1/en active Application Filing
Also Published As
Publication number | Publication date |
---|---|
CN1276372C (zh) | 2006-09-20 |
AU2001296331A1 (en) | 2002-04-08 |
WO2002027519A9 (en) | 2003-03-27 |
JP2004510252A (ja) | 2004-04-02 |
EP1330725A4 (en) | 2009-09-16 |
CN1473300A (zh) | 2004-02-04 |
EP1330725B1 (en) | 2012-03-21 |
WO2002027519A1 (en) | 2002-04-04 |
ATE550852T1 (de) | 2012-04-15 |
EP1330725A1 (en) | 2003-07-30 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
JP5066702B2 (ja) | インテリジェントネットワークストレージインタフェースシステム及びデバイス | |
US8019901B2 (en) | Intelligent network storage interface system | |
US7664883B2 (en) | Network interface device that fast-path processes solicited session layer read commands | |
US7124205B2 (en) | Network interface device that fast-path processes solicited session layer read commands | |
US7076568B2 (en) | Data communication apparatus for computer intelligent network interface card which transfers data between a network and a storage device according designated uniform datagram protocol socket | |
US6591302B2 (en) | Fast-path apparatus for receiving data corresponding to a TCP connection | |
US6807581B1 (en) | Intelligent network storage interface system | |
US7089326B2 (en) | Fast-path processing for receiving data on TCP connection offload devices | |
KR100437146B1 (ko) | 지능망 인터페이스 장치 및 통신 가속 시스템 | |
US6427173B1 (en) | Intelligent network interfaced device and system for accelerated communication | |
US7502869B2 (en) | Intelligent network interface system and method for accelerated protocol processing | |
US7284070B2 (en) | TCP offload network interface device | |
US20040064589A1 (en) | Fast-path apparatus for receiving data corresponding to a TCP connection | |
US20040073703A1 (en) | Fast-path apparatus for receiving data corresponding a TCP connection | |
US8621101B1 (en) | Intelligent network storage interface device |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
A621 | Written request for application examination |
Free format text: JAPANESE INTERMEDIATE CODE: A621 Effective date: 20080924 |
|
A521 | Request for written amendment filed |
Free format text: JAPANESE INTERMEDIATE CODE: A523 Effective date: 20081120 |
|
A977 | Report on retrieval |
Free format text: JAPANESE INTERMEDIATE CODE: A971007 Effective date: 20110214 |
|
A131 | Notification of reasons for refusal |
Free format text: JAPANESE INTERMEDIATE CODE: A131 Effective date: 20110301 |
|
A601 | Written request for extension of time |
Free format text: JAPANESE INTERMEDIATE CODE: A601 Effective date: 20110601 |
|
A601 | Written request for extension of time |
Free format text: JAPANESE INTERMEDIATE CODE: A601 Effective date: 20110630 |
|
A601 | Written request for extension of time |
Free format text: JAPANESE INTERMEDIATE CODE: A601 Effective date: 20110801 |
|
A521 | Request for written amendment filed |
Free format text: JAPANESE INTERMEDIATE CODE: A523 Effective date: 20110810 |
|
A602 | Written permission of extension of time |
Free format text: JAPANESE INTERMEDIATE CODE: A602 Effective date: 20110624 |
|
A521 | Request for written amendment filed |
Free format text: JAPANESE INTERMEDIATE CODE: A523 Effective date: 20110901 |
|
A521 | Request for written amendment filed |
Free format text: JAPANESE INTERMEDIATE CODE: A523 Effective date: 20110929 |
|
A602 | Written permission of extension of time |
Free format text: JAPANESE INTERMEDIATE CODE: A602 Effective date: 20110824 |
|
A01 | Written decision to grant a patent or to grant a registration (utility model) |
Free format text: JAPANESE INTERMEDIATE CODE: A01 Effective date: 20120412 |
|
A61 | First payment of annual fees (during grant procedure) |
Free format text: JAPANESE INTERMEDIATE CODE: A61 Effective date: 20120512 |
|
A61 | First payment of annual fees (during grant procedure) |
Free format text: JAPANESE INTERMEDIATE CODE: A61 Effective date: 20120719 |
|
FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20150824 Year of fee payment: 3 |
|
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: 20150824 Year of fee payment: 3 |
|
R250 | Receipt of annual fees |
Free format text: JAPANESE INTERMEDIATE CODE: R250 |
|
R250 | Receipt of annual fees |
Free format text: JAPANESE INTERMEDIATE CODE: R250 |
|
R250 | Receipt of annual fees |
Free format text: JAPANESE INTERMEDIATE CODE: R250 |
|
LAPS | Cancellation because of no payment of annual fees |