JP2006260543A - データをネットワークに送信する方法及び装置並びにデータをネットワークから受信する方法及び装置 - Google Patents

データをネットワークに送信する方法及び装置並びにデータをネットワークから受信する方法及び装置 Download PDF

Info

Publication number
JP2006260543A
JP2006260543A JP2006040813A JP2006040813A JP2006260543A JP 2006260543 A JP2006260543 A JP 2006260543A JP 2006040813 A JP2006040813 A JP 2006040813A JP 2006040813 A JP2006040813 A JP 2006040813A JP 2006260543 A JP2006260543 A JP 2006260543A
Authority
JP
Japan
Prior art keywords
queue
transmission
buffer
driver
data
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.)
Granted
Application number
JP2006040813A
Other languages
English (en)
Other versions
JP4415391B2 (ja
Inventor
Masayoshi Matsuura
正承 松浦
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
NEC Corp
Original Assignee
NEC Corp
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by NEC Corp filed Critical NEC Corp
Priority to JP2006040813A priority Critical patent/JP4415391B2/ja
Publication of JP2006260543A publication Critical patent/JP2006260543A/ja
Application granted granted Critical
Publication of JP4415391B2 publication Critical patent/JP4415391B2/ja
Expired - Fee Related legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Landscapes

  • Computer And Data Communications (AREA)
  • Communication Control (AREA)

Abstract

【課題】複数のプロセッサが搭載されたコンピュータ等において、複数の上位プロセスが、相互に影響し合うことなく、データの送受信をすることを可能とするTOE(TCP/IP Offload Engine)を提供する。
【解決手段】TOE101では各上位プロセス毎に通知用待ち行列を生成する。TOEドライバ102では、各上位プロセスがどのソケットとどの通知用待ち行列とに対応するかの情報を保持する。データ送信時には、送信バッファ待ち行列102−4に送信データが一時保存され、送信後に送信バッファは、上位プロセスに対応する通知用待ち行列に追加される。データ受信時には、受信バッファ待ち行列102−3にあった受信バッファに受信データが格納され、その受信バッファが上位プロセスに対応する通知用待ち行列に追加される。
【選択図】図8

Description

本発明は、データをネットワークに送信する方法及び装置並びにデータをネットワークから受信する方法及び装置に関し、特に、同時に稼働する複数プロセッサでそれぞれ実行される複数の上位プロセス又は1つのプロセッサで同時に稼働する複数コアでそれぞれ実行される複数の上位プロセスが、相互に影響を及ぼすことなく、データをネットワークに送信する方法及び装置並びにデータをネットワークから受信する方法及び装置に関する。
従来のコンピュータでは、1つのプロセッサを利用して、タイム・シェアリングにより、複数のプロセスが見かけ上、同時に実行されている。同時に稼働するプロセスがそれぞれIP(Internet Protocol)パケットの送受信を行なう場合、複数のプロセスから送信するIPパケットは、コンピュータ内の1つの待ち行列を通り送信され、複数のプロセスが受信するIPパケットは、コンピュータ内の1つの待ち行列を通り受信される。
特開2003−333076号公報 特開平06−250983号公報 特開平11−346246号公報
ところが、近年、1つのコンピュータに複数のプロセッサが搭載されるようになってきている。また、1つのプロセッサに複数のコアが搭載されるようになってきている。
しかし、このようなコンピュータを利用した場合であっても、従来通り、同時に稼働するプロセスがそれぞれIPパケットの送受信を行なう場合、複数のプロセスから送信するIPパケットは、コンピュータ内の1つの待ち行列を通り送信され、複数のプロセスが受信するIPパケットは、コンピュータ内の1つの待ち行列を通り受信される。
特に、受信したIPパケットはプロセス間の区別無く、同一の待ち行列に追加される。従って、処理量の多いプロセスにより待ち行列からのデータの取出しが遅れた場合には、他のプロセスの処理の進行が遅れることとなる。例えば、ファイルサーバにおいて、NFS(network file system)とCIFS(common internet file system)が混在し、且つ、通信量が一方に集中した場合に、このような事態が顕在化する。また、NFSの複数の上位プロセスがあり、通信量が或る上位プロセスに集中した場合にも、このような事態が顕在化する。同様に、CIFSの複数の上位プロセスがあり、通信量が或る上位プロセスに集中した場合に、このような事態が顕在化する。
TCP/IPプロトコル処理をホスト上のCPUに代わって行うTOE(TCP/IP Offload Engine)機能を持つハードウェアでは従来、送信完了通知・受信データ一時保持用に利用される待ち行列を1つ用意し、TOEドライバとTOE上のファームウェアでその待ち行列を使い、通信を行っている。このため1枚のTOEカード上において、扱うことができる送受信データの量が少なくなってしまう。また、送受信データの量が多い上位プロセスと、送受信データの量が少ない上位プロセスが同時に動作していた場合、送受信データの量が少ない上位プロセスの応答時間が、遅延してしまう。これは、送受信データの量が多いプロセスの処理に時間がかかり、この処理の所定の区切りが終了するまで、送受信データの量が少ない上位プロセスの処理が待たされるからである。
そこで、本発明は、複数のプロセッサが搭載されたコンピュータや、複数のコアが搭載されたプロセッサが搭載されたコンピュータにおいて、複数の上位プロセスが、相互に影響し合うことなく、データの送受信をすることを可能とするデータをネットワークに送信する方法及びその装置並びにデータをネットワークから受信する方法及び装置を提供することを目的とする。
本発明の第1の観点によれば、データをネットワークに送信する方法であって、ドライバが、送信データのための送信バッファを記憶装置から確保するステップと、ドライバが、上位プロセスから受けた送信データを前記送信バッファに格納するステップと、前記ドライバが、前記送信データが格納された送信バッファを送信バッファ待ち行列に追加するステップと、オフロード・エンジンが、前記送信バッファ待ち行列に1以上の送信バッファが在ることを検出すると、前記送信バッファ待ち行列に在る各送信バッファに格納された送信データを、送信バッファ待ち行列に在る送信バッファの順に、前記ネットワーク上に送信するステップと、前記オフロード・エンジンが、送信済みの前記送信データが格納されていた各送信バッファを、各上位プロセスと各通知用待ち行列の対応関係に関する情報を参照して、前記上位プロセスに対応する通知用待ち行列に追加するステップと、前記ドライバが、前記通知用待ち行列に在る送信バッファを前記記憶装置に開放するステップと、を備えることを特徴とする方法が提供される。
上記の方法において、前記ドライバが、各上位プロセスに対応する各通知用待ち行列を設けるステップと、前記ドライバが、各上位プロセスと各通知用待ち行列の対応関係に関する情報を設けるステップと、を更に備えるようにしてもよい。
上記の方法において、前記ドライバが、前記送信バッファへの前記送信データの格納に成功した場合に、その成功の旨を前記上位プロセスに通知するステップを更に備えるようにしてもよい。
上記の方法において、前記ドライバが、前記送信バッファ待ち行列に追加した前記送信バッファに対応したエントリが前記通知用待ち行列にない場合に、その旨をドライバの外部に通知するステップを更に備えるようにしてもよい。
本発明の第2の観点によれば、データをネットワークから受信する方法であって、ドライバが、受信データのための受信バッファを記憶装置から確保するステップと、前記ドライバが、前記受信バッファを受信バッファ待ち行列に追加するステップと、オフロード・エンジンが、前記ネットワークから受けた受信データを、前記受信バッファ待ち行列に在る前記受信バッファに、受信バッファ待ち行列に在る受信バッファの順に、格納するステップと、前記オフロード・エンジンが、受信済みの前記受信データが格納されていた各受信バッファを、各上位プロセスと各通知用待ち行列の対応関係に関する情報を参照して、前記上位プロセスに対応する通知用待ち行列に追加するステップと、前記ドライバが、前記通知用待ち行列に在る受信バッファに在る受信データを、受信通知用待ち行列に在る受信バッファの順に、前記上位プロセスに渡すステップと、を備えることを特徴とする方法が提供される。
また、上記の方法において、前記ドライバが、各上位プロセスに対応する各通知用待ち行列を設けるステップと、前記ドライバが、各上位プロセスと各通知用待ち行列の対応関係に関する情報を設けるステップと、を更に備えるようにしてもよい。
本発明によれば、前記オフロード・エンジンが、送信済みの前記送信データが格納されていた各送信バッファを、各上位プロセスと各通知用待ち行列の対応関係に関する情報を参照して、前記上位プロセスに対応する通知用待ち行列に追加するので、複数の上位プロセスの間で影響を及ぼし合うことを防止できる。
また、本発明によれば、 前記オフロード・エンジンが、受信済みの前記受信データが格納されていた各受信バッファを、各上位プロセスと各通知用待ち行列の対応関係に関する情報を参照して、前記上位プロセスに対応する通知用待ち行列に追加するので、複数の上位プロセスの間で影響を及ぼし合うことを防止できる。
以下、図面を参照して本発明を実施するための最良の形態について詳細に説明する。
近年、複数のCPUが搭載されたホストマシンがある。また、複数のコアが搭載されたCPUがある。このような複数CPUのホストマシンや、このような複数コアのCPU上では、複数のプロセスを同時に実行することができる。TOE上でデータ送信が完了したことを知らせたり、受信データを一時保持するための待ち行列(以下、「通知用待ち行列」という。)を最大で上位プロセスの数だけ搭載し、上位プロセスを複数のCPU又は複数コアCPUで同時に動作できるようにすることで、送受信の多重度を上げ性能を向上させる。また、上述したような、上位プロセス間の通信量の違いにより、一方の上位プロセスが他方の上位プロセスの通信を阻害するという問題は、各上位プロセス毎に別々の通知用待ち行列を利用することで解消できる。
次に、本発明の実施形態の構成について図面を参照して詳細に説明する。
[実施形態1]
図1を参照すると、本発明の第1の実施形態では、プログラム制御により動作するコンピュータ100は、TOE101と、TOE101をドライブするTOEドライバ(ソフトウェア)102と、TOEドライバを利用する上位プロセス(ソフトウェア)103及び記憶装置104を備える。
図2を参照すると、TOE101は、ハードウェア(以降、「TOEハードウェア」という。)101−1とファームウェア(以降、「TOEファームウェア」という。)101−2を備える。TOEファームウェア101−2は、TOEハードウェア101−1の制御を行う。特に、TOEファームウェア101−1とTOEハードウェア101−2は、送受信データ記憶部104−3(図3参照)にある送信データをネットワーク上に送信し、ネットワークからの受信データを送受信データ記憶部104−3に格納する。また、これらは、IPに関連した処理を行なう。
また、TOE101は、通知用待ち行列101−3を複数備える。各通知用待ち行列101−3は、各上位プロセス103に対応する。但し、各通知用待ち行列101−3に複数の上位待ち行列を対応させることを絶対的に排除する必要はない。この対応関係は、TOEドライバ102により生成され、オフロード通信制御記憶部104−1(図1参照)に格納される。
図3を参照すると、通知用待ち行列101−3の各エントリは、記憶装置104から確保した送受信制御記憶部104−2と、記憶装置104から確保した送受信データ記憶部104−3を備える。送受信制御記憶部104−2は、次のエントリへのポインタ(*next)と、送受信データ記憶部104−3へのポインタ(*buf)を備える。但し、待ち行列を形成するためのリストの生成方法は、これに限られるわけではない。
TOEドライバ102には、送信バッファ待ち行列102−4(図4参照)と受信バッファ待ち行列102−3(図4参照)が備わる。なお、これらのバッファは、物理的には、記憶装置104に設けられる。送信バッファ待ち行列102−4と受信バッファ待ち行列102−3も、図3に示すような構造を有する。
送信バッファ待ち行列102−4の各エントリである送信バッファは、上位プロセスから受けた送信データを、TOE101が送信するまで、一時的に保持するものである。また、データ送信が完了した後には、送信バッファは、送信バッファ待ち行列102−4から削除され、上位プロセスに対応する通知用待ち行列101−3に追加される。つまり、送信バッファは、送信バッファ待ち行列102−4から通知用待ち行列101−3に移動する。通知用待ち行列101−3に追加されたエントリは、先頭から順々に廃棄され、それが占有していた領域は、記憶装置104に戻される。TOEドライバ102は、通知用待ち行列101−3のエントリを先頭から調べることにより、上位プロセスから要求されたとおりに、データを送信できたか否かを知ることができる。できていない場合には、例えば、該当する上位プロセスやオペレーティングシステムに送信失敗の旨を通知するようにしてもよい。
また、TOEドライバ102は、上位プロセスから受けた送信データを格納した送信バッファが送信バッファ待ち行列102−4にあるか否かを、送信レジスタ101−4(図4参照)を介して、TOE101に伝える。TOE101は、送信レジスタ101−4を調べて、送信データがあることを認識したならば、データ送信をして、送信バッファを送信バッファ行列102−4から通知用待ち行列102−3に移す。移動先の通知用待ち行列101−3は、該当する上位プロセスに対応したものである。この対応関係は、オフロード通信制御記憶部104−1に格納されているので、TOEファームウェア101−1は、これを参照して、移動先の通知用待ち行列101−3を知る。
受信バッファ待ち行列102−3の各エントリである受信バッファは、受信したデータを格納する。受信バッファは、データ受信をする前に予め作成されて、受信バッファ待ち行列102−3に追加されている。そして、実際に、TOE101がデータを受信すると、受信バッファ待ち行列102−3の先頭にある1以上の受信バッファに受信データが格納される。その後、TOEファームウェア101−1は、受信データが格納された受信バッファを、受信バッファ待ち行列102−3から通知用待ち行列101−3に移す。移動先の通知用待ち行列101−3は、該当する上位プロセスに対応したものである。この対応関係は、オフロード通信制御記憶部104−1に格納されているので、TOEファームウェア101−1は、これを参照して、移動先の通知用待ち行列101−3を知る。
図1に戻ると、TOEドライバ102は、TOE101と上位プロセス103との間のデータの橋渡しをする。TOEドライバ102は通信制御部102−1と、送受信制御部102−2を備える。通信制御部102−1は、TOE101でのオフロード通信に必要な情報を制御する。送受信制御部102−2は、上位プロセス103からの送信要求をTOEファームウェア101−1へ伝えるオフロード送信機能と、ネットワーク111から受け取りTOEファームウェア101−1によりオフロード処理されたデータを受け取るオフロード受信機能とを備える。
送受信制御部102−2は、通知用待ち行列監視プロセスを行なう。この通知用待ち行列監視プロセスは、TOEファームウェア101−1から通知用待ち行列101−3経由で受けた送信バッファ又は受信バッファを処理する。
通信制御部102−1は、実際のオフロード通信を制御する情報を収めたオフロード通信制御記憶部104−1を利用する。オフロード通信制御記憶部104−1には、上位プロセスの識別情報と通知用待ち行列の識別情報との対応関係が格納されている。
上位プロセス103はオフロード通信を利用するプログラムであり、TOEドライバ102との間で送信要求と受信通知をやりとりする。
記憶装置104は、送受信に必要な記憶領域を備える。記憶装置104が、TOEドライバ102又は上位プロセス103からメモリ領域の確保の要求を受けた時に、記憶装置104に記憶領域が確保され、その記憶領域へのポインタがTOEドライバ102、TOE101又は上位プロセス103に渡される。記憶装置104が、TOEドライバ102又は上位プロセス103からメモリ領域の開放の要求を受けた時に、実在する記憶領域が開放される。
次に、図1、図5、図6及び図7等を参照して本発明の第1の実施形態の動作について詳細に説明する。
まず、図1及び図5等を参照して、オフロード機能を利用するソケットの作成について説明する。
まず、上位プロセス103は、TOEドライバ102に対して、ソケット作成を要求する(ステップS001)。
次に、TOEドライバ102は、TOE101でのオフロード通信のために必要な情報(IPアドレス、ポート番号など)を、上位プロセス103から受けたパケットやソケットから収集する。この時、更に、送信完了時と受信通知時にTOEファームウェア101−1から通知してもらいたい通知用待ち行列101−3の番号#nを決定する(ステップS002)。一例として、上位プロセスから受けたソースポート番号に応じて通知用待ち行列101−3の番号#nを決定する。TCP/IPでのサーバ型プロセスは、それが持つポート番号が定まっているため、このように通知用待ち行列101−3の番号#nを決定すれば、個々の上位プロセス103で使用する通知用待ち行列の番号#nが一意に決定される。なお、ポート番号を表すために用いられている全てのビットのうちの一部のビットのみを抜き出して、これを通知用待ち行列101−3の番号#nとしてもよい。もしも、上位プロセスの数が通知用待ち行列の数と等しいのであれば、異なった上位プロセスが、異なった番号の通知用待ち行列を利用することが理想的である。しかし、上位プロセスの数が通知用待ち行列の数を超えるのであれば、一部の複数の上位プロセスが共通の通知用待ち行列を利用することを避けることができない。しかし、このような場合であっても、従来技術の問題点はかなり解消される。ポイントは、従来技術では、N個の上位プロセスが1つの通知用待ち行列を共用していたのに対し、本発明では、理想的には、N個の上位プロセスがN個の通知用待ち行列を利用し、そうでなくても、N個の上位プロセスがM(Mは2以上且つN未満)個の通知用待ち行列を利用することである。
新たな通信制御記憶部104−1が生成される。そして、これらの情報(TOE101でのオフロード通信のために必要な情報(IPアドレス、ポート番号など)、通知用待ち行列101−3の番号#n、上位プロセスの識別情報等)は、生成されたオフロード通信制御記憶部104−1へ格納される(ステップS003)。
最後に、TOEファームウェア101−1へ、オフロード通信制御記憶部104−1へのポインタが通知される(ステップS004)。これにより、TOEファームウェア101−1は、上位プロセスと通知用待ち行列101−3と送受信するIPパケットのソケット情報との対応関係を知ることが可能となる。
次に、図1及び図6等を参照して、オフロード送信と送信完了処理について説明する。
上位プロセス103が、TOEドライバ102に対して、送信要求を出すことにより送信処理が開始される。
TOEドライバ102は、送信データをTOEファームウェア101−1が解釈できる形式にするために、送信制御記憶部104−2を記憶装置104に確保する(ステップS201)。これは、送信バッファの一部を構成する。なお、送受信制御記憶部104−2は、送信時には、送信制御記憶部と呼ばれ、受信時には、受信制御記憶部と呼ばれる。同様に、送受信データ記憶部104−3は、送信時には、送信データ記憶部と呼ばれ、受信時には、受信データ記憶部と呼ばれる。
次に、送受信制御記憶部104−2に、実際に送信するデータを格納する送受信データ記憶部104−3へのポインタなどの、送信に必要な情報を格納する(ステップS202)。なお、送受信データ記憶部104−3は既に生成されており、ステップS201の段階で、既に送信データが格納されている。
その後、新たな送受信制御記憶部104−2を既に在る送信制御記憶部104−2に接続する(ステップS203)。これが、送信バッファキューへの送信バッファの追加に該当する。そして、新たな送受信制御記憶部104−2を接続したことをTOE101へ通知するために、TOE101に在る送信レジスタ101−4(図4参照)の記憶内容を変化させる。例えば、送信レジスタ101−4が送信バッファ待ち行列102−4にあるエントリ数を表すのであれば、その数を1だけ増加させる。送信レジスタ101−4が送信バッファ待ち行列102−4に1以上のエントリ数があるか否かを表すのであり、これまでにエントリが無いのであれば、あることを示す値に変化させる。すでにエントリがあるのであれば、あることを示す値を維持する。
TOEファームウェア101−1は、送信データが格納された送受信バッファがきたことを認識した後、送信処理をする。それにより、ネットワーク上へ送信データが流れる(ステップS204)。この時、オフロード通信制御記憶部104−1に格納されているソケット情報が利用される。
データの送信が終了したならば、TOEファームウェア101−1は、送信が完了したことをTOEドライバ102へ通知するために、通知用待ち行列101−3へ、使用した送信バッファ104−2、104−3を、既に在るエントリに追加する。この時追加の対象となる通知用待ち行列101−3は、オフロード通信制御部104−1で指定された通知用待ち行列101−3である(ステップS205)。
通知用待ち行列101−3を監視しているTOEドライバ102(通知用待ち行列監視プロセス)は、新たなエントリが通知用待ち行列101−3に接続されたことを認識すると、そのエントリを通知用待ち行列101−3から削除し、送信バッファを記憶領域へ開放する。
次に、図1及び図7等を参照して、オフロード受信処理について説明する。
ネットワーク上から受信データを受け取るとTOE101は、受信バッファ待ち行列102−3(図4参照)から、受信バッファを取り出す(ステップS101)。取り出した受信バッファへ受け取ったデータを格納する(ステップS102)。
受信データを受信バッファに格納し終えたTOEファームウェア101−1は、TOEドライバ102に対してデータを受信したことを通知するため通知用待ち行列へ受信バッファ104−3を含むエントリを追加する。この時の接続先の通知用待ち行列101−3は、オフロード通信制御記憶部104−1で指定された通知用待ち行列である(ステップS103)。
通知用待ち行列101−3を監視していた通知用待ち行列監視プロセス(送受信制御部102−2により行なわれている。)は、送受信バッファ104−3を含む新しいエントリが新しく通知用待ち行列101−3に接続されたことを確認する。そして、通知用待ち行列監視プロセスは、その受信バッファ104−3内の受信データを上位プロセス103へ届ける(ステップS104)。
上位プロセス103へ受信バッファ内の受信データを届けることに成功すると、使用済みとなった送受信制御記憶部104−2は記憶装置へ開放される(ステップS105)。
また、TOEドライバ102は、新たな受信に備えるために、新しい受信バッファ(受信制御記憶部104−2と受信データ記憶部104−3)を記憶領域から確保し、これらにより構成される新しい受信バッファを受信バッファ待ち行列1102−3へ接続する。そして、TOEドライバ102は、新しい受信バッファを受信バッファ待ち行列102−3に追加したことを、受信レジスタ101−5を通して、TOE102へ通知する(ステップS106)。
ここで、サーバ型の上位プロセスを考慮した一連の動作例を図4、図8及び図9を参照して説明する。つまり、このコンピュータは、NFS又はCIFSを利用したファイルサーバであるとして説明をする。ファイルサーバは、図4では、ファイルのダウンロード又はアップロードの要求を受け(IPパケットを受信し)、図8では、その要求に応じて、所定の処理をはさんだ後に、ファイルをダウンロードし(IPパケットを送信し)、図9では、その要求に応じて、所定の処理をはさんだ後に、ファイルをアップロードする(IPパケットを受信する)。
なお、図4、図8及び図9では、TOEドライバ102が、記憶装置104へ要求して、これにより確保した記憶部(受信バッファ、送信バッファ、通知用待ち行列等)をTOEドライバ102の内部及びTOE101の内部に記述している。物理的には、これらの記憶部は、記憶装置104の内部にある。
図4を参照すると、ネットワーク上のクライアントから或る要求が来たとする(R1)。或る要求とは、ファイルのダウンロード又はアップロード等の要求である。この要求は、IPパケットの形態で来る。
受信データを受け取ったTOE101は、受信バッファ待ち行列102−3から先頭の受信バッファを取り出す(R13)。なお、データ受信の準備のために、ドライバの初期化時に前もって受信バッファを記憶装置104から確保して受信バッファ待ち行列102−3を作成している(R11、R12)。
TOEファームウェア101−1は、受信データを受信バッファの受信データ記憶部104−3へ格納し、受信のための制御情報を受信制御記憶部104−2へ格納する(R13−1)。次に、TOEファームウェア101−1は、上位プロセス103に対応したオフロード通信制御記憶部104−1を覗き、受信バッファの受信データ記憶部104−3に格納された受信データを、どの通知用待ち行列101−3に連結するべきか確認する。ここでは、該当する通知用待ち行列は、オフロード通信制御記憶部104−1(PCB#1)を覗くと通知用待ち行列 #0なので、通知用待ち行列#0に対し、受信バッファの受信制御記憶部104−2を連結する(R13−2)。
通知用待ち行列 #0を監視している送受信制御部102−2によるCQ監視プロセス#1は、受信バッファが通知用待ち行列 #0に連結されたことを知ると、上位プロセス#1へ、受信データを渡す(R14)。受信に使用した受信バッファは用済みとなるので、記憶装置104へ開放される。
上位プロセス#1は、受信したデータを分析し、通信を行わせる別プロセスである上位プロセス#2を生成する(図8又は図9参照)。
上位プロセス#1は、以後の通信は、この上位プロセス#2に行わせ、自分は要求の受付に専念する。
図8の例では、上位プロセス#2は、IPパケットの送信を行なう。
図8を参照すると、上位プロセス#2は、オフロード通信を行うためのソケットを作成する。この時、上位プロセス#2は、通知用待ち行列#1を利用したいので、オフロード通信制御記憶部104−1 PCB#2に通知用待ち行列#1を割り当てる。通信に必要なソケットを作成した後、上位プロセス#2から、送信要求がTOEドライバ102になされる(図8のT11)。
送信要求を受け付けたTOEドライバ102は、記憶装置104から送信制御記憶部104−2を確保し(T12)、TOEファームウェア101−1が理解できる制御データを作成し、それを送信制御記憶部104−2に格納する。その後、送信バッファ待ち行列102−4に送信制御記憶部104−2を接続する(T13)。なお、TOEドライバ102は、送信データを上位プロセス#2から受けており、これを送信制御記憶部104−2のポインタ(*buf)で示される送信データ記憶部104−3に格納している。
送信バッファ待ち行列102−4へ送信制御記憶部104−2を追加した後、その追加の旨を、送信レジスタ101−4を通じてTOEファームウェア101−1に知らせる。TOEファームウェア101−1は、送信バッファ待ち行列102−4から送信すべきデータを取り出して、ネットワーク上へパケットを送信する(T14−1)。
その後、TOEファームウェア101−1は、送信バッファを通知用待ち行列101−3へ連結する。この時、オフロード通信制御記憶部104−1(PCB#2)の中身を見て、送信バッファをどの通知用待ち行列に接続するか確認する(T14−2)。この例では、TOEファームウェア101−1は、送信バッファを通知用待ち行列 #2へ連結する。通知用待ち行列 #2を監視していた監視プロセス#2は、送信バッファが通知用待ち行列 #2に連結されたことを知った後、記憶領域へ使用済みの領域を開放する。
図9の例では、上位プロセス#2は、IPパケットの受信を行なう。図9に示す例は、図4に示す例と同様である。図9に示す例の図4に示す例との相違点は下記の通りである。
図4に示す例では、上位プロセス#1に対応するのは、オフロード通信制御記憶部104−1(PCB#1)、通知用待ち行列101−3 Q#0であるのに対し、図9に示す例では、上位プロセス#2に対応するのは、オフロード通信制御記憶部104−1 PCB#2、通知用待ち行列101−3 Q#1である。
以上のように通知用待ち行列をプロセスに応じて使い分けることができる。
次に、本発明の第1の実施形態の効果について説明する。
本発明の第1の実施形態では、複数の通知用待ち行列を各上位プロセス毎に使用するように構成されているため、TOEファームウェア101−1から上位プロセスへの通知処理が並列に動作できる。
また、本発明の第1の実施形態では、さらに、ポート番号に応じて、使用する通知用待ち行列を決定しているため、次のようなケースでは通信性能の確保ができる。つまり、上位プロセスにNFS,CIFSの2つを利用しており、通知用待ち行列 Q#1にNFSを通知用待ち行列 Q#2にCIFSを使うようにする。NFSで使用する割合が非常に高いが、CIFSの通信性能を確保しておきたい場合にこのような形態を利用できる。通知用待ち行列がNFSとCIFSとの間で分離されており、従って、互いに相手の通信に影響を与えないため、両者の通信品質を確保することができる。
[実施形態2]
次に、本発明の第2の実施形態の構成について図面を参照して詳細に説明する。
実施形態2の構成は、実施形態1の構成と同一である。両実施形態は、ソケット作成時の動作が異なる。したがって、コンピュータ100、TOE101、TOEドライバ102、上位プロセス103及び記憶装置104は実施形態1と同じ動作を行う。
ソケット作成時の動作を図10を用いて説明する。
通常のソケット作成時(ステップS301)において、TOEドライバ102は、TOE101でのオフロード通信に必要な情報(IPアドレス、ポート番号等)をパケットやソケットから収集する。この時、TOEドライバ102は、送信完了時と受信通知時にTOEファームウェア101−1から通知されることを希望する通知用待ち行列の番号を決定する(ステップS302)。本実施形態では相手先IPアドレスと相手先ポート番号を基にして、通知用待ち行列の番号の値がランダムになるような計算方法(例えば、ハッシュ関数を利用した計算方法)を用いて、通知用待ち行列の番号の値を算出し、その番号を決定された番号とする。これにより、使用する通知用待ち行列の番号をランダムに分布させ、これにより、通知用待ち行列処理を限りなく並列処理に近く動作させることが可能となる。
ちなみに、偶然に、別々の上位プロセスが同一の通知用待ち行列を利用するようになった場合には、上位プロセス間での相互影響が全くないという効果を得ることができなくなる。しかし、そのような場合であっても、TOEドライバは各上位プロセスをIPアドレスとポート番号により識別しているので、同一の通知用待ち行列からの各バッファ内のデータを適切な上位プロセスに渡すことができる。
図10に示すステップS303、S304は、それぞれ、図5に示すステップS003、S004と同一であるので、これらの説明を省略する。
次に、本発明の第2の実施形態の効果について説明する。
本発明の第2の実施形態では、使用する通知用待ち行列の番号が限りなくランダムに近くなるようにできるので、送受信処理を並列して行なうことができる。従って、複数CPUのホストマシンや、複数コアのCPU上での、複数のプロセスの同時実行に効率的に対応することが可能となる。
本発明の実施形態によるコンピュータの構成を示すブロック図である。 図1に示すTCP/IP Offload Engineの構成を示すブロック図である。 本発明の実施形態による通知用待ち行列、送信バッファ待ち行列及び受信バッファ待ち行列の構成を示す図である。 本発明の実施形態によるコンピュータの上位プロセス#1がパケットを受信する場合の動作を示す図である。 本発明の実施形態によるコンピュータの実施形態1によるソケット作成時の動作を示すフローチャートである。 本発明の実施形態によるコンピュータのオフロード送信処理時の動作を示すフローチャートである。 本発明の実施形態によるコンピュータのオフロード受信処理時の動作を示すフローチャートである。 本発明の実施形態によるコンピュータの上位プロセス#2がパケットを送信する場合の動作を示す図である。 本発明の実施形態によるコンピュータの上位プロセス#2がパケットを受信する場合の動作を示す図である。 本発明の実施形態によるコンピュータの実施形態2によるソケット作成時の動作を示すフローチャートである。
符号の説明
101 TOE(TCP/IP Offload Engine)
102 TOEドライバ
103 上位プロセス
104 記憶装置

Claims (12)

  1. データをネットワークに送信する方法であって、
    ドライバが、送信データのための送信バッファを記憶装置から確保するステップと、
    ドライバが、上位プロセスから受けた送信データを前記送信バッファに格納するステップと、
    前記ドライバが、前記送信データが格納された送信バッファを送信バッファ待ち行列に追加するステップと、
    オフロード・エンジンが、前記送信バッファ待ち行列に1以上の送信バッファが在ることを検出すると、前記送信バッファ待ち行列に在る各送信バッファに格納された送信データを、送信バッファ待ち行列に在る送信バッファの順に、前記ネットワーク上に送信するステップと、
    前記オフロード・エンジンが、送信済みの前記送信データが格納されていた各送信バッファを、各上位プロセスと各通知用待ち行列の対応関係に関する情報を参照して、前記上位プロセスに対応する通知用待ち行列に追加するステップと、
    前記ドライバが、前記通知用待ち行列に在る送信バッファを前記記憶装置に開放するステップと、
    を備えることを特徴とする方法。
  2. 請求項1に記載の方法において、
    前記ドライバが、各上位プロセスに対応する各通知用待ち行列を設けるステップと、
    前記ドライバが、各上位プロセスと各通知用待ち行列の対応関係に関する情報を設けるステップと、
    を更に備えることを特徴とする方法。
  3. 請求項1に記載の方法において、
    前記ドライバが、前記送信バッファへの前記送信データの格納に成功した場合に、その成功の旨を前記上位プロセスに通知するステップを更に備えることを特徴とする方法。
  4. 請求項1に記載の方法において、
    前記ドライバが、前記送信バッファ待ち行列に追加した前記送信バッファに対応したエントリが前記通知用待ち行列にない場合に、その旨をドライバの外部に通知するステップを更に備えることを特徴とする方法。
  5. データをネットワークから受信する方法であって、
    ドライバが、受信データのための受信バッファを記憶装置から確保するステップと、
    前記ドライバが、前記受信バッファを受信バッファ待ち行列に追加するステップと、
    オフロード・エンジンが、前記ネットワークから受けた受信データを、前記受信バッファ待ち行列に在る前記受信バッファに、受信バッファ待ち行列に在る受信バッファの順に、格納するステップと、
    前記オフロード・エンジンが、受信済みの前記受信データが格納されていた各受信バッファを、各上位プロセスと各通知用待ち行列の対応関係に関する情報を参照して、前記上位プロセスに対応する通知用待ち行列に追加するステップと、
    前記ドライバが、前記通知用待ち行列に在る受信バッファに在る受信データを、受信通知用待ち行列に在る受信バッファの順に、前記上位プロセスに渡すステップと、
    を備えることを特徴とする方法。
  6. 請求項5に記載の方法において、
    前記ドライバが、各上位プロセスに対応する各通知用待ち行列を設けるステップと、
    前記ドライバが、各上位プロセスと各通知用待ち行列の対応関係に関する情報を設けるステップと、
    を更に備えることを特徴とする方法。
  7. データをネットワークに送信する装置であって、
    ドライバが、送信データのための送信バッファを記憶装置から確保する手段と、
    ドライバが、上位プロセスから受けた送信データを前記送信バッファに格納する手段と、
    前記ドライバが、前記送信データが格納された送信バッファを送信バッファ待ち行列に追加する手段と、
    オフロード・エンジンが、前記送信バッファ待ち行列に1以上の送信バッファが在ることを検出すると、前記送信バッファ待ち行列に在る各送信バッファに格納された送信データを、送信バッファ待ち行列に在る送信バッファの順に、前記ネットワーク上に送信する手段と、
    前記オフロード・エンジンが、送信済みの前記送信データが格納されていた各送信バッファを、各上位プロセスと各通知用待ち行列の対応関係に関する情報を参照して、前記上位プロセスに対応する通知用待ち行列に追加する手段と、
    前記ドライバが、前記通知用待ち行列に在る送信バッファを前記記憶装置に開放する手段と、
    を備えることを特徴とする装置。
  8. 請求項7に記載の装置において、
    前記ドライバが、各上位プロセスに対応する各通知用待ち行列を設ける手段と、
    前記ドライバが、各上位プロセスと各通知用待ち行列の対応関係に関する情報を設ける手段と、
    を更に備えることを特徴とする装置。
  9. 請求項7に記載の装置において、
    前記ドライバが、前記送信バッファへの前記送信データの格納に成功した場合に、その成功の旨を前記上位プロセスに通知する手段を更に備えることを特徴とする装置。
  10. 請求項7に記載の装置において、
    前記ドライバが、前記送信バッファ待ち行列に追加した前記送信バッファに対応したエントリが前記通知用待ち行列にない場合に、その旨をドライバの外部に通知する手段を更に備えることを特徴とする装置。
  11. データをネットワークから受信する装置であって、
    ドライバが、受信データのための受信バッファを記憶装置から確保する手段と、
    前記ドライバが、前記受信バッファを受信バッファ待ち行列に追加する手段と、
    オフロード・エンジンが、前記ネットワークから受けた受信データを、前記受信バッファ待ち行列に在る前記受信バッファに、受信バッファ待ち行列に在る受信バッファの順に、格納する手段と、
    前記オフロード・エンジンが、受信済みの前記受信データが格納されていた各受信バッファを、各上位プロセスと各通知用待ち行列の対応関係に関する情報を参照して、前記上位プロセスに対応する通知用待ち行列に追加する手段と、
    前記ドライバが、前記通知用待ち行列に在る受信バッファに在る受信データを、受信通知用待ち行列に在る受信バッファの順に、前記上位プロセスに渡す手段と、
    を備えることを特徴とする装置。
  12. 請求項11に記載の装置において、
    前記ドライバが、各上位プロセスに対応する各通知用待ち行列を設ける手段と、
    前記ドライバが、各上位プロセスと各通知用待ち行列の対応関係に関する情報を設ける手段と、
    を更に備えることを特徴とする装置。
JP2006040813A 2005-02-17 2006-02-17 データをネットワークに送信する方法及び装置並びにデータをネットワークから受信する方法及び装置 Expired - Fee Related JP4415391B2 (ja)

Priority Applications (1)

Application Number Priority Date Filing Date Title
JP2006040813A JP4415391B2 (ja) 2005-02-17 2006-02-17 データをネットワークに送信する方法及び装置並びにデータをネットワークから受信する方法及び装置

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
JP2005040725 2005-02-17
JP2006040813A JP4415391B2 (ja) 2005-02-17 2006-02-17 データをネットワークに送信する方法及び装置並びにデータをネットワークから受信する方法及び装置

Publications (2)

Publication Number Publication Date
JP2006260543A true JP2006260543A (ja) 2006-09-28
JP4415391B2 JP4415391B2 (ja) 2010-02-17

Family

ID=37099646

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2006040813A Expired - Fee Related JP4415391B2 (ja) 2005-02-17 2006-02-17 データをネットワークに送信する方法及び装置並びにデータをネットワークから受信する方法及び装置

Country Status (1)

Country Link
JP (1) JP4415391B2 (ja)

Cited By (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US7849214B2 (en) 2006-12-04 2010-12-07 Electronics And Telecommunications Research Institute Packet receiving hardware apparatus for TCP offload engine and receiving system and method using the same
JP2013192256A (ja) * 2013-05-27 2013-09-26 Toshiba Corp 通信装置
JP2015177261A (ja) * 2014-03-13 2015-10-05 株式会社東芝 通信装置、情報処理装置、通信方法及び通信プログラム
JP2015197699A (ja) * 2014-03-31 2015-11-09 三井住友カード株式会社 加盟店提供データ出力システム

Cited By (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US7849214B2 (en) 2006-12-04 2010-12-07 Electronics And Telecommunications Research Institute Packet receiving hardware apparatus for TCP offload engine and receiving system and method using the same
JP2013192256A (ja) * 2013-05-27 2013-09-26 Toshiba Corp 通信装置
JP2015177261A (ja) * 2014-03-13 2015-10-05 株式会社東芝 通信装置、情報処理装置、通信方法及び通信プログラム
US9961147B2 (en) 2014-03-13 2018-05-01 Kabushiki Kaisha Toshiba Communication apparatus, information processor, communication method, and computer-readable storage medium
JP2015197699A (ja) * 2014-03-31 2015-11-09 三井住友カード株式会社 加盟店提供データ出力システム

Also Published As

Publication number Publication date
JP4415391B2 (ja) 2010-02-17

Similar Documents

Publication Publication Date Title
US7840682B2 (en) Distributed kernel operating system
US8667184B2 (en) Distributed kernel operating system
JP5353278B2 (ja) 通信装置
JP5960186B2 (ja) 仮想通信路構築システム、仮想通信路構築方法、及び仮想通信路構築プログラム
CN112631788B (zh) 数据传输方法及数据传输服务器
WO2014082562A1 (en) Method, device, and system for information processing based on distributed buses
US10735294B2 (en) Integrating a communication bridge into a data processing system
JP2008005315A (ja) データ通信プログラム
WO2004040819A2 (en) An apparatus and method for receive transport protocol termination
JPWO2009096029A1 (ja) パケット処理装置およびパケット処理プログラム
JP4415391B2 (ja) データをネットワークに送信する方法及び装置並びにデータをネットワークから受信する方法及び装置
US9407715B2 (en) Method and system for information exchange utilizing an asynchronous persistent store protocol
EP1694007B1 (en) Method and apparatus for transmitting data to a network and method and apparatus for receiving data from a network
JP2010092336A (ja) ストレージシステム及び通信方法
US20160261719A1 (en) Information processing system, control program, and control method
US7672239B1 (en) System and method for conducting fast offloading of a connection onto a network interface card
US20210168220A1 (en) Hybrid proxying with user space hold
EP3229145A1 (en) Parallel processing apparatus and communication control method
CN116760510B (zh) 一种消息发送方法、消息接收方法、装置和设备
WO2020184381A1 (ja) 処理装置、情報処理システム、情報処理方法、及びプログラム
JP5262329B2 (ja) スケジューリングプログラム,スケジューリング方法及びスケジューリング装置
JP5691958B2 (ja) PPPoEクライアント装置
JP2003348134A (ja) 通信経路選択システム
CN117812130A (zh) 一种报文传输方法及装置
JP2003218976A (ja) 半導体装置

Legal Events

Date Code Title Description
RD04 Notification of resignation of power of attorney

Free format text: JAPANESE INTERMEDIATE CODE: A7424

Effective date: 20080528

A977 Report on retrieval

Free format text: JAPANESE INTERMEDIATE CODE: A971007

Effective date: 20080613

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20080730

A521 Written amendment

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20080926

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20090319

A521 Written amendment

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20090518

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20090609

A521 Written amendment

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20090724

TRDD Decision of grant or rejection written
A01 Written decision to grant a patent or to grant a registration (utility model)

Free format text: JAPANESE INTERMEDIATE CODE: A01

Effective date: 20091102

A01 Written decision to grant a patent or to grant a registration (utility model)

Free format text: JAPANESE INTERMEDIATE CODE: A01

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20091115

R150 Certificate of patent or registration of utility model

Ref document number: 4415391

Country of ref document: JP

Free format text: JAPANESE INTERMEDIATE CODE: R150

Free format text: JAPANESE INTERMEDIATE CODE: R150

FPAY Renewal fee payment (event date is renewal date of database)

Free format text: PAYMENT UNTIL: 20121204

Year of fee payment: 3

FPAY Renewal fee payment (event date is renewal date of database)

Free format text: PAYMENT UNTIL: 20121204

Year of fee payment: 3

FPAY Renewal fee payment (event date is renewal date of database)

Free format text: PAYMENT UNTIL: 20131204

Year of fee payment: 4

LAPS Cancellation because of no payment of annual fees