(57)【要約】【課題】ネットワークサーバにおいて、データの配信及びデータの蓄積の高速化を図る。【解決手段】ネットワークサーバは、ストレージ６と、伝送路を介してデータを送受信する通信コントローラ５と、ストレージ６に対してデータを読み書きするストレージコントローラ７と、通信コントローラ５とストレージコントローラ７とが読み書き可能な記憶領域であるドライバ間共有メモリ１３と、通信コントローラ５を制御する通信ドライバ部（ネットワークドライバ９、プロトコルプログラム１０）と、ストレージコントローラ７を制御するストレージドライバ１１と、通信ドライバ部とストレージドライバ１１との間でドライバ間共有メモリへ格納したデータの格納位置を受け渡して、通信コントローラ５とストレージコントローラ７との間で、ドライバ間共有メモリ１３に格納したデータを受け渡すことを仲介するストレージネットプロトコル・プログラム１２とを備える。【選択図】        図１
2004227040.tif 000002
【特許請求の範囲】
【請求項１】
伝送路を介してデータを送受信するネットワークサーバにおいて、
上記データを格納するストレージと、
上記伝送路を介してデータを送受信する通信コントローラと、
上記ストレージに対してデータを読み書きするストレージコントローラと、
上記通信コントローラと上記ストレージコントローラとが読み書き可能な記憶領域である共有メモリと、
上記通信コントローラと上記ストレージコントローラとの間で、上記共有メモリに格納したデータを受け渡すことを制御する制御部と
を備えることを特徴とするネットワークサーバ。
【請求項２】
上記制御部は、上記通信コントローラと上記ストレージコントローラとのいずれか一方によって共有メモリへ書き込まれたデータの格納位置を、他方へ通知することによって、上記通信コントローラと上記ストレージコントローラとの間で、データを受け渡すことを特徴とする請求項１記載のネットワークサーバ。
【請求項３】
上記制御部は、
上記通信コントローラを制御する通信ドライバ部と、
上記ストレージコントローラを制御するストレージドライバ部と、
上記通信ドライバ部と上記ストレージドライバ部との間で上記共有メモリへ格納したデータの格納位置を受け渡して、上記通信コントローラと上記ストレージコントローラとの間で、上記共有メモリに格納したデータを受け渡すことを仲介する仲介部と
を備えることを特徴とする請求項１または２記載のネットワークサーバ。
【請求項４】
上記通信ドライバ部は、上記通信コントローラがアクセスするために必要な情報を上記共有メモリに格納されたデータへ付加し、
上記ストレージドライバ部は、上記ストレージコントローラが上記共有メモリに格納されるデータを読み書きするために必要な情報を上記データへ付加することを特徴とする請求項３記載のネットワークサーバ。
【請求項５】
上記通信コントローラは、上記伝送路から、ＩＰ（Ｉｎｔｅｒｎｅｔ  Ｐｒｏｔｏｃｏｌ）パケットを上記データとして受信し、
上記ＩＰパケットは、ＩＰパケットに含まれるデータの種別を格納するサブヘッダを有することを特徴とする請求項１から４いずれかに記載のネットワークサーバ。
【請求項６】
上記共有メモリは、上記ＩＰパケットの単位でデータを格納し、
上記ストレージコントローラは、上記ＩＰパケットの単位でデータを上記ストレージへ格納することを特徴とする請求項５記載のネットワークサーバ。
【請求項７】
上記通信コントローラは、上記伝送路から受信したＩＰパケットを上記共有メモリへ格納し、
上記制御部は、上記ＩＰパケットを上記共有メモリへ格納した格納位置を上記ストレージコントローラへ通知し、
上記ストレージコントローラは、上記通知された格納位置を用いて、上記共有メモリからＩＰパケットを読み込み、読み込んだＩＰパケットを上記ストレージへ格納することを特徴とする請求項５または６記載のネットワークサーバ。
【請求項８】
上記ストレージコントローラは、上記ストレージから上記ＩＰパケットを読み込み、読み込んだＩＰパケットを上記共有メモリへ格納し、
上記制御部は、上記ＩＰパケットを上記共有メモリへ格納した格納位置を上記通信コントローラへ通知し、
上記通信コントローラは、上記通知された格納位置を用いて、上記共有メモリからＩＰパケットを読み込み、読み込んだＩＰパケットを上記伝送路へ送信することを特徴とする請求項５から７いずれかに記載のネットワークサーバ。
【請求項９】
上記ＩＰパケットは、通信のプロトコルに関する情報と、上記サブヘッダとを有するヘッダ部を有し、
上記制御部は、上記共有メモリへ格納されたＩＰパケットのヘッダ部を変更することを特徴とする請求項５から８いずれかに記載のネットワークサーバ。
【請求項１０】
上記制御部は、通信コントローラがＩＰパケットを送信するために必要な情報を上記ヘッダ部へ設定し、
上記通信コントローラは、上記制御部が変更したヘッダ部を有するＩＰパケットを上記伝送路ヘ送信することを特徴とする請求項９記載のネットワークサーバ。
【請求項１１】
上記制御部は、上記ストレージへ格納する際に上記ヘッダ部をクリアし、
上記ストレージコントローラは、上記制御部が変更したヘッダ部を有するＩＰパケットを上記ストレージへ格納することを特徴とする請求項９記載のネットワークサーバ。
【請求項１２】
上記通信コントローラは、上記伝送路から受信したデータを上記共有メモリへ格納し、
上記制御部は、上記データを上記共有メモリへ格納した格納位置を上記ストレージコントローラへ通知し、
上記ストレージコントローラは、上記通知された格納位置を用いて、上記共有メモリからデータを読み込み、読み込んだデータを上記ストレージへ格納することを特徴とする請求項１または２記載のネットワークサーバ。
【請求項１３】
データを格納するストレージと、上記伝送路を介してデータを送受信する通信コントローラと、上記ストレージに対してデータを読み書きするストレージコントローラと、上記通信コントローラと上記ストレージコントローラとが読み書き可能な記憶領域である共有メモリとを備えるストレージデータ通信方法おいて、
上記通信コントローラと上記ストレージコントローラとのいずれか一方が、上記共有メモリへデータを格納し、
上記データを上記共有メモリへ格納した格納位置を検出し、
検出した格納位置を、上記通信コントローラと上記ストレージコントローラとのいずれか他方へ通知することによって上記共有メモリに格納したデータを受け渡すことを特徴とするストレージデータ通信方法。
【発明の詳細な説明】
【０００１】
【発明の属する技術分野】
この発明は、情報配信を目的とするサーバ用のソフトウェアに関する。
【０００２】
【従来の技術】
従来の通信制御装置においては、受信が終了すると、通信コントローラは、受信割込み信号によりシステムプロセッサに受信があったことを知らせる。システムプロセッサは、これによりドライバの受信割込み処理部を起動する。受信割込み処理部は受信データが入っているバッファを共有バッファから取り出してプロトコル受信キューにつなぎ、プロトコルプログラムの送受信処理部を起動する。送受信処理部は、プロトコル受信キューから受信データを取り出し、通信プロトコル処理を行った後、その中からアプリケーションデータだけをアプリケーションプログラムに引き渡す。共有バッファをプロトコル受信キューに実際につなぐ方法としては、共有バッファの先頭位置を示すポインタをプロトコル受信キューにセットすることにより行う。従って、受信データが移動するわけではない。また、送信動作は受信と逆の動作になる（例えば、特許文献１参照）。
【０００３】
【特許文献１】
特開平６−１２５３６５号公報（第４−５頁、第７頁、第１３図）
【０００４】
上記のような従来の通信制御装置におけるデータ送受信では、通信コントローラとプロトコルプログラムが通信バッファを共有するのとは異なり、プロトコルプログラムとアプリケーションプログラムの間では共有バッファを持たないため、ユーザデータの受け渡しの際に、同一メモリ内でデータコピーが発生する。
また、現行のサーバにおけるデータ送信では、一般的に、ストレージ内のデータを伝送路上に配信する際には、その都度、アプリケーションプログラムを介して、データを伝送路に配信するために適したパケット形式に変換しなければならない。同様に、現行のサーバにおけるデータ受信では、その都度、アプリケーションプログラムを介して、パケット形式からストレージに蓄積する際には不要なヘッダを取り除かなければならない。
以上の処理は、すべてＣＰＵ（Ｃｅｎｔｒａｌ  Ｐｒｏｃｅｓｓｉｎｇ  Ｕｎｉｔ）のプログラム処理であり、これらの処理時間が長いほど、実効スループットが低下するという問題がある。
【０００５】
【発明が解決しようとする課題】
この発明は、上述のような課題を解決するためになされたものであり、第一の目的は、ユーザデータの受け渡しやデータのパケット形式への変換の際に発生するデータコピーを不要にすることである。
第二の目的は、データコピーを不要にすることにより、ストレージに対するデータ蓄積、および伝送路へのデータ配信の高速化を可能にすることである。
【０００６】
【課題を解決するための手段】
この発明に係るネットワークサーバは、伝送路を介してデータを送受信するネットワークサーバにおいて、
上記データを格納するストレージと、
上記伝送路を介してデータを送受信する通信コントローラと、
上記ストレージに対してデータを読み書きするストレージコントローラと、
上記通信コントローラと上記ストレージコントローラとが読み書き可能な記憶領域である共有メモリと、
上記通信コントローラと上記ストレージコントローラとの間で、上記共有メモリに格納したデータを受け渡すことを制御する制御部と
を備えることを特徴とする。
【０００７】
【発明の実施の形態】
実施の形態１．
図１は、本発明の実施の形態１である情報配信を目的とするネットワークサーバ１の構成の一例を示すブロック図である。
ネットワークサーバ１は、プログラムを実行するシステムプロセッサ２、システムメモリ３、伝送路４に対してデータの送受信を行う通信コントローラ５、ストレージ６に対してデータの読み書きを行うストレージコントローラ７から構成される。バス８は、上記の構成要素を接続するためのもので、それぞれの情報交換に使用する。
【０００８】
システムメモリ３は、システムプロセッサ２で動作する各種プログラムの蓄積部、およびデータの蓄積部として利用する。
【０００９】
プログラムには、通信コントローラ５を制御するネットワークドライバ９、通信プロトコルを処理するプロトコルプログラム１０、ストレージコントローラ７を制御するストレージドライバ１１、ストレージネットプロトコル・プログラム１２がある。各種プログラムの蓄積部は、上記に示した複数のプログラムを蓄積（格納）する。
また、上記に一例として示したプログラムは、システムプロセッサ２によって実行される。
また、このストレージデータ高速通信方式では、ストレージネットプロトコルを用いる場合を説明する。
ストレージネットプロトコルは、新規に定義したプロトコルであり、データをＩＰパケット単位でストレージに蓄積し、アプリケーションの介在なしに、パケット処理（通信コントローラ側の処理を指す）と、ファイル処理（ストレージコントローラ側の処理を指す）を繋ぐことができるゼロコピー・データ転送方式である。
このプロトコルを使用することにより、クライアント端末は、ネットワークを経由して、ネットワークサーバのストレージを制御できる。
【００１０】
また、データの蓄積部には、ネットワークドライバ９とストレージドライバ１１が共有するドライバ間共有メモリ１３がある。ドライバ間共有メモリ１３は、双方向のリングバッファから構成される。受信キュー１４は、伝送路４からストレージ６へのデータ蓄積用に使用する。また、送信キュー１５は、ストレージ６から伝送路４へのデータ配信用に使用する。受信キュー１４と送信キュー１５は、それぞれ複数個の受信バッファ１６、送信バッファ１７から構成される。一個のバッファサイズは、ＩＰ（Ｉｎｔｅｒｎｅｔ  Ｐｒｏｔｏｃｏｌ）パケットの最大パケット長（固定）である。
ドライバ間共有メモリ１３を採用することで、異種ドライバ間でのデータ受渡しを簡略化し、データ転送に要する時間を短縮することができる。
【００１１】
通信コントローラ５は、クライアント端末２０から伝送路４上を転送されたＩＰパケットを、ＤＭＡ（Ｄｉｒｅｃｔ  Ｍｅｍｏｒｙ  Ａｃｃｅｓｓ）転送１８により、受信キュー１４内の受信バッファ１６に格納する。
また、ストレージコントローラ７は、ストレージ６から読込んだデータを、ＤＭＡ転送１９により、送信キュー１５内の送信バッファ１７に格納する。
【００１２】
図２に、本方式で使用するＩＰパケット３０の形式の一例を示す図である。
ＩＰパケット３０は、ネットワーク層のＩＰヘッダ３１、トランスポート層のプロトコルヘッダ３２、サブヘッダ３３、データ部３５の順で構成される。但し、プロトコルヘッダ３２は、無くても良い。また、ＩＰヘッダ３１、プロトコルヘッダ３２、サブヘッダ３３を総称して、ヘッダ部３４とする。
ＩＰヘッダ３１は、ＯＳＩ（Ｏｐｅｎ  Ｓｙｓｔｅｍ  Ｉｎｔｅｒｃｏｎｎｅｃｔｉｏｎ）モデルにおいてネットワーク層の機能を実現するプロトコルに準拠するものである。例えば、ＲＦＣ（Ｒｅｑｕｅｓｔ  Ｆｏｒ  Ｃｏｍｍｅｎｔ）７９１で規定されているＩＰ（Ｉｎｔｅｒｎｅｔ  Ｐｒｏｔｏｃｏｌ）等がある。但し、本発明では、ＩＰヘッダ３１は、データリンク層のヘッダを含む。例えば、伝送路４がイーサネット（登録商標）である場合、ＭＡＣ（Ｍｅｄｉａ  Ａｃｃｅｓｓ  Ｃｏｎｔｒｏｌ）ヘッダになる。
【００１３】
プロトコルヘッダ３２は、ＯＳＩモデルにおいてトランスポート層の機能を実現するプロトコルに準拠するものである。例えば、ＲＦＣ７６８で規定されているＵＤＰ（Ｕｓｅｒ  Ｄａｔａｇｒａｍ  Ｐｒｏｔｏｃｏｌ）や、ＲＦＣ７９３で規定されているＴＣＰ（Ｔｒａｎｓｍｉｓｓｉｏｎ  Ｃｏｎｔｒｏｌ  Ｐｒｏｔｏｃｏｌ）等がある。
サブヘッダ３３は、送信元と宛先との間で、ストレージデータ高速通信方式（及びストレージデータ通信方法）に関する情報を交換する。サブヘッダ３３には、データ部３５に格納された種別を示すパラメータを有し、コマンドまたはデータのいずれであるかを示す。
データ部３５は、ストレージ６を制御するコマンドや、ストレージ６に蓄積するデータ、または伝送路４に配信するデータを格納する。
【００１４】
ネットワークサーバ１では、図２に示すＩＰパケット３０の単位で、データをストレージ６に蓄積する。この時、ＩＰパケット３０は最大パケット長に固定とする（一致させる）。
但し、ストレージ６に格納されている時には、ＩＰパケット３０のヘッダ部３４の設定値は意味がなく、０を設定しておく。
ＩＰパケット３０の単位でデータを蓄積することで、ソフトウェアによるＩＰパケット３０化（ＩＰパケット３０の単位に変換すること）の手間を省き、パケット処理に要する時間を軽減することができる。
【００１５】
図３に、本方式で使用する管理テーブル４０の形式の一例を示す図である。
管理テーブル４０は、コマンドブロック４１、コマンド発行元識別番号４２、共有メモリ・アドレス４３から構成される。ストレージネットプロトコル・プログラム１２は、コマンド毎に管理テーブル４０を用意して、コマンド単位で管理する。
ストレージネットプロトコル・プログラム１２は、コマンド受信時に管理テーブル４０を作成し、コマンド処理終了（完了）時に削除する。管理テーブル４０には、処理中のコマンドに対応する管理テーブル４０が存在する。
ストレージネットプロトコル・プログラム１２は、コマンド処理の完了は、ストレージ６側から結果（正常／異常）の通知がされた場合をトリガとして、管理テーブル４０を削除する。
また、管理テーブル４０は、システムメモリ３内に記憶される。ストレージネットプロトコル・プログラム１２内であってもよい。管理テーブル４０は、ネットワークドライバ９とストレージドライバ１１とが共有できないメモリとなる。
【００１６】
コマンドブロック４１は、ストレージ６を制御するために、ＩＰパケット３０のデータ部３５に格納されて送られてきたコマンドである。例えば、ストレージ６がＳＣＳＩ（Ｓｍａｌｌ  Ｃｏｍｐｕｔｅｒ  Ｓｙｓｔｅｍ  Ｉｎｔｅｒｆａｃｅ）の場合は、ＣＤＢ（Ｃｏｍｍａｎｄ  Ｄｅｓｃｒｉｐｔｏｒ  Ｂｌｏｃｋ）になる。
コマンド発行元識別番号４２は、コマンドを発行した端末を識別するための識別番号である。例えば、ＩＰアドレスやソケット番号を使用する。
共有メモリ・アドレス４３は、コマンドブロック４１を実行する際に使用する受信バッファ１６または送信バッファ１７の先頭位置を示す。データのサイズに応じて、一個または複数個の共有メモリ・アドレス４３を登録する。
【００１７】
実施の形態１では、ネットワークドライバ９とストレージドライバ１１の異種ドライバ間で情報交換するために、ストレージネットプロトコル・プログラム１２とドライバ間共有メモリ１３の２種類の経路を持つ（図１）。
データは、ストレージネットプロトコル・プログラム１２を介さずに、ドライバ間共有メモリ１３を通じて受け渡す。
コマンドやデータに関する情報（格納位置等）は、ストレージネットプロトコル・プログラム１２を介して受け渡す。
２種類の経路を使用することで、異種ドライバ間でのデータ受け渡しを簡略化し、プログラムを介して処理する情報量を最小限に減らすことができる。それにより、データ転送に要する時間を短縮することができるとともに、ホストＣＰＵの負荷を軽減することができる。
【００１８】
以下に、具体的な動作について説明する。
図４は、ネットワークサーバ１の全体の動作の一例を表す図である。
ネットワークサーバ１は、起動後（ステップ６１）、初期化処理を実施する（ステップ６２）。初期化処理後、ネットワークサーバ１は、クライアント端末２０から送信されるＩＰパケットの受信を待つ（ステップ６３）。ネットワークサーバ１は、ＩＰパケットに含まれるコマンドに基づいて、処理を実施する（ステップ６４以降）。ネットワークサーバ１は、処理終了後、ＩＰパケット受信に戻る（ステップ６３）。上記動作において、障害等の異常発生の検出、あるいは、管理者からの指示、その他によって、ネットワークサーバ１は停止（立ち下げ、終了）する（図示していない）。
【００１９】
ネットワークサーバ１が、クライアント端末２０から受信するコマンドとしては、読込みコマンド、書込みコマンド、ストレージ６のモード設定コマンド、設定内容の取得コマンド、エラー情報取得コマンド、等のコマンドが一例としてあげられる。
【００２０】
まずは、ネットワークサーバの初期化処理（ステップ６２）について説明する。
ストレージネットプロトコル・プログラム１２は、ネットワークサーバ１の起動時に、ドライバ間共有メモリ１３として、受信キュー１４と送信キュー１５を用意する。
【００２１】
ここで、ドライバ間共有メモリ１３について説明する。
受信キュー１４は、伝送路４から受信した順序でＩＰパケット３０を受信バッファ１６に格納する。また、一個の書込みコマンドに対するデータとして送られてくる、連続したＩＰパケット３０をすべて受信完了した順序でストレージ６に蓄積する。
例えば、図５は、端末Ａ５１と端末Ｂ５２の２台から、ネットワークサーバ１に対して、書込みが実行された場合を示す図である。
コマンドＡ５３は、端末Ａ５１から発行された書込みコマンドである。
コマンドＢ５４は、端末Ｂ５２から発行された書込みコマンドである。
データＡ（１）５５とデータＡ（２）５７は、端末Ａ５１がネットワークサーバ１に書込むデータであり、二個のＩＰパケット３０に分けて転送される。
データＢ５６は、端末Ｂ５２がネットワークサーバ１に書込むデータであり、一個のＩＰパケット３０で転送される。
この時、端末Ａ５１からのコマンドＡ５３が先に発行されているが、端末Ｂ５２からのすべてのデータを受信する方が早いため、端末Ａ５１からのデータＡ（１）５５より、端末Ｂ５２からのデータＢ５６の方が先行してストレージ６に蓄積される。
【００２２】
送信キュー１５は、ストレージ６から読込んだＩＰパケット３０を送信バッファ１７に格納する。また、送信バッファ１７に格納された順序で伝送路４に送出する。
【００２３】
また、通信コントローラ５が、伝送路４から受信したＩＰパケット３０を格納できるように、ストレージネットプロトコル・プログラム１２は、初期化時に予め、通信コントローラ５に用意したすべての受信バッファ１６を渡しておく。
なお、送信バッファ１７は、ストレージ６からデータを読込む度に、ストレージネットプロトコル・プログラム１２により指定されるため、初期化時には渡さない。
【００２４】
次に、ネットワークサーバ１において、ＩＰパケット３０を受信した場合の動作について説明する。
通信コントローラ５は、伝送路４からＩＰパケット３０を受信すると（ステップ６３）、ＤＭＡ（Ｄｉｒｅｃｔ  Ｍｅｍｏｒｙ  Ａｃｃｅｓｓ）転送により、ドライバ間共有メモリ１３内の受信キュー１４に、ＩＰパケット３０を格納する（ステップ６４）。通信コントローラ５は、ＩＰパケット３０の格納が完了すると、システムプロセッサ２に対して受信割込みを通知する（ステップ６５）。
【００２５】
システムプロセッサ２は、通信コントローラ５からの受信割込みを検出すると、ネットワークドライバ９を起動する。ネットワークドライバ９は、受信したＩＰパケット３０を格納した受信バッファ１６の先頭位置を、プロトコルプログラム１０に通知する。
【００２６】
プロトコルプログラム１０は、ネットワークドライバ９より渡された受信バッファ１６の先頭位置を基にして、ドライバ間共有メモリ１３上の該当する受信バッファ１６に直接アクセスし、ＩＰヘッダ３１およびプロトコルヘッダ３２の内容に従って処理を行う（ステップ６６）。
ＩＰパケット３０の種類がストレージネットプロトコルの場合、プロトコルプログラム１０は、ネットワークドライバ９より渡された受信バッファ１６の先頭位置、および送信元の識別番号を、ストレージネットプロトコル・プログラム１２に通知する。
【００２７】
ストレージネットプロトコル・プログラム１２は、プロトコルプログラム１０より渡された受信バッファ１６の先頭位置を基にして、ドライバ間共有メモリ１３上の該当する受信バッファ１６に直接アクセスし、サブヘッダ３３の内容に従って処理を行う（ステップ６７）。
すなわち、サブヘッダ３３は、データ部３５に格納された種別を示すパラメータを有するため、ストレージネットプロトコル・プログラム１２は、上記パラメータに従って、処理を実施する。
【００２８】
次に、ストレージネットプロトコル・プログラム１２が、ネットワークサーバが受信したＩＰパケットに含まれるコマンドを取りだし、その後、コマンドの実行を指示する処理について説明する（ステップ６８）。
コマンドを取り出す処理（図６）、データを配信する処理（図７）、データを蓄積する処理（図８）について説明する。
なお、データ蓄積（受信）処理は、データ書込みコマンドを受信した場合であり、データ配信処理は、データ読込みコマンドを受信した場合である。
【００２９】
まず、データ部３５にコマンドが格納されている場合の処理について、図６のコマンド受信処理の一例を示すフロー図を用いて説明する。
ストレージネットプロトコル・プログラム１２は、サブヘッダ３３によりデータ部３５に格納されているものをチェックする（ステップ７１）。
データ部３５にコマンドが格納されている場合、ストレージネットプロトコル・プログラム１２は、ＩＰパケット３０のデータ部３５にセットされているコマンドブロックを抽出する（ステップ７２）。
【００３０】
次に、ストレージネットプロトコル・プログラム１２は、受信したコマンドに対して、新規に管理テーブル４０を生成する（ステップ７３）。
ステップ７２で抽出したコマンドブロックを、管理テーブル４０のコマンドブロック４１にそのまま設定する（ステップ７４）。
また、コマンドの発行元を特定するために、プロトコルプログラム１０から渡された送信元の識別番号を、管理テーブル４０のコマンド発行元識別番号４２に設定する（ステップ７５）。
【００３１】
次に、取得したコマンドの種別をチェックして、コマンドの種別に応じて以降の処理を行う（ステップ７６）。
読込みコマンドの場合、ストレージネットプロトコル・プログラム１２は、ステップ７２で抽出したコマンドブロックで指定されたサイズに合わせて、ドライバ間共有メモリ１３の送信キュー１５から送信バッファ１７を必要分確保して、その送信バッファ１７のアドレスを、管理テーブル４０の共有メモリ・アドレス４３に登録する（ステップ７７）。
書込みコマンドの場合、管理テーブル４０の共有メモリ・アドレス４３は、この時点（コマンド受信の時点）では無効であるため、何も設定しない。
読込みコマンドまたは書込みコマンド以外の場合は、管理テーブル４０の共有メモリ・アドレス４３には何も設定しない。
【００３２】
ストレージネットプロトコル・プログラム１２は、最後に、作成した管理テーブル４０を、ストレージドライバ１１に渡し、コマンドの実行を指示する（ステップ７８）。
【００３３】
ストレージドライバ１１は、ストレージネットプロトコル・プログラム１２から指示を受けると、渡された管理テーブル４０からコマンドブロック４１を抽出して、ストレージコントローラ７にそのまま発行する。
この時、読込みコマンドの場合、ストレージコントローラ７に対して、管理テーブル４０の共有メモリ・アドレス４３をＤＭＡ転送先に指定する。
また、書込みコマンドの場合、データ到着時、すなわち実際にデータを受取りストレージ６に書込む際に、ＤＭＡ転送元を指定するため、この時点ではコマンドブロック４１を発行するだけである。
【００３４】
次に、読込みコマンドまたは書込みコマンドに続いて転送されるデータに対する処理について、データ配信の場合（読込みコマンド受信時）と、データ蓄積の場合（書込みコマンド受信時）に分けて説明する。
【００３５】
まず、データ配信の場合について、図７のデータ配信処理の一例を示すフロー図を用いて説明する。
ネットワークサーバ１のデータ配信処理の概略動作は、ストレージ６内に蓄積されたデータの内、クライアント端末２０から要求されたデータを、クライアント端末２０に対して配信することである。
【００３６】
ストレージ６は、ストレージコントローラ７により読込みコマンドが実行されると、ＤＭＡ転送１９により、ストレージ６内の該当するデータを、管理テーブル４０の共有メモリ・アドレス４３で指定された送信バッファ１７に格納する。
なお、データのサイズによって、一個もしくは複数個の送信バッファ１７を使用する（ステップ８１）。
ストレージコントローラ７は、データのＤＭＡ転送１９が完了すると、システムプロセッサ２に対して受信割込みを通知する。
【００３７】
ここで、一般的に、通信コントローラ５とストレージコントローラ７では、ＤＭＡ転送できるブロックサイズに違いがある。例えば、通信コントローラ４がイーサネット（登録商標）の場合は、最大１５１８バイトである。一方、ストレージコントローラ７がＳＣＳＩの場合は、最大６４Ｋバイトである。このようにサイズに差があるため、ストレージコントローラ７がＤＭＡ転送１９したデータは、複数個のＩＰパケット３０で構成される。
【００３８】
システムプロセッサ２は、ストレージコントローラ７からのＤＭＡ転送完了割込みを検出すると、ストレージドライバ１１を起動する。ストレージドライバ１１は、データのＤＭＡ転送１９が完了したことを、ストレージネットプロトコル・プログラム１２に通知する（ステップ８２）。
【００３９】
ストレージネットプロトコル・プログラム１２は、コマンドブロック４１で指定したすべてのデータをストレージ６から読込み終わると、ＩＰパケット３０のサブヘッダ３３を設定する。この時、ドライバ間共有メモリ１３に置いてあるＩＰパケット３０を直接操作するため、パケットのコピーは発生しない（ステップ８３）。
そして、管理テーブル４０内にあるすべての共有メモリ・アドレス４３で指定された、送信バッファ１７に格納されているＩＰパケット３０のサブヘッダ３３の設定が完了したことを確認する（ステップ８４）。
すべての設定が完了した時点で、ストレージネットプロトコル・プログラム１２は、その管理テーブル４０をプロトコルプログラム１０に渡す（ステップ８５）。
【００４０】
プロトコルプログラム１０は、ＩＰパケット３０のＩＰヘッダ３１およびプロトコルヘッダ３２を設定する。この時、ドライバ間共有メモリ１３に置いてあるＩＰパケット３０を直接操作するため、パケットのコピーは発生しない（ステップ８６）。
そして、管理テーブル４０内にあるすべての共有メモリ・アドレス４３で指定された、送信バッファ１７に格納されているＩＰパケット３０のＩＰヘッダ３１およびプロトコルヘッダ３２の設定が完了したことを確認する（ステップ８７）。
すべての設定が完了した時点で、プロトコルプログラム１０は、その管理テーブル４０をネットワークドライバ９に渡す（ステップ８８）。
【００４１】
ネットワークドライバ９は、プロトコルプログラム１０より渡された管理テーブル４０内にあるすべての共有メモリ・アドレス４３で指定された、送信バッファ１７に格納されているＩＰパケット３０を、ＤＭＡ転送１８により、伝送路４に送出する（ステップ８９）。
前述した通り、読込みコマンドで読出したデータは、一個もしくは複数個の送信バッファ１７に格納されているため、通信コントローラ５はその回数分ＤＭＡ転送１８することになる。
そして、管理テーブル４０内にあるすべての共有メモリ・アドレス４３で指定された、送信バッファ１７に格納されているＩＰパケット３０の送信が完了したことを確認する（ステップ９０）。
すべての送信が完了した時点で、ネットワークドライバ９は、その管理テーブル４０、すなわち処理完了した送信バッファ１７の先頭位置を、ストレージネットプロトコル・プログラム１２に返す（ステップ９１）。
【００４２】
ストレージネットプロトコル・プログラム１２は、ネットワークドライバ９より返された管理テーブル４０内にあるすべての共有メモリ・アドレス４３で指定された、送信バッファ１７をクリアし、次のＩＰパケット３０送信に備える（ステップ９２）。
【００４３】
本方式のデータ配信では、ソフトウェアがドライバ間共有メモリ１３上のＩＰパケット３０を直接操作することで、システムメモリ３内のデータコピーを不要にすることができる。
また、本方式のデータ配信では、ストレージ６内に蓄積されたデータを、伝送路４に対して送出する時に、システムメモリ３内でのデータコピーが一度も必要ない。このように、データのゼロコピー化が実現でき、データ転送に要する時間を短縮することができる。
【００４４】
次に、データ蓄積の場合について、図８のデータ蓄積処理の一例を示すフロー図を用いて説明する。
ネットワークサーバ１のデータ蓄積処理の概略動作は、クライアント端末２０から受信したデータを、ストレージ６に蓄積することである。
【００４５】
通信コントローラ５は、伝送路４からＩＰパケット３０を受信すると、初期化時に予め渡されている受信バッファ１６の内、データがまだ格納されていない未使用の受信バッファ１６に、ＤＭＡ転送１８により、ＩＰパケット３０を格納する（ステップ１０１）。
通信コントローラ５は、ＩＰパケット３０の格納が完了すると、システムプロセッサ２に対して受信割込みを通知する。
【００４６】
システムプロセッサ２は、通信コントローラ５からの受信割込みを検出すると、ネットワークドライバ９を起動する。ネットワークドライバ９は、受信したＩＰパケット３０を格納した受信バッファ１６の先頭位置（アドレス）を、プロトコルプログラム１０に通知する（ステップ１０２）。ネットワークドライバ９は、受信バッファ１６の先頭位置をシステムプロセッサから通知されるか、自ら検出するか等により取得する。
【００４７】
プロトコルプログラム１０は、ネットワークドライバ９より渡された受信バッファ１６の先頭位置を基にして、ドライバ間共有メモリ１３上の該当する受信バッファ１６に直接アクセスし、ＩＰヘッダ３１およびプロトコルヘッダ３２の内容に従って処理を行う（ステップ１０３）。
【００４８】
ＩＰパケット３０の種類を確認し（ステップ１０４）、ＩＰパケット３０の種類がストレージネットプロトコルの場合、プロトコルプログラム１０は、ネットワークドライバ９より渡された受信バッファ１６の先頭位置、および送信元の識別番号を、ストレージネットプロトコル・プログラム１２に通知する（ステップ１０５）。
また、ＩＰパケット３０の種類がストレージネットプロトコル以外の場合は、プロトコルに応じて、適切な処理を行う（ステップ１１５）。
ストレージネットプロトコルと通常のＴＣＰ／ＩＰパケットを混在可能とすることで、互換性を確保することができる。
【００４９】
ストレージネットプロトコル・プログラム１２は、プロトコルプログラム１０より渡された送信元の識別番号から、該当する管理テーブル４０を特定し（ステップ１０６）、プロトコルプログラム１０より渡された受信バッファ１６の先頭位置を、管理テーブル４０の共有メモリ・アドレス４３に登録する（ステップ１０７）。
そして、管理テーブル４０のコマンドブロック４１で指定されたサイズ分のデータを受信したか否かを確認する（ステップ１０８）。
コマンドブロック４１で指定されたサイズ分のデータを受信した時点で、ドライバ間共有メモリ１３上の該当するＩＰパケット３０のヘッダ部３４の内容をクリアする。この時、ドライバ間共有メモリ１３に置いてあるＩＰパケット３０を直接操作するため、パケットのコピーは発生しない（ステップ１０９）。
ストレージネットプロトコル・プログラム１２は、最後に、管理テーブル４０をストレージドライバ１１に通知する（ステップ１１０）。
【００５０】
ストレージドライバ１１は、ストレージネットプロトコル・プログラム１２より渡された管理テーブル４０のすべての共有メモリ・アドレス４３で指定された、受信バッファ１６に格納されているＩＰパケット３０を、ＤＭＡ転送１９により、そのままストレージ６に蓄積する（ステップ１１１）。
すべての書込みが完了した時点で、ストレージドライバ１１は、その管理テーブル４０、すなわち処理完了した受信バッファ１６の先頭位置を、ストレージネットプロトコル・プログラム１２に返す（ステップ１１２）。
【００５１】
ストレージネットプロトコル・プログラム１２は、ストレージドライバ１１より返された管理テーブル４０内にあるすべての共有メモリ・アドレス４３で指定された、受信バッファ１６をクリアする（ステップ１１３）。
最後に、次のＩＰパケット３０受信に備えて、ストレージネットプロトコル・プログラム１２は、受信バッファ１６をネットワークドライバ９に渡す（ステップ１１４）。
【００５２】
本方式のデータ蓄積では、ソフトウェアがドライバ間共有メモリ１３上のＩＰパケット３０を直接操作することで、システムメモリ３内のデータコピーを不要にすることができる。
また、本方式のデータ蓄積では、伝送路４から受信したデータを、ストレージ６に蓄積する時に、システムメモリ３内でのデータコピーが一度も必要ない。このように、データのゼロコピー化が実現でき、データ転送に要する時間を短縮することができる。
【００５３】
実施の形態２．
実施の形態１では、図１の構成を用いて説明したが、図１の構成にかぎられるわけではない。
図１のシステムメモリ３は、少なくとも、共有メモリ（ドライバ間共有メモリ１３に対応する）と制御部（ネットワークドライバ９、プロトコルプログラム１０、ストレージドライバ１１、ストレージネットプロトコル・プログラム１２とに対応する）とを備える場合であってもよい。
共有メモリは、通信コントローラ５とストレージコントローラ７とが読み書き可能な記憶領域である。
制御部は、通信コントローラ５とストレージコントローラ７との間で、共有メモリに格納したデータを受け渡すことを制御する。すなわち、制御部は、通信コントローラ５とストレージコントローラ７とのいずれか一方によって共有メモリへ書き込まれたデータの格納位置を、他方へ通知することによって、通信コントローラ５とストレージコントローラ７との間で、データ（ＩＰパケット）を受け渡すことができる機能を有する。
【００５４】
また、制御部の一例としては、通信コントローラ５を制御する通信ドライバ部（ネットワークドライバ９、プロトコルプログラム１０に対応する）と、ストレージコントローラ７を制御するストレージドライバ部（ストレージドライバ１１に対応する）と、通信ドライバ部とストレージドライバ部との間で共有メモリ１３へ格納したデータの格納位置を受け渡して、通信コントローラ５とストレージコントローラ７との間で、共有メモリに格納したデータを受け渡すことを仲介する仲介部（ストレージネットプロトコル・プログラム１２に対応する）とを備える場合であってもよい。
さらに、上記通信ドライバ部は、上記通信コントローラがアクセスするために必要な情報を上記共有メモリに格納されるデータへ付加する機能を有する。
また、上記ストレージドライバ部は、上記ストレージコントローラが上記共有メモリに格納されるデータを読み書きするために必要な情報を上記データへ付加する機能を有する。
上記のような機能を有するプログラムをシステムメモリ３へ格納し、システムプロセッサ２によって実施させる構成であってもよい。
【００５５】
また、システムメモリ３へ格納する各種プログラムは、計算機で読み取り可能な記録媒体へ記録することが可能である。
【００５６】
【発明の効果】
この発明によれば、ネットワークサーバにおいて、ドライバ間共有メモリへデータを格納することによって、それぞれの処理においてデータをコピーすることなく、通信コントローラとストレージコントローラとの間でデータの受け渡しを可能にし、データの配信及びデータの蓄積の高速化を図ることができる。
【図面の簡単な説明】
【図１】実施の形態１である情報配信を目的とするネットワークサーバ１の構成の一例を示すブロック図。
【図２】ＩＰパケット３０の形式の一例を示す図。
【図３】管理テーブル４０の形式の一例を示す図。
【図４】ネットワークサーバ１の全体の動作の一例を表す図。
【図５】端末Ａ５１と端末Ｂ５２の２台から、ネットワークサーバ１に対して、書込みが実行された場合を示す図。
【図６】コマンド受信処理の一例を示すフロー図。
【図７】データ配信処理の一例を示すフロー図。
【図８】データ蓄積処理の一例を示すフロー図。
【符号の説明】
１  ネットワークサーバ、２  システムプロセッサ、３  システムメモリ、４伝送路、５  通信コントローラ、６  ストレージ、７  ストレージコントローラ、８  バス、９  ネットワークドライバ、１０  プロトコルプログラム、１１ストレージドライバ、１２  ストレージネットプロトコル・プログラム、１３ドライバ共有メモリ、１４  受信キュー、１５  送信キュー、１６  受信バッファ、１７  送信バッファ、１８，１９  ＤＭＡ転送、２０  クライアント端末、３０  ＩＰパケット、３１  ＩＰヘッダ、３２  プロトコルヘッダ、３３  サブヘッダ、３５  データ部、４０  管理テーブル、４１  コマンドブロック、４２  コマンド発行元識別番号、４３  共有メモリ・アドレス。
【図１】
2004227040.tif 000003
【図２】
2004227040.tif 000004
【図３】
2004227040.tif 000005
【図４】
2004227040.tif 000006
【図５】
2004227040.tif 000007
【図６】
2004227040.tif 000008
【図７】
2004227040.tif 000009
【図８】
2004227040.tif 000010