(57)【特許請求の範囲】
【請求項１】
少なくとも部分的に少なくとも１つのホストに関連して使用可能な装置であって、
当該装置は、データの少なくとも１つの部分が少なくとも１つのデータプロセッサによる処理に利用可能であることの少なくとも１つのインジケーションを少なくとも部分的に提供する回路を有し、前記少なくとも１つのインジケーションは少なくとも部分的に、前記データの前記少なくとも１つの部分の全体が前記少なくとも１つのデータプロセッサによる前記処理に利用可能になるのに先立って提供され、前記少なくとも１つのデータプロセッサは、前記少なくとも１つのインジケーションに少なくとも部分的に応答して前記処理を開始し、
前記回路は、ホストメモリ内の少なくとも１つのメモリマップト入力／出力（ＭＭＩＯ）空間に前記少なくとも１つのインジケーションを少なくとも部分的に書き込み、前記少なくとも１つのＭＭＩＯ空間は、前記少なくとも１つのデータプロセッサに少なくとも部分的に関連付けられ、
前記データは、前記データの前記少なくとも１つの部分と、前記データの少なくとも１つのその他の部分とを有し、
前記少なくとも１つのインジケーションは、前記データの前記少なくとも１つの部分への少なくとも１つのポインタを有し、
前記少なくとも１つのインジケーションは、前記データの前記少なくとも１つの部分と前記データの前記少なくとも１つのその他の部分との双方が前記少なくとも１つのデータプロセッサによる前記処理に利用可能であることを指し示し、
前記少なくとも１つのデータプロセッサは、前記データの前記少なくとも１つのその他の部分が前記少なくとも１つのデータプロセッサによる前記処理に実際に利用可能になるのに先立って、前記データの前記少なくとも１つの部分の前記処理を開始し、且つ
前記回路は、前記少なくとも１つのデータプロセッサによる前記データの前記少なくとも１つの部分の前記処理と少なくとも部分的に同時に、前記データの前記少なくとも１つのその他の部分を前記少なくとも１つのデータプロセッサによる前記処理に少なくとも部分的に利用可能にする、
装置。
【請求項２】
前記回路は、少なくとも１つのホストプロセッサを少なくとも部分的に有し、
少なくとも１つの回路基板が、ホストメモリと前記少なくとも１つのホストプロセッサとを少なくとも部分的に有し、
前記少なくとも１つのデータプロセッサは、ネットワークインタフェースコントローラ（ＮＩＣ）回路（ＮＩＣＣ）を少なくとも部分的に有し、
少なくとも１つの回路カードが、前記ＮＩＣＣを少なくとも部分的に有し、
前記少なくとも１つの回路カードは、前記少なくとも１つの回路基板に少なくとも部分的に通信可能に結合され、
前記少なくとも１つのインジケーションは、前記ホストメモリに少なくとも部分的に書き込まれる少なくとも１つのドアベルを有し、且つ
前記少なくとも１つのドアベルは、
前記データの前記少なくとも１つの部分への少なくとも１つのポインタと、
前記データの前記少なくとも１つの部分の少なくとも１つのサイズを少なくとも部分的に指し示す少なくとも１つのインジケータと
を有する、
請求項１に記載の装置。
【請求項３】
少なくとも部分的に少なくとも１つのホストに関連して使用可能な装置であって、
当該装置は、データの少なくとも１つの部分が少なくとも１つのデータプロセッサによる処理に利用可能であることの少なくとも１つのインジケーションを少なくとも部分的に提供する回路を有し、前記少なくとも１つのインジケーションは少なくとも部分的に、前記データの前記少なくとも１つの部分の全体が前記少なくとも１つのデータプロセッサによる前記処理に利用可能になるのに先立って提供され、前記少なくとも１つのデータプロセッサは、前記少なくとも１つのインジケーションに少なくとも部分的に応答して前記処理を開始し、
前記回路は、ホストメモリの少なくとも１つのサブセットに、
前記データの前記少なくとも１つの部分と、
前記データの前記少なくとも１つの部分の少なくとも１つのディスクリプタと、
前記ホストメモリの前記少なくとも１つのサブセットのコンテンツに少なくとも部分的に関連付けられた情報であり、前記ホストメモリの前記少なくとも１つのサブセットに書き込まれた前記データの前記少なくとも１つの部分及び前記少なくとも１つのディスクリプタが有効であるかを少なくとも部分的に指し示す情報と
を書き込み、
前記少なくとも１つのデータプロセッサは、前記データの前記少なくとも１つの部分、前記少なくとも１つのディスクリプタ及び前記情報の読み取りを、該読み取りが、前記回路による前記ホストメモリの前記少なくとも１つのサブセットへの前記データの前記少なくとも１つの部分、前記少なくとも１つのディスクリプタ及び前記情報の書き込みと、少なくとも部分的に同時に行われるように、開始する、
装置。
【請求項４】
前記ホストメモリの前記少なくとも１つのサブセットは、
前記少なくとも１つのディスクリプタを格納する、ホストカーネルメモリ内の少なくとも１つの予め割り当てられたメモリリングと、
前記データの前記少なくとも１つの部分を格納する少なくとも１つのホストカーネルメモリバッファと
を有し、
前記少なくとも１つのディスクリプタは、前記データの前記少なくとも１つの部分が前記少なくとも１つのホストカーネルメモリバッファに書き込まれた後に、前記少なくとも１つの予め割り当てられたメモリリングに書き込まれ、
前記少なくとも１つのインジケーションは、前記少なくとも１つのデータプロセッサに少なくとも部分的に関連付けられた少なくとも１つのドアベルリングに書き込まれる少なくとも１つのドアベルを有し、且つ
前記少なくとも１つのデータプロセッサは、前記情報を調べて、前記少なくとも１つのディスクリプタ及び前記データの前記少なくとも１つの部分が有効であるかを少なくとも部分的に決定する、
請求項３に記載の装置。
【請求項５】
前記情報は、
前記少なくとも１つのディスクリプタが有効であるかを少なくとも部分的に指し示すそれぞれのディスクリプタ情報と、
前記データの前記少なくとも１つの部分が有効であるかを少なくとも部分的に指し示すそれぞれのデータ部分情報と
を有し、
前記少なくとも１つのデータプロセッサが前記データの前記少なくとも１つの部分及び前記少なくとも１つのディスクリプタを処理した後、前記少なくとも１つのデータプロセッサは、前記データの前記少なくとも１つの部分及び前記少なくとも１つのディスクリプタがもはや有効でなく且つ再利用のために前記回路に利用可能にされていることを指し示すよう、前記それぞれのデータ部分情報及び前記それぞれのディスクリプタ情報を変更する、
請求項４に記載の装置。
【請求項６】
前記回路は、前記データの前記少なくとも１つの部分を、少なくとも１つのアプリケーションバッファから前記少なくとも１つのホストカーネルメモリバッファにコピーし、
前記少なくとも１つのインジケーションは、
前記少なくとも１つのホストカーネルメモリバッファ内の前記データの前記少なくとも１つの部分の少なくとも１つの位置と、
前記少なくとも１つのデータプロセッサによって処理されるべき前記データの部分数と
を少なくとも部分的に指し示し、
前記少なくとも１つのデータプロセッサは、前記データの前記部分数の全てを前記少なくとも１つのデータプロセッサが完全に処理したかを少なくとも部分的に決定することに使用されるカウンタを維持管理する、
請求項４に記載の装置。
【請求項７】
少なくとも部分的に少なくとも１つのホストに関連して実行される方法であって、
当該方法は、回路により、データの少なくとも１つの部分が少なくとも１つのデータプロセッサによる処理に利用可能であることの少なくとも１つのインジケーションを少なくとも部分的に提供することを有し、前記少なくとも１つのインジケーションは少なくとも部分的に、前記データの前記少なくとも１つの部分の全体が前記少なくとも１つのデータプロセッサによる前記処理に利用可能になるのに先立って提供され、前記少なくとも１つのデータプロセッサは、前記少なくとも１つのインジケーションに少なくとも部分的に応答して前記処理を開始し、
前記回路は、ホストメモリ内の少なくとも１つのメモリマップト入力／出力（ＭＭＩＯ）空間に前記少なくとも１つのインジケーションを少なくとも部分的に書き込み、前記少なくとも１つのＭＭＩＯ空間は、前記少なくとも１つのデータプロセッサに少なくとも部分的に関連付けられ、
前記データは、前記データの前記少なくとも１つの部分と、前記データの少なくとも１つのその他の部分とを有し、
前記少なくとも１つのインジケーションは、前記データの前記少なくとも１つの部分への少なくとも１つのポインタを有し、
前記少なくとも１つのインジケーションは、前記データの前記少なくとも１つの部分と前記データの前記少なくとも１つのその他の部分との双方が前記少なくとも１つのデータプロセッサによる前記処理に利用可能であることを指し示し、
前記少なくとも１つのデータプロセッサは、前記データの前記少なくとも１つのその他の部分が前記少なくとも１つのデータプロセッサによる前記処理に実際に利用可能になるのに先立って、前記データの前記少なくとも１つの部分の前記処理を開始し、且つ
前記回路は、前記少なくとも１つのデータプロセッサによる前記データの前記少なくとも１つの部分の前記処理と少なくとも部分的に同時に、前記データの前記少なくとも１つのその他の部分を前記少なくとも１つのデータプロセッサによる前記処理に少なくとも部分的に利用可能にする、
方法。
【請求項８】
前記回路は、少なくとも１つのホストプロセッサを少なくとも部分的に有し、
少なくとも１つの回路基板が、ホストメモリと前記少なくとも１つのホストプロセッサとを少なくとも部分的に有し、
前記少なくとも１つのデータプロセッサは、ネットワークインタフェースコントローラ（ＮＩＣ）回路（ＮＩＣＣ）を少なくとも部分的に有し、
少なくとも１つの回路カードが、前記ＮＩＣＣを少なくとも部分的に有し、
前記少なくとも１つの回路カードは、前記少なくとも１つの回路基板に少なくとも部分的に通信可能に結合され、
前記少なくとも１つのインジケーションは、前記ホストメモリに少なくとも部分的に書き込まれる少なくとも１つのドアベルを有し、且つ
前記少なくとも１つのドアベルは、
前記データの前記少なくとも１つの部分への少なくとも１つのポインタと、
前記データの前記少なくとも１つの部分の少なくとも１つのサイズを少なくとも部分的に指し示す少なくとも１つのインジケータと
を有する、
請求項７に記載の方法。
【請求項９】
少なくとも部分的に少なくとも１つのホストに関連して実行される方法であって、
当該方法は、回路により、データの少なくとも１つの部分が少なくとも１つのデータプロセッサによる処理に利用可能であることの少なくとも１つのインジケーションを少なくとも部分的に提供することを有し、前記少なくとも１つのインジケーションは少なくとも部分的に、前記データの前記少なくとも１つの部分の全体が前記少なくとも１つのデータプロセッサによる前記処理に利用可能になるのに先立って提供され、前記少なくとも１つのデータプロセッサは、前記少なくとも１つのインジケーションに少なくとも部分的に応答して前記処理を開始し、
前記回路は、ホストメモリの少なくとも１つのサブセットに、
前記データの前記少なくとも１つの部分と、
前記データの前記少なくとも１つの部分の少なくとも１つのディスクリプタと、
前記ホストメモリの前記少なくとも１つのサブセットのコンテンツに少なくとも部分的に関連付けられた情報であり、前記ホストメモリの前記少なくとも１つのサブセットに書き込まれた前記データの前記少なくとも１つの部分及び前記少なくとも１つのディスクリプタが有効であるかを少なくとも部分的に指し示す情報と
を書き込み、
前記少なくとも１つのデータプロセッサは、前記データの前記少なくとも１つの部分、前記少なくとも１つのディスクリプタ及び前記情報の読み取りを、該読み取りが、前記回路による前記ホストメモリの前記少なくとも１つのサブセットへの前記データの前記少なくとも１つの部分、前記少なくとも１つのディスクリプタ及び前記情報の書き込みと、少なくとも部分的に同時に行われるように、開始する、
方法。
【請求項１０】
前記ホストメモリの前記少なくとも１つのサブセットは、
前記少なくとも１つのディスクリプタを格納する、ホストカーネルメモリ内の少なくとも１つの予め割り当てられたメモリリングと、
前記データの前記少なくとも１つの部分を格納する少なくとも１つのホストカーネルメモリバッファと
を有し、
前記少なくとも１つのディスクリプタは、前記データの前記少なくとも１つの部分が前記少なくとも１つのホストカーネルメモリバッファに書き込まれた後に、前記少なくとも１つの予め割り当てられたメモリリングに書き込まれ、
前記少なくとも１つのインジケーションは、前記少なくとも１つのデータプロセッサに少なくとも部分的に関連付けられた少なくとも１つのドアベルリングに書き込まれる少なくとも１つのドアベルを有し、且つ
前記少なくとも１つのデータプロセッサは、前記情報を調べて、前記少なくとも１つのディスクリプタ及び前記データの前記少なくとも１つの部分が有効であるかを少なくとも部分的に決定する、
請求項９に記載の方法。
【請求項１１】
前記情報は、
前記少なくとも１つのディスクリプタが有効であるかを少なくとも部分的に指し示すそれぞれのディスクリプタ情報と、
前記データの前記少なくとも１つの部分が有効であるかを少なくとも部分的に指し示すそれぞれのデータ部分情報と
を有し、
前記少なくとも１つのデータプロセッサが前記データの前記少なくとも１つの部分及び前記少なくとも１つのディスクリプタを処理した後、前記少なくとも１つのデータプロセッサは、前記データの前記少なくとも１つの部分及び前記少なくとも１つのディスクリプタがもはや有効でなく且つ再利用のために前記回路に利用可能にされていることを指し示すよう、前記それぞれのデータ部分情報及び前記それぞれのディスクリプタ情報を変更する、
請求項１０に記載の方法。
【請求項１２】
前記回路は、前記データの前記少なくとも１つの部分を、少なくとも１つのアプリケーションバッファから前記少なくとも１つのホストカーネルメモリバッファにコピーし、
前記少なくとも１つのインジケーションは、
前記少なくとも１つのホストカーネルメモリバッファ内の前記データの前記少なくとも１つの部分の少なくとも１つの位置と、
前記少なくとも１つのデータプロセッサによって処理されるべき前記データの部分数と
を少なくとも部分的に指し示し、
前記少なくとも１つのデータプロセッサは、前記データの前記部分数の全てを前記少なくとも１つのデータプロセッサが完全に処理したかを少なくとも部分的に決定することに使用されるカウンタを維持管理する、
請求項１０に記載の方法。
【請求項１３】
１つ以上の命令を格納したコンピュータ読み取り可能メモリであって、
前記１つ以上の命令は、機械によって実行されるときに、回路により、データの少なくとも１つの部分が少なくとも１つのデータプロセッサによる処理に利用可能であることの少なくとも１つのインジケーションを少なくとも部分的に提供すること、を有する処理の実行をもたらし、前記少なくとも１つのインジケーションは少なくとも部分的に、前記データの前記少なくとも１つの部分の全体が前記少なくとも１つのデータプロセッサによる前記処理に利用可能になるのに先立って提供され、前記少なくとも１つのデータプロセッサは、前記少なくとも１つのインジケーションに少なくとも部分的に応答して前記処理を開始し、
前記回路は、ホストメモリ内の少なくとも１つのメモリマップト入力／出力（ＭＭＩＯ）空間に前記少なくとも１つのインジケーションを少なくとも部分的に書き込み、前記少なくとも１つのＭＭＩＯ空間は、前記少なくとも１つのデータプロセッサに少なくとも部分的に関連付けられ、
前記データは、前記データの前記少なくとも１つの部分と、前記データの少なくとも１つのその他の部分とを有し、
前記少なくとも１つのインジケーションは、前記データの前記少なくとも１つの部分への少なくとも１つのポインタを有し、
前記少なくとも１つのインジケーションは、前記データの前記少なくとも１つの部分と前記データの前記少なくとも１つのその他の部分との双方が前記少なくとも１つのデータプロセッサによる前記処理に利用可能であることを指し示し、
前記少なくとも１つのデータプロセッサは、前記データの前記少なくとも１つのその他の部分が前記少なくとも１つのデータプロセッサによる前記処理に実際に利用可能になるのに先立って、前記データの前記少なくとも１つの部分の前記処理を開始し、且つ
前記回路は、前記少なくとも１つのデータプロセッサによる前記データの前記少なくとも１つの部分の前記処理と少なくとも部分的に同時に、前記データの前記少なくとも１つのその他の部分を前記少なくとも１つのデータプロセッサによる前記処理に少なくとも部分的に利用可能にする、
コンピュータ読み取り可能メモリ。
【請求項１４】
前記回路は、少なくとも１つのホストプロセッサを少なくとも部分的に有し、
少なくとも１つの回路基板が、ホストメモリと前記少なくとも１つのホストプロセッサとを少なくとも部分的に有し、
前記少なくとも１つのデータプロセッサは、ネットワークインタフェースコントローラ（ＮＩＣ）回路（ＮＩＣＣ）を少なくとも部分的に有し、
少なくとも１つの回路カードが、前記ＮＩＣＣを少なくとも部分的に有し、
前記少なくとも１つの回路カードは、前記少なくとも１つの回路基板に少なくとも部分的に通信可能に結合され、
前記少なくとも１つのインジケーションは、前記ホストメモリに少なくとも部分的に書き込まれる少なくとも１つのドアベルを有し、且つ
前記少なくとも１つのドアベルは、
前記データの前記少なくとも１つの部分への少なくとも１つのポインタと、
前記データの前記少なくとも１つの部分の少なくとも１つのサイズを少なくとも部分的に指し示す少なくとも１つのインジケータと
を有する、
請求項１３に記載のコンピュータ読み取り可能メモリ。
【請求項１５】
１つ以上の命令を格納したコンピュータ読み取り可能メモリであって、
前記１つ以上の命令は、機械によって実行されるときに、回路により、データの少なくとも１つの部分が少なくとも１つのデータプロセッサによる処理に利用可能であることの少なくとも１つのインジケーションを少なくとも部分的に提供すること、を有する処理の実行をもたらし、前記少なくとも１つのインジケーションは少なくとも部分的に、前記データの前記少なくとも１つの部分の全体が前記少なくとも１つのデータプロセッサによる前記処理に利用可能になるのに先立って提供され、前記少なくとも１つのデータプロセッサは、前記少なくとも１つのインジケーションに少なくとも部分的に応答して前記処理を開始し、
前記回路は、ホストメモリの少なくとも１つのサブセットに、
前記データの前記少なくとも１つの部分と、
前記データの前記少なくとも１つの部分の少なくとも１つのディスクリプタと、
前記ホストメモリの前記少なくとも１つのサブセットのコンテンツに少なくとも部分的に関連付けられた情報であり、前記ホストメモリの前記少なくとも１つのサブセットに書き込まれた前記データの前記少なくとも１つの部分及び前記少なくとも１つのディスクリプタが有効であるかを少なくとも部分的に指し示す情報と
を書き込み、
前記少なくとも１つのデータプロセッサは、前記データの前記少なくとも１つの部分、前記少なくとも１つのディスクリプタ及び前記情報の読み取りを、該読み取りが、前記回路による前記ホストメモリの前記少なくとも１つのサブセットへの前記データの前記少なくとも１つの部分、前記少なくとも１つのディスクリプタ及び前記情報の書き込みと、少なくとも部分的に同時に行われるように、開始する、
コンピュータ読み取り可能メモリ。
【請求項１６】
前記ホストメモリの前記少なくとも１つのサブセットは、
前記少なくとも１つのディスクリプタを格納する、ホストカーネルメモリ内の少なくとも１つの予め割り当てられたメモリリングと、
前記データの前記少なくとも１つの部分を格納する少なくとも１つのホストカーネルメモリバッファと
を有し、
前記少なくとも１つのディスクリプタは、前記データの前記少なくとも１つの部分が前記少なくとも１つのホストカーネルメモリバッファに書き込まれた後に、前記少なくとも１つの予め割り当てられたメモリリングに書き込まれ、
前記少なくとも１つのインジケーションは、前記少なくとも１つのデータプロセッサに少なくとも部分的に関連付けられた少なくとも１つのドアベルリングに書き込まれる少なくとも１つのドアベルを有し、且つ
前記少なくとも１つのデータプロセッサは、前記情報を調べて、前記少なくとも１つのディスクリプタ及び前記データの前記少なくとも１つの部分が有効であるかを少なくとも部分的に決定する、
請求項１５に記載のコンピュータ読み取り可能メモリ。
【請求項１７】
前記情報は、
前記少なくとも１つのディスクリプタが有効であるかを少なくとも部分的に指し示すそれぞれのディスクリプタ情報と、
前記データの前記少なくとも１つの部分が有効であるかを少なくとも部分的に指し示すそれぞれのデータ部分情報と
を有し、
前記少なくとも１つのデータプロセッサが前記データの前記少なくとも１つの部分及び前記少なくとも１つのディスクリプタを処理した後、前記少なくとも１つのデータプロセッサは、前記データの前記少なくとも１つの部分及び前記少なくとも１つのディスクリプタがもはや有効でなく且つ再利用のために前記回路に利用可能にされていることを指し示すよう、前記それぞれのデータ部分情報及び前記それぞれのディスクリプタ情報を変更する、
請求項１６に記載のコンピュータ読み取り可能メモリ。
【請求項１８】
前記回路は、前記データの前記少なくとも１つの部分を、少なくとも１つのアプリケーションバッファから前記少なくとも１つのホストカーネルメモリバッファにコピーし、
前記少なくとも１つのインジケーションは、
前記少なくとも１つのホストカーネルメモリバッファ内の前記データの前記少なくとも１つの部分の少なくとも１つの位置と、
前記少なくとも１つのデータプロセッサによって処理されるべき前記データの部分数と
を少なくとも部分的に指し示し、
前記少なくとも１つのデータプロセッサは、前記データの前記部分数の全てを前記少なくとも１つのデータプロセッサが完全に処理したかを少なくとも部分的に決定することに使用されるカウンタを維持管理する、
請求項１６に記載のコンピュータ読み取り可能メモリ。
【請求項１９】
前記少なくとも１つのインジケーションは、前記ホストメモリに少なくとも部分的に書き込まれる少なくとも１つのドアベルを有し、且つ
前記少なくとも１つのドアベルは、
前記データの前記少なくとも１つの部分への少なくとも１つのポインタと、
前記データの前記少なくとも１つの部分の少なくとも１つのディスクリプタと、
前記データの前記少なくとも１つの部分の少なくとも１つのサイズを少なくとも部分的に指し示す少なくとも１つのインジケータと
を有する、
請求項１に記載の装置。
【請求項２０】
少なくとも部分的に少なくとも１つのホストに関連して使用可能な装置であって、
当該装置は、データの少なくとも１つの部分が少なくとも１つのデータプロセッサによる処理に利用可能であることの少なくとも１つのインジケーションを少なくとも部分的に提供する手段を有し、前記少なくとも１つのインジケーションは少なくとも部分的に、前記データの前記少なくとも１つの部分の全体が前記少なくとも１つのデータプロセッサによる前記処理に利用可能になるのに先立って提供され、前記少なくとも１つのデータプロセッサは、前記少なくとも１つのインジケーションに少なくとも部分的に応答して前記処理を開始し、
前記手段は、ホストメモリ内の少なくとも１つのメモリマップト入力／出力（ＭＭＩＯ）空間に前記少なくとも１つのインジケーションを少なくとも部分的に書き込み、前記少なくとも１つのＭＭＩＯ空間は、前記少なくとも１つのデータプロセッサに少なくとも部分的に関連付けられ、
前記データは、前記データの前記少なくとも１つの部分と、前記データの少なくとも１つのその他の部分とを有し、
前記少なくとも１つのインジケーションは、前記データの前記少なくとも１つの部分への少なくとも１つのポインタを有し、
前記少なくとも１つのインジケーションは、前記データの前記少なくとも１つの部分と前記データの前記少なくとも１つのその他の部分との双方が前記少なくとも１つのデータプロセッサによる前記処理に利用可能であることを指し示し、
前記少なくとも１つのデータプロセッサは、前記データの前記少なくとも１つのその他の部分が前記少なくとも１つのデータプロセッサによる前記処理に実際に利用可能になるのに先立って、前記データの前記少なくとも１つの部分の前記処理を開始し、且つ
前記手段は、前記少なくとも１つのデータプロセッサによる前記データの前記少なくとも１つの部分の前記処理と少なくとも部分的に同時に、前記データの前記少なくとも１つのその他の部分を前記少なくとも１つのデータプロセッサによる前記処理に少なくとも部分的に利用可能にする、
装置。
【請求項２１】
前記手段は、少なくとも１つのホストプロセッサを少なくとも部分的に有し、
少なくとも１つの回路基板が、ホストメモリと前記少なくとも１つのホストプロセッサとを少なくとも部分的に有し、
前記少なくとも１つのデータプロセッサは、ネットワークインタフェースコントローラ（ＮＩＣ）回路（ＮＩＣＣ）を少なくとも部分的に有し、
少なくとも１つの回路カードが、前記ＮＩＣＣを少なくとも部分的に有し、
前記少なくとも１つの回路カードは、前記少なくとも１つの回路基板に少なくとも部分的に通信可能に結合され、
前記少なくとも１つのインジケーションは、前記ホストメモリに少なくとも部分的に書き込まれる少なくとも１つのドアベルを有し、且つ
前記少なくとも１つのドアベルは、
前記データの前記少なくとも１つの部分への少なくとも１つのポインタと、
前記データの前記少なくとも１つの部分の少なくとも１つのサイズを少なくとも部分的に指し示す少なくとも１つのインジケータと
を有する、
請求項２０に記載の装置。
【請求項２２】
少なくとも部分的に少なくとも１つのホストに関連して使用可能な装置であって、
当該装置は、データの少なくとも１つの部分が少なくとも１つのデータプロセッサによる処理に利用可能であることの少なくとも１つのインジケーションを少なくとも部分的に提供する手段を有し、前記少なくとも１つのインジケーションは少なくとも部分的に、前記データの前記少なくとも１つの部分の全体が前記少なくとも１つのデータプロセッサによる前記処理に利用可能になるのに先立って提供され、前記少なくとも１つのデータプロセッサは、前記少なくとも１つのインジケーションに少なくとも部分的に応答して前記処理を開始し、
前記手段は、ホストメモリの少なくとも１つのサブセットに、
前記データの前記少なくとも１つの部分と、
前記データの前記少なくとも１つの部分の少なくとも１つのディスクリプタと、
前記ホストメモリの前記少なくとも１つのサブセットのコンテンツに少なくとも部分的に関連付けられた情報であり、前記ホストメモリの前記少なくとも１つのサブセットに書き込まれた前記データの前記少なくとも１つの部分及び前記少なくとも１つのディスクリプタが有効であるかを少なくとも部分的に指し示す情報と
を書き込み、
前記少なくとも１つのデータプロセッサは、前記データの前記少なくとも１つの部分、前記少なくとも１つのディスクリプタ及び前記情報の読み取りを、該読み取りが、前記手段による前記ホストメモリの前記少なくとも１つのサブセットへの前記データの前記少なくとも１つの部分、前記少なくとも１つのディスクリプタ及び前記情報の書き込みと、少なくとも部分的に同時に行われるように、開始する、
装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本開示は、少なくとも１つのコントローラコマンドインタフェースのアクセスを、少なくとも部分的に回路によって支援することに関する。
【背景技術】
【０００２】
従来のネットワーキング構成では、ホストメモリから送信されるパケットをフェッチするために、従来からのプル又はプッシュ技術が使用されている。例えば、従来のプル技術においては、使用される特定のホストオペレーティングシステムに応じて、ホスト中央演算処理装置（ＣＰＵ）が、パケット及びそのディスクリプタをホストカーネルメモリに書き込むか、あるいは、アプリケーションバッファ（パケットを含む）をホストカーネルに渡した後にパケットのヘッダ及びディスクリプタをカーネルメモリに書き込むかの何れかを行う。その後、この従来のプル技術においては、ＣＰＵが、ドアベルを書き込んでホストのネットワークインタフェースコントローラ（ＮＩＣ）に通報する。ドアベルに応答して、ＮＩＣがホストメモリからディスクリプタ及びパケットを読み出す。そして、ＮＩＣは、送信のためにパケットのスケジューリング及び処理を行った後に、ホストからパケットを送信する。
【０００３】
残念ながら、この従来のプル技術を実行する際に伴われる上述の処理は、ＮＩＣからパケットを取得し、処理し、そして送信する際にかなりのレイテンシを導入する。容易に理解され得るように、これらのレイテンシは、特に、レイテンシに対して耐性がなく且つ／或いはクリティカルなトラフィックの場合に、望ましくないものである。
【０００４】
従来のプッシュ技術においては、ＣＰＵが、パケット及び／又はディスクリプタを直接的にＮＩＣメモリにコピーすることによって、黙示的なドアベルを提供する。それに応答して、ＮＩＣが、送信のためにパケットのスケジューリング及び処理を行った後に、ホストからパケットを送信する。
【０００５】
残念ながら、この従来のプッシュ技術を実行する際に伴われる上述の処理は、ますます多くのパケットトラフィック及び／又はＣＰＵスレッドがパケット送信を要求することに対して十分に対応（スケーリング）しない。これは、少なくとも部分的に、この従来のプッシュ技術がこのようなパケット送信／トランザクションの各々にかなりの量のＮＩＣ（例えば、オンダイ）メモリを使用することの結果である。また、使用されるホストバスプロトコル／内部輸送アーキテクチャに応じて、（例えばＮＩＣメモリへの）バス／内部輸送機構上でのポステッドライトの集中的な使用が、各パケット送信／トランザクションに関与し得る。これは、特に、対応する完全なるポステッドライトに一致することを困難にするようにＣＰＵ命令の並べ替えが行われるときに、ホストＣＰＵの性能を低下させ得る。
【０００６】
この従来のプッシュ技術の更なる不利益は、送信トラフィックがバースト性であって、それにより、かなりの量のトラフィックが比較的短い期間に生成されるときに明らかになる。例えば、そのようなバースト性トラフィックは、パケットプッシュトランザクションン向けのＮＩＣメモリを完全に充たしてしまい、それにより、十分なＮＩＣメモリ空間が供給されるまで（例えば、ＮＩＣメモリに現に格納されている他のパケットがホストから送信される後まで）、ＣＰＵスレッドを失速させて、更なるパケットを送信用にＮＩＣに送ることをできなくさせてしまい得る。これは、有意な性能低下をもたらし得る。この状況は、レイテンシに対して耐性がなく且つ／或いはクリティカルなトラフィックに対して特に有害な影響を及ぼし得る。この問題を改善することを試みて追加のＮＩＣメモリを設けることはできる。しかしながら、ＮＩＣメモリを追加することは、ＮＩＣコストを増大させる。
【発明の概要】
【発明が解決しようとする課題】
【０００７】
一実施形態により、少なくとも部分的に少なくとも１つのホストに関連して使用可能な装置を提供する。
【課題を解決するための手段】
【０００８】
は、データの少なくとも１つの部分が少なくとも１つのデータプロセッサによる処理に利用可能であることの少なくとも１つのインジケーションを少なくとも部分的に提供し得る回路を含み得る。前記少なくとも１つのインジケーションは少なくとも部分的に、データの前記少なくとも１つの部分の全体が前記少なくとも１つのデータプロセッサによる処理に利用可能になるのに先立って提供され得る。前記少なくとも１つのデータプロセッサは、前記少なくとも１つのインジケーションに少なくとも部分的に応答して処理を開始し得る。
【図面の簡単な説明】
【０００９】
以下の詳細な説明が進むにつれて、また、図面を参照することで、実施形態の特徴及び利点が明らかになる。図面において、同様の部分は似通った参照符号で指し示す。
【図１】システムの一実施形態を例示する図である。
【図２】一実施形態における機構を例示する図である。
【図３】一実施形態における機構を例示する図である。
【図４】一実施形態における機構を例示する図である。  以下の詳細な説明を、例示的な実施形態を参照しながら進めるが、数多くの代替、変更及び変形が当業者に明らかになる。従って、特許請求に係る事項は広く見られるべきものである。
【発明を実施するための形態】
【００１０】
図１は、一実施形態に係るシステム１００を示している。システム１００は、ネットワーク５１を介して１つ以上のホスト２０に通信可能に結合され得る１つ以上のホスト１０を含み得る。この実施形態において、用語“ホストコンピュータ”、“ホスト”、“サーバ”、“クライアント”、“ネットワークノード”、及び“ノード”は、相互に入れ替え可能に使用されることがあり、また、限定ではないが例えば、１つ以上のエンドステーション、モバイルインターネット装置、スマートフォン、メディア装置、入力／出力（Ｉ／Ｏ）装置、タブレットコンピュータ、家電機器、中間局、ネットワークインタフェース、クライアント、サーバ、及び／又はこれらの部分を意味し得る。この実施形態において、“ネットワーク”は、２つ以上のエンティティがともに通信可能に結合されることを少なくとも部分的に許容、支援且つ／或いは可能化する如何なる機構、手段、様式、及び／又はこれらの部分であるか有するかであってもよい。また、この実施形態において、第１のエンティティが第２のエンティティに“通信可能に結合”されるのは、第１のエンティティが１つ以上のコマンド及び／又はデータを第２のエンティティとの間で送信及び／又は受信することができる場合であるとし得る。この実施形態において、データ及び情報は、相互に入れ替え可能に使用されることがあり、１つ以上のコマンド（例えば、１つ以上のプログラム命令）であるか有するかであるとすることができ、且つ／或いは、１つ以上のそのようなコマンドはデータ及び／又は情報であるか有するかであるとし得る。また、この実施形態において、命令はデータ及び／又は１つ以上のコマンドを有し得る。さらに、この実施形態において、データは１つ以上の命令及び／又はコマンドを有し得る。この実施形態において、１つ以上のホスト１０は、１つ以上のホスト２０から少なくとも部分的に遠隔（例えば、地理的に遠隔）であり得る。
【００１１】
１つ以上のホスト１０は、１つ以上の回路カード（サーキットカード；ＣＣ）３７に（例えば、少なくとも部分的に回路基板３５に含まれた１つ以上の図示しないカードスロット及び／又はその他のインターコネクトを介して）通信可能に結合され得る１つ以上の回路基板（サーキットボード；ＣＢ）３５を有し得る。例えば、図示していないが、１つ以上の回路基板３５は、１つ以上のカードスロット及び／又はその他のインターコネクトを有し得る。また、例えば、１つ以上の回路カード３７は、１つ以上の回路基板及び回路カード３７（並びにこれらの１つ以上のそれぞれのコンポーネント）が少なくとも部分的に互いに対して電気的に結合され且つ／或いは物理的に係合されるよう、１つ以上のスロット及び／又は１つ以上の回路基板３５のインターコネクトに対して少なくとも部分的に挿入且つ／或いは係合されることができるように構築され得る１つ以上の係合するインターコネクトを有し得る。
【００１２】
この実施形態において、１つ以上の回路基板３５は、回路１１８を少なくとも部分的に有し得る。回路１１８は、１つ以上のシングルコア及び／又はマルチコアのホストプロセッサ（ＨＰ）１２、１つ以上のチップセット（ＣＳ）１５、及び／又はメモリ２１を少なくとも部分的に有し得る。１つ以上のチップセット１５は、１つ以上のホストプロセッサ１２をメモリ２１、１つ以上の回路カード３７、１つ以上のデータプロセッサ（ＤＰ）１０８、ＮＩＣＣ１２０、及び／又は１つ以上のＮＩＣ１２１に、少なくとも部分的に通信可能に結合し得る。
【００１３】
また、この実施形態において、１つ以上の回路カード３７は、１つ以上のデータプロセッサ１０８を少なくとも部分的に有し得る。１つ以上のデータプロセッサ１０８は、１つ以上のネットワークインタフェースコントローラ（ＮＩＣ）１２１を少なくとも部分的に有し得るネットワークインタフェースコントローラ回路（ＮＩＣＣ）１２０を少なくとも部分的に有し得る。１つ以上のＮＩＣ１２１は、メモリ１２２を少なくとも部分的に有し得る。
【００１４】
この実施形態において、“回路”は、例えば、単独に、あるいは組み合わせにて、アナログ回路、デジタル回路、ハードワイヤード回路、プログラマブル回路、コプロセッサ回路、状態マシン回路、及び／又はプログラマブル回路によって実行され得るプログラム命令を有し得るメモリ、であるか有するかであり得る。また、この実施形態において、プロセッサ、ホストプロセッサ、中央演算処理ユニット、プロセッサコア、コア、及び／又はコントローラは各々、１つ以上の算術演算及び／又は論理演算を少なくとも部分的に実行すること、及び／又は１つ以上の命令を少なくとも部分的に実行することが可能なそれぞれの回路であるか有するかであり得る。この実施形態において、チップセットは、１つ以上のホストプロセッサ及び／又はメモリが少なくとも部分的に通信可能に結合されることを少なくとも部分的に可能にし得る回路を少なくとも部分的に有し得る１つ以上の集積回路チップであるか有するかであり得る。この実施形態において、集積回路チップは、１つ以上のマイクロエレクトロニクスデバイス、基板、及び／又はダイであるか有するかであり得る。また、この実施形態において、メモリは、以下の種類のメモリのうちの１つ以上であるか有するかであり得る：半導体ファームウェアメモリ、揮発性メモリ、プログラマブルメモリ、不揮発性メモリ、読み出し専用メモリ、電気的プログラム可能メモリ、ランダムアクセスメモリ、フラッシュメモリ、磁気ディスクメモリ、光ディスクメモリ、及び／又はその他の、あるいは後に開発されるコンピュータ読取可能／書込可能メモリ。
【００１５】
図示していないが、１つ以上のホスト１０及び／又は２０は各々、１つ以上のそれぞれのグラフィカルユーザインタフェースシステムを少なくとも部分的に有し得る。これらのグラフィカルユーザインタフェースシステムの各々は、例えば、人間ユーザが１つ以上のホスト１０、１つ以上のホスト２０、及び／又はシステム１００のコマンドを入力すること及び／又はそれらの動作を監視することを可能にし得る１つ以上のそれぞれのキーボード、ポインティング装置、及び／又はディスプレイシステムを少なくとも部分的に有し得る。
【００１６】
この実施形態において、データのアクセスは、少なくとも部分的に、データの一回以上の読み取り及び／又は書き込みであるか有するかであり得る。また、この実施形態において、データを読み取ることは少なくとも部分的に、（例えば、メモリからの）データの少なくとも部分的な取得及び／又は取り出しを少なくとも部分的に支援し、含み、且つ／或いはもたらし得る１つ以上のトランザクション及び／又は出来事であるか有するかであり得る。この実施形態において、データを書き込むことは少なくとも部分的に、（例えば、メモリへの）データの少なくとも一時的且つ／或いは少なくとも部分的な格納を少なくとも部分的に支援し、含み、且つ／或いはもたらし得る１つ以上のトランザクション及び／又は出来事であるか有するかであり得る。この実施形態において、データの読み取り、書き込み及び／又はアクセスは、１つ以上のダイレクトメモリアクセス（ＤＭＡ）処理及び／又はトランザクションを少なくとも部分的に有し得る。
【００１７】
１つ以上の機械読み取り可能プログラム命令が、例えばメモリ２１及び／又は１２２に少なくとも部分的に格納され得る。１つ以上のホスト１０の動作において、これらの機械読み取り可能命令は、回路１１８、１つ以上のホストプロセッサ１２、１つ以上のチップセット１５、１つ以上のデータプロセッサ１０８、回路１２０及び／又は１つ以上のＮＩＣ１２１（及び／又はこれらの１つ以上のコンポーネント）によって、少なくとも部分的にアクセスされて実行され得る。そのようにアクセス且つ／或いは実行されるとき、これら１つ以上の機械読み取り可能命令は少なくとも部分的に、回路１１８、１つ以上のホストプロセッサ１２、１つ以上のチップセット１５、１つ以上のデータプロセッサ１０８、回路１２０及び／又は１つ以上のＮＩＣ１２１（及び／又はこれらの１つ以上のコンポーネント）が、回路１１８、１つ以上のホストプロセッサ１２、１つ以上のチップセット１５、１つ以上のデータプロセッサ１０８、回路１２０及び／又は１つ以上のＮＩＣ１２１（及び／又はこれらの１つ以上のコンポーネント）によって実行されるようにここに記載される処理を少なくとも部分的に実行することをもたらし得る。
【００１８】
この実施形態において、エンティティの一部又はサブセットは、そのエンティティの全てを有していてもよいし、全てより少ないものを有していてもよい。また、この実施形態において、プロセス、スレッド、デーモン、プログラム、ドライバ、オペレーティングシステム、アプリケーション、カーネル、及び／又は仮想マシンモニタは各々、１つ以上の演算及び／又はプログラム命令の実行を（１）少なくとも部分的に有し、且つ／或いは（２）少なくとも部分的にもたらし且つ／或いはもたらされ得る。この実施形態において、カーネルは、（例えば、（１）１つ以上のユーザアプリケーションプロセスからの１つ以上の入力／出力（Ｉ／Ｏ）要求を少なくとも部分的に管理、解釈且つ／或いは制御することができ、且つ／或いは（２）１つ以上のそのようなＩ／Ｏ要求を、１つ以上のホスト内に含まれる回路に少なくとも部分的によっての実行のために、少なくとも部分的に翻訳且つ／或いは解釈することができる）１つ以上のオペレーティングシステムプロセスであるか有するかであり得る。
【００１９】
この実施形態において、リング、キュー、及び／又はバッファは、データ及び／又は１つ以上のコマンドが少なくとも一時的に格納され得るメモリ内の１つ以上の位置（例えば、１つ以上のアドレスによって少なくとも部分的に指定且つ／或いは指示される）を少なくとも部分的に有し得る。さらに、この実施形態において、ドアベルは、メモリ内の１つ以上の位置に書き込まれるときに、（１）１つ以上の処理の実行を少なくとも部分的にもたらし、且つ／或いは（２）１つ以上の処理が少なくとも部分的に実行されるべきであることを少なくとも部分的に指し示し得るデータ及び／又は１つ以上のコマンドを、少なくとも部分的に、具現化し、参照し、指し示し、有し、且つ／或いはそれであり得る。この実施形態において、ディスクリプタは、（１）１つ以上のパケット、１つ以上のパケットの１つ以上の位置（例えば、メモリ内）、及び／又は１つ以上のパケットの１つ以上の特性及び／又は特徴を少なくとも部分的に記述し、且つ／或いは（２）１つ以上のパケットに対して少なくとも部分的に実行され且つ／或いは１つ以上のパケットに関与し得るデータ及び／又は１つ以上のコマンドを、少なくとも部分的に、具現化し、参照し、指し示し、有し、且つ／或いはそれであり得る。例えば、この実施形態において、ディスクリプタは、（１）少なくとも部分的に、１つ以上のパケットに少なくとも部分的に関与する１つ以上の処理を実行するための１つ以上の要求であるか有するかであるとすることができ、且つ／或いは（２）１つ以上のパケットへの１つ以上のポインタ、及び／又は１つ以上のパケットの１つ以上の長さ／サイズ、種類などの１つ以上のインジケーションを少なくとも部分的に有することができる。この実施形態において、ポインタは、メモリ内の１つ以上の位置及び／又は１つ以上のアイテムを少なくとも部分的に指し示し、アドレシングし、且つ／或いは指定し得る。
【００２０】
図示していないが、この実施形態を逸脱することなく、１つ以上の回路カード３７の様々なコンポーネント（例えば、１つ以上のデータプロセッサ１０８、ＮＩＣＣ１２０、１つ以上のＮＩＣ１２１、メモリ１２２、及び／又はこれらの１つ以上のコンポーネント）のうちの一部又は全ては、１つ以上の回路基板３５、回路１１８、１つ以上のホストプロセッサ１２、及び／又は１つ以上のチップセット１５に少なくとも部分的に含まれていてもよい。同様に、この実施形態を逸脱することなく、１つ以上の回路基板３５のコンポーネント（例えば、１つ以上のホストプロセッサ１２、１つ以上のチップセット１５、メモリ２１、及び／又は回路１１８）のうちの一部又は全ては、１つ以上のデータプロセッサ１０８、ＮＩＣＣ１２０、１つ以上のＮＩＣ１２１、及び／又は１つ以上の回路カード３７に少なくとも部分的に含まれていてもよい。
【００２１】
この実施形態において、１つ以上のホスト１０、１つ以上のデータプロセッサ１０８、ＮＩＣＣ１２０、及び／又は１つ以上のＮＩＣ１２１は、イーサネット（登録商標）プロトコル及び／又はトランスミッションコントロールプロトコル／インターネットプロトコル（ＴＣＰ／ＩＰ）プロトコルに少なくとも部分的に準拠且つ／或いは互換であり得る１つ以上のプロトコルに従ったネットワーク５１を介して、１つ以上のホスト２０と１つ以上のパケット５０を交換し得る。例えば、イーサネット（登録商標）プロトコルは、電気電子技術者協会（ＩＥＥＥ）規格８０２．３−２００８（２００８年１２月２６日）に準拠且つ／或いは互換であり得る。また、例えば、ＴＣＰ／ＩＰプロトコルは、インターネットエンジニアリングタスクフォース（ＩＥＴＦ）規約（ＲＦＣ）７９１及び７９３（１９８１年９月公開）に準拠且つ／或いは互換であり得る。数多くの異なる、更なる、及び／又はその他のプロトコル（例えば、上述のプロトコル、関連するプロトコル、及びその他のプロトコルの、以前に開発されたバージョン及び／又は以降に開発されるバージョン）も、この実施形態を逸脱することなく、このようなデータ及び／又はコマンドの交換に使用され得る。
【００２２】
例えば、この実施形態において、回路１１８及び／又は１つ以上のホストプロセッサ１２は、１つ以上のデータプロセッサ１０８、１つ以上のＮＩＣ１２１、及び／又はＮＩＣＣ１２０による処理のために、データ（Ｄ）１０５のうちの１つ以上の（この実施形態において複数の）部分（Ｐ）１０６Ａ．．．１０６Ｎを、１つ以上のデータプロセッサ１０８、１つ以上のＮＩＣ１２１、及び／又はＮＩＣＣ１２０に利用可能にし得る。このようなデータ１０５及び／又はその１つ以上の部分１０６Ａ．．．１０６Ｎの提供の後及び／又は同時に、１つ以上のデータプロセッサ１０８、１つ以上のＮＩＣ１２１、及び／又はＮＩＣＣ１２０は、このようなデータ１０５及び／又はその１つ以上の部分１０６Ａ．．．１０６Ｎを、例えば、それを１つ以上のパケット５０に含め且つ／或いは１つ以上のホスト２０に輸送することによって処理し得る。
【００２３】
例えば、回路１１８及び／又は１つ以上のホストプロセッサ１２は、１つ以上のパケット５０での１つ以上のホスト２０への送信に（少なくとも部分的に）先立って、データ１０５及び／又はその１つ以上の部分１０６Ａ．．．１０６Ｎを、少なくとも部分的に、生成し且つ／或いはメモリ２１に格納し得る。例えば、１つ以上のデータプロセッサ１０８、１つ以上のＮＩＣ１２１、及び／又はＮＩＣＣ１２０によるデータ１０５及び／又はその１つ以上の部分１０６Ａ．．．１０６Ｎの処理を開始、支援且つ／或いは促進するため、回路１１８は、データ１０５の１つ以上の部分（例えば、１つ以上の部分１０６Ａ）が１つ以上のデータプロセッサ１０８、１つ以上のＮＩＣ１２１、及び／又はＮＩＣＣ１２０による処理に利用可能であることを指し示す１つ以上のインジケーション（ＩＮＤ）１０４を少なくとも部分的に提供し得る。有利には、この実施形態において、これら１つ以上のインジケーション１０４は少なくとも部分的に、データ１０５の１つ以上の部分１０６Ａの全体（例えば、全て）１１０が１つ以上のデータプロセッサ１０８、１つ以上のＮＩＣ１２１及び／又はＮＩＣＣ１２０による処理に実際に利用可能にされるのに先立って提供される。１つ以上のインジケーション１０４に少なくとも部分的に応答して、且つ／或いは基づいて、１つ以上のデータプロセッサ１０８、１つ以上のＮＩＣ１２１、及び／又はＮＩＣＣ１２０は、データ１０５の１つ以上の部分１０６Ａの処理を開始し得る。
【００２４】
例えば、この実施形態において、１つ以上のインジケーション１０４は、メモリ２１に少なくとも部分的に書き込まれ得る１つ以上のドアベル（ＤＢ）１１２を有し得る。１つ以上のドアベル１１２は、（１）データ１０５の１つ以上の部分１０６Ａ．．．１０６Ｎへの１つ以上のポインタ（ＰＮＴＲ）１３０、及び／又は（２）１つ以上のポインタ１３０によって指し示される１つ以上の部分１０６Ａ．．．１０６Ｎの１つ以上の長さ／サイズを示す１つ以上のインジケータ（ＩＮＤ）１３２を有し得る。
【００２５】
例えば、図２に示すように、この実施形態において、１つ以上のインジケーション１０４は、データ１０５の１つ以上の部分１０６Ａ．．．１０６Ｎに少なくとも部分的に対応し得る１つ以上の（この実施形態において複数の）インジケーション２０６Ａ．．．２０６Ｎを有し得る。回路１１８及び／又は１つ以上のホストプロセッサ１２は、データ１０５の１つ以上の部分１０６Ａ．．．１０６Ｎを、メモリ２１の１つ以上のサブセット２５０内の１つ以上のアプリケーション（ＡＰＰ）データバッファ１１３（例えば、１つ以上のプロセッサ１２によって少なくとも部分的に実行される１つ以上の図示しないユーザアプリケーションプロセスに少なくとも部分的に関連付けられ、割り当てられ、且つ／或いはそれによって使用され得る１つ以上のデータバッファ）に少なくとも部分的に書き込み得る。それぞれの部分１０６Ａ．．．１０６Ｎの各々を書き込むのに少なくとも部分的に先立って、回路１１８及び／又は１つ以上のホストプロセッサ１２は、それぞれのインジケーション２０６Ａ．．．２０６Ｎを、メモリ２１の１つ以上のサブセット２５０内の１つ以上のメモリマップトＩ／Ｏ（ＭＭＩＯ）空間２０２内の１つ以上の循環リングデータ構造２０４内のそれぞれのシーケンシャル（及び／又は非シーケンシャル）エントリに書き込み得る。
【００２６】
この実施形態において、メモリマップトＩ／Ｏ空間は少なくとも部分的に、１つ以上の装置を少なくとも部分的に必要とする１つ以上のＩ／Ｏ処理及び／又はトランザクションを支援、使用、シグナリング、要求、アクセス且つ／或いは実行する際に使用される１つ以上のハードウェア、ファームウェア及び／又はソフトウェア装置に排他的あるいは非排他的に少なくとも部分的に関連付けられ、割り当てられ、且つ／或いは割り振られ得るメモリの１つ以上の連続的及び／又は非連続的部分であるか有するかであり得る。この実施形態において、１つ以上のＭＭＩＯ空間２０２は、１つ以上のデータプロセッサ１０８、ＮＩＣＣ１２０、及び／又は１つ以上のＮＩＣ１２１に少なくとも部分的に関連付けられ得る。
【００２７】
この実施形態において、図示していないが、インジケーション２０６Ａ．．．２０６Ｎの各々は、１つ以上のインジケーション１０４のそれぞれのコンポーネント、フィールド及び／又は値に少なくとも部分的に対応し、同様であり、あるいは類似し得るそれぞれのコンポーネント、フィールド及び／又は値を少なくとも部分的に有し得る。故に、図示していないが、それぞれのインジケーション２０６Ａ．．．２０６Ｎは、それぞれの部分１０６Ａ．．．１０６Ｎに関するそれぞれのドアベルを鳴らすためのそれぞれのドアベル、それぞれの部分１０６Ａ．．．１０６Ｎをそれぞれ指し示すそれぞれのポインタ、及び／又はそれぞれの部分１０６Ａ．．．１０６Ｎのそれぞれのサイズをそれぞれ示すそれぞれのサイズインジケータを少なくとも部分的に有し得る。
【００２８】
それぞれのリング２０４内のそれぞれのエントリへのそれぞれのインジケーション２０６Ａ．．．２０６Ｎの少なくとも部分的な書き込みは、それぞれのインジケーション２０６Ａ．．．２０６Ｎに少なくとも部分的に関連付けられ得るデータ１０５のそれぞれの部分１０６Ａ．．．１０６Ｎに関して、１つ以上のデータプロセッサ１０８、ＮＩＣＣ１２０、及び／又は１つ以上のＮＩＣ１２１への且つ／或いはそれらと（少なくとも部分的に）関連付けられる１つ以上のそれぞれのドアベルリングを少なくとも部分的に具現化し、もたらし、且つ／或いは構成し得る。この実施形態において、或るエンティティに関連付けられたドアベルを鳴らすことは、そのエンティティが１つ以上の処理及び／又は行為を少なくとも部分的に実行することを少なくとも部分的にもたらし且つ／或いはトリガーし得る１つ以上のメモリ位置に１つ以上の値（例えば、１つ以上のドアベル）を書き込むことを少なくとも部分的に有し、且つ／或いは伴い得る。加えて、あるいは代えて、図示していないが、この実施形態を逸脱することなく、１つ以上のインジケーション２０６Ａ．．．２０６Ｎ及び／又は１つ以上のドアベル１１２は、例えば１つ以上のデータプロセッサ１０８、ＮＩＣＣ１２０、１つ以上のＮＩＣ１２１、及び／又は１つ以上のホスト１０内の何処か内の、１つ以上のメモリ位置に書き込まれてもよい。
【００２９】
それぞれの部分１０６Ａ．．．１０６Ｎに少なくとも部分的に関連付けられたそれぞれのドアベルを鳴らすことに少なくとも部分的に応答して、１つ以上のデータプロセッサ１０８、ＮＩＣＣ１２０、及び／又は１つ以上のＮＩＣ１２１は、それぞれのドアベルに少なくとも部分的に関連付けられ得るデータ１０５のそれぞれの部分１０６Ａ．．．１０６Ｎのそれぞれの処理を開始し得る。データ１０５の１つ以上のそれぞれの部分（例えば、１０６Ａ）のそれぞれの処理は、これら１つ以上のそれぞれの部分１０６Ａ（及び／又は１つ以上のその他のそれぞれの部分１０６Ｂ．．．１０６Ｎ）がそれらそれぞれの処理に実際に利用可能になるのに先立って開始し得る。
【００３０】
例えば、回路１１８及び／又は１つ以上のホストプロセッサ１２は、データ１０５の１つ以上の部分１０６Ａ（及び／又は部分１０６Ｂ．．．１０６Ｎのうちの１つ以上）を１つ以上のバッファ１１３に書き込むこと（そしてそれにより、それらそれぞれの処理に利用可能にすること）に少なくとも部分的に先立って、１つ以上のリング２０４に１つ以上のインジケーション２０６Ａを少なくとも部分的に書き込み得る。１つ以上のリング２０４への１つ以上のインジケーション２０６Ａの少なくとも部分的な書き込みに少なくとも部分的に由来する１つ以上のドアベルリングに少なくとも部分的に応答して、１つ以上のデータプロセッサ１０８、ＮＩＣＣ１２０、及び／又は１つ以上のＮＩＣ１２１は、回路１１８及び／又は１つ以上のプロセッサ１２によって１つ以上の部分１０６Ａ（及び／又は部分１０６Ｂ．．．１０６Ｎのうちの１つ以上）の全体が１つ以上のバッファ１１３に完全に書き込まれるのに先立って、１つ以上のインジケーション２０６Ａに関連付けられた１つ以上の部分１０６Ａの読み取り及び／又はその他の処理を開始し得る。
【００３１】
加えて、あるいは代えて、この実施形態を逸脱することなく、回路１１８及び／又は１つ以上のプロセッサ１２は、１つ以上のデータプロセッサ１０８、ＮＩＣＣ１２０、及び／又は１つ以上のＮＩＣ１２１による１つ以上の部分１０６Ａの処理に少なくとも部分的に同時に、あるいは先立って、データ１０５のその他の部分１０６Ｂ．．．１０６Ｎのうちの１つ以上を１つ以上のバッファ１１３に少なくとも部分的に書き込んでもよい。これは、１つ以上のデータプロセッサ１０８、ＮＩＣＣ１２０、及び／又は１つ以上のＮＩＣ１２１による１つ以上の部分１０６Ａの処理に、それぞれ、少なくとも部分的に同時に、あるいは先立って、部分１０６Ｂ．．．１０６Ｎのうちのこれら１つ以上を、１つ以上のデータプロセッサ１０８、ＮＩＣＣ１２０、及び／又は１つ以上のＮＩＣ１２１によるそれぞれの処理に利用可能にし得る。
【００３２】
１つ以上のリング２０４へのそれぞれのインジケーション２０６Ａ．．．２０６Ｎの少なくとも部分的なそれぞれの書き込むに対して、少なくとも部分的に前に、同時に、あるいは後に、回路１１８及び／又は１つ以上のプロセッサ１２は、メモリ２１の１つ以上のサブセット２５０内のカーネルメモリ／メモリ空間１１５内の１つ以上のディスクリプタ（ＤＥＳＣＲ）リング２１０に、それぞれのディスクリプタ（ＤＥＳＣＲ）２１２Ａ．．．２１２Ｎを少なくとも部分的に書き込み得る。これらそれぞれのディスクリプタ２１２Ａ．．．２１２Ｎは、それぞれのインジケーション２０６Ａ．．．２０６Ｎ及び／又はデータ１０５のそれぞれの部分１０６Ａ．．．１０６Ｎに少なくとも部分的に関連付けられ且つ／或いは対応し得る。１つ以上のデータプロセッサ１０８、ＮＩＣＣ１２０、及び／又は１つ以上のＮＩＣ１２１は、１つ以上のデータプロセッサ１０８、ＮＩＣＣ１２０、及び／又は１つ以上のＮＩＣ１２１によるそれぞれのインジケーション２０６Ａ．．．２０６Ｎ及び／又はそれぞれの部分１０６Ａ．．．１０６Ｎの読み取りと並行して、且つ／或いは同時に、これらそれぞれのディスクリプタ２１２Ａ．．．２１２Ｎを少なくとも部分的に読み取り得る。データ１０５の１つ以上のそれぞれの部分（例えば、１０６Ａ）に少なくとも部分的に関連付けられた１つ以上のそれぞれのインジケーション（例えば、２０６Ａ）及び／又は１つ以上のそれぞれのディスクリプタ（例えば、２１２Ａ）を少なくとも部分的に読み取った後、１つ以上のデータプロセッサ１０８、ＮＩＣＣ１２０、及び／又は１つ以上のＮＩＣ１２１は、データ１０５のうちのこの１つ以上のそれぞれの関連付けられた部分１０６Ａを少なくとも部分的に読み取り得る。
【００３３】
例えば、この実施形態において、１つ以上のリング２１０、及び／又は１つ以上のリング２１０に含まれるそれぞれのメモリ位置は、回路１１８及び／又は１つ以上のプロセッサ１２によって、少なくとも部分的に予め割り当てられ、且つ／或いは予め定められ得る。このような事前割当て及び／又は事前決定は、それぞれのインジケーション２０６Ａ．．．２０６Ｎとそれらそれぞれの対応及び／又は関連するディスクリプタ２１２Ａ．．．２１２Ｎとの間の関係と、該それぞれの対応及び／又は関連するディスクリプタ２１２Ａ．．．２１２Ｎを格納する１つ以上のリング２１０内のそれぞれのメモリ位置とが、１つ以上のデータプロセッサ１０８、ＮＩＣＣ１２０、及び／又は１つ以上のＮＩＣ１２１に少なくとも部分的に所定且つ／或いは利用可能にされ得るようにし得る。
【００３４】
この実施形態において、データ１０５のそれぞれの部分１０６Ａ．．．１０６Ｎのディスクリプタ２１２Ａ．．．２１２Ｎは、それぞれのディスクリプタ２１２Ａ．．．２１２Ｎが有効であるかを少なくとも部分的に指し示し得るそれぞれのディスクリプタ情報（Ｉ）２１３Ａ．．．２１３Ｎを少なくとも部分的に有し、参照し、且つ／或いは指し示し得る。例えば、回路１１８及び／又は１つ以上のプロセッサ１２によって１つ以上のリング２１０に書き込まれるとき、１つ以上のそれぞれのディスクリプタ（例えば、２１２Ａ）に含まれるそれぞれの情報（例えば、２１３Ａ）が、１つ以上のそれぞれのディスクリプタ２１２Ａが有効であることを指し示すように（例えば、ブール論理にて）設定され得る。しかしながら、１つ以上のデータプロセッサ１０８、ＮＩＣＣ１２０、及び／又は１つ以上のＮＩＣ１２１が、これら１つ以上のそれぞれのディスクリプタ２１２Ａ及び／又はそれらに関連付けられ得るデータ１０５の１つ以上のそれぞれの部分１０６Ａを読み取り且つ／或いは処理した後、１つ以上のデータプロセッサ１０８、ＮＩＣＣ１２０、及び／又は１つ以上のＮＩＣ１２１は、（１）該１つ以上のそれぞれのディスクリプタがもはや有効でない（すなわち、無効である）ことを指し示すように該１つ以上のそれぞれのディスクリプタ２１２Ａのそれぞれの情報２１３Ａを（例えば、ブール論理又はその他の方法でリセットすることにより）変更して、（２）それらそれぞれの情報２１３Ａが斯くして変更された該１つ以上のそれぞれのディスクリプタ２１２Ａを、該１つ以上のそれぞれのディスクリプタ２１２Ａが読み取られたのと同じ１つ以上のリング２１０内の１つ以上のメモリ位置に書き戻し得る。これは、これら１つ以上のメモリ位置を、変更された１つ以上のディスクリプタ２１２Ａで上書きし得る。１つ以上のディスクリプタ２１２Ａをこのように変更し、且つ／或いはこのように変更された１つ以上のディスクリプタ２１２Ａを１つ以上のリング２１０に書き戻すことにより、回路１１８及び／又は１つ以上のプロセッサ１２に対して、（１）１つ以上のリング２１０内の１つ以上のディスクリプタ２１２Ａがもはや有効でなく、且つ（２）（例えば、回路１１８及び／又は１つ以上のプロセッサ１２によって、適宜に、１つ以上の新たなディスクリプタ２１２Ａで上書きされるべく）再利用のために回路１１８及び／又は１つ以上のプロセッサ１２に利用可能になっていることが指し示され得る。
【００３５】
この実施形態において、１つ以上のそれぞれのディスクリプタ（例えば、２１２Ａ）を少なくとも部分的に読み取った後、１つ以上のデータプロセッサ１０８、ＮＩＣＣ１２０、及び／又はＮＩＣ１２１は、１つ以上のそれぞれのディスクリプタ２１２Ａに少なくとも部分的に含まれ且つ／或いは関連付けられたそれぞれの情報（例えば、２１３Ａ）を少なくとも部分的に調べて、１つ以上のそれぞれのディスクリプタ２１２Ａが有効であるかを少なくとも部分的に決定し得る。それぞれの情報２１３Ａが、１つ以上のそれぞれのディスクリプタ２１２Ａが無効であり得ることを指し示す場合、１つ以上のデータプロセッサ１０８、ＮＩＣＣ１２０、及び／又はＮＩＣ１２１は、（１）これら１つ以上のディスクリプタ２１２Ａ及び／又はそれらが関連付けられたデータ１０５の１つ以上の部分１０６Ａをやめ（例えば、もはや処理し続けず）、且つ／或いは（２）図３に関して後述するように、１つ以上のその他且つ／或いは異なる送信キューに関する処理に進み得る。
【００３６】
図２に戻るに、逆に、それぞれの情報２１３Ａが、１つ以上のそれぞれのディスクリプタ２１２Ａが有効であることを指し示す場合、１つ以上のデータプロセッサ１０８、ＮＩＣＣ１２０、及び／又はＮＩＣ１２１は、１つ以上の関連付けられたインジケーション２０６Ａに含まれる１つ以上のポインタによって指し示されるデータ１０５の１つ以上の関連付けられた部分１０６Ａを、少なくとも部分的に１つ以上のディスクリプタ２１２Ａと一貫するように、且つ／或いは少なくとも部分的に１つ以上のディスクリプタ２１２Ａによって要求されるように、少なくとも部分的に処理し得る。この例において、１つ以上のディスクリプタ２１２Ａは、１つ以上のデータプロセッサ１０８、ＮＩＣＣ１２０、及び／又は１つ以上のＮＩＣ１２１による１つ以上のホスト２０へのデータ５０の１つ以上の部分１０６Ａの（単独、及び／又は１つ以上のその他の部分１０６Ｂ．．．１０６Ｎとともにの）１つ以上のパケット５０での少なくとも部分的な送信を、少なくとも部分的に要求し得る。従って、これら１つ以上の要求に少なくとも部分的に応答して、１つ以上のプロセッサ１０８、ＮＩＣＣ１２０、及び／又は１つ以上のＮＩＣ１２１は、そのように１つ以上のパケット５０での送信を要求され得るデータ１０５の１つ以上の部分１０６Ａ．．．１０６Ｎを、少なくとも一時的且つ／或いは少なくとも部分的に、ローカルメモリ１２２に格納し得る。１つ以上のプロセッサ１０８、ＮＩＣＣ１２０、及び／又は１つ以上のＮＩＣ１２１は、要求された部分１０６Ａ．．．１０６Ｎを有するように１つ以上のパケット５０を少なくとも部分的に構築し得る。１つ以上のパケット５０を構築した後、１つ以上のプロセッサ１０８、ＮＩＣＣ１２０、及び／又は１つ以上のＮＩＣ１２１は、１つ以上のパケット５０を１つ以上のネットワーク５１を介して１つ以上のホスト２０に送信し得る。
【００３７】
このような目的で、この実施形態において、１つ以上のディスクリプタ２１２Ａ（及び／又はその他のディスクリプタ２１２Ｂ．．．２１２Ｎのうちの１つ以上）は、１つ以上のパケット５０での送信を要求され得る部分１０６Ａ．．．１０６Ｎの総数及び／又はデータ１０５の総量を少なくとも部分的に指し示し得る。１つ以上のプロセッサ１０８、ＮＩＣＣ１２０、及び／又は１つ以上のＮＩＣ１２１は、要求された部分１０６Ａ．．．１０６Ｎの総数及び／又は要求されたデータ１０５の量の全てを（例えば、１つ以上のパケット５０を首尾よく構築するように）１つ以上のプロセッサ１０８、ＮＩＣＣ１２０及び／又は１つ以上のＮＩＣ１２１が完全に処理したかを少なくとも部分的に決定するために１つ以上のプロセッサ１０８、ＮＩＣＣ１２０及び／又は１つ以上のＮＩＣ１２１によって使用されるべく、１つ以上のカウンタ（及び／又はその他の好適なデータ構造）２７０を、メモリ２１及び／又はメモリ１２２内で、少なくとも部分的に維持管理し得る。データ１０５の要求された部分１０６Ａ．．．１０６Ｎの各々が（例えば、メモリ１２２へと）読み取られるとき、１つ以上のプロセッサ１０８、ＮＩＣＣ１２０、及び／又は１つ以上のＮＩＣ１２１は、要求された部分の総数又はデータ１０５の総量（例えば、１つ以上のディスクリプタ２１２Ａ内で指し示される）が処理されるまで、１つ以上のカウンタ２７０を適宜インクリメント（又はデクリメント）し得る。
【００３８】
加えて、あるいは代えて、この実施形態を逸脱することなく、１つ以上のプロセッサ１０８、ＮＩＣＣ１２０、及び／又は１つ以上のＮＩＣ１２１は、１つ以上のそれぞれの関連付けられたデータ１０５の部分１０６Ａ、ディスクリプタ２１２Ａ及び／又は情報２１３Ａの読み取りを、回路１１８及び／又は１つ以上のプロセッサ１２によるこれら１つ以上のそれぞれの関連付けられたデータ１０５の部分１０６Ａ、ディスクリプタ２１２Ａ及び／又は情報２１３Ａの１つ以上のバッファ１１３及び／又はサブセット２５０への書き込みと少なくとも部分的に同時にこの読み取りが行われるように、開始し得る。例えば、データ１０５の１つ以上の部分１０６Ａの処理を加速するため、回路１１８及び／又はプロセッサ１２は、１つ以上のそれぞれの関連付けられたデータ１０５の部分１０６Ａ、ディスクリプタ２１２Ａ及び／又は情報２１３Ａの１つ以上のメモリサブセット２５０への少なくとも部分的な書き込みを回路１１８及び／又はプロセッサ１２が開始且つ／或いは完了するのに少なくとも部分的に先立って、１つ以上のリング２０４に１つ以上のインジケーション２０６Ａを少なくとも部分的に書き込み得る。１つ以上のインジケーション２０６Ａを少なくとも部分的に書き込むことに少なくとも部分的に由来する１つ以上のドアベルリングに少なくとも部分的に応答して、１つ以上のプロセッサ１０８、ＮＩＣＣ１２０、及び／又は１つ以上のＮＩＣ１２１は、回路１１８及び／又は１つ以上のプロセッサ１２による上記書き込みの開始及び／又は完了に先立って、これら１つ以上のそれぞれの関連付けられたデータ１０５の部分１０６Ａ、ディスクリプタ２１２Ａ及び／又は情報２１３Ａを少なくとも部分的に読み取ることを開始し得る。回路１１８及び／又は１つ以上のプロセッサ１２がデータをメモリ２１に書き込むことができるのより迅速に１つ以上のプロセッサ１０８、ＮＩＣＣ１２０及び／又は１つ以上のＮＩＣ１２１がメモリ２１からデータを読み取ることができるのでない限り、以上の動作が（例えば、１つ以上のプロセッサ１０８、ＮＩＣＣ１２０及び／又は１つ以上のＮＩＣ１２１によって読み出されることが可能なようにメモリ２１への有効データの書き込みことを待つために）１つ以上のプロセッサ１０８、ＮＩＣＣ１２０及び／又は１つ以上のＮＩＣ１２１による望ましくない量の失速をもたらすことは起こりそうにない。
【００３９】
代わりに、あるいは加えて、この実施形態を逸脱することなく、１つ以上のプロセッサ１２によって１つ以上のホスト１０で実行され得る１つ以上の図示しないオペレーティングシステムの具体的な種類に応じて、１つ以上のプロセッサ１２は、１つ以上のオペレーティングシステムカーネルメモリ空間１１５の１つ以上のホストカーネルメモリバッファ３０２に、データ１０５、及び／又はデータ１０５の１つ以上の部分１０６Ａ．．．１０６Ｎを、少なくとも部分的にコピーし得る。例えば、この代替的及び／又は付加的な構成において、ここに別段に述べている場合を除き、１つ以上のプロセッサ１０８、ＮＩＣＣ１２０、１つ以上のＮＩＣ１２１、１つ以上のプロセッサ１２及び／又は回路１１８によって少なくとも部分的に実行される動作は、この実施形態においてこれらのコンポーネントによって実行されるとして先述されたものと少なくとも部分的に同一、同様、且つ／或いは類似とし得る。しかしながら、この代替的及び／又は付加的な構成においては、これら１つ以上の図示しないオペレーティングシステムは、データ１０５及び／又はその１つ以上の部分１０６Ａ．．．１０６Ｎにアクセスすることができるようになるのに先立って、回路１１８及び／又は１つ以上のプロセッサ１２がホストカーネルメモリ１１５にデータ１０５及び／又は１つ以上の部分１０６Ａ．．．１０６Ｎを少なくとも部分的にコピーし得る種類とし得る。より具体的には、この実施形態においては、１つ以上のリング２０４に１つ以上のそれぞれのインジケーション２０６Ａ．．．２０６Ｎを少なくとも部分的に書き込むことによって、１つ以上のプロセッサ１０８、ＮＩＣＣ１２０及び／又は１つ以上のＮＩＣ１２１に１つ以上のそれぞれのドアベルリングを（少なくとも部分的に）提供した後、回路１１８及び／又は１つ以上のプロセッサ１２は、１つ以上のそれぞれの対応するディスクリプタ２１２Ａ．．．２１２Ｎを１つ以上のリング２１０に書き込み得る。これらそれぞれのディスクリプタ２１２Ａ．．．２１２Ｎの各々の１つ以上のリング２１０への書き込みと少なくとも部分的に同時に（例えば、並行して）、回路１１８及び／又は１つ以上のプロセッサ１２は、少なくとも部分的に、（１）データ１０５のそれぞれの対応する部分（Ｐ）２０９Ａ．．．２０９Ｚ、及び／又は（２）それぞれの対応する情報（Ｉ）フィールド２１１Ａ．．．２１１Ｚを、メモリ１１５内のそれぞれの位置（ロケーション）ＬＡ．．．ＬＺに書き込み得る。このとき、それぞれの位置ＬＡ．．．ＬＺの各々への対応する情報フィールド２１１Ａ．．．２１１Ｚは最後に書き込まれる。故に、この構成において、１つ以上のそれぞれのディスクリプタ２１２Ａ．．．２１２Ｎは、データ１０５の１つ以上のそれぞれの部分２０９Ａ．．．２０９Ｚに少なくとも部分的に対応し、且つ／或いはそれを記述し得る。それぞれのディスクリプタ２１２Ａ．．．２１２Ｎ及び／又はデータ１０５のそれぞれの対応する部分２０９Ａ．．．２０９Ｚ（及びそれらそれぞれの対応する情報フィールド２１１Ａ．．．２１１Ｚ）のメモリ１１５への少なくとも部分的な書き込みと少なくとも部分的に同時に（例えば、並行して）、１つ以上のプロセッサ１０８、ＮＩＣＣ１２０、及び／又は１つ以上のＮＩＣ１２１は、これらのアイテムをメモリ１１５から読み取り得る。
【００４０】
この構成において、それぞれの情報フィールド２１１Ａ．．．２１１Ｚは、それぞれの位置ＬＡ．．．ＬＺ内でそれらと関連付けられたデータ２０５のそれぞれの対応する部分２０９Ａ．．．２０９Ｚのそれぞれの有効性を少なくとも部分的に指し示し得る（それぞれの情報２１３Ａ．．．２１３Ｎを使用してディスクリプタ２１２Ａ．．．２１２Ｎの有効性を指し示す手法と少なくとも部分的に同様且つ／或いは類似の手法にて）。加えて、あるいは代えて、情報フィールド２１１Ａ．．．２１１Ｚは、例えばそれぞれの有効なバイトの数、それぞれの対応するディスクリプタの位置などの、その他且つ／或いは更なる種類の情報であるか有するかであってもよい。それぞれの情報２１１Ａ．．．２１１Ｚの調査に少なくとも部分的に基づいて、１つ以上のプロセッサ１０８、ＮＩＣＣ１２０、及び／又は１つ以上のＮＩＣ１２１は、それらに関連付けられたそれぞれの部分２０９Ａ．．．２０９Ｚが１つ以上のプロセッサ１０８、ＮＩＣＣ１２０及び／又は１つ以上のＮＩＣ１２１による処理に有効であるかを決定し得る。このような決定に基づいて、１つ以上のプロセッサ１０８、ＮＩＣＣ１２０、及び／又は１つ以上のＮＩＣ１２１は、ディスクリプタ２１２Ａ．．．２１２Ｎがそれらそれぞれの対応する情報２１３Ａ．．．２１３Ｎに少なくとも部分的に基づいて１つ以上のプロセッサ１０８、ＮＩＣＣ１２０及び／又は１つ以上のＮＩＣ１２１によって処理される手法と少なくとも部分的に同様且つ／或いは類似の手法で、それぞれの対応する部分２０９Ａ．．．２０９Ｚを処理し得る。
【００４１】
１つ以上のホスト１０からの１つ以上のパケット５０での送信のためにデータ１０の１つ以上の有効な部分２０９Ａ．．．２０９Ｚを完全に処理した後、１つ以上のプロセッサ１０８、ＮＩＣＣ１２０、１つ以上のＮＩＣ１２１、１つ以上のプロセッサ１２、及び／又は回路１１８は、それらそれぞれの情報２１１Ａ．．．２１１Ｚを、それらがもはや有効でないことを少なくとも部分的に指し示すように少なくとも部分的に変更し得る。このような変更は、それぞれの情報２１３Ａ．．．２１３Ｎが、それらがもはや有効でないことを指し示すように変更され且つ／或いは１つ以上のリング２１０に書き戻され得る（先述の）手法と、少なくとも部分的に同様且つ／或いは類似とし得る。そのように変更された後、もはや無効な部分２０９Ａ．．．２０９Ｚ（及びそれらの、もはや変更された、対応するそれぞれの情報２１１Ａ．．．２１１Ｚ）が、それらそれぞれの位置２０９Ａ．．．２０９Ｚに書き戻され得る。これは、それらを、回路１１８及び／又は１つ以上のプロセッサ１２による再利用のために解放し得る。
【００４２】
故に、この代替的及び／又は付加的な構成において、回路１１８及び／又は１つ以上のプロセッサ１２は、１つ以上のホストメモリサブセット２５０内に、（１）１つ以上の部分２０９Ａ．．．２０９Ｚ、（２）１つ以上の部分２０９Ａ．．．２０９Ｚの１つ以上のディスクリプタ２１２Ａ．．．２１２Ｎ、及び／又は（３）１つ以上のサブセット２５０のこれらのコンテンツに少なくとも部分的に関連付けられ得る情報２１１Ａ．．．２１１Ｚ及び／又は情報２１３Ａ．．．２１３Ｎを書き込み得る。このような情報２１１Ａ．．．２１１Ｚ及び／又は情報２１３Ａ．．．２１３Ｎは、それらそれぞれの対応する部分２０９Ａ．．．２０９Ｚ及び／又はそれぞれの対応するディスクリプタ２１２Ａ．．．２１２Ｎが有効であり得るかを少なくとも部分的に指し示し得る。この構成において、１つ以上のプロセッサ１０８、ＮＩＣＣ１２０、及び／又は１つ以上のＮＩＣ１２１は、１つ以上のそれぞれの部分２０９Ａ．．．２０９Ｚ、それぞれの対応するディスクリプタ２１２Ａ．．．２１２Ｎ、及び／又は情報２１１Ａ．．．２１１Ｚ及び／又は情報２１３Ａ．．．２１３Ｎの読み取りを、この読み取りが、回路１１８及び／又は１つ以上のプロセッサ１２による１つ以上のサブセット２５０への１つ以上のそれぞれの部分２０９Ａ．．．２０９Ｚ、それぞれの対応するディスクリプタ２１２Ａ．．．２１２Ｎ、及び／又は情報２１１Ａ．．．２１１Ｚ及び／又は情報２１３Ａ．．．２１３Ｎの書き込みと、少なくとも部分的に同時に行われ得るように開始し得る。代わりに、あるいは加えて、この構成及び／又は実施形態を逸脱することなく、１つ以上のディスクリプタ２１２Ａ．．．２１２Ｎは、１つ以上のそれぞれの対応する部分２０９Ａ．．．２０９Ｚが１つ以上のホストカーネルメモリバッファ３０２に少なくとも部分的に書き込まれることの少なくとも部分的に後に、１つ以上のリング２１０に書き込まれてもよい。
【００４３】
先述のように、この実施形態において、それぞれのインジケーション２０６Ａ．．．２０６Ｎ（及び／又はその中に含まれるドアベル）は、少なくとも部分的に、（１）それぞれのインジケーション２０６Ａ．．．２０６Ｎに関連付けられるデータ１０５の１つ以上のそれぞれの対応する部分１０６Ａ．．．１０６Ｎ及び／又は２０９Ａ．．．２０９Ｚ（場合による）の１つ以上のそれぞれの位置への１つ以上のそれぞれのポインタ、及び／又は（２）これらそれぞれの対応する部分１０６Ａ．．．１０６Ｎ及び／又は２０９Ａ．．．２０９Ｚに含まれるそれぞれのデータの量を有し且つ／或いは指し示し得る。加えて、あるいは代えて、この実施形態において、それぞれのインジケーション２０６Ａ．．．２０６Ｎは、１つ以上のパケット５０を生成するために１つ以上のプロセッサ１０８、ＮＩＣＣ１２０及び／又はＮＩＣ１２１によって処理されるべきデータ１０５のこれらの部分の１つ以上のそれぞれの個数を少なくとも部分的に指し示し且つ／或いはそれであり得る１つ以上のそれぞれの値を、少なくとも部分的に有し得る。これら１つ以上の値は、例えば、先述の手法と同一、同様あるいは類似の手法で使用され得る１つ以上のカウンタ値２７０であるか有するかであり得る。
【００４４】
この実施形態において、具体的な実装に応じて、データバッファキャッシュラインアライメント及び／又はホストシステムバス／インターコネクト伝送効率／互換性を少なくとも部分的に支援するために、インジケーション２０６Ａ．．．２０６Ｎの各々は、各それぞれのポインタを５８ビット長とし、且つそれぞれのデータ量インジケータを６ビット長として、６４ビット長であるとし得る。故に、例えば、ドアベル１１２及び／又はインジケーション１０４（図１参照）は６４ビット長とすることができ、１つ以上のポインタ１３０は５８ビット長であり且つ１つ以上のインジケーション１３２は６ビット長であるとし得る。加えて、この実施形態において、１つ以上の部分１０６Ａ．．．１０６Ｎの各々は６４バイト長であるとし得る。また、この実施形態において、１つ以上の部分２０９Ａ．．．２０９Ｚの各々は、対応する情報フィールド２１１Ａ．．．２１１Ｚの各々を１バイト長として、６３バイト長であるとし得る。ディスクリプタ２１２Ａ．．．２１２Ｎ及び／又はそれぞれの情報２１３Ａ．．．２１３Ｎのそれぞれのサイズを設定することにも同様の考慮を行い得る。故に、１つ以上のバッファ１１５に書き込まれた後、部分２０９Ａ．．．２０９Ｚは、総合して、データ１０５の全てを有し得るが、部分１０６Ａ．．．１０６Ｎへのデータ１０５の区分けとは少なくとも部分的に異なるように部分２０９Ａ．．．２０９Ｚへと区分けされ得る。
【００４５】
この実施形態において、インジケーション２０６Ａ．．．２０６Ｎは、（図１中の代表的なインジケーション１０４に例示されるように）それらの対応するそれぞれのディスクリプタ２１２Ａ．．．２１２Ｎに含まれる情報の１つ以上のサブセットを有し得る。加えて、あるいは代えて、この実施形態を逸脱することなく、それぞれのインジケーション２０６Ａ．．．２０６Ｎは、それらの対応するそれぞれのディスクリプタ２１２Ａ．．．２１２Ｎに含まれるそれぞれの情報の全てを有する。例えば、例示的なインジケーション（ＩＮＤ）４０２は、１つ以上のドアベル（ＤＢ）４０４を有し得る。１つ以上のドアベル４０４は、１つ以上のポインタ（ＰＮＴＲ）４０６（例えば、１つ以上のポインタ１３０の目的に類似の目的を果たし得る）、１つ以上のディスクリプタ（ＤＥＳＣＲ）４０８、及び／又は１つ以上のインジケータ（ＩＮＤ）４１０（例えば、１つ以上のインジケーション１３２の目的に類似の目的を果たし得る）を有し得る。１つ以上のディスクリプタ４０８は、１つ以上のインジケーション（例えば、２０６Ａ）に対応し得る対応するディスクリプタ（例えば、２１２Ａ）のうちの１つ以上であるか有するかであり得る。
【００４６】
当然ながら、具体的な実装に応じて、この実施形態を逸脱することなく、データ１０５の部分１０６Ａ．．．１０６Ｎ及び／又は２０９Ａ．．．２０９Ｚ、インジケーション２０６Ａ．．．２０６Ｎ、ディスクリプタ２１２Ａ．．．２１２Ｎ、情報２１１Ａ．．．２１１Ｚ、情報２１３Ａ．．．２１３Ｎのコンテンツ、数、サイズ、構成などは様々となり得る。従って、ここに記載して説明した特定のパラメータ及び／又は特徴は単なる例に過ぎない。
【００４７】
次いで、図３を参照するに、１つ以上のプロセッサ１２は、プログラム／プロセススレッド（Ｔ）３１１Ａ．．．３１１Ｎを少なくとも部分的に実行し得る。それぞれのスレッド３１１Ａ．．．３１１Ｎは、スレッド３１１Ａ．．．３１１Ｎによって少なくとも部分的に生成されるそれぞれのデータ（Ｄ）１０５Ａ．．．１０５Ｎを有し得る１つ以上のパケット５０の送信を支援するためにこの実施形態において使用され得るそれぞれのデータ構造の組を維持管理し得る。例えば、スレッド３１１Ａ．．．３１１Ｎは少なくとも部分的に、１つ以上のそれぞれのドアベル／インジケーションリング２０４Ａ．．．２０４Ｎ、１つ以上のそれぞれのディスクリプタリング２１０Ａ．．．２１０Ｎ、１つ以上のそれぞれのカーネルデータバッファ３２０Ａ．．．３２０Ｎ、及び／又は１つ以上のそれぞれのカウンタ２７０Ａ．．．２７０Ｎに割り当てられ、関連付けられ、それらを生成し、且つ／或いは維持し得る。それぞれのリング２０４Ａ．．．２０４Ｎは、１つ以上のリング２０４によって少なくとも部分的に実装且つ／或いは支援される機能及び／又は動作と少なくとも部分的に同様で類似の機能及び／又は動作を、それぞれのスレッド３１１Ａ．．．３１１Ｎに関して少なくとも部分的に実装且つ／或いは支援するように、それぞれのスレッド３１１Ａ．．．３１１Ｎによって使用され得る。それぞれのリング２１０Ａ．．．２１０Ｎは、１つ以上のリング２１０によって少なくとも部分的に実装且つ／或いは支援される機能及び／又は動作と少なくとも部分的に同様で類似の機能及び／又は動作を、それぞれのスレッド３１１Ａ．．．３１１Ｎに関して少なくとも部分的に実装且つ／或いは支援するように、それぞれのスレッド３１１Ａ．．．３１１Ｎによって使用され得る。それぞれのバッファ３２０Ａ．．．３２０Ｎは、１つ以上のバッファ３０２によって少なくとも部分的に実装且つ／或いは支援される機能及び／又は動作と少なくとも部分的に同様で類似の機能及び／又は動作を、それぞれのスレッド３１１Ａ．．．３１１Ｎに関して少なくとも部分的に実装且つ／或いは支援するように、それぞれのスレッド３１１Ａ．．．３１１Ｎによって使用され得る。カウンタ２７０Ａ．．．２７０Ｎは、１つ以上のリングカウンタ２７０によって少なくとも部分的に実装且つ／或いは支援される機能及び／又は動作と少なくとも部分的に同様で類似の機能及び／又は動作を、それぞれのスレッド３１１Ａ．．．３１１Ｎに関して少なくとも部分的に実装且つ／或いは支援するように、それぞれのスレッド３１１Ａ．．．３１１Ｎによって使用され得る。
【００４８】
故に、この実施形態の第１の例において、少なくとも部分的に少なくとも１つのホストに関連して使用可能な装置が提供される。当該装置は、データの少なくとも１つの部分が少なくとも１つのデータプロセッサによる処理に利用可能であることの少なくとも１つのインジケーションを少なくとも部分的に提供する回路を有し得る。前記少なくとも１つのインジケーションは少なくとも部分的に、データの前記少なくとも１つの部分の全体が前記少なくとも１つのデータプロセッサによる処理に利用可能になるのに先立って提供され得る。前記少なくとも１つのデータプロセッサは、前記少なくとも１つのインジケーションに少なくとも部分的に応答して処理を開始し得る。
【００４９】
第１の例の要素の一部又は全てを有し得るこの実施形態の第２の例において、（１）前記回路は、少なくとも１つのホストプロセッサを少なくとも部分的に有することができ、（２）少なくとも１つの回路基板が、ホストメモリと前記少なくとも１つのホストプロセッサとを少なくとも部分的に有することができ、（３）少なくとも１つのデータプロセッサは、ＮＩＣＣを少なくとも部分的に有することができ、（４）少なくとも１つの回路カードが、前記ＮＩＣＣを少なくとも部分的に有することができ、（５）前記少なくとも１つの回路カードは、前記少なくとも１つの回路基板に少なくとも部分的に通信可能に結合されることができ、（６）前記少なくとも１つのインジケーションは、ホストメモリに少なくとも部分的に書き込まれる少なくとも１つのドアベルを有することができ、且つ／或いは（７）前記少なくとも１つのドアベルは、（ａ）データの前記少なくとも１つの部分への少なくとも１つのポインタ、及び／又は（ｂ）データの前記少なくとも１つの部分の少なくとも１つのサイズを少なくとも部分的に指し示す少なくとも１つのインジケータを有し得る。
【００５０】
以上の例のうちの何れかの要素の一部又は全てを有し得るこの実施形態の第３の例において、前記回路は、ホストメモリ内の少なくとも１つのＭＭＩＯ空間に前記少なくとも１つのインジケーションを少なくとも部分的に書き込み得る。この第３の例において、前記少なくとも１つのＭＭＩＯ空間は、前記少なくとも１つのデータプロセッサに少なくとも部分的に関連付けられ得る。前記データは、当該データの前記少なくとも１つの部分と、当該データの少なくとも１つのその他の部分とを有し得る。前記少なくとも１つのインジケーションは、データの前記少なくとも１つの部分への少なくとも１つのポインタを有し得る。前記少なくとも１つのインジケーションは、データの前記少なくとも１つの部分と前記データの前記少なくとも１つのその他の部分との双方が前記少なくとも１つのデータプロセッサによる処理に利用可能であることを指し示し得る。前記少なくとも１つのデータプロセッサは、データの前記少なくとも１つのその他の部分が前記少なくとも１つのデータプロセッサによる処理に実際に利用可能になるのに先立って、データの前記少なくとも１つの部分の処理を開始し得る。前記回路は、前記少なくとも１つのデータプロセッサによるデータの前記少なくとも１つの部分の処理と少なくとも部分的に同時に、データの前記少なくとも１つのその他の部分を前記少なくとも１つのデータプロセッサによる処理に少なくとも部分的に利用可能にし得る。
【００５１】
以上の例のうちの何れかの要素の一部又は全てを有し得るこの実施形態の第４の例において、前記回路は、ホストメモリの少なくとも１つのサブセットに、（１）データの前記少なくとも１つの部分、（２）データの前記少なくとも１つの部分の少なくとも１つのディスクリプタ、及び／又は（３）ホストメモリの前記少なくとも１つのサブセットのコンテンツに少なくとも部分的に関連付けられた情報を書き込み得る。この情報は、ホストメモリの前記少なくとも１つのサブセットに書き込まれたデータの前記少なくとも１つの部分及び前記少なくとも１つのディスクリプタが有効であるかを少なくとも部分的に指し示し得る。前記少なくとも１つのデータプロセッサは、データの前記少なくとも１つの部分、前記少なくとも１つのディスクリプタ及び前記情報の読み取りを、該読み取りが、前記回路によるホストメモリの前記少なくとも１つのサブセットへのデータの前記少なくとも１つの部分、前記少なくとも１つのディスクリプタ及び前記情報の書き込みと、少なくとも部分的に同時に行われるように、開始し得る。
【００５２】
第４の例の要素の一部又は全てを有し得る第５の例において、ホストメモリの前記少なくとも１つのサブセットは、前記少なくとも１つのディスクリプタを格納する、ホストカーネルメモリ内の少なくとも１つの予め割り当てられたメモリリングと、データの前記少なくとも１つの部分を格納する少なくとも１つのホストカーネルメモリバッファとを有し得る。前記少なくとも１つのディスクリプタは、データの前記少なくとも１つの部分が前記少なくとも１つのホストカーネルメモリバッファに書き込まれた後に、前記少なくとも１つの予め割り当てられたメモリリングに書き込まれ得る。前記少なくとも１つのインジケーションは、前記少なくとも１つのデータプロセッサに少なくとも部分的に関連付けられた少なくとも１つのドアベルリングに書き込まれ得る少なくとも１つのドアベルを有し得る。前記少なくとも１つのデータプロセッサは、前記情報を調べて、前記少なくとも１つのディスクリプタ及びデータの前記少なくとも１つの部分が有効であるかを少なくとも部分的に決定し得る。
【００５３】
第５の例の要素の一部又は全てを有し得る第６の例において、前記情報は、（１）前記少なくとも１つのディスクリプタが有効であるかを少なくとも部分的に指し示すそれぞれのディスクリプタ情報、及び／又は（２）データの前記少なくとも１つの部分が有効であるかを少なくとも部分的に指し示すそれぞれのデータ部分情報を有し得る。前記少なくとも１つのデータプロセッサがデータの前記少なくとも１つの部分及び前記少なくとも１つのディスクリプタを処理した後、前記少なくとも１つのデータプロセッサは、データの前記少なくとも１つの部分及び前記少なくとも１つのディスクリプタがもはや有効でなく且つ再利用のために前記回路に利用可能にされていることを指し示すよう、前記それぞれのデータ部分情報及び前記それぞれのディスクリプタ情報を変更し得る。
【００５４】
第５の例の要素の一部又は全てを有し得る第７の例において、前記回路は、データの前記少なくとも１つの部分を、少なくとも１つのアプリケーションバッファから前記少なくとも１つのホストカーネルメモリバッファにコピーし得る。前記少なくとも１つのインジケーションは、（１）前記少なくとも１つのホストカーネルメモリバッファ内のデータの前記少なくとも１つの部分の少なくとも１つの位置と、（２）前記少なくとも１つのデータプロセッサによって処理されるべき前記データの部分数とを少なくとも部分的に指し示し得る。前記少なくとも１つのデータプロセッサは、データの前記部分数の全てを前記少なくとも１つのデータプロセッサが完全に処理したかを少なくとも部分的に決定することに使用されるカウンタを維持管理し得る。
【００５５】
この実施形態の第８の例において、機械によって実行されるときに、以上の例のうちの何れかの装置によって（且つ／或いはそのコンポーネントのうちの何れかの１つ又は組み合わせによって）実行される処理の何れかの組み合わせを有し得る処理の実行をもたらす１つ以上の命令を格納したコンピュータ読み取り可能メモリが提供される。この実施形態の第９の例において、（１）以上の例のうちの何れかの装置によって（且つ／或いはそのコンポーネントのうちの何れかの１つ又は組み合わせによって）実行される処理の何れかの組み合わせ、及び／又は（２）この実施形態の第８の例のコンピュータ読み取り可能メモリに格納された１つ以上の命令の実行によって行われ得る処理の何れかの組み合わせを有し得る方法が提供される。
【００５６】
この実施形態の第１０の例において、以上の例のうちの何れかの方法、装置、コンピュータ読み取り可能メモリによって実行され得る処理のうちの何れか及び／又は組み合わせを実行するための手段が提供され得る。この実施形態の第１１の例において、（例えば、この実施形態の以上の例のうちの何れかにて）ここに記載された構造、回路、装置、機構などの１つ以上の部分集合を規定し得る例えばハードウェア記述言語などの命令及び／又は設計データを格納し得る機械読み取り可能命令が提供され得る。
【００５７】
以上の例のうちの何れかの要素の一部又は全てを有し得るこの実施形態の第１２の例において、前記少なくとも１つのインジケーションは、ホストメモリに少なくとも部分的に書き込まれ得る少なくとも１つのドアベルを有し得る。前記少なくとも１つのドアベルは、（１）データの前記少なくとも１つの部分への少なくとも１つのポインタと、（２）データの前記少なくとも１つの部分の少なくとも１つのディスクリプタと、（３）データの前記少なくとも１つの部分の少なくとも１つのサイズを少なくとも部分的に指し示す少なくとも１つのインジケータとを有し得る。
【００５８】
有利なことに、この実施形態の処理は、従来のプル技術がパケットデータの処理及び／又は送信を行うために導入し得るものより小さいレイテンシでパケットデータの処理及び／又は送信を行い得る。また有利なことに、この実施形態は、ますます多くのパケットトラフィック及び／又はＣＰＵスレッドがパケット送信を要求することに対して、従来のプッシュ技術でそうであるものより十分且つ／或いは良好にスケーリングし得る。
【００５９】
さらにまた有利なことに、この実施形態は、使用される特定のホストバスプロトコル／内部輸送アーキテクチャに応じて、以上の従来技術と比較して向上されたＣＰＵ、ＣＰＵスレッド、ホストメモリ及び／又はホストシステムの性能を示し得る。これは特に、バースト性トラフィックの場合に当てはまり得る。さらに、この実施形態が使用されるとき、有意に増大されたＮＩＣメモリ（及び／又は関連メモリコスト）は必要とされないことがある。
【００６０】
数多くのその他及び／又は更なる変更、変形及び／又は代替が可能である。従って、請求項は、全てのそのような代替、変更及び／又は変形を包含するものである。
【図１】
0005911943.tif 000002
【図２】
0005911943.tif 000003
【図３】
0005911943.tif 000004
【図４】
0005911943.tif 000005