(19)【発行国】日本国特許庁(JP)
(12)【公報種別】特許公報(B2)
(11)【特許番号】
(24)【登録日】2022-01-17
(45)【発行日】2022-01-26
(54)【発明の名称】フォワーディングエントリアクセス
(51)【国際特許分類】
H04L 45/7453 20220101AFI20220119BHJP
G06F 12/0868 20160101ALI20220119BHJP
G06F 12/0891 20160101ALI20220119BHJP
【FI】
H04L45/7453
G06F12/0868
G06F12/0891
(21)【出願番号】P 2019500254
(86)(22)【出願日】2017-07-04
(86)【国際出願番号】 CN2017091599
(87)【国際公開番号】W WO2018006786
(87)【国際公開日】2018-01-11
【審査請求日】2019-02-13
【審判番号】
【審判請求日】2020-09-25
(31)【優先権主張番号】201610528199.4
(32)【優先日】2016-07-04
(33)【優先権主張国・地域又は機関】CN
(73)【特許権者】
【識別番号】518056748
【氏名又は名称】新華三技術有限公司
【氏名又は名称原語表記】NEW H3C TECHNOLOGIES CO., LTD.
(74)【代理人】
【識別番号】110002468
【氏名又は名称】特許業務法人後藤特許事務所
(72)【発明者】
【氏名】ソン チエンミン
(72)【発明者】
【氏名】チャオ ユンフォン
【合議体】
【審判長】角田 慎治
【審判官】林 毅
【審判官】小田 浩
(56)【参考文献】
【文献】特開2004-23450(JP,A)
【文献】特開2007-221514(JP,A)
【文献】国際公開第2015/133448(WO,A1)
(58)【調査した分野】(Int.Cl.,DB名)
H04L12/743
G06F12/0868
G06F12/0891
(57)【特許請求の範囲】
【請求項1】
フォワーディングエントリアクセス方法であって、
キャッシュコンポーネントは、フォワーディングコンポーネントから送信された、ストレージコンポーネントにおける読み取られるべき第1フォワーディングエントリの記憶アドレスをキャリーするエントリ読み取りコマンドを受信するステップと、
前記キャッシュコンポーネントは、前記第1フォワーディングエントリの記憶アドレスに基づいて、ローカルで有効状態にあり且つ含む記憶アドレスが前記第1フォワーディングエントリの記憶アドレスと同一である第1Hashバケットを検索するステップと、
前記キャッシュコンポーネントは、前記第1Hashバケットを見つけた時、前記第1Hashバケットに対応するキャッシュスペースにキャッシュされた前記第1フォワーディングエントリを前記フォワーディングコンポーネントに送信するステップと、
前記キャッシュコンポーネントは、前記第1Hashバケットに含まれるタイムスタンプを、前記第1Hashバケットに対応するキャッシュスペースにキャッシュされた前記第1フォワーディングエントリを前記フォワーディングコンポーネントに送信する時の時間にアップデートするステップと、
前記キャッシュコンポーネントは、前記第1Hashバケットを見つけられなかった時、前記ストレージコンポーネントから前記第1フォワーディングエントリを読み取り、読み取った前記第1フォワーディングエントリを前記フォワーディングコンポーネントに送信するステップと、
ストレージコンポーネントから前記第1フォワーディングエントリを読み取った後、
前記キャッシュコンポーネントは、前記第1フォワーディングエントリの記憶アドレスに基づいて、ローカルで無効状態にある第2Hashバケットを検索するステップと、
前記キャッシュコンポーネントは、前記第2Hashバケットを見つけた時、前記第1フォワーディングエントリを前記第2Hashバケットに対応するキャッシュスペースに書き込み、前記第2Hashバケットの状態を有効にアップデートし、前記第2Hashバケットに含まれる記憶アドレスを前記第1フォワーディングエントリの記憶アドレスにアップデートするステップと
、
前記キャッシュコンポーネントは、前記第2Hashバケットに含まれるタイムスタンプを、前記第1フォワーディングエントリが前記第2Hashバケットに対応するキャッシュスペースに書き込まれる時の時間にアップデートするステップと、を含み、
前記第2Hashバケットが見つからなかった時、前記キャッシュコンポーネントは、前記第1フォワーディングエントリの記憶アドレスに基づいて、ローカルで含むタイムスタンプと現在時間の差分値が予め設定されたタイムアウト時間より大きい第3Hashバケットを検索するステップと、
前記第3Hashバケットが見つかった時、前記キャッシュコンポーネントは、前記第1フォワーディングエントリを前記第3Hashバケットに対応するキャッシュスペースに書き込み、前記第3Hashバケットに含まれるタイムスタンプを、前記第1フォワーディングエントリを前記第3Hashバケットに対応するキャッシュスペースに書き込む時間にアップデートし、前記第3Hashバケットに含まれる記憶アドレスを前記第1フォワーディングエントリの記憶アドレスにアップデートするステップと、
含むことを特徴とする方法。
【請求項2】
前記方法は、
前記キャッシュコンポーネントは、各々のHashバケットに対して、当該Hashバケットに含まれるタイムスタンプと現在時間の差分値が予め設定されたタイムアウト時間より大きいか否かを判断するステップと、
前記差分値が前記予め設定されたタイムアウト時間より大きい時、前記キャッシュコンポーネントは、当該Hashバケットの状態を無効にアップデートするステップと、
を更に含むことを特徴とする請求項
1に記載の方法。
【請求項3】
前記方法は、
前記キャッシュコンポーネントは、前記ストレージコンポーネントに送信される、前記ストレージコンポーネントに書き込まれるべき第2フォワーディングエントリの記憶アドレスをキャリーするエントリ書き込みコマンドを傍受するステップと、
前記キャッシュコンポーネントは、前記第2フォワーディングエントリの記憶アドレスに基づいて、ローカルで有効状態にあり且つ含む記憶アドレスが前記第2フォワーディングエントリの記憶アドレスと同一である第4Hashバケットを検索するステップと、
前記キャッシュコンポーネントは、前記第4Hashバケットを見つけた時、前記第4Hashバケットの状態を無効にアップデートするステップと、
を更に含むことを特徴とする請求項1に記載の方法。
【請求項4】
前記ストレージコンポーネントに送信されるエントリ書き込みコマンドを傍受するステップは、
前記キャッシュコンポーネントは、前記ストレージコンポーネントに送信される、キャリーされる第2フォワーディングエントリの記憶アドレスは記憶アドレスレンジ内にあるエントリ書き込みコマンドを傍受するステップを含むことを特徴とする請求項
3に記載の方法。
【請求項5】
ネットワーク機器であって、
フォワーディングコンポーネントと、キャッシュコンポーネントと、ストレージコンポーネントとを含み、
前記フォワーディングコンポーネントは、取得したフォワーディングエントリに基づいてパケットフォワーディングを行うように、フォワーディングエントリを取得するエントリ読み取りコマンドを送出するために用いられ、
前記キャッシュコンポーネントは、
前記フォワーディングコンポーネントから送信された、ストレージコンポーネントにおける読み取られるべき第1フォワーディングエントリの記憶アドレスをキャリーするエントリ読み取りコマンドを受信し、
前記第1フォワーディングエントリの記憶アドレスに基づいて、前記キャッシュコンポーネントで有効状態にあり且つ含む記憶アドレスが前記第1フォワーディングエントリの記憶アドレスと同一である第1Hashバケットを検索し、
前記第1Hashバケットが見つかった時、前記第1Hashバケットに対応するキャッシュスペースにキャッシュされた前記第1フォワーディングエントリを前記フォワーディングコンポーネントに送信し、
前記キャッシュコンポーネントは、前記第1Hashバケットに含まれるタイムスタンプを、前記第1Hashバケットに対応するキャッシュスペースにキャッシュされた前記第1フォワーディングエントリを前記フォワーディングコンポーネントに送信する時の時間にアップデートし、
前記第1Hashバケットが見つからなかった時、前記ストレージコンポーネントから前記第1フォワーディングエントリを読み取り、読み取った前記第1フォワーディングエントリを前記フォワーディングコンポーネントに送信するために用いられ、
前記キャッシュコンポーネントは、さらに、前記ストレージコンポーネントから前記第1フォワーディングエントリを読み取った後、前記第1フォワーディングエントリの記憶アドレスに基づいて、無効状態にある第2Hashバケットを検索し、
前記キャッシュコンポーネントは、前記第2Hashバケットを見つけた時、前記第1フォワーディングエントリを前記第2Hashバケットに対応するキャッシュスペースに書き込み、前記第2Hashバケットの状態を有効にアップデートし、前記第2Hashバケットに含まれる記憶アドレスを前記第1フォワーディングエントリの記憶アドレスにアップデートし
、
さらに、前記第2Hashバケットに含まれるタイムスタンプを、読み取りユニットが読み取った前記第1フォワーディングエントリを前記第2Hashバケットに対応するキャッシュスペースに書き込む時の時間にアップデートし、
前記キャッシュコンポーネントは、前記第2Hashバケットを見つけられなかった時、前記第1フォワーディングエントリの記憶アドレスに基づいて、含むタイムスタンプと現在時間の差分値が予め設定されたタイムアウト時間より大きい第3Hashバケットを検索し、
前記キャッシュコンポーネントは、前記第3Hashバケットを見つけた時、前記第1フォワーディングエントリを前記第3Hashバケットに対応するキャッシュスペースに書き込み、前記第3Hashバケットに含まれるタイムスタンプを、前記第1フォワーディングエントリを前記第3Hashバケットに対応するキャッシュスペースに書き込む時間にアップデートし、前記第3Hashバケットに含まれる記憶アドレスを前記第1フォワーディングエントリの記憶アドレスにアップデートすることを特徴とする機器。
【請求項6】
前記キャッシュコンポーネントは、各々のHashバケットに対して、当該Hashバケットに含まれるタイムスタンプと現在時間の差分値が予め設定されたタイムアウト時間より大きいか否かを判断し、
前記差分値が前記予め設定されたタイムアウト時間より大きい時、前記キャッシュコンポーネントは、当該Hashバケットの状態を無効にアップデートすることを特徴とする請求項
5に記載の機器。
【請求項7】
前記キャッシュコンポーネントは、さらに、前記ストレージコンポーネントに送信される、書き込まれるべき第2フォワーディングエントリの記憶アドレスを有するエントリ書き込みコマンドを傍受し、
前記キャッシュコンポーネントは、さらに、前記エントリ書き込みコマンドを傍受した後、前記第2フォワーディングエントリの記憶アドレスに基づいて、有効状態にあり且つ含む記憶アドレスが前記第2フォワーディングエントリの記憶アドレスと同一である第4Hashバケットを検索し、
前記キャッシュコンポーネントは、前記第4Hashバケットを見つけた時、前記第4Hashバケットの状態を無効にアップデートすることを特徴とする請求項
5に記載の機器。
【請求項8】
前記キャッシュコンポーネントは、さらに、前記ストレージコンポーネントに送信される、有する書き込まれるべき第2フォワーディングエントリの記憶アドレスは記憶アドレスレンジ内にあることを含む条件を満たすエントリ書き込みコマンドを傍受することを特徴とする請求項
7に記載の機器。
【請求項9】
ネットワーク機器であって、
中央処理装置(CPU)と、
フィールドプログラマブルゲートアレイ(FPGA)と、
ストレージコンポーネントと、
を含み、
前記CPUは、FPGA枠組文書を、前記FPGAにより実行されるように前記FPGAにロードして、前記FPGAがフォワーディングコンポーネントと、キャッシュコンポーネントと、記憶コントローラとを含むようにし、
前記フォワーディングコンポーネントは、取得したフォワーディングエントリに基づいてパケットフォワーディングを行うように、フォワーディングエントリを取得するエントリ読み取りコマンドを送出するために用いられ、
前記キャッシュコンポーネントは、
前記フォワーディングコンポーネントから送信された、ストレージコンポーネントにおける読み取られるべき第1フォワーディングエントリの記憶アドレスをキャリーするエントリ読み取りコマンドを受信し、
前記第1フォワーディングエントリの記憶アドレスに基づいて、前記キャッシュコンポーネントで有効状態にあり且つ含む記憶アドレスが前記第1フォワーディングエントリの記憶アドレスと同一である第1Hashバケットを検索し、
前記第1Hashバケットが見つかった時、前記第1Hashバケットに対応するキャッシュスペースにキャッシュされた前記第1フォワーディングエントリを前記フォワーディングコンポーネントに送信し、
前記キャッシュコンポーネントは、前記第1Hashバケットに含まれるタイムスタンプを、前記第1Hashバケットに対応するキャッシュスペースにキャッシュされた前記第1フォワーディングエントリを前記フォワーディングコンポーネントに送信する時の時間にアップデートし、
前記第1Hashバケットが見つからなかった時、前記ストレージコンポーネントから前記第1フォワーディングエントリを読み取り、読み取った前記第1フォワーディングエントリを前記フォワーディングコンポーネントに送信するために用いられ、
前記記憶コントローラは、前記ストレージコンポーネントの読み取り/書き込みに対して制御を行い、
前記キャッシュコンポーネントは、さらに、前記ストレージコンポーネントから前記第1フォワーディングエントリを読み取った後、前記第1フォワーディングエントリの記憶アドレスに基づいて、無効状態にある第2Hashバケットを検索し、
前記キャッシュコンポーネントは、前記第2Hashバケットを見つけた時、前記第1フォワーディングエントリを前記第2Hashバケットに対応するキャッシュスペースに書き込み、前記第2Hashバケットの状態を有効にアップデートし、前記第2Hashバケットに含まれる記憶アドレスを前記第1フォワーディングエントリの記憶アドレスにアップデートし
、
さらに、前記第2Hashバケットに含まれるタイムスタンプを、読み取りユニットが読み取った前記第1フォワーディングエントリを前記第2Hashバケットに対応するキャッシュスペースに書き込む時の時間にアップデートし、
前記キャッシュコンポーネントは、前記第2Hashバケットを見つけられなかった時、前記第1フォワーディングエントリの記憶アドレスに基づいて、含むタイムスタンプと現在時間の差分値が予め設定されたタイムアウト時間より大きい第3Hashバケットを検索し、
前記キャッシュコンポーネントは、前記第3Hashバケットを見つけた時、前記第1フォワーディングエントリを前記第3Hashバケットに対応するキャッシュスペースに書き込み、前記第3Hashバケットに含まれるタイムスタンプを、前記第1フォワーディングエントリを前記第3Hashバケットに対応するキャッシュスペースに書き込む時間にアップデートし、前記第3Hashバケットに含まれる記憶アドレスを前記第1フォワーディングエントリの記憶アドレスにアップデートすることを特徴とするネットワーク機器。
【発明の詳細な説明】
【関連する出願の参照】
【0001】
本特許出願は、2016年7月4日に提出された出願番号が201610528199.4であり、発明の名称が「フォワーディングエントリアクセス方法及び装置」である中国特許出願の優先権を主張するものであり、当該出願の全文は参照することにより本文に組み込まれる。
【背景技術】
【0002】
スイッチ、ルータ等のようなネットワーク機器は、パケットに対してフォワーディング処理を行う時、フォワーディングテーブルを検索すべきである。これらのフォワーディングテーブルの大部分は内部メモリ、例えば、DDR SDRAM(Double Data Rate Synchronous Dynamic Random Access Memory、ダブルデータレート同期ダイナミック型ランダムアクセスメモリ)に格納される。ネットワーク機器は、パケットを受信した後、DDR SDRAMで各フォワーディングテーブルを検索してパケットをフォワーディングすべきである。
【0003】
上記の方法において、直接DDR SDRAMからフォワーディングテーブルを検索するが、DDR SDRAMの帯域幅が制限されているため、ネットワーク機器の高性能フォワーディングの要求を満たすことができない。
【図面の簡単な説明】
【0004】
【
図1】本開示の例示的一実施例が示すネットワーク機器の構造模式図である。
【0005】
【
図2】本開示の例示的一実施例が示すキャッシュコンポーネントがフォワーディングコンポーネントから送信されたエントリ読み取りコマンドを処理するフローチャートである。
【0006】
【
図3】本開示の例示的一実施例が示すHashバケット行及びentry行の構造模式図である。
【0007】
【
図4】本開示の例示的一実施例が示すHashバケットの構造模式図である。
【0008】
【
図5】本開示の例示的一実施例が示すキャッシュコンポーネントがストレージコンポーネントから読み取った第1フォワーディングエントリをキャッシュするフローチャートである。
【0009】
【
図6】本開示の例示的一実施例が示すネットワーク機器の構造模式図である。
【0010】
【
図7】本開示の例示的一実施例が示すネットワーク機器の別の構造模式図である。
【0011】
【
図8】本開示の例示的一実施例が示すフォワーディングエントリアクセス制御ロジックが含む機能モジュールの模式図である。
【0012】
【
図9】本開示の別の例示的一実施例が示すフォワーディングエントリアクセス制御ロジックが含む機能モジュールの模式図である。
【0013】
【
図10】本開示のまた別の例示的一実施例が示すフォワーディングエントリアクセス制御ロジックが含む機能モジュールの模式図である。
【発明を実施するための形態】
【0014】
ここで、図面と結び付けて例示的実施例を詳細に説明する。以下の記述に図面が言及される時、特に示されていない限り、異なる図面における同じ数字は、同一または類似する要素を示す。以下の例示的実施例において記述される実施形態は、本開示と一致するすべての実施形態を表すものではない。逆に、それらは、単に添付される特許請求の範囲に詳述される、本開示の一部の側面と一致する装置及び方法の例である。
【0015】
本開示の以下の実施例において、フォワーディングエントリアクセス方法及び当該方法を応用可能なネットワーク機器を提供する。
【0016】
図1に示すように、スイッチ、ルータ等のようなパケットをフォワーディングするためのネットワーク機器は、CPU(Central Processing Unit、中央処理装置)101と、フォワーディングコンポーネント102と、各々のフォワーディングテーブルを記憶するためのストレージコンポーネント103(例えば、DDR SDRAM)と、ストレージコンポーネント103の読み取り/書き込みを制御するための記憶コントローラ104とを含む。一般的なフォワーディングエントリアクセス方法は、フォワーディングテーブルをストレージコンポーネント103に格納し、ネットワーク機器がパケットフォワーディングを行おうとする度に、フォワーディングコンポーネント102を介してストレージコンポーネント103でフォワーディングテーブルにおけるフォワーディングエントリを検索すべきである。本開示の実施例によれば、フォワーディングコンポーネント102とストレージコンポーネント103の間に、フォワーディングコンポーネント102が見つけたフォワーディングエントリをキャッシュするためのキャッシュコンポーネント105が追加される。フォワーディングコンポーネント102とキャッシュコンポーネント105とは、別個のハードウェアであっても良いし、FPGA(Field Programmable Gate Array、フィールドプログラマブルゲートアレイ)技術により実現されても良いし、これに制限がない。本開示の例において、フォワーディングコンポーネント102及びキャッシュコンポーネント105は、FPGAチップ上のプログラマブルモジュールとして実現される。FPGAチップに、記憶コントローラ104が更に設置されても良い。
【0017】
CPU101がFPGA枠組文書をFPGAチップにロードし、FPGAチップにより実行されて、FPGAチップがフォワーディングコンポーネント102と、キャッシュコンポーネント105と、記憶コントローラ104とを含むようにする。CPU101は、システムバスを介してフォワーディングコンポーネント102、ストレージコンポーネント103、記憶コントローラ104及びキャッシュコンポーネント105等の各々のコンポーネントに接続されて各々のコンポーネントに対して集中的制御を行う。
【0018】
ストレージコンポーネント103に記憶されるフォワーディングテーブルは、主に次の2つの特徴を備える。
【0019】
特徴1として、フォワーディングテーブルのアップデート率がとても低く、特に、回線速度を試験する時は、通常フォワーディングテーブルをアップデートしない。
【0020】
特徴2として、フォワーディングテーブルにおいてフォワーディングエントリのアップデートが発生した時、フォワーディングコンポーネントは、同期的に最新フォワーディングエントリを読み取る必要がなく、即ち、フォワーディングコンポーネントは、少し遅れて最新フォワーディングエントリを読み取ったとしても、正確にパケットをフォワーディングする。
【0021】
上記の2つの特徴に基づいて、本開示の以下の実施例において、フォワーディングコンポーネント102が送出したエントリ読み取りコマンドは、キャッシュコンポーネント105を介して処理される。CPU101、フォワーディングコンポーネント102又はフォワーディングエントリをアップデートすべき、他のモジュールが送出したエントリ書き込みコマンドは、キャッシュコンポーネント105を介して処理される必要がない。キャッシュコンポーネント105は、ストレージコンポーネント103に送信されるエントリ書き込みコマンドを傍受しさえすれば、どのフォワーディングエントリがアップデートされるべきであるかを知り、キャッシュされた対応するフォワーディングエントリの状態を無効にアップデートする。フォワーディングコンポーネント102からアップデート後のフォワーディングエントリを読み取るエントリ読み取りコマンドが送信された時、キャッシュコンポーネント105は、ストレージコンポーネント103からアップデート後のフォワーディングエントリを取得してキャッシュする。
【0022】
上記のフォワーディングテーブルは、例えば、ルーティングテーブル、MACアドレステーブル、ARPテーブル等であって良いし、本開示の実施例は、これに対して限定しない。
【0023】
これにより、
図2が示すように、本開示の実施例に係るキャッシュコンポーネント105により実行されるフォワーディングエントリアクセス方法は、下記のステップを含む。
【0024】
ステップS101で、キャッシュコンポーネントは、フォワーディングコンポーネントから送信された、ストレージコンポーネントにおける読み取られるべき第1フォワーディングエントリの記憶アドレスをキャリーするエントリ読み取りコマンドを受信する。
【0025】
例えば、第1フォワーディングエントリの記憶アドレスは、第1フォワーディングエントリのストレージコンポーネントに記憶された開始アドレスである。
【0026】
ステップS102で、キャッシュコンポーネントは、第1フォワーディングエントリの記憶アドレスに基づいて、ローカルで有効状態にあり且つ含む記憶アドレスが第1フォワーディングエントリの記憶アドレスと同一である第1Hashバケットを検索する。
【0027】
キャッシュコンポーネント105は、Hash(ハッシュ)テーブルを記憶する。当該Hashテーブルは、複数のHashバケット行(Hash bucket line)を含む。各々のHashバケット行は、1つ又は複数のHashバケット(Hash bucket)を含み、各々のHashバケットは、それに対応するキャッシュスペースを有する。一般的に、Hashバケットはキャッシュスペースに1対1に対応する。或いは、Hashバケットに指針を設置して、指針により複数のHashバケットを一セクションのキャッシュスペースに指しても良い。
【0028】
本開示の実施例では、Hashバケットがキャッシュスペースに1対1に対応する場合を例として説明し、Hashバケットに対応するキャッシュスペースをエントリ(entry)と称する。従って、Hashバケット行は、エントリ行(entry line)に1対1に対応し、当該Hashバケット行におけるHashバケットは、当該entry行におけるentryに1対1に対応する。entryは、フォワーディングエントリの内容を保存するために用いられる。Hashバケットは、当該フォワーディングエントリが有効であるか否かを示すための状態タグと、ストレージコンポーネントに記憶される当該フォワーディングエントリの記憶アドレスと、タイムスタンプとを含む。Hashバケット行は、ユニークに当該Hashバケット行を識別するための識別子を有する。
【0029】
図3を例として説明すると、キャッシュコンポーネント105のハッシュテーブルに、n+4個のHashバケット行bucket line0~bucket linen+3及びn+4個のentry行entry line0~entry linen+3があり、その中で、bucket line0はentry line0に対応し、bucket line1はentry line1に対応し、以下同様に類推する。各々のHashバケット行に、2個のHashバケット、即ち、bucket0及びbucket1が格納され、各々のentry行にも、2個のentry、即ち、entry0及びentry1が格納された。その中で、bucket line0におけるbucket0はentry line0におけるentry0に対応し、bucket line0におけるbucket1はentry line0におけるentry1に対応し、以下同様に類推する。各々のHashバケットの大きさは40bit(ビット)に設定される。各々のentryの大きさは32バイトに設定される。
【0030】
図4に示すように、Hashバケットに以下のフィールドが含まれる。即ち、valid、time stamp、及びADDR。
【0031】
Valid:状態タグであって、対応するentryに格納されたフォワーディングエントリが有効であるか否かを示すために用いられる。例えば、Validが0に設定された時、対応するentryにキャッシュされたフォワーディングエントリが無効であることを示すか、或いは、対応するentry内の内容が空であり、即ち、当該entryにフォワーディングエントリがキャッシュされていないことを示す。初期化時に、Validはデフォルトで0に設定される。Validが1に設定された時、対応するentryにキャッシュされたフォワーディングエントリが有効であることを示し、Validはbit39の1個のビットを占める。
【0032】
Time stamp:タイムスタンプであって、当該Hashバケットにヒットする度に、当該タイムスタンプは現在時間にアップデートされ、Time stampは、bit38~bit30の9個のビットを占める。
【0033】
Addr:ストレージコンポーネントにおける対応するentryに格納されたフォワーディングエントリの記憶アドレスであって、Addrは、bit29~bit0の30個のビットを占める。
【0034】
このように、ステップS102で、キャッシュコンポーネントは、先ず、当該エントリ読み取りコマンドにキャリーされる第1フォワーディングエントリの記憶アドレスに対してHash演算を行って、算出して得たHash値をインデックスとして対応するHashバケット行を検索する。記述の便宜上、第1Hashバケット行と称する。そして、キャッシュコンポーネント105は、第1Hashバケット行で第1Hashバケットを検索する。キャッシュコンポーネント105は、第1Hashバケットが見つかった場合、第1フォワーディングエントリが第1Hashバケットに対応する第1エントリにキャッシュされたことを確定する。キャッシュコンポーネント105は、第1Hashバケットが見つからなかった場合、キャッシュコンポーネント105に第1フォワーディングエントリがキャッシュされていないことを確定する。
【0035】
上記のHash演算は、CRC(Cyclic Redundancy Check、巡回冗長検査)又はXOR(exclusive OR、排他的論理和)等の演算であって良い。
【0036】
ステップS103で、キャッシュコンポーネントは、第1Hashバケットが見つかったか否かを判断する。そうである場合、ステップS104を実行し、そうでない場合、ステップS105を実行する。
【0037】
ステップS104で、キャッシュコンポーネントは、第1Hashバケットに対応するキャッシュスペースにキャッシュされた第1フォワーディングエントリをフォワーディングコンポーネントに送信する。
【0038】
具体的には、キャッシュコンポーネント105は、第1Hashバケットに対応する第1エントリにキャッシュされた第1フォワーディングエントリをフォワーディングコンポーネントに送信する。また、キャッシュコンポーネント105は、第1Hashバケットに含まれるタイムスタンプを現在時間にアップデートすべきである。
【0039】
ステップS105で、キャッシュコンポーネントは、ストレージコンポーネントから第1フォワーディングエントリを読み取った後、第1フォワーディングエントリをフォワーディングコンポーネントに送信する。
【0040】
例えば、ステップS105で、キャッシュコンポーネント105は、ストレージコンポーネント103に第1フォワーディングエントリを読み取るべきであることを示すためのエントリ読み取りコマンドを送信する。記憶コントローラ104は、当該エントリ読み取りコマンドを受信した後、ストレージコンポーネント103から第1フォワーディングエントリを読み取ってキャッシュコンポーネント105に送信する。キャッシュコンポーネント105は、第1フォワーディングエントリを受信した後、第1フォワーディングエントリをフォワーディングコンポーネント102にフォワーディングする。
【0041】
本開示の例では、一つのフォワーディングコンポーネントのみを例示したが、これに制限性がなく、キャッシュコンポーネント105が複数のフォワーディングコンポーネントに対応する場合が存在しても良い。この場合、キャッシュコンポーネント105は、複数のフォワーディングコンポーネントから送信されたエントリ読み取りコマンドを受信することになる。このため、キャッシュコンポーネント105は、各々のフォワーディングコンポーネントから送信されたエントリ読み取りコマンドを受信した時、当該フォワーディングコンポーネントとエントリ読み取りコマンドの対応関係を記録し、即ち、エントリ読み取りコマンドがどのフォワーディングコンポーネントから送信されたものであるかを記録する。ステップS105で、記憶コントローラ104は、ストレージコンポーネント103から第1フォワーディングエントリを読み取った後、第1フォワーディングエントリをキャッシュコンポーネント105に送信する。キャッシュコンポーネント105は、記録された対応関係に基づいて、第1フォワーディングエントリを対応するフォワーディングコンポーネントに送信する。
【0042】
ストレージコンポーネント103から第1フォワーディングエントリを読み取った後、キャッシュコンポーネント105は、さらに、当該第1フォワーディングエントリをキャッシュする。
図5に示すように、下記のステップが含まれる。
【0043】
ステップS201で、キャッシュコンポーネント105は、第1フォワーディングエントリの記憶アドレスに基づいて、無効状態にある第2Hashバケットを検索する。
【0044】
キャッシュコンポーネント105は、第1フォワーディングエントリの記憶アドレスに対してHash演算を行い、算出して得たHash値をインデックスとして対応するHashバケット行、即ち、第1Hashバケット行を検索し、第1Hashバケット行から第2Hashバケットを検索する。
【0045】
ステップS202で、キャッシュコンポーネント105は、第2Hashバケットが見つかったか否かを判断する。そうである場合、ステップS203を実行する。そうでない場合、ステップS204を実行する。
【0046】
ステップS203で、キャッシュコンポーネント105は、第1フォワーディングエントリを第2Hashバケットに対応するキャッシュスペースに書き込み、第2Hashバケットの状態を有効にアップデートし、第2Hashバケットに含まれる記憶アドレスを第1フォワーディングエントリの記憶アドレスにアップデートし、第2Hashバケットに含まれるタイムスタンプを現在時間にアップデートする。
【0047】
ステップS203で、キャッシュコンポーネント105は、第1フォワーディングエントリを第2Hashバケットに対応する第2エントリに書き込み、第2Hashバケットに含まれる状態タグを有効にアップデートする。
【0048】
ステップS204で、キャッシュコンポーネント105は、第1フォワーディングエントリの記憶アドレスに基づいて、含むタイムスタンプと現在時間の差分値が予め設定されたタイムアウト時間より大きい第3Hashバケットを検索する。
【0049】
ステップS204で、キャッシュコンポーネント105は、第1Hashバケット行で第3Hashバケットを検索する。
【0050】
ステップS205で、キャッシュコンポーネント105は、第3Hashバケットが見つかったか否かを判断する。そうである場合、ステップS206を実行する。そうでない場合、本フローを退出する。
【0051】
ステップS206で、キャッシュコンポーネント105は、第1フォワーディングエントリを第3Hashバケットに対応するキャッシュスペースに書き込み、第3Hashバケットに含まれるタイムスタンプを現在時間にアップデートし、第3Hashバケットに含まれる記憶アドレスを第1フォワーディングエントリの記憶アドレスにアップデートする。
【0052】
ステップS206で、キャッシュコンポーネント105は、第1フォワーディングエントリを第3Hashバケットに対応する第3エントリに書き込む。
【0053】
明らかに、第1Hashバケット行に第2Hashバケットが存在せず、第3Hashバケットも存在しない場合、キャッシュコンポーネント105は、第1フォワーディングエントリをキャッシュしない。
【0054】
図5に示すようなフローにおいて、キャッシュコンポーネント105は、ストレージコンポーネント103からフォワーディングエントリを読み取った後、エージングしたフォワーディングエントリが占用するキャッシュスペースを、読み取られた新しいフォワーディングエントリに新たに提供して使用し、キャッシュスペースの利用率を向上させる。
【0055】
また、キャッシュコンポーネント105は、周期的にHashテーブルをスキャンして、エージングしたフォワーディングエントリの状態を無効にアップデートして、後続的にストレージコンポーネントから読み取った新しいフォワーディングエントリをキャッシュするようにする。この時、周期的に以下のステップを実行する。即ち、各々のHashバケットに対して、当該Hashバケットに含まれるタイムスタンプと現在時間の差分値が予め設定されたタイムアウト時間より大きいか否かを判断する。そうである場合、当該Hashバケットを無効状態にアップデートする。
【0056】
説明すべきことは、周期的にHashテーブルをスキャンする方式により、フォワーディングエントリ検索をトリガーする前に各々のHashバケットの状態タグをアップデートする。従って、フォワーディングエントリ検索を行う時、状態タグ及び記憶アドレスのみに基づいて当該Hashバケット及び当該Hashバケットに対応するエントリが新しいフォワーディングエントリによりカバーできるか否かを確定できる。従って、キャッシュコンポーネントの演算ストレスを低減する。Hashバケットが有効であることを確定した後にタイムスタンプ判断を行う順次実行方式は、毎回の検索に基づいて判断し、周期的スキャニングの演算ストレスを低減する。どの方式によりタイムスタンプを処理するかを考慮する時、キャッシュコンポーネントにおけるHashテーブルの大きさ及びキャッシュコンポーネントにおけるアップデート状況に基づいて判断する。Hashテーブルの規格が比較的に大きく且つキャッシュコンポーネントにおけるアップデートが比較的に少なく、周期的にスキャンするストレスが比較的に大きい場合、順次実行方式を用いる。Hashテーブルの規格が比較的に小さく且つキャッシュコンポーネントにおけるアップデートが比較的に多く、順次実行方式において判断される演算ストレスが相対的に大きい場合、周期的スキャンの方式を用いる。
【0057】
また、キャッシュコンポーネント105は、さらに、ストレージコンポーネント103に送信される、ストレージコンポーネントに書き込まれるべき第2フォワーディングエントリの記憶アドレスをキャリーするエントリ書き込みコマンドを傍受する。例えば、ストレージコンポーネント103に送信されるすべてのエントリ書き込みコマンドを受信するための記憶コントローラ104の書き込みインターフェースを傍受する。上記のエントリ書き込みコマンドは、CPU101、フォワーディングコンポーネント102、又はフォワーディングエントリがアップデートされるべき他のモジュールが送出したものであって良い。キャッシュコンポーネント105の傍受作業量を節約し、傍受効率を向上させるために、キャッシュコンポーネント105は、ストレージコンポーネント103に送信される、以下の条件を満たすエントリ書き込みコマンドのみを傍受する。この条件は、エントリ書き込みコマンドにキャリーされる、ストレージコンポーネントに書き込まれるべき第2フォワーディングエントリの記憶アドレスは対応する記憶アドレスレンジ内にあることを含む。
【0058】
例えば、ストレージコンポーネント103の総記憶スペースの大きさは、4GBであり、その中で、1GB~2.5GB及び3GB~3.5GB、この2つの記憶アドレスレンジは、各々のフォワーディングテーブルを記憶するために用いられる。このため、キャッシュコンポーネント105は、キャリーされる記憶アドレスがこの2つの記憶アドレスレンジ内にあるエントリ書き込みコマンドのみを傍受すれば良い。或いは、フォワーディングコンポーネント102とストレージコンポーネント103の間に複数のキャッシュコンポーネントが存在し、各々のキャッシュコンポーネントに一つの記憶アドレスレンジを割り当てる。このように、各々のキャッシュコンポーネントは、キャリーされる記憶アドレスが相応する記憶アドレスレンジ内にあるエントリ書き込みコマンドを傍受しさえすれば良い。
【0059】
キャッシュコンポーネント105は、何れかのエントリ書き込みコマンドを傍受した後、当該エントリ書き込みコマンドにキャリーされる第2フォワーディングエントリの記憶アドレスに基づいて、有効状態にあり且つ含む記憶アドレスが第2フォワーディングエントリの記憶アドレスと同一である第4Hashバケットを検索する。キャッシュコンポーネント105は、第4Hashバケットが見つかった場合、第4Hashバケットの状態を無効にアップデートする。具体的には、キャッシュコンポーネント105は、第2フォワーディングエントリの記憶アドレスに対してHash演算を行い、算出して得たHash値をインデックスとして対応するHashバケット行を検索する。記述の便宜上、第2Hashバケット行と称する。そして、キャッシュコンポーネント105は、在第2Hashバケット行で第4Hashバケットを検索する。見つかった場合、第2フォワーディングエントリは第4Hashバケットに対応する第4エントリにキャッシュされたことを示する。この場合、キャッシュコンポーネント105は、第4Hashバケットに含まれる状態タグを無効にアップデートする。
【0060】
また、キャッシュコンポーネント105は、フォワーディングコンポーネントから送信されるエントリ読み取りコマンドを受信した可能性があり、ストレージコンポーネントに送信されるエントリ書き込みコマンドを傍受した可能性もある。この時、キャッシュコンポーネント105は、エントリ書き込みコマンドを優先的に処理する。従って、ストレージコンポーネントにおけるフォワーディングエントリのアップデートが発生した時、キャッシュコンポーネント105における相応するフォワーディングエントリをタイムリーにアップデートするように確保する。
【0061】
本開示の上記の実施例に係る方法において、フォワーディングコンポーネントとストレージコンポーネントの間にキャッシュコンポーネントが追加される。キャッシュコンポーネントは、フォワーディングコンポーネントのエントリ読み取りコマンドを処理し、当該エントリ読み取りコマンドにキャリーされる読み取りべきフォワーディングエントリの記憶アドレスに基づいて、ローカルで有効状態にあり且つ含む記憶アドレスが当該フォワーディングエントリの記憶アドレスと同一であるHashバケットを検索する。見つかった時、キャッシュコンポーネントに当該フォワーディングエントリにキャッシュされており且つ当該Hashバケットに対応するキャッシュスペースにキャッシュされていることを示す。この場合、キャッシュコンポーネントは、キャッシュされたフォワーディングエントリをフォワーディングコンポーネントに送信さする。見つからなかった時、キャッシュコンポーネントに当該フォワーディングエントリがキャッシュされていないことを示す。この場合、キャッシュコンポーネントは、ストレージコンポーネントから当該フォワーディングエントリを読み取った後、読み取った当該フォワーディングエントリをフォワーディングコンポーネントに送信する。
【0062】
上記の方法は、フォワーディングエントリのキャッシュ方案を実現する。キャッシュコンポーネントは、フォワーディングコンポーネントから送信されたエントリ読み取りコマンドのみを処理し、従って、比較的に高いエントリ読み取り性能を保証する。さらに、キャッシュコンポーネントは、ストレージコンポーネントに送信されるエントリ書き込みコマンドを傍受することで、ストレージコンポーネントにおけるどのようなフォワーディングエントリがアップデートされるべきであるかを知り、キャッシュコンポーネントにキャッシュされた対応するフォワーディングエントリの状態を無効にアップデートする。後続的に、キャッシュコンポーネントは、フォワーディングコンポーネントから送信された当該フォワーディングエントリを読み取るためのエントリ読み取りコマンドを受信した後、ストレージコンポーネントからアップデート後のフォワーディングエントリを読み取ってキャッシュすれば良い。従って、フォワーディングエントリのアップデートをより簡単に実現する。
【0063】
前述したフォワーディングエントリアクセス方法の実施例に対応して、本開示は、当該フォワーディングエントリ方法を応用するネットワーク機器の実施例を更に提供する。
【0064】
当該ネットワーク機器は、ハードウェア又はソフトウェアとハードウェアの組み合わせの方式により実現される。ハードウェアの観点から言うと、当該ネットワーク機器は、FPGAにより実現される。
図6を参照すると、本開示の実施例のネットワーク機器は、フォワーディングコンポーネント10と、キャッシュコンポーネント20と、ストレージコンポーネント30とを含む。フォワーディングコンポーネント10及びキャッシュコンポーネント20は、FPGAチップ上に設置される。FPGAの電源が入った後、FGPAによりFPGA枠組文書をロードして、フォワーディングコンポーネント10及びキャッシュコンポーネント20等を含む複数のモジュールを形成する。ストレージコンポーネント30は、別個のDDR SDRAMのような記憶媒体であっても良いし、フォワーディングコンポーネント10及びキャッシュコンポーネント20とともにFPGAにより実現されても良い。
【0065】
別の実施例において、当該ネットワーク機器は、ソフトウェアとハードウェアの組み合わせの技術により実現される。
図7に示すように、当該ネットワーク機器は、フォワーディングコンポーネント10と、キャッシュコンポーネント20と、ストレージコンポーネント30とを含む。キャッシュコンポーネント20は、プロセッサ701と、機械実行可能命令が記憶された機械可読記憶媒体702とを含む。プロセッサ701と機械可読記憶媒体702とは、システムバス703を介して通信する。さらに、機械可読記憶媒体702におけるフォワーディングエントリアクセス制御ロジックに対応する機械実行可能命令を読み取って実行することで、プロセッサ701は、前述したフォワーディングエントリアクセス方法を実行する。
【0066】
本文で言及された機械可読記憶媒体702は、いかなる電子、磁気、光学又は他の物理的なストレージコンポーネントであって良いし、例えば、実行可能命令、データ等の情報を格納又は記憶する。例えば、機械可読記憶媒体は、RAM(Radom Access Memory、ランダムアクセスメモリ)、揮発性メモリ、不揮発性メモリ、フラッシュメモリ、記憶ドライブ(例えば、ハードディスクドライバ)、ソリッドステートドライブ、いかなる類型の記憶ディスク(例えば、コンパクトディスク、dvd等)、或いは、類似した記憶媒体又はそれらの組み合わせであって良い。
【0067】
図8に示すように、機能から分けて、上記のフォワーディングエントリ制御ロジックは、機能モジュールである受信ユニット201と、検索ユニット202と、読み取りユニット203と、送信ユニット204とを含む。
受信ユニット201は、フォワーディングコンポーネント10から送信された、ストレージコンポーネント30に記憶される、読み取られるべき第1フォワーディングエントリの記憶アドレスをキャリーするエントリ読み取りコマンドを受信するために用いられる。
検索ユニット202は、受信ユニット201がエントリ読み取りコマンドを受信した後、第1フォワーディングエントリの記憶アドレスに基づいて、キャッシュコンポーネント20で有効状態にあり且つ含む記憶アドレスが第1フォワーディングエントリの記憶アドレスと同一である第1Hashバケットを検索するために用いられる。
読み取りユニット203は、検索ユニット202が第1Hashバケットを見つけられなかった時、ストレージコンポーネント30から第1フォワーディングエントリを読み取るために用いられる。
送信ユニット204は、検索ユニット202が第1Hashバケットを見つけた時、第1Hashバケットに対応するキャッシュスペースにキャッシュされた第1フォワーディングエントリをフォワーディングコンポーネント10に送信するために用いられる。送信ユニット204は、さらに、検索ユニット202が第1Hashバケットを見つけられなかった時、読み取りユニット203が読み取った第1フォワーディングエントリをフォワーディングコンポーネント10に送信するために用いられる。
【0068】
また、
図9に示すように、キャッシュコンポーネント20は、書き込みアップデートユニット205を更に含む。その中で、
【0069】
検索ユニット202は、さらに、読み取りユニット203がストレージコンポーネント30から第1フォワーディングエントリを読み取った後、第1フォワーディングエントリの記憶アドレスに基づいて、無効状態にある第2Hashバケットを検索するために用いられる。
【0070】
書き込みアップデートユニット205は、検索ユニット202が第2Hashバケットを見つけた時、読み取りユニット203が読み取った第1フォワーディングエントリを第2Hashバケットに対応するキャッシュスペースに書き込み、第2Hashバケットの状態を有効にアップデートし、第2Hashバケットに含まれる記憶アドレスを第1フォワーディングエントリの記憶アドレスにアップデートするために用いられる。
【0071】
Hashバケットは、タイムスタンプを更に含む。書き込みアップデートユニット205は、さらに、第1Hashバケットに含まれるタイムスタンプを、送信ユニット204が第1Hashバケットに対応するキャッシュスペースにキャッシュされた第1フォワーディングエントリをフォワーディングコンポーネント10に送信する時の時間にアップデートし、第2Hashバケットに含まれるタイムスタンプを、読み取りユニット203が読み取った第1フォワーディングエントリを第2Hashバケットに対応するキャッシュスペースに書き込む時の時間にアップデートする。
【0072】
検索ユニット202は、さらに、第2Hashバケットを見つけられなかった時、第1フォワーディングエントリの記憶アドレスに基づいて、含むタイムスタンプと現在時間の差分値が予め設定されたタイムアウト時間より大きい第3Hashバケットを検索する。
【0073】
書き込みアップデートユニット205は、さらに、検索ユニット202が第3Hashバケットを見つけた時、読み取りユニット203が読み取った第1フォワーディングエントリを第3Hashバケットに対応するキャッシュスペースに書き込み、第3Hashバケットに含まれるタイムスタンプを、前記第1フォワーディングエントリを前記第3Hashバケットに対応するキャッシュスペースに書き込む時間にアップデートし、第3Hashバケットに含まれる記憶アドレスを第1フォワーディングエントリの記憶アドレスにアップデートする。
【0074】
書き込みアップデートユニット205は、さらに、各々のHashバケットに対して、当該Hashバケットに含まれるタイムスタンプと現在時間の差分値が予め設定されたタイムアウト時間より大きいか否かを判断し、前記差分値が前記予め設定されたタイムアウト時間より大きい時、当該Hashバケットの状態を無効にアップデートする。
【0075】
図10に示すように、キャッシュコンポーネント20は、傍受ユニット206と、状態アップデートユニット207とを更に含む。
【0076】
傍受ユニット206は、ストレージコンポーネント30に送信される、ストレージコンポーネント30に書き込まれるべき第2フォワーディングエントリの記憶アドレスをキャリーするエントリ書き込みコマンドを傍受するために用いられる。
【0077】
検索ユニット202は、さらに、傍受ユニット206がエントリ書き込みコマンドを傍受した後、第2フォワーディングエントリの記憶アドレスに基づいて、有効状態にあり且つ含む記憶アドレスが第2フォワーディングエントリの記憶アドレスと同一である第4Hashバケットを検索するために用いられる。
【0078】
状態アップデートユニット207は、検索ユニット202が第4Hashバケットを見つけた時、第4Hashバケットの状態を無効にアップデートするために用いられる。
【0079】
傍受ユニット206は、さらに、ストレージコンポーネント30に送信される、以下の条件を満たすエントリ書き込みコマンドを傍受する。この条件は、エントリ書き込みコマンドにキャリーされる、書き込まれるべき第2フォワーディングエントリの記憶アドレスは対応する記憶アドレスレンジ内にあることを含む。
【0080】
上記の装置における各々のユニットの機能及び作用の実現過程の具体的な詳細は、上記の方法における対応するステップの実現過程を参照すれば良く、ここでは繰り返し説明しないことにする。
【0081】
装置実施例は、基本的に方法例に対応するため、関連箇所は、方法例の部分の説明を参照すれば良い。以上記述された装置例は、ただ模式的なものであり、その中で記載された分離部品として説明されたユニットは、物理的に分かれていてもいなくても良く、ユニットとして表示された部品は、物理ユニットであってもなくても良く、即ち、一つの場所に位置しても良く、又は複数のネットワークユニットに分布されても良い。実際の必要に応じてそのうち一部又は全部のモジュールを選んで本開示の方案の目的を実現することができる。本分野における通常の知識を有する者は、創造的労働をせずに理解及び実施することができる。
【0082】
本開示に使用される用語は、単に特定の実施例を記述するための目的であり、本開示を制限することを意図していない。本開示及び添付される特許請求の範囲に使用される単数形態「一」、「前記」及び「当該」は、文脈で明らかに他の意味が示されていない限り、複数形態も含むことを意図する。なお、理解すべきことは、本文に使用される用語「及び/又は」一つ又は複数の関連するリストされたアイテムを含む任意の又はすべての可能な組み合わせを指す。
【0083】
本開示において用語第1、第2、第3等を用いて各種の情報を記述する可能性があるが、これらの情報は、これらの用語に制限されるべきではない。これらの用語は、単に同一類型の情報を互いに区分するために用いられる。例えば、本開示の範囲を逸脱しない前提で、第1情報は、第2情報とも称されることができ、同様に、第2情報も第1情報と称されることができる。文脈に応じて、本文に使用されるような単語「若し」は、「……時」又は、“……場合”、又は「に応答して確定する」として解釈されることができる。
【0084】
上記のものは、単に本開示の好ましい実施例であり、本開示を制限するために用いられない。本開示の精神及び原則の範囲内でなされるいかなる修正、均等物による置換、改善等は、全て本開示の保護の範囲内に含まれるべきである。