(19)【発行国】日本国特許庁(JP)
(12)【公報種別】特許公報(B2)
(11)【特許番号】
(24)【登録日】2022-05-16
(45)【発行日】2022-05-24
(54)【発明の名称】パケット処理
(51)【国際特許分類】
H04L 47/50 20220101AFI20220517BHJP
【FI】
H04L47/50
(21)【出願番号】P 2020505176
(86)(22)【出願日】2018-07-26
(86)【国際出願番号】 CN2018097254
(87)【国際公開番号】W WO2019024763
(87)【国際公開日】2019-02-07
【審査請求日】2020-01-30
(31)【優先権主張番号】201710638401.3
(32)【優先日】2017-07-31
(33)【優先権主張国・地域又は機関】CN
(73)【特許権者】
【識別番号】518056748
【氏名又は名称】新華三技術有限公司
【氏名又は名称原語表記】NEW H3C TECHNOLOGIES CO., LTD.
(74)【代理人】
【識別番号】110001195
【氏名又は名称】特許業務法人深見特許事務所
(72)【発明者】
【氏名】田 浩
【審査官】羽岡 さやか
(56)【参考文献】
【文献】国際公開第2004/066571(WO,A1)
【文献】特開2013-135382(JP,A)
【文献】米国特許出願公開第2002/0188742(US,A1)
【文献】特開平02-004067(JP,A)
【文献】特開2003-174475(JP,A)
【文献】特開2002-261840(JP,A)
【文献】米国特許出願公開第2007/0223483(US,A1)
(58)【調査した分野】(Int.Cl.,DB名)
H04L 12/00-69/40
(57)【特許請求の範囲】
【請求項1】
パケット処理方法であって、
メモリが複数の第1ブロックに区分され、前記各第1ブロックが複数の第2ブロックに区分され、前記各第2ブロックが何れも第1記憶空間および第2記憶空間を含み、
前記パケット処理方法は、
記憶すべき第1パケットを取得することと、
前記第1パケットの長さと前記第1記憶空間の長さとに基づいて、前記第1パケットによって占められるべき1つまたは複数の第2ブロックを特定することと、
前記第1パケットを前記特定された各第2ブロックの第1記憶空間に記憶することと、
前記特定された各第2ブロックについて、当該第2ブロックに対応するパケット記述子(PD)を生成し、前記PDを当該第2ブロックの第2記憶空間に記憶することとを含み、PDがパケットの長さとキュー情報と記憶アドレスとを含むパケットのキー情報を格納するために使用され、
PDは、パケットにアクセスするためにネットワーク設備によって使用されるパケットの情報であって、当該パケットのコンテンツに属さず、
読み取るべきキューのヘッドポインタによって指し示される読み取るべき第2パケットの開始アドレスに基づいて、読み取るべき1つまたは複数の第2ブロックを特定することと、
前記読み取るべき各第2ブロックの第1記憶空間からパケットセグメントを読み取り、前記読み取るべき各第2ブロックの第2記憶空間からPDを読み取ることと、
読み取られたPDを利用して、読み取られたパケットセグメントを前記第2パケットに組み立て、前記第2パケットを送信することと、を含むことを特徴とするパケット処理方法。
【請求項2】
前記第1パケットによって占められるべき1つまたは複数の第2ブロックを特定することは、
前記第1パケットに対応するキューを特定することと、
前記キューがテールポインタを有する場合、前記テールポインタで指される第2ブロックから、前記第1パケットによって占められるべき第2ブロックを特定することと、
前記キューがテールポインタを有さない場合、空き第1ブロックを選択し、選択された空き第1ブロックにおける最初の第2ブロックから、前記第1パケットによって占められるべき第2ブロックを特定することと、を含むことを特徴とする請求項1に記載のパケット処理方法。
【請求項3】
当該第2ブロックに対応するPDを生成することは、
当該第2ブロックが前記第1パケットによって占められるべき最初の第2ブロックである場合、前記第1パケットの長さを当該第2ブロックに対応するPD内に記録し、且つ、当該第2ブロックが前記第1パケットを記憶する最初の第2ブロックであることを示すように、当該第2ブロックに対応するPD内の第1フラグを有効にセットすることと、
当該第2ブロックが前記第1パケットによって占められるべき最後の第2ブロックである場合、当該第2ブロックが前記第1パケットを記憶する最後の第2ブロックであることを示すように、当該第2ブロックに対応するPD内の第2フラグを有効にセットすることと、を含むことを特徴とする請求項1に記載のパケット処理方法。
【請求項4】
当該第2ブロックに対応するPDを生成することは、
当該第2ブロックが現在の第1ブロックの最後の第2ブロックであるが、前記第1パケットによって占められるべき最後の第2ブロックではない場合、前記第1パケットによって占められるべき次の第1ブロックを指すポインタを、当該第2ブロックに対応するPD内に記録し、前記次の第1ブロックにおける、前記第1パケットによって占められるべき第2ブロックの数を当該第2ブロックに対応するPD内に記録することを含むことを特徴とする請求項1に記載のパケット処理方法。
【請求項5】
当該第2ブロックに対応するPDを生成することは、
当該第2ブロックの所属する第1ブロックの現在の反転フラグを取得し、前記第1ブロックを2回連続して使用する場合、それぞれの反転フラグは異なることと、
当該第2ブロックに対応するPDが前記第1ブロックの現在の反転フラグを含むと特定することと、を含むことを特徴とする請求項1に記載のパケット処理方法。
【請求項6】
前記読み取るべき各第2ブロックの第1記憶空間からパケットセグメントを読み取り、前記読み取るべき各第2ブロックの第2記憶空間からPDを読み取ることは、
前記読み取るべき第2ブロックの所属する現在の第1ブロックの各第2ブロックの第2記憶空間からPDを読み取り、第1フラグが有効であるPDに対応する第2ブロックを、前記第2パケットを記憶する最初の第2ブロックとして特定することと、
第2フラグが有効であるPDを前記現在の第1ブロックから読み取った場合、第2フラグが有効であるPDに対応する第2ブロックを、前記第2パケットを記憶する最後の第2ブロックとして特定することと、
第2フラグが有効であるPDを前記現在の第1ブロックから読み取っていない場合、
前記現在の第1ブロックの最後の第2ブロックの第2記憶空間からPDを読み取ることで、次の第1ブロックを指すポインタを当該PDから取得し、
前記次の第1ブロックにおける、前記第2パケットによって占められる第2ブロックの数を当該PDから取得し、
前記ポインタと前記第2ブロックとの数に基づいて前記次の第1ブロックの第2ブロックの第2記憶空間からPDを読み取り、
第2フラグが有効であるPDに対応する第2ブロックを、前記第2パケットを記憶する最後の第2ブロックとして特定することと、
前記特定された最初の第2ブロックと前記特定された最後の第2ブロックの間の各第2ブロックの第1記憶空間からパケットセグメントを読み取ることと、を含むことを特徴とする請求項1に記載のパケット処理方法。
【請求項7】
読み取られたパケットセグメントによって占められた第1記憶空間を解放することと、
前記現在の第1ブロックにおける各第2ブロックの第1記憶空間が何れも解放されたとき、前記現在の第1ブロックを空き第1ブロックとして回収し、且つ、前記現在の第1ブロックにおける各第2ブロックの第2記憶空間を解放する、または、前記現在の第1ブロックの反転フラグを調整することと、を更に含むことを特徴とする請求項6に記載のパケット処理方法。
【請求項8】
パケット処理装置であって、
メモリが複数の第1ブロックに区分され、前記各第1ブロックが複数の第2ブロックに区分され、前記各第2ブロックが何れも第1記憶空間および第2記憶空間を含み、
前記パケット処理装置は、
記憶すべき第1パケットを取得し、前記第1パケットの長さと前記第1記憶空間の長さとに基づいて、前記第1パケットによって占められるべき1つまたは複数の第2ブロックを特定し、前記第1パケットを前記特定された各第2ブロックの第1記憶空間に記憶し、前記特定された各第2ブロックについて、当該第2ブロックに対応するパケット記述子(PD)を生成し、前記PDを当該第2ブロックの第2記憶空間に記憶するための書込モジュールとを含み、PDがパケットの長さとキュー情報と記憶アドレスとを含むパケットのキー情報を格納するために使用され、
PDは、パケットにアクセスするためにネットワーク設備によって使用されるパケットの情報であって、当該パケットのコンテンツに属さず、
読み取るべきキューのヘッドポインタによって指し示される読み取るべき第2パケットの開始アドレスに基づいて、読み取るべき1つまたは複数の第2ブロックを特定し、前記読み取るべき各第2ブロックの第1記憶空間からパケットセグメントを読み取り、前記読み取るべき各第2ブロックの第2記憶空間からPDを読み取り、読み取られたPDを利用して、読み取られたパケットセグメントを前記第2パケットに組み立て、組み立てられた前記第2パケットを送信するための読取モジュールと、を備えることを特徴とするパケット処理装置。
【請求項9】
前記書込モジュールは、具体的に、
前記第1パケットに対応するキューを特定し、
前記キューがテールポインタを有する場合、前記テールポインタで指される第2ブロックから、前記第1パケットによって占められるべき第2ブロックを特定し、
前記キューがテールポインタを有さない場合、空き第1ブロックを選択し、選択された空き第1ブロックにおける最初の第2ブロックから、前記第1パケットによって占められるべき第2ブロックを特定することを特徴とする請求項8に記載のパケット処理装置。
【請求項10】
前記書込モジュールは、具体的に、
当該第2ブロックが前記第1パケットによって占められるべき最初の第2ブロックである場合、前記第1パケットの長さを当該第2ブロックに対応するPD内に記録し、且つ、当該第2ブロックが前記第1パケットを記憶する最初の第2ブロックであることを示すように、当該第2ブロックに対応するPD内の第1フラグを有効にセットし、
当該第2ブロックが前記第1パケットによって占められるべき最後の第2ブロックである場合、当該第2ブロックが前記第1パケットを記憶する最後の第2ブロックであることを示すように、当該第2ブロックに対応するPD内の第2フラグを有効にセットすることを特徴とする請求項8に記載のパケット処理装置。
【請求項11】
前記書込モジュールは、具体的に、
当該第2ブロックが現在の第1ブロックの最後の第2ブロックであるが、前記第1パケットによって占められるべき最後の第2ブロックではない場合、前記第1パケットによって占められるべき次の第1ブロックを指すポインタを、当該第2ブロックに対応するPD内に記録し、前記次の第1ブロックにおける、前記第1パケットによって占められるべき第2ブロックの数を当該第2ブロックに対応するPD内に記録することを特徴とする請求項8に記載のパケット処理装置。
【請求項12】
前記書込モジュールは、具体的に、
当該第2ブロックの所属する第1ブロックの現在の反転フラグを取得し、前記第1ブロックを2回連続して使用する場合、それぞれの反転フラグは異なり、
当該第2ブロックに対応するPDが前記第1ブロックの現在の反転フラグを含むと特定することを特徴とする請求項8に記載のパケット処理装置。
【請求項13】
前記読取モジュールは、具体的に、
前記読み取るべき第2ブロックの所属する現在の第1ブロックの各第2ブロックの第2記憶空間からPDを読み取り、第1フラグが有効であるPDに対応する第2ブロックを、前記第2パケットを記憶する最初の第2ブロックとして特定し、
第2フラグが有効であるPDを前記現在の第1ブロックから読み取った場合、第2フラグが有効であるPDに対応する第2ブロックを、前記第2パケットを記憶する最後の第2ブロックとして特定し、
第2フラグが有効であるPDを前記現在の第1ブロックから読み取っていない場合、
前記現在の第1ブロックの最後の第2ブロックの第2記憶空間からPDを読み取ることで、次の第1ブロックを指すポインタを当該PDから取得し、
前記次の第1ブロックにおける、前記第2パケットによって占められる第2ブロックの数を当該PDから取得し、
前記ポインタと前記第2ブロックとの数に基づいて前記次の第1ブロックの第2ブロックの第2記憶空間からPDを読み取り、
第2フラグが有効であるPDに対応する第2ブロックを、前記第2パケットを記憶する最後の第2ブロックとして特定し、
前記特定された最初の第2ブロックと前記特定された最後の第2ブロックの間の各第2ブロックの第1記憶空間からパケットセグメントを読み取ることを特徴とする請求項8に記載のパケット処理装置。
【請求項14】
前記読取モジュールは、更に、
読み取られたパケットセグメントによって占められた第1記憶空間を解放し、
前記現在の第1ブロックにおける各第2ブロックの第1記憶空間が何れも解放されたとき、前記現在の第1ブロックを空き第1ブロックとして回収し、且つ、前記現在の第1ブロックにおける各第2ブロックの第2記憶空間を解放する、または、前記現在の第1ブロックの反転フラグを調整することを特徴とする請求項13に記載のパケット処理装置。
【請求項15】
ネットワーク設備であって、
記憶手段と、転送チップとを備え、
前記記憶手段のメモリが複数の第1ブロックに区分され、前記各第1ブロックが複数の第2ブロックに区分され、前記各第2ブロックが何れも第1記憶空間および第2記憶空間を含み、
前記転送チップは、
記憶すべき第1パケットを取得し、
前記第1パケットの長さと前記第1記憶空間の長さとに基づいて、前記第1パケットによって占められるべき1つまたは複数の第2ブロックを特定し、
前記第1パケットを前記記憶手段における前記特定された各第2ブロックの第1記憶空間に記憶し、
前記特定された各第2ブロックについて、当該第2ブロックに対応するパケット記述子(PD)を生成し、前記PDを当該第2ブロックの第2記憶空間に記憶し、PDがパケットの長さとキュー情報と記憶アドレスとを含むパケットのキー情報を格納するために使用され、
PDは、パケットにアクセスするためにネットワーク設備によって使用されるパケットの情報であって、当該パケットのコンテンツに属さず、
読み取るべきキューのヘッドポインタによって指し示される読み取るべき第2パケットの開始アドレスに基づいて、読み取るべき1つまたは複数の第2ブロックを特定し、
前記記憶手段における前記読み取るべき各第2ブロックの第1記憶空間からパケットセグメントを読み取り、前記記憶手段における前記読み取るべき各第2ブロックの第2記憶空間からPDを読み取り、
読み取られたPDを利用して、読み取られたパケットセグメントを前記第2パケットに組み立て、組み立てられた前記第2パケットを送信することを特徴とするネットワーク設備。
【発明の詳細な説明】
【背景技術】
【0001】
関連出願の相互引用
本願は、出願日が2017年7月31日であり、出願番号が201710638401.3であり、発明名称が「パケット処理方法、装置およびネットワーク設備」である中国特許出願の優先権を主張し、当該出願の全文が引用により本願に組み込まれる。
【0002】
背景技術
ネットワーク設備は、パケットを受信した場合、パケットの所属するキューに基づいて、パケットを外部の記憶手段にキャッシュしてもよい。ネットワーク設備は、パケットを送信する場合も、パケットの所属するキューに基づいて、パケットを外部の記憶手段から読み取って送信してもよい。パケットのキャッシュ・読取の過程に2つの肝心な要素が存在し、それぞれはPKT(PACKET、パケットエンティティ)およびPD(Packet Description、パケット記述子)である。
【0003】
ネットワーク設備は、PKTをDDR SDRAM(Dual Data Rate Synchronous Dynamic Random Access Memory、後でDDRと略称する)に記憶し、PDをQDR SRAM(Quad Data Rate Static Random Access Memory、後でQDRと略称する)に記憶してもよい。QDRを用いてPDを記憶するため、シングルボード設計のコストがアップし、配線の負担も増える。また、パケットを送信する際、ネットワーク設備は、まず、QDRからPDを読み取り、次に、PDを用いてDDRからPKTを読み取る。二つのステップでPDおよびPKTを別々読み取るため、読取効率が低い。
【図面の簡単な説明】
【0004】
【
図1A】本発明の一実施形態における応用場面の模式図である。
【
図1B】本発明の一実施形態における応用場面の模式図である。
【
図1C】本発明の一実施形態における応用場面の模式図である。
【
図2A】本発明の一実施形態におけるパケットを記憶する模式的なフローチャートである。
【
図2B】本発明の一実施形態における特定パケットによって占められるべき第2ブロックの模式的なフローチャートである。
【
図2C】本発明の一実施形態におけるパケットを読み取る模式的なフローチャートである。
【
図3A】本発明の別の実施形態における応用場面の模式図である。
【
図3B】本発明の別の実施形態における応用場面の模式図である。
【
図3C】本発明の別の実施形態における応用場面の模式図である。
【
図3D】本発明の別の実施形態における応用場面の模式図である。
【
図3E】本発明の別の実施形態における応用場面の模式図である。
【
図4】本発明の一実施形態におけるパケット処理装置の構造図である。
【
図5A】本発明の一実施形態におけるネットワーク設備のハードウェア構造図である。
【
図5B】本発明の一実施形態におけるネットワーク設備のハードウェア構造図である。
【発明を実施するための形態】
【0005】
本発明の実施例で使用される用語は、単に特定の実施例を記述する目的であり、本発明を制限するためのものではない。本発明及び添付する特許請求の範囲で使用される単数形式の「一種」、「前記」及び「当該」も、文脈から他の意味を明瞭で分かる場合でなければ、複数の形式を含むことを意図する。理解すべきことは、本文で使用される用語「および/または」が、1つまたは複数の関連する列挙項目を含む如何なる或いは全ての可能な組み合わせを指す。
【0006】
理解すべきことは、本発明において第1、第2、第3等という用語を用いて各種の情報を記述するが、これらの情報は、これらの用語に限定されるものではない。これらの用語は、単に同一のタイプの情報同士を区分するために用いられる。例えば、本発明の範囲を逸脱しない限り、第1情報が第2情報と呼称されてもよく、類似的に、第2情報が第1情報と呼称されてもよい。これは、コンテキストに依存する。例えば、ここで使用される言葉「場合」は、「…とき」や「…ときに」あるいは「特定の状況に応じて」として解釈されてもよい。
【0007】
本発明の実施例は、パケット処理方法を提供し、当該方法はネットワーク設備に適用可能である。ネットワーク設備は、パケットを処理する際、パケットの記憶・読取の過程に係る。パケットの記憶・読取の過程に、2つの肝心な要素が存在し、それぞれは記憶すべきパケット自身およびPDである。記憶すべきパケット自身は、PKTとも呼称されてもよく、以下ではパケットと略称されてもよい。PDは、パケットの肝心な情報、例えば、パケットの長さ、キュー情報、記憶アドレス等を格納するために用いられる。PDの長さは、パケットの長さより遥かに小さくなり、PDの情報量は比較的に小さい。
【0008】
本発明の実施例では、パケットおよびPDを同一のメモリ、例えばDDRメモリに記憶することで、DDRメモリリソースを十分に利用し、シングルボード設計のコストを有効的に低減し、配線の負担を軽減する。また、パケットおよびPDが同一のメモリに記憶されるため、パケットを送信する必要があるとき、同一のメモリからパケットおよびPDを読み取ることができ、読取効率が相対的に高くなる。
【0009】
本発明の実施例では、メモリ(例えば、DDRメモリ)が複数の第1ブロックに区分され、各第1ブロックが更に複数の第2ブロックに区分され、各第2ブロックが1つのburstであってもよい。各第2ブロックが、更に、大きさが異なる2つの記憶空間、即ち、第1記憶空間および第2記憶空間に区分される。第1記憶空間は、第2記憶空間よりも大きくなってもよい。これを基に、パケットを第1記憶空間に記憶し、PDを第2記憶空間に記憶可能である。このように、パケットおよびPDは、同一のメモリに記憶される。
【0010】
一例では、
図1Aに示すように、DDRメモリは、複数の第1ブロックに区分されてもよく、各第1ブロックは、2Kバイトの大きなメモリである。また、各第1ブロックは、32個の第2ブロックに区分されてもよく、各第2ブロックは、64バイトの小さなメモリである。即ち、各2Kバイトの第1ブロックは、32個の64バイトの第2ブロックに区分され、各第2ブロックは、1つのburstである。
【0011】
上記2Kバイト、32個、64バイト等は、単に本発明の1つの例示に過ぎず、この数値について制限しない。例えば、第1ブロックが2Kバイトで、第2ブロックが128バイトであれば、第1ブロックは、16個の第2ブロックに区分される。更に例えば、第1ブロックが4Kバイトで、第2ブロックが64バイトであれば、第1ブロックは、64個の第2ブロックに区分される。これをもって類推する。記述の便宜上、後は、2Kバイトの第1ブロックを32個の64バイトの第2ブロックに区分することを例とする。
【0012】
第1ブロックを32個の第2ブロックに区分した後、各第2ブロックを大きさの異なる2つの記憶空間に区分してもよい。大きな第1記憶空間は、例えば56バイトであり、第1記憶空間は、パケットを記憶するために用いられる。小さな第2記憶空間は、例えば8バイトであり、第2記憶空間は、PDを記憶するために用いられる。
図1Bに示すように、第2ブロックは、パケットおよびPDを同時に記憶できる。例えば、4つのパケット(例えば、パケット0、パケット1、パケット2、パケット3)を記憶する必要があり、且つ4つのパケットの大きさが何れも96バイトである場合、パケット0は、第2ブロック0および第2ブロック1に記憶され、パケット0は、第2ブロック0の第1記憶空間の56バイトを占め、第2ブロック1の第1記憶空間内の40バイトを占める。第2ブロック0の前8バイトの第2記憶空間にPDが記憶され、第2ブロック1の前8バイトの第2記憶空間にもPDが記憶されている。これをもって類推する。
【0013】
表1は、PDに含まれる情報フィールドの一例示である。
【0014】
【0015】
図1Cは、PDの一例示である。ビューの簡素化のために、
図1Cは、PDに有効値が存在する部分的な情報フィールドのみを示す。異なる第2ブロックに記憶されたPDが同じである可能性があるし、異なる可能性もある。例えば、一つのパケットが1つまたは複数の第2ブロックを占めるとき、占められた全ての第2ブロックのうちの最初の第2ブロックについて、当該第2ブロックにおけるPD内の情報フィールドLENおよびSOPに対して、値を付与する必要がある。例えば、ある第2ブロックに記憶されたPD内の情報フィールドSOPの値が0であるとき、これは、当該第2ブロックがパケットを記憶する最初の第2ブロックであることを示す。情報フィールドSOP(後文では、第1フラグとも呼称されてもよい)の値が1であるとき、これは、当該第2ブロックがパケットを記憶する最初の第2ブロックではないことを示す。情報フィールドLENの値は、当該PDに対応する第2ブロックに記憶されるパケットの長さである。
【0016】
パケットによって占められるべき全ての第2ブロックのうちの最後の第2ブロックについて、当該第2ブロックにおけるPD内の情報フィールドEOP(後文では、第2フラグとも呼称されてもよい)に対して値を付与する。例えば、ある第2ブロックに記憶されたPD内の情報フィールドEOPの値が0であるとき、これは、当該第2ブロックがパケットを記憶する最後の第2ブロックであることを示す。情報フィールドEOPの値が1であるとき、これは、当該第2ブロックがパケットを記憶する最後の第2ブロックではないことを示す。
【0017】
パケットによって占められるべき何れか1つの第2ブロックについて、当該第2ブロックにおけるPD内の情報フィールドBVの値を有効にセットする必要がある。例えば、ある第2ブロックに記憶されたPD内の情報フィールドBVの値が0であるとき、これは、当該第2ブロックが有効であることを示す。しかし、当情報フィールドBVの値が1であるとき、これは、当該第2ブロックが無効であると示すことを示す。
【0018】
また、一つのパケットによって占められるべき複数の第2ブロックが少なくとも2つの第1ブロックに属するとき、第2ブロックが当該パケットによって占められるべき現在の第1ブロックにおける最後の第2ブロックであるが、当該パケットによって占められるべき最後の第2ブロックではない場合には、当該第2ブロックにおけるPD内の情報フィールドVAL、NBAおよびNBNについて値を付与する。情報フィールドVALは、情報フィールドNBAが有効であるか否かを示してもよい。例えば、ある第2ブロックに記憶されたPD内の情報フィールドVALの値が0であるとき、これは、当該PD内の情報フィールドNBAが有効であることを示す。しかし、当該PD内の情報フィールドVALの値が1であるとき、これは、当該PD内の情報フィールドNBAが無効であることを示す。情報フィールドNBA(Next Block Address、次のグロックのアドレス)の値は、当該パケットが占めるべき次の第1ブロックの、ポインタアドレスである。情報フィールドNBN(Next Block Number、次のグロックの数)の値は、当該パケットが次の第1ブロックに占める第2ブロックの数である。
【0019】
例えば、
図1Cにおいて、パケット1が第2ブロック2、第2ブロック3および第2ブロック4を占める。パケット1によって占められるべき全ての第2ブロックのうち、最初の第2ブロックは、第2ブロック2であり、当該第2ブロック2に対応するPD内の情報フィールドLENの値は、例えば120である。このように、パケット1の全長が120バイトであることは、示される。当該第2ブロック2におけるPD内の情報フィールドSOPの値は、0であり、これは、当該第2ブロック2がパケット1によって占められる最初の第2ブロックであることを示す。パケット1によって占められるべき何れか1つの第2ブロック(例えば、第2ブロック2、第2ブロック3および第2ブロック4、
図1Cに、ビューの簡素化のために、単に第2ブロック3を例としてBVを示す)について、当該第2ブロック3に対応するPD内の情報フィールドBVの値は、0であり、これは、当該第2ブロック3が有効であることを示す。パケット1によって占められるべき全ての第2ブロックのうち、最後の第2ブロックは、第2ブロック4であり、当該第2ブロック4におけるPD内の情報フィールドEOPの値は、0であり、これは、当該第2ブロック4がパケット1によって占められる最後の第2ブロックであることを示す。
【0020】
この例示では、第2ブロック2におけるPDには、LEN=120、SOP=0、BV=0が記録されてもよく、第2ブロック4におけるPDには、EOP=0、BV=0が記録されてもよく、第2ブロック3におけるPDには、BV=0が記録されてもよい。
【0021】
更に例えば、パケット2は、第1ブロック0における第2ブロック5~第2ブロック31、および、第1ブロック1における第2ブロック0、第2ブロック1を占める。パケット2によって占められるべき全ての第2ブロックのうち、最初の第2ブロックは、第1ブロック0における第2ブロック5であり、当該第1ブロック0における第2ブロック5に対応するPD内の情報フィールドLENの値は、例えば1560であり、パケット2の全長が1560バイトであることは示される。当該第1ブロック0における第2ブロック5におけるPD内の情報フィールドSOPの値は、0であり、当該第2ブロック5がパケット2によって占められる最初の第2ブロックであることは、示される。パケット2によって占められるべき何れか1つの第2ブロック(例えば、第1ブロック0における第2ブロック5~第2ブロック31、および、第1ブロック1における第2ブロック0および第2ブロック1)について、これらの第2ブロックに対応するPD内の情報フィールドBVの値は、何れも0であり、これらの第2ブロックが有効であることは、示される。パケット2によって占められる第1ブロック0における第2ブロック31は、第1ブロック0における最後の第2ブロックであり、当該第1ブロック0における第2ブロック31に対応するPD内の情報フィールドNBAには、パケット2によって占められる次の第1ブロック、即ち、第1ブロック1のポインタ(例えば、第1ブロック1の第2ブロック0のアドレス)が記録されている。第1ブロック0における第2ブロック31に対応するPD内の情報フィールドNBNの値は、2であり、これは、パケット2によって占められる、第1ブロック1における第2ブロックの数を記録する。第1ブロック0における第2ブロック31に対応するPD内の情報フィールドVALの値は、0であり、これは、情報フィールドNBAが有効であることを示す。パケット2によって占められるべき全ての第2ブロックのうち、最後の第2ブロックは、第1ブロック1における第2ブロック1であり、当該第1ブロック1における第2ブロック1に対応するPD内の情報フィールドEOP値は、0であり、これは、当該第1ブロック1における第2ブロック1がパケット2によって占められる最後の第2ブロックであることを示す。
【0022】
この例示では、第1ブロック0における第2ブロック5のPDには、LEN=1560、SOP=0、BV=0が記録されてもよく、第1ブロック0における第2ブロック31のPDには、BV=0、NBA=0x8049324(占められる次の第1ブロックのポインタアドレスを示す)、NBN=2、VAL=0が記録されてもよく、他の第2ブロックのPDについては、ここで繰り返し説明しない。
【0023】
上記応用場面において、
図2Aは、パケットを記憶する模式的なフローチャートである。
【0024】
ステップ201では、記憶すべきパケットを取得する。
ステップ202では、当該パケットの長さと第1記憶空間の長さとに基づいて、当該パケットによって占められるべき1つまたは複数の第2ブロックを特定する。
【0025】
ステップ203では、当該パケットを特定された第2ブロックの第1記憶空間に記憶する。
【0026】
ステップ204では、特定された各第2ブロックについて、当該第2ブロックに対応するPDを生成し、当該PDを当該第2ブロックの第2記憶空間に記憶する。
【0027】
一例では、
図2Bに示すように、ステップ202「当該パケットによって占められるべき1つまたは複数の第2ブロックを特定する」は、以下の方式を含むが、それに限定されない。
【0028】
ステップ2021では、当該パケットに対応するキューを特定する。
ステップ2022では、当該キューが対応するテールポインタを有するか否かを判断する。そうであれば、ステップ2023へ進行し、そうでなければ、ステップ2024へ進行する。
【0029】
ステップ2023では、当該キューが対応するテールポインタを有する場合、当該テールポインタで指される第2ブロックから、当該パケットによって占められるべき第2ブロックを特定する。
【0030】
ステップ2024では、当該キューが対応するテールポインタを有さない場合、空き第1ブロックを選択し、選択された空き第1ブロックにおける最初の第2ブロックから、当該パケットによって占められるべき第2ブロックを特定する。
【0031】
まず、当該パケットの長さと第1記憶空間の長さとに基づいて、当該パケットによって占められるべき第2ブロックの数Nを特定する。その後、当該テールポインタで指される第2ブロックから、または選択された空き第1ブロックにおける最初の第2ブロックから、当該パケットによって占められるべきN個の第2ブロックを特定する。第2ブロックのそれぞれは、当該パケットの一つのパケットセグメントを記憶する。例えば、パケットが3つの第2ブロックを占めるべき場合、パケットが3つのパケットセグメントに区分され、各パケットセグメントが1つの第2ブロックを占めさせる。
【0032】
ネットワーク設備は、キューを用いてパケットを記憶してもよく、各キューは、唯一のキュー識別子を有する。無論、キューを用いてパケットを記憶する方式は、単に1つの例示に過ぎず、ネットワーク設備は、他の方式でパケットを記憶してもよい。キューでパケットを記憶することにより、異なるタイプのパケットを異なるキューに有効的に記憶することができる。例えば、ネットワーク設備は、3つのキュー(例えば、FIFO(First-In First-Out、先入れ先出し)キュー)を含み、この3つのキューのキュー識別子は、それぞれキューA、キューBおよびキューCである。キューAは、特徴A(例えば、出力インターフェースがインターフェースAである)を有するパケットを記憶し、キューBは、特徴B(例えば、出力インターフェースがインターフェースBである)を有するパケットを記憶し、キューCは、特徴C(例えば、出力インターフェースがインターフェースCである)を有するパケットを記憶する。
【0033】
ネットワーク設備は、記憶すべきパケットを取得した後、先に当該パケットに対応するキューを特定してもよい。当該パケットが当該キューに対応する最初のパケットである場合、当該キューは、テールポインタおよびヘッドポインタを対応的に有していない。当該パケットが当該キューに対応する最初のパケットではない場合、当該キューは、テールポインタおよびヘッドポインタを対応的に有する。
【0034】
ヘッドポインタは、キューに対応する最初のパケットのヘッダ部を指すポインタを示し、例えば、キューにおける最初のパケットの開始アドレスまたは開始位置を指す。テールポインタは、キューに対応する最後のパケットのテール部を指すポインタを示し、例えば、キューにおける最後のパケットの終了アドレスまたは終了位置を指す。
【0035】
例えば、キューが空きである場合、記憶すべきパケット1を取得すれば、キューにパケット1を記憶し、当該キューのヘッドポインタがパケット1の開始アドレスを指すように更新し、当該キューのテールポインタがパケット1の終了アドレスを指すように更新する。その後、当該キューに記憶されるべきパケット2を取得すれば、当該キューにパケット2を記憶し、当該キューのテールポインタがパケット2の終了アドレスを指すように更新する。これをもって類推し、当該キューのパケットを受信する度に、当該キューのテールポインタを更新する。
【0036】
キューにおけるパケットを読み取る必要がある場合、キューのヘッドポインタから読み取り始める。例えば、パケット1の読取が完了した後、当該キューからパケット1を削除し、当該キューのヘッドポインタがパケット2の開始アドレスを指すように更新する。これをもって類推し、一つのパケットをキューから読み取って削除する度に、当該キューのヘッドポインタを更新する。このように、パケットを記憶する過程は、キューのテールポインタから、パケットを順次記憶して読み取る過程であり、キューのヘッドポインタから、パケットを順次読み取る。
【0037】
ステップ2023は、当該テールポインタで指される第2ブロックの次の第2ブロックから、N個の第2ブロックを選択することを含んでもよく、前記Nは、パケットの長さと第1記憶空間の長さとに基づいて特定されるものである。例えば、テールポインタが第1ブロック1における第2ブロック10を指し、且つパケットの長さ100バイト、第1記憶空間の長さ56バイトに基づいて当該パケットが2つの第2ブロックを占めるべきであると特定される。このように、当該パケットによって占められる第2ブロックは、第1ブロック1における第2ブロック11および第2ブロック12である。更に例えば、テールポインタが第1ブロック1における第2ブロック30を指し、且つパケットの長さ100バイト、第1記憶空間の長さ56バイトに基づいて当該パケットが2つの第2ブロックを占めるべきであると特定される。第1ブロック1に2つの空き第2ブロックが存在しないため、空き第1ブロック(例えば、第1ブロック3)を再度申請する。これを基に、当該パケットによって占められる第2ブロックは、第1ブロック1における第2ブロック31および第1ブロック3における第2ブロック0である。
【0038】
また、ステップ2023では、パケットによって占められるべき第2ブロックが特定された後、キューのテールポインタが当該パケットによって占められた最後の第2ブロックの終了アドレスを指すように更新してもよく、例えば、第2ブロック12の終了アドレスを指す。
【0039】
ステップ2024は、選択された空き第1ブロックにおける最初の第2ブロックから、N個の第2ブロックを選択することを含んでもよく、前記Nは、パケットの長さと第1記憶空間の長さとに基づいて特定されるものである。例えば、空き第1ブロック2が選択されれば、パケットの長さ100バイト、第1記憶空間の長さ56バイトに基づいて、当該パケットが2つの第2ブロックを占めるべきであると特定し、当該パケットによって占められる第2ブロックは、第1ブロック2における第2ブロック0および第2ブロック1である。
【0040】
また、ステップ2024では、当該パケットによって占められるべき第2ブロックが特定された後、更に、キューのヘッドポインタが当該パケットによって占められる最初の第2ブロックの開始アドレスを指すように更新し、且つ、キューのテールポインタが当該パケットによって占められる最後の第2ブロックの終了アドレスを指すように更新してもよい。
【0041】
ネットワーク設備は、空きアドレスプールをメンテナンスしてもよい。当該空きアドレスプールは、全ての空き第1ブロックを記憶する。空きブロックを申し込むとき、第1ブロックを単位として空きアドレスプールから当該空きブロックを選択してもよい。即ち、1つまたは複数の第2ブロックを直接申請することではなく、毎回1つまたは複数の第1ブロックを申請する必要がある。メモリの回収時も、第1ブロック単位で回収する。即ち、1つまたは複数の第2ブロックを空きアドレスプールに回収することではなく、1つまたは複数の第1ブロックを空きアドレスプールに回収する。
【0042】
一例では、ステップ203「パケットを特定された第2ブロックの第1記憶空間に記憶する」とき、パケットがN個の第2ブロックを占めるべき場合、パケットをN個のパケットセグメントに区分し、このN個のパケットセグメントをN個の第2ブロックの第1記憶空間にそれぞれ記憶する。例えば、パケットの長さが100バイトであり、パケットが第2ブロック11および第2ブロック12を占めるべきことを例とすると、当該パケットの前56個のバイトをパケットセグメント1に振り分け、当該パケットセグメント1を当該第2ブロック11の第1記憶空間に記憶し、当該パケットの後44個のバイトをパケットセグメント2に振り分け、当該パケットセグメント2を当該第2ブロック12の第1記憶空間に記憶する。
【0043】
一例では、パケットが1つまたは複数の第2ブロックを占めるべきとき、ステップ204「当該第2ブロックに対応するPDを生成する」は、下記のことを含んでもよいが、それらに限定されない。当該第2ブロックがパケットによって占められるべき全ての第2ブロックのうちの最初の第2ブロックである場合、当該第2ブロックのPDに当該パケットの長さを記録し、且つ、当該第2ブロックがパケットによって占められる最初の第2ブロックであることを示すように、当該第2ブロックのPD内の第1フラグを有効にセットすることが必要である。当該第2ブロックがパケットによって占められるべき全ての第2ブロックのうちの最後の第2ブロックである場合、当該第2ブロックがパケットによって占められる最後の第2ブロックであることを示すように、当該第2ブロックのPD内の第2フラグを有効にセットすることが必要である。第2ブロックがパケットによって占められるべき何れか1つの第2ブロックである場合、当該第2ブロックのPD内の、現在のブロックが占められているか否かを指示するフラグを有効にセットすることが必要である。本発明の例示では、PD内の何れかのフラグも値を付与するという形式で設定できる。例えば、情報フィールドSOP、情報フィールドEOP、情報フィールドBVは、それぞれ値を付与することが行われる。
【0044】
また、パケットによって占められるべき全ての第2ブロックが少なくとも2つの第1ブロックに属するとき、当該第2ブロックがパケットによって占められた第1ブロックにおける最後の第2ブロックである場合、当該第2ブロックのPD内の情報フィールドNBA値を、パケットによって占められるべき次の第1ブロックを指すポインタとして付与し、情報フィールドNBN値をパケットによって占められるべき次の第1ブロックにおける第2ブロックの数として付与し、情報フィールドVAL値を有効として付与することが必要である。
【0045】
上記PDの生成過程は、
図1Cを参照すればよい。ここで繰り返し説明しない。
一例では、ステップ204「当該PDを当該第2ブロックの第2記憶空間に記憶する」とき、パケットが第2ブロック11および第2ブロック12を占めるべきであれば、パケットの長さを第2ブロック11の第2記憶空間におけるPDに対応する情報フィールドLENの位置に記憶することを特定し、第2ブロック11がパケットによって占められる最初の第2ブロックであることを示すように、第2ブロック11の第2記憶空間におけるPDに対応する情報フィールドSOPへ値を付与し、第2ブロック11がパケットによって占められることを示すように、第2ブロック11の第2記憶空間におけるPDに対応する情報フィールドBVへ値を付与する。第2ブロック12がパケットによって占められる最後の第2ブロックであることを示すように、第2ブロック12の第2記憶空間におけるPDに対応する情報フィールドEOPへ値を付与することを特定し、第2ブロック12がパケットによって占められることを示すように、第2ブロック12の第2記憶空間におけるPDに対応する情報フィールドBVへ値を付与する。
【0046】
上記技術案によると、DDRメモリを複数の第1ブロックに区分し、各第1ブロックを複数の第2ブロックに区分し、各第2ブロックが第1記憶空間および第2記憶空間を含むことにより、パケットを第1記憶空間に記憶し、PDを第2記憶空間に記憶することができる。これにより、パケットおよびPDが同一のメモリに記憶でき、DDRリソースが十分に利用できるとともに、シングルボード設計のコストが有効に低減され、配線の負担も軽減される。
【0047】
それ相応に、
図2Cは、パケットを読み取る模式的なフローチャートを示し、以下のステップを含む。
【0048】
ステップ210では、読み取るべきパケットの開始アドレスに基づいて、読み取るべき1つまたは複数の第2ブロックを特定する。
【0049】
ステップ211では、読み取るべき各第2ブロックの第1記憶空間からパケットセグメントを読み取る。
【0050】
ステップ212では、当該第2ブロックの第2記憶空間からPDを読み取る。
ステップ213では、読み取られたPDを利用して、読み取られたパケットセグメントをパケットに組み立てる。
【0051】
ステップ214では、組み立てられたパケットを送信する。
図2Cに示すステップ210~ステップ214は、パケットの読取過程、およびパケットの送信過程である。
【0052】
具体的に、読み取るべき各第2ブロックの第2記憶空間からPDを読み取り、情報フィールドSOPが有効であるPDに対応する第2ブロックを最初の第2ブロックとして特定し、情報フィールドEOPが有効であるPDに対応する第2ブロックを最後の第2ブロックとして特定する。現在の第1ブロックから情報フィールドEOPが有効であるPDが読み取られていない場合、前記第1ブロックにおける最後の第2ブロックの第2記憶空間からPDを読み取ることにより、当該PDにおける情報フィールドNBAに基づいて次の第1ブロックを指すポインタを取得し、当該PDにおける情報フィールドNBNに基づいて、次の第1ブロックにおける、パケットによって占められる第2ブロックの数を取得し、前記ポインタと前記第2ブロックとの数に基づいて、次の第1ブロックにおける第2ブロックの第2記憶空間からPDを読み取る。情報フィールドEOPが有効であるPDが読み取られるまでこれをもって類推し、情報フィールドEOPが有効であるPDに対応する第2ブロックを最後の第2ブロックとして特定する。特定された最初の第2ブロックと特定された最後の第2ブロックの間の各第2ブロックの第1記憶空間からパケットセグメントを読み取り、読み取られたパケットセグメントをパケットに組み立て、組み立てられたパケットを送信する。
【0053】
あるキューにおけるパケットを送信する必要があるとき、当該キューのヘッドポインタを検索し、このヘッドポインタは、当該キューにおける最初のパケットのヘッダ(例えば、最初のパケットの開始アドレス)を指す。この開始アドレスは、第2ブロックのアドレスであってもよい。その後、当該第2ブロックの所属する第1ブロックを特定し、当該第1ブロックの当該第2ブロックの第2記憶空間からPDを読み取る。
【0054】
図1Cに示すように、第1ブロック0における第2ブロック0のPD内の情報フィールドSOPが有効であり、第1ブロック0における第2ブロック1のPD内の情報フィールドEOPが有効であるため、第1ブロック0における第2ブロック0を最初の第2ブロックとして特定し、第1ブロック0における第2ブロック1を最後の第2ブロックとして特定する。それ相応に、第1ブロック0における第2ブロック0、第2ブロック1の第1記憶空間からパケットセグメントを読み取り、読み取られたパケットセグメントをパケット0に組み立て、当該パケット0を送信する。
【0055】
第1ブロック0における第2ブロック2のPD内の情報フィールドSOPが有効であり、第1ブロック0における第2ブロック4のPD内の情報フィールドEOPが有効であるため、第1ブロック0における第2ブロック2を最初の第2ブロックとして特定し、第1ブロック0における第2ブロック4を最後の第2ブロックとして特定する。それ相応に、第1ブロック0における第2ブロック2、第2ブロック3、第2ブロック4の第1記憶空間からパケットセグメントを読み取り、読み取られたパケットセグメントをパケット1に組み立て、当該パケット1を送信する。
【0056】
更に例えば、第1ブロック0における第2ブロック5のPD内の情報フィールドSOPが有効であるため、第1ブロック0における第2ブロック5を最初の第2ブロックとして特定する。第1ブロック0において、第2ブロック5の後の各第2ブロック6-31のPD内の情報フィールドEOPが何れも有効ではないため、次の第1ブロックを指すポインタを、第2ブロック31のPD中の情報フィールドNBAから取得し、次の第1ブロックにおける、パケットによって占められる第2ブロックの数Mを第2ブロック31のPD中の情報フィールドNBNから取得し、取得されたポインタに基づいて次の第1ブロックのアドレス(図では、第1ブロック1と例示)を特定し、第1ブロック1における前M個の第2ブロック(図では、第2ブロック0および第2ブロック1と例示)の第2記憶空間からPDを読み取る。第1ブロック1における第2ブロック1のPD内の情報フィールドEOPが有効であるため、第1ブロック1における第2ブロック1を最後の第2ブロックとして特定する。その後、第1ブロック0における第2ブロック5-第2ブロック31、第1ブロック1における第2ブロック0および第2ブロック1の第1記憶空間からパケットセグメントを読み取り、読み取られたパケットセグメントをパケット2に組み立て、当該パケット2を送信する。
【0057】
一例では、「特定された最初の第2ブロックと特定された最後の第2ブロックの間の各第2ブロックの第1記憶空間からパケットセグメントを読み取る」ことの後、更に、読み取られたパケットセグメントによって占められた第1記憶空間を解放する。ある第1ブロックにおける各第2ブロックの第1記憶空間が何れも解放されたとき、前記第1ブロックを空き第1ブロックとして回収する。例えば、この第1ブロックを空きアドレスプールへ回収する。その後、ネットワーク設備は、この第1ブロックを用いて新たなパケットセグメントを記憶してもよい。また、ネットワーク設備は、当該第1ブロックで指される次の第1ブロックのアドレスに基づいて、キューのヘッドポインタを更新してもよい。
【0058】
一例では、前記第1ブロックを空き第1ブロックとして回収した後、前記第1ブロックにおける各第2ブロックの第2記憶空間を解放する。
【0059】
または、前記第1ブロックを空き第1ブロックとして回収した後、前記第1ブロックにおける各第2ブロックの第2記憶空間を解放せず、前記第1ブロックの反転フラグを調整してもよい。例えば、ネットワーク設備は、第2ブロックに対応するPDを生成する度に、当該第2ブロックの所属する第1ブロックの現在の反転フラグを取得し、当該第2ブロックに対応するPDが当該反転フラグを含むと特定する。第1ブロックを2回連続して使用する場合、それぞれの反転フラグが異なる。例えば、第1ブロックを1回目に使用するとき、対応する反転フラグが0であり、空き第1ブロックとして回収された後、2回目に使用するとき、対応する反転フラグが0と異なる(例えば、1であってもよい)ように変更され、再び空き第1ブロックとして回収された後、3回目に使用するとき、対応する反転フラグが1と異なる(例えば、0または2であってもよい)ように変更され、これをもって類推する。
【0060】
例えば、1回目に第1ブロック1を用いてパケットを記憶するとき、第1ブロック1における各第2ブロックの第2記憶空間にPDを書き込む。
図3Aは、第2記憶空間にPDを書き込む例示である。第1ブロック1に対する読み操作が完了した後、これらのPDを処理しないと、エラーが出てしまう。2回目に第1ブロック1を用いてパケットを記憶するとき、第1ブロック1における第2ブロック0、第2ブロック1、第2ブロック2のみにパケットセグメントおよびPDを書き込み、第1ブロック1における他の第2ブロックにパケットセグメントおよびPDを書き込まないと仮定する。このように、第1ブロック1に対して読み操作を再度行う際、第2ブロック0、第2ブロック1、第2ブロック2からしかパケットセグメントを読み取ることができない。しかし、第2ブロック0~第2ブロック31からPDを読み取ることができる。そのため、これらのPDを用いて読み取られたパケットセグメントをパケットに組み立てるとき、エラーが出てしまう。
【0061】
上記発見について、一例では、第1ブロック1に対する読み操作が完了した後、第1ブロック1における各第2ブロックの第2記憶空間のPDを削除する。しかし、当該方式では、毎回第1ブロック1に対する読み操作が完了した後、第1ブロック1の各第2ブロックの第2記憶空間のPDを削除する必要があり、第2ブロックの繰り返し操作が引き起こされ、ネットワーク設備の処理性能が低減される。
【0062】
別の例では、各第1ブロックに対して反転フラグをセットし、当該反転フラグが第1数値(例えば、0)であってもよく、第2数値(例えば、1)であってもよい。これを基に、毎回第1ブロックに対する読み操作が完了した後で当該第1ブロックを空き第1ブロックとして回収したとき、当該第1ブロックの前回反転フラグが第1数値であれば、当該第1ブロックの現在反転フラグを第2数値として変更する。逆に言えば、当該第1ブロックの前回反転フラグが第2数値であれば、当該第1ブロックの現在反転フラグを第1数値に変更する。
【0063】
これを基に、第1ブロックにおける第2ブロックの第2記憶空間にPDを記憶する度に、前記PDは、当該第1ブロックの現在反転フラグを更に含んでもよい。例えば、
図3Bおよび3Dに示すように、第2ブロックの第2記憶空間におけるPDは、上記情報フィールドLEN、SOP、EOP、BV、VAL、NBA、NBNを含む以外、対応する第1ブロックの現在反転フラグを記録するように、情報フィールドSELを含む。または、
図3Cおよび3Eに示すように、第2ブロックの第2記憶空間におけるPDは、2セットの情報フィールドLEN、SOP、EOP、BV、VAL、NBA、NBNを含む。情報フィールドLEN0、SOP0、EOP0、BV0、VAL0、NBA0、NBN0が有効であるとき、これは、第1ブロックに対応する現在反転フラグが第1数値であることを意味し、情報フィールドLEN1、SOP1、EOP1、BV1、VAL1、NBA1、NBN1が有効であるとき、これは、第1ブロックに対応する現在反転フラグが第2数値であることを意味する。
【0064】
このように、第1ブロックの現在反転フラグが0である場合、
図3Aについて、対応するPD内の情報フィールドSELは、
図3Bに示すように値が0であってもよい。
図3Bに「SEL0」と簡素化で記し、第1ブロックの現在の反転フラグが0であることを示す。または、
図3Cに示すように、対応するPD内の情報フィールドSOP0、EOP0、NBN0、NBA0は、有効である。情報フィールドSOP0、EOP0、NBN0、NBA0における「0」は、第1ブロックの現在の反転フラグが0であることを示す。
【0065】
その後、第1ブロックを空き第1ブロックとして回収したとき、第1ブロックに対応する前回反転フラグが0であるため、当該第1ブロックの現在反転フラグを1に変更する。再度当該第1ブロックを用いてパケットを記憶する際、第2ブロック0、第2ブロック1、第2ブロック2のみにパケットおよびPDを書き込む場合、対応するPD内の情報フィールドSELは、
図3Dに示すように値が1であってもよい。
図3Dに「SEL1」と簡素化で記し、第1ブロックの現在の反転フラグが1であることを示す。または、
図3Eに示すように、対応するPD内の情報フィールドSOP1、EOP1は、有効である。情報フィールドSOP1、EOP1における「1」は、第1ブロックの現在の反転フラグが1であることを示す。
【0066】
図3Dおよび
図3Bを比較すると、第1ブロックに対して読み操作を行う際、第2ブロック0~第2ブロック31からPDを読み取ることができるが、第2ブロック0、第2ブロック1、第2ブロック2に対応するPD内の情報フィールドSELの値のみは、1である。つまり、第2ブロック0、第2ブロック1、第2ブロック2のみは、第1ブロックの現在の反転フラグ1で使用される。そのため、第2ブロック0、第2ブロック1、第2ブロック2の第2記憶空間におけるPDのみを用いて、読み取られたパケットセグメントをパケットに組み立て、エラーが発生することはない。同様な理由で、
図3Cおよび
図3Eを比較すると、第2ブロック0、第2ブロック1、第2ブロック2の第2記憶空間におけるPDのみを用いて、読み取られたパケットセグメントをパケットに組み立てる。
【0067】
上記方法と同様な出願思想に基づき、本発明の実施例は、パケット処理装置を更に提供する。メモリが複数の第1ブロックに区分され、各第1ブロックが複数の第2ブロックに区分され、各第2ブロックが何れも第1記憶空間および第2記憶空間を含む。
図4に示すように、前記装置、下記のモジュールを備える。
【0068】
書込モジュール401は、記憶すべき第1パケットを取得し、前記第1パケットの長さと前記第1記憶空間の長さとに基づいて、前記第1パケットによって占められるべき1つまたは複数の第2ブロックを特定し、前記第1パケットを前記特定された各第2ブロックの第1記憶空間に記憶し、前記特定された各第2ブロックについて、当該第2ブロックに対応するパケット記述子(PD)を生成し、前記PDを当該第2ブロックの第2記憶空間に記憶する。
【0069】
読取モジュール402は、読み取るべき第2パケットの開始アドレスに基づいて、読み取るべき1つまたは複数の第2ブロックを特定し、前記読み取るべき各第2ブロックの第1記憶空間からパケットセグメントを読み取り、前記読み取るべき各第2ブロックの第2記憶空間からPDを読み取る、読み取られたPDを利用して、読み取られたパケットセグメントを前記第2パケットに組み立てる。1つの例示によると、読取モジュール402は、更に、前記第2パケットを送信するように構成される。説明すべきことは、記憶すべき第1パケットと読み取るべき第2パケットとが同一のパケットであってもよく、異なるパケットであってもよい。本発明ではそれについて限定しない。
【0070】
一例では、前記書込モジュール401は、前記第1パケットによって占められるべき第2ブロックを特定する過程において、具体的に、前記第1パケットに対応するキューを特定し、前記キューが対応するテールポインタを有する場合、前記テールポインタで指される第2ブロックから、前記第1パケットによって占められるべき第2ブロックを特定し、前記キューが対応するテールポインタを有さない場合、空き第1ブロックを選択し、選択された空き第1ブロックにおける最初の第2ブロックから、前記第1パケットによって占められるべき第2ブロックを特定する。
【0071】
一例では、前記書込モジュール401は、当該第2ブロックに対応するPDを生成する過程において、具体的に、当該第2ブロックが前記第1パケットによって占められるべき最初の第2ブロックである場合、前記第1パケットの長さを当該第2ブロックに対応するPD内に記録し、且つ、当該第2ブロックが前記第1パケットを記憶する最初の第2ブロックであることを示すように、当該第2ブロックに対応するPD内の第1フラグを有効にセットし、当該第2ブロックが前記第1パケットによって占められるべき最後の第2ブロックである場合、当該第2ブロックが前記第1パケットを記憶する最後の第2ブロックであることを示すように、当該第2ブロックに対応するPD内の第2フラグを有効にセットする。
【0072】
一例では、前記第1パケットによって占められるべき全ての第2ブロックが少なくとも2つの異なる第1ブロックに属するとき、前記書込モジュール401は、当該第2ブロックに対応するPDを生成する過程において、具体的に、当該第2ブロックが現在の第1ブロックの最後の第2ブロックであるが、前記第1パケットによって占められるべき最後の第2ブロックではない場合、前記第1パケットによって占められるべき次の第1ブロックを指すポインタを、当該第2ブロックに対応するPD内に記録し、前記次の第1ブロックにおける、前記第1パケットによって占められるべき第2ブロックの数を当該第2ブロックに対応するPD内に記録する。
【0073】
一例では、前記書込モジュール401は、当該第2ブロックに対応するPDを生成する過程において、具体的に、当該第2ブロックの所属する第1ブロックの現在の反転フラグを取得し、当該第2ブロックに対応するPDに前記第1ブロックの現在の反転フラグを含ませる。第1ブロックを2回連続して使用する場合、それぞれの反転フラグが異なる。
【0074】
前記読取モジュール402は、具体的に、前記読み取るべき第2ブロックの所属する現在の第1ブロックの各第2ブロックの第2記憶空間からPDを読み取り、第1フラグが有効であるPDに対応する第2ブロックを、前記第2パケットを記憶する最初の第2ブロックとして特定し、第2フラグが有効であるPDに対応する第2ブロックを、前記第2パケットを記憶する最後の第2ブロックとして特定し、第2フラグが有効であるPDを前記現在の第1ブロックから読み取っていない場合、前記現在の第1ブロックにおける最後の第2ブロックの第2記憶空間からPDを読み取り、次の第1ブロックを指すポインタを当該PDから取得し、前記次の第1ブロックにおける、前記第2パケットによって占められる第2ブロックの数を取得し、前記ポインタと前記第2ブロックとの数に基づいて、前記次の第1ブロックにおける第2ブロックの第2記憶空間からPDを読み取る。第2フラグが有効であるPDを読み取るまでこれをもって類推し、第2フラグが有効であるPDに対応する第2ブロックを、前記第2パケットを記憶する最後の第2ブロックとして特定し、特定された最初の第2ブロックと特定された最後の第2ブロックの間の各第2ブロックの第1記憶空間からパケットセグメントを読み取り、読み取られたパケットセグメントを前記第2パケットに組み立て、組み立てられた前記第2パケットを送信する。
【0075】
前記読取モジュール402は、更に、特定された最初の第2ブロックと特定された最後の第2ブロックの間の各第2ブロックの第1記憶空間からパケットセグメントを読み取った後、読み取られたパケットセグメントによって占められた第1記憶空間を解放し、ある第1ブロックの各第2ブロックの第1記憶空間が何れも解放されたとき、前記第1ブロックを空き第1ブロックとして回収し、前記第1ブロックが空き第1ブロックとして回収された後、前記第1ブロックの各第2ブロックの第2記憶空間を解放する、または、前記第1ブロックの現在の反転フラグを調整する。
【0076】
上記方法と同様な出願思想に基づき、本発明の実施例は、ネットワーク設備を更に提供する。本発明の実施例に係るネットワーク設備は、ハードウェア実装から言うと、ハードウェアアーキテクチャの模式図が具体的に
図5Aに示される。前記ネットワーク設備は、転送チップ510および記憶手段520を備え、前記記憶手段520は、前記転送チップ510と別個に配置される。例えば、前記記憶手段520は、DDRメモリであってもよく、無論、前記記憶手段520は、他のタイプの記憶手段であってもよい。これについて制限しない。
【0077】
前記記憶手段520のメモリが複数の第1ブロックに区分され、各第1ブロックが複数の第2ブロックに区分され、各第2ブロックが何れも第1記憶空間および第2記憶空間を含む。
【0078】
前記転送チップ510は、記憶すべき第1パケットを取得し、前記第1パケットの長さと前記第1記憶空間の長さとに基づいて、前記第1パケットによって占められるべき第2ブロックを特定し、前記第1パケットを記憶手段520における前記特定された各第2ブロックの第1記憶空間に記憶し、前記特定された各第2ブロックについて、当該第2ブロックに対応するパケット記述子(PD)を生成し、前記PDを当該第2ブロックの第2記憶空間に記憶し、且つ、読み取るべき第2パケットの開始アドレスに基づいて、読み取るべき1つまたは複数の第2ブロックを特定し、記憶手段520における前記読み取るべき各第2ブロックの第1記憶空間からパケットセグメントを読み取り、記憶手段520における前記読み取るべき各第2ブロックの第2記憶空間からPDを読み取り、読み取られたPDを利用して、読み取られたパケットセグメントを第2パケットに組み立て、組み立てられた第2パケットを送信する。
【0079】
転送チップ510は、上記パケット処理方法を実施することができ、具体的に、上記パケット処理方法の各操作を含む。例えば、転送チップ510が上記パケット処理方法の各操作を実行できるように、上記パケット処理方法を実施するためのフローを転送チップ510に書き込む。ここで繰り返し説明しない。
【0080】
転送チップ510は、FPGA(Field-Programmable Gate Array、フィールドプログラマブルゲートアレイ)、CPLD(Complex Programmable Logic Device、複雑なプログラマブルロジックデバイス)等を含むが、それらに限定されるものではない。この転送チップ510のタイプについて制限せず、上記機能を実現すればよい。
【0081】
一例では、記憶手段520が転送チップ510のチップ外メモリ、例えばDDRであるため、パケットおよびPDを同一のメモリに記憶することにより、転送チップ510が記憶手段520の同一のメモリからパケットおよびPDを読み取ることができ、読取効率が相対的に高くなる。
【0082】
別の例では、
図5Bに示すように、上記転送チップ510は、転送エンジン511およびTM(Traffic Manage、トラフィック管理)モジュール512を更に備えてもよい。転送エンジン511は、パケットを受信した後、パケットに対してフロー分類511-1およびトラフィック監視(例えば、CAR(Committed Access Rate、専用アクセスレート)レート制限操作等)511-2を行い、パケットをTMモジュール512へ出力する。
【0083】
TMモジュール512は、パケットを受信した後、パケットに対して輻輳回避512-1、輻輳管理512-2、トラフィック整形512-3等の操作を行ってもよい。輻輳回避512-1は、WRED(Weighted Random Early Detection、重み付けランダム早期検出)、テール廃棄等を含んでもよく、輻輳管理512-2は、PQ(Priority Queue、優先度キュー)スケジューリング、WFQ(Weighted Fair Queuing、重み付け均等化キューイング)スケジューリング等を含んでもよい。また、TMモジュール512は、パケットを受信したとき、パケットの所属するキューに基づいて、パケットを記憶手段520にキャッシュしてもよい。TMモジュール512は、パケットを送信する必要があるとき、パケットの所属するキューに基づいて、パケットを記憶手段520から読み出して送信する。
【0084】
TMモジュール512がパケットを記憶手段520にキャッシュし、TMモジュール512がパケットを記憶手段520から読み出して送信する過程、つまり、上記パケット処理方法は、ここで繰り返し説明しない。
【0085】
上述したのは、本発明の実施例に過ぎず、本発明を制限するためのものではない。当業者にとって、本発明は、各種の変更および変化があり得る。本発明の精神及び原則内でなされた如何なる変更、均等物による置換、改良等も、本発明の保護範囲内に含まれる。