JP2004227040A - ネットワークサーバ及びストレージデータ通信方法 - Google Patents
ネットワークサーバ及びストレージデータ通信方法 Download PDFInfo
- Publication number
- JP2004227040A JP2004227040A JP2003010559A JP2003010559A JP2004227040A JP 2004227040 A JP2004227040 A JP 2004227040A JP 2003010559 A JP2003010559 A JP 2003010559A JP 2003010559 A JP2003010559 A JP 2003010559A JP 2004227040 A JP2004227040 A JP 2004227040A
- Authority
- JP
- Japan
- Prior art keywords
- storage
- data
- controller
- shared memory
- packet
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Pending
Links
Images
Abstract
【課題】ネットワークサーバにおいて、データの配信及びデータの蓄積の高速化を図る。
【解決手段】ネットワークサーバは、ストレージ6と、伝送路を介してデータを送受信する通信コントローラ5と、ストレージ6に対してデータを読み書きするストレージコントローラ7と、通信コントローラ5とストレージコントローラ7とが読み書き可能な記憶領域であるドライバ間共有メモリ13と、通信コントローラ5を制御する通信ドライバ部(ネットワークドライバ9、プロトコルプログラム10)と、ストレージコントローラ7を制御するストレージドライバ11と、通信ドライバ部とストレージドライバ11との間でドライバ間共有メモリへ格納したデータの格納位置を受け渡して、通信コントローラ5とストレージコントローラ7との間で、ドライバ間共有メモリ13に格納したデータを受け渡すことを仲介するストレージネットプロトコル・プログラム12とを備える。
【選択図】 図1
【解決手段】ネットワークサーバは、ストレージ6と、伝送路を介してデータを送受信する通信コントローラ5と、ストレージ6に対してデータを読み書きするストレージコントローラ7と、通信コントローラ5とストレージコントローラ7とが読み書き可能な記憶領域であるドライバ間共有メモリ13と、通信コントローラ5を制御する通信ドライバ部(ネットワークドライバ9、プロトコルプログラム10)と、ストレージコントローラ7を制御するストレージドライバ11と、通信ドライバ部とストレージドライバ11との間でドライバ間共有メモリへ格納したデータの格納位置を受け渡して、通信コントローラ5とストレージコントローラ7との間で、ドライバ間共有メモリ13に格納したデータを受け渡すことを仲介するストレージネットプロトコル・プログラム12とを備える。
【選択図】 図1
Description
【0001】
【発明の属する技術分野】
この発明は、情報配信を目的とするサーバ用のソフトウェアに関する。
【0002】
【従来の技術】
従来の通信制御装置においては、受信が終了すると、通信コントローラは、受信割込み信号によりシステムプロセッサに受信があったことを知らせる。システムプロセッサは、これによりドライバの受信割込み処理部を起動する。受信割込み処理部は受信データが入っているバッファを共有バッファから取り出してプロトコル受信キューにつなぎ、プロトコルプログラムの送受信処理部を起動する。送受信処理部は、プロトコル受信キューから受信データを取り出し、通信プロトコル処理を行った後、その中からアプリケーションデータだけをアプリケーションプログラムに引き渡す。共有バッファをプロトコル受信キューに実際につなぐ方法としては、共有バッファの先頭位置を示すポインタをプロトコル受信キューにセットすることにより行う。従って、受信データが移動するわけではない。また、送信動作は受信と逆の動作になる(例えば、特許文献1参照)。
【0003】
【特許文献1】
特開平6−125365号公報(第4−5頁、第7頁、第13図)
【0004】
上記のような従来の通信制御装置におけるデータ送受信では、通信コントローラとプロトコルプログラムが通信バッファを共有するのとは異なり、プロトコルプログラムとアプリケーションプログラムの間では共有バッファを持たないため、ユーザデータの受け渡しの際に、同一メモリ内でデータコピーが発生する。
また、現行のサーバにおけるデータ送信では、一般的に、ストレージ内のデータを伝送路上に配信する際には、その都度、アプリケーションプログラムを介して、データを伝送路に配信するために適したパケット形式に変換しなければならない。同様に、現行のサーバにおけるデータ受信では、その都度、アプリケーションプログラムを介して、パケット形式からストレージに蓄積する際には不要なヘッダを取り除かなければならない。
以上の処理は、すべてCPU(Central Processing Unit)のプログラム処理であり、これらの処理時間が長いほど、実効スループットが低下するという問題がある。
【0005】
【発明が解決しようとする課題】
この発明は、上述のような課題を解決するためになされたものであり、第一の目的は、ユーザデータの受け渡しやデータのパケット形式への変換の際に発生するデータコピーを不要にすることである。
第二の目的は、データコピーを不要にすることにより、ストレージに対するデータ蓄積、および伝送路へのデータ配信の高速化を可能にすることである。
【0006】
【課題を解決するための手段】
この発明に係るネットワークサーバは、伝送路を介してデータを送受信するネットワークサーバにおいて、
上記データを格納するストレージと、
上記伝送路を介してデータを送受信する通信コントローラと、
上記ストレージに対してデータを読み書きするストレージコントローラと、
上記通信コントローラと上記ストレージコントローラとが読み書き可能な記憶領域である共有メモリと、
上記通信コントローラと上記ストレージコントローラとの間で、上記共有メモリに格納したデータを受け渡すことを制御する制御部と
を備えることを特徴とする。
【0007】
【発明の実施の形態】
実施の形態1.
図1は、本発明の実施の形態1である情報配信を目的とするネットワークサーバ1の構成の一例を示すブロック図である。
ネットワークサーバ1は、プログラムを実行するシステムプロセッサ2、システムメモリ3、伝送路4に対してデータの送受信を行う通信コントローラ5、ストレージ6に対してデータの読み書きを行うストレージコントローラ7から構成される。バス8は、上記の構成要素を接続するためのもので、それぞれの情報交換に使用する。
【0008】
システムメモリ3は、システムプロセッサ2で動作する各種プログラムの蓄積部、およびデータの蓄積部として利用する。
【0009】
プログラムには、通信コントローラ5を制御するネットワークドライバ9、通信プロトコルを処理するプロトコルプログラム10、ストレージコントローラ7を制御するストレージドライバ11、ストレージネットプロトコル・プログラム12がある。各種プログラムの蓄積部は、上記に示した複数のプログラムを蓄積(格納)する。
また、上記に一例として示したプログラムは、システムプロセッサ2によって実行される。
また、このストレージデータ高速通信方式では、ストレージネットプロトコルを用いる場合を説明する。
ストレージネットプロトコルは、新規に定義したプロトコルであり、データをIPパケット単位でストレージに蓄積し、アプリケーションの介在なしに、パケット処理(通信コントローラ側の処理を指す)と、ファイル処理(ストレージコントローラ側の処理を指す)を繋ぐことができるゼロコピー・データ転送方式である。
このプロトコルを使用することにより、クライアント端末は、ネットワークを経由して、ネットワークサーバのストレージを制御できる。
【0010】
また、データの蓄積部には、ネットワークドライバ9とストレージドライバ11が共有するドライバ間共有メモリ13がある。ドライバ間共有メモリ13は、双方向のリングバッファから構成される。受信キュー14は、伝送路4からストレージ6へのデータ蓄積用に使用する。また、送信キュー15は、ストレージ6から伝送路4へのデータ配信用に使用する。受信キュー14と送信キュー15は、それぞれ複数個の受信バッファ16、送信バッファ17から構成される。一個のバッファサイズは、IP(Internet Protocol)パケットの最大パケット長(固定)である。
ドライバ間共有メモリ13を採用することで、異種ドライバ間でのデータ受渡しを簡略化し、データ転送に要する時間を短縮することができる。
【0011】
通信コントローラ5は、クライアント端末20から伝送路4上を転送されたIPパケットを、DMA(Direct Memory Access)転送18により、受信キュー14内の受信バッファ16に格納する。
また、ストレージコントローラ7は、ストレージ6から読込んだデータを、DMA転送19により、送信キュー15内の送信バッファ17に格納する。
【0012】
図2に、本方式で使用するIPパケット30の形式の一例を示す図である。
IPパケット30は、ネットワーク層のIPヘッダ31、トランスポート層のプロトコルヘッダ32、サブヘッダ33、データ部35の順で構成される。但し、プロトコルヘッダ32は、無くても良い。また、IPヘッダ31、プロトコルヘッダ32、サブヘッダ33を総称して、ヘッダ部34とする。
IPヘッダ31は、OSI(Open System Interconnection)モデルにおいてネットワーク層の機能を実現するプロトコルに準拠するものである。例えば、RFC(Request For Comment)791で規定されているIP(Internet Protocol)等がある。但し、本発明では、IPヘッダ31は、データリンク層のヘッダを含む。例えば、伝送路4がイーサネット(登録商標)である場合、MAC(Media Access Control)ヘッダになる。
【0013】
プロトコルヘッダ32は、OSIモデルにおいてトランスポート層の機能を実現するプロトコルに準拠するものである。例えば、RFC768で規定されているUDP(User Datagram Protocol)や、RFC793で規定されているTCP(Transmission Control Protocol)等がある。
サブヘッダ33は、送信元と宛先との間で、ストレージデータ高速通信方式(及びストレージデータ通信方法)に関する情報を交換する。サブヘッダ33には、データ部35に格納された種別を示すパラメータを有し、コマンドまたはデータのいずれであるかを示す。
データ部35は、ストレージ6を制御するコマンドや、ストレージ6に蓄積するデータ、または伝送路4に配信するデータを格納する。
【0014】
ネットワークサーバ1では、図2に示すIPパケット30の単位で、データをストレージ6に蓄積する。この時、IPパケット30は最大パケット長に固定とする(一致させる)。
但し、ストレージ6に格納されている時には、IPパケット30のヘッダ部34の設定値は意味がなく、0を設定しておく。
IPパケット30の単位でデータを蓄積することで、ソフトウェアによるIPパケット30化(IPパケット30の単位に変換すること)の手間を省き、パケット処理に要する時間を軽減することができる。
【0015】
図3に、本方式で使用する管理テーブル40の形式の一例を示す図である。
管理テーブル40は、コマンドブロック41、コマンド発行元識別番号42、共有メモリ・アドレス43から構成される。ストレージネットプロトコル・プログラム12は、コマンド毎に管理テーブル40を用意して、コマンド単位で管理する。
ストレージネットプロトコル・プログラム12は、コマンド受信時に管理テーブル40を作成し、コマンド処理終了(完了)時に削除する。管理テーブル40には、処理中のコマンドに対応する管理テーブル40が存在する。
ストレージネットプロトコル・プログラム12は、コマンド処理の完了は、ストレージ6側から結果(正常/異常)の通知がされた場合をトリガとして、管理テーブル40を削除する。
また、管理テーブル40は、システムメモリ3内に記憶される。ストレージネットプロトコル・プログラム12内であってもよい。管理テーブル40は、ネットワークドライバ9とストレージドライバ11とが共有できないメモリとなる。
【0016】
コマンドブロック41は、ストレージ6を制御するために、IPパケット30のデータ部35に格納されて送られてきたコマンドである。例えば、ストレージ6がSCSI(Small Computer System Interface)の場合は、CDB(Command Descriptor Block)になる。
コマンド発行元識別番号42は、コマンドを発行した端末を識別するための識別番号である。例えば、IPアドレスやソケット番号を使用する。
共有メモリ・アドレス43は、コマンドブロック41を実行する際に使用する受信バッファ16または送信バッファ17の先頭位置を示す。データのサイズに応じて、一個または複数個の共有メモリ・アドレス43を登録する。
【0017】
実施の形態1では、ネットワークドライバ9とストレージドライバ11の異種ドライバ間で情報交換するために、ストレージネットプロトコル・プログラム12とドライバ間共有メモリ13の2種類の経路を持つ(図1)。
データは、ストレージネットプロトコル・プログラム12を介さずに、ドライバ間共有メモリ13を通じて受け渡す。
コマンドやデータに関する情報(格納位置等)は、ストレージネットプロトコル・プログラム12を介して受け渡す。
2種類の経路を使用することで、異種ドライバ間でのデータ受け渡しを簡略化し、プログラムを介して処理する情報量を最小限に減らすことができる。それにより、データ転送に要する時間を短縮することができるとともに、ホストCPUの負荷を軽減することができる。
【0018】
以下に、具体的な動作について説明する。
図4は、ネットワークサーバ1の全体の動作の一例を表す図である。
ネットワークサーバ1は、起動後(ステップ61)、初期化処理を実施する(ステップ62)。初期化処理後、ネットワークサーバ1は、クライアント端末20から送信されるIPパケットの受信を待つ(ステップ63)。ネットワークサーバ1は、IPパケットに含まれるコマンドに基づいて、処理を実施する(ステップ64以降)。ネットワークサーバ1は、処理終了後、IPパケット受信に戻る(ステップ63)。上記動作において、障害等の異常発生の検出、あるいは、管理者からの指示、その他によって、ネットワークサーバ1は停止(立ち下げ、終了)する(図示していない)。
【0019】
ネットワークサーバ1が、クライアント端末20から受信するコマンドとしては、読込みコマンド、書込みコマンド、ストレージ6のモード設定コマンド、設定内容の取得コマンド、エラー情報取得コマンド、等のコマンドが一例としてあげられる。
【0020】
まずは、ネットワークサーバの初期化処理(ステップ62)について説明する。
ストレージネットプロトコル・プログラム12は、ネットワークサーバ1の起動時に、ドライバ間共有メモリ13として、受信キュー14と送信キュー15を用意する。
【0021】
ここで、ドライバ間共有メモリ13について説明する。
受信キュー14は、伝送路4から受信した順序でIPパケット30を受信バッファ16に格納する。また、一個の書込みコマンドに対するデータとして送られてくる、連続したIPパケット30をすべて受信完了した順序でストレージ6に蓄積する。
例えば、図5は、端末A51と端末B52の2台から、ネットワークサーバ1に対して、書込みが実行された場合を示す図である。
コマンドA53は、端末A51から発行された書込みコマンドである。
コマンドB54は、端末B52から発行された書込みコマンドである。
データA(1)55とデータA(2)57は、端末A51がネットワークサーバ1に書込むデータであり、二個のIPパケット30に分けて転送される。
データB56は、端末B52がネットワークサーバ1に書込むデータであり、一個のIPパケット30で転送される。
この時、端末A51からのコマンドA53が先に発行されているが、端末B52からのすべてのデータを受信する方が早いため、端末A51からのデータA(1)55より、端末B52からのデータB56の方が先行してストレージ6に蓄積される。
【0022】
送信キュー15は、ストレージ6から読込んだIPパケット30を送信バッファ17に格納する。また、送信バッファ17に格納された順序で伝送路4に送出する。
【0023】
また、通信コントローラ5が、伝送路4から受信したIPパケット30を格納できるように、ストレージネットプロトコル・プログラム12は、初期化時に予め、通信コントローラ5に用意したすべての受信バッファ16を渡しておく。
なお、送信バッファ17は、ストレージ6からデータを読込む度に、ストレージネットプロトコル・プログラム12により指定されるため、初期化時には渡さない。
【0024】
次に、ネットワークサーバ1において、IPパケット30を受信した場合の動作について説明する。
通信コントローラ5は、伝送路4からIPパケット30を受信すると(ステップ63)、DMA(Direct Memory Access)転送により、ドライバ間共有メモリ13内の受信キュー14に、IPパケット30を格納する(ステップ64)。通信コントローラ5は、IPパケット30の格納が完了すると、システムプロセッサ2に対して受信割込みを通知する(ステップ65)。
【0025】
システムプロセッサ2は、通信コントローラ5からの受信割込みを検出すると、ネットワークドライバ9を起動する。ネットワークドライバ9は、受信したIPパケット30を格納した受信バッファ16の先頭位置を、プロトコルプログラム10に通知する。
【0026】
プロトコルプログラム10は、ネットワークドライバ9より渡された受信バッファ16の先頭位置を基にして、ドライバ間共有メモリ13上の該当する受信バッファ16に直接アクセスし、IPヘッダ31およびプロトコルヘッダ32の内容に従って処理を行う(ステップ66)。
IPパケット30の種類がストレージネットプロトコルの場合、プロトコルプログラム10は、ネットワークドライバ9より渡された受信バッファ16の先頭位置、および送信元の識別番号を、ストレージネットプロトコル・プログラム12に通知する。
【0027】
ストレージネットプロトコル・プログラム12は、プロトコルプログラム10より渡された受信バッファ16の先頭位置を基にして、ドライバ間共有メモリ13上の該当する受信バッファ16に直接アクセスし、サブヘッダ33の内容に従って処理を行う(ステップ67)。
すなわち、サブヘッダ33は、データ部35に格納された種別を示すパラメータを有するため、ストレージネットプロトコル・プログラム12は、上記パラメータに従って、処理を実施する。
【0028】
次に、ストレージネットプロトコル・プログラム12が、ネットワークサーバが受信したIPパケットに含まれるコマンドを取りだし、その後、コマンドの実行を指示する処理について説明する(ステップ68)。
コマンドを取り出す処理(図6)、データを配信する処理(図7)、データを蓄積する処理(図8)について説明する。
なお、データ蓄積(受信)処理は、データ書込みコマンドを受信した場合であり、データ配信処理は、データ読込みコマンドを受信した場合である。
【0029】
まず、データ部35にコマンドが格納されている場合の処理について、図6のコマンド受信処理の一例を示すフロー図を用いて説明する。
ストレージネットプロトコル・プログラム12は、サブヘッダ33によりデータ部35に格納されているものをチェックする(ステップ71)。
データ部35にコマンドが格納されている場合、ストレージネットプロトコル・プログラム12は、IPパケット30のデータ部35にセットされているコマンドブロックを抽出する(ステップ72)。
【0030】
次に、ストレージネットプロトコル・プログラム12は、受信したコマンドに対して、新規に管理テーブル40を生成する(ステップ73)。
ステップ72で抽出したコマンドブロックを、管理テーブル40のコマンドブロック41にそのまま設定する(ステップ74)。
また、コマンドの発行元を特定するために、プロトコルプログラム10から渡された送信元の識別番号を、管理テーブル40のコマンド発行元識別番号42に設定する(ステップ75)。
【0031】
次に、取得したコマンドの種別をチェックして、コマンドの種別に応じて以降の処理を行う(ステップ76)。
読込みコマンドの場合、ストレージネットプロトコル・プログラム12は、ステップ72で抽出したコマンドブロックで指定されたサイズに合わせて、ドライバ間共有メモリ13の送信キュー15から送信バッファ17を必要分確保して、その送信バッファ17のアドレスを、管理テーブル40の共有メモリ・アドレス43に登録する(ステップ77)。
書込みコマンドの場合、管理テーブル40の共有メモリ・アドレス43は、この時点(コマンド受信の時点)では無効であるため、何も設定しない。
読込みコマンドまたは書込みコマンド以外の場合は、管理テーブル40の共有メモリ・アドレス43には何も設定しない。
【0032】
ストレージネットプロトコル・プログラム12は、最後に、作成した管理テーブル40を、ストレージドライバ11に渡し、コマンドの実行を指示する(ステップ78)。
【0033】
ストレージドライバ11は、ストレージネットプロトコル・プログラム12から指示を受けると、渡された管理テーブル40からコマンドブロック41を抽出して、ストレージコントローラ7にそのまま発行する。
この時、読込みコマンドの場合、ストレージコントローラ7に対して、管理テーブル40の共有メモリ・アドレス43をDMA転送先に指定する。
また、書込みコマンドの場合、データ到着時、すなわち実際にデータを受取りストレージ6に書込む際に、DMA転送元を指定するため、この時点ではコマンドブロック41を発行するだけである。
【0034】
次に、読込みコマンドまたは書込みコマンドに続いて転送されるデータに対する処理について、データ配信の場合(読込みコマンド受信時)と、データ蓄積の場合(書込みコマンド受信時)に分けて説明する。
【0035】
まず、データ配信の場合について、図7のデータ配信処理の一例を示すフロー図を用いて説明する。
ネットワークサーバ1のデータ配信処理の概略動作は、ストレージ6内に蓄積されたデータの内、クライアント端末20から要求されたデータを、クライアント端末20に対して配信することである。
【0036】
ストレージ6は、ストレージコントローラ7により読込みコマンドが実行されると、DMA転送19により、ストレージ6内の該当するデータを、管理テーブル40の共有メモリ・アドレス43で指定された送信バッファ17に格納する。
なお、データのサイズによって、一個もしくは複数個の送信バッファ17を使用する(ステップ81)。
ストレージコントローラ7は、データのDMA転送19が完了すると、システムプロセッサ2に対して受信割込みを通知する。
【0037】
ここで、一般的に、通信コントローラ5とストレージコントローラ7では、DMA転送できるブロックサイズに違いがある。例えば、通信コントローラ4がイーサネット(登録商標)の場合は、最大1518バイトである。一方、ストレージコントローラ7がSCSIの場合は、最大64Kバイトである。このようにサイズに差があるため、ストレージコントローラ7がDMA転送19したデータは、複数個のIPパケット30で構成される。
【0038】
システムプロセッサ2は、ストレージコントローラ7からのDMA転送完了割込みを検出すると、ストレージドライバ11を起動する。ストレージドライバ11は、データのDMA転送19が完了したことを、ストレージネットプロトコル・プログラム12に通知する(ステップ82)。
【0039】
ストレージネットプロトコル・プログラム12は、コマンドブロック41で指定したすべてのデータをストレージ6から読込み終わると、IPパケット30のサブヘッダ33を設定する。この時、ドライバ間共有メモリ13に置いてあるIPパケット30を直接操作するため、パケットのコピーは発生しない(ステップ83)。
そして、管理テーブル40内にあるすべての共有メモリ・アドレス43で指定された、送信バッファ17に格納されているIPパケット30のサブヘッダ33の設定が完了したことを確認する(ステップ84)。
すべての設定が完了した時点で、ストレージネットプロトコル・プログラム12は、その管理テーブル40をプロトコルプログラム10に渡す(ステップ85)。
【0040】
プロトコルプログラム10は、IPパケット30のIPヘッダ31およびプロトコルヘッダ32を設定する。この時、ドライバ間共有メモリ13に置いてあるIPパケット30を直接操作するため、パケットのコピーは発生しない(ステップ86)。
そして、管理テーブル40内にあるすべての共有メモリ・アドレス43で指定された、送信バッファ17に格納されているIPパケット30のIPヘッダ31およびプロトコルヘッダ32の設定が完了したことを確認する(ステップ87)。
すべての設定が完了した時点で、プロトコルプログラム10は、その管理テーブル40をネットワークドライバ9に渡す(ステップ88)。
【0041】
ネットワークドライバ9は、プロトコルプログラム10より渡された管理テーブル40内にあるすべての共有メモリ・アドレス43で指定された、送信バッファ17に格納されているIPパケット30を、DMA転送18により、伝送路4に送出する(ステップ89)。
前述した通り、読込みコマンドで読出したデータは、一個もしくは複数個の送信バッファ17に格納されているため、通信コントローラ5はその回数分DMA転送18することになる。
そして、管理テーブル40内にあるすべての共有メモリ・アドレス43で指定された、送信バッファ17に格納されているIPパケット30の送信が完了したことを確認する(ステップ90)。
すべての送信が完了した時点で、ネットワークドライバ9は、その管理テーブル40、すなわち処理完了した送信バッファ17の先頭位置を、ストレージネットプロトコル・プログラム12に返す(ステップ91)。
【0042】
ストレージネットプロトコル・プログラム12は、ネットワークドライバ9より返された管理テーブル40内にあるすべての共有メモリ・アドレス43で指定された、送信バッファ17をクリアし、次のIPパケット30送信に備える(ステップ92)。
【0043】
本方式のデータ配信では、ソフトウェアがドライバ間共有メモリ13上のIPパケット30を直接操作することで、システムメモリ3内のデータコピーを不要にすることができる。
また、本方式のデータ配信では、ストレージ6内に蓄積されたデータを、伝送路4に対して送出する時に、システムメモリ3内でのデータコピーが一度も必要ない。このように、データのゼロコピー化が実現でき、データ転送に要する時間を短縮することができる。
【0044】
次に、データ蓄積の場合について、図8のデータ蓄積処理の一例を示すフロー図を用いて説明する。
ネットワークサーバ1のデータ蓄積処理の概略動作は、クライアント端末20から受信したデータを、ストレージ6に蓄積することである。
【0045】
通信コントローラ5は、伝送路4からIPパケット30を受信すると、初期化時に予め渡されている受信バッファ16の内、データがまだ格納されていない未使用の受信バッファ16に、DMA転送18により、IPパケット30を格納する(ステップ101)。
通信コントローラ5は、IPパケット30の格納が完了すると、システムプロセッサ2に対して受信割込みを通知する。
【0046】
システムプロセッサ2は、通信コントローラ5からの受信割込みを検出すると、ネットワークドライバ9を起動する。ネットワークドライバ9は、受信したIPパケット30を格納した受信バッファ16の先頭位置(アドレス)を、プロトコルプログラム10に通知する(ステップ102)。ネットワークドライバ9は、受信バッファ16の先頭位置をシステムプロセッサから通知されるか、自ら検出するか等により取得する。
【0047】
プロトコルプログラム10は、ネットワークドライバ9より渡された受信バッファ16の先頭位置を基にして、ドライバ間共有メモリ13上の該当する受信バッファ16に直接アクセスし、IPヘッダ31およびプロトコルヘッダ32の内容に従って処理を行う(ステップ103)。
【0048】
IPパケット30の種類を確認し(ステップ104)、IPパケット30の種類がストレージネットプロトコルの場合、プロトコルプログラム10は、ネットワークドライバ9より渡された受信バッファ16の先頭位置、および送信元の識別番号を、ストレージネットプロトコル・プログラム12に通知する(ステップ105)。
また、IPパケット30の種類がストレージネットプロトコル以外の場合は、プロトコルに応じて、適切な処理を行う(ステップ115)。
ストレージネットプロトコルと通常のTCP/IPパケットを混在可能とすることで、互換性を確保することができる。
【0049】
ストレージネットプロトコル・プログラム12は、プロトコルプログラム10より渡された送信元の識別番号から、該当する管理テーブル40を特定し(ステップ106)、プロトコルプログラム10より渡された受信バッファ16の先頭位置を、管理テーブル40の共有メモリ・アドレス43に登録する(ステップ107)。
そして、管理テーブル40のコマンドブロック41で指定されたサイズ分のデータを受信したか否かを確認する(ステップ108)。
コマンドブロック41で指定されたサイズ分のデータを受信した時点で、ドライバ間共有メモリ13上の該当するIPパケット30のヘッダ部34の内容をクリアする。この時、ドライバ間共有メモリ13に置いてあるIPパケット30を直接操作するため、パケットのコピーは発生しない(ステップ109)。
ストレージネットプロトコル・プログラム12は、最後に、管理テーブル40をストレージドライバ11に通知する(ステップ110)。
【0050】
ストレージドライバ11は、ストレージネットプロトコル・プログラム12より渡された管理テーブル40のすべての共有メモリ・アドレス43で指定された、受信バッファ16に格納されているIPパケット30を、DMA転送19により、そのままストレージ6に蓄積する(ステップ111)。
すべての書込みが完了した時点で、ストレージドライバ11は、その管理テーブル40、すなわち処理完了した受信バッファ16の先頭位置を、ストレージネットプロトコル・プログラム12に返す(ステップ112)。
【0051】
ストレージネットプロトコル・プログラム12は、ストレージドライバ11より返された管理テーブル40内にあるすべての共有メモリ・アドレス43で指定された、受信バッファ16をクリアする(ステップ113)。
最後に、次のIPパケット30受信に備えて、ストレージネットプロトコル・プログラム12は、受信バッファ16をネットワークドライバ9に渡す(ステップ114)。
【0052】
本方式のデータ蓄積では、ソフトウェアがドライバ間共有メモリ13上のIPパケット30を直接操作することで、システムメモリ3内のデータコピーを不要にすることができる。
また、本方式のデータ蓄積では、伝送路4から受信したデータを、ストレージ6に蓄積する時に、システムメモリ3内でのデータコピーが一度も必要ない。このように、データのゼロコピー化が実現でき、データ転送に要する時間を短縮することができる。
【0053】
実施の形態2.
実施の形態1では、図1の構成を用いて説明したが、図1の構成にかぎられるわけではない。
図1のシステムメモリ3は、少なくとも、共有メモリ(ドライバ間共有メモリ13に対応する)と制御部(ネットワークドライバ9、プロトコルプログラム10、ストレージドライバ11、ストレージネットプロトコル・プログラム12とに対応する)とを備える場合であってもよい。
共有メモリは、通信コントローラ5とストレージコントローラ7とが読み書き可能な記憶領域である。
制御部は、通信コントローラ5とストレージコントローラ7との間で、共有メモリに格納したデータを受け渡すことを制御する。すなわち、制御部は、通信コントローラ5とストレージコントローラ7とのいずれか一方によって共有メモリへ書き込まれたデータの格納位置を、他方へ通知することによって、通信コントローラ5とストレージコントローラ7との間で、データ(IPパケット)を受け渡すことができる機能を有する。
【0054】
また、制御部の一例としては、通信コントローラ5を制御する通信ドライバ部(ネットワークドライバ9、プロトコルプログラム10に対応する)と、ストレージコントローラ7を制御するストレージドライバ部(ストレージドライバ11に対応する)と、通信ドライバ部とストレージドライバ部との間で共有メモリ13へ格納したデータの格納位置を受け渡して、通信コントローラ5とストレージコントローラ7との間で、共有メモリに格納したデータを受け渡すことを仲介する仲介部(ストレージネットプロトコル・プログラム12に対応する)とを備える場合であってもよい。
さらに、上記通信ドライバ部は、上記通信コントローラがアクセスするために必要な情報を上記共有メモリに格納されるデータへ付加する機能を有する。
また、上記ストレージドライバ部は、上記ストレージコントローラが上記共有メモリに格納されるデータを読み書きするために必要な情報を上記データへ付加する機能を有する。
上記のような機能を有するプログラムをシステムメモリ3へ格納し、システムプロセッサ2によって実施させる構成であってもよい。
【0055】
また、システムメモリ3へ格納する各種プログラムは、計算機で読み取り可能な記録媒体へ記録することが可能である。
【0056】
【発明の効果】
この発明によれば、ネットワークサーバにおいて、ドライバ間共有メモリへデータを格納することによって、それぞれの処理においてデータをコピーすることなく、通信コントローラとストレージコントローラとの間でデータの受け渡しを可能にし、データの配信及びデータの蓄積の高速化を図ることができる。
【図面の簡単な説明】
【図1】実施の形態1である情報配信を目的とするネットワークサーバ1の構成の一例を示すブロック図。
【図2】IPパケット30の形式の一例を示す図。
【図3】管理テーブル40の形式の一例を示す図。
【図4】ネットワークサーバ1の全体の動作の一例を表す図。
【図5】端末A51と端末B52の2台から、ネットワークサーバ1に対して、書込みが実行された場合を示す図。
【図6】コマンド受信処理の一例を示すフロー図。
【図7】データ配信処理の一例を示すフロー図。
【図8】データ蓄積処理の一例を示すフロー図。
【符号の説明】
1 ネットワークサーバ、2 システムプロセッサ、3 システムメモリ、4伝送路、5 通信コントローラ、6 ストレージ、7 ストレージコントローラ、8 バス、9 ネットワークドライバ、10 プロトコルプログラム、11ストレージドライバ、12 ストレージネットプロトコル・プログラム、13ドライバ共有メモリ、14 受信キュー、15 送信キュー、16 受信バッファ、17 送信バッファ、18,19 DMA転送、20 クライアント端末、30 IPパケット、31 IPヘッダ、32 プロトコルヘッダ、33 サブヘッダ、35 データ部、40 管理テーブル、41 コマンドブロック、42 コマンド発行元識別番号、43 共有メモリ・アドレス。
【発明の属する技術分野】
この発明は、情報配信を目的とするサーバ用のソフトウェアに関する。
【0002】
【従来の技術】
従来の通信制御装置においては、受信が終了すると、通信コントローラは、受信割込み信号によりシステムプロセッサに受信があったことを知らせる。システムプロセッサは、これによりドライバの受信割込み処理部を起動する。受信割込み処理部は受信データが入っているバッファを共有バッファから取り出してプロトコル受信キューにつなぎ、プロトコルプログラムの送受信処理部を起動する。送受信処理部は、プロトコル受信キューから受信データを取り出し、通信プロトコル処理を行った後、その中からアプリケーションデータだけをアプリケーションプログラムに引き渡す。共有バッファをプロトコル受信キューに実際につなぐ方法としては、共有バッファの先頭位置を示すポインタをプロトコル受信キューにセットすることにより行う。従って、受信データが移動するわけではない。また、送信動作は受信と逆の動作になる(例えば、特許文献1参照)。
【0003】
【特許文献1】
特開平6−125365号公報(第4−5頁、第7頁、第13図)
【0004】
上記のような従来の通信制御装置におけるデータ送受信では、通信コントローラとプロトコルプログラムが通信バッファを共有するのとは異なり、プロトコルプログラムとアプリケーションプログラムの間では共有バッファを持たないため、ユーザデータの受け渡しの際に、同一メモリ内でデータコピーが発生する。
また、現行のサーバにおけるデータ送信では、一般的に、ストレージ内のデータを伝送路上に配信する際には、その都度、アプリケーションプログラムを介して、データを伝送路に配信するために適したパケット形式に変換しなければならない。同様に、現行のサーバにおけるデータ受信では、その都度、アプリケーションプログラムを介して、パケット形式からストレージに蓄積する際には不要なヘッダを取り除かなければならない。
以上の処理は、すべてCPU(Central Processing Unit)のプログラム処理であり、これらの処理時間が長いほど、実効スループットが低下するという問題がある。
【0005】
【発明が解決しようとする課題】
この発明は、上述のような課題を解決するためになされたものであり、第一の目的は、ユーザデータの受け渡しやデータのパケット形式への変換の際に発生するデータコピーを不要にすることである。
第二の目的は、データコピーを不要にすることにより、ストレージに対するデータ蓄積、および伝送路へのデータ配信の高速化を可能にすることである。
【0006】
【課題を解決するための手段】
この発明に係るネットワークサーバは、伝送路を介してデータを送受信するネットワークサーバにおいて、
上記データを格納するストレージと、
上記伝送路を介してデータを送受信する通信コントローラと、
上記ストレージに対してデータを読み書きするストレージコントローラと、
上記通信コントローラと上記ストレージコントローラとが読み書き可能な記憶領域である共有メモリと、
上記通信コントローラと上記ストレージコントローラとの間で、上記共有メモリに格納したデータを受け渡すことを制御する制御部と
を備えることを特徴とする。
【0007】
【発明の実施の形態】
実施の形態1.
図1は、本発明の実施の形態1である情報配信を目的とするネットワークサーバ1の構成の一例を示すブロック図である。
ネットワークサーバ1は、プログラムを実行するシステムプロセッサ2、システムメモリ3、伝送路4に対してデータの送受信を行う通信コントローラ5、ストレージ6に対してデータの読み書きを行うストレージコントローラ7から構成される。バス8は、上記の構成要素を接続するためのもので、それぞれの情報交換に使用する。
【0008】
システムメモリ3は、システムプロセッサ2で動作する各種プログラムの蓄積部、およびデータの蓄積部として利用する。
【0009】
プログラムには、通信コントローラ5を制御するネットワークドライバ9、通信プロトコルを処理するプロトコルプログラム10、ストレージコントローラ7を制御するストレージドライバ11、ストレージネットプロトコル・プログラム12がある。各種プログラムの蓄積部は、上記に示した複数のプログラムを蓄積(格納)する。
また、上記に一例として示したプログラムは、システムプロセッサ2によって実行される。
また、このストレージデータ高速通信方式では、ストレージネットプロトコルを用いる場合を説明する。
ストレージネットプロトコルは、新規に定義したプロトコルであり、データをIPパケット単位でストレージに蓄積し、アプリケーションの介在なしに、パケット処理(通信コントローラ側の処理を指す)と、ファイル処理(ストレージコントローラ側の処理を指す)を繋ぐことができるゼロコピー・データ転送方式である。
このプロトコルを使用することにより、クライアント端末は、ネットワークを経由して、ネットワークサーバのストレージを制御できる。
【0010】
また、データの蓄積部には、ネットワークドライバ9とストレージドライバ11が共有するドライバ間共有メモリ13がある。ドライバ間共有メモリ13は、双方向のリングバッファから構成される。受信キュー14は、伝送路4からストレージ6へのデータ蓄積用に使用する。また、送信キュー15は、ストレージ6から伝送路4へのデータ配信用に使用する。受信キュー14と送信キュー15は、それぞれ複数個の受信バッファ16、送信バッファ17から構成される。一個のバッファサイズは、IP(Internet Protocol)パケットの最大パケット長(固定)である。
ドライバ間共有メモリ13を採用することで、異種ドライバ間でのデータ受渡しを簡略化し、データ転送に要する時間を短縮することができる。
【0011】
通信コントローラ5は、クライアント端末20から伝送路4上を転送されたIPパケットを、DMA(Direct Memory Access)転送18により、受信キュー14内の受信バッファ16に格納する。
また、ストレージコントローラ7は、ストレージ6から読込んだデータを、DMA転送19により、送信キュー15内の送信バッファ17に格納する。
【0012】
図2に、本方式で使用するIPパケット30の形式の一例を示す図である。
IPパケット30は、ネットワーク層のIPヘッダ31、トランスポート層のプロトコルヘッダ32、サブヘッダ33、データ部35の順で構成される。但し、プロトコルヘッダ32は、無くても良い。また、IPヘッダ31、プロトコルヘッダ32、サブヘッダ33を総称して、ヘッダ部34とする。
IPヘッダ31は、OSI(Open System Interconnection)モデルにおいてネットワーク層の機能を実現するプロトコルに準拠するものである。例えば、RFC(Request For Comment)791で規定されているIP(Internet Protocol)等がある。但し、本発明では、IPヘッダ31は、データリンク層のヘッダを含む。例えば、伝送路4がイーサネット(登録商標)である場合、MAC(Media Access Control)ヘッダになる。
【0013】
プロトコルヘッダ32は、OSIモデルにおいてトランスポート層の機能を実現するプロトコルに準拠するものである。例えば、RFC768で規定されているUDP(User Datagram Protocol)や、RFC793で規定されているTCP(Transmission Control Protocol)等がある。
サブヘッダ33は、送信元と宛先との間で、ストレージデータ高速通信方式(及びストレージデータ通信方法)に関する情報を交換する。サブヘッダ33には、データ部35に格納された種別を示すパラメータを有し、コマンドまたはデータのいずれであるかを示す。
データ部35は、ストレージ6を制御するコマンドや、ストレージ6に蓄積するデータ、または伝送路4に配信するデータを格納する。
【0014】
ネットワークサーバ1では、図2に示すIPパケット30の単位で、データをストレージ6に蓄積する。この時、IPパケット30は最大パケット長に固定とする(一致させる)。
但し、ストレージ6に格納されている時には、IPパケット30のヘッダ部34の設定値は意味がなく、0を設定しておく。
IPパケット30の単位でデータを蓄積することで、ソフトウェアによるIPパケット30化(IPパケット30の単位に変換すること)の手間を省き、パケット処理に要する時間を軽減することができる。
【0015】
図3に、本方式で使用する管理テーブル40の形式の一例を示す図である。
管理テーブル40は、コマンドブロック41、コマンド発行元識別番号42、共有メモリ・アドレス43から構成される。ストレージネットプロトコル・プログラム12は、コマンド毎に管理テーブル40を用意して、コマンド単位で管理する。
ストレージネットプロトコル・プログラム12は、コマンド受信時に管理テーブル40を作成し、コマンド処理終了(完了)時に削除する。管理テーブル40には、処理中のコマンドに対応する管理テーブル40が存在する。
ストレージネットプロトコル・プログラム12は、コマンド処理の完了は、ストレージ6側から結果(正常/異常)の通知がされた場合をトリガとして、管理テーブル40を削除する。
また、管理テーブル40は、システムメモリ3内に記憶される。ストレージネットプロトコル・プログラム12内であってもよい。管理テーブル40は、ネットワークドライバ9とストレージドライバ11とが共有できないメモリとなる。
【0016】
コマンドブロック41は、ストレージ6を制御するために、IPパケット30のデータ部35に格納されて送られてきたコマンドである。例えば、ストレージ6がSCSI(Small Computer System Interface)の場合は、CDB(Command Descriptor Block)になる。
コマンド発行元識別番号42は、コマンドを発行した端末を識別するための識別番号である。例えば、IPアドレスやソケット番号を使用する。
共有メモリ・アドレス43は、コマンドブロック41を実行する際に使用する受信バッファ16または送信バッファ17の先頭位置を示す。データのサイズに応じて、一個または複数個の共有メモリ・アドレス43を登録する。
【0017】
実施の形態1では、ネットワークドライバ9とストレージドライバ11の異種ドライバ間で情報交換するために、ストレージネットプロトコル・プログラム12とドライバ間共有メモリ13の2種類の経路を持つ(図1)。
データは、ストレージネットプロトコル・プログラム12を介さずに、ドライバ間共有メモリ13を通じて受け渡す。
コマンドやデータに関する情報(格納位置等)は、ストレージネットプロトコル・プログラム12を介して受け渡す。
2種類の経路を使用することで、異種ドライバ間でのデータ受け渡しを簡略化し、プログラムを介して処理する情報量を最小限に減らすことができる。それにより、データ転送に要する時間を短縮することができるとともに、ホストCPUの負荷を軽減することができる。
【0018】
以下に、具体的な動作について説明する。
図4は、ネットワークサーバ1の全体の動作の一例を表す図である。
ネットワークサーバ1は、起動後(ステップ61)、初期化処理を実施する(ステップ62)。初期化処理後、ネットワークサーバ1は、クライアント端末20から送信されるIPパケットの受信を待つ(ステップ63)。ネットワークサーバ1は、IPパケットに含まれるコマンドに基づいて、処理を実施する(ステップ64以降)。ネットワークサーバ1は、処理終了後、IPパケット受信に戻る(ステップ63)。上記動作において、障害等の異常発生の検出、あるいは、管理者からの指示、その他によって、ネットワークサーバ1は停止(立ち下げ、終了)する(図示していない)。
【0019】
ネットワークサーバ1が、クライアント端末20から受信するコマンドとしては、読込みコマンド、書込みコマンド、ストレージ6のモード設定コマンド、設定内容の取得コマンド、エラー情報取得コマンド、等のコマンドが一例としてあげられる。
【0020】
まずは、ネットワークサーバの初期化処理(ステップ62)について説明する。
ストレージネットプロトコル・プログラム12は、ネットワークサーバ1の起動時に、ドライバ間共有メモリ13として、受信キュー14と送信キュー15を用意する。
【0021】
ここで、ドライバ間共有メモリ13について説明する。
受信キュー14は、伝送路4から受信した順序でIPパケット30を受信バッファ16に格納する。また、一個の書込みコマンドに対するデータとして送られてくる、連続したIPパケット30をすべて受信完了した順序でストレージ6に蓄積する。
例えば、図5は、端末A51と端末B52の2台から、ネットワークサーバ1に対して、書込みが実行された場合を示す図である。
コマンドA53は、端末A51から発行された書込みコマンドである。
コマンドB54は、端末B52から発行された書込みコマンドである。
データA(1)55とデータA(2)57は、端末A51がネットワークサーバ1に書込むデータであり、二個のIPパケット30に分けて転送される。
データB56は、端末B52がネットワークサーバ1に書込むデータであり、一個のIPパケット30で転送される。
この時、端末A51からのコマンドA53が先に発行されているが、端末B52からのすべてのデータを受信する方が早いため、端末A51からのデータA(1)55より、端末B52からのデータB56の方が先行してストレージ6に蓄積される。
【0022】
送信キュー15は、ストレージ6から読込んだIPパケット30を送信バッファ17に格納する。また、送信バッファ17に格納された順序で伝送路4に送出する。
【0023】
また、通信コントローラ5が、伝送路4から受信したIPパケット30を格納できるように、ストレージネットプロトコル・プログラム12は、初期化時に予め、通信コントローラ5に用意したすべての受信バッファ16を渡しておく。
なお、送信バッファ17は、ストレージ6からデータを読込む度に、ストレージネットプロトコル・プログラム12により指定されるため、初期化時には渡さない。
【0024】
次に、ネットワークサーバ1において、IPパケット30を受信した場合の動作について説明する。
通信コントローラ5は、伝送路4からIPパケット30を受信すると(ステップ63)、DMA(Direct Memory Access)転送により、ドライバ間共有メモリ13内の受信キュー14に、IPパケット30を格納する(ステップ64)。通信コントローラ5は、IPパケット30の格納が完了すると、システムプロセッサ2に対して受信割込みを通知する(ステップ65)。
【0025】
システムプロセッサ2は、通信コントローラ5からの受信割込みを検出すると、ネットワークドライバ9を起動する。ネットワークドライバ9は、受信したIPパケット30を格納した受信バッファ16の先頭位置を、プロトコルプログラム10に通知する。
【0026】
プロトコルプログラム10は、ネットワークドライバ9より渡された受信バッファ16の先頭位置を基にして、ドライバ間共有メモリ13上の該当する受信バッファ16に直接アクセスし、IPヘッダ31およびプロトコルヘッダ32の内容に従って処理を行う(ステップ66)。
IPパケット30の種類がストレージネットプロトコルの場合、プロトコルプログラム10は、ネットワークドライバ9より渡された受信バッファ16の先頭位置、および送信元の識別番号を、ストレージネットプロトコル・プログラム12に通知する。
【0027】
ストレージネットプロトコル・プログラム12は、プロトコルプログラム10より渡された受信バッファ16の先頭位置を基にして、ドライバ間共有メモリ13上の該当する受信バッファ16に直接アクセスし、サブヘッダ33の内容に従って処理を行う(ステップ67)。
すなわち、サブヘッダ33は、データ部35に格納された種別を示すパラメータを有するため、ストレージネットプロトコル・プログラム12は、上記パラメータに従って、処理を実施する。
【0028】
次に、ストレージネットプロトコル・プログラム12が、ネットワークサーバが受信したIPパケットに含まれるコマンドを取りだし、その後、コマンドの実行を指示する処理について説明する(ステップ68)。
コマンドを取り出す処理(図6)、データを配信する処理(図7)、データを蓄積する処理(図8)について説明する。
なお、データ蓄積(受信)処理は、データ書込みコマンドを受信した場合であり、データ配信処理は、データ読込みコマンドを受信した場合である。
【0029】
まず、データ部35にコマンドが格納されている場合の処理について、図6のコマンド受信処理の一例を示すフロー図を用いて説明する。
ストレージネットプロトコル・プログラム12は、サブヘッダ33によりデータ部35に格納されているものをチェックする(ステップ71)。
データ部35にコマンドが格納されている場合、ストレージネットプロトコル・プログラム12は、IPパケット30のデータ部35にセットされているコマンドブロックを抽出する(ステップ72)。
【0030】
次に、ストレージネットプロトコル・プログラム12は、受信したコマンドに対して、新規に管理テーブル40を生成する(ステップ73)。
ステップ72で抽出したコマンドブロックを、管理テーブル40のコマンドブロック41にそのまま設定する(ステップ74)。
また、コマンドの発行元を特定するために、プロトコルプログラム10から渡された送信元の識別番号を、管理テーブル40のコマンド発行元識別番号42に設定する(ステップ75)。
【0031】
次に、取得したコマンドの種別をチェックして、コマンドの種別に応じて以降の処理を行う(ステップ76)。
読込みコマンドの場合、ストレージネットプロトコル・プログラム12は、ステップ72で抽出したコマンドブロックで指定されたサイズに合わせて、ドライバ間共有メモリ13の送信キュー15から送信バッファ17を必要分確保して、その送信バッファ17のアドレスを、管理テーブル40の共有メモリ・アドレス43に登録する(ステップ77)。
書込みコマンドの場合、管理テーブル40の共有メモリ・アドレス43は、この時点(コマンド受信の時点)では無効であるため、何も設定しない。
読込みコマンドまたは書込みコマンド以外の場合は、管理テーブル40の共有メモリ・アドレス43には何も設定しない。
【0032】
ストレージネットプロトコル・プログラム12は、最後に、作成した管理テーブル40を、ストレージドライバ11に渡し、コマンドの実行を指示する(ステップ78)。
【0033】
ストレージドライバ11は、ストレージネットプロトコル・プログラム12から指示を受けると、渡された管理テーブル40からコマンドブロック41を抽出して、ストレージコントローラ7にそのまま発行する。
この時、読込みコマンドの場合、ストレージコントローラ7に対して、管理テーブル40の共有メモリ・アドレス43をDMA転送先に指定する。
また、書込みコマンドの場合、データ到着時、すなわち実際にデータを受取りストレージ6に書込む際に、DMA転送元を指定するため、この時点ではコマンドブロック41を発行するだけである。
【0034】
次に、読込みコマンドまたは書込みコマンドに続いて転送されるデータに対する処理について、データ配信の場合(読込みコマンド受信時)と、データ蓄積の場合(書込みコマンド受信時)に分けて説明する。
【0035】
まず、データ配信の場合について、図7のデータ配信処理の一例を示すフロー図を用いて説明する。
ネットワークサーバ1のデータ配信処理の概略動作は、ストレージ6内に蓄積されたデータの内、クライアント端末20から要求されたデータを、クライアント端末20に対して配信することである。
【0036】
ストレージ6は、ストレージコントローラ7により読込みコマンドが実行されると、DMA転送19により、ストレージ6内の該当するデータを、管理テーブル40の共有メモリ・アドレス43で指定された送信バッファ17に格納する。
なお、データのサイズによって、一個もしくは複数個の送信バッファ17を使用する(ステップ81)。
ストレージコントローラ7は、データのDMA転送19が完了すると、システムプロセッサ2に対して受信割込みを通知する。
【0037】
ここで、一般的に、通信コントローラ5とストレージコントローラ7では、DMA転送できるブロックサイズに違いがある。例えば、通信コントローラ4がイーサネット(登録商標)の場合は、最大1518バイトである。一方、ストレージコントローラ7がSCSIの場合は、最大64Kバイトである。このようにサイズに差があるため、ストレージコントローラ7がDMA転送19したデータは、複数個のIPパケット30で構成される。
【0038】
システムプロセッサ2は、ストレージコントローラ7からのDMA転送完了割込みを検出すると、ストレージドライバ11を起動する。ストレージドライバ11は、データのDMA転送19が完了したことを、ストレージネットプロトコル・プログラム12に通知する(ステップ82)。
【0039】
ストレージネットプロトコル・プログラム12は、コマンドブロック41で指定したすべてのデータをストレージ6から読込み終わると、IPパケット30のサブヘッダ33を設定する。この時、ドライバ間共有メモリ13に置いてあるIPパケット30を直接操作するため、パケットのコピーは発生しない(ステップ83)。
そして、管理テーブル40内にあるすべての共有メモリ・アドレス43で指定された、送信バッファ17に格納されているIPパケット30のサブヘッダ33の設定が完了したことを確認する(ステップ84)。
すべての設定が完了した時点で、ストレージネットプロトコル・プログラム12は、その管理テーブル40をプロトコルプログラム10に渡す(ステップ85)。
【0040】
プロトコルプログラム10は、IPパケット30のIPヘッダ31およびプロトコルヘッダ32を設定する。この時、ドライバ間共有メモリ13に置いてあるIPパケット30を直接操作するため、パケットのコピーは発生しない(ステップ86)。
そして、管理テーブル40内にあるすべての共有メモリ・アドレス43で指定された、送信バッファ17に格納されているIPパケット30のIPヘッダ31およびプロトコルヘッダ32の設定が完了したことを確認する(ステップ87)。
すべての設定が完了した時点で、プロトコルプログラム10は、その管理テーブル40をネットワークドライバ9に渡す(ステップ88)。
【0041】
ネットワークドライバ9は、プロトコルプログラム10より渡された管理テーブル40内にあるすべての共有メモリ・アドレス43で指定された、送信バッファ17に格納されているIPパケット30を、DMA転送18により、伝送路4に送出する(ステップ89)。
前述した通り、読込みコマンドで読出したデータは、一個もしくは複数個の送信バッファ17に格納されているため、通信コントローラ5はその回数分DMA転送18することになる。
そして、管理テーブル40内にあるすべての共有メモリ・アドレス43で指定された、送信バッファ17に格納されているIPパケット30の送信が完了したことを確認する(ステップ90)。
すべての送信が完了した時点で、ネットワークドライバ9は、その管理テーブル40、すなわち処理完了した送信バッファ17の先頭位置を、ストレージネットプロトコル・プログラム12に返す(ステップ91)。
【0042】
ストレージネットプロトコル・プログラム12は、ネットワークドライバ9より返された管理テーブル40内にあるすべての共有メモリ・アドレス43で指定された、送信バッファ17をクリアし、次のIPパケット30送信に備える(ステップ92)。
【0043】
本方式のデータ配信では、ソフトウェアがドライバ間共有メモリ13上のIPパケット30を直接操作することで、システムメモリ3内のデータコピーを不要にすることができる。
また、本方式のデータ配信では、ストレージ6内に蓄積されたデータを、伝送路4に対して送出する時に、システムメモリ3内でのデータコピーが一度も必要ない。このように、データのゼロコピー化が実現でき、データ転送に要する時間を短縮することができる。
【0044】
次に、データ蓄積の場合について、図8のデータ蓄積処理の一例を示すフロー図を用いて説明する。
ネットワークサーバ1のデータ蓄積処理の概略動作は、クライアント端末20から受信したデータを、ストレージ6に蓄積することである。
【0045】
通信コントローラ5は、伝送路4からIPパケット30を受信すると、初期化時に予め渡されている受信バッファ16の内、データがまだ格納されていない未使用の受信バッファ16に、DMA転送18により、IPパケット30を格納する(ステップ101)。
通信コントローラ5は、IPパケット30の格納が完了すると、システムプロセッサ2に対して受信割込みを通知する。
【0046】
システムプロセッサ2は、通信コントローラ5からの受信割込みを検出すると、ネットワークドライバ9を起動する。ネットワークドライバ9は、受信したIPパケット30を格納した受信バッファ16の先頭位置(アドレス)を、プロトコルプログラム10に通知する(ステップ102)。ネットワークドライバ9は、受信バッファ16の先頭位置をシステムプロセッサから通知されるか、自ら検出するか等により取得する。
【0047】
プロトコルプログラム10は、ネットワークドライバ9より渡された受信バッファ16の先頭位置を基にして、ドライバ間共有メモリ13上の該当する受信バッファ16に直接アクセスし、IPヘッダ31およびプロトコルヘッダ32の内容に従って処理を行う(ステップ103)。
【0048】
IPパケット30の種類を確認し(ステップ104)、IPパケット30の種類がストレージネットプロトコルの場合、プロトコルプログラム10は、ネットワークドライバ9より渡された受信バッファ16の先頭位置、および送信元の識別番号を、ストレージネットプロトコル・プログラム12に通知する(ステップ105)。
また、IPパケット30の種類がストレージネットプロトコル以外の場合は、プロトコルに応じて、適切な処理を行う(ステップ115)。
ストレージネットプロトコルと通常のTCP/IPパケットを混在可能とすることで、互換性を確保することができる。
【0049】
ストレージネットプロトコル・プログラム12は、プロトコルプログラム10より渡された送信元の識別番号から、該当する管理テーブル40を特定し(ステップ106)、プロトコルプログラム10より渡された受信バッファ16の先頭位置を、管理テーブル40の共有メモリ・アドレス43に登録する(ステップ107)。
そして、管理テーブル40のコマンドブロック41で指定されたサイズ分のデータを受信したか否かを確認する(ステップ108)。
コマンドブロック41で指定されたサイズ分のデータを受信した時点で、ドライバ間共有メモリ13上の該当するIPパケット30のヘッダ部34の内容をクリアする。この時、ドライバ間共有メモリ13に置いてあるIPパケット30を直接操作するため、パケットのコピーは発生しない(ステップ109)。
ストレージネットプロトコル・プログラム12は、最後に、管理テーブル40をストレージドライバ11に通知する(ステップ110)。
【0050】
ストレージドライバ11は、ストレージネットプロトコル・プログラム12より渡された管理テーブル40のすべての共有メモリ・アドレス43で指定された、受信バッファ16に格納されているIPパケット30を、DMA転送19により、そのままストレージ6に蓄積する(ステップ111)。
すべての書込みが完了した時点で、ストレージドライバ11は、その管理テーブル40、すなわち処理完了した受信バッファ16の先頭位置を、ストレージネットプロトコル・プログラム12に返す(ステップ112)。
【0051】
ストレージネットプロトコル・プログラム12は、ストレージドライバ11より返された管理テーブル40内にあるすべての共有メモリ・アドレス43で指定された、受信バッファ16をクリアする(ステップ113)。
最後に、次のIPパケット30受信に備えて、ストレージネットプロトコル・プログラム12は、受信バッファ16をネットワークドライバ9に渡す(ステップ114)。
【0052】
本方式のデータ蓄積では、ソフトウェアがドライバ間共有メモリ13上のIPパケット30を直接操作することで、システムメモリ3内のデータコピーを不要にすることができる。
また、本方式のデータ蓄積では、伝送路4から受信したデータを、ストレージ6に蓄積する時に、システムメモリ3内でのデータコピーが一度も必要ない。このように、データのゼロコピー化が実現でき、データ転送に要する時間を短縮することができる。
【0053】
実施の形態2.
実施の形態1では、図1の構成を用いて説明したが、図1の構成にかぎられるわけではない。
図1のシステムメモリ3は、少なくとも、共有メモリ(ドライバ間共有メモリ13に対応する)と制御部(ネットワークドライバ9、プロトコルプログラム10、ストレージドライバ11、ストレージネットプロトコル・プログラム12とに対応する)とを備える場合であってもよい。
共有メモリは、通信コントローラ5とストレージコントローラ7とが読み書き可能な記憶領域である。
制御部は、通信コントローラ5とストレージコントローラ7との間で、共有メモリに格納したデータを受け渡すことを制御する。すなわち、制御部は、通信コントローラ5とストレージコントローラ7とのいずれか一方によって共有メモリへ書き込まれたデータの格納位置を、他方へ通知することによって、通信コントローラ5とストレージコントローラ7との間で、データ(IPパケット)を受け渡すことができる機能を有する。
【0054】
また、制御部の一例としては、通信コントローラ5を制御する通信ドライバ部(ネットワークドライバ9、プロトコルプログラム10に対応する)と、ストレージコントローラ7を制御するストレージドライバ部(ストレージドライバ11に対応する)と、通信ドライバ部とストレージドライバ部との間で共有メモリ13へ格納したデータの格納位置を受け渡して、通信コントローラ5とストレージコントローラ7との間で、共有メモリに格納したデータを受け渡すことを仲介する仲介部(ストレージネットプロトコル・プログラム12に対応する)とを備える場合であってもよい。
さらに、上記通信ドライバ部は、上記通信コントローラがアクセスするために必要な情報を上記共有メモリに格納されるデータへ付加する機能を有する。
また、上記ストレージドライバ部は、上記ストレージコントローラが上記共有メモリに格納されるデータを読み書きするために必要な情報を上記データへ付加する機能を有する。
上記のような機能を有するプログラムをシステムメモリ3へ格納し、システムプロセッサ2によって実施させる構成であってもよい。
【0055】
また、システムメモリ3へ格納する各種プログラムは、計算機で読み取り可能な記録媒体へ記録することが可能である。
【0056】
【発明の効果】
この発明によれば、ネットワークサーバにおいて、ドライバ間共有メモリへデータを格納することによって、それぞれの処理においてデータをコピーすることなく、通信コントローラとストレージコントローラとの間でデータの受け渡しを可能にし、データの配信及びデータの蓄積の高速化を図ることができる。
【図面の簡単な説明】
【図1】実施の形態1である情報配信を目的とするネットワークサーバ1の構成の一例を示すブロック図。
【図2】IPパケット30の形式の一例を示す図。
【図3】管理テーブル40の形式の一例を示す図。
【図4】ネットワークサーバ1の全体の動作の一例を表す図。
【図5】端末A51と端末B52の2台から、ネットワークサーバ1に対して、書込みが実行された場合を示す図。
【図6】コマンド受信処理の一例を示すフロー図。
【図7】データ配信処理の一例を示すフロー図。
【図8】データ蓄積処理の一例を示すフロー図。
【符号の説明】
1 ネットワークサーバ、2 システムプロセッサ、3 システムメモリ、4伝送路、5 通信コントローラ、6 ストレージ、7 ストレージコントローラ、8 バス、9 ネットワークドライバ、10 プロトコルプログラム、11ストレージドライバ、12 ストレージネットプロトコル・プログラム、13ドライバ共有メモリ、14 受信キュー、15 送信キュー、16 受信バッファ、17 送信バッファ、18,19 DMA転送、20 クライアント端末、30 IPパケット、31 IPヘッダ、32 プロトコルヘッダ、33 サブヘッダ、35 データ部、40 管理テーブル、41 コマンドブロック、42 コマンド発行元識別番号、43 共有メモリ・アドレス。
Claims (13)
- 伝送路を介してデータを送受信するネットワークサーバにおいて、
上記データを格納するストレージと、
上記伝送路を介してデータを送受信する通信コントローラと、
上記ストレージに対してデータを読み書きするストレージコントローラと、
上記通信コントローラと上記ストレージコントローラとが読み書き可能な記憶領域である共有メモリと、
上記通信コントローラと上記ストレージコントローラとの間で、上記共有メモリに格納したデータを受け渡すことを制御する制御部と
を備えることを特徴とするネットワークサーバ。 - 上記制御部は、上記通信コントローラと上記ストレージコントローラとのいずれか一方によって共有メモリへ書き込まれたデータの格納位置を、他方へ通知することによって、上記通信コントローラと上記ストレージコントローラとの間で、データを受け渡すことを特徴とする請求項1記載のネットワークサーバ。
- 上記制御部は、
上記通信コントローラを制御する通信ドライバ部と、
上記ストレージコントローラを制御するストレージドライバ部と、
上記通信ドライバ部と上記ストレージドライバ部との間で上記共有メモリへ格納したデータの格納位置を受け渡して、上記通信コントローラと上記ストレージコントローラとの間で、上記共有メモリに格納したデータを受け渡すことを仲介する仲介部と
を備えることを特徴とする請求項1または2記載のネットワークサーバ。 - 上記通信ドライバ部は、上記通信コントローラがアクセスするために必要な情報を上記共有メモリに格納されたデータへ付加し、
上記ストレージドライバ部は、上記ストレージコントローラが上記共有メモリに格納されるデータを読み書きするために必要な情報を上記データへ付加することを特徴とする請求項3記載のネットワークサーバ。 - 上記通信コントローラは、上記伝送路から、IP(Internet Protocol)パケットを上記データとして受信し、
上記IPパケットは、IPパケットに含まれるデータの種別を格納するサブヘッダを有することを特徴とする請求項1から4いずれかに記載のネットワークサーバ。 - 上記共有メモリは、上記IPパケットの単位でデータを格納し、
上記ストレージコントローラは、上記IPパケットの単位でデータを上記ストレージへ格納することを特徴とする請求項5記載のネットワークサーバ。 - 上記通信コントローラは、上記伝送路から受信したIPパケットを上記共有メモリへ格納し、
上記制御部は、上記IPパケットを上記共有メモリへ格納した格納位置を上記ストレージコントローラへ通知し、
上記ストレージコントローラは、上記通知された格納位置を用いて、上記共有メモリからIPパケットを読み込み、読み込んだIPパケットを上記ストレージへ格納することを特徴とする請求項5または6記載のネットワークサーバ。 - 上記ストレージコントローラは、上記ストレージから上記IPパケットを読み込み、読み込んだIPパケットを上記共有メモリへ格納し、
上記制御部は、上記IPパケットを上記共有メモリへ格納した格納位置を上記通信コントローラへ通知し、
上記通信コントローラは、上記通知された格納位置を用いて、上記共有メモリからIPパケットを読み込み、読み込んだIPパケットを上記伝送路へ送信することを特徴とする請求項5から7いずれかに記載のネットワークサーバ。 - 上記IPパケットは、通信のプロトコルに関する情報と、上記サブヘッダとを有するヘッダ部を有し、
上記制御部は、上記共有メモリへ格納されたIPパケットのヘッダ部を変更することを特徴とする請求項5から8いずれかに記載のネットワークサーバ。 - 上記制御部は、通信コントローラがIPパケットを送信するために必要な情報を上記ヘッダ部へ設定し、
上記通信コントローラは、上記制御部が変更したヘッダ部を有するIPパケットを上記伝送路ヘ送信することを特徴とする請求項9記載のネットワークサーバ。 - 上記制御部は、上記ストレージへ格納する際に上記ヘッダ部をクリアし、
上記ストレージコントローラは、上記制御部が変更したヘッダ部を有するIPパケットを上記ストレージへ格納することを特徴とする請求項9記載のネットワークサーバ。 - 上記通信コントローラは、上記伝送路から受信したデータを上記共有メモリへ格納し、
上記制御部は、上記データを上記共有メモリへ格納した格納位置を上記ストレージコントローラへ通知し、
上記ストレージコントローラは、上記通知された格納位置を用いて、上記共有メモリからデータを読み込み、読み込んだデータを上記ストレージへ格納することを特徴とする請求項1または2記載のネットワークサーバ。 - データを格納するストレージと、上記伝送路を介してデータを送受信する通信コントローラと、上記ストレージに対してデータを読み書きするストレージコントローラと、上記通信コントローラと上記ストレージコントローラとが読み書き可能な記憶領域である共有メモリとを備えるストレージデータ通信方法おいて、
上記通信コントローラと上記ストレージコントローラとのいずれか一方が、上記共有メモリへデータを格納し、
上記データを上記共有メモリへ格納した格納位置を検出し、
検出した格納位置を、上記通信コントローラと上記ストレージコントローラとのいずれか他方へ通知することによって上記共有メモリに格納したデータを受け渡すことを特徴とするストレージデータ通信方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP2003010559A JP2004227040A (ja) | 2003-01-20 | 2003-01-20 | ネットワークサーバ及びストレージデータ通信方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP2003010559A JP2004227040A (ja) | 2003-01-20 | 2003-01-20 | ネットワークサーバ及びストレージデータ通信方法 |
Publications (1)
Publication Number | Publication Date |
---|---|
JP2004227040A true JP2004227040A (ja) | 2004-08-12 |
Family
ID=32899716
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
JP2003010559A Pending JP2004227040A (ja) | 2003-01-20 | 2003-01-20 | ネットワークサーバ及びストレージデータ通信方法 |
Country Status (1)
Country | Link |
---|---|
JP (1) | JP2004227040A (ja) |
Cited By (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP2011061385A (ja) * | 2009-09-08 | 2011-03-24 | Nara Women's Univ | 対話的実時間遠隔可視化システム |
WO2017158666A1 (ja) * | 2016-03-14 | 2017-09-21 | 株式会社日立製作所 | 計算機システム、計算機システムのエラー処理方法 |
-
2003
- 2003-01-20 JP JP2003010559A patent/JP2004227040A/ja active Pending
Cited By (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP2011061385A (ja) * | 2009-09-08 | 2011-03-24 | Nara Women's Univ | 対話的実時間遠隔可視化システム |
WO2017158666A1 (ja) * | 2016-03-14 | 2017-09-21 | 株式会社日立製作所 | 計算機システム、計算機システムのエラー処理方法 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US7461160B2 (en) | Obtaining a destination address so that a network interface device can write network data without headers directly into host memory | |
US8713180B2 (en) | Zero-copy network and file offload for web and application servers | |
JP3711432B2 (ja) | 周辺処理装置およびその制御方法 | |
US8855137B2 (en) | Dual-driver interface | |
US8660133B2 (en) | Techniques to utilize queues for network interface devices | |
US8788726B2 (en) | Data transmission system, storage medium and data transmission program | |
JP2004350188A (ja) | データ転送装置及びプログラム | |
JP5611889B2 (ja) | データ転送装置、データ送信システムおよびデータ送信方法 | |
JP2007011673A (ja) | ホスト間データ転送方法、プログラム及びシステム | |
US20110280243A1 (en) | TCP/IP Offload Device | |
JP2003242097A (ja) | クロスコール機能を備えるディスク制御装置 | |
JP2007501472A (ja) | 転送ディスクリプタ用メモリを備えるusbホストコントローラ | |
KR100553348B1 (ko) | 피엠이엠 제어기를 이용한 고속 스트리밍 데이터 전송장치 및 방법 | |
JP4786575B2 (ja) | コンピュータとネットワークインタフェースコントローラ間のデータ転送方法、プログラム及びネットワークインタフェースコントローラ | |
KR100449806B1 (ko) | 네트워크를 통해 스트리밍 데이터를 고속으로 송수신하기위한 네트워크-스토리지 연결 장치 | |
JP2004227040A (ja) | ネットワークサーバ及びストレージデータ通信方法 | |
CN108063737B (zh) | 一种FCoE存储区域网读请求处理方法及系统 | |
JP5729938B2 (ja) | 通信装置およびその制御方法 | |
JP4098910B2 (ja) | パケット転送制御装置及びパケット転送方法 | |
US20040139386A1 (en) | Data exchange unit | |
JP3189269B2 (ja) | ネットワークプリンタ | |
KR100576721B1 (ko) | 제로카피(zero-copy) 전송 기능을 구비한네트워크 카드와 서버 및 그 전송 방법 | |
JPH11149455A (ja) | メモリディスク共有方法及びその実施装置 | |
JP2000259362A (ja) | プリンタ及びプリンタのデータ処理方法 | |
JP4362199B2 (ja) | データ伝送装置 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
RD04 | Notification of resignation of power of attorney |
Effective date: 20040519 Free format text: JAPANESE INTERMEDIATE CODE: A7424 |
|
RD04 | Notification of resignation of power of attorney |
Free format text: JAPANESE INTERMEDIATE CODE: A7424 Effective date: 20041026 |