(57)【要約】【課題】ネットワークインタフェースコントローラ（ＮＩＣ） のハードウェアに対する付加機能を最小限にとどめ、ソフトウェア処理による柔軟なネットワーク対応を可能にしたＮＩＣとホストコンピュータ間のデータ転送方式を実現する。【解決手段】ホストコンピュータが送信データに共通なヘッダ情報からなる共通ヘッダと、パケットごとに独自のヘッダ情報からなる可変ヘッダと該パケットのペイロードの格納アドレスを示すポインタからなるヘッダテーブルを作成し、ＮＩＣはヘッダテーブルに基づいてパケットのヘッダを作成し、ペイロードを取り出してパケットを作成する。【選択図】図２
2008236378.tif 000002
【特許請求の範囲】
【請求項１】
ホストコンピュータとネットワークの間に設けられ、ホストコンピュータの送信データを分割して作成したパケットをネットワークに送信するネットワークインタフェースコントローラとホストコンピュータの間のデータ転送方法において、
前記ホストコンピュータは、
前記送信データごとに、該送信データに共通なヘッダ情報からなる共通ヘッダと、パケットごとに独自のヘッダ情報からなる可変ヘッダと該パケットのペイロードとなるデータの格納アドレスを示すポインタとを設定したヘッダテーブルを作成し、
前記ネットワークインタフェースコントローラに転送指示を行い、
前記ネットワークインタフェースコントローラに前記ヘッダテーブルを渡し、
前記ネットワークインタフェースコントローラは、
該渡されたヘッダテーブルに設定されたポインタによりパケットのペイロードとなるデータをホストコンピュータから読み出す、
ことを特徴とするデータ転送方法。  
【請求項２】
前記可変ヘッダは、前記共通ヘッダに書き込むデータと、該データを共通ヘッダに書き込む位置を示す位置情報を含むことを特徴とする請求項１に記載のデータ転送方法。
【請求項３】
ホストコンピュータとネットワークの間に設けられ、ホストコンピュータの送信データを分割して作成したパケットをネットワークに送信するネットワークインタフェースコントローラにデータを転送するホストコンピュータを、
前記送信データごとに、該送信データに共通なヘッダ情報からなる共通ヘッダと、パケットごとに独自のヘッダ情報からなる可変ヘッダと該パケットのペイロードとなるデータの格納アドレスを示すポインタとを設定したヘッダテーブルを作成する手段と、
前記ネットワークインタフェースコントローラに転送指示を行う手段と、
前記ネットワークインタフェースコントローラに前記ヘッダテーブルを渡す手段と、
して機能させることを特徴とするプログラム。
【請求項４】
ホストコンピュータとネットワークの間に設けられ、ホストコンピュータの送信データを分割して作成したパケットをネットワークに送信するネットワークインタフェースコントローラにおいて、
制御部とヘッダ合成部とバッファ部を備え、
前記制御部は、前記ホストコンピュータから取得した、前記送信データに共通なヘッダ情報からなる共通ヘッダと、パケットごとに独自のヘッダ情報からなる可変ヘッダと該パケットのペイロードとなるデータの格納アドレスを示すポインタとを設定したヘッダテーブルを前記バッファ部に格納して、前記ヘッダ合成部にヘッダの合成を指示するとともに、前記ヘッダテーブルに設定された前記ポインタによりパケットのペイロードとなるデータを読み出して前記バッファのパケットのペイロードデータ格納エリアに格納し、
前記ヘッダ合成部は、前記バッファ部から前記共通ヘッダと前記可変ヘッダを読み出し、前記共通ヘッダと前記可変ヘッダを合成してパケットのヘッダを作成して前記バッファのパケットのヘッダ格納エリアに格納する、
ことを特徴とするネットワークインタフェースコントローラ。  
【請求項５】
ホストコンピュータとネットワークの間に設けられ、ホストコンピュータの送信データを分割して作成したパケットをネットワークに送信するネットネットワークインタフェースコントローラに、
前記ホストから前記送信データに共通なヘッダ情報からなる共通ヘッダと、パケットごとに独自のヘッダ情報からなる可変ヘッダと該パケットのペイロードとなるデータの格納アドレスを示すポインタとを設定したヘッダテーブルを取得する機能と、
該ヘッダテーブル中のパケットのペイロードとなるデータの格納アドレスを示すポインタにより該パケットのペイロードとなるデータを読み出す機能と、
前記共通ヘッダと前記各可変ヘッダを合成して各パケットのヘッダを作成する機能と、
を実現させることを特徴とするプログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、ホストコンピュータとネットワークの間に設けられ、ホストコンピュータの送信データを分割したパケットをネットワークに送信するネットワークインタフェースコントローラとホストコンピュータの間のデータ転送方式に関するものである。
【背景技術】
【０００２】
現在のコンピュータシステムにおいて、外部とのデータのやりとりを高速に行なうことは、システム全体の高速化につながる重要な課題である。特に、ＰＣなどの小さなコンピュータシステムをネットワークで接続し、全体として大きなひとつのコンピュータシステムとして使用するクラスタシステムなどでは、ネットワークを介した情報伝送がシステム全体の計算速度を決める重要な要素となっている。このため、コンピュータシステムのデータ通信性能は年々向上しており、その向上率は平均すると約３年で２倍という非常に高い値となっている。これはコンピュータの演算装置の速度向上を上回る勢いである。このようにデータ通信性能が向上してくると、高速な演算装置と高速なネットワークとを接続するための接続装置の構成が重要な課題となってくる。
【０００３】
一般にコンピュータシステムをネットワークに接続する際には、間にネットワークインタフェースコントローラ（以下、ＮＩＣと表記する場合がある。）と呼ばれる接続装置を介在させる。これによりコンピュータシステム( 以下、ホストコンピュータあるいはホストと呼ぶ場合がある。)は、ＮＩＣを変更するだけでさまざまな種類のネットワークに対応することができ、構成の柔軟性を確保することができる。
【０００４】
図７は、ネットワークインタフェースコントローラを用いてホストコンピュータからネットワークにパケットを送信するシステムの構成を示す図である。
ホストコンピュータ１とＮＩＣ５の間は、Ｉ／Ｏバス４と呼ばれる、ホストコンピュータ１によって用意された外部入出力装置と接続するためのインタフェースを経由して接続される。Ｉ／Ｏバス４にはPCIやPCI-X、PCI Express などの標準規格が広く用いられている。ホストコンピュータ１はこのＩ／Ｏバス４を経由してＮＩＣ５にデータや指示を送り、ネットワーク６を経由したデータのやりとりを行なう。
【０００５】
ネットワーク６上でのデータはパケットという形で転送される。パケットは一般にヘッダとペイロードとで構成される。ヘッダには通信のための各種情報、たとえば送信元や送信先、プロトコルの種類、データの長さなどが記載されている。ペイロードは送信するデータそのものであり、受信相手はヘッダ情報を元にペイロードをどのように扱えばよいかを判断し、処理を行なう。
【０００６】
したがって、ホストコンピュータ１からデータを外に転送しようとすると、ホストコンピュータ１のＣＰＵ２は、メモリ３上の制御情報３１に基づいてヘッダを作成し、データ３２に付加してパケットを構成し、ＮＩＣ５を経由してネットワーク６に送り出す必要がある。
【０００７】
ところで、ネットワーク６の種類によっては、パケットの最大サイズが決められている。
例えばイーサネット（登録商標）では１５００バイト程度の大きさが上限であり、それ以上の長さのパケットを送受信することはできない。そのため、ホストコンピュータ１から１５００ バイト以上の大きなデータ３２を送信しようとすると、データ３２を１５０
０バイトより小さなサイズに分割し、それぞれにヘッダをつけ、別々のパケット#1,パケット#2,・・・,パケット#n としてネットワークに送り出さなくてはならない。
【０００８】
パケットの最大サイズはネットワーク６によって固定であるため、元となるデータ３２が大きければ大きいほどパケットの数が多くなる。ヘッダは各パケットごとにつけなければならないため、パケットの数が多いということはヘッダの数が多くなることを意味する。
【０００９】
図８は、ＮＩＣ５を用いてネットワーク経由でデータを転送する従来の方式を説明する図である。
まずＮＩＣ５が接続されているホスト１のＣＰＵ２上で動く制御ソフトウェアが、送信すべきデータ３２と転送のための制御情報３１（図８では記載を省略している。）を受け取る。次に制御ソフトウェアはパケットのための領域３３を確保し、そこに制御情報３１を元にヘッダを生成する。さらに、データ３２の一部をコピーし、パケットを構成する。ＮＩＣ５のコントローラ５１ に転送指示を与えることによってこのパケットがＮＩＣ５のバッファ５２に転送され、さらにパケットがＮＩＣ５からネットワーク６に送信される。この手順は、データ３２が全て転送し終えるまで繰り返えされる。
【００１０】
上記のような方式でデータをパケット化し、ネットワークに転送すると、以下のような問題が生じる。
（Ｉ／Ｏ バスの問題）
先に述べたように、ＮＩＣ５はＩ／Ｏバス４を経由してコンピュータシステム１と接続されている。コンピュータシステム１はこのＩ／Ｏバス４を経由してＮＩＣ５への指示やデータの送受信を行なっている。
【００１１】
このＩ／Ｏバス４は、現在ではPCI Express など高速なものが用いられており、ネットワーク６の速度以上のデータ転送速度を確保している。しかし、Ｉ／Ｏバス４は初期オーバーヘッドが大きいという問題がある。初期オーバーヘッドとは、データの転送を開始した時点から実際にデータが流れ始めるまでの時間である。この初期オーバーヘッドは、大量のデータを転送する場合には問題にならないが、少量のデータの場合には重要な問題となってくる。
【００１２】
Ｉ／Ｏバス４経由でデータを転送する場合には、ヘッダだけをＮＩＣ５ に送ったり、ＮＩＣ５に送信指示を送るといった小さなデータ転送が多数発生する。そのため、この小さなデータ転送回数を減らし、Ｉ／Ｏバス４の大きな初期オーバーヘッドの影響を小さくするための転送方式が必要とされている。
【００１３】
（データコピーの問題）
パケットをひとつずつ作って転送する方式では、元データからパケットへデータのコピーが必要となる。これはデータ全体に渡って行なう必要があるため、データが大きければ大きいほどコピーの回数が多くなる。
【００１４】
現在、ネットワーク６が高速化するにつれ、コンピュータシステム１の演算装置とネットワーク６の転送速度の差が縮まっている。これは、相対的に見ると、ネットワーク６に対して演算装置の処理能力が落ちているということを意味している。このような状況では、ソフトウェアによるデータコピー処理というものは非常に重い処理となってしまい、それがたとえばクラスタシステムなどの全体の性能を引き下げる要因となる。そのため、できるだけデータのコピーを伴わないデータ転送方式が必要とされている。
【００１５】
（ヘッダ作成の問題）
ネットワーク６にデータを転送する際には、必ずヘッダを作成する必要がある。このヘッダはネットワーク６の種類によって異なり、それぞれのネットワーク６に対応したヘッダを作成する必要がある。
【００１６】
ネットワーク６に送り出そうとするデータが大きければ、その大きなかたまりのデータを最大パケットサイズに収まるように分割し、それぞれに対してヘッダをつけなくてはならない。このとき、ヘッダはパケット数分作らなくてはならないが、これらのヘッダには共通する情報が多い。たとえば、送信元や送信先、プロトコルの種類などは全てのパケットで共通である。
【００１７】
このように共通する情報が多いのに、それぞれ別のパケットとして取り扱わなければならないということは、ホスト１上の制御ソフトウェアのオーバーヘッドを招くのとともに、無駄なデータがＩ／Ｏバス４を経由してホスト１からＮＩＣ５へ送られることになり、性能を低下させる要因となる。そのため、できるだけ無駄な情報の作成、やりとりは行なわない方式が望ましい。
【００１８】
上記のような問題を解決するため、これまでいくつかの新たな手法が提案されている。
（一括送信方式）
図８で説明した送信方式は、パケットをひとつ作るたびにＮＩＣ５のコントローラ５１に対して転送指示を与えていた。Ｉ／Ｏバス４を経由してＮＩＣ５へ転送指示を行なうのは非常に大きなオーバーヘッドを伴うため、この方式では無駄が多い。
【００１９】
そこで、ホスト１の制御ソフトウェアがパケットのための領域３３を必要なだけ複数個確保してそこに複数のパケットを連続的に作成し、それらの複数のパケットの転送指示をまとめて一度で済ます方式が考えられている。この方式を用いると、Ｉ／Ｏバス４経由の転送指示のオーバーヘッドを削減することができる。
しかし、残りふたつの問題であるデータコピーの問題やヘッダ作成の問題に関してはそのまま残っている。
【００２０】
（ギャザーテーブル方式）
ギャザーテーブルとは、データへのポインタを複数個まとめたテーブルのことである。ギャザーテーブルを用いると、ばらばらに配置されたデータを一つ一つ渡すことなく、まとめて渡すことができる。
【００２１】
図９は、ギャザーテーブルをホスト１とＮＩＣ５の間の転送処理に応用した方式を説明する図である。
ホスト１のＣＰＵ２上で動く制御ソフトウェアが、送信すべきデータ３２と転送のための制御情報３１（図９では記載を省略している。）を受け取る。次に制御ソフトウェアは複数のヘッダのための領域３４を確保し、そこに制御情報３１を元に複数のヘッダを生成する。またギャザーテーブルのための領域３５を確保し、そこにヘッダへのポインタと、そのヘッダに対応するデータへのポインタをまとめたギャザーテーブルを作成し、ＮＩＣ５のコントローラ５１に、領域３５のアドレス通知を含む転送指示を行う。
【００２２】
コントローラ５１はホスト１上のギャザーテーブルを読み出して格納する領域５３を確保して、ホスト１から領域５３にギャザーテーブルを読み出す。次にギャザーテーブル上のポインタによりホスト１からヘッダ、データをそれぞれ取り出し、パケットバッファ５２でパケットとしてまとめ、ネットワーク６へ送信する。
【００２３】
ギャザーテーブルを用いることによって、ホスト１がデータをコピーしてパケットを生成する必要がなくなる。そのため、データコピーの問題は解決する。
しかし、ヘッダ作成の問題に関してはそのまま残っている。また、ＮＩＣ５がＩ／Ｏ バス４経由でヘッダを取り出さなくてはならないため、Ｉ／Ｏ バス４のオーバーヘッドが増加してしまうという問題も発生する。
【００２４】
（オフロードエンジン方式）
上記問題をすべて解決するための方法として、オフロードエンジン方式が提案されている。オフロードエンジンとは、パケット処理を行なうＮＩＣ上のハードウェアのことである。
【００２５】
図１０は、オフロードエンジン方式を説明する図である。
ホスト１のＣＰＵ２からはパケット送信に必要な情報としてヘッダ作成用の情報を予めＮＩＣ５のオフロードエンジン５５に渡して領域５４に登録するとともに、データ３２の位置のみを通知することで転送指示を行う。
【００２６】
ＮＩＣ５では領域５４に登録した情報を元にヘッダを作成し、パケットに必要なデータを図示しないＩ／Ｏ バス４経由で読み出し、パケットを領域５２に生成してネットワーク６に送信する。
【００２７】
オフロードエンジン方式は必要な情報のみを渡すため、ホスト１のオーバーヘッドが小さい。そのため、最も効率よい転送方式であると言える。
しかし、オフロードエンジン方式ではＮＩＣ５での処理が複雑になってしまうという問題がある。ＮＩＣ５上に搭載するオフロードエンジン５５をハードウェアで構成した場合、ハードウェアで作りこまれた特定のネットワーク処理しかできないＮＩＣ５となってしまうため、ネットワーク処理の柔軟性に欠ける。
【００２８】
一方、オフロードエンジン５５をＮＩＣ５上に搭載するマイクロプロセッサとソフトウェア( ファームウェア) で構成した場合、本来ホスト１で行なうヘッダ生成その他の処理を行なうためのものであるため高速性が要求され、非常に高価なハードウェアを必要とする。
【００２９】
以上のように、ＮＩＣ５での処理が複雑になることによって、柔軟性に欠ける、あるいはハードウェアが高価になってしまうという問題が生じることとなる。
下記特許文献１及び特許文献２にはオフロードエンジン方式を用いたTCP/IP あるいはUDP/IP のためのネットワークインタフェースコントローラが提案されている。これらの方式は、特定のプロトコルであるTCP/IP あるいはUDP/IP に特化されており、他のプロトコルに応用することができない。
【００３０】
また、ネットワークに関する技術が発展するにつれ、同じTCP/IP やUDP/IP でも拡張がなされていく可能性がある。ホスト上等のソフトウェアでヘッダを構成する方式では、新たなソフトウェアを導入するだけで実現可能であるが、オフロードエンジンをハードウェアで構成した場合ではハードウェアそのものを交換しなければ対応することができない。
【特許文献１】特開２００６−０８１０３３号公報
【特許文献２】特表２００６−５２６９６９号公報
【発明の開示】
【発明が解決しようとする課題】
【００３１】
本発明の目的は、前述のＩ／Ｏバス、データコピー、ヘッダ作成の問題を解決するとともに、ネットワークインタフェースコントローラのハードウェアに対する付加機能を最小限にとどめ、ネットワークインタフェースコントローラのハードウェアを複雑で高価なものにすることなく、ソフトウェア処理による柔軟なネットワーク対応を可能にした、ネッ
トワークインタフェースコントローラとホストコンピュータ間のデータ転送方式を実現することである。
【課題を解決するための手段】
【００３２】
ホストコンピュータとネットワークインタフェースコントローラとのパケットに関する情報転送にヘッダテーブルという構造を新たに導入する。ヘッダテーブルには、パケットの圧縮されたヘッダ情報とパケットのペイロードデータへのポインタが記載される。
【００３３】
ヘッダ情報の圧縮は、ヘッダに記載する情報を共通ヘッダと可変ヘッダに分解することにより行う。共通ヘッダとは、一つの送信データを分割した全てのパケットに共通する情報であり、たとえば送信元、送信先、プロトコルの種類などが相当する。可変ヘッダは各パケットで異なる情報であり、たとえばシーケンス番号、チェックサム情報などが相当する。
【００３４】
ネットワークインタフェースコントローラはヘッダテーブルの共通ヘッダと各パケットに対応した可変ヘッダの内容を元に各パケットのヘッダを作成し、ポインタによりデータをホストコンピュータから取得し、内部でパケットを構成する。
【発明の効果】
【００３５】
本発明のヘッダテーブルを利用する転送方式によって、ヘッダはネットワークインタフェースコントローラ内部で生成することができる。そして、ホストコンピュータからネットワークインタフェースコントローラにヘッダ情報を渡す際、共通ヘッダは一度に送る送信データに対して１回のみ、可変ヘッダはパケットの数分だけであるので、重複する情報を何度も転送することはない。
【００３６】
また、パケットの作成もネットワークインタフェースコントローラ内部で行うのでペイロードのコピーの問題が発生しない。
そして、本発明のヘッダテーブルは、ホストコンピュータ上の制御プログラムが作成する。そのため、パケットのヘッダ構成をホストコンピュータ上のソフトウェアによって自由に変更することができ、さまざまなプロトコルに柔軟に対応することが可能となる。
【発明を実施するための最良の形態】
【００３７】
図１は、本発明によるパケット作成の原理を説明する図である。
本発明においてパケット作成に用いられる制御情報は、図１（ａ）に示すように、共通部、パケット#1用の可変部１、パケット#1用のデータポインタ、……、パケット#n用の可変部ｎ、パケット#n用のデータポインタという構成になっている。共通部の制御情報はヘッダテーブルの共通ヘッダに用いられる情報であり、各可変部の制御情報はヘッダテーブルの各可変ヘッダに用いられる情報である。
【００３８】
先に述べたように、共通部の制御情報は、たとえば送信元、送信先、プロトコルの種類などであり、各可変部の制御情報は、たとえばシーケンス番号、チェックサム情報などである。なお、チェックサム情報がトレーラに設定されるプロトコルでは、トレーラごと最後のペイロードデータである図１（ｂ）に示すデータｎに含ませて転送することができる。
【００３９】
送信データは図１（ｂ）に示すようにデータ１、データ２、・・・、データｎと分割され、それぞれの先頭アドレスは図１（ａ）に示す制御情報のポインタで示されている。
図１（ａ）に示す制御情報と図１（ｂ）に示すデータにより、図１（ｃ）に示すパケット#1、パケット#2、・・・、パケット#n が作成される。パケット#1、パケット#2、・・・、パケット#n のヘッダは、  図１（ｃ）に示すように、共通部の制御情報と可変部の制御情報から作成される。
【００４０】
図２は、本発明の一実施形態によるホストとＮＩＣ間のパケット作成用の情報転送方式の概要を説明する図である。
ホスト側のＣＰＵ２は、１まとまりの送信データ３２ごとにヘッダテーブル３６を生成する。ヘッダテーブル３６は送信データに共通な共通ヘッダと、１まとまりの送信データを分割して得られた各パケットにより送信するデータごとの可変ヘッダと各パケットにより送信するデータへのポインタで構成される。
【００４１】
ホスト側のＣＰＵ２がＮＩＣ側のヘッダ解釈／構成エンジン５６に転送指示を行うと、ヘッダ解釈／構成エンジン５６はヘッダテーブル３６を読み出してヘッダテーブルバッファ５７に格納し、共通ヘッダと可変ヘッダを合成してパケットのヘッダを作成する。さらにヘッダ解釈／構成エンジン５６はヘッダテーブルバッファ５７に格納したヘッダテーブル中の、パケットに格納すべきデータの位置を示すポインタによりホスト側からデータを読み出して先に合成したヘッダとともにパケットをパケットバッファ５２に作成してネットワーク側に送信する。
【００４２】
図３は、本発明の一実施形態によるヘッダテーブル３６の、各可変ヘッダの構成例を示す図である。
図３に示すように、可変ヘッダの先頭は、可変ヘッダ全体の長さを示すレングス部である。それ以降は各可変データに対応したものであり、それは、可変データの長さがバイト、ワードあるいはダブルワードであるか等を示すタイプＴ、可変データを書き込む共通ヘッダの先頭からのオフセットを示すＯ、及び書き換えるデータそのものである可変データＤから構成される。図３に示す例では可変データはＤ0〜Ｄ4の５個となっている。
【００４３】
図４は、本発明の一実施形態によるＮＩＣ５ａの構成例を示す図である。図４にはＮＩＣ５ａのパケット送信に関する部分のブロック構成のみ示しており、受信に関する部分は省略している。
【００４４】
図４に示すように、ＮＩＣ５ａのパケット送信部は、ホストインタフェース５０、パケットバッファ５２、コントローラ５６１、ヘッダ合成ユニット５６２、ヘッダテーブルバッファ５７、共通ヘッダバッファ５８を含んで構成される。コントローラ５６１とヘッダ合成ユニット５６２は、図２に示すヘッダ解釈／構成エンジン５６に相当する。
【００４５】
ＮＩＣ５ａは図示しないＩ／Ｏバスとネットワークそれぞれに接続しており、Ｉ／Ｏバス経由で図示しないホストとデータ等をやりとりする。ホストインタフェース５０はホストとのやりとりを行なうブロックで、ホストからの転送指示を受け取ったり、ホストへメモリの読み出し要求を出すという操作を行なう。
【００４６】
中央のコントローラ５６１はパケット送信手続きを実行するブロックであり、ホストインタフェース５６１がホストから受け取った転送指示により起動される。起動されると、コントローラ５６１は、ホストからのヘッダテーブルの読み出し、ヘッダ合成ユニット５６２へのヘッダ合成指示、ホストからのデータ読み出し、ヘッダとデータを組み合わせたパケットのパケットバッファ５２上での作成、作成されたパケットのネットワークへの送信の制御を順次行なう。
【００４７】
ヘッダ合成ユニット５６２は、共通ヘッダバッファ５８に格納された共通ヘッダとヘッダバッファテーブル５７から読み出した可変ヘッダを合成して、新たなパケット用のヘッダを生成するブロックである。
【００４８】
ヘッダ合成ユニット５６２は、図３に示す可変ヘッダの“Ｏ”で示されるオフセット先に“Ｔ”で示されるサイズで“ＤＡＴＡ” を書き込むという動作を繰り返すことによって、共通ヘッダと可変ヘッダからパケット用のヘッダを作成する。
【００４９】
つまり、上記オフセット値にしたがって、ヘッダ合成ユニット５６２は共通ヘッダのうち書き換える部分を探し出し、可変ヘッダ中のデータで書き換えることで、それぞれのパケットに適合したヘッダを作成する。
【００５０】
図４に示すＮＩＣ５ａを実現するためのハードウェアは、通常用いられているネットワークインタフェースコントローラのハードウェアに、共通ヘッダを記憶しておく領域、可変ヘッダを解析して共通ヘッダと合わせてパケットのヘッダを作成する回路を追加したものとなる。したがって、オフロードエンジン方式で問題となっていた柔軟性に欠ける、あるいはＣＰＵとして高価なハードウェアを必要とするという問題も解決することが可能である。
【００５１】
図５は、本発明の一実施形態によるホストとＮＩＣ間のパケット送信のための情報転送方式に係るホスト上の制御プログラム（ＯＳ）とＮＩＣ側のハードウェアの動作シーケンスを説明する図である。
【００５２】
ホスト上の制御ソフトウェア（ＯＳ）は、ユーザからのデータ送信要求により起動され、ステップＳ１０でメモリ上に領域を確保しそこを送信データ用のヘッダテーブル３６に割り当てる。
【００５３】
次にステップＳ１１で、ヘッダテーブル３６の先頭にデータを送信するネットワークのプロトコル及び各パケットの共通データに応じて共通ヘッダを作成する。
次にステップＳ１２で、ネットワークの最大パケットサイズに応じて送信データを分割し、分割された送信データごとに可変ヘッダを作成し、ステップＳ１３で分割された送信データへのポインタの設定を行い順次それらをヘッダテーブル３６に格納していく。
【００５４】
ステップＳ１４での判定により、送信データの分割数、すなわちパケットの数だけ上記ステップＳ１２とステップＳ１３を繰り返し、ヘッダテーブル３６が完成するとステップＳ１５において、ＮＩＣ側に転送指示を出す。
【００５５】
ＮＩＣ側では、ホスト側からの転送指示を受け取ると、ステップＳ２０でホスト側からヘッダテーブル３６を読み出し、ヘッダテーブルバッファ５７に格納する。
ヘッダテーブル３６の具体的転送方法には、ホスト側からの転送指示にヘッダテーブルのアドレスを含ませる方法、ヘッダテーブル３６のアドレスを予めＮＩＣ側に設定しておく方法などが可能である。また、それらの方法に替えて、ホスト側から転送指示とともにヘッダテーブル３６をＮＩＣ側への書き込みデータとして転送することもできる。
【００５６】
いずれにしろ、ヘッダテーブル３６のデータはＮＩＣ側へ転送され、ＮＩＣ側はヘッダテーブルの情報を取得する。本明細書及び特許請求の範囲では、ホスト側からヘッダテーブルを読み出すことと、ホスト側主導で書き込みデータとして転送されたヘッダテーブルを受信することの双方について、取得という用語を用いる。
【００５７】
また、上述のヘッダテーブルの転送をホスト側から見た場合、ホストからＮＩＣにヘッダテーブルを渡すと表記する場合もある。
次にステップＳ２１で、ヘッダテーブル５７に格納したヘッダテーブルから共通ヘッダを取り出し、共通ヘッダバッファ５８に格納する。
【００５８】
続いてステップＳ２２において、ヘッダテーブルバッファ５７から各パケットに対応する可変ヘッダを順次取り出し、ステップＳ２３で共通ヘッダバッファ５８から取り出した共通ヘッダとステップＳ２２で取り出した可変ヘッダによりヘッダの合成を行い、パケットバッファ５２のヘッダエリアに書き込む。
【００５９】
ステップＳ２２とステップＳ２３の処理は、先に述べたように図４に示すヘッダ合成ユニット５６２により実行される。ヘッダ合成の具体的処理も先に述べたとおりであって、まず共通ヘッダをパケットバッファ５２のヘッダエリアに書き込み、次に可変ヘッダに設定されている可変データで共通ヘッダの一部を書き換えていく。
【００６０】
すなわち、ヘッダエリアの先頭アドレスから、可変ヘッダの“Ｏ”で示されるオフセット先に“Ｔ”で示されるサイズで“ＤＡＴＡ” を書き込むことを可変データの数だけ実行する。なお、上記処理を実行するに際して、ヘッダ合成ユニット５６２は、可変ヘッダのレングス部 とタイプＴの値により、次に処理するデータが可変ヘッダのどこにあるかと全てのデータの処理が終了したかを判別できることは明らかである。
【００６１】
ステップＳ２３に続いてステップＳ２４に進み、ヘッダテーブルバッファ５７から各パケットに対応するデータへのデータポインタを取り出し、ステップＳ２５で、そのデータポインタによりホスト側からデータを読み出すことをホストインタフェース５０に要求し、読み出されたデータをパケットバッファのデータ領域に書き込んで一つのパケットを作成する。
【００６２】
次にステップＳ２６で作成したパケットをネットワークに送信し、ステップＳ２７においてヘッダテーブル内の全てのデータの処理が終了したか判定する。
ヘッダテーブル内に未処理のデータが残っていればステップＳ２２に戻って以降の処理を繰り返し、全ての処理が終了していれば、ホスト側に処理終了通知を返す。
【００６３】
ホストはＮＩＣ側から処理終了通知を受信すると、ステップＳ１６においてヘッダテーブル３６を解放し、ステップＳ１７において、送信要求を行ったユーザに送信完了を通知して一連の処理を終了する。
【００６４】
上述のように、共通ヘッダは、ホスト上のソフトウェアにより、ネットワークのプロトコルに適合した形式で、ユーザから送信要求のあったデータに共通の送信先等の情報により作成される。したがって、パケットヘッダ作成のためのテンプレートとなっている。可変ヘッダもホスト上のソフトウェアにより作成され、各パケットに特有の情報とそれを書き込むヘッダ中の位置を示す情報により構成され、テンプレートの変更部分を示している。
【００６５】
したがって、パケットがヘッダとペイロードから構成されるかぎり、すべてのパケット転送プロトコルに対して、本発明のヘッダテーブルを用いたパケット情報転送方式は適用可能である。また、先に述べたとおり、トレーラは最後のパケットのペイロード中に含めることができる。
【００６６】
以上の図４、図５を参照したＮＩＣ５ａの説明では、共通ヘッダバッファ５８を設け、共通ヘッダをヘッダテーブルバッファ５７からコピーしてそれにヘッダ合成ユニット５６２がアクセスするものであったが、ヘッダ合成ユニット５６２が直接ヘッダテーブルバッファ５７に格納された共通ヘッダにアクセスするように構成することも可能である。
【００６７】
また、上述のＮＩＣ５ａはハードウェアオリエンテッドで構成したものであるが、これは本発明のヘッダテーブルを用いた転送方式はハードウェア構成によるＮＩＣで好適に実
現できることを説明したまでのことであって、本発明がソフトウェアを用いて実現可能であることを否定するものではない。
【００６８】
図６は、マイクロプロセッサ（ＣＰＵ）とＣＰＵ上のソフトウェア構成による実施例におけるネットワークインタフェースコントローラの構成例を示す図である。
図６に示すように、ＮＩＣ５ｂは、ホストインタフェース５０、ＣＰＵ５６０及びメモリ５７０を含んで構成される。
【００６９】
メモリ５７０には、ヘッダテーブルバッファ５７１、共通ヘッダバッファ５７２及びパケットバッファ５７３が確保されている。先に述べたのと同様に、共通ヘッダバッファ５７２は省略することも可能である。また、場合によっては、共通ヘッダバッファをレジスタにより構成することも考えられる。
【００７０】
ＣＰＵ５６０でのソフトウェア処理は、図５に示すステップＳ２０〜ステップＳ２７のフローで表されるものと同様である。
本発明によるヘッダテーブルを用いた転送方式によれば、パケット作成に必要なデータはヘッダテーブルにまとめられていることからＣＰＵ５６０による処理もさほど重いものではないので、安価なものを使用することができ、適用分野によっては好適に採用することができる。
【００７１】
以上においては、ＮＩＣに収容されるネットワークの回線数については特には触れずに本発明を説明してきた。本発明はネットワーク回線を一つだけ収容するＮＩＣに限られるわけではなく、各図に示されたネットワークとＮＩＣを接続する回線は太線一本で記載してあっても、複数の回線の場合も合わせて表記したものである。
【００７２】
複数本の回線を収容するＮＩＣの場合には、例えば共通ヘッダには宛先を識別する情報が存在し、複数本の回線を収容するＮＩＣには当然のことながら宛先を識別する情報によりパケットを複数の回線のうちの１つに振り分ける手段が存在するから、それによりどの回線にパケットを送信するかを決めるようにすればよい。
【００７３】
また、複数の物理回線をまとめて１本の論理回線として用いるリンクアグリゲーションを採用した場合には、可変ヘッダの部分にどの物理回線に送信するかの情報を設定してそのパケットを送信する回線を指定することができる。そして、リンクアグリゲーションを採用するＮＩＣであれば、指定された物理回線にパケットを送信できることは勿論である。
【００７４】
そして、本発明のホストコンピュータとネットワークインタフェースコントローラ間の転送方式は、いわゆるコンピュータ間通信用のホストとＮＩＣに限らず、パケット通信を利用するあらゆる分野、例えばパケットを用いた移動体通信の分野等においても適用可能であることは明らかである。
【００７５】
ネットワークインタフェースコントローラに接続されるネットワークの接続形態についても、ネットワークの回線が直接ネットワークインタフェースコントローラに接続される必要はなく、ネットワークインタフェースコントローラから出力されたパケットデータを各種変調方式で変調する変調部や各種符号化を行う符号化部等を介してネットワークの回線に接続される場合も含むものである。
【００７６】
以上本発明を詳細に説明したところから明らかなとおり、本発明によれば、高価なハードウェアを用いることなく、ネットワーク変更に対する柔軟性を維持したまま、Ｉ／Ｏバスの問題、データコピーの問題、ヘッダ生成の問題を解決することができる。また、Ｉ／
Ｏバスを経由したホストとＮＩＣとのやりとりや、ホスト上の制御プログラムのオーバーヘッドを削減し、効率よくデータをネットワークに送り出すことが可能となる。
【００７７】
（付記１）
ホストコンピュータとネットワークの間に設けられ、ホストコンピュータの送信データを分割して作成したパケットをネットワークに送信するネットワークインタフェースコントローラとホストコンピュータの間のデータ転送方法において、
前記ホストコンピュータは、
前記送信データごとに、該送信データに共通なヘッダ情報からなる共通ヘッダと、パケットごとに独自のヘッダ情報からなる可変ヘッダと該パケットのペイロードとなるデータの格納アドレスを示すポインタとを設定したヘッダテーブルを作成し、
前記ネットワークインタフェースコントローラに転送指示を行い、
前記ネットワークインタフェースコントローラに前記ヘッダテーブルを渡し、
前記ネットワークインタフェースコントローラは、
該渡されたヘッダテーブルに設定されたポインタによりパケットのペイロードとなるデータをホストコンピュータから読み出す、
ことを特徴とするデータ転送方法。
（付記２）
前記可変ヘッダは、前記共通ヘッダに書き込むデータと、該データを共通ヘッダに書き込む位置を示す位置情報を含むことを特徴とする付記１に記載のデータ転送方法。
（付記３）
前記ネットワークインタフェースコントローラは前記ネットワークの複数の回線を収容するものであり、前記共通ヘッダには該回線を識別する情報が含まれることを特徴とする付記２に記載のデータ転送方法。
（付記４）
前記ネットワークインタフェースコントローラは複数の物理回線をリンクアグリゲーションで運用する前記ネットワークの回線を収容するものであり、前記可変ヘッダには対応するパケットが送信される前記物理回線を識別する情報が含まれることを特徴とする付記２に記載のデータ転送方法。
（付記５）
前記ホストコンピュータは、前記ネットワークインタフェースコントローラからの読み出しにより前記ヘッダテーブルを渡すことを特徴とする付記１乃至付記４のいずれか１つに記載のデータ転送方法。
（付記６）
前記ホストコンピュータは、前記ヘッダテーブルを前記ネットワークインタフェースコントローラへの書込みにより渡すことを特徴とする付記１乃至付記４のいずれか１つに記載のデータ転送方法。
（付記７）
ホストコンピュータとネットワークの間に設けられ、ホストコンピュータの送信データを分割して作成したパケットをネットワークに送信するネットワークインタフェースコントローラにデータを転送するホストコンピュータを、
前記送信データごとに、該送信データに共通なヘッダ情報からなる共通ヘッダと、パケットごとに独自のヘッダ情報からなる可変ヘッダと該パケットのペイロードとなるデータの格納アドレスを示すポインタとを設定したヘッダテーブルを作成する手段と、
前記ネットワークインタフェースコントローラに転送指示を行う手段と、
前記ネットワークインタフェースコントローラに前記ヘッダテーブルを渡す手段と、
して機能させることを特徴とするプログラム。
（付記８）
前記可変ヘッダは、前記共通ヘッダに書き込むデータと、該データを共通ヘッダに書き込む位置を示す位置情報を含むことを特徴とする付記７に記載のプログラム。
（付記９）
ホストコンピュータとネットワークの間に設けられ、ホストコンピュータの送信データを分割して作成したパケットをネットワークに送信するネットワークインタフェースコントローラにおいて、
制御部とヘッダ合成部とバッファ部を備え、
前記制御部は、前記ホストコンピュータから取得した、前記送信データに共通なヘッダ情報からなる共通ヘッダと、パケットごとに独自のヘッダ情報からなる可変ヘッダと該パケットのペイロードとなるデータの格納アドレスを示すポインタとを設定したヘッダテーブルを前記バッファ部に格納して、前記ヘッダ合成部にヘッダの合成を指示するとともに、前記ヘッダテーブルに設定された前記ポインタによりパケットのペイロードとなるデータを読み出して前記バッファのパケットのペイロードデータ格納エリアに格納し、
前記ヘッダ合成部は、前記バッファ部から前記共通ヘッダと前記可変ヘッダを読み出し、前記共通ヘッダと前記可変ヘッダを合成してパケットのヘッダを作成して前記バッファのパケットのヘッダ格納エリアに格納する、
ことを特徴とするネットワークインタフェースコントローラ。
（付記１０）
前記可変ヘッダは、前記共通ヘッダに書き込むデータと、該データを共通ヘッダに書き込む位置を示す位置情報を含むことを特徴とする付記９に記載のネットワークインタフェースコントローラ。
（付記１１）
前記可変ヘッダは、さらに可変ヘッダ全体の長さを示すレングス部と、前記共通ヘッダに書き込むデータごとに、該データの長さを示すタイプ部を含み、前記制御部は、前記レングス部とタイプ部の長さ情報に基づいて前記可変ヘッダから、前記共通ヘッダに書き込むデータを取り出すとともに全ての該書き込みデータを取り出したことを判定することを特徴とする付記１０に記載のネットワークインタフェースコントローラ。
（付記１２）
前記ネットワークの複数の回線を収容し、前記共通ヘッダには該回線を識別する情報が含まれ、該回線を識別する情報に基づいて該回線に作成したパケットを送信することを特徴とする付記９乃至付記１１のいずれか１つに記載のネットワークインタフェースコントローラ。
（付記１３）
複数の物理回線をリンクアグリゲーションで運用する前記ネットワークの回線を収容し、前記可変ヘッダには対応するパケットが送信される前記物理回線を識別する情報が含まれ、該物理回線を識別する情報に基づいて該物理回線に作成したパケットを送信することを特徴とする付記９乃至付記１１のいずれか１つに記載のネットワークインタフェースコントローラ。
（付記１４）
ホストコンピュータとネットワークの間に設けられ、ホストコンピュータの送信データを分割して作成したパケットをネットワークに送信するネットネットワークインタフェースコントローラに、
前記ホストから前記送信データに共通なヘッダ情報からなる共通ヘッダと、パケットごとに独自のヘッダ情報からなる可変ヘッダと該パケットのペイロードとなるデータの格納アドレスを示すポインタとを設定したヘッダテーブルを取得する機能と、
該ヘッダテーブル中のパケットのペイロードとなるデータの格納アドレスを示すポインタにより該パケットのペイロードとなるデータを読み出す機能と、
前記共通ヘッダと前記各可変ヘッダを合成して各パケットのヘッダを作成する機能と、
を実現させることを特徴とするプログラム。
（付記１５）
前記可変ヘッダは、前記共通ヘッダに書き込むデータと、該データを共通ヘッダに書き込む位置を示す位置情報を含むことを特徴とする付記１４に記載のプログラム。
【図面の簡単な説明】
【００７８】
【図１】本発明によるパケット作成の原理を説明する図である。
【図２】本発明の一実施形態によるホストとＮＩＣ間の転送方式の概要を説明する図である。
【図３】本発明の一実施形態による可変ヘッダの構成を示す図である。
【図４】本発明の一実施形態によるＮＩＣの構成例を示す図である。
【図５】本発明の一実施形態による転送方式に係る動作シーケンスを説明する図である。
【図６】ソフトウェア構成による実施例におけるＮＩＣの構成例を示す図である。
【図７】ＮＩＣを用いてホストからパケットを送信する構成を示す図である。
【図８】ＮＩＣを用いてデータを転送する従来の方式を説明する図である。
【図９】ギャザーテーブル方式を説明する図である。
【図１０】オフロードエンジン方式を説明する図である。
【符号の説明】
【００７９】
１      ホストコンピュータ
２      ＣＰＵ
３      メモリ
４      Ｉ／Ｏバス
５、５ａ、５ｂ  ネットワークインタフェースコントローラ（ＮＩＣ）
６      ネットワーク
３６    ヘッダテーブル
５０    ホストインタフェース
５２    パケットバッファ
５６    ヘッダ解釈／構成エンジン
５６１  コントローラ
５６２  ヘッダ合成ユニット
５７    ヘッダテーブルバッファ
５８    共通ヘッダバッファ
【図１】
2008236378.tif 000003
【図２】
2008236378.tif 000004
【図３】
2008236378.tif 000005
【図４】
2008236378.tif 000006
【図５】
2008236378.tif 000007
【図６】
2008236378.tif 000008
【図７】
2008236378.tif 000009
【図８】
2008236378.tif 000010
【図９】
2008236378.tif 000011
【図１０】
2008236378.tif 000012