本出願は、データエンコーディング技術の分野に関し、詳細には、パケット処理方法および装置、ならびにチップに関する。
本出願は、2019年11月29日に中国国家知識産権局に出願された、「PACKET PROCESSING METHOD AND APPARATUS, AND CHIP」と題する、中国特許出願第201911205835.X号に基づく優先権を主張し、また本出願は、2019年9月10日に中国国家知識産権局に出願された、「FEC ACCELERATION METHOD, APPARATUS AND SYSTEM, AND FEC HARDWARE ACCELERATOR」と題する、中国特許出願第201910854367.2号に基づく優先権を主張し、両特許出願は、その全体が、参照によって本明細書に組み込まれる。
データストリームが、2つのネットワークデバイス間で伝送されるとき、パケットロスが、しばしば発生する。現在、データストリーム伝送処理におけるパケットロスの問題を解決するために、前方誤り訂正(Forward Error Correction、FEC)エンコーディングおよびデコーディング技術が、使用されることがある。
具体的には、第1のレベルのネットワークデバイスは、元のパケットの冗長パケットを獲得するために、データストリーム内の元のパケットに対して、FECエンコーディングを実行する。第1のレベルのネットワークデバイスは、FECパケットヘッダを、元のパケットの各々と、冗長パケットの各々とに追加し、FECパケットヘッダを搬送する元のパケットと、FECパケットヘッダを搬送する冗長パケットとを、第2のレベルのネットワークデバイスに送信する。元のパケットが、伝送処理において失われたとき、第2のレベルのネットワークデバイスは、失われていない元のパケットと、冗長パケットとに基づいて、失われた元のパケットを復元し、失われていない元のパケットと、復元された元のパケットとを組み合わせて、元のデータストリームを作り、データストリームを出力する。これが、データストリームの伝送処理におけるパケットロスを回避する。
上述のパケット伝送処理におけるFECエンコーディング処理および元のパケットの復元処理は、ともに、大量の計算を必要とし、計算は、ネットワークデバイスの中央処理ユニット(Central Processing Unit、CPU)によって達成される。しかしながら、CPUの計算能力および計算速度は、限られている。高速エンコーディングおよびデコーディングの要件が、満たされる場合、パケット伝送処理における大きいスループットの要件を満たすことは、困難である。
本出願は、ネットワークデバイスが、パケット伝送処理における大きいスループットの要件を満たしながら、パケットエンコーディングおよびデコーディング処理を迅速に実行するような、パケット処理方法および装置、ならびにチップを提供する。
第1の態様によれば、パケット処理方法が、提供され、方法は、プロセッサとターゲットハードウェアエンジンを含む、ネットワークデバイスに適用される。方法は、プロセッサが、処理される第1のデータストリーム内のM個の元のパケットに基づいて、第1のエンコーディングタスクを生成するステップであって、Mは、正の整数であり、第1のエンコーディングタスクは、M個の元のパケットをエンコードすることを示すために使用される、ステップを含む。ターゲットハードウェアエンジンは、R個の冗長パケットを獲得するために、第1のエンコーディングタスクに基づいて、M個の元のパケットに対して、前方誤り訂正FECエンコーディングを実行し、Rは、正の整数である。
この方法においては、FECエンコーディングは、プロセッサではなくネットワークデバイスのターゲットハードウェアエンジンにおいて、第1のデータストリーム内のM個の元のパケットに対して、直接的に実行される。したがって、CPUのオーバーヘッドは、低減させることができ、ネットワークデバイスのエンコーディング効率は、向上させることができる。このようにして、ネットワークデバイスは、パケット伝送処理における大きいスループットの要件を容易に満たすことができる。
可能な実装においては、プロセッサが、処理される第1のデータストリーム内のM個の元のパケットに基づいて、第1のエンコーディングタスクを生成した後、方法は、プロセッサが、第1のエンコーディングタスクを、第1のターゲット送信キュー内に記憶するステップであって、第1のターゲット送信キューは、ネットワークデバイスの処理されるデータストリームのエンコーディングタスクを記憶するために使用され、ネットワークデバイスの処理されるデータストリームは、第1のデータストリームを含む、ステップをさらに含む。ターゲットハードウェアエンジンは、第1のエンコーディングタスクを、第1のターゲット送信キューから読み出す。
可能な実装においては、プロセッサが、第1のエンコーディングタスクを、第1のターゲット送信キュー内に記憶するステップは、プロセッサが、第1のデータストリームのプライオリティに基づいて、第1のエンコーディングタスクを、第1のターゲット送信キューに追加するステップであって、第1のターゲット送信キューのプライオリティは、第1のデータストリームのプライオリティと等しい、ステップを含む。
可能な実装においては、ターゲットハードウェアエンジンが、第1のエンコーディングタスクを、第1のターゲット送信キューから読み出すステップは、ターゲットハードウェアエンジンが、送信キューのプライオリティ順序に基づいて、送信キューの各々の中にエンコーディングタスクが存在するかどうかを、順番に問い合わせるステップであって、送信キューの各々は、1つのプライオリティに対応する、ステップを含む。ターゲットハードウェアエンジンは、送信キューのうちの、プライオリティが第1のターゲット送信キューのそれよりも高いキュー内に、エンコーディングタスクが存在しないとき、第1のエンコーディングタスクを、第1のターゲット送信キューから読み出す。
可能な実装においては、第1のターゲット送信キューは、ネットワークデバイスのメモリ、プロセッサ、およびターゲットハードウェアエンジンのうちのいずれか1つの中に配置される。
可能な実装においては、プロセッサが、処理される第1のデータストリーム内の記憶されたM個の元のパケットに基づいて、第1のエンコーディングタスクを生成する前に、方法は、ネットワークデバイスが、第1のデータストリーム内の受信された元のパケットを、ネットワークデバイスのメモリ内に記憶するステップをさらに含む。ネットワークデバイスのメモリ内の第1のデータストリーム内のエンコードされていない元のパケットの数量が、M以上である場合、プロセッサは、M個の元のパケットを、第1のデータストリーム内のエンコードされていない元のパケットから獲得する。
可能な実装においては、第1のエンコーディングタスクは、M個の元のパケットの記憶アドレスを含み、または第1のエンコーディングタスクは、M個の元のパケットの記憶アドレスと、第1のデータストリームのプライオリティとを含み、または第1のエンコーディングタスクは、M個の元のパケットを含み、または第1のエンコーディングタスクは、M個の元のパケットと、第1のデータストリームのプライオリティとを含む。
第2の態様によれば、パケット処理方法が提供され、方法は、プロセッサとターゲットハードウェアエンジンとを含むネットワークデバイスに適用される。方法は、プロセッサが、FECパケットの第1のグループを、受信された第1のデータストリームから獲得するステップであって、FECパケットの第1のグループ内のすべてのFECパケットは、同じFECパケットヘッダを有し、FECパケットヘッダは、FECエンコードした元のパケットの数量Mを含む、ステップを含む。FECパケットの第1のグループ内の元のパケットの数量が、元のパケットの数量Mよりも小さいとき、プロセッサは、FECパケットの第1のグループに基づいて、第1のデコーディングタスクを生成し、第1のデコーディングタスクは、FECパケットの第1のグループをデコードすることを示すために使用される。ターゲットハードウェアエンジンは、FECパケットの第1のグループ内の失われた元のパケットを獲得するために、第1のデコーディングタスクに基づいて、FECパケットの第1のグループ内の元のパケットと、元のパケットの冗長パケットに対して、FECデコーディングを実行する。
この方法においては、FECデコーディングは、CPUではなくネットワークデバイスのターゲットハードウェアエンジンにおいて、FECパケットの第1のグループ内の失われていないFECパケットに対して、直接的に実行される。したがって、CPUのオーバーヘッドは、低減させることができ、ネットワークデバイスのデコーディング効率は、向上させることができる。このようにして、ネットワークデバイスは、パケット伝送処理における大きいスループットの要件を容易に満たすことができる。
可能な実装においては、プロセッサが、FECパケットの第1のグループに基づいて、第1のデコーディングタスクを生成した後、方法は、プロセッサが、第1のデコーディングタスクを、第2のターゲット送信キュー内に記憶するステップであって、第2のターゲット送信キューは、ネットワークデバイスの処理されるデータストリームのデコーディングタスクを記憶するために使用され、ネットワークデバイスの処理されるデータストリームは、第1のデータストリームを含む、ステップをさらに含む。ターゲットハードウェアエンジンは、第1のデコーディングタスクを、第2のターゲット送信キューから読み出す。
可能な実装においては、プロセッサが、第1のデコーディングタスクを、第2のターゲット送信キュー内に記憶するステップは、プロセッサが、第1のデータストリームのプライオリティに基づいて、第1のデコーディングタスクを、第2のターゲット送信キューに追加するステップであって、第2のターゲット送信キューのプライオリティは、第1のデータストリームのプライオリティと等しい、ステップを含む。
可能な実装においては、ターゲットハードウェアエンジンが、第1のデコーディングタスクを、第2のターゲット送信キューから読み出すステップは、ターゲットハードウェアエンジンが、送信キューのプライオリティ順序に基づいて、送信キューの各々の中にデコーディングタスクが存在するかどうかを、順番に問い合わるステップであって、送信キューの各々は、1つのプライオリティに対応する、ステップを含む。ターゲットハードウェアエンジンは、送信キューのうちの、プライオリティが第2のターゲット送信キューのそれよりも高いキュー内に、他のデコーディングタスクが存在しないとき、第1のデコーディングタスクを、第2のターゲット送信キューから読み出す。
可能な実装においては、第2のターゲット送信キューは、ネットワークデバイスのメモリ、プロセッサ、およびターゲットハードウェアエンジンのうちのいずれか1つの中に配置される。
可能な実装においては、第1のデコーディングタスクは、FECパケットの第1のグループの記憶アドレスを含み、または第1のデコーディングタスクは、FECパケットの第1のグループの記憶アドレスと、第1のデータストリームのプライオリティとを含み、または第1のデコーディングタスクは、FECパケットの第1のグループを含み、または第1のデコーディングタスクは、FECパケットの第1のグループと、第1のデータストリームのプライオリティとを含む。
第3の態様によれば、上述のパケット処理方法を実行するように構成された、パケット処理装置が、提供される。具体的には、装置は、第1の態様において提供されるパケット処理方法、または第1の態様のいずれかの任意選択の方式を実行するように構成された、機能モジュールを含む。
第4の態様によれば、上述のパケット処理方法を実行するように構成された、パケット処理装置が、提供される。具体的には、装置は、第2の態様において提供されるパケット処理方法、または第2の態様のいずれかの任意選択の方式を実行するように構成された、機能モジュールを含む。
第5の態様によれば、チップが提供され、チップは、プロセッサとターゲットハードウェアエンジンとを含む。プロセッサは、第1の態様において提供されるパケット処理方法、または第1の態様のいずれかの任意選択の方式を実施するように構成された、プロセッサであり、ターゲットハードウェアエンジンは、第1の態様において提供されるパケット処理方法、または第1の態様のいずれかの任意選択の方式を実施するように構成された、ターゲットハードウェアエンジンである。
第6の態様によれば、チップが提供され、チップは、プロセッサとターゲットハードウェアエンジンとを含む。プロセッサは、第2の態様において提供されるパケット処理方法、または第2の態様のいずれかの任意選択の方式を実施するように構成された、プロセッサであり、ターゲットハードウェアエンジンは、第2の態様において提供されるパケット処理方法、または第2の態様のいずれかの任意選択の方式を実施するように構成された、ターゲットハードウェアエンジンである。
本出願の実施形態における技術的ソリューションをより明確に説明するために、以下で、実施形態を説明するための添付の図面について簡単に説明する。以下の説明における添付の図面が、本出願のいくつかの実施形態を示すにすぎないことは明らかであり、当業者であれば、創造的な努力なしに、これらの添付の図面から他の添付の図面をさらに導出し得る。
本出願の実施形態によるFECエンコーディング計算処理の概略図である。
本出願の実施形態によるFECデコーディング計算処理の概略図である。
本出願の実施形態によるパケット伝送システムの概略図である。
本出願の実施形態によるパケット処理装置の構造の概略図である。
本出願の実施形態によるパケット処理装置の構造の概略図である。
本出願の実施形態によるターゲットハードウェアエンジンの概略図である。
本出願の実施形態によるパケット処理方法のフローチャートである。
本出願の実施形態によるパケット処理方法のフローチャートである。
本出願の実施形態によるパケット処理方法のフローチャートである。
本出願の実施形態による、ネットワークデバイスにおける内部対話手順の概略図である。
本出願の実施形態によるFECパケットの概略図である。
本出願の実施形態によるFECエンコーディングのフローチャートである。
本出願の実施形態によるパケット処理方法のフローチャートである。
本出願の実施形態によるパケット処理方法のフローチャートである。
本出願の実施形態によるFECデコーディングのフローチャートである。
本出願の目的、技術的ソリューション、および利点をより明確にするために、以下で、添付の図面を参照して、詳細に本出願の実装についてさらに説明する。
本出願の実装処理を理解することを容易にするために、図1に示される、本出願の実施形態によるFECエンコーディング計算処理の概略図を参照して、FECエンコーディングが、以下のように説明される。FECエンコーディング処理において使用されるパラメータは、エンコーディングパラメータである。エンコーディングパラメータは、元のパケットの数量Mと、冗長パケットの数量Rと、ターゲットサイズLとを含み、MおよびRは、ともに、正の整数であり、Lは、0よりも大きい値であり、元のパケットの数量Mは、エンコードされる元のパケットの数量であり、冗長パケットの数量Rは、M個の元のパケットに対してFECエンコーディングが実行された後に獲得される、冗長パケットの数量である。M個の元のパケットのサイズは、異なるので、冗長パケットを生成するために、M個の元のパケットをエンコードする処理において、第1のネットワークデバイスは、M個の等長パケットを獲得するために、最初に、M個の元のパケットに基づいて、パディング処理を実行し、等長パケットの各々は、1つの元のパケットがパディングされた後に獲得される。等長パケットの各々のサイズ、および冗長パケットの各々のサイズは、ともに、ターゲットサイズLであり、ターゲットサイズLは、M個の元のパケットのうちで最大の元のパケットのサイズであり得る。この場合、M個の元のパケットのうちで最大のパケットは、パディングされる必要がなく、等長パケットと見なし得る。その後、第1のネットワークデバイスは、M個の等長パケットを使用することによって、最初に、M×L型のエンコードされる行列を形成し得、エンコードされる行列の各行が、1つの等長パケットである。例えば、M=4であり、4つの等長パケット、すなわち、M0からM3が、図1に示されている。この場合、エンコードされる行列は、等長パケットM0からM3によって形成される。第1のネットワークデバイスは、(M+R)×M型の生成行列を構築し、生成行列は、第1の部分行列と、第2の部分行列とを含み、第1の部分行列は、M×M型の恒等行列であり、第2の部分行列は、R×M型のコーシ行列である。
第2の部分行列における第i行、第j列の要素は、
xi-1およびyi-1は、ガロア体(galois field、GF)(2w)における要素であり、iおよびjは、0以上の整数であり、wは、8であり得る。例えば、生成行列が、図1に示されている。ネットワークデバイスは、(M+R)×L型のエンコードした行列を獲得するために、生成行列と、エンコードされる行列とに対する乗算計算を実行し、エンコードした行列は、エンコードされる行列と、R×L型の検査行列とを含み、検査行列の各行が、1つの冗長パケットである。例えば、図1においては、R=2であるとき、冗長パケットは、R0およびR1である。
R個の冗長パケットを獲得した後、第1のネットワークデバイスは、M個の元のパケットと、R個の冗長パケットとを、FECパケットのグループ内にカプセル化するために、同じFECパケットヘッダを、M個の元のパケットと、R個の冗長パケットとに追加し、FECパケットのグループを、第2のネットワークデバイスに送信する。エンコードした行列内の、FECパケットのグループのいずれかの等長パケットが、伝送処理において失われたとき、第2のネットワークデバイスは、デコーディング処理を使用することによって、失われたいずれかの等長パケットをさらに復元し得る。図2に示される、本出願の実施形態によるFECデコーディング計算処理の概略図を参照して、FECデコーディングが、以下のように説明される。エンコードした行列内の等長パケットM2、M3が、失われたとき、第2のネットワークデバイスは、失われていない等長パケットM0、M1と、冗長パケットR0、R1とを使用することによって、復元行列を形成し得る。その後、第2のネットワークデバイスは、ターゲット検査行列を構築し、ターゲット検査行列は、第3の部分行列と、第2の部分行列とを含む。2つの等長パケットが、失われたので、第3の部分行列は、2×M型の恒等行列である。第2のネットワークデバイスは、ターゲット検査行列の逆行列を復元行列によって乗算することによって、エンコードされる行列を獲得し、失われた等長パケットM2、M3を、エンコードされる行列から獲得し得る。
図3は、本出願の実施形態によるパケット伝送システムの概略図である。図3を参照する。パケット伝送システムは、第1の端末301と、第1のネットワークデバイス302と、第2のネットワークデバイス303と、第2の端末304とを含む。第1の端末301は、データストリームを生成し、データストリームを第1のネットワークデバイス302に送信するように構成される。第1のネットワークデバイス302は、データストリーム内のパケットに対して、FECエンコーディングを実行し、FECパケットを含むエンコードしたストリームを、第2のネットワークデバイス303に送信し得る。第2のネットワークデバイス303は、失われた元のパケットを復元するために、エンコードしたストリーム内の失われていないFECパケットをデコードし、復元された元のパケットと失われていない元のパケットとを使用することによって、元のデータストリームを形成し、データストリームを第2の端末304に送信する。第1の端末301および第2の端末302は、各々、モバイルフォン、またはノートブックコンピュータなどであり得、第1のネットワークデバイス302および第2のネットワークデバイス303は、各々、コンピュータデバイス、例えば、ルータまたはスイッチであり得、データストリームは、ビデオストリームであり得、またはテキストデータを含むテキストストリームであり得る。本出願のこの実施形態においては、データストリームのタイプは、特に限定されない。
例としてビデオストリームを使用する概略図において、第1の端末301が、複数の第2の端末302とビデオセッションを実行するとき、第1の端末301は、ビデオストリーム(すなわち、データストリーム)を形成するために、ビデオを構成するために使用される元のパケットを、第1のネットワークデバイス302に送信する。第1のネットワークデバイス302は、冗長パケットを獲得するために、ビデオストリーム内の元のパケットに対して、FECエンコーディングを実行し、エンコードしたストリームを獲得するために、元のパケットと冗長パケットとをFECパケット内にカプセル化し、エンコードしたストリームを、第2のネットワークデバイス303に送信する。エンコードしたストリーム内のFECパケットの各グループを獲得した後、第2のネットワークデバイス303は、FECパケットの各グループのFECパケットヘッダに基づいて、FECパケットの各グループにおいて、元のパケットが失われているかどうかを決定する。元のパケットが、失われている場合、第2のネットワークデバイス303は、失われた元のパケットを復元するために、元のパケットが失われた、FECパケットのグループをデコードし、復元された元のパケットと、失われていない元のパケットとを使用することによって、ビデオストリームを形成し、ビデオストリームを、複数の第2の端末304に送信する。ビデオストリームを受信した後、第2の端末304の各々は、ビデオを再生し、それによって、複数の端末間のビデオセッションを実施する。
いくつかの可能な実装においては、第1の端末301は、さらに、第1のネットワークデバイスの機能を有し得る。図4は、本出願の実施形態によるパケット処理装置の構造の概略図である。装置400は、処理される第1のデータストリーム内のM個の元のパケットに基づいて、第1のエンコーディングタスクを生成するように構成された、プロセッサ401であって、Mは、正の整数であり、第1のエンコーディングタスクは、M個の元のパケットをエンコードすることを示すために使用される、プロセッサ401と、R個の冗長パケットを獲得するために、第1のエンコーディングタスクに基づいて、M個の元のパケットに対して、前方誤り訂正FECエンコーディングを実行するように構成された、ターゲットハードウェアエンジン402であって、Rは、正の整数である、ターゲットハードウェアエンジン402とを含む。
任意選択で、プロセッサ401は、第1のエンコーディングタスクを、第1のターゲット送信キュー内に記憶するようにさらに構成され、第1のターゲット送信キューは、装置の処理されるデータストリームのエンコーディングタスクを記憶するために使用され、装置の処理されるデータストリームは、第1のデータストリームを含む。
ターゲットハードウェアエンジンは、第1のエンコーディングタスクを、第1のターゲット送信キューから読み出すようにさらに構成される。
任意選択で、プロセッサ401は、第1のデータストリームのプライオリティに基づいて、第1のエンコーディングタスクを、第1のターゲット送信キューに追加するように構成され、第1のターゲット送信キューのプライオリティは、第1のデータストリームのプライオリティと等しい。
任意選択で、ターゲットハードウェアエンジン402は、送信キューの各々の中にエンコーディングタスクが存在するかどうかを、送信キューのプライオリティ順序に基づいて、順番に問い合わせることであって、送信キューの各々は、1つのプライオリティに対応する、問い合わせることと、送信キューのうちの、プライオリティが第1のターゲット送信キューのそれよりも高いキュー内に、エンコーディングタスクが存在しないとき、第1のエンコーディングタスクを、第1のターゲット送信キューから読み出すこととを行うように構成される。
任意選択で、装置400は、メモリ403をさらに含み、第1のターゲット送信キューは、ネットワークデバイスのメモリ、プロセッサ、およびターゲットハードウェアエンジンのうちのいずれか1つの中に配置される。
任意選択で、装置400は、メモリ403をさらに含む。
メモリ403は、第1のデータストリーム内の受信された元のパケットを記憶するように構成される。
プロセッサ401は、メモリ内の第1のデータストリーム内のエンコードされていない元のパケットの数量が、M以上である場合、M個の元のパケットを、第1のデータストリーム内のエンコードされていない元のパケットから獲得し、処理される第1のデータストリーム内の記憶されたM個の元のパケットに基づいて、エンコーディングタスクを生成するステップを実行するようにさらに構成される。
プロセッサ401は、汎用プロセッサ、例えば、CPU、ネットワークプロセッサ(network processor、NP)、またはCPUとNPとの組み合わせであり得る。プロセッサは、ハードウェアチップをさらに含み得る。ハードウェアチップは、特定用途向け集積回路(application-specific integrated circuit、ASIC)、プログラマブル論理デバイス(programmable logic device、PLD)、またはそれらの組み合わせであり得る。PLDは、複合プログラマブル論理デバイス(complex programmable logic device、CPLD)、フィールドプログラマブルゲートアレイ(field-programmable gate array、FPGA)、汎用アレイ論理(generic array logic、GAL)、またはそれらの組み合わせであり得る。
メモリ403は、揮発性メモリ(volatile memory)、例えば、ランダムアクセスメモリ(random-access memory、RAM)を含み得る。メモリは、代替として、不揮発性メモリ(non-volatile memory)、例えば、フラッシュメモリ(flash memory)、ハードディスクドライブ(hard disk drive、HDD)、およびソリッドステートドライブ(solid-state drive、SSD)を含み得る。メモリは、代替として、上述のタイプのメモリの任意の組み合わせを含み得る。
任意選択で、第1のエンコーディングタスクは、M個の元のパケットの記憶アドレスを含み、または第1のエンコーディングタスクは、M個の元のパケットの記憶アドレスと、第1のデータストリームのプライオリティとを含み、または第1のエンコーディングタスクは、M個の元のパケットを含み、または第1のエンコーディングタスクは、M個の元のパケットと、第1のデータストリームのプライオリティとを含む。
いくつかの可能な実装においては、図4に示されるパケット処理装置の機能は、代替として、チップを使用することによって実施され得、チップは、図4におけるプロセッサ401と、図4におけるターゲット処理エンジン402とを含み得る。
いくつかの可能な実装においては、第2の端末304は、さらに、第2のネットワークデバイス303の機能を有し得る。図5は、本出願の実施形態によるパケット処理装置の構造の概略図である。装置500は、プロセッサ501と、ターゲットハードウェアエンジン502とを含む。
プロセッサ501は、FECパケットの第1のグループを、受信された第1のデータストリームから獲得することであって、FECパケットの第1のグループ内のすべてのFECパケットのFECパケットヘッダは、同じであり、FECパケットヘッダは、FECエンコードした元のパケットの数量Mを含む、獲得することと、FECパケットの第1のグループ内の元パケットの数量が、元のパケットの数量Mよりも小さいとき、FECパケットの第1のグループに基づいて、第1のデコーディングタスクを生成することであって、第1のデコーディングタスクは、FECパケットの第1のグループをデコードすることを示すために使用される、生成することとを行うように構成される。
ターゲットハードウェアエンジン502は、FECパケットの第1のグループ内の失われた元のパケットを獲得するために、第1のデコーディングタスクに基づいて、FECパケットの第1のグループ内の元のパケットと、元のパケットの冗長パケットとに対して、FECデコーディングを実行するように構成される。
任意選択で、プロセッサ501は、第1のデコーディングタスクを、第2のターゲット送信キュー内に記憶することであって、第2のターゲット送信キューは、装置の処理されるデータストリームのデコーディングタスクを記憶するために使用され、装置の処理されるデータストリームは、第1のデータストリームを含む、記憶することを行うようにさらに構成される。
ターゲットハードウェアエンジン502は、第1のデコーディングタスクを、第2のターゲット送信キューから読み出すようにさらに構成される。
任意選択で、プロセッサ501は、第1のデータストリームのプライオリティに基づいて、第1のデコーディングタスクを、第2のターゲット送信キューに追加することであって、第2のターゲット送信キューのプライオリティは、第1のデータストリームのプライオリティと等しい、追加することを行うように構成される。
任意選択で、ターゲットハードウェアエンジン502は、送信キューの各々の中にデコーディングタスクが存在するかどうかを、送信キューのプライオリティ順序に基づいて、順番に問い合わせることであって、送信キューの各々は、1つのプライオリティに対応する、問い合わせることと、送信キューのうちの、プライオリティが第2のターゲット送信キューのそれよりも高いキュー内に、デコーディングタスクが存在しないとき、第1のデコーディングタスクを、第2のターゲット送信キューから読み出すこととを行うように構成される。
任意選択で、装置デバイスは、メモリをさらに含み、第2のターゲット送信キューは、メモリ、プロセッサ、およびターゲットハードウェアエンジンのうちのいずれか1つの中に配置される。
任意選択で、第1のデコーディングタスクは、FECパケットの第1のグループ内の失われていないFECパケットの記憶アドレスを含み、または第1のデコーディングタスクは、FECパケットの第1のグループ内の失われていないFECパケットの記憶アドレスと、第1のデータストリームのプライオリティとを含み、または第1のデコーディングタスクは、FECパケットの第1のグループを含み、または第1のデコーディングタスクは、FECパケットの第1のグループと、第1のデータストリームのプライオリティとを含む。
いくつかの可能な実装においては、図5に示されるパケット処理装置の機能は、代替として、チップを使用することによって実施され得、チップは、図5におけるプロセッサ501と、図5におけるターゲット処理エンジン502とを含み得る。
説明を容易にするために、第1のネットワークデバイス302および第2のネットワークデバイス303は、各々、コンピューティングデバイスとして表される。コンピューティングデバイスは、各々、ターゲットハードウェアエンジンを含み得、ターゲットハードウェアエンジンは、エンコーディングおよびデコーディング計算を実行するように構成される。本出願の実施形態は、ターゲットハードウェアエンジンの概略図を提供する。図6におけるターゲットハードウェアエンジン600を参照する。ターゲットハードウェアエンジン600は、コントローラ601と、バッファユニット602と、データ処理ユニット603と、行列ジェネレータ604と、エンコーディングおよびデコーディングユニット605とを含む。コントローラ601は、コンピューティングデバイスのCPUによって送られたエンコードおよびデコードされるパケットの、エンコーディングおよびデコーディングパラメータならびに記憶アドレスを受信し、エンコーディングおよびデコーディングパラメータに基づいて、対応するデータ処理ポリシと、エンコーディングおよびデコーディングモデルのモデルパラメータと、行列モデルのモデルパラメータとを決定するように構成される。エンコーディングおよびデコーディングパラメータは、エンコーディングパラメータ、またはデコーディングパラメータを含み、デコーディングパラメータは、FECパケットヘッダ内の内容であり得る。エンコードおよびデコードされるパケットは、M個の元のパケット、または失われていないFECパケットであり得る。エンコーディングおよびデコーディングモデルは、エンコーディングモデル、またはデコーディングモデルを含み得る。エンコーディングモデルのモデルパラメータは、元のパケットの数量M、およびターゲットサイズLである。デコーディングモデルのモデルパラメータは、失われた元のFECパケットの数量F、およびターゲットサイズLを含み、Fは、0より大きく、R以下である。行列モデルのモデルパラメータは、生成行列のモデルパラメータ、またはターゲット検査行列のモデルパラメータを含む。生成行列のモデルパラメータは、元のパケットの数量Mと、冗長パケットの数量Rと、ターゲットサイズLとを含む。ターゲット検査行列のモデルパラメータは、失われた元のFECパケットの数量Fと、冗長パケットの数量Rと、ターゲットサイズLとを含む。
コントローラ601は、受信されたエンコードおよびデコードされるパケットの記憶アドレスに基づいて、エンコードおよびデコードされるパケットを、コンピューティングデバイスのメモリから獲得し、エンコードおよびデコードされるパケットを、バッファユニット602に記憶するようにさらに構成される。コントローラ601は、データ処理ユニット603が、エンコードおよびデコードされるパケットと、エンコーディングおよびデコーディングモデルのモデルパラメータとに基づいて、またデータ処理ポリシに従って、エンコードされる行列、または復元行列を生成し、エンコードされる行列、または復元行列を、エンコーディングおよびデコーディングユニット605に送信するように、エンコーディングおよびデコーディングモデルのモデルパラメータと、データ処理ポリシとを、データ処理ユニット603に送信するようにさらに構成される。
コントローラ601は、行列ジェネレータ604が、行列モデルのモデルパラメータに基づいて、生成行列、またはターゲット検査行列を構築し、生成行列、またはターゲット検査行列を、エンコーディングおよびデコーディングユニット605に送信するように、行列モデルのモデルパラメータを、行列ジェネレータ604に送信するようにさらに構成される。
エンコーディングおよびデコーディングユニット605は、冗長パケット、または失われた元のFECパケットを獲得するために、受信されたエンコードされる行列または受信された復元行列、および対応する生成行列または対応するターゲット検査行列に対して、エンコーディングおよびデコーディング計算を実行し(詳細については、図1および図2に示される、エンコーディング計算処理およびデコーディング計算処理を参照されたい)、冗長パケット、または失われた元のFECパケットを、バッファユニット602に送信するように構成される。バッファユニット602は、冗長パケット、または復元されたパケットを、コンピューティングデバイスのメモリ、またはプロセッサに送信する。
ターゲットハードウェアエンジン内のエンコーディングおよびデコーディングユニット605は、FECエンコーディングロジックとFECデコーディングロジックとを多重化し得る。FECエンコーディングが、実行される必要があるとき、エンコーディングおよびデコーディングユニット605は、FECエンコーディングロジックに基づいて、生成行列およびエンコードされる行列に対して、FECエンコーディングを実行する。FECデコーディングが、実行される必要があるとき、エンコーディングおよびデコーディングユニット605は、FECデコーディングロジックに基づいて、ターゲット検査行列および復元行列に対して、FECデコーディングを実行する。いくつかの可能な実装においては、エンコーディングおよびデコーディングユニット605は、エンコーディングサブユニットと、デコーディングサブユニットとを含み得る。エンコーディングサブユニットは、FECエンコーディングロジックに基づいて、生成行列およびエンコードされる行列に対して、FECエンコーディングを実行し得、デコーディングサブユニットは、FECデコーディングロジックに基づいて、ターゲット検査行列および復元行列に対して、FECデコーディングを実行し得る。
コンピューティングデバイスのエンコーディング処理およびデコーディング処理についてさらに説明するために、図7に示される、本出願の実施形態によるパケット処理方法のフローチャートを参照する。コンピューティングデバイスは、ギガビットイーサネット(gigabit Ethernet、GE)ネットワークポート、または10ギガビットイーサネット(ten-gigabit Ethernet、GXE)ネットワークポートを通して、データストリーム内のパケットを受信する。GE/GXEネットワークポートは、受信されたパケットを、パケット解析エンジン(packet parse engine、PPE)に送信する。PPEは、パケットを、メモリ内に記憶し、パケットのディスクリプタを獲得するために、パケットを予備的に解析し、パケットの記憶アドレスを搬送する通知メッセージを、トラフィック分割を通して、ネットワークプロセッサ(network processor、NP)エンジンに送信する。NPエンジンは、パケットがエンコードされる必要があるかどうかを決定するために、メモリ内のパケットに対して、ディープ解析を実行し得る。パケットがエンコードされる必要があるとき、NPエンジンは、さらに、通知メッセージを、CPUに転送し得る。CPUのプロトコルスタックは、通知メッセージを、ユーザデータグラムプロトコル(user datagram protocol、UDP)プロキシに送信する。UDPプロキシによって受信された通知メッセージの数量が、特定の数量に達したとき、それは、メモリが、現在の時間期間における、現在のエンコーディングのために必要とされる、エンコードされるパケットを記憶したことを示し、CPUは、FECソフトウェアインターフェースを通して、エンコーディングタスクを、ターゲットハードウェアエンジンに配送する。ターゲットハードウェアエンジンは、エンコーディングタスクで搬送された、エンコードされるパケットの記憶アドレスに基づいて、エンコードされるパケットを、メモリから獲得し、冗長パケットを生成し、冗長パケットを、メモリ内に記憶する。記憶が、完了した後、ターゲットハードウェアエンジンは、エンコーディングタスク完了情報を、CPU内のFECソフトウェアインターフェースに報告する。FECソフトウェアインターフェースは、エンコーディングタスク完了情報で搬送された、エンコードされるパケットの記憶アドレス、および冗長パケットの記憶アドレスに基づいて、エンコードされるパケット、および冗長パケットを、メモリから獲得し、FECパケットを生成するために、FECパケットヘッダを、獲得されたエンコードされるパケットおよび冗長パケットに追加する。FECソフトウェアインターフェースは、エンコーディングが実行された後のエンコードしたストリーム(すなわち、データストリーム)を形成するために、FECパケットを、トラフィック管理(traffic management、TM)エンジンに送信する。TMエンジンは、CPUの要件、または別のハードウェアエンジンの要件、例えば、サービス品質(quality of service、QoS)スケジューリング、トラフィックシェーピング、およびトラフィック統計収集に基づいて、エンコードしたストリームを操作する。TMエンジンは、操作されたエンコードしたストリームを、PPEに送信する。PPEは、操作されたエンコードしたストリームを、GE/GXEネットワークポートに転送し、GE/GXEネットワークポートは、操作されたエンコードしたストリームを出力する。いくつかの可能な実装においては、コンピューティングデバイスは、NPエンジン、PPE、およびTMエンジンを含まず、NPエンジン、PPE、およびTMエンジンの仕事は、すべて、1つのプロセッサ、またはCPUによって完了され得ることに留意されたい。代替として、NPエンジン、PPE、TMエンジン、およびCPUの仕事は、1つのプロセッサによって完了され得る。
上では、コンピューティングデバイスのエンコーディング処理について説明した。コンピューティングデバイスのデコーディング処理は、以下のように説明される。コンピューティングデバイスのメモリ内に記憶されたパケットが、FECパケットであるときに、パケットヘッダが同じであるFECパケットのグループ内の元のパケットが、失われた場合、CPUは、FECソフトウェアインターフェースを通して、デコーディングタスクを、ターゲットハードウェアエンジンに配送する。ターゲットハードウェアエンジンは、デコーディングタスクで搬送された、FECパケットのグループの記憶アドレスに基づいて、FECパケットのグループを、メモリから獲得し、FECパケットのグループに基づいて、失われた元のパケットを復元し、復元された元のパケットを、メモリ内に記憶する。記憶が、完了した後、ターゲットハードウェアエンジンは、デコーディングタスク完了情報を、CPU内のFECソフトウェアインターフェースに報告する。FECソフトウェアインターフェースは、デコーディングタスク完了情報で搬送された、失われていない元のパケットの記憶アドレスと、復元された元のパケットの記憶アドレスとに基づいて、元のFECパケットのグループ内の失われていない元のパケットと、復元された元のパケットとを、メモリから獲得し、獲得された元のパケットを使用することによって、出力のためのデータストリームを形成する。CPUによってデータストリームを出力する方式は、エンコードしたストリームを出力する方式と同様である。本明細書においては、CPUによってデータストリームを出力する方式が、本出願のこの実施形態において、再び説明されることはない。
いくつかの可能な実装においては、プロトコルスタック、UDPプロキシ、およびFECソフトウェアインターフェースは、CPU内に配備されないことがあるが、NPエンジン内に配備される。この場合、エンコーディング処理およびデコーディング処理において、NPエンジンと、ターゲットハードウェアエンジンと、メモリとの間の対話が、実行される必要がある。CPUは、ターゲットハードウェアエンジンおよびメモリと対話する必要はない。いくつかの可能な実装においては、エンコーディングおよびデコーディングを通して、エンコードした行列、またはエンコードされる行列を獲得した後、ターゲットハードウェアエンジンは、エンコードした行列内の元のパケットおよび冗長パケットを、FECパケット内に直接的にカプセル化し、FECパケットを、ネットワークデバイスに出力し得、または元のパケットを、エンコードされる行列から直接的に獲得し、元のパケットを、ネットワークデバイスに出力し得る。いくつかの可能な実装においては、ターゲットハードウェアエンジンは、さらに、エンコードした行列またはエンコードされる行列を、FECソフトウェアインターフェースに直接的に送信し得、FECソフトウェアインターフェースは、エンコードした行列内の元のパケットおよび冗長パケットを、FECパケット内にカプセル化し、FECパケットを、ネットワークデバイスに出力する。代替として、FECソフトウェアインターフェースは、元のパケットを、エンコードされる行列から獲得し、元のパケットを、ネットワークデバイスに出力する。
結論において、ネットワークデバイスのエンコーディング処理は、以下のように要約される。任意のデータストリームを獲得した後、ネットワークデバイスは、任意のデータストリームを、メモリ内に記憶し得る。任意のデータストリーム内のパケットが、エンコードされるパケットである場合、ネットワークデバイス内のプロセッサは、複数のエンコードされるパケットをエンコードすることを示すために使用される、エンコーディングタスクを生成し得、プロセッサは、エンコーディングタスクを、メモリに配送し得る。ネットワークデバイス内のターゲットハードウェアエンジンは、メモリ内のエンコーディングタスクを読み出し、複数のエンコードされるパケットの冗長パケットを獲得するために、エンコーディングタスクに基づいて、メモリ内に記憶された複数のエンコードされるパケットに対して、FECエンコーディングを実行し、その後、冗長パケットを、メモリ内に記憶する。その後、プロセッサは、複数のエンコードされるパケットと、複数のエンコードされるパケットの冗長パケットとを、メモリから獲得し、獲得されたパケットを、FECパケット内にカプセル化し得る。処理工程をさらに説明するために、図8Aおよび図8Bに示される、本出願の実施形態によるパケット処理方法のフローチャートを参照する。第1のネットワークデバイスは、プロセッサとターゲットハードウェアエンジンとを含み得、方法の手順は、以下のステップ801から812を含み得る。
801:第1のネットワークデバイスは、処理される第1のデータストリーム内のM個の元のパケットを獲得する。
第1のネットワークデバイスは、複数のデータストリームを獲得し得る。第1のデータストリームは、複数のデータストリームのうちの任意のデータストリームであり、第1のデータストリームは、複数のパケットを含み得る。データストリームは、ビデオデータストリーム、オーディオデータストリーム、またはテキストデータストリームなどであり得る。第1のデータストリームのタイプは、本出願のこの実施形態においては、特に限定されない。
M個の元のパケットは、第1のデータストリーム内の任意のM個の連続した元のパケットである。第1のネットワークデバイスは、毎回、M個の元のパケットをエンコードし、1回のエンコーディングが完了した後、第1のデータストリーム内の他のM個の元のパケットをエンコードし得る。いくつかの可能な実装においては、ステップ801は、ステップ8011およびステップ8012に示される処理を使用することによって、実施され得る。
ステップ8011:第1のネットワークデバイスは、第1のデータストリーム内の受信された元のパケットを、第1のネットワークデバイスのメモリ内に記憶する。
第1のデータストリーム内の1つの元のパケットを受信した後に毎回、第1のネットワークデバイスのGE/GXEネットワークポートは、元のパケットを、PPEに送信する。元のパケットを受信した後に毎回、PPEは、元のパケットを、メモリ内に記憶し、元のパケットの記憶アドレスを記録する。
ステップ8012:メモリ内の、第1のデータストリーム内のエンコードされていない元のパケットの数量が、M以上である場合、プロセッサは、M個の元のパケットを、第1のデータストリーム内のエンコードされていない元のパケットから獲得する。
プロセッサは、第1のネットワークデバイス内のCPUおよびNPエンジンのうちの少なくとも一方を含み得る。各回のエンコーディングの後、第1のネットワークデバイスは、M個のエンコードされていない元のパケットの次のグループをエンコードする。したがって、第1のデータストリーム内の元のパケットについて、M個の元のパケットが、第1のネットワークデバイスのメモリ内に新たにバッファリングされるたびに、新たにバッファリングされたM個の元のパケットは、第1のデータストリーム内の次回にエンコードされるM個の元のパケットとして、使用され得る。
いくつかの可能な実装においては、第1のネットワークデバイスは、さらに、事前設定される期間を設定し得る。第1のデータストリーム内の元のパケットについて、1つの事前設定された期間が、経過するたびに、第1のネットワークデバイスは、事前設定された期間内に新たに記憶された元のパケットを、次回にエンコードされる元のパケットとして使用する。いくつかの可能な実装においては、Mの値は、エンコーディングのたびに、変化し得る。例えば、第1のネットワークデバイスは、1つの事前設定された期間が経過した後、5つの元のパケットを獲得し、この場合、Mは、5に等しく、その後、次の事前設定された期間が経過した後、第1のネットワークデバイスは、4つの元のパケットを新たに獲得し、この場合、Mは、4に等しい。事前設定された期間は、本出願のこの実施形態においては、特に限定されない。
PPEが、1つの元のパケットを、メモリ内に記憶した後、PPEは、元のパケットに対応する記憶完了メッセージを、NPエンジンに送信し、記憶完了メッセージは、第1のデータストリームのストリーム識別子と、元のパケットの記憶アドレスとを搬送し得、ストリーム識別子は、第1のデータストリームの名前または番号であり得、元のパケットが属するデータストリームを示すために使用される。いくつかの可能な実装においては、第1のネットワークデバイスは、サービス要件に基づいて、受信された各データストリームについての対応するプライオリティを設定し、第1のネットワークデバイスは、好ましくは、プライオリティがより高いデータストリームを処理し得る。それに対応して、記憶完了メッセージは、さらに、第1のデータストリームに対応するプライオリティを搬送し得る。このようにして、第1のネットワークデバイス内の各モジュールは、プライオリティに基づいて、対応するデータストリーム内の元のパケットを処理し得る。ユーザは、第1のネットワークデバイス上に、プライオリティ情報テーブルを構成し得、プライオリティ情報テーブルは、複数のプライオリティを降順で含み、プライオリティの各々は、1つのサービスタイプに対応する。第1のデータストリームを受信したとき、第1のネットワークデバイスは、第1のデータストリーム内の元のパケット内で搬送されるデータに基づいて、第1のデータストリームのサービスタイプを決定し、第1のネットワークデバイスが、第1のデータストリームについての対応するプライオリティを設定し得るように、第1のデータストリームのサービスタイプに対応するプライオリティを、プライオリティ情報テーブルから決定し得る。
記憶完了メッセージを受信した後、NPエンジンは、記憶完了メッセージを、プロトコルスタックに送信し得る。したがって、UDPプロキシは、各記憶完了メッセージを、プロトコルスタックから収集し得る。UDPプロキシによって新たに収集された記憶完了メッセージの数量が、Mであるとき、新たに収集されたM個の記憶完了メッセージは、M個のエンコードされるパケットが、新たにメモリ内に記憶されたことを示し得る。したがって、UDPプロキシは、M個の記憶完了メッセージに対応するM個の元のパケットを、M個のエンコードされる元のパケットとして使用し得る。
802:プロセッサは、処理される第1のデータストリーム内のM個の元のパケットに基づいて、第1のエンコーディングタスクを生成し、Mは、正の整数であり、第1のエンコーディングタスクは、M個の元のパケットをエンコードすることを示すために使用される。
ステップ802は、第1のネットワークデバイスのプロセッサ内のFECソフトウェアインターフェースによって実行され得る。UDPプロキシが、M個の記憶完了メッセージを収集するたびに、UDPプロキシは、収集されたM個の記憶完了メッセージを、プロセッサ内のFECソフトウェアインターフェースに送信し得る。M個の記憶完了メッセージを受信した後、FECソフトウェアインターフェースは、ステップ802を実行し得る。
FECソフトウェアインターフェースは、M個の元のパケットの記憶アドレスを、M個の記憶完了メッセージから獲得し得、M個の元のパケットの記憶アドレスは、M個の元のパケットの各々の記憶アドレスを含む。FECソフトウェアインターフェースは、M個の元のパケットの記憶アドレスと、エンコーディングパラメータとに基づいて、エンコーディングタスクを生成し得、エンコーディングタスクは、ターゲットハードウェアエンジンが、記憶アドレスに基づいて、M個の元のパケットを、メモリから獲得し、獲得されたM個の元のパケットを、エンコーディングパラメータに基づいて、エンコードし得るように、M個の元のパケットの記憶アドレスと、エンコーディングパラメータとを含み得る。いくつかの可能な実装においては、第1のエンコーディングタスクは、M個の元のパケットの記憶アドレスを含まないことがあるが、ターゲットハードウェアエンジンが、M個の元のパケットを、第1のエンコーディングタスクから直接的に獲得し得るように、M個の元のパケットを含み得る。第1のデータストリームが、プライオリティを有するとき、第1のエンコーディングタスクは、第1のデータストリームのプライオリティをさらに含み得る。エンコーディングタスクは、各パケットをエンコードすることを示すために使用される、エンコーディング識別子をさらに搬送し得る。エンコーディング識別子を表す方式は、本出願のこの実施形態においては、特に限定されない。
エンコーディングパラメータは、第1のネットワークデバイスによって事前設定されたエンコーディングパラメータであり得る。第1のネットワークデバイスは、第1のネットワークデバイスが、エンコーディングを実行するたびに、エンコーディングパラメータを使用し得る。もちろん、第1のネットワークデバイスは、パケット伝送ステータスに基づいて、エンコーディングパラメータを適切に調整し得る。第1のネットワークデバイスが、毎回、同じエンコーディングパラメータに基づいて、エンコーディングを実行するとき、第1のパケットの数量は、エンコーディングパラメータ内の元のパケットの数量Mであり得る。第1のネットワークデバイスは、さらに、現在のCPUオーバーヘッド、またはターゲットハードウェアエンジンの現在のコンピューティング能力に基づいて、エンコーディングパラメータ内の元のパケットの数量Mを動的に変更し得る。例えば、CPUオーバーヘッドが、相対的に小さいとき、またはターゲットハードウェアエンジンが、現在、十分なコンピューティング能力を有するとき、第1のネットワークデバイスは、元のパケットの数量を適切に増加させ得、言い換えると、第1のネットワークデバイスは、エンコーディングがそれらに対して一度に実行されるパケットを適切に増加させ得る。逆に、第1のネットワークデバイスは、元のパケットの数量を適切に減少させ得、言い換えると、第1のネットワークデバイスは、エンコーディングがそれらに対して一度に実行されるパケットを適切に減少させ得る。
第1のネットワークデバイスは、さらに、現在のネットワークパケットロス率に基づいて、モデルパラメータ内の冗長パケットの数量Rを動的に調整し得る。例えば、ネットワークパケットロス率が、相対的に高いとき、第1のネットワークデバイスは、冗長パケットの数量Rを適切に増加させ得、言い換えると、第1のネットワークデバイスは、すべての失われたパケットを後で復元するために、1回のエンコーディング処理において生成される冗長パケットの数量を適切に増加させ得る。ネットワークパケットロス率が、相対的に低いとき、第1のネットワークデバイスは、冗長パケットの数量Rを適切に減少させ得、言い換えると、第1のネットワークデバイスは、エンコーディング効率を向上させるために、1回のエンコーディング処理において生成される冗長パケットの数量を適切に減少させ得る。
第1のネットワークデバイスは、エンコーディングパラメータを動的に調整し得るので、第1のネットワークデバイスのエンコーディング効率は、エンコーディングパラメータを調整することによって、向上させ得る。
803:プロセッサは、第1のエンコーディングタスクを、第1のターゲット送信キュー内に記憶し、第1のターゲット送信キューは、第1のネットワークデバイスの処理されるデータストリームのエンコーディングタスクを、記憶するために使用され、第1のネットワークデバイスの処理されるデータストリームは、第1のデータストリームを含む。
ステップ803は、プロセッサ内のFECソフトウェアインターフェースによって実行され得る。第1のネットワークデバイスは、複数の送信キューを事前設定し得る。送信キューの各々は、第1のネットワークデバイスの処理されるデータストリームのエンコーディングタスクを、記憶するために使用される。第1のターゲット送信キューは、複数の送信キューのうちのいずれか1つであり得る。複数の送信キューは、第1のネットワークデバイスのメモリ、プロセッサ、およびターゲットハードウェアエンジンのうちのいずれか1つの中に配置され得る。
いくつかの可能な実装においては、第1のネットワークデバイスは、送信キューの各々についてのプライオリティを設定し、送信キューの各々は、プライオリティが同じであるデータストリームのエンコーディングタスクを記憶するために使用される。例えば、図9は、本出願の実施形態による、ネットワークデバイスの内部対話手順の概略図である。図9においては、プライオリティがAである送信キューA、およびプライオリティがBである送信キューBが、メモリ内に存在し、プライオリティAは、プライオリティBよりも高い。この場合、送信キューAは、エンコーディングタスク3、5、6を記憶し、送信キューBは、エンコーディングタスク1、2、4を記憶する。エンコーディングタスク3、5、6は、プライオリティがAであるエンコーディングタスクであり、エンコーディングタスク1、2、4は、プライオリティがBであるエンコーディングタスクである。
いくつかの可能な実装においては、ステップ803は、プロセッサが、第1のデータストリームのプライオリティに基づいて、第1のエンコーディングタスクを、第1のターゲット送信キューに追加することを含み得、第1のターゲット送信キューのプライオリティは、第1のデータストリームのプライオリティと等しい。具体的には、FECソフトウェアインターフェースが、1つの第1のエンコーディングタスクを生成した後、FECソフトウェアインターフェースは、第1のデータストリームのプライオリティに基づいて、メモリ内の、第1のデータストリームのプライオリティに対応する第1のターゲット送信キューを決定し得る。第1のターゲット送信キュー内のエンコーディングタスクの数量が、第1のターゲット数量よりも小さいとき、FECソフトウェアインターフェースは、第1のエンコーディングタスクを、第1のターゲット送信キューに追加し、第1のターゲット数量は、第1のターゲット送信キュー内に記憶され得る、エンコーディングタスクの最大数量である。第1のターゲット送信キュー内のエンコーディングタスクの数量が、第1のターゲット数量と等しいとき、FECソフトウェアインターフェースは、第1の事前設定された期間ごとに、第1のターゲット送信キュー内のエンコーディングタスクの数量が、第1のターゲット数量よりも小さいかどうかを問い合わせる。数量が、ひとたび第1のターゲット数量より小さくなると、FECソフトウェアインターフェースは、第1のエンコーディングタスクを、第1のターゲット送信キューに追加する。第1の事前設定された期間は、本出願のこの実施形態においては、特に限定されない。ターゲットハードウェアエンジンは、エンコーディングおよびデコーディングユニットが、アイドルであるときはいつでも、第1のターゲット送信キューに問い合わせ得る。
804:ターゲットハードウェアエンジンは、第1のエンコーディングタスクを、第1のターゲット送信キューから読み出す。
ターゲットハードウェアエンジンは、ターゲットハードウェアエンジンが、第1のエンコーディングタスクを、第1のターゲット送信キューから読み出す必要があるかどうかを決定するために、最初に、プライオリティ順序に基づいて、メモリ内の送信キューの各々にポーリングを行い得る。いくつかの可能な実装においては、ターゲットハードウェアエンジンは、送信キューの各々の中にエンコーディングタスクが存在するかどうかを、送信キューのプライオリティ順序に基づいて、順番に問い合わせ、送信キューの各々は、1つのプライオリティに対応する。送信キューの各々において、ターゲットハードウェアエンジンは、プライオリティが第1のターゲット送信キューのそれよりも高いキュー内に、エンコーディングタスクが存在しないとき、第1のエンコーディングタスクを、第1のターゲット送信キューから読み出す。
ターゲットハードウェアエンジンが、送信キューの各々にポーリングを行う処理は、以下の通りであり得る。ターゲットハードウェアエンジンは、送信キューのうちでプライオリティが最も高い、第1の送信キューに問い合わせる。エンコーディングタスクが、第1の送信キュー内に存在するとき、ターゲットハードウェアエンジンは、1つのエンコーディングタスクを、第1の送信キューのキュー先頭から獲得し、エンコーディングタスクに基づいて、以下のステップ805を実行する。ターゲットハードウェアエンジンは、第2の事前設定された期間ごとに、第1の送信キューに再び問い合わる。エンコーディングタスクが、第1の送信キュー内にまだ存在するとき、ターゲットハードウェアエンジンは、新しいエンコーディングタスクを、第1の送信キューのキュー先頭から再び獲得する。第1の送信キューが、エンコーディングタスクを記憶しなくなるまで、ターゲットハードウェアエンジンは、複数の送信キューのうちの第2のプライオリティに対応する第2の送信キューが、エンコーディングタスクを有するかどうかを問い合わせる。第2の送信キューが、エンコーディングタスクを有するとき、ターゲットハードウェアエンジンは、1つのエンコーディングタスクを、第2の送信キューから獲得し、以下のステップ805を実行する。第2のプライオリティは、最高のプライオリティの次のプライオリティである。第2の送信キューが、エンコーディングタスクを有さないとき、ターゲットハードウェアエンジンは、類推されるように、プライオリティ順序に基づいて、プライオリティが第2のプライオリティの次の送信キューに問い合わせる。
送信キューのキュー先頭にあるエンコーディングタスクが、ターゲットハードウェアエンジンによって獲得された後、送信キュー内の次のエンコーディングタスクが、送信キューのキュー先頭になる。このようにして、ターゲットハードウェアエンジンは、次回は、次のエンコーディングタスクを、送信キューのキュー先頭から獲得し得る。
805:ターゲットハードウェアエンジンは、第1のエンコーディングタスク内のM個の元のパケットの記憶アドレスに基づいて、M個の元のパケットを、メモリから獲得する。
第1のエンコーディングタスクを獲得した後、ターゲットハードウェアエンジン内のコントローラは、M個の元のパケットの記憶アドレスを、第1のエンコーディングタスクから獲得し得、ターゲットハードウェアエンジンは、第1のパケット獲得要求を、メモリに送信し得る。第1のパケット獲得要求は、M個の元のパケットの記憶アドレスを搬送する。第1のパケット獲得要求を受信した後、メモリは、記憶アドレス内に記憶されたM個の元のパケットを、ターゲットハードウェアエンジンに送信する。M個の元のパケットを受信した後、ターゲットハードウェアエンジンは、データ処理ユニットが、M個の元のパケットを処理するように、M個の最初のパケットを、バッファユニット内にバッファリングする。もちろん、第1のエンコーディングタスクが、M個の元のパケットを直接的に搬送する場合、ターゲットハードウェアエンジンは、M個の元のパケットを、メモリから獲得することなく、M個の元のパケットを、第1のエンコーディングタスクから直接的に獲得し得る。
806:ターゲットハードウェアエンジンは、R個の冗長パケットを獲得するために、第1のエンコーディングタスクに基づいて、M個の元のパケットに対して、前方誤り訂正FECエンコーディングを実行し、Rは、正の整数である。
M個の元のパケットを獲得した後、ターゲットハードウェアエンジンは、第1のエンコーディングタスク内のエンコーディングパラメータに基づいて、M個の元のパケットに対して、前方誤り訂正FECエンコーディングを実行し得る。可能な方式においては、ターゲットハードウェアエンジン内のデータ処理ユニットは、M個の等長パケットを獲得するために、エンコーディングパラメータ内の元のパケットの数量Mに基づいて、M個の元のパケットに対して、パディング処理を実行し得る。データ処理ユニットは、M個の等長パケットを使用することによって、エンコードされる行列を形成し、エンコードされる行列の1つの行は、1つの等長パケットであり、また、データ処理ユニットは、エンコードされる行列を、エンコーディングおよびデコーディングユニットに送信する。エンコーディングおよびデコーディング行列ユニットは、R個の冗長パケットを獲得し、ステップ806を実施するために、対応する生成行列と、エンコードされる行列とに対する乗算計算を実行する。図1は、生成行列と、エンコードされる行列とに対する乗算計算を実行する処理を説明している。本明細書においては、処理が、本出願のこの実施形態において、再び説明されることはない。
生成行列は、ターゲットハードウェアエンジン内の行列ジェネレータによって生成され得、エンコーディングおよびデコーディングユニットに送られ得る。行列ジェネレータが対応する生成行列を生成する処理は、以下の通りである。ターゲットハードウェアエンジン内のコントローラは、冗長パケットの数量Rと、元のパケットの数量Mとを、第1のエンコーディングタスクから獲得し得、獲得された冗長パケットの数量Rと、獲得された元のパケットの数量Mとを、行列ジェネレータに送信し得る。行列ジェネレータは、冗長パケットの数量Rと、元のパケットの数量Mとに基づいて、(M+R)×M型の生成行列を生成し、(M+R)×M型の生成行列を、エンコーディングおよびデコーディングユニットに送信する。
807:ターゲットハードウェアエンジンは、R個の冗長パケットを、メモリ内に記憶する。
R個の冗長パケットを生成した後、ターゲットハードウェアエンジン内のエンコーディングおよびデコーディングユニットは、R個の冗長パケットを、バッファユニット内にバッファリングし、バッファユニットは、第1のパケット記憶要求を、メモリに送信する。第1のパケット記憶要求は、R個の冗長パケットの記憶アドレスと、R個の冗長パケットとを搬送し、R個の冗長パケットの記憶アドレスは、冗長パケットの各々の記憶アドレスを含む。第1のパケット記憶要求を受信した後、メモリは、R個の冗長パケットを、R個の冗長パケットの記憶アドレス内に記憶する。
808:R個の冗長パケットが、記憶された後、ターゲットハードウェアエンジンは、M個の元のパケットの第1のエンコーディング完了情報を獲得するために、R個の冗長パケットの記憶アドレスを、第1のエンコーディングタスクに追加し、第1のエンコーディング完了情報は、M個の元のパケットのエンコーディングが完了したことを示すために使用される。
ターゲットハードウェアエンジンは、さらに、第1のエンコーディングタスク内のエンコーディング識別子を、エンコーディング完了識別子で置換し得、エンコーディング完了識別子は、元のパケットのエンコーディングが完了したことを表すために使用される。エンコーディング完了識別子を表す方式は、本出願のこの実施形態においては、特に限定されない。第1のエンコーディングタスクは、M個の最初のパケットの記憶アドレスと、エンコーディングパラメータとを含むので、第1のエンコーディング完了情報は、R個の冗長パケットの記憶アドレスと、M個の元のパケットの記憶アドレスと、エンコーディングパラメータとを含み得る。第1のエンコーディングタスクが、第1のデータストリームのプライオリティを搬送するとき、第1のエンコーディング完了情報は、第1のデータストリームのプライオリティをさらに含み得る。
809:ターゲットハードウェアエンジンは、第1のエンコーディング完了情報を、第1のターゲット受信キュー内に記憶し、第1のターゲット受信キューは、第1のネットワークデバイスの処理されるデータストリームのエンコーディング完了情報タスクを記憶するために使用される。
第1のネットワークデバイスは、複数の受信キューを事前設定し得る。受信キューの各々は、第1のネットワークデバイスの処理されるデータストリームのエンコーディング完了情報を記憶するために使用される。第1のターゲット受信キューは、複数の受信キューのうちのいずれか1つであり得る。複数の受信キューは、第1のネットワークデバイスのメモリ、プロセッサ、およびターゲットハードウェアエンジンのうちのいずれか1つの中に配置され得る。
いくつかの可能な実装においては、第1のネットワークデバイスは、受信キューの各々についてのプライオリティを設定し得、受信キューの各々は、プライオリティが同じであるデータストリームのエンコーディング完了情報を、記憶するために使用される。例として、図9が、依然として使用される。図9においては、プライオリティがAである受信キューA、およびプライオリティがBである受信キューBが、存在し、プライオリティAは、プライオリティBよりも高い。この場合、受信キューAは、(図9において、簡潔に「完了情報3、5、6」と呼ばれる)タスク完了情報3、5、6を記憶し、受信キューBは、タスク完了情報1、2、4を記憶し、タスク完了情報3、5、6は、プライオリティがAであるエンコーディング完了情報であり、(図9において、簡潔に「完了情報3、5、6」と呼ばれる)タスク完了情報1、2、4は、プライオリティがBであるエンコーディング完了情報である。
いくつかの可能な実装においては、ターゲットハードウェアエンジンは、第1のデータストリームのプライオリティに基づいて、第1のエンコーディング完了情報を、メモリ内の第1のターゲット受信キューに追加し、第1のターゲット受信キューのプライオリティは、第1のデータストリームのプライオリティと等しい。具体的には、ターゲットハードウェアエンジンは、第1のデータストリームのプライオリティに基づいて、メモリ内の、第1のデータストリームのプライオリティに対応する第1のターゲット受信キューを決定し得る。第1のターゲット受信キュー内のエンコーディング完了情報の量が、第2のターゲット数量よりも少ないとき、ターゲットハードウェアエンジンは、第1のエンコーディング完了情報を、第1のターゲット受信キューに追加し、第2のターゲット数量は、第1のターゲット受信キュー内に記憶され得る、エンコーディング完了情報の最大量である。第1のターゲット受信キュー内のエンコーディング完了情報の量が、第2のターゲット数量と等しいとき、FECソフトウェアインターフェースは、第2の事前設定された期間ごとに、第1のターゲット受信キュー内のエンコーディング完了情報の量が、第2のターゲット数量よりも小さいかどうかを問い合わせる。量が、ひとたび第2のターゲット数量より小さくなると、FECソフトウェアインターフェースは、第1のエンコーディング完了情報を、第1のターゲット受信キューに追加する。第2の事前設定された期間は、本出願のこの実施形態においては、特に限定されない。
810:プロセッサは、第1のエンコーディング完了情報を、第1のターゲット受信キューから読み出す。
ステップ810は、プロセッサ内のFECソフトウェアインターフェースによって実行され得る。FECソフトウェアインターフェースは、プライオリティ順序に基づいて、受信キューの各々にポーリングを行い得る。FECソフトウェアインターフェースは、最初に、エンコーディング完了情報が、第1のターゲット受信キューから獲得され得るかどうかを、ポーリング方式で、決定し得る。いくつかの可能な実装においては、FECソフトウェアインターフェースは、受信キューの各々が、他のエンコーディング完了情報を有するかどうかを、プライオリティ順序に基づいて、順番に問い合わせる。受信キューの各々は、1つのプライオリティに対応する。第1の受信キューの各々において、FECソフトウェアインターフェースは、プライオリティが第1のターゲット受信キューのそれよりも高いキュー内に、他のエンコーディング完了情報が存在しないとき、第1のエンコーディング完了情報を、第1のターゲット受信キューから獲得する。
FECソフトウェアインターフェースが、受信キューの各々にポーリングを行う処理は、以下の通りであり得る。FECソフトウェアインターフェースは、受信キューのうちでプライオリティが最も高い、第1の受信キューに問い合わせる。第1の受信キューが、エンコーディング完了情報を有するとき、FECソフトウェアインターフェースは、エンコーディング完了情報の1つを、第1の受信キューのキュー先頭から獲得し、エンコーディング完了情報に基づいて、以下のステップ811を実行する。FECソフトウェアインターフェースは、第3の事前設定された期間ごとに、第1の受信キューに再び問い合わせる。第1の受信キューが、エンコーディング完了情報をまだ記憶しているとき、FECソフトウェアインターフェースは、エンコーディング完了情報の新しい1つを、第1の受信キューのキュー先頭から獲得する。第1の送信キューが、エンコーディングタスクを記憶しなくなるまで、FECソフトウェアインターフェースは、複数の第1の受信キューのうちの次のプライオリティに対応する第2の受信キューが、エンコーディング完了情報を有するかどうかを問い合わせる。第2の受信キューが、エンコーディング完了情報を記憶しているとき、FECソフトウェアインターフェースは、エンコーディング完了情報の1つを、第2の受信キューから獲得し、以下のステップ811を実行する。第2の受信キューが、エンコーディング完了情報を記憶していないとき、FECソフトウェアインターフェースは、類推されるように、プライオリティ順序に基づいて、プライオリティが第2のプライオリティの次の第3の受信キューに問い合わせる。
第1の受信キュー内のエンコーディング完了情報が、FECソフトウェアインターフェースによって獲得された後、第1の受信キュー内のエンコーディング完了情報の次のものが、第1の受信キューのキュー先頭になる。このようにして、FECソフトウェアインターフェースは、次回は、エンコーディング完了情報の次のものを、第1の受信キューのキュー先頭から獲得する。
811:プロセッサは、第1のエンコーディング完了情報に基づいて、M個の元のパケットと、R個の冗長パケットとを、メモリから獲得する。
ステップ811は、プロセッサ内のFECソフトウェアインターフェースによって実行され得る。FECソフトウェアインターフェースは、R個の冗長パケットの記憶アドレスと、M個の元のパケットの記憶アドレスと、エンコーディングパラメータとを、第1のエンコーディング完了情報から獲得し得る。FECソフトウェアインターフェースは、第2のパケット獲得要求を、メモリに送信し、第2のパケット獲得要求は、R個の冗長パケットの記憶アドレスと、M個の元のパケットの記憶アドレスとを搬送する。第2のパケット獲得要求を受信したとき、メモリは、第2のパケット獲得要求内のR個の冗長パケットの記憶アドレスと、M個の元のパケットの記憶アドレスとに基づいて、R個の冗長パケットと、M個の元のパケットとを、FECソフトウェアインターフェースに返す。
812:プロセッサは、M個の元のパケットと、R個の冗長パケットとを、第2のネットワークデバイスに送信する。
ステップ812は、プロセッサ内のFECソフトウェアインターフェースによって実行され得る。メモリによって返されたR個の冗長パケットと、M個の元のパケットとを獲得した後、FECソフトウェアインターフェースは、第1のエンコーディング完了情報内のエンコーディングパラメータに基づいて、R個の冗長パケットと、M個の元のパケットとを、FECパケット内にカプセル化する。いくつかの可能な実装においては、ステップ812は、以下のステップ8121からステップ8123に示される処理を使用することによって、実施され得る。
ステップ8121:FECソフトウェアインターフェースは、M個の等長パケットを獲得するために、エンコーディングパラメータ内のターゲットサイズに基づいて、M個の元のパケットのうちの、サイズがターゲットサイズよりも小さいパケットに対して、パディング処理を実行し、等長パケットの各々のサイズが、ターゲットサイズである。
ステップ8122:FECソフトウェアインターフェースは、M個の元のFECパケットを獲得するために、FECパケットヘッダを、等長パケットの各々に追加し、R個の冗長FECパケットを獲得するために、FECパケットヘッダを、冗長パケットの各々に追加し、FECパケットヘッダは、M個の元のパケットのエンコーディングパラメータを搬送する。
例えば、図10は、本出願の実施形態によるFECパケットの概略図である。図10におけるFECパケットのペイロードパケットが、第1のデータストリーム内の元のパケットによって形成された等長パケットであるとき、FECパケットは、元のFECパケットである。FECパケットのペイロードパケットが、冗長パケットであるとき、FECパケットは、冗長FECパケットである。
FECパケットヘッダは、M個の元のパケットのエンコーディングステータスを示すために使用される。FECパケットヘッダは、M個の元のパケットのエンコーディングパラメータを搬送する。例えば、図10におけるFECパケットヘッダは、ここではM=4である、元のパケットの数量Mと、ここではR=2である、冗長パケットの数量Rと、ここではL=30MBである、ターゲットサイズLとを搬送する。FECパケットヘッダは、M個の元のパケットのターゲット識別子をさらに搬送し得、ターゲット識別子は、第1のデータストリーム内の元のパケットに対して実行されるエンコーディングの回数の数量を示すために使用される。例えば、図10におけるFECパケットヘッダ内のターゲット識別子が、1.2であるとき、それは、第1のネットワークデバイスが、第1のデータストリーム1内のパケットに対して、2回目のエンコーディングを実行し、M個の元のパケットは、2回目のエンコーディングのために使用される、第1のデータストリーム内の元のパケットであることを示す。
FECパケットヘッダは、プライオリティ識別子と、アルゴリズム識別子と、第1のデータストリーム内のM個の元のパケットの各々のシーケンス番号と、エンコードされる行列内の等長パケットの各々のシーケンス番号と、エンコードした行列内の冗長パケットの各々のシーケンス番号とをさらに搬送し得る。プライオリティ識別子は、第1のデータストリームのプライオリティを示すために使用され、アルゴリズム識別子は、エンコーディング処理において第1のネットワークデバイスによって使用されるアルゴリズムを示すために使用され、エンコードされる行列内の等長パケットの各々のシーケンス番号は、エンコードされる行列内の等長パケットの各々の行番号であり、エンコードした行列内の冗長パケットの各々のシーケンス番号は、エンコードした行列内の冗長パケットの各々の行番号である。例えば、図10におけるFECヘッダにおいては、第1のデータストリーム内の元のパケットA0からA3のシーケンス番号は、それぞれ、10、11、12、13であり、等長パケットM0からM3のシーケンス番号は、それぞれ、0、1、2、3であり、冗長パケットR0、R1のシーケンス番号は、それぞれ、4、5である。図10におけるFECパケットヘッダの例は、図1に示されるエンコーディング計算処理に基づいている。
ステップ8123:プロセッサは、M個の元のFECパケットと、R個の冗長FECパケットとを送信する。
M個の元のFECパケットとR個の冗長FECパケットのパケットヘッダは、同じであるので、M個の元のFECパケットとR個の冗長FECパケットは、FECパケットのグループと見なされ得る。M個の元のFECパケットおよびR個の冗長FECパケットのうちの任意のFECパケットについて、任意のFECパケットを獲得した後に毎回、FECソフトウェアインターフェースは、任意のFECパケットを、第1のネットワークデバイス内のTMエンジンに出力する。FECソフトウェアインターフェースは、FECパケットを、TMエンジンに連続的に出力し得るので、TMエンジンは、第1のデータストリームに対応する、エンコードしたストリームを形成し得る。エンコードしたストリームを操作した後、TMエンジンは、操作されたエンコードしたストリームを、PPEに出力する。PPEは、操作されたエンコードしたストリームを、GE/GXEネットワークポートに転送し、GE/GXEネットワークポートは、第2のネットワークデバイスが、エンコードしたストリームを獲得することができるように、操作されたエンコードしたストリームを、第2のネットワークデバイスに出力する。
エンコーディング処理における、第1のネットワークデバイス内のプロセッサと、ターゲットハードウェアエンジンと、メモリとの間の対話ステータスをさらに説明するために、図11に示される、本出願の実施形態によるFECエンコーディングのフローチャートを参照する。手順は、具体的には、ステップ1101からステップ11106を含む。
ステップ1101:UDPプロキシは、記憶完了メッセージを、FECソフトウェアインターフェースに送信する。
ステップ1102:FECソフトウェアインターフェースによって受信された記憶完了メッセージの数量が、Mと等しいとき、FECソフトウェアインターフェースは、第1のエンコーディングタスクを生成し、第1のエンコーディングタスクを、メモリのタスクバッファに送信する。
タスクバッファは、複数の送信キューと、複数の受信キューとを含み、FECソフトウェアインターフェースは、第1のエンコーディングタスクを、第1のエンコーディングタスクのプライオリティに対応する第1のターゲット送信キューに送信し得る。
ステップ1103:ターゲットハードウェアエンジンは、第1のエンコーディングタスクを、タスクバッファ内の第1のターゲット送信キューから獲得し、第1のエンコーディングタスク内の記憶アドレスに基づいて、M個の元のパケットを、メモリから読み出す。
ステップ1104:ターゲットハードウェアエンジンは、R個の冗長パケットを獲得するために、読み出されたM個の元のパケットに対して、FECエンコーディングを実行し、ターゲットハードウェアエンジンは、R個の冗長パケットを、メモリ内に記憶し、第1のエンコーディング完了情報を、タスクバッファ内の第1のターゲット受信キューに送信する。
ステップ1105:FECソフトウェアインターフェースは、第1のエンコーディング完了情報を、タスクバッファ内の第1のターゲット受信キューから読み出し、第1の完了情報に基づいて、メモリ内のM個の元のパケットと、R個の冗長パケットとを読み出し、FECパケットを獲得するために、FECパケットヘッダを、M個の元のパケットの各々と、R個の冗長パケットの各々とに別々にカプセル化する。
ステップ1106:FECソフトウェアインターフェースは、FECパケットを送信する。
ステップ807からステップ812に示される処理は、ターゲット処理エンジン、メモリ、およびプロセッサが、M個の元のパケットと、R個の冗長パケットとを、第2のネットワークデバイスに協力して送信する処理である。いくつかの可能な実装においては、ターゲット処理エンジンは、さらに、M個の元のパケットと、R個の冗長パケットとを、プロセッサに直接的に送信し得、プロセッサは、M個の元のパケットと、R個の冗長パケットとを伝送するために、8122および8123に示される処理を実行する。いくつかの可能な実装においては、M個の元のパケットと、R個の冗長パケットとを伝送するために、ターゲット処理エンジンが、代替として、8122および8123に示される処理を実行し得る。
本出願のこの実施形態において提供される方法によれば、FECエンコーディングは、プロセッサではなく第1のネットワークデバイスのターゲットハードウェアエンジンにおいて、第1のデータストリーム内のM個の元のパケットに対して、直接的に実行される。したがって、CPUのオーバーヘッドは、低減させることができ、第1のネットワークデバイスのエンコーディング効率は、向上させることができる。このようにして、第1のネットワークデバイスは、パケット伝送処理における大きいスループットの要件を容易に満たすことができる。加えて、第1のネットワークデバイスは、エンコーディングパラメータを調整することによって、第1のネットワークデバイスのエンコーディング効率が、向上させられるように、エンコーディングパラメータを動的に調整し得る。
第2のネットワークデバイスが、エンコードしたストリームを獲得した後、エンコードしたストリーム内の元のFECパケットが、失われている場合、第2のネットワークデバイスは、失われたFECパケットを復元するために、失われていないFECパケットをデコードし得る。処理工程は、以下の通りであり得る。いずれかのエンコードしたストリームを獲得した後、第2のネットワークデバイスは、いずれかのエンコードしたストリームを、メモリ内に記憶し得る。いずれかのエンコードしたストリーム内のFECパケットのいずれかのグループ内の元のFECパケットの数量が、エンコーディング中の元のパケットの数量Mよりも少ない場合、それは、伝送処理において、FECパケットのそのいずれかのグループ内において、パケットロスが発生したことを示す。第2のネットワークデバイス内のプロセッサは、FECパケットのそのいずれかのグループをデコードすることを示すために使用されるデコーディングタスクを生成し得、プロセッサは、デコーディングタスクを、メモリに配送し得る。第2のネットワークデバイス内のターゲットハードウェアエンジンは、メモリ内のデコーディングタスクを読み出し、FECパケットのそのいずれかのグループ内の失われた元のパケットを復元するために、エンコーディングタスクに基づいて、メモリ内に記憶されたFECパケットのそのいずれかのグループに対して、FECエンコーディングを実行し、その後、復元された元のパケットを、メモリ内に記憶する。その後、プロセッサは、FECパケットのそのいずれかのグループ内の失われていない元のFECパケットと、復元された元のパケットとを、メモリから獲得し、失われていない元のパケットを獲得するために、失われていない元のFECパケットのFECパケットヘッダを除去し得る。処理工程をさらに説明するために、図12Aおよび図12Bに示される、本出願の実施形態によるパケット処理方法のフローチャートを参照する。第2のネットワークデバイスは、プロセッサとターゲットハードウェアエンジンとを含み得、方法の手順は、ステップ1201からステップ1213を含む。
1201:プロセッサは、FECパケットの第1のグループを、受信された第1のデータストリームから獲得し、FECパケットの第1のグループ内のすべてのFECパケットのFECパケットヘッダは、同じであり、FECパケットヘッダは、FECエンコードした元パケットの数量Mを含む。
第2のネットワークデバイスは、複数のエンコードしたストリームを獲得し得、第1のデータストリームは、複数のエンコードしたストリーム内のいずれかのエンコードしたストリームであり得、第1のデータストリームは、FECパケットの複数のグループを含み得、FECパケットの第1のグループは、FECパケットの複数のグループのうちのFECパケットのいずれかのグループである。FECパケットの第1のグループは、1回のエンコーディングが実行された後に、第1のネットワーク端末によって出力された、M個の元のFECパケットと、R個の冗長FECパケットとを含む。
第2のネットワークデバイスが、第1のデータストリームを受信し始めたとき、第2のネットワークデバイスが、第1のデータストリーム内のFECパケットを受信するたびに、第2のネットワークデバイスは、FECパケットを、第2のネットワークデバイスのメモリ内に記憶する。いくつかの可能な実装においては、第2のネットワークデバイスのGE/GXEネットワークポートが、FECパケットを受信し、FECパケットを、第2のネットワークデバイス内のPPEに送信する。PPEは、FECパケットを、メモリ内に記憶し、FECパケットの記憶アドレスを記録し、記憶完了メッセージを、第2のネットワーク端末のNPエンジンに送信し、記憶完了メッセージは、FECパケットの記憶アドレスを搬送する。記憶完了メッセージを受信した後、NPエンジンは、記憶完了メッセージを、第2のネットワークデバイスのCPU内のプロトコルスタックに送信し得る。したがって、UDPプロキシは、各記憶完了メッセージを、プロトコルスタックから収集し、収集された記憶完了メッセージを、第2のネットワークデバイスのFECソフトウェアインターフェースに送信し得る。FECソフトウェアインターフェースは、第3の事前設定された期間ごとに、各記憶完了メッセージを獲得する。FECソフトウェアインターフェースは、複数のパケットヘッダを獲得するために、各記憶メッセージで搬送された記憶アドレスに基づいて、メモリに対応する記憶アドレスにあるFECパケットのパケットヘッダを読み出す。その後、FECソフトウェアインターフェースは、同じパケットヘッダを獲得するために、複数のパケットヘッダを比較し、パケットヘッダが同じであるFECパケットを、FECパケットのグループとして決定する。言い換えると、第1のデータストリーム内のFECパケットについて、第3の事前設定された期間が、経過するたびに、第2のネットワークデバイスは、第3の事前設定された期間内に新たに記憶されたFECパケットのうち、FECパケットヘッダが同じであるパケットを、FECパケットの第1のグループとして使用する。第3の事前設定された期間は、本出願のこの実施形態においては、特に限定されない。なぜなら、FECパケットヘッダは、ターゲット識別子を搬送し、ターゲット識別子は、エンコーディングの回数の数量を示すために使用されるからである。いくつかの可能な実装においては、複数のFECパケットのパケットヘッダ内のターゲット識別子が、同じであるとき、複数のFECパケットが、同じ回のエンコーディングの後に獲得されたパケットであることも示され得る。言い換えると、複数のFECパケットは、FECパケットのグループである。
1202:FECパケットの第1のグループ内の元のパケットの数量が、元のパケットの数量Mよりも小さいとき、プロセッサは、FECパケットの第1のグループに基づいて、第1のデコーディングタスクを生成し、第1のデコーディングタスクは、FECパケットの第1のグループをデコードすることを示すために使用される。
ステップ1202は、プロセッサ内のFECソフトウェアインターフェースによって実行され得る。FECソフトウェアインターフェースが、FECパケットの第1のグループを決定した後、第2のネットワークデバイスは、エンコーディングパラメータを、FECパケットの第1のグループのうちの1つのFECパケットのパケットヘッダから獲得し得る。エンコーディングパラメータ内の元のパケットの数量Mは、FECパケットの第1のグループ内に最初に含まれる元のFECパケットの数量である。元のFECパケットの各々は、エンコーディングの間の1つの元のパケットに対応するので、FECパケットの第1のグループ内の元のFECパケットの数量が、元のパケットの数量Mよりも小さいとき、言い換えると、FECパケットの第1のグループ内の元のパケットの数量が、元のパケットの数量Mよりも小さいとき、それは、FECパケットの第1のグループ内の少なくとも1つの元のFECパケットが、失われたことを示す。言い換えると、第1のネットワークデバイスが、FECパケットの第1のグループを、第2のネットワークデバイスに伝送する処理において、いくつかの元のFECパケット、すなわち、エンコーディングの間の元のパケットが、失われている。エンコーディング前の第1のデータストリームを復元するために、FECソフトウェアインターフェースは、ターゲットハードウェアエンジンが、失われた元のFECパケットを復元するために、第1のデコーディングタスクに基づいて、FECパケットの第1のグループ内の失われていないFECパケットをデコードするように、第1のデコーディングタスクを生成し得る。
第1のデコーディングタスクは、ターゲットハードウェアエンジンが、FECパケットの第1のグループの記憶アドレスに基づいて、FECパケットの第1のグループを、メモリから獲得し得るように、またはターゲットハードウェアエンジンが、FECパケットの第1のグループを、第1のデコーディングタスクから直接的に獲得し得るように、FECパケットの第1のグループの記憶アドレス、またはFECパケットの第1のグループを含む。第1のデータストリームが、プライオリティを有するとき、第1のデコーディングタスクは、第1のデータストリームのプライオリティをさらに含み得る。
複数のFECパケット内の元のFECパケットの数量が、エンコーディングパラメータ内の元のパケットの数量Mと等しいとき、それは、FECパケットの第1のグループ内の元のFECパケットが、失われていないことを示し、第2のネットワークデバイスは、以下のステップ1211を実行し得る。
1203:プロセッサは、第1のデコーディングタスクを、第2のターゲット送信キュー内に記憶し、第2のターゲット送信キューは、第2のネットワークデバイスの処理されるデータストリームのデコーディングタスクを記憶するために使用され、ネットワークデバイスの処理されるデータストリームは、第1のデータストリームを含む。
ステップ1203は、プロセッサ内のFECソフトウェアインターフェースによって実行され得る。ステップ1203における処理されるデータストリームは、処理されるエンコードしたストリームである。第2のネットワークデバイスは、複数の送信キューを事前設定し得る。送信キューの各々は、第2のネットワークデバイスの処理されるデータストリームのデコーディングタスクを記憶するために使用される。第2のターゲット送信キューは、複数の送信キューのうちのいずれか1つであり得る。複数の送信キューは、第2のネットワークデバイスのメモリ、プロセッサ、およびターゲットハードウェアエンジンのうちのいずれか1つの中に配置され得る。
いくつかの可能な実装においては、第2のネットワークデバイスは、送信キューの各々についてのプライオリティを設定し得、送信キューの各々は、プライオリティが同じであるデータストリームのデコーディングタスクを記憶するために使用される。いくつかの可能な実装においては、ステップ1203は、プロセッサが、第1のデータストリームのプライオリティに基づいて、第1のデコーディングタスクを、第2のターゲット送信キューに追加することを含み得、第2のターゲット送信キューのプライオリティは、第1のデータストリームのプライオリティと等しい。プロセッサが、第1のデコーディングタスクを、第2のターゲット送信キューに追加する処理は、ステップ803において、プロセッサが、第1のエンコーディングタスクを、第1のターゲット送信キューに追加する処理と同じである。本明細書においては、第1のデコーディングタスクを第2のターゲット送信キューに追加する具体的な処理が、本出願のこの実施形態において、再び説明されることはない。
1204:ターゲットハードウェアエンジンは、第1のデコーディングタスクを、第2のターゲット送信キューから読み出す。
ターゲットハードウェアエンジンは、ターゲットハードウェアエンジンが、第1のデコーディングタスクを、第2のターゲット送信キューから読み出す必要があるかどうかを決定するために、最初に、プライオリティ順序に基づいて、メモリ内の第2の送信キューの各々にポーリングを行い得る。いくつかの可能な実装においては、ターゲットハードウェアエンジンは、送信キューの各々の中にデコーディングタスクが存在するかどうかを、送信キューのプライオリティ順序に基づいて、順番に問い合わせ、送信キューの各々は、1つのプライオリティに対応する。送信キューの各々において、ターゲットハードウェアエンジンは、プライオリティが第2のターゲット送信キューのそれよりも高いキュー内に、他のデコーディングタスクが存在しないとき、第1のデコーディングタスクを、第2のターゲット送信キューから読み出す。
ターゲットハードウェアエンジンが、送信キューの各々にポーリングを行うことによって、第1のデコーディングタスクを獲得する処理は、ステップ804において、ターゲットハードウェアエンジンが、送信キューの各々にポーリングを行うことによって、第1のエンコーディングタスクを獲得する処理と同じである。本明細書においては、送信キューの各々にポーリングを行うことによって、第1のデコーディングタスクを獲得する処理が、本出願のこの実施形態において、再び説明されることはない。
1205:ターゲットハードウェアエンジンは、第1のデコーディングタスク内のFECパケットの第1のグループの記憶アドレスに基づいて、FECパケットの第1のグループを、メモリから獲得する。
ステップ1205に示される処理は、ステップ805に示される処理と同じである。本明細書においては、ステップ1205が、本出願のこの実施形態において、再び説明されることはない。いくつかの可能な実装においては、第1のデコーディングタスクが、FECパケットの第1のグループを搬送するとき、ターゲットハードウェアエンジンは、FECパケットの第1のグループを、メモリから獲得することなく、FECパケットの第1のグループを、第1のデコーディングタスクから直接的に獲得し得る。ターゲットハードウェアエンジンによって獲得されるFECパケットの第1のグループは、FECパケットの第1のグループ内の失われていないFECパケットであり、失われていない元のFECパケットと、失われていない冗長FECパケットとを含む。
1206:ターゲットハードウェアエンジンは、FECパケットの第1のグループ内の失われた元のパケットを獲得するために、FECパケットの第1のグループ内の元のパケットと、元のパケットの冗長パケットとに対して、FECデコーディングを実行する。
ターゲットハードウェアエンジンが、FECパケットの第1のグループを獲得したとき、ターゲットハードウェアエンジン内のデータ処理ユニットは、複数の等長パケットと、少なくとも1つの冗長パケットとを獲得するために、元のFECパケットのパケットヘッダと、冗長FECパケットのパケットヘッダとを、FECパケットの第1のグループから除去し得る。等長パケットの各々は、FECパケットの第1のグループ内の失われた元のパケットである。データ処理ユニットは、複数の等長パケットと、少なくとも1つの冗長パケットとを使用することによって、復元行列を形成し、復元行列を、エンコーディングおよびデコーディングユニットに送信し得る。行列ジェネレータは、対応するターゲット検査行列を構築し、対応するターゲット検査行列を、エンコーディングおよびデコーディングユニットに送信する。エンコーディングおよびデコーディングユニットは、エンコードされる行列を獲得するために、対応するターゲット検査行列の逆行列と、復元行列とに対する乗算計算を実行し、FECパケットヘッダ内の等長パケットの各々のシーケンス番号と、冗長パケットの各々のシーケンス番号とに基づいて、どの等長パケットが失われたか、およびどの冗長パケットが失われたか、言い換えると、どの元のFECパケットが失われたか、またはどの冗長FECパケットが失われたかを決定する。したがって、失われた等長パケットが、失われた元のパケットを獲得し、ステップ1206を実施するために、エンコードされる行列から獲得され得る。図2は、ターゲット検査行列の逆行列と、復元行列との乗算計算処理を説明している。本明細書においては、その処理が、本出願のこの実施形態において、再び説明されることはない。
行列ジェネレータが、対応するターゲット検査行列を構築する処理は、以下の通りである。ターゲットハードウェアエンジン内のコントローラは、パケットヘッダ内のエンコーディングパラメータ内の冗長パケットの数量Rに基づいて、失われた冗長FECパケットの数量を決定し、失われた冗長FECパケットの数量は、冗長パケットの数量Rと、複数のFECパケットのうちの冗長FECパケットの数量との間の差である。コントローラは、FECパケットヘッダ内のエンコーディングパラメータ内の元のパケットの数量Mと、複数のFECパケットのうちの元のFECパケットの数量とに基づいて、失われた元のFECパケットの数量を決定し、失われた元のFECパケットの数量は、元のパケットの数量Mと、複数のFECパケットのうちの元のFECパケットの数量との間の差である。コントローラは、失われた冗長FECパケットの数量と、失われた元のFECパケットの数量とを、行列ジェネレータに送信する。行列ジェネレータは、失われた冗長FECパケットの数量と、失われた元のFECパケットの数量とに基づいて、対応するターゲット検査行列を構築し、対応するターゲット検査行列を、エンコーディングおよびデコーディングユニットに送信する。
ステップ1205およびステップ1206に示される処理は、FECパケットの第1のグループ内の失われた元のパケットを獲得するために、第1のデコーディングタスクに基づいて、FECパケットの第1のグループ内の元のパケットと、元のパケットの冗長パケットとに対して、FECデコーディングを実行する処理である。
1207:ターゲットハードウェアエンジンは、FECパケットの第1のグループ内の失われた元のパケットを、メモリ内に記憶する。
ステップ1207に示される処理は、ステップ807に示される処理と同じである。本明細書においては、ステップ1207が、本出願のこの実施形態において、再び説明されることはない。
1208:失われた元のパケットの記憶が、完了した後、ターゲットハードウェアエンジンは、第1のデコーディング完了情報を獲得するために、失われた元のパケットの記憶アドレスを、第1のデコーディングタスクに追加し、第1のエンコーディング完了情報は、FECパケットの第1のグループのデコーディングが、完了したことを示すために使用される。
第1のデコーディング完了情報は、FECパケットの第1のグループ内の失われた元のパケットと元のFECパケットとの記憶アドレスを搬送する。第1のデータストリームが、プライオリティを有するとき、第1のデコーディング完了情報は、第1のデータストリームのプライオリティをさらに搬送する。ステップ1208に示される処理は、ステップ808において、第1のエンコーディング完了情報を生成する処理と同じである。本明細書においては、ステップ1208が、本出願のこの実施形態において、再び説明されることはない。
1209:ターゲットハードウェアエンジンは、第1のデコーディング完了情報を、第2のターゲット受信キューに追加し、第2のターゲット受信キューは、第2のネットワークデバイスの処理されるエンコードしたストリームのデコーディング完了情報を記憶するために使用される。
第2のネットワークデバイスは、複数の受信キューを事前設定し得る。受信キューの各々は、第2のネットワークデバイスの処理されるエンコードしたストリームのデコーディング完了情報を記憶するために使用される。第2のターゲット受信キューは、複数の受信キューのうちのいずれか1つであり得る。複数の受信キューは、第2のネットワークデバイスのメモリ、プロセッサ、およびターゲットハードウェアエンジンのうちのいずれか1つの中に配置され得る。
いくつかの可能な実装においては、第2のネットワークデバイスは、受信キューの各々についてのプライオリティを設定し得る。いくつかの可能な実装においては、第1のデコーディング完了情報は、エンコードしたストリームのプライオリティに基づいて、メモリ内の第2のターゲット受信キューに追加され、第2のターゲット受信キューのプライオリティは、エンコードしたストリームのプライオリティと等しい。具体的な追加処理は、ステップ809において、第1のエンコーディング完了情報を、第1のターゲット受信キューに追加する処理と同じである。
1210:プロセッサは、第1のデコーディング完了情報を、第2のターゲット受信キューから読み出す。
ステップ1210は、プロセッサ内のFECソフトウェアインターフェースによって実行され得る。FECソフトウェアインターフェースは、プライオリティ順序に基づいて、第2の受信キューにポーリングを行い得る。FECソフトウェアインターフェースは、最初に、第1のデコーディング完了情報が、第2のターゲット受信キューから獲得され得るかどうかを、ポーリング方式で、決定し得る。いくつかの可能な実装においては、FECソフトウェアインターフェースは、第2の受信キューの各々が、他のデコーディング完了情報を有するかどうかを、プライオリティ順序に基づいて、順番に問い合わせ、第2の受信キューの各々は、1つのプライオリティに対応する。第2の受信キューの各々において、FECソフトウェアインターフェースは、プライオリティが第2のターゲット受信キューのそれよりもが高いキュー内に、他のデコーディング完了情報が存在しないとき、デコーディング完了情報を、第2のターゲット受信キューから獲得する。ステップ1210において、FECソフトウェアインターフェースが、受信キューの各々にポーリングを行う処理は、ステップ810において、FECソフトウェアインターフェースが、受信キューの各々にポーリングを行う処理と同じである。
1211:プロセッサは、第1のデコーディング完了情報に基づいて、FECパケットの第1のグループ内の元のFECパケットと、失われた元のパケットとを、メモリから獲得する。
ステップ1211に示される処理は、ステップ811において、M個の元のパケットと、R個の冗長パケットとを獲得する処理と同じである。本明細書においては、ステップ1211が、本出願のこの実施形態において、再び説明されることはない。
1212:プロセッサは、FECパケットの第1のグループ内の元のFECパケットと、失われた元のパケットとに基づいて、第1のデータストリームがエンコードされる前のデータストリームを復元する。
ステップ1212は、プロセッサ内のFECソフトウェアインターフェースによって実行され得る。FECソフトウェアインターフェースは、複数の等長パケットを獲得するために、最初に、FECパケットの第1のグループ内の失われていない元のFECパケットのパケットヘッダを除去し、その後、複数の等長パケットと、失われた元のパケットとに基づいて、第1のデータストリームがエンコードされる前のデータストリームを復元し得る。いくつかの可能な実装においては、ステップ1212は、以下のステップ12Aから12Cに示される処理を使用することによって、実施され得る。
ステップ12A:FECパケットの第1のグループ内の元のFECパケットについて、FECソフトウェアインターフェースは、複数の等長パケットを獲得するために、元のFECパケットの各々のFECパケットヘッダを除去する。
ステップ12B:FECソフトウェアインターフェースは、第1のデータストリームがエンコードされる前のデータストリーム内のM個の元のパケットを獲得するために、複数の等長パケットと、失われた元のパケット内のパディングされたデータとを除去する。
ステップ12C:FECソフトウェアインターフェースは、第1のデータストリームがエンコードされる前のデータストリームを獲得するために、FECパケットヘッダで搬送された、元のパケットの各々のシーケンス番号に基づいて、M個の元のパケットをソートする。
1213:プロセッサは、データストリームを、第2の端末に送信する。
ステップ1213は、ステップ8123と同様である。本明細書においては、ステップ1213が、本出願のこの実施形態において、再び説明されることはない。
デコーディング処理における、第2のネットワークデバイス内のプロセッサと、ターゲットハードウェアエンジンと、メモリとの間の対話ステータスをさらに説明するために、図13に示される、本出願の実施形態によるFECデコーディングのフローチャートを参照する。手順は、具体的には、ステップ1301からステップ1306を含む。
ステップ1301:UDPプロキシは、FECパケットの各々の記憶完了メッセージを、FECソフトウェアインターフェースに送信する。
ステップ1302:FECパケットのグループの記憶完了メッセージを受信した後、FECパケットのグループ内において、元のFECパケットが、失われている場合、FECソフトウェアインターフェースは、FECパケットの受信されたグループに基づいて、第1のデコーディングタスクを生成し、第1のデコーディングタスクを、メモリのタスクバッファに送信する。
タスクバッファは、複数の送信キューと、複数の受信キューとを含み、FECソフトウェアインターフェースは、第1のデコーディングタスクを、第1のデコーディングタスクのプライオリティに対応する第2のターゲット送信キューに送信し得る。
ステップ1303:ターゲットハードウェアエンジンは、第1のデコーディングタスクを、タスクバッファ内の第2のターゲット送信キューから獲得し、第1のデコーディングタスク内の記憶アドレスに基づいて、FECパケットのグループを、メモリから読み出す。
ステップ1304:ターゲットハードウェアエンジンは、失われた元のパケットを獲得するために、読み出されたFECパケットのグループをデコードし、失われた元のパケットを、メモリ内に記憶し、第1のデコーディング完了情報を、メモリ内の第2のターゲット受信キューに追加する。
ステップ1305:FECソフトウェアインターフェースは、第1のデコーディング完了情報を、タスクバッファ内の第2のターゲット受信キューから読み出し、第1のデコーディング完了情報に基づいて、メモリ内のFECパケットのグループと、失われた元のパケットとを読み出し、等長パケットを獲得するために、FECパケットのグループのパケットヘッダを除去する。
ステップ1306:FECソフトウェアインターフェースは、データストリームを獲得するために、等長パケットを処理し、データストリームを出力する。
ステップ1207から1213に示される処理は、ターゲット処理エンジン、メモリ、およびプロセッサが、協力して、データストリームを、第2の端末に送信する処理である。いくつかの可能な実装においては、ターゲット処理エンジンは、さらに、FECパケットの第1のグループと、失われた元のパケットとを、プロセッサに直接的に送信し得、プロセッサが、1212および1213に示される処理を実行する。いくつかの可能な実装においては、ターゲット処理エンジンが、代替として、1212および1213に示される処理を実行し得る。
本出願のこの実施形態において提供される方法によれば、FECデコーディングは、CPUではなく第2のネットワークデバイスのターゲットハードウェアエンジンにおいて、FECパケットの第1のグループ内の失われていないFECパケットに対して、直接的に実行される。したがって、CPUオーバーヘッドは、低減させることができ、第2のネットワークデバイスのデコーディング効率は、向上させることができる。このようにして、第2のネットワークデバイスは、パケット伝送処理における大きいスループットの要件を容易に満たすことができる。
上述の任意選択の技術的ソリューションのすべては、任意の組み合わせを通して、本開示の任意選択の実施形態を形成し得る。本明細書においては、詳細が、ここで再び説明されることはない。
本出願の上述の実施形態において提供されるパケット処理装置が、パケット処理を実行するとき、上述の機能モジュールへの分割は、説明のための例として使用されたにすぎない。実際の応用においては、上述の機能は、要件に基づいて、異なる機能モジュールに割り当てられて実施され得、すなわち、装置の内部構造は、上で説明された機能のすべてまたは一部を完了するために、異なる機能モジュールに分割される。加えて、上述の実施形態において提供されるパケット処理装置、および上述の実施形態において提供されるパケット処理方法の実施形態は、同じ概念に関連する。装置の具体的な実装処理については、方法の実施形態を参照されたい。詳細が、ここで再び説明されることはない。
当業者であれば、実施形態のステップのすべてまたは一部が、ハードウェア、または関連するハードウェアに命令するプログラムによって実施され得ることを理解し得る。プログラムは、コンピュータ可読記憶媒体内に記憶され得る。記憶媒体は、リードオンリメモリ、磁気ディスク、または光ディスクなどを含み得る。
上述の説明は、本出願の好ましい実施形態にすぎず、本出願を限定することを意図していない。本出願の原理から逸脱することなく行われる、いずれの変更、等価交換、または改善も、本出願の保護範囲内に含まれるべきである。
本出願は、データエンコーディング技術の分野に関し、詳細には、パケット処理方法および装置、ならびにチップに関する。
本出願は、2019年11月29日に中国国家知識産権局に出願された、「PACKET PROCESSING METHOD AND APPARATUS, AND CHIP」と題する、中国特許出願第201911205835.X号に基づく優先権を主張し、また本出願は、2019年9月10日に中国国家知識産権局に出願された、「FEC ACCELERATION METHOD, APPARATUS AND SYSTEM, AND FEC HARDWARE ACCELERATOR」と題する、中国特許出願第201910854367.2号に基づく優先権を主張し、両特許出願は、その全体が、参照によって本明細書に組み込まれる。
データストリームが、2つのネットワークデバイス間で伝送されるとき、パケットロスが、しばしば発生する。現在、データストリーム伝送処理におけるパケットロスの問題を解決するために、前方誤り訂正(Forward Error Correction、FEC)エンコーディングおよびデコーディング技術が、使用されることがある。
具体的には、第1のレベルのネットワークデバイスは、元のパケットの冗長パケットを獲得するために、データストリーム内の元のパケットに対して、FECエンコーディングを実行する。第1のレベルのネットワークデバイスは、FECパケットヘッダを、元のパケットの各々と、冗長パケットの各々とに追加し、FECパケットヘッダを搬送する元のパケットと、FECパケットヘッダを搬送する冗長パケットとを、第2のレベルのネットワークデバイスに送信する。元のパケットが、伝送処理において失われたとき、第2のレベルのネットワークデバイスは、失われていない元のパケットと、冗長パケットとに基づいて、失われた元のパケットを復元し、失われていない元のパケットと、復元された元のパケットとを組み合わせて、元のデータストリームを作り、データストリームを出力する。これが、データストリームの伝送処理におけるパケットロスを回避する。
上述のパケット伝送処理におけるFECエンコーディング処理および元のパケットの復元処理は、ともに、大量の計算を必要とし、計算は、ネットワークデバイスの中央処理ユニット(Central Processing Unit、CPU)によって達成される。しかしながら、CPUの計算能力および計算速度は、限られている。高速エンコーディングおよびデコーディングの要件が、満たされる場合、パケット伝送処理における大きいスループットの要件を満たすことは、困難である。
本出願は、ネットワークデバイスが、パケット伝送処理における大きいスループットの要件を満たしながら、パケットエンコーディングおよびデコーディング処理を迅速に実行するような、パケット処理方法および装置、ならびにチップを提供する。
第1の態様によれば、パケット処理方法が、提供され、方法は、プロセッサとターゲットハードウェアエンジンを含む、ネットワークデバイスに適用される。方法は、プロセッサが、処理される第1のデータストリーム内のM個の元のパケットに基づいて、第1のエンコーディングタスクを生成するステップであって、Mは、正の整数であり、第1のエンコーディングタスクは、M個の元のパケットをエンコードすることを示すために使用される、ステップを含む。ターゲットハードウェアエンジンは、R個の冗長パケットを獲得するために、第1のエンコーディングタスクに基づいて、M個の元のパケットに対して、前方誤り訂正FECエンコーディングを実行し、Rは、正の整数である。
この方法においては、FECエンコーディングは、プロセッサではなくネットワークデバイスのターゲットハードウェアエンジンにおいて、第1のデータストリーム内のM個の元のパケットに対して、直接的に実行される。したがって、CPUのオーバーヘッドは、低減させることができ、ネットワークデバイスのエンコーディング効率は、向上させることができる。このようにして、ネットワークデバイスは、パケット伝送処理における大きいスループットの要件を容易に満たすことができる。
可能な実装においては、プロセッサが、処理される第1のデータストリーム内のM個の元のパケットに基づいて、第1のエンコーディングタスクを生成した後、方法は、プロセッサが、第1のエンコーディングタスクを、第1のターゲット送信キュー内に記憶するステップであって、第1のターゲット送信キューは、ネットワークデバイスの処理されるデータストリームのエンコーディングタスクを記憶するために使用され、ネットワークデバイスの処理されるデータストリームは、第1のデータストリームを含む、ステップをさらに含む。ターゲットハードウェアエンジンは、第1のエンコーディングタスクを、第1のターゲット送信キューから読み出す。
可能な実装においては、プロセッサが、第1のエンコーディングタスクを、第1のターゲット送信キュー内に記憶するステップは、プロセッサが、第1のデータストリームのプライオリティに基づいて、第1のエンコーディングタスクを、第1のターゲット送信キューに追加するステップであって、第1のターゲット送信キューのプライオリティは、第1のデータストリームのプライオリティと等しい、ステップを含む。
可能な実装においては、ターゲットハードウェアエンジンが、第1のエンコーディングタスクを、第1のターゲット送信キューから読み出すステップは、ターゲットハードウェアエンジンが、送信キューのプライオリティ順序に基づいて、送信キューの各々の中にエンコーディングタスクが存在するかどうかを、順番に問い合わせるステップであって、送信キューの各々は、1つのプライオリティに対応する、ステップを含む。ターゲットハードウェアエンジンは、送信キューのうちの、プライオリティが第1のターゲット送信キューのそれよりも高いキュー内に、エンコーディングタスクが存在しないとき、第1のエンコーディングタスクを、第1のターゲット送信キューから読み出す。
可能な実装においては、第1のターゲット送信キューは、ネットワークデバイスのメモリ、プロセッサ、およびターゲットハードウェアエンジンのうちのいずれか1つの中に配置される。
可能な実装においては、プロセッサが、処理される第1のデータストリーム内のM個の元のパケットに基づいて、第1のエンコーディングタスクを生成する前に、方法は、ネットワークデバイスが、第1のデータストリーム内の受信された元のパケットを、ネットワークデバイスのメモリ内に記憶するステップをさらに含む。ネットワークデバイスのメモリ内の第1のデータストリーム内のエンコードされていない元のパケットの数量が、M以上である場合、プロセッサは、M個の元のパケットを、第1のデータストリーム内のエンコードされていない元のパケットから獲得する。
可能な実装においては、第1のエンコーディングタスクは、M個の元のパケットの記憶アドレスを含み、または第1のエンコーディングタスクは、M個の元のパケットの記憶アドレスと、第1のデータストリームのプライオリティとを含み、または第1のエンコーディングタスクは、M個の元のパケットを含み、または第1のエンコーディングタスクは、M個の元のパケットと、第1のデータストリームのプライオリティとを含む。
第2の態様によれば、パケット処理方法が提供され、方法は、プロセッサとターゲットハードウェアエンジンとを含むネットワークデバイスに適用される。方法は、プロセッサが、FECパケットの第1のグループを、受信された第1のデータストリームから獲得するステップであって、FECパケットの第1のグループ内のすべてのFECパケットは、同じFECパケットヘッダを有し、FECパケットヘッダは、FECエンコードした元のパケットの数量Mを含む、ステップを含む。FECパケットの第1のグループ内の元のパケットの数量が、元のパケットの数量Mよりも小さいとき、プロセッサは、FECパケットの第1のグループに基づいて、第1のデコーディングタスクを生成し、第1のデコーディングタスクは、FECパケットの第1のグループをデコードすることを示すために使用される。ターゲットハードウェアエンジンは、FECパケットの第1のグループ内の失われた元のパケットを獲得するために、第1のデコーディングタスクに基づいて、FECパケットの第1のグループ内の元のパケットと、元のパケットの冗長パケットに対して、FECデコーディングを実行する。
この方法においては、FECデコーディングは、CPUではなくネットワークデバイスのターゲットハードウェアエンジンにおいて、FECパケットの第1のグループ内の失われていないFECパケットに対して、直接的に実行される。したがって、CPUのオーバーヘッドは、低減させることができ、ネットワークデバイスのデコーディング効率は、向上させることができる。このようにして、ネットワークデバイスは、パケット伝送処理における大きいスループットの要件を容易に満たすことができる。
可能な実装においては、プロセッサが、FECパケットの第1のグループに基づいて、第1のデコーディングタスクを生成した後、方法は、プロセッサが、第1のデコーディングタスクを、第2のターゲット送信キュー内に記憶するステップであって、第2のターゲット送信キューは、ネットワークデバイスの処理されるデータストリームのデコーディングタスクを記憶するために使用され、ネットワークデバイスの処理されるデータストリームは、第1のデータストリームを含む、ステップをさらに含む。ターゲットハードウェアエンジンは、第1のデコーディングタスクを、第2のターゲット送信キューから読み出す。
可能な実装においては、プロセッサが、第1のデコーディングタスクを、第2のターゲット送信キュー内に記憶するステップは、プロセッサが、第1のデータストリームのプライオリティに基づいて、第1のデコーディングタスクを、第2のターゲット送信キューに追加するステップであって、第2のターゲット送信キューのプライオリティは、第1のデータストリームのプライオリティと等しい、ステップを含む。
可能な実装においては、ターゲットハードウェアエンジンが、第1のデコーディングタスクを、第2のターゲット送信キューから読み出すステップは、ターゲットハードウェアエンジンが、送信キューのプライオリティ順序に基づいて、送信キューの各々の中にデコーディングタスクが存在するかどうかを、順番に問い合わるステップであって、送信キューの各々は、1つのプライオリティに対応する、ステップを含む。ターゲットハードウェアエンジンは、送信キューのうちの、プライオリティが第2のターゲット送信キューのそれよりも高いキュー内に、他のデコーディングタスクが存在しないとき、第1のデコーディングタスクを、第2のターゲット送信キューから読み出す。
可能な実装においては、第2のターゲット送信キューは、ネットワークデバイスのメモリ、プロセッサ、およびターゲットハードウェアエンジンのうちのいずれか1つの中に配置される。
可能な実装においては、第1のデコーディングタスクは、FECパケットの第1のグループの記憶アドレスを含み、または第1のデコーディングタスクは、FECパケットの第1のグループの記憶アドレスと、第1のデータストリームのプライオリティとを含み、または第1のデコーディングタスクは、FECパケットの第1のグループを含み、または第1のデコーディングタスクは、FECパケットの第1のグループと、第1のデータストリームのプライオリティとを含む。
第3の態様によれば、上述のパケット処理方法を実行するように構成された、パケット処理装置が、提供される。具体的には、装置は、第1の態様において提供されるパケット処理方法、または第1の態様のいずれかの任意選択の方式を実行するように構成された、機能モジュールを含む。
第4の態様によれば、上述のパケット処理方法を実行するように構成された、パケット処理装置が、提供される。具体的には、装置は、第2の態様において提供されるパケット処理方法、または第2の態様のいずれかの任意選択の方式を実行するように構成された、機能モジュールを含む。
第5の態様によれば、チップが提供され、チップは、プロセッサとターゲットハードウェアエンジンとを含む。プロセッサは、第1の態様において提供されるパケット処理方法、または第1の態様のいずれかの任意選択の方式を実施するように構成された、プロセッサであり、ターゲットハードウェアエンジンは、第1の態様において提供されるパケット処理方法、または第1の態様のいずれかの任意選択の方式を実施するように構成された、ターゲットハードウェアエンジンである。
第6の態様によれば、チップが提供され、チップは、プロセッサとターゲットハードウェアエンジンとを含む。プロセッサは、第2の態様において提供されるパケット処理方法、または第2の態様のいずれかの任意選択の方式を実施するように構成された、プロセッサであり、ターゲットハードウェアエンジンは、第2の態様において提供されるパケット処理方法、または第2の態様のいずれかの任意選択の方式を実施するように構成された、ターゲットハードウェアエンジンである。
本出願の実施形態における技術的ソリューションをより明確に説明するために、以下で、実施形態を説明するための添付の図面について簡単に説明する。以下の説明における添付の図面が、本出願のいくつかの実施形態を示すにすぎないことは明らかであり、当業者であれば、創造的な努力なしに、これらの添付の図面から他の添付の図面をさらに導出し得る。
本出願の実施形態によるFECエンコーディング処理の概略図である。
本出願の実施形態によるFECデコーディング処理の概略図である。
本出願の実施形態によるパケット伝送システムの概略図である。
本出願の実施形態によるパケット処理装置の構造の概略図である。
本出願の実施形態によるパケット処理装置の構造の概略図である。
本出願の実施形態によるターゲットハードウェアエンジンの概略図である。
本出願の実施形態によるパケット処理方法のフローチャートである。
本出願の実施形態によるパケット処理方法のフローチャートである。
本出願の実施形態によるパケット処理方法のフローチャートである。
本出願の実施形態による、ネットワークデバイスにおける内部対話手順の概略図である。
本出願の実施形態によるFECパケットの概略図である。
本出願の実施形態によるFECエンコーディングのフローチャートである。
本出願の実施形態によるパケット処理方法のフローチャートである。
本出願の実施形態によるパケット処理方法のフローチャートである。
本出願の実施形態によるFECデコーディングのフローチャートである。
本出願の目的、技術的ソリューション、および利点をより明確にするために、以下で、添付の図面を参照して、詳細に本出願の実装についてさらに説明する。
本出願の実装処理を理解することを容易にするために、図1に示される、本出願の実施形態によるFECエンコーディング処理の概略図を参照して、FECエンコーディングが、以下のように説明される。FECエンコーディング処理において使用されるパラメータは、エンコーディングパラメータである。エンコーディングパラメータは、元のパケットの数量Mと、冗長パケットの数量Rと、ターゲットサイズLとを含み、MおよびRは、ともに、正の整数であり、Lは、0よりも大きい値であり、元のパケットの数量Mは、エンコードされる元のパケットの数量であり、冗長パケットの数量Rは、M個の元のパケットに対してFECエンコーディングが実行された後に獲得される、冗長パケットの数量である。M個の元のパケットのサイズは、異なるので、冗長パケットを生成するために、M個の元のパケットをエンコードする処理において、第1のネットワークデバイスは、M個の等長パケットを獲得するために、最初に、M個の元のパケットに基づいて、パディング処理を実行し、等長パケットの各々は、1つの元のパケットがパディングされた後に獲得される。等長パケットの各々のサイズ、および冗長パケットの各々のサイズは、ともに、ターゲットサイズLであり、ターゲットサイズLは、M個の元のパケットのうちで最大の元のパケットのサイズであり得る。この場合、M個の元のパケットのうちで最大のパケットは、パディングされる必要がなく、等長パケットと見なし得る。その後、第1のネットワークデバイスは、M個の等長パケットを使用することによって、最初に、M×L型のエンコードされる行列を形成し得、エンコードされる行列の各行が、1つの等長パケットである。例えば、M=4であり、4つの等長パケット、すなわち、M0からM3が、図1に示されている。この場合、エンコードされる行列は、等長パケットM0からM3によって形成される。第1のネットワークデバイスは、(M+R)×M型の生成行列を構築し、生成行列は、第1の部分行列と、第2の部分行列とを含み、第1の部分行列は、M×M型の恒等行列であり、第2の部分行列は、R×M型のコーシ行列である。
第2の部分行列における第i行、第j列の要素は、
である。
xi-1およびy j-1は、ガロア体(Galois field、GF)(2w)における要素であり、iおよびjは、0以上の整数であり、wは、8であり得る。例えば、生成行列が、図1に示されている。第1のネットワークデバイスは、(M+R)×L型のエンコードした行列を獲得するために、生成行列と、エンコードされる行列とに対する乗算計算を実行し、エンコードした行列は、エンコードされる行列と、R×L型の検査行列とを含み、検査行列の各行が、1つの冗長パケットである。例えば、図1においては、R=2であるとき、冗長パケットは、R0およびR1である。
R個の冗長パケットを獲得した後、第1のネットワークデバイスは、M個の元のパケットと、R個の冗長パケットとを、FECパケットのグループ内にカプセル化するために、同じFECパケットヘッダを、M個の元のパケットと、R個の冗長パケットとに追加し、FECパケットのグループを、第2のネットワークデバイスに送信する。エンコードした行列内の、FECパケットのグループのいずれかの等長パケットが、伝送処理において失われたとき、第2のネットワークデバイスは、デコーディング処理を使用することによって、失われたいずれかの等長パケットをさらに復元し得る。図2に示される、本出願の実施形態によるFECデコーディング処理の概略図を参照して、FECデコーディングが、以下のように説明される。エンコードした行列内の等長パケットM2、M3が、失われたとき、第2のネットワークデバイスは、失われていない等長パケットM0、M1と、冗長パケットR0、R1とを使用することによって、復元行列を形成し得る。その後、第2のネットワークデバイスは、ターゲット検査行列を構築し、ターゲット検査行列は、第3の部分行列と、第2の部分行列とを含む。2つの等長パケットが、失われたので、第3の部分行列は、2×M型の恒等行列である。第2のネットワークデバイスは、ターゲット検査行列の逆行列を復元行列によって乗算することによって、エンコードされる行列を獲得し、失われた等長パケットM2、M3を、エンコードされる行列から獲得し得る。
図3は、本出願の実施形態によるパケット伝送システムの概略図である。図3を参照する。パケット伝送システムは、第1の端末301と、第1のネットワークデバイス302と、第2のネットワークデバイス303と、第2の端末304とを含む。第1の端末301は、データストリームを生成し、データストリームを第1のネットワークデバイス302に送信するように構成される。第1のネットワークデバイス302は、データストリーム内のパケットに対して、FECエンコーディングを実行し、FECパケットを含むエンコードしたストリームを、第2のネットワークデバイス303に送信し得る。第2のネットワークデバイス303は、失われた元のパケットを復元するために、エンコードしたストリーム内の失われていないFECパケットをデコードし、復元された元のパケットと失われていない元のパケットとを使用することによって、元のデータストリームを形成し、データストリームを第2の端末304に送信する。第1の端末301および第2の端末304は、各々、モバイルフォン、またはノートブックコンピュータなどであり得、第1のネットワークデバイス302および第2のネットワークデバイス303は、各々、コンピュータデバイス、例えば、ルータまたはスイッチであり得、データストリームは、ビデオストリームであり得、またはテキストデータを含むテキストストリームであり得る。本出願のこの実施形態においては、データストリームのタイプは、特に限定されない。
例としてビデオストリームを使用する概略図において、第1の端末301が、複数の第2の端末304とビデオセッションを実行するとき、第1の端末301は、ビデオストリーム(すなわち、データストリーム)を形成するために、ビデオを構成するために使用される元のパケットを、第1のネットワークデバイス302に送信する。第1のネットワークデバイス302は、冗長パケットを獲得するために、ビデオストリーム内の元のパケットに対して、FECエンコーディングを実行し、エンコードしたストリームを獲得するために、元のパケットと冗長パケットとをFECパケット内にカプセル化し、エンコードしたストリームを、第2のネットワークデバイス303に送信する。エンコードしたストリーム内のFECパケットの各グループを獲得した後、第2のネットワークデバイス303は、FECパケットの各グループのFECパケットヘッダに基づいて、FECパケットの各グループにおいて、元のパケットが失われているかどうかを決定する。元のパケットが、失われている場合、第2のネットワークデバイス303は、失われた元のパケットを復元するために、元のパケットが失われた、FECパケットのグループをデコードし、復元された元のパケットと、失われていない元のパケットとを使用することによって、ビデオストリームを形成し、ビデオストリームを、複数の第2の端末304に送信する。ビデオストリームを受信した後、第2の端末304の各々は、ビデオを再生し、それによって、複数の端末間のビデオセッションを実施する。
いくつかの可能な実装においては、第1の端末301は、さらに、第1のネットワークデバイスの機能を有し得る。図4は、本出願の実施形態によるパケット処理装置400の構造の概略図である。装置400は、処理される第1のデータストリーム内のM個の元のパケットに基づいて、第1のエンコーディングタスクを生成するように構成された、プロセッサ401であって、Mは、正の整数であり、第1のエンコーディングタスクは、M個の元のパケットをエンコードすることを示すために使用される、プロセッサ401と、R個の冗長パケットを獲得するために、第1のエンコーディングタスクに基づいて、M個の元のパケットに対して、前方誤り訂正FECエンコーディングを実行するように構成された、ターゲットハードウェアエンジン402であって、Rは、正の整数である、ターゲットハードウェアエンジン402とを含む。
任意選択で、プロセッサ401は、第1のエンコーディングタスクを、第1のターゲット送信キュー内に記憶するようにさらに構成され、第1のターゲット送信キューは、装置の処理されるデータストリームのエンコーディングタスクを記憶するために使用され、装置の処理されるデータストリームは、第1のデータストリームを含む。
ターゲットハードウェアエンジンは、第1のエンコーディングタスクを、第1のターゲット送信キューから読み出すようにさらに構成される。
任意選択で、プロセッサ401は、第1のデータストリームのプライオリティに基づいて、第1のエンコーディングタスクを、第1のターゲット送信キューに追加するように構成され、第1のターゲット送信キューのプライオリティは、第1のデータストリームのプライオリティと等しい。
任意選択で、ターゲットハードウェアエンジン402は、送信キューの各々の中にエンコーディングタスクが存在するかどうかを、送信キューのプライオリティ順序に基づいて、順番に問い合わせることであって、送信キューの各々は、1つのプライオリティに対応する、問い合わせることと、送信キューのうちの、プライオリティが第1のターゲット送信キューのそれよりも高いキュー内に、エンコーディングタスクが存在しないとき、第1のエンコーディングタスクを、第1のターゲット送信キューから読み出すこととを行うように構成される。
任意選択で、装置400は、メモリ403をさらに含み、第1のターゲット送信キューは、ネットワークデバイスのメモリ、プロセッサ、およびターゲットハードウェアエンジンのうちのいずれか1つの中に配置される。
メモリ403は、第1のデータストリーム内の受信された元のパケットを記憶するよう
プロセッサ401は、メモリ内の第1のデータストリーム内のエンコードされていない元のパケットの数量が、M以上である場合、M個の元のパケットを、第1のデータストリーム内のエンコードされていない元のパケットから獲得し、処理される第1のデータストリーム内のM個の元のパケットに基づいて、第1のエンコーディングタスクを生成するステップを実行するようにさらに構成される。
プロセッサ401は、汎用プロセッサ、例えば、CPU、ネットワークプロセッサ(network processor、NP)、またはCPUとNPとの組み合わせであり得る。プロセッサは、ハードウェアチップをさらに含み得る。ハードウェアチップは、特定用途向け集積回路(application-specific integrated circuit、ASIC)、プログラマブル論理デバイス(programmable logic device、PLD)、またはそれらの組み合わせであり得る。PLDは、複合プログラマブル論理デバイス(complex programmable logic device、CPLD)、フィールドプログラマブルゲートアレイ(field-programmable gate array、FPGA)、汎用アレイ論理(generic array logic、GAL)、またはそれらの組み合わせであり得る。
メモリ403は、揮発性メモリ(volatile memory)、例えば、ランダムアクセスメモリ(random-access memory、RAM)を含み得る。メモリは、代替として、不揮発性メモリ(non-volatile memory)、例えば、フラッシュメモリ(flash memory)、ハードディスクドライブ(hard disk drive、HDD)、およびソリッドステートドライブ(solid-state drive、SSD)を含み得る。メモリは、代替として、上述のタイプのメモリの任意の組み合わせを含み得る。
任意選択で、第1のエンコーディングタスクは、M個の元のパケットの記憶アドレスを含み、または第1のエンコーディングタスクは、M個の元のパケットの記憶アドレスと、第1のデータストリームのプライオリティとを含み、または第1のエンコーディングタスクは、M個の元のパケットを含み、または第1のエンコーディングタスクは、M個の元のパケットと、第1のデータストリームのプライオリティとを含む。
いくつかの可能な実装においては、図4に示されるパケット処理装置の機能は、代替として、チップを使用することによって実施され得、チップは、図4におけるプロセッサ401と、図4におけるターゲットハードウェアエンジン402とを含み得る。
いくつかの可能な実装においては、第2の端末304は、さらに、第2のネットワークデバイス303の機能を有し得る。図5は、本出願の実施形態によるパケット処理装置500の構造の概略図である。装置500は、プロセッサ501と、ターゲットハードウェアエンジン502とを含む。
プロセッサ501は、FECパケットの第1のグループを、受信された第1のデータストリームから獲得することであって、FECパケットの第1のグループ内のすべてのFECパケットのFECパケットヘッダは、同じであり、FECパケットヘッダは、FECエンコードした元のパケットの数量Mを含む、獲得することと、FECパケットの第1のグループ内の元パケットの数量が、元のパケットの数量Mよりも小さいとき、FECパケットの第1のグループに基づいて、第1のデコーディングタスクを生成することであって、第1のデコーディングタスクは、FECパケットの第1のグループをデコードすることを示すために使用される、生成することとを行うように構成される。
ターゲットハードウェアエンジン502は、FECパケットの第1のグループ内の失われた元のパケットを獲得するために、第1のデコーディングタスクに基づいて、FECパケットの第1のグループ内の元のパケットと、元のパケットの冗長パケットとに対して、FECデコーディングを実行するように構成される。
任意選択で、プロセッサ501は、第1のデコーディングタスクを、第2のターゲット送信キュー内に記憶することであって、第2のターゲット送信キューは、装置の処理されるデータストリームのデコーディングタスクを記憶するために使用され、装置の処理されるデータストリームは、第1のデータストリームを含む、記憶することを行うようにさらに構成される。
ターゲットハードウェアエンジン502は、第1のデコーディングタスクを、第2のターゲット送信キューから読み出すようにさらに構成される。
任意選択で、プロセッサ501は、第1のデータストリームのプライオリティに基づいて、第1のデコーディングタスクを、第2のターゲット送信キューに追加することであって、第2のターゲット送信キューのプライオリティは、第1のデータストリームのプライオリティと等しい、追加することを行うように構成される。
任意選択で、ターゲットハードウェアエンジン502は、送信キューの各々の中にデコーディングタスクが存在するかどうかを、送信キューのプライオリティ順序に基づいて、順番に問い合わせることであって、送信キューの各々は、1つのプライオリティに対応する、問い合わせることと、送信キューのうちの、プライオリティが第2のターゲット送信キューのそれよりも高いキュー内に、デコーディングタスクが存在しないとき、第1のデコーディングタスクを、第2のターゲット送信キューから読み出すこととを行うように構成される。
任意選択で、装置は、メモリをさらに含み、第2のターゲット送信キューは、メモリ、プロセッサ、およびターゲットハードウェアエンジンのうちのいずれか1つの中に配置される。
任意選択で、第1のデコーディングタスクは、FECパケットの第1のグループ内の失われていないFECパケットの記憶アドレスを含み、または第1のデコーディングタスクは、FECパケットの第1のグループ内の失われていないFECパケットの記憶アドレスと、第1のデータストリームのプライオリティとを含み、または第1のデコーディングタスクは、FECパケットの第1のグループを含み、または第1のデコーディングタスクは、FECパケットの第1のグループと、第1のデータストリームのプライオリティとを含む。
いくつかの可能な実装においては、図5に示されるパケット処理装置の機能は、代替として、チップを使用することによって実施され得、チップは、図5におけるプロセッサ501と、図5におけるターゲットハードウェアエンジン502とを含み得る。
説明を容易にするために、第1のネットワークデバイス302および第2のネットワークデバイス303は、各々、コンピューティングデバイスとして表される。コンピューティングデバイスは、各々、ターゲットハードウェアエンジンを含み得、ターゲットハードウェアエンジンは、エンコーディングおよびデコーディング計算を実行するように構成される。本出願の実施形態は、ターゲットハードウェアエンジンの概略図を提供する。図6におけるターゲットハードウェアエンジン600を参照する。ターゲットハードウェアエンジン600は、コントローラ601と、バッファユニット602と、データ処理ユニット603と、行列ジェネレータ604と、エンコーディングおよびデコーディングユニット605とを含む。コントローラ601は、コンピューティングデバイスのCPUによって送られたエンコードおよびデコードされるパケットの、エンコーディングおよびデコーディングパラメータならびに記憶アドレスを受信し、エンコーディングおよびデコーディングパラメータに基づいて、対応するデータ処理ポリシと、エンコーディングおよびデコーディングモデルのモデルパラメータと、行列モデルのモデルパラメータとを決定するように構成される。エンコーディングおよびデコーディングパラメータは、エンコーディングパラメータ、またはデコーディングパラメータを含み、デコーディングパラメータは、FECパケットヘッダ内の内容であり得る。エンコードおよびデコードされるパケットは、M個の元のパケット、または失われていないFECパケットであり得る。エンコーディングおよびデコーディングモデルは、エンコーディングモデル、またはデコーディングモデルを含み得る。エンコーディングモデルのモデルパラメータは、元のパケットの数量M、およびターゲットサイズLである。デコーディングモデルのモデルパラメータは、失われた元のFECパケットの数量F、およびターゲットサイズLを含み、Fは、0より大きく、R以下である。行列モデルのモデルパラメータは、生成行列のモデルパラメータ、またはターゲット検査行列のモデルパラメータを含む。生成行列のモデルパラメータは、元のパケットの数量Mと、冗長パケットの数量Rと、ターゲットサイズLとを含む。ターゲット検査行列のモデルパラメータは、失われた元のFECパケットの数量Fと、冗長パケットの数量Rと、ターゲットサイズLとを含む。
コントローラ601は、受信されたエンコードおよびデコードされるパケットの記憶アドレスに基づいて、エンコードおよびデコードされるパケットを、コンピューティングデバイスのメモリから獲得し、エンコードおよびデコードされるパケットを、バッファユニット602に記憶するようにさらに構成される。コントローラ601は、データ処理ユニット603が、エンコードおよびデコードされるパケットと、エンコーディングおよびデコーディングモデルのモデルパラメータとに基づいて、またデータ処理ポリシに従って、エンコードされる行列、または復元行列を生成し、エンコードされる行列、または復元行列を、エンコーディングおよびデコーディングユニット605に送信するように、エンコーディングおよびデコーディングモデルのモデルパラメータと、データ処理ポリシとを、データ処理ユニット603に送信するようにさらに構成される。
コントローラ601は、行列ジェネレータ604が、行列モデルのモデルパラメータに基づいて、生成行列、またはターゲット検査行列を構築し、生成行列、またはターゲット検査行列を、エンコーディングおよびデコーディングユニット605に送信するように、行列モデルのモデルパラメータを、行列ジェネレータ604に送信するようにさらに構成される。
エンコーディングおよびデコーディングユニット605は、冗長パケット、または失われた元のFECパケットを獲得するために、受信されたエンコードされる行列または受信された復元行列、および対応する生成行列または対応するターゲット検査行列に対して、エンコーディングおよびデコーディング計算を実行し(詳細については、図1および図2に示される、エンコーディング計算処理およびデコーディング計算処理を参照されたい)、冗長パケット、または失われた元のFECパケットを、バッファユニット602に送信するように構成される。バッファユニット602は、冗長パケット、または復元されたパケットを、コンピューティングデバイスのメモリ、またはプロセッサに送信する。
ターゲットハードウェアエンジン内のエンコーディングおよびデコーディングユニット605は、FECエンコーディングロジックとFECデコーディングロジックとを多重化し得る。FECエンコーディングが、実行される必要があるとき、エンコーディングおよびデコーディングユニット605は、FECエンコーディングロジックに基づいて、生成行列およびエンコードされる行列に対して、FECエンコーディングを実行する。FECデコーディングが、実行される必要があるとき、エンコーディングおよびデコーディングユニット605は、FECデコーディングロジックに基づいて、ターゲット検査行列および復元行列に対して、FECデコーディングを実行する。いくつかの可能な実装においては、エンコーディングおよびデコーディングユニット605は、エンコーディングサブユニットと、デコーディングサブユニットとを含み得る。エンコーディングサブユニットは、FECエンコーディングロジックに基づいて、生成行列およびエンコードされる行列に対して、FECエンコーディングを実行し得、デコーディングサブユニットは、FECデコーディングロジックに基づいて、ターゲット検査行列および復元行列に対して、FECデコーディングを実行し得る。
コンピューティングデバイスのエンコーディング処理およびデコーディング処理についてさらに説明するために、図7に示される、本出願の実施形態によるパケット処理方法のフローチャートを参照する。コンピューティングデバイスは、ギガビットイーサネット(gigabit Ethernet、GE)ネットワークポート、または10ギガビットイーサネット(ten-gigabit Ethernet、10GE)ネットワークポートを通して、データストリーム内のパケットを受信する。GE/10GEネットワークポートは、受信されたパケットを、パケット解析エンジン(packet parse engine、PPE)に送信する。PPEは、パケットを、メモリ内に記憶し、パケットのディスクリプタを獲得するために、パケットを予備的に解析し、パケットの記憶アドレスを搬送する通知メッセージを、トラフィック分割を通して、ネットワークプロセッサ(network processor、NP)エンジンに送信する。NPエンジンは、パケットがエンコードされる必要があるかどうかを決定するために、メモリ内のパケットに対して、ディープ解析を実行し得る。パケットがエンコードされる必要があるとき、NPエンジンは、さらに、通知メッセージを、CPUに転送し得る。CPUのプロトコルスタックは、通知メッセージを、ユーザデータグラムプロトコル(user datagram protocol、UDP)プロキシに送信する。UDPプロキシによって受信された通知メッセージの数量が、特定の数量に達したとき、それは、メモリが、現在の時間期間における、現在のエンコーディングのために必要とされる、エンコードされるパケットを記憶したことを示し、CPUは、FECソフトウェアインターフェースを通して、エンコーディングタスクを、ターゲットハードウェアエンジンに配送する。ターゲットハードウェアエンジンは、エンコーディングタスクで搬送された、エンコードされるパケットの記憶アドレスに基づいて、エンコードされるパケットを、メモリから獲得し、冗長パケットを生成し、冗長パケットを、メモリ内に記憶する。記憶が、完了した後、ターゲットハードウェアエンジンは、エンコーディングタスク完了情報を、CPU内のFECソフトウェアインターフェースに報告する。FECソフトウェアインターフェースは、エンコーディングタスク完了情報で搬送された、エンコードされるパケットの記憶アドレス、および冗長パケットの記憶アドレスに基づいて、エンコードされるパケット、および冗長パケットを、メモリから獲得し、FECパケットを生成するために、FECパケットヘッダを、獲得されたエンコードされるパケットおよび冗長パケットに追加する。FECソフトウェアインターフェースは、エンコーディングが実行された後のエンコードしたストリーム(すなわち、データストリーム)を形成するために、FECパケットを、トラフィック管理(traffic management、TM)エンジンに送信する。TMエンジンは、CPUの要件、または別のハードウェアエンジンの要件、例えば、サービス品質(quality of service、QoS)スケジューリング、トラフィックシェーピング、およびトラフィック統計収集に基づいて、エンコードしたストリームを操作する。TMエンジンは、操作されたエンコードしたストリームを、PPEに送信する。PPEは、操作されたエンコードしたストリームを、GE/10GEネットワークポートに転送し、GE/10GEネットワークポートは、操作されたエンコードしたストリームを出力する。いくつかの可能な実装においては、コンピューティングデバイスは、NPエンジン、PPE、およびTMエンジンを含まず、NPエンジン、PPE、およびTMエンジンの仕事は、すべて、1つのプロセッサ、またはCPUによって完了され得ることに留意されたい。代替として、NPエンジン、PPE、TMエンジン、およびCPUの仕事は、1つのプロセッサによって完了され得る。
上では、コンピューティングデバイスのエンコーディング処理について説明した。コンピューティングデバイスのデコーディング処理は、以下のように説明される。コンピューティングデバイスのメモリ内に記憶されたパケットが、FECパケットであるときに、パケットヘッダが同じであるFECパケットのグループ内の元のパケットが、失われた場合、CPUは、FECソフトウェアインターフェースを通して、デコーディングタスクを、ターゲットハードウェアエンジンに配送する。ターゲットハードウェアエンジンは、デコーディングタスクで搬送された、FECパケットのグループの記憶アドレスに基づいて、FECパケットのグループを、メモリから獲得し、FECパケットのグループに基づいて、失われた元のパケットを復元し、復元された元のパケットを、メモリ内に記憶する。記憶が、完了した後、ターゲットハードウェアエンジンは、デコーディングタスク完了情報を、CPU内のFECソフトウェアインターフェースに報告する。FECソフトウェアインターフェースは、デコーディングタスク完了情報で搬送された、失われていない元のパケットの記憶アドレスと、復元された元のパケットの記憶アドレスとに基づいて、元のFECパケットのグループ内の失われていない元のパケットと、復元された元のパケットとを、メモリから獲得し、獲得された元のパケットを使用することによって、出力のためのデータストリームを形成する。CPUによってデータストリームを出力する方式は、エンコードしたストリームを出力する方式と同様である。本明細書においては、CPUによってデータストリームを出力する方式が、本出願のこの実施形態において、再び説明されることはない。
いくつかの可能な実装においては、プロトコルスタック、UDPプロキシ、およびFECソフトウェアインターフェースは、CPU内に配備されないことがあるが、NPエンジン内に配備される。この場合、エンコーディング処理およびデコーディング処理において、NPエンジンと、ターゲットハードウェアエンジンと、メモリとの間の対話が、実行される必要がある。CPUは、ターゲットハードウェアエンジンおよびメモリと対話する必要はない。いくつかの可能な実装においては、エンコーディングおよびデコーディングを通して、エンコードした行列、またはエンコードされる行列を獲得した後、ターゲットハードウェアエンジンは、エンコードした行列内の元のパケットおよび冗長パケットを、FECパケット内に直接的にカプセル化し、FECパケットを、ネットワークデバイスに出力し得、または元のパケットを、エンコードされる行列から直接的に獲得し、元のパケットを、ネットワークデバイスに出力し得る。いくつかの可能な実装においては、ターゲットハードウェアエンジンは、さらに、エンコードした行列またはエンコードされる行列を、FECソフトウェアインターフェースに直接的に送信し得、FECソフトウェアインターフェースは、エンコードした行列内の元のパケットおよび冗長パケットを、FECパケット内にカプセル化し、FECパケットを、ネットワークデバイスに出力する。代替として、FECソフトウェアインターフェースは、元のパケットを、エンコードされる行列から獲得し、元のパケットを、ネットワークデバイスに出力する。
結論において、ネットワークデバイスのエンコーディング処理は、以下のように要約される。任意のデータストリームを獲得した後、ネットワークデバイスは、任意のデータストリームを、メモリ内に記憶し得る。任意のデータストリーム内のパケットが、エンコードされるパケットである場合、ネットワークデバイス内のプロセッサは、複数のエンコードされるパケットをエンコードすることを示すために使用される、エンコーディングタスクを生成し得、プロセッサは、エンコーディングタスクを、メモリに配送し得る。ネットワークデバイス内のターゲットハードウェアエンジンは、メモリ内のエンコーディングタスクを読み出し、複数のエンコードされるパケットの冗長パケットを獲得するために、エンコーディングタスクに基づいて、メモリ内に記憶された複数のエンコードされるパケットに対して、FECエンコーディングを実行し、その後、冗長パケットを、メモリ内に記憶する。その後、プロセッサは、複数のエンコードされるパケットと、複数のエンコードされるパケットの冗長パケットとを、メモリから獲得し、獲得されたパケットを、FECパケット内にカプセル化し得る。処理工程をさらに説明するために、図8Aおよび図8Bに示される、本出願の実施形態によるパケット処理方法のフローチャートを参照する。第1のネットワークデバイスは、プロセッサとターゲットハードウェアエンジンとを含み得、方法の手順は、以下のステップ801から812を含み得る。
ステップ801:第1のネットワークデバイスは、処理される第1のデータストリーム内のM個の元のパケットを獲得する。
第1のネットワークデバイスは、複数のデータストリームを獲得し得る。第1のデータストリームは、複数のデータストリームのうちの任意のデータストリームであり、第1のデータストリームは、複数のパケットを含み得る。データストリームは、ビデオデータストリーム、オーディオデータストリーム、またはテキストデータストリームなどであり得る。第1のデータストリームのタイプは、本出願のこの実施形態においては、特に限定されない。
M個の元のパケットは、第1のデータストリーム内の任意のM個の連続した元のパケットである。第1のネットワークデバイスは、毎回、M個の元のパケットをエンコードし、1回のエンコーディングが完了した後、第1のデータストリーム内の他のM個の元のパケットをエンコードし得る。いくつかの可能な実装においては、ステップ801は、ステップ8011およびステップ8012に示される処理を使用することによって、実施され得る。
ステップ8011:第1のネットワークデバイスは、第1のデータストリーム内の受信された元のパケットを、第1のネットワークデバイスのメモリ内に記憶する。
第1のデータストリーム内の1つの元のパケットを受信した後に毎回、第1のネットワークデバイスのGE/10GEネットワークポートは、元のパケットを、PPEに送信する。元のパケットを受信した後に毎回、PPEは、元のパケットを、メモリ内に記憶し、元のパケットの記憶アドレスを記録する。
ステップ8012:メモリ内の、第1のデータストリーム内のエンコードされていない元のパケットの数量が、M以上である場合、プロセッサは、M個の元のパケットを、第1のデータストリーム内のエンコードされていない元のパケットから獲得する。
プロセッサは、第1のネットワークデバイス内のCPUおよびNPエンジンのうちの少なくとも一方を含み得る。各回のエンコーディングの後、第1のネットワークデバイスは、M個のエンコードされていない元のパケットの次のグループをエンコードする。したがって、第1のデータストリーム内の元のパケットについて、M個の元のパケットが、第1のネットワークデバイスのメモリ内に新たにバッファリングされるたびに、新たにバッファリングされたM個の元のパケットは、第1のデータストリーム内の次回にエンコードされるM個の元のパケットとして、使用され得る。
いくつかの可能な実装においては、第1のネットワークデバイスは、さらに、事前設定される期間を設定し得る。第1のデータストリーム内の元のパケットについて、1つの事前設定された期間が、経過するたびに、第1のネットワークデバイスは、事前設定された期間内に新たに記憶された元のパケットを、次回にエンコードされる元のパケットとして使用する。いくつかの可能な実装においては、Mの値は、エンコーディングのたびに、変化し得る。例えば、第1のネットワークデバイスは、1つの事前設定された期間が経過した後、5つの元のパケットを獲得し、この場合、Mは、5に等しく、その後、次の事前設定された期間が経過した後、第1のネットワークデバイスは、4つの元のパケットを新たに獲得し、この場合、Mは、4に等しい。事前設定された期間は、本出願のこの実施形態においては、特に限定されない。
PPEが、1つの元のパケットを、メモリ内に記憶した後、PPEは、元のパケットに対応する記憶完了メッセージを、NPエンジンに送信し、記憶完了メッセージは、第1のデータストリームのストリーム識別子と、元のパケットの記憶アドレスとを搬送し得、ストリーム識別子は、第1のデータストリームの名前または番号であり得、元のパケットが属するデータストリームを示すために使用される。いくつかの可能な実装においては、第1のネットワークデバイスは、サービス要件に基づいて、受信された各データストリームについての対応するプライオリティを設定し、第1のネットワークデバイスは、好ましくは、プライオリティがより高いデータストリームを処理し得る。それに対応して、記憶完了メッセージは、さらに、第1のデータストリームに対応するプライオリティを搬送し得る。このようにして、第1のネットワークデバイス内の各モジュールは、プライオリティに基づいて、対応するデータストリーム内の元のパケットを処理し得る。ユーザは、第1のネットワークデバイス上に、プライオリティ情報テーブルを構成し得、プライオリティ情報テーブルは、複数のプライオリティを降順で含み、プライオリティの各々は、1つのサービスタイプに対応する。第1のデータストリームを受信したとき、第1のネットワークデバイスは、第1のデータストリーム内の元のパケット内で搬送されるデータに基づいて、第1のデータストリームのサービスタイプを決定し、第1のネットワークデバイスが、第1のデータストリームについての対応するプライオリティを設定し得るように、第1のデータストリームのサービスタイプに対応するプライオリティを、プライオリティ情報テーブルから決定し得る。
記憶完了メッセージを受信した後、NPエンジンは、記憶完了メッセージを、プロトコルスタックに送信し得る。したがって、UDPプロキシは、各記憶完了メッセージを、プロトコルスタックから収集し得る。UDPプロキシによって新たに収集された記憶完了メッセージの数量が、Mであるとき、新たに収集されたM個の記憶完了メッセージは、M個のエンコードされるパケットが、新たにメモリ内に記憶されたことを示し得る。したがって、UDPプロキシは、M個の記憶完了メッセージに対応するM個の元のパケットを、M個のエンコードされる元のパケットとして使用し得る。
ステップ802:プロセッサは、処理される第1のデータストリーム内のM個の元のパケットに基づいて、第1のエンコーディングタスクを生成し、Mは、正の整数であり、第1のエンコーディングタスクは、M個の元のパケットをエンコードすることを示すために使用される。
ステップ802は、第1のネットワークデバイスのプロセッサ内のFECソフトウェアインターフェースによって実行され得る。UDPプロキシが、M個の記憶完了メッセージを収集するたびに、UDPプロキシは、収集されたM個の記憶完了メッセージを、プロセッサ内のFECソフトウェアインターフェースに送信し得る。M個の記憶完了メッセージを受信した後、FECソフトウェアインターフェースは、ステップ802を実行し得る。
FECソフトウェアインターフェースは、M個の元のパケットの記憶アドレスを、M個の記憶完了メッセージから獲得し得、M個の元のパケットの記憶アドレスは、M個の元のパケットの各々の記憶アドレスを含む。FECソフトウェアインターフェースは、M個の元のパケットの記憶アドレスと、エンコーディングパラメータとに基づいて、第1のエンコーディングタスクを生成し得、第1のエンコーディングタスクは、ターゲットハードウェアエンジンが、記憶アドレスに基づいて、M個の元のパケットを、メモリから獲得し、獲得されたM個の元のパケットを、エンコーディングパラメータに基づいて、エンコードし得るように、M個の元のパケットの記憶アドレスと、エンコーディングパラメータとを含み得る。いくつかの可能な実装においては、第1のエンコーディングタスクは、M個の元のパケットの記憶アドレスを含まないことがあるが、ターゲットハードウェアエンジンが、M個の元のパケットを、第1のエンコーディングタスクから直接的に獲得し得るように、M個の元のパケットを含み得る。第1のデータストリームが、プライオリティを有するとき、第1のエンコーディングタスクは、第1のデータストリームのプライオリティをさらに含み得る。エンコーディングタスクは、各パケットをエンコードすることを示すために使用される、エンコーディング識別子をさらに搬送し得る。エンコーディング識別子を表す方式は、本出願のこの実施形態においては、特に限定されない。
エンコーディングパラメータは、第1のネットワークデバイスによって事前設定されたエンコーディングパラメータであり得る。第1のネットワークデバイスは、第1のネットワークデバイスが、エンコーディングを実行するたびに、エンコーディングパラメータを使用し得る。もちろん、第1のネットワークデバイスは、パケット伝送ステータスに基づいて、エンコーディングパラメータを適切に調整し得る。第1のネットワークデバイスが、毎回、同じエンコーディングパラメータに基づいて、エンコーディングを実行するとき、同じエンコーディングパラメータは、エンコーディングパラメータ内の元のパケットの数量Mであり得る。第1のネットワークデバイスは、さらに、現在のCPUオーバーヘッド、またはターゲットハードウェアエンジンの現在のコンピューティング能力に基づいて、エンコーディングパラメータ内の元のパケットの数量Mを動的に変更し得る。例えば、CPUオーバーヘッドが、相対的に小さいとき、またはターゲットハードウェアエンジンが、現在、十分なコンピューティング能力を有するとき、第1のネットワークデバイスは、元のパケットの数量を適切に増加させ得、言い換えると、第1のネットワークデバイスは、エンコーディングがそれらに対して一度に実行されるパケットを適切に増加させ得る。逆に、第1のネットワークデバイスは、元のパケットの数量を適切に減少させ得、言い換えると、第1のネットワークデバイスは、エンコーディングがそれらに対して一度に実行されるパケットを適切に減少させ得る。
第1のネットワークデバイスは、さらに、現在のネットワークパケットロス率に基づいて、モデルパラメータ内の冗長パケットの数量Rを動的に調整し得る。例えば、ネットワークパケットロス率が、相対的に高いとき、第1のネットワークデバイスは、冗長パケットの数量Rを適切に増加させ得、言い換えると、第1のネットワークデバイスは、すべての失われたパケットを後で復元するために、1回のエンコーディング処理において生成される冗長パケットの数量を適切に増加させ得る。ネットワークパケットロス率が、相対的に低いとき、第1のネットワークデバイスは、冗長パケットの数量Rを適切に減少させ得、言い換えると、第1のネットワークデバイスは、エンコーディング効率を向上させるために、1回のエンコーディング処理において生成される冗長パケットの数量を適切に減少させ得る。
第1のネットワークデバイスは、エンコーディングパラメータを動的に調整し得るので、第1のネットワークデバイスのエンコーディング効率は、エンコーディングパラメータを調整することによって、向上させ得る。
ステップ803:プロセッサは、第1のエンコーディングタスクを、第1のターゲット送信キュー内に記憶し、第1のターゲット送信キューは、第1のネットワークデバイスの処理されるデータストリームのエンコーディングタスクを、記憶するために使用され、第1のネットワークデバイスの処理されるデータストリームは、第1のデータストリームを含む。
ステップ803は、プロセッサ内のFECソフトウェアインターフェースによって実行され得る。第1のネットワークデバイスは、複数の送信キューを事前設定し得る。送信キューの各々は、第1のネットワークデバイスの処理されるデータストリームのエンコーディングタスクを、記憶するために使用される。第1のターゲット送信キューは、複数の送信キューのうちのいずれか1つであり得る。複数の送信キューは、第1のネットワークデバイスのメモリ、プロセッサ、およびターゲットハードウェアエンジンのうちのいずれか1つの中に配置され得る。
いくつかの可能な実装においては、第1のネットワークデバイスは、送信キューの各々についてのプライオリティを設定し、送信キューの各々は、プライオリティが同じであるデータストリームのエンコーディングタスクを記憶するために使用される。例えば、図9は、本出願の実施形態による、ネットワークデバイスの内部対話手順の概略図である。図9においては、プライオリティがAである送信キューA、およびプライオリティがBである送信キューBが、メモリ内に存在し、プライオリティAは、プライオリティBよりも高い。この場合、送信キューAは、エンコーディングタスク3、5、6を記憶し、送信キューBは、エンコーディングタスク1、2、4を記憶する。エンコーディングタスク3、5、6は、プライオリティがAであるエンコーディングタスクであり、エンコーディングタスク1、2、4は、プライオリティがBであるエンコーディングタスクである。
いくつかの可能な実装においては、ステップ803は、プロセッサが、第1のデータストリームのプライオリティに基づいて、第1のエンコーディングタスクを、第1のターゲット送信キューに追加することを含み得、第1のターゲット送信キューのプライオリティは、第1のデータストリームのプライオリティと等しい。具体的には、FECソフトウェアインターフェースが、1つの第1のエンコーディングタスクを生成した後、FECソフトウェアインターフェースは、第1のデータストリームのプライオリティに基づいて、メモリ内の、第1のデータストリームのプライオリティに対応する第1のターゲット送信キューを決定し得る。第1のターゲット送信キュー内のエンコーディングタスクの数量が、第1のターゲット数量よりも小さいとき、FECソフトウェアインターフェースは、第1のエンコーディングタスクを、第1のターゲット送信キューに追加し、第1のターゲット数量は、第1のターゲット送信キュー内に記憶され得る、エンコーディングタスクの最大数量である。第1のターゲット送信キュー内のエンコーディングタスクの数量が、第1のターゲット数量と等しいとき、FECソフトウェアインターフェースは、第1の事前設定された期間ごとに、第1のターゲット送信キュー内のエンコーディングタスクの数量が、第1のターゲット数量よりも小さいかどうかを問い合わせる。数量が、ひとたび第1のターゲット数量より小さくなると、FECソフトウェアインターフェースは、第1のエンコーディングタスクを、第1のターゲット送信キューに追加する。第1の事前設定された期間は、本出願のこの実施形態においては、特に限定されない。ターゲットハードウェアエンジンは、エンコーディングおよびデコーディングユニットが、アイドルであるときはいつでも、第1のターゲット送信キューに問い合わせ得る。
ステップ804:ターゲットハードウェアエンジンは、第1のエンコーディングタスクを、第1のターゲット送信キューから読み出す。
ターゲットハードウェアエンジンは、ターゲットハードウェアエンジンが、第1のエンコーディングタスクを、第1のターゲット送信キューから読み出す必要があるかどうかを決定するために、最初に、プライオリティ順序に基づいて、メモリ内の送信キューの各々にポーリングを行い得る。いくつかの可能な実装においては、ターゲットハードウェアエンジンは、送信キューの各々の中にエンコーディングタスクが存在するかどうかを、送信キューのプライオリティ順序に基づいて、順番に問い合わせ、送信キューの各々は、1つのプライオリティに対応する。送信キューの各々において、ターゲットハードウェアエンジンは、プライオリティが第1のターゲット送信キューのそれよりも高いキュー内に、エンコーディングタスクが存在しないとき、第1のエンコーディングタスクを、第1のターゲット送信キューから読み出す。
ターゲットハードウェアエンジンが、送信キューの各々にポーリングを行う処理は、以下の通りであり得る。ターゲットハードウェアエンジンは、送信キューのうちでプライオリティが最も高い、第1の送信キューに問い合わせる。エンコーディングタスクが、第1の送信キュー内に存在するとき、ターゲットハードウェアエンジンは、1つのエンコーディングタスクを、第1の送信キューのキュー先頭から獲得し、エンコーディングタスクに基づいて、以下のステップ805を実行する。ターゲットハードウェアエンジンは、第2の事前設定された期間ごとに、第1の送信キューに再び問い合わる。エンコーディングタスクが、第1の送信キュー内にまだ存在するとき、ターゲットハードウェアエンジンは、新しいエンコーディングタスクを、第1の送信キューのキュー先頭から再び獲得する。第1の送信キューが、エンコーディングタスクを記憶しなくなるまで、ターゲットハードウェアエンジンは、複数の送信キューのうちの第2のプライオリティに対応する第2の送信キューが、エンコーディングタスクを有するかどうかを問い合わせる。第2の送信キューが、エンコーディングタスクを有するとき、ターゲットハードウェアエンジンは、1つのエンコーディングタスクを、第2の送信キューから獲得し、以下のステップ805を実行する。第2のプライオリティは、最高のプライオリティの次のプライオリティである。第2の送信キューが、エンコーディングタスクを有さないとき、ターゲットハードウェアエンジンは、類推されるように、プライオリティ順序に基づいて、プライオリティが第2のプライオリティの次の送信キューに問い合わせる。
送信キューのキュー先頭にあるエンコーディングタスクが、ターゲットハードウェアエンジンによって獲得された後、送信キュー内の次のエンコーディングタスクが、送信キューのキュー先頭になる。このようにして、ターゲットハードウェアエンジンは、次回は、次のエンコーディングタスクを、送信キューのキュー先頭から獲得し得る。
ステップ805:ターゲットハードウェアエンジンは、第1のエンコーディングタスク内のM個の元のパケットの記憶アドレスに基づいて、M個の元のパケットを、メモリから獲得する。
第1のエンコーディングタスクを獲得した後、ターゲットハードウェアエンジン内のコントローラは、M個の元のパケットの記憶アドレスを、第1のエンコーディングタスクから獲得し得、ターゲットハードウェアエンジンは、第1のパケット獲得要求を、メモリに送信し得る。第1のパケット獲得要求は、M個の元のパケットの記憶アドレスを搬送する。第1のパケット獲得要求を受信した後、メモリは、記憶アドレス内に記憶されたM個の元のパケットを、ターゲットハードウェアエンジンに送信する。M個の元のパケットを受信した後、ターゲットハードウェアエンジンは、データ処理ユニットが、M個の元のパケットを処理するように、M個の元のパケットを、バッファユニット内にバッファリングする。もちろん、第1のエンコーディングタスクが、M個の元のパケットを直接的に搬送する場合、ターゲットハードウェアエンジンは、M個の元のパケットを、メモリから獲得することなく、M個の元のパケットを、第1のエンコーディングタスクから直接的に獲得し得る。
ステップ806:ターゲットハードウェアエンジンは、R個の冗長パケットを獲得するために、第1のエンコーディングタスクに基づいて、M個の元のパケットに対して、前方誤り訂正FECエンコーディングを実行し、Rは、正の整数である。
M個の元のパケットを獲得した後、ターゲットハードウェアエンジンは、第1のエンコーディングタスク内のエンコーディングパラメータに基づいて、M個の元のパケットに対して、前方誤り訂正FECエンコーディングを実行し得る。可能な方式においては、ターゲットハードウェアエンジン内のデータ処理ユニットは、M個の等長パケットを獲得するために、エンコーディングパラメータ内の元のパケットの数量Mに基づいて、M個の元のパケットに対して、パディング処理を実行し得る。データ処理ユニットは、M個の等長パケットを使用することによって、エンコードされる行列を形成し、エンコードされる行列の1つの行は、1つの等長パケットであり、また、データ処理ユニットは、エンコードされる行列を、エンコーディングおよびデコーディングユニットに送信する。エンコーディングおよびデコーディングユニットは、R個の冗長パケットを獲得し、ステップ806を実施するために、対応する生成行列と、エンコードされる行列とに対する乗算計算を実行する。図1は、生成行列と、エンコードされる行列とに対する乗算計算を実行する処理を説明している。本明細書においては、処理が、本出願のこの実施形態において、再び説明されることはない。
生成行列は、ターゲットハードウェアエンジン内の行列ジェネレータによって生成され得、エンコーディングおよびデコーディングユニットに送られ得る。行列ジェネレータが対応する生成行列を生成する処理は、以下の通りである。ターゲットハードウェアエンジン内のコントローラは、冗長パケットの数量Rと、元のパケットの数量Mとを、第1のエンコーディングタスクから獲得し得、獲得された冗長パケットの数量Rと、獲得された元のパケットの数量Mとを、行列ジェネレータに送信し得る。行列ジェネレータは、冗長パケットの数量Rと、元のパケットの数量Mとに基づいて、(M+R)×M型の生成行列を生成し、(M+R)×M型の生成行列を、エンコーディングおよびデコーディングユニットに送信する。
ステップ807:ターゲットハードウェアエンジンは、R個の冗長パケットを、メモリ内に記憶する。
R個の冗長パケットを生成した後、ターゲットハードウェアエンジン内のエンコーディングおよびデコーディングユニットは、R個の冗長パケットを、バッファユニット内にバッファリングし、バッファユニットは、第1のパケット記憶要求を、メモリに送信する。第1のパケット記憶要求は、R個の冗長パケットの記憶アドレスと、R個の冗長パケットとを搬送し、R個の冗長パケットの記憶アドレスは、冗長パケットの各々の記憶アドレスを含む。第1のパケット記憶要求を受信した後、メモリは、R個の冗長パケットを、R個の冗長パケットの記憶アドレス内に記憶する。
ステップ808:R個の冗長パケットが、記憶された後、ターゲットハードウェアエンジンは、M個の元のパケットの第1のエンコーディング完了情報を獲得するために、R個の冗長パケットの記憶アドレスを、第1のエンコーディングタスクに追加し、第1のエンコーディング完了情報は、M個の元のパケットのエンコーディングが完了したことを示すために使用される。
ターゲットハードウェアエンジンは、さらに、第1のエンコーディングタスク内のエンコーディング識別子を、エンコーディング完了識別子で置換し得、エンコーディング完了識別子は、元のパケットのエンコーディングが完了したことを表すために使用される。エンコーディング完了識別子を表す方式は、本出願のこの実施形態においては、特に限定されない。第1のエンコーディングタスクは、M個の最初のパケットの記憶アドレスと、エンコーディングパラメータとを含むので、第1のエンコーディング完了情報は、R個の冗長パケットの記憶アドレスと、M個の元のパケットの記憶アドレスと、エンコーディングパラメータとを含み得る。第1のエンコーディングタスクが、第1のデータストリームのプライオリティを搬送するとき、第1のエンコーディング完了情報は、第1のデータストリームのプライオリティをさらに含み得る。
ステップ809:ターゲットハードウェアエンジンは、第1のエンコーディング完了情報を、第1のターゲット受信キュー内に記憶し、第1のターゲット受信キューは、第1のネットワークデバイスの処理されるデータストリームのエンコーディング完了情報を記憶するために使用される。
第1のネットワークデバイスは、複数の受信キューを事前設定し得る。受信キューの各々は、第1のネットワークデバイスの処理されるデータストリームのエンコーディング完了情報を記憶するために使用される。第1のターゲット受信キューは、複数の受信キューのうちのいずれか1つであり得る。複数の受信キューは、第1のネットワークデバイスのメモリ、プロセッサ、およびターゲットハードウェアエンジンのうちのいずれか1つの中に配置され得る。
いくつかの可能な実装においては、第1のネットワークデバイスは、受信キューの各々についてのプライオリティを設定し得、受信キューの各々は、プライオリティが同じであるデータストリームのエンコーディング完了情報を、記憶するために使用される。例として、図9が、依然として使用される。図9においては、プライオリティがAである受信キューA、およびプライオリティがBである受信キューBが、存在し、プライオリティAは、プライオリティBよりも高い。この場合、受信キューAは、(図9において、簡潔に「完了情報3、5、6」と呼ばれる)エンコーディング完了情報3、5、6を記憶し、受信キューBは、エンコーディング完了情報1、2、4を記憶し、エンコーディング完了情報3、5、6は、プライオリティがAであるエンコーディング完了情報であり、(図9において、簡潔に「完了情報1、2、4」と呼ばれる)エンコーディング完了情報1、2、4は、プライオリティがBであるエンコーディング完了情報である。
いくつかの可能な実装においては、ターゲットハードウェアエンジンは、第1のデータストリームのプライオリティに基づいて、第1のエンコーディング完了情報を、メモリ内の第1のターゲット受信キューに追加し、第1のターゲット受信キューのプライオリティは、第1のデータストリームのプライオリティと等しい。具体的には、ターゲットハードウェアエンジンは、第1のデータストリームのプライオリティに基づいて、メモリ内の、第1のデータストリームのプライオリティに対応する第1のターゲット受信キューを決定し得る。第1のターゲット受信キュー内のエンコーディング完了情報の量が、第2のターゲット数量よりも少ないとき、ターゲットハードウェアエンジンは、第1のエンコーディング完了情報を、第1のターゲット受信キューに追加し、第2のターゲット数量は、第1のターゲット受信キュー内に記憶され得る、エンコーディング完了情報の最大量である。第1のターゲット受信キュー内のエンコーディング完了情報の量が、第2のターゲット数量と等しいとき、FECソフトウェアインターフェースは、第2の事前設定された期間ごとに、第1のターゲット受信キュー内のエンコーディング完了情報の量が、第2のターゲット数量よりも小さいかどうかを問い合わせる。量が、ひとたび第2のターゲット数量より小さくなると、FECソフトウェアインターフェースは、第1のエンコーディング完了情報を、第1のターゲット受信キューに追加する。第2の事前設定された期間は、本出願のこの実施形態においては、特に限定されない。
ステップ810:プロセッサは、第1のエンコーディング完了情報を、第1のターゲット受信キューから読み出す。
ステップ810は、プロセッサ内のFECソフトウェアインターフェースによって実行され得る。FECソフトウェアインターフェースは、プライオリティ順序に基づいて、受信キューの各々にポーリングを行い得る。FECソフトウェアインターフェースは、最初に、エンコーディング完了情報が、第1のターゲット受信キューから獲得され得るかどうかを、ポーリング方式で、決定し得る。いくつかの可能な実装においては、FECソフトウェアインターフェースは、受信キューの各々が、他のエンコーディング完了情報を有するかどうかを、プライオリティ順序に基づいて、順番に問い合わせる。受信キューの各々は、1つのプライオリティに対応する。受信キューの各々において、FECソフトウェアインターフェースは、プライオリティが第1のターゲット受信キューのそれよりも高いキュー内に、他のエンコーディング完了情報が存在しないとき、第1のエンコーディング完了情報を、第1のターゲット受信キューから獲得する。
FECソフトウェアインターフェースが、受信キューの各々にポーリングを行う処理は、以下の通りであり得る。FECソフトウェアインターフェースは、受信キューのうちでプライオリティが最も高い、第1の受信キューに問い合わせる。第1の受信キューが、エンコーディング完了情報を有するとき、FECソフトウェアインターフェースは、エンコーディング完了情報の1つを、第1の受信キューのキュー先頭から獲得し、エンコーディング完了情報に基づいて、以下のステップ811を実行する。FECソフトウェアインターフェースは、第3の事前設定された期間ごとに、第1の受信キューに再び問い合わせる。第1の受信キューが、エンコーディング完了情報をまだ記憶しているとき、FECソフトウェアインターフェースは、エンコーディング完了情報の新しい1つを、第1の受信キューのキュー先頭から獲得する。第1の受信キューが、エンコーディングタスクを記憶しなくなるまで、FECソフトウェアインターフェースは、複数の受信キューのうちの次のプライオリティに対応する第2の受信キューが、エンコーディング完了情報を有するかどうかを問い合わせる。第2の受信キューが、エンコーディング完了情報を記憶しているとき、FECソフトウェアインターフェースは、エンコーディング完了情報の1つを、第2の受信キューから獲得し、以下のステップ811を実行する。第2の受信キューが、エンコーディング完了情報を記憶していないとき、FECソフトウェアインターフェースは、類推されるように、プライオリティ順序に基づいて、プライオリティが第2のプライオリティの次の第3の受信キューに問い合わせる。
第1の受信キュー内のエンコーディング完了情報が、FECソフトウェアインターフェースによって獲得された後、第1の受信キュー内のエンコーディング完了情報の次のものが、第1の受信キューのキュー先頭になる。このようにして、FECソフトウェアインターフェースは、次回は、エンコーディング完了情報の次のものを、第1の受信キューのキュー先頭から獲得する。
ステップ811:プロセッサは、第1のエンコーディング完了情報に基づいて、M個の元のパケットと、R個の冗長パケットとを、メモリから獲得する。
ステップ811は、プロセッサ内のFECソフトウェアインターフェースによって実行され得る。FECソフトウェアインターフェースは、R個の冗長パケットの記憶アドレスと、M個の元のパケットの記憶アドレスと、エンコーディングパラメータとを、第1のエンコーディング完了情報から獲得し得る。FECソフトウェアインターフェースは、第2のパケット獲得要求を、メモリに送信し、第2のパケット獲得要求は、R個の冗長パケットの記憶アドレスと、M個の元のパケットの記憶アドレスとを搬送する。第2のパケット獲得要求を受信したとき、メモリは、第2のパケット獲得要求内のR個の冗長パケットの記憶アドレスと、M個の元のパケットの記憶アドレスとに基づいて、R個の冗長パケットと、M個の元のパケットとを、FECソフトウェアインターフェースに返す。
ステップ812:プロセッサは、M個の元のパケットと、R個の冗長パケットとを、第2のネットワークデバイスに送信する。
ステップ812は、プロセッサ内のFECソフトウェアインターフェースによって実行され得る。メモリによって返されたR個の冗長パケットと、M個の元のパケットとを獲得した後、FECソフトウェアインターフェースは、第1のエンコーディング完了情報内のエンコーディングパラメータに基づいて、R個の冗長パケットと、M個の元のパケットとを、FECパケット内にカプセル化する。いくつかの可能な実装においては、ステップ812は、以下のステップ8121からステップ8123に示される処理を使用することによって、実施され得る。
ステップ8121:FECソフトウェアインターフェースは、M個の等長パケットを獲得するために、エンコーディングパラメータ内のターゲットサイズに基づいて、M個の元のパケットのうちの、サイズがターゲットサイズよりも小さいパケットに対して、パディング処理を実行し、等長パケットの各々のサイズが、ターゲットサイズである。
ステップ8122:FECソフトウェアインターフェースは、M個の元のFECパケットを獲得するために、FECパケットヘッダを、等長パケットの各々に追加し、R個の冗長FECパケットを獲得するために、FECパケットヘッダを、冗長パケットの各々に追加し、FECパケットヘッダは、M個の元のパケットのエンコーディングパラメータを搬送する。
例えば、図10は、本出願の実施形態によるFECパケットの概略図である。図10におけるFECパケットのペイロードパケットが、第1のデータストリーム内の元のパケットによって形成された等長パケットであるとき、FECパケットは、元のFECパケットである。FECパケットのペイロードパケットが、冗長パケットであるとき、FECパケットは、冗長FECパケットである。
FECパケットヘッダは、M個の元のパケットのエンコーディングステータスを示すために使用される。FECパケットヘッダは、M個の元のパケットのエンコーディングパラメータを搬送する。例えば、図10におけるFECパケットヘッダは、ここではM=4である、元のパケットの数量Mと、ここではR=2である、冗長パケットの数量Rと、ここではL=30MBである、ターゲットサイズLとを搬送する。FECパケットヘッダは、M個の元のパケットのターゲット識別子をさらに搬送し得、ターゲット識別子は、第1のデータストリーム内の元のパケットに対して実行されるエンコーディングの回数の数量を示すために使用される。例えば、図10におけるFECパケットヘッダ内のターゲット識別子が、1.2であるとき、それは、第1のネットワークデバイスが、第1のデータストリーム1内のパケットに対して、2回目のエンコーディングを実行し、M個の元のパケットは、2回目のエンコーディングのために使用される、第1のデータストリーム内の元のパケットであることを示す。
FECパケットヘッダは、プライオリティ識別子と、アルゴリズム識別子と、第1のデータストリーム内のM個の元のパケットの各々のシーケンス番号と、エンコードされる行列内の等長パケットの各々のシーケンス番号と、エンコードした行列内の冗長パケットの各々のシーケンス番号とをさらに搬送し得る。プライオリティ識別子は、第1のデータストリームのプライオリティを示すために使用され、アルゴリズム識別子は、エンコーディング処理において第1のネットワークデバイスによって使用されるアルゴリズムを示すために使用され、エンコードされる行列内の等長パケットの各々のシーケンス番号は、エンコードされる行列内の等長パケットの各々の行番号であり、エンコードした行列内の冗長パケットの各々のシーケンス番号は、エンコードした行列内の冗長パケットの各々の行番号である。例えば、図10におけるFECパケットヘッダにおいては、第1のデータストリーム内の元のパケットA0からA3のシーケンス番号は、それぞれ、10、11、12、13であり、等長パケットM0からM3のシーケンス番号は、それぞれ、0、1、2、3であり、冗長パケットR0、R1のシーケンス番号は、それぞれ、4、5である。図10におけるFECパケットヘッダの例は、図1に示されるエンコーディング計算処理に基づいている。
ステップ8123:プロセッサは、M個の元のFECパケットと、R個の冗長FECパケットとを送信する。
M個の元のFECパケットとR個の冗長FECパケットのパケットヘッダは、同じであるので、M個の元のFECパケットとR個の冗長FECパケットは、FECパケットのグループと見なされ得る。M個の元のFECパケットおよびR個の冗長FECパケットのうちの任意のFECパケットについて、任意のFECパケットを獲得した後に毎回、FECソフトウェアインターフェースは、任意のFECパケットを、第1のネットワークデバイス内のTMエンジンに出力する。FECソフトウェアインターフェースは、FECパケットを、TMエンジンに連続的に出力し得るので、TMエンジンは、第1のデータストリームに対応する、エンコードしたストリームを形成し得る。エンコードしたストリームを操作した後、TMエンジンは、操作されたエンコードしたストリームを、PPEに出力する。PPEは、操作されたエンコードしたストリームを、GE/10GEネットワークポートに転送し、GE/10GEネットワークポートは、第2のネットワークデバイスが、エンコードしたストリームを獲得することができるように、操作されたエンコードしたストリームを、第2のネットワークデバイスに出力する。
エンコーディング処理における、第1のネットワークデバイス内のプロセッサと、ターゲットハードウェアエンジンと、メモリとの間の対話ステータスをさらに説明するために、図11に示される、本出願の実施形態によるFECエンコーディングのフローチャートを参照する。手順は、具体的には、ステップ1101からステップ1106を含む。
ステップ1101:UDPプロキシは、記憶完了メッセージを、FECソフトウェアインターフェースに送信する。
ステップ1102:FECソフトウェアインターフェースによって受信された記憶完了メッセージの数量が、Mと等しいとき、FECソフトウェアインターフェースは、第1のエンコーディングタスクを生成し、第1のエンコーディングタスクを、メモリのタスクバッファに送信する。
タスクバッファは、複数の送信キューと、複数の受信キューとを含み、FECソフトウェアインターフェースは、第1のエンコーディングタスクを、第1のエンコーディングタスクのプライオリティに対応する第1のターゲット送信キューに送信し得る。
ステップ1103:ターゲットハードウェアエンジンは、第1のエンコーディングタスクを、タスクバッファ内の第1のターゲット送信キューから獲得し、第1のエンコーディングタスク内の記憶アドレスに基づいて、M個の元のパケットを、メモリから読み出す。
ステップ1104:ターゲットハードウェアエンジンは、R個の冗長パケットを獲得するために、読み出されたM個の元のパケットに対して、FECエンコーディングを実行し、ターゲットハードウェアエンジンは、R個の冗長パケットを、メモリ内に記憶し、第1のエンコーディング完了情報を、タスクバッファ内の第1のターゲット受信キューに送信する。
ステップ1105:FECソフトウェアインターフェースは、第1のエンコーディング完了情報を、タスクバッファ内の第1のターゲット受信キューから読み出し、第1のエンコーディング完了情報に基づいて、メモリ内のM個の元のパケットと、R個の冗長パケットとを読み出し、FECパケットを獲得するために、FECパケットヘッダを、M個の元のパケットの各々と、R個の冗長パケットの各々とに別々にカプセル化する。
ステップ1106:FECソフトウェアインターフェースは、FECパケットを送信する。
ステップ807からステップ812に示される処理は、ターゲットハードウェアエンジン、メモリ、およびプロセッサが、M個の元のパケットと、R個の冗長パケットとを、第2のネットワークデバイスに協力して送信する処理である。いくつかの可能な実装においては、ターゲットハードウェアエンジンは、さらに、M個の元のパケットと、R個の冗長パケットとを、プロセッサに直接的に送信し得、プロセッサは、M個の元のパケットと、R個の冗長パケットとを伝送するために、8122および8123に示される処理を実行する。いくつかの可能な実装においては、M個の元のパケットと、R個の冗長パケットとを伝送するために、ターゲットハードウェアエンジンが、代替として、8122および8123に示される処理を実行し得る。
本出願のこの実施形態において提供される方法によれば、FECエンコーディングは、プロセッサではなく第1のネットワークデバイスのターゲットハードウェアエンジンにおいて、第1のデータストリーム内のM個の元のパケットに対して、直接的に実行される。したがって、CPUのオーバーヘッドは、低減させることができ、第1のネットワークデバイスのエンコーディング効率は、向上させることができる。このようにして、第1のネットワークデバイスは、パケット伝送処理における大きいスループットの要件を容易に満たすことができる。加えて、第1のネットワークデバイスは、エンコーディングパラメータを調整することによって、第1のネットワークデバイスのエンコーディング効率が、向上させられるように、エンコーディングパラメータを動的に調整し得る。
第2のネットワークデバイスが、エンコードしたストリームを獲得した後、エンコードしたストリーム内の元のFECパケットが、失われている場合、第2のネットワークデバイスは、失われたFECパケットを復元するために、失われていないFECパケットをデコードし得る。処理工程は、以下の通りであり得る。いずれかのエンコードしたストリームを獲得した後、第2のネットワークデバイスは、いずれかのエンコードしたストリームを、メモリ内に記憶し得る。いずれかのエンコードしたストリーム内のFECパケットのいずれかのグループ内の元のFECパケットの数量が、エンコーディング中の元のパケットの数量Mよりも少ない場合、それは、伝送処理において、FECパケットのそのいずれかのグループ内において、パケットロスが発生したことを示す。第2のネットワークデバイス内のプロセッサは、FECパケットのそのいずれかのグループをデコードすることを示すために使用されるデコーディングタスクを生成し得、プロセッサは、デコーディングタスクを、メモリに配送し得る。第2のネットワークデバイス内のターゲットハードウェアエンジンは、メモリ内のデコーディングタスクを読み出し、FECパケットのそのいずれかのグループ内の失われた元のパケットを復元するために、デコーディングタスクに基づいて、メモリ内に記憶されたFECパケットのそのいずれかのグループに対して、FECデコーディングを実行し、その後、復元された元のパケットを、メモリ内に記憶する。その後、プロセッサは、FECパケットのそのいずれかのグループ内の失われていない元のFECパケットと、復元された元のパケットとを、メモリから獲得し、失われていない元のパケットを獲得するために、失われていない元のFECパケットのFECパケットヘッダを除去し得る。処理工程をさらに説明するために、図12Aおよび図12Bに示される、本出願の実施形態によるパケット処理方法のフローチャートを参照する。第2のネットワークデバイスは、プロセッサとターゲットハードウェアエンジンとを含み得、方法の手順は、ステップ1201からステップ1213を含む。
1201:プロセッサは、FECパケットの第1のグループを、受信された第1のデータストリームから獲得し、FECパケットの第1のグループ内のすべてのFECパケットのFECパケットヘッダは、同じであり、FECパケットヘッダは、FECエンコードした元パケットの数量Mを含む。
第2のネットワークデバイスは、複数のエンコードしたストリームを獲得し得、第1のデータストリームは、複数のエンコードしたストリーム内のいずれかのエンコードしたストリームであり得、第1のデータストリームは、FECパケットの複数のグループを含み得、FECパケットの第1のグループは、FECパケットの複数のグループのうちのFECパケットのいずれかのグループである。FECパケットの第1のグループは、1回のエンコーディングが実行された後に、第1のネットワークデバイスによって出力された、M個の元のFECパケットと、R個の冗長FECパケットとを含む。
第2のネットワークデバイスが、第1のデータストリームを受信し始めたとき、第2のネットワークデバイスが、第1のデータストリーム内のFECパケットを受信するたびに、第2のネットワークデバイスは、FECパケットを、第2のネットワークデバイスのメモリ内に記憶する。いくつかの可能な実装においては、第2のネットワークデバイスのGE/10GEネットワークポートが、FECパケットを受信し、FECパケットを、第2のネットワークデバイス内のPPEに送信する。PPEは、FECパケットを、メモリ内に記憶し、FECパケットの記憶アドレスを記録し、記憶完了メッセージを、第2のネットワークデバイスのNPエンジンに送信し、記憶完了メッセージは、FECパケットの記憶アドレスを搬送する。記憶完了メッセージを受信した後、NPエンジンは、記憶完了メッセージを、第2のネットワークデバイスのCPU内のプロトコルスタックに送信し得る。したがって、UDPプロキシは、各記憶完了メッセージを、プロトコルスタックから収集し、収集された記憶完了メッセージを、第2のネットワークデバイスのFECソフトウェアインターフェースに送信し得る。FECソフトウェアインターフェースは、第3の事前設定された期間ごとに、各記憶完了メッセージを獲得する。FECソフトウェアインターフェースは、複数のパケットヘッダを獲得するために、各記憶完了メッセージで搬送された記憶アドレスに基づいて、メモリに対応する記憶アドレスにあるFECパケットのパケットヘッダを読み出す。その後、FECソフトウェアインターフェースは、同じパケットヘッダを獲得するために、複数のパケットヘッダを比較し、パケットヘッダが同じであるFECパケットを、FECパケットのグループとして決定する。言い換えると、第1のデータストリーム内のFECパケットについて、第3の事前設定された期間が、経過するたびに、第2のネットワークデバイスは、第3の事前設定された期間内に新たに記憶されたFECパケットのうち、FECパケットヘッダが同じであるパケットを、FECパケットの第1のグループとして使用する。第3の事前設定された期間は、本出願のこの実施形態においては、特に限定されない。なぜなら、FECパケットヘッダは、ターゲット識別子を搬送するので、ターゲット識別子は、エンコーディングの回数の数量を示すために使用される。いくつかの可能な実装においては、複数のFECパケットのパケットヘッダ内のターゲット識別子が、同じであるとき、複数のFECパケットが、同じ回のエンコーディングの後に獲得されたパケットであることも示され得る。言い換えると、複数のFECパケットは、FECパケットのグループである。
1202:FECパケットの第1のグループ内の元のパケットの数量が、元のパケットの数量Mよりも小さいとき、プロセッサは、FECパケットの第1のグループに基づいて、第1のデコーディングタスクを生成し、第1のデコーディングタスクは、FECパケットの第1のグループをデコードすることを示すために使用される。
ステップ1202は、プロセッサ内のFECソフトウェアインターフェースによって実行され得る。FECソフトウェアインターフェースが、FECパケットの第1のグループを決定した後、第2のネットワークデバイスは、エンコーディングパラメータを、FECパケットの第1のグループのうちの1つのFECパケットのパケットヘッダから獲得し得る。エンコーディングパラメータ内の元のパケットの数量Mは、FECパケットの第1のグループ内に最初に含まれる元のFECパケットの数量である。元のFECパケットの各々は、エンコーディングの間の1つの元のパケットに対応するので、FECパケットの第1のグループ内の元のFECパケットの数量が、元のパケットの数量Mよりも小さいとき、言い換えると、FECパケットの第1のグループ内の元のパケットの数量が、元のパケットの数量Mよりも小さいとき、それは、FECパケットの第1のグループ内の少なくとも1つの元のFECパケットが、失われたことを示す。言い換えると、第1のネットワークデバイスが、FECパケットの第1のグループを、第2のネットワークデバイスに伝送する処理において、いくつかの元のFECパケット、すなわち、エンコーディングの間の元のパケットが、失われている。エンコーディング前の第1のデータストリームを復元するために、FECソフトウェアインターフェースは、ターゲットハードウェアエンジンが、失われた元のFECパケットを復元するために、第1のデコーディングタスクに基づいて、FECパケットの第1のグループ内の失われていないFECパケットをデコードするように、第1のデコーディングタスクを生成し得る。
第1のデコーディングタスクは、ターゲットハードウェアエンジンが、FECパケットの第1のグループの記憶アドレスに基づいて、FECパケットの第1のグループを、メモリから獲得し得るように、またはターゲットハードウェアエンジンが、FECパケットの第1のグループを、第1のデコーディングタスクから直接的に獲得し得るように、FECパケットの第1のグループの記憶アドレス、またはFECパケットの第1のグループを含む。第1のデータストリームが、プライオリティを有するとき、第1のデコーディングタスクは、第1のデータストリームのプライオリティをさらに含み得る。
複数のFECパケット内の元のFECパケットの数量が、エンコーディングパラメータ内の元のパケットの数量Mと等しいとき、それは、FECパケットの第1のグループ内の元のFECパケットが、失われていないことを示し、第2のネットワークデバイスは、以下のステップ1211を実行し得る。
1203:プロセッサは、第1のデコーディングタスクを、第2のターゲット送信キュー内に記憶し、第2のターゲット送信キューは、第2のネットワークデバイスの処理されるデータストリームのデコーディングタスクを記憶するために使用され、第2のネットワークデバイスの処理されるデータストリームは、第1のデータストリームを含む。
ステップ1203は、プロセッサ内のFECソフトウェアインターフェースによって実行され得る。ステップ1203における処理されるデータストリームは、処理されるエンコードしたストリームである。第2のネットワークデバイスは、複数の送信キューを事前設定し得る。送信キューの各々は、第2のネットワークデバイスの処理されるデータストリームのデコーディングタスクを記憶するために使用される。第2のターゲット送信キューは、複数の送信キューのうちのいずれか1つであり得る。複数の送信キューは、第2のネットワークデバイスのメモリ、プロセッサ、およびターゲットハードウェアエンジンのうちのいずれか1つの中に配置され得る。
いくつかの可能な実装においては、第2のネットワークデバイスは、送信キューの各々についてのプライオリティを設定し得、送信キューの各々は、プライオリティが同じであるデータストリームのデコーディングタスクを記憶するために使用される。いくつかの可能な実装においては、ステップ1203は、プロセッサが、第1のデータストリームのプライオリティに基づいて、第1のデコーディングタスクを、第2のターゲット送信キューに追加することを含み得、第2のターゲット送信キューのプライオリティは、第1のデータストリームのプライオリティと等しい。プロセッサが、第1のデコーディングタスクを、第2のターゲット送信キューに追加する処理は、ステップ803において、プロセッサが、第1のエンコーディングタスクを、第1のターゲット送信キューに追加する処理と同じである。本明細書においては、第1のデコーディングタスクを第2のターゲット送信キューに追加する具体的な処理が、本出願のこの実施形態において、再び説明されることはない。
1204:ターゲットハードウェアエンジンは、第1のデコーディングタスクを、第2のターゲット送信キューから読み出す。
ターゲットハードウェアエンジンは、ターゲットハードウェアエンジンが、第1のデコーディングタスクを、第2のターゲット送信キューから読み出す必要があるかどうかを決定するために、最初に、プライオリティ順序に基づいて、メモリ内の第2の送信キューの各々にポーリングを行い得る。いくつかの可能な実装においては、ターゲットハードウェアエンジンは、送信キューの各々の中にデコーディングタスクが存在するかどうかを、送信キューのプライオリティ順序に基づいて、順番に問い合わせ、送信キューの各々は、1つのプライオリティに対応する。送信キューの各々において、ターゲットハードウェアエンジンは、プライオリティが第2のターゲット送信キューのそれよりも高いキュー内に、他のデコーディングタスクが存在しないとき、第1のデコーディングタスクを、第2のターゲット送信キューから読み出す。
ターゲットハードウェアエンジンが、送信キューの各々にポーリングを行うことによって、第1のデコーディングタスクを獲得する処理は、ステップ804において、ターゲットハードウェアエンジンが、送信キューの各々にポーリングを行うことによって、第1のエンコーディングタスクを獲得する処理と同じである。本明細書においては、送信キューの各々にポーリングを行うことによって、第1のデコーディングタスクを獲得する処理が、本出願のこの実施形態において、再び説明されることはない。
1205:ターゲットハードウェアエンジンは、第1のデコーディングタスク内のFECパケットの第1のグループの記憶アドレスに基づいて、FECパケットの第1のグループを、メモリから獲得する。
ステップ1205に示される処理は、ステップ805に示される処理と同じである。本明細書においては、ステップ1205が、本出願のこの実施形態において、再び説明されることはない。いくつかの可能な実装においては、第1のデコーディングタスクが、FECパケットの第1のグループを搬送するとき、ターゲットハードウェアエンジンは、FECパケットの第1のグループを、メモリから獲得することなく、FECパケットの第1のグループを、第1のデコーディングタスクから直接的に獲得し得る。ターゲットハードウェアエンジンによって獲得されるFECパケットの第1のグループは、FECパケットの第1のグループ内の失われていないFECパケットであり、失われていない元のFECパケットと、失われていない冗長FECパケットとを含む。
1206:ターゲットハードウェアエンジンは、FECパケットの第1のグループ内の失われた元のパケットを獲得するために、FECパケットの第1のグループ内の元のパケットと、元のパケットの冗長パケットとに対して、FECデコーディングを実行する。
ターゲットハードウェアエンジンが、FECパケットの第1のグループを獲得したとき、ターゲットハードウェアエンジン内のデータ処理ユニットは、複数の等長パケットと、少なくとも1つの冗長パケットとを獲得するために、元のFECパケットのパケットヘッダと、冗長FECパケットのパケットヘッダとを、FECパケットの第1のグループから除去し得る。等長パケットの各々は、FECパケットの第1のグループ内の失われた元のパケットである。データ処理ユニットは、複数の等長パケットと、少なくとも1つの冗長パケットとを使用することによって、復元行列を形成し、復元行列を、エンコーディングおよびデコーディングユニットに送信し得る。行列ジェネレータは、対応するターゲット検査行列を構築し、対応するターゲット検査行列を、エンコーディングおよびデコーディングユニットに送信する。エンコーディングおよびデコーディングユニットは、エンコードされる行列を獲得するために、対応するターゲット検査行列の逆行列と、復元行列とに対する乗算計算を実行し、FECパケットヘッダ内の等長パケットの各々のシーケンス番号と、冗長パケットの各々のシーケンス番号とに基づいて、どの等長パケットが失われたか、およびどの冗長パケットが失われたか、言い換えると、どの元のFECパケットが失われたか、またはどの冗長FECパケットが失われたかを決定する。したがって、失われた等長パケットが、失われた元のパケットを獲得し、ステップ1206を実施するために、エンコードされる行列から獲得され得る。図2は、ターゲット検査行列の逆行列と、復元行列との乗算計算処理を説明している。本明細書においては、その処理が、本出願のこの実施形態において、再び説明されることはない。
行列ジェネレータが、対応するターゲット検査行列を構築する処理は、以下の通りである。ターゲットハードウェアエンジン内のコントローラは、パケットヘッダ内のエンコーディングパラメータ内の冗長パケットの数量Rに基づいて、失われた冗長FECパケットの数量を決定し、失われた冗長FECパケットの数量は、冗長パケットの数量Rと、複数のFECパケットのうちの冗長FECパケットの数量との間の差である。コントローラは、FECパケットヘッダ内のエンコーディングパラメータ内の元のパケットの数量Mと、複数のFECパケットのうちの元のFECパケットの数量とに基づいて、失われた元のFECパケットの数量を決定し、失われた元のFECパケットの数量は、元のパケットの数量Mと、複数のFECパケットのうちの元のFECパケットの数量との間の差である。コントローラは、失われた冗長FECパケットの数量と、失われた元のFECパケットの数量とを、行列ジェネレータに送信する。行列ジェネレータは、失われた冗長FECパケットの数量と、失われた元のFECパケットの数量とに基づいて、対応するターゲット検査行列を構築し、対応するターゲット検査行列を、エンコーディングおよびデコーディングユニットに送信する。
ステップ1205およびステップ1206に示される処理は、FECパケットの第1のグループ内の失われた元のパケットを獲得するために、第1のデコーディングタスクに基づいて、FECパケットの第1のグループ内の元のパケットと、元のパケットの冗長パケットとに対して、FECデコーディングを実行する処理である。
1207:ターゲットハードウェアエンジンは、FECパケットの第1のグループ内の失われた元のパケットを、メモリ内に記憶する。
ステップ1207に示される処理は、ステップ807に示される処理と同じである。本明細書においては、ステップ1207が、本出願のこの実施形態において、再び説明されることはない。
1208:失われた元のパケットの記憶が、完了した後、ターゲットハードウェアエンジンは、第1のデコーディング完了情報を獲得するために、失われた元のパケットの記憶アドレスを、第1のデコーディングタスクに追加し、第1のエンコーディング完了情報は、FECパケットの第1のグループのデコーディングが、完了したことを示すために使用される。
第1のデコーディング完了情報は、FECパケットの第1のグループ内の失われた元のパケットと元のFECパケットとの記憶アドレスを搬送する。第1のデータストリームが、プライオリティを有するとき、第1のデコーディング完了情報は、第1のデータストリームのプライオリティをさらに搬送する。ステップ1208に示される処理は、ステップ808において、第1のエンコーディング完了情報を生成する処理と同じである。本明細書においては、ステップ1208が、本出願のこの実施形態において、再び説明されることはない。
1209:ターゲットハードウェアエンジンは、第1のデコーディング完了情報を、第2のターゲット受信キューに追加し、第2のターゲット受信キューは、第2のネットワークデバイスの処理されるエンコードしたストリームのデコーディング完了情報を記憶するために使用される。
第2のネットワークデバイスは、複数の受信キューを事前設定し得る。受信キューの各々は、第2のネットワークデバイスの処理されるエンコードしたストリームのデコーディング完了情報を記憶するために使用される。第2のターゲット受信キューは、複数の受信キューのうちのいずれか1つであり得る。複数の受信キューは、第2のネットワークデバイスのメモリ、プロセッサ、およびターゲットハードウェアエンジンのうちのいずれか1つの中に配置され得る。
いくつかの可能な実装においては、第2のネットワークデバイスは、受信キューの各々についてのプライオリティを設定し得る。いくつかの可能な実装においては、第1のデコーディング完了情報は、エンコードしたストリームのプライオリティに基づいて、メモリ内の第2のターゲット受信キューに追加され、第2のターゲット受信キューのプライオリティは、エンコードしたストリームのプライオリティと等しい。具体的な追加処理は、ステップ809において、第1のエンコーディング完了情報を、第1のターゲット受信キューに追加する処理と同じである。
1210:プロセッサは、第1のデコーディング完了情報を、第2のターゲット受信キューから読み出す。
ステップ1210は、プロセッサ内のFECソフトウェアインターフェースによって実行され得る。FECソフトウェアインターフェースは、プライオリティ順序に基づいて、第2の受信キューにポーリングを行い得る。FECソフトウェアインターフェースは、最初に、第1のデコーディング完了情報が、第2のターゲット受信キューから獲得され得るかどうかを、ポーリング方式で、決定し得る。いくつかの可能な実装においては、FECソフトウェアインターフェースは、第2の受信キューの各々が、他のデコーディング完了情報を有するかどうかを、プライオリティ順序に基づいて、順番に問い合わせ、第2の受信キューの各々は、1つのプライオリティに対応する。第2の受信キューの各々において、FECソフトウェアインターフェースは、プライオリティが第2のターゲット受信キューのそれよりもが高いキュー内に、他のデコーディング完了情報が存在しないとき、デコーディング完了情報を、第2のターゲット受信キューから獲得する。ステップ1210において、FECソフトウェアインターフェースが、受信キューの各々にポーリングを行う処理は、ステップ810において、FECソフトウェアインターフェースが、受信キューの各々にポーリングを行う処理と同じである。
1211:プロセッサは、第1のデコーディング完了情報に基づいて、FECパケットの第1のグループ内の元のFECパケットと、失われた元のパケットとを、メモリから獲得する。
ステップ1211に示される処理は、ステップ811において、M個の元のパケットと、R個の冗長パケットとを獲得する処理と同じである。本明細書においては、ステップ1211が、本出願のこの実施形態において、再び説明されることはない。
1212:プロセッサは、FECパケットの第1のグループ内の元のFECパケットと、失われた元のパケットとに基づいて、第1のデータストリームがエンコードされる前のデータストリームを復元する。
ステップ1212は、プロセッサ内のFECソフトウェアインターフェースによって実行され得る。FECソフトウェアインターフェースは、複数の等長パケットを獲得するために、最初に、FECパケットの第1のグループ内の失われていない元のFECパケットのパケットヘッダを除去し、その後、複数の等長パケットと、失われた元のパケットとに基づいて、第1のデータストリームがエンコードされる前のデータストリームを復元し得る。いくつかの可能な実装においては、ステップ1212は、以下のステップ12Aから12Cに示される処理を使用することによって、実施され得る。
ステップ12A:FECパケットの第1のグループ内の元のFECパケットについて、FECソフトウェアインターフェースは、複数の等長パケットを獲得するために、元のFECパケットの各々のFECパケットヘッダを除去する。
ステップ12B:FECソフトウェアインターフェースは、第1のデータストリームがエンコードされる前のデータストリーム内のM個の元のパケットを獲得するために、複数の等長パケットと、失われた元のパケット内のパディングされたデータとを除去する。
ステップ12C:FECソフトウェアインターフェースは、第1のデータストリームがエンコードされる前のデータストリームを獲得するために、FECパケットヘッダで搬送された、元のパケットの各々のシーケンス番号に基づいて、M個の元のパケットをソートする。
1213:プロセッサは、データストリームを、第2の端末に送信する。
ステップ1213は、ステップ8123と同様である。本明細書においては、ステップ1213が、本出願のこの実施形態において、再び説明されることはない。
デコーディング処理における、第2のネットワークデバイス内のプロセッサと、ターゲットハードウェアエンジンと、メモリとの間の対話ステータスをさらに説明するために、図13に示される、本出願の実施形態によるFECデコーディングのフローチャートを参照する。手順は、具体的には、ステップ1301からステップ1306を含む。
ステップ1301:UDPプロキシは、FECパケットの各々の記憶完了メッセージを、FECソフトウェアインターフェースに送信する。
ステップ1302:FECパケットのグループの記憶完了メッセージを受信した後、FECパケットのグループ内において、元のFECパケットが、失われている場合、FECソフトウェアインターフェースは、FECパケットの受信されたグループに基づいて、第1のデコーディングタスクを生成し、第1のデコーディングタスクを、メモリのタスクバッファに送信する。
タスクバッファは、複数の送信キューと、複数の受信キューとを含み、FECソフトウェアインターフェースは、第1のデコーディングタスクを、第1のデコーディングタスクのプライオリティに対応する第2のターゲット送信キューに送信し得る。
ステップ1303:ターゲットハードウェアエンジンは、第1のデコーディングタスクを、タスクバッファ内の第2のターゲット送信キューから獲得し、第1のデコーディングタスク内の記憶アドレスに基づいて、FECパケットのグループを、メモリから読み出す。
ステップ1304:ターゲットハードウェアエンジンは、失われた元のパケットを獲得するために、読み出されたFECパケットのグループをデコードし、失われた元のパケットを、メモリ内に記憶し、第1のデコーディング完了情報を、メモリ内の第2のターゲット受信キューに追加する。
ステップ1305:FECソフトウェアインターフェースは、第1のデコーディング完了情報を、タスクバッファ内の第2のターゲット受信キューから読み出し、第1のデコーディング完了情報に基づいて、メモリ内のFECパケットのグループと、失われた元のパケットとを読み出し、等長パケットを獲得するために、FECパケットのグループのパケットヘッダを除去する。
ステップ1306:FECソフトウェアインターフェースは、データストリームを獲得するために、等長パケットを処理し、データストリームを出力する。
ステップ1207から1213に示される処理は、ターゲットハードウェアエンジン、メモリ、およびプロセッサが、協力して、データストリームを、第2の端末に送信する処理である。いくつかの可能な実装においては、ターゲットハードウェアエンジンは、さらに、FECパケットの第1のグループと、失われた元のパケットとを、プロセッサに直接的に送信し得、プロセッサが、1212および1213に示される処理を実行する。いくつかの可能な実装においては、ターゲットハードウェアエンジンが、代替として、1212および1213に示される処理を実行し得る。
本出願のこの実施形態において提供される方法によれば、FECデコーディングは、CPUではなく第2のネットワークデバイスのターゲットハードウェアエンジンにおいて、FECパケットの第1のグループ内の失われていないFECパケットに対して、直接的に実行される。したがって、CPUオーバーヘッドは、低減させることができ、第2のネットワークデバイスのデコーディング効率は、向上させることができる。このようにして、第2のネットワークデバイスは、パケット伝送処理における大きいスループットの要件を容易に満たすことができる。
上述の任意選択の技術的ソリューションのすべては、任意の組み合わせを通して、本開示の任意選択の実施形態を形成し得る。本明細書においては、詳細が、ここで再び説明されることはない。
本出願の上述の実施形態において提供されるパケット処理装置が、パケット処理を実行するとき、上述の機能モジュールへの分割は、説明のための例として使用されたにすぎない。実際の応用においては、上述の機能は、要件に基づいて、異なる機能モジュールに割り当てられて実施され得、すなわち、装置の内部構造は、上で説明された機能のすべてまたは一部を完了するために、異なる機能モジュールに分割される。加えて、上述の実施形態において提供されるパケット処理装置、および上述の実施形態において提供されるパケット処理方法の実施形態は、同じ概念に関連する。装置の具体的な実装処理については、方法の実施形態を参照されたい。詳細が、ここで再び説明されることはない。
当業者であれば、実施形態のステップのすべてまたは一部が、ハードウェア、または関連するハードウェアに命令するプログラムによって実施され得ることを理解し得る。プログラムは、コンピュータ可読記憶媒体内に記憶され得る。記憶媒体は、リードオンリメモリ、磁気ディスク、または光ディスクなどを含み得る。
上述の説明は、本出願の実施形態にすぎず、本出願を限定することを意図していない。本出願の原理から逸脱することなく行われる、いずれの変更、等価交換、または改善も、本出願の保護範囲内に含まれるべきである。