JP2024520146A - 決定論的フロー伝送方法および装置 - Google Patents

決定論的フロー伝送方法および装置 Download PDF

Info

Publication number
JP2024520146A
JP2024520146A JP2023574657A JP2023574657A JP2024520146A JP 2024520146 A JP2024520146 A JP 2024520146A JP 2023574657 A JP2023574657 A JP 2023574657A JP 2023574657 A JP2023574657 A JP 2023574657A JP 2024520146 A JP2024520146 A JP 2024520146A
Authority
JP
Japan
Prior art keywords
packet
current
cft
dbq
queue
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Pending
Application number
JP2023574657A
Other languages
English (en)
Inventor
道栄 郭
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
New H3C Technologies Co Ltd
Original Assignee
New H3C Technologies Co Ltd
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by New H3C Technologies Co Ltd filed Critical New H3C Technologies Co Ltd
Publication of JP2024520146A publication Critical patent/JP2024520146A/ja
Pending legal-status Critical Current

Links

Images

Classifications

    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L47/00Traffic control in data switching networks
    • H04L47/10Flow control; Congestion control
    • H04L47/24Traffic characterised by specific attributes, e.g. priority or QoS
    • H04L47/2441Traffic characterised by specific attributes, e.g. priority or QoS relying on flow classification, e.g. using integrated services [IntServ]
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L45/00Routing or path finding of packets in data switching networks
    • H04L45/34Source routing
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L47/00Traffic control in data switching networks
    • H04L47/10Flow control; Congestion control
    • H04L47/34Flow control; Congestion control ensuring sequence integrity, e.g. using sequence numbers

Landscapes

  • Engineering & Computer Science (AREA)
  • Computer Networks & Wireless Communication (AREA)
  • Signal Processing (AREA)
  • Data Exchanges In Wide-Area Networks (AREA)

Abstract

本発明は決定論的フロー伝送方法および装置を提供する。本発明の実施形態により、既存のベストエフォートフロー転送に決定論的フローの転送を追加することを実現することができ、さらに、ネットワークデバイスにおける分配スレッド、DFT、およびCFTによって、決定論的フロー転送は、ベストエフォートフローの影響を受けないことが保証され、既存のベストエフォートフロー転送と決定論的フロー転送の相互互換性が保証された。【選択図】図2

Description

本出願は、ネットワーク通信技術に関し、特に決定論的フロー(Deterministic Flow)伝送方法および装置に関する。
決定論的ネットワーク(DetNet、Deterministic Network)は、ネットワークドメイン内でベアラサービスに対して決定論的サービス機能を提供することができる。これらの決定論的サービス機能には、遅延、パケット損失率などが含まれ得る。一例として、ローカルエリアネットワークに基づいて実現される決定論的ネットワーク、すなわち時間に敏感なネットワーク(TSN:Time Sensitive Network)では、周期的キューイングおよび転送(CQF:Cyclic Queuing and Forwarding)を使用することにより、転送層での転送パス全体の伝送遅延の決定などを確保する。
説明の便宜上、決定論的ネットワークで伝送される、遅延、パケット損失率などの決定論的サービス機能を持つサービスフローを決定論的フローと呼ぶ。決定論的フローとは異なる他のサービスフローについては、ソフトウェア転送デバイスやスイッチングチップ又はNPに基づいて実現されるハードウェア転送デバイスなど、既存の転送デバイスがベストエフォート(Best-effort)転送方式で転送し、決定論的フローとは異なる他のサービスフローをベストエフォートフローと呼ぶことができる。
本発明は、セグメントルーティングSRに基づいて指定周期キューイングおよび転送(Cycle Specified Queuing and Forwarding、CSQF)の決定論的フロー伝送を実現する決定論的フロー伝送方法、システムおよび装置を提供する。
本発明の実施形態により、ネットワークデバイスに適用される決定論的フロー伝送方法であって、
本デバイス上の起動された分配スレッドによって、当該分配スレッドにバインドされたパケット受信キュー内のパケットを分配することにより、前記パケット受信キュー内の決定論的フローに属するパケットを対応する決定論的フローバッファリングキュー(DBQ)に分配し、ベストエフォートフローに属するパケットを、対応するベストエフォートフローキュー(BTQ)に分配することであって、前記パケット受信キュー内のパケットは、前記ネットワークデバイスのローカルインターフェースを介して外部から受信されたパケットである、ことと、
本デバイス上の起動された決定論的転送スレッド(DFT)によって、当該DFTにバインドされたDBQ内のパケットを対応する決定論的フローキュー(DTQ)に入れることと、
本デバイス上の起動された周期転送スレッド(CFT)によって、当該CFTにバインドされたDTQ内のパケットを、対応する周期指定キュー(CSQ)に入れ、前記CFTによって送信キュー(SQ)からパケットを選択し、パケットを転送するためのアウトインターフェースを介してパケットを転送することであって、前記SQは前記CFTに対応する送信キューポインタ(SQP)が現在指しているCSQである、ことと、を含む、
決定論的フロー伝送方法が提供される。
本発明の実施形態により、プロセッサと、機械可読記憶媒体とを含む電子デバイスであって、前記機械可読記憶媒体には、前記プロセッサによって実行可能な機械実行可能命令が記憶され、前記プロセッサは、上記に開示された方法のステップを実施するように、機械実行可能命令を実行するために用いられる、
電子デバイスがさらに提供される。
以上の技術的解決手段から分かるように、本実施形態は、既存のベストエフォートフロー転送に決定論的フローの転送を追加することを実現した。
さらに、上述の分配スレッド、DFT、およびCFTによって、決定論的フロー転送は、ベストエフォートフローの影響を受けないことが保証され、既存のベストエフォートフロー転送と決定論的フロー転送の相互互換性が保証された。
ここの添付の図面は、明細書に組み込まれ、本明細書の一部を構成するものであり、本発明に合致する実施形態を示し、明細書と併せて本発明の原理を説明するために用いられる。
ベストエフォート転送の構造を示す概略図である。 本発明の実施形態にて提供される方法を示すフローチャートである。 本発明の実施形態にて提供される決定論的フロー転送とベストエフォートフロー転送の構造を示す概略図である。 本発明の実施形態にて提供される分配スレッドの実現を示すフローチャートである。 本発明の実施形態にて提供されるDFTの実現を示すフローチャートである。 本発明の実施形態にて提供される高速転送テーブルとOutIfInfoおよびSRListsの関連を示す概略図である。 本発明の実施形態にて提供されるCFTの実現を示すフローチャートである。 本発明の実施形態にて提供されるCSQPとCSQとの間の関係を示す概略図である。 本発明の実施形態にて提供されるSQ、RQおよびTQの間の構造を示す概略図である。 本発明の実施形態にて提供される各スレッド間のインタラクションを示す概略図である。 本発明の実施形態にて提供される装置を示す構造図である。 本発明の実施形態にて提供される電子デバイスを示す構造図である。
例示的な実施形態をここで詳細に説明し、その例示は添付の図面に示される。以下の説明が図面に言及している場合、特に断りのない限り、異なる図面の同じ番号は、同じまたは類似の要素を示す。以下の例示的な実施形態に記載の実施形態は、本発明と一致する全ての実施形態を表すわけではない。それどころか、それらは、添付の特許請求の範囲に詳述されているような、本発明のいくつかの態様と一致する装置、デバイスおよび方法の例に過ぎない。
本発明で使用される用語は、特定の実施形態を説明するためのものに過ぎず、本発明を限定するものではない。本発明および添付の特許請求の範囲で使用される単数形「一種」、「前記」および「当該」は、文脈が明らかに他の意味を示さない限り、複数形も含むことを意図している。
当業者が本発明の実施形態にて提供される技術的解決策をよりよく理解できるようにし、本発明の実施形態の上記目的、特徴および利点をより明白かつ理解できるようにするため、ベストエフォート転送に基づいて設計された転送プロセスを以下に説明する。
ソフトウェア転送デバイス(例えば、ローエンドやミッドエンドのルータ)については、パケットは通常、図1に示すようなベストエフォート転送方式に従って転送される。
図1に示すように、ハードウェアコントローラ(例えば、インタフェースボード上のコントローラ)は、パケットを受信した後、まず、パケットのパケット特徴パラメータに従って、パケットをメモリ内の対応するパケット受信キュー(RcvQueue:Receiving Queue)に格納する。オプションで、パケット特徴パラメータがパケット5タプル(quintuple)であることを例にとると、パケット5タプルに対してハッシュ(Hash)演算を行って演算結果を得、キュー番号が当該演算結果であるパケット受信キューをメモリ内のパケット受信キューから検索し、検索して得られた当該パケット受信キューにパケットを格納してもよい。なお、これは、どのように、パケットのパケット特徴パラメータに基づいて、対応するメモリ内のパケット受信キューにパケットを格納するかを説明する一例に過ぎず、限定のためではない。
一例において、上述したハードウェアコントローラは、パケットを受信した後、割り込みコントローラに割り込みを生成し、割り込みコントローラによって生成された割り込みコールドライバソフトウェア(CPUなど)の割り込みハンドラを、少なくとも1つのベストエフォート転送スレッド(BFT:Best-effort Forwarding Thread)を起動する。
ここで、当該起動されたBFTは、バインドされたパケット受信キューからパケットを取り出し、取り出されたパケットを指定構造のパケットに変換し、プラットフォームソフトウェア(プラットフォームインターフェースとも呼ばれ得る)に送信する。
プラットフォームソフトウェアが、FIBテーブルを照会して、パケットを転送するためのアウトインターフェースを決定し、ドライバソフトウェアのアウトインターフェース(Transmod)を呼び出して、パケットを当該アウトインターフェースに対応するハードウェアキューに送って送信する。オプションで、本実施形態では、高い優先度が設定されたハードウェアキュー内のパケットが先に送信される。パケットを送信した後、フリーバッファプール(Free Buffer Pool)を呼び出すことによって、送信済みのパケットによって占有された記憶資源をさらに解放してもよい。
以上、ベストエフォート転送方式に従ってパケットを転送する(ベストエフォートフローとも呼ばれ得る)転送プロセスを説明した。
しかし、現在のベストエフォートフローの転送プロセスは、決定論的ネットワークへのサポートが欠けており、決定論的フローの転送は実現できない。
これに基づき、本発明の実施形態では、ベストエフォートフロー転送の上に決定論的フロー転送を重ねることで、ベストエフォートフロー転送と決定論的フロー転送の相互互換性を保証しつつ、決定論的フロー転送がベストエフォートフローの影響を受けないことを確保する決定論的フロー伝送方法を提供する。本発明の実施形態にて提供される決定論的フロー伝送方法を以下に説明する。
図2を参照し、本発明の実施形態にて提供される決定論的フロー伝送方法を示すフローチャートである。当該フローはネットワークデバイスに適用される。本発明の実施形態は、当該ネットワークデバイスの具体的な構造形態を特に限定せず、例えば、ローエンドやミッドエンドのルータなどであってもよいし、高い性能が要求され、より多くのCPUコアをサポートするハイエンドのルータなどであってもよく、本実施形態は、本発明の実施形態が広い適用範囲と拡張性を有するために、特に限定しない。
上述のとおり、本発明の実施形態は、ベストエフォートフロー転送の上に決定論的フロー転送を重ねたものであり、本発明の実施形態にて提供される方法をより容易に理解できるようにするために、まず、ベストエフォートフロー転送の上に決定論的フロー転送を重ねるために新たに追加される以下の変更点について、以下に説明する。
1)分配スレッド(DisThr)を追加する。決定論的フローは、遅延とジッタに非常に敏感であり、ベストエフォートフロー転送などのプラットフォームサービス処理の影響を非常に受けやすい。プラットフォームサービス処理が決定論的フローの転送に影響を与えることを回避するために、本発明の実施形態では、上述のネットワークデバイスに分配スレッドを新たに追加した。
オプションで、本実施形態において、分配スレッドの数はパケット受信キューの数に応じて設定され、1つの分配スレッドは少なくとも1つのパケット受信キューにバインドされる。具体的に、分配スレッドは、バインドされたパケット受信キュー内のパケットを分配するために用いられ、パケット受信キュー内の決定論的フローに属するパケットを対応する決定論的フローバッファリングキュー(DetNet-flow Buffering Queue、DBQ)に分配し、ベストエフォートフローに属するパケットを対応するベストエフォートフローキュー(BTQ:Best-Effort Flow Queue)に分配する。
オプションで、DBQとパケット受信キューは1対1に対応し、例えば、パケット受信キュー1内の決定論的フローに属するパケットをDBQ1に分配し、パケット受信キュー2内の決定論的フローに属するパケットをDBQ2に分配する・・・。DBQは分配スレッドによって分配された、決定論的フローに属するパケットをバッファするために用いられる。分配スレッドがパケットを分配する作業は、プラットフォームが決定論的フローに属するパケットを処理する作業から切り離されるため、分配スレッドが単一のプロセスを処理することで、非常に効率的でノンブロッキングであると同時に、決定論的フローに属するパケットを決定する処理は独立したものである。
オプションで、BTQとパケット受信キューは1対1に対応し、例えば、パケット受信キュー1内のベストエフォートフローに属するパケットをBTQ1に分配し、パケット受信キュー2内のベストエフォートフローに属するパケットをBTQ2に分配する・・・。BTQは分配スレッドによって分配された、ベストエフォートフローに属するパケットをバッファするために用いられる。分配スレッドがパケットを分配する作業は、プラットフォームがベストエフォートフローに属するパケットを処理する作業から切り離されるため、プラットフォームの不確実性処理作業が分散スレッドをブロックすることを回避する。
以上から分かるように、分配スレッドがパケットを分配するプロセスは、プラットフォームの処理による不確実性などがあっても、決定論的フローに属するパケットなどが適時に分配されることを保証するノンブロッキングプロセスである。
ベストエフォートフローが多すぎて決定論的フローの分配が適時に行われなくなることを防ぐため、具体的に実現する際には、上述の分配スレッドが十分なCPUリソースを占有するようにする必要があり、例えば、1つの分配スレッドが可能な限り多くのCPUコアを排他的に占有し、ある分配スレッドに割り当てられたCPUコアが他のスレッドに割り当てられないようにする。
2)決定論的フロー転送コアモジュールを追加する。オプションで、本発明の実施形態では、ネットワークデバイスのドライバソフトウェアに決定論的フロー転送コアモジュールを追加してもよい。一例において、決定論的フロー転送コアモジュールは、少なくとも決定論的転送スレッド(DFT:Deterministic Forwarding Thread)と、周期転送スレッド(CFT:Cycle Forwarding Thread)とを含む。
オプションで、本実施形態において、DFTの数はDBQの数と決定論的フロー負荷とに基づいて設定される。アプリケーションでは、1つのDFTが少なくとも1つのDBQにバインドされる。DFTは、バインドされたDBQ内のパケットを、対応する決定論的フローキュー(DetNet flow Queue、DTQ)に入れるために用いられる。
オプションで、本実施形態において、CFTの数はDTQの数と決定論的フロー負荷とに基づいて設定される。アプリケーションでは、1つのCFTが少なくとも1つのDTQにバインドされる。CFTは、バインドされたDTQ内のパケットを、対応する周期指定キュー(Cycle Specified Queue、CSQ)に入れるために用いられる。オプションで、本実施形態において、CFTはさらに、少なくとも1つのインターフェースの少なくとも1つのCSQにバインドされ、指定周期内に指定CSQからパケットを取り出し、当該パケットを転送するためのアウトインターフェースを介してパケットを転送するために用いられる。
3)既存BFTを変更する。従来は、BFTはパケット受信キューからパケットを取り出して転送していたが、本実施形態では、BFTはバインドされたBTQからパケットを取り出して転送するように変更した。
4)送信モジュールが決定論的フロー転送を提供できるようにする(例えば、決定論的フロー転送のための新しいハードウェア適応の増加など)ために、送信モジュール(TransMod:Transmitting Module)を変更する。オプションで、一実施形態において、決定論的フロー転送中に、決定論的フローに属するパケットが先に転送されることを保証するために、決定論的フローに属するパケットが最高の優先度を有するものとしてアウトインターフェースで指定してもよく、同時に、ベストエフォートフローの転送に対してレート制限を実施してもよい。
以上、ベストエフォートフロー転送の上に決定論的フロー転送を重ねるために新たに追加される以下の変更点について簡単に説明した。上述の変更点により、既存のベストエフォートのQOS転送との互換性を前提に、決定論的フロー転送の追加を実現し、決定論的フロー転送がベストエフォートフロー転送の影響を受けないことを保証することができる。図3は、一例として、図1に示したフレームワークに基づく変更後のフレームワークの構造図である。
上述の変更点に基づき、本発明の実施形態にて提供される方法を以下に説明する。
図2に示すように、当該フローは以下のステップを含み得る。
ステップ201、本デバイス上の起動(woken up)された分配スレッドによって、当該分配スレッドにバインドされたパケット受信キュー内のパケットを分配することにより、パケット受信キュー内の決定論的フローに属するパケットを対応するDBQに分配し、ベストエフォートフローに属するパケットを、対応するBTQに分配する。
ここのパケット受信キューは、上述のとおり、ネットワークデバイスのローカルインターフェースを介して外部から受信されたパケットを格納する。
分配スレッドがどのようにバインドされたパケット受信キュー内のパケットを分配するかについては、後述の図4に例を挙げて説明する分配スレッドの実現フローを参照できるので、ここでは説明を省略する。
本実施形態において、分配スレッドは割り込みによって起動されてもよいし、ポーリングなど他の方法によって起動されてもよく、本実施形態は特に限定しない。
ステップ202、本デバイス上の起動されたDFTによって、当該DFTにバインドされたDBQ内のパケットを対応するDTQに入れる。
本実施形態において、DFTは、以下に例を挙げて説明するように、分配スレッドによって適切なタイミングで起動され得る。もちろん、DFTは他の方法で起動されてもよく、本実施形態は特に限定しない。
DFTがどのように、バインドされたDBQ内のパケットを対応するDTQに入れるかについては、後述の図5に例を挙げて説明するDFTの実現フローを参照できるので、ここでは説明を省略する。
ステップ203、本デバイス上の起動された周期転送スレッド(CFT)によって、当該CFTにバインドされたDTQ内のパケットを、対応する周期指定キュー(CSQ:Cyclic Specific Queue)に入れ、前記CFTによって送信キュー(SQ)からパケットを選択し、パケットを転送するためのアウトインターフェースを介してパケットを転送し、SQはCFTに対応する送信キューポインタ(SQP)が現在指しているCSQである。
本実施形態において、CFTは、以下に例を挙げて説明するように、DFTによって適切なタイミングで起動され得る。もちろん、CFTは他の方法で起動されてもよく、例えば、新規作成後にCFTが直接デフォルトで起動されるようにしたり、新規作成後に指定イベントが検出された場合にCFTがデフォルトで起動されるようにしたりなど、本実施形態は特に限定しない。ここでの指定イベントは、CSQにタイムリーにパケットを転送する必要があるイベントがあることを指す。当該イベントの例については後述するので、ここでは説明を省略する。
どのようにCFTによってCFTにバインドされたDTQ内のパケットを対応するCSQに入れ、送信キュー(SQ:Sending Queue)からパケットを選択し、パケットを転送するためのアウトインターフェースを介してパケットを転送するかについては、後述の図7に例を挙げて説明するCFTの実現フローを参照できるので、ここでは説明を省略する。
本実施形態において、各インターフェースは複数のCSQに対応し、例えば3つのCSQに対応する。ここで、各CSQは少なくとも以下を含む。
(1)周期指定キュー記述子(CSQD:Cyclic Specific Queue Descriptors):CSQを記述するために用いられる。
(2)バッファ記述子キュー(BDQ:Buffer Descriptor Queue):本実施形態において、BDQのキュー要素は、1つのデータブロックの情報を記述するものであり、少なくとも、データが存在するメモリブロックの情報、データ開始位置、データ長などを含み得、本実施形態は特に限定しない。
オプションで、本実施形態において、各周期指定キュー記述子は、少なくとも以下を含み得る。
キューヘッダ(QH):対応するBDQを指すために用いられる。
ヘッド(Head):現在のキューの先頭位置を指すものであり、CSQが空の場合、Headは0であり、キューに入る次のパケットが0番目の位置を占めることを示し、Headは、データがキューに入るごとに1増加する。
QLen:キュー長であり、キューに格納できるパケットの数を示し、Headの長さがQLenになると、キューがいっぱいになったことを示す。
CurBytes:現在キューに入っているバイト数。
MaxBytes:現在のキューのバイト数容量。
また、本実施形態において、CFTは、周期指定キューポインタ構造(Cyclic Specific Queue Pointers、略称CSQP)を管理する。CSQPは、3つのメンバーから構成される。
SQP:送信キューポインタ(Sending Queue Pointer)であり、SQPが指すCSQは、現在の周期で送信されているCSQを表す(当該CSQは、送信キュー(SQ)とも呼ばれる)。
RQP:受信キューポインタ(Receiving Queue Pointer)であり、RQPが指すCSQは、現在の周期で受信されているCSQを表す(当該CSQは、受信キュー(RQ)とも呼ばれる)。
TQP:許容キューポインタ(Tolerating Queue Pointer)であり、TQPが指すCSQは、RQがいっぱいになった後、現在の周期内で受信が許容されるCSQを表す(当該CSQは、許容キューTQとも呼ばれる)。以上の説明に基づいて、図8は、CSQPとCSQとの間の関係を示す概略図を例示する。
これで図2に示すフローは完了した。
図2に示すフローにより、本実施形態は、既存のベストエフォートフロー転送に決定論的フローの転送を追加することを実現した。
さらに、上述の分配スレッド、DFT、およびCFTによって、決定論的フロー転送は、ベストエフォートフローの影響を受けないことが保証され、既存のベストエフォートフロー転送と決定論的フロー転送の相互互換性が保証された。
図4に示すフローにより、分配スレッドの実現フローについて以下に説明する。
図4を参照し、図4は本発明の実施形態にて提供される分配スレッドの実現を示すフローチャートである。本実施形態において、分配スレッドには対応するスレッドポーリングフラグ(bPoll_1と記す)が設定され、最初にbPoll_1はFALSEに設定される。bPoll_1は、分配スレッドが起動されるときもFALSEである。本実施形態において、分配スレッドは割り込みまたは他の方式によって起動され得る。
図4に示すように、起動された分配スレッドは以下のステップを実行してもよい。
ステップ401、分配スレッドは、バインドされたパケット受信キューを順番にトラバースし、トラバースされているパケット受信キューを現在のキューとして決定し、現在のキューにパケットがあるか否かをチェックし、現在のキューにパケットがある場合、ステップ402を実行し、現在のキューにパケットがない場合、ステップ407を実行する。
ステップ402、bPoll_1をTRUE に設定し、現在のキュー内のパケットをトラバースし、トラバースされているパケットを現在のパケットとして決定し、現在のパケットが決定論的フローに属すると識別された場合にはステップ403を実行し、現在のパケットがベストエフォートフローに属すると識別された場合にはステップ405を実行する。
本ステップ402は、現在のキューにパケットがあると判定された場合に実行される。現在のキューにパケットがあるときに、bPoll_1をTRUE に設定することは、分配スレッドが現在、ポーリング処理に入ることを表し、スレッドスケジューリングのオーバーヘッドを削減し、起動動作が分配スレッドのポーリングに影響を与えないようにするためには、このとき、分配スレッドに対して設定された指定機能をオフにするように指示する必要がある。ここで、指定機能をオフにすることは、分配スレッドが睡眠状態に入ることを阻止することを指示するためである。
ステップ403、現在のパケットを現在のキューに対応するDBQに入れる。その後、ステップ404を実行する。
本実施形態において、決定論的フローに属するパケットには、決定論的プロパティ(DetProperty、Deterministic Property)が付加されている。例示的に、決定論的プロパティは固定的なものではなく、現在の仕様でも具体的な指定はなく、決定論的プロパティを表現するためにDSCP(Differentiated Services Code Point)などのフィールドの値を設定するなど、実際の要求に基づいて統合的に設定される。本実施形態では、決定論的プロパティを特に限定しない。ただし、決定論的プロパティが設定され、本ステップ403に適用されると、現在のパケットに決定論的プロパティが付加されているか否かが識別され、付加されている場合、現在のパケットを決定論的フローに属するものとして識別し、現在のパケットを現在のキューに対応するDBQに入れる。最終的に、決定論的フローに属するパケットがDBQに分配されることを実現した。
オプションで、一実施形態として、本実施形態では、DBQとパケット受信キューは1対1に対応し、例えば、番号が1であるパケット受信キュー内のパケットは番号が1であるDBQに入れられ、番号が2であるパケット受信キュー内のパケットは番号が2であるDBQに入れられ・・・。最終的に、上述のDBQとパケット受信キューの対応関係に基づいて、決定論的フローに属すると識別された現在のパケットが、現在のキューに対応するDBQに入れられることを実現した。
ステップ404、このとき、上述のDBQにバインドされたDFTに対して設定されたDFT起動フラグがFALSEである場合、当該DFT起動フラグをTRUE に設定し、DFT起動フラグがTRUE である当該DFTを起動し、その後、現在のキューにトラバースされていないパケットがあるか否かを判定し、現在のキューにトラバースされていないパケットがある場合、トラバースされていないパケットのトラバースを継続し、ステップ402における、当該トラバースされているパケットを現在のパケットとして決定するステップに戻り、現在のキューにトラバースされていないパケットがない場合、ステップ407を実行する。
本実施形態において、分配スレッドは各DFTに、対応するDFT起動フラグを設定する。最初に、各DFTに対応するDFT起動フラグはFALSEに設定される。
ステップ404により、対応するDFTをタイムリーに起動し、起動されたDFTが、バインドされたDBQ内のパケットをタイムリーに対応するDTQに入れることができ、詳細は後続のDFTのフローを参照できるので、ここでは説明を省略する。
なお、このとき、上述のDBQにバインドされたDFTに対して設定されたDFT起動フラグがTRUE である場合、本ステップ404は、直接に、現在のキューにトラバースされていないパケットがある場合、トラバースされていないパケットをトラバースし、ステップ402における、当該トラバースされているパケットを現在のパケットとして決定するステップに戻り、現在のキューにトラバースされていないパケットがない場合、ステップ407を実行してもよい。
ステップ405、現在のパケットを現在のキューに対応するBTQに入れる。その後、ステップ406を実行する。
オプションで、一実施形態として、本実施形態では、BTQとパケット受信キューは1対1に対応し、例えば、番号が1であるパケット受信キュー内のパケットは番号が1であるBTQに入れられ、番号が2であるパケット受信キュー内のパケットは番号が2であるBTQに入れられ・・・。最終的に、上述のBTQとパケット受信キューの対応関係に基づいて、ベストエフォートフローに属すると識別された現在のパケットが、現在のキューに対応するBTQに入れられることを実現した。
ステップ406、このとき、上述のBTQにバインドされたBFTに対して設定されたBFT起動フラグがFALSEである場合、当該BFT起動フラグをTRUE に設定し、BFT起動フラグがTRUE であるBFTを起動し、その後、現在のキューにトラバースされていないパケットがあるか否かを判定し、現在のキューにトラバースされていないパケットがある場合、トラバースされていないパケットをトラバースし、ステップ402における、当該トラバースされているパケットを現在のパケットとして決定するステップに戻り、現在のキューにトラバースされていないパケットがない場合、ステップ407を実行する。
ステップ406により、上述のBTQにバインドされたBFTをタイムリーに起動し、起動されたBFTが、BTQ内のパケットをタイムリーに転送することができる。
ステップ407、現在のキューにパケットが存在しないか、または現在のキューにトラバースされていないパケットが存在しない場合、分配スレッドにバインドされたすべてのパケット受信キューにトラバースされていないパケット受信キューがあるか否かを検出し、トラバースされていないパケット受信キューがある場合、分配スレッドにバインドされ且つトラバースされていない他のパケット受信キューのトラバースを継続し、ステップ401における、トラバースされているパケット受信キューを現在のキューとして決定するステップに戻り、それ以外の場合、ステップ408を実行する。
ステップ408、DFT起動フラグがTRUE であるDFTについては、当該DFTを起動し、当該DFTのDFT起動フラグをFALSEに設定し、BFT起動フラグがTRUE であるBFTについては、当該BFTを起動し、当該BFTのBFT起動フラグをFALSEに設定する。その後、ステップ409を実行する。
ここでステップ408が実行されるのは、決定論的フローとベストエフォートフローの両方がタイムリーに転送されるように、前に起動されたが、分配スレッドによるパケット受信キューのトラバース中に睡眠状態になったDFTとBFTを起動するためである。もちろん、DFT起動フラグがTRUE であるDFTが現在睡眠状態になっていない(例えば、まだ実行状態にある)場合、本ステップ408は、DFT起動フラグがTRUE であるDFTについて、直接に当該DFTのDFT起動フラグをFALSEに設定すればよい。BFT起動フラグがTRUE であるBFTの原理も類似するため、繰り返さない。
ステップ409、bPoll_1がTRUE である場合、bPoll_1をFALSEに設定し、上述のステップ401に戻り、bPoll_1がFALSEである場合、上述の指定機能をオンにし、指定機能は、分配スレッドに起動されるのを待つように指示するために用いられる。
これで図4に示すフローは完了した。
図4に示すフローにより分配プロセスの実現フローを説明した。
図5に示すフローにより、DFTの実現フローについて以下に説明する。
図5を参照し、本発明の実施形態にて提供されるDFTの実現を示すフローチャートである。本実施形態において、DFTは、分配スレッドによって起動(具体的に、上述の図4に示すフローを参照)されてもよい。本実施形態において、DFTは、他の方式によって起動されてもよい、ここでは特に限定しない。本実施形態において、起動されたDFTには、対応するスレッドポーリングフラグ(DFTポーリングフラグと記す)が設定され、DFTが起動されたとき、DFTポーリングフラグはFALSEである。
図5に示すように、起動されたDFTは以下のステップを実行してもよい。
ステップ501、DFTは、バインドされたDBQを順番にトラバースし、トラバースされているDBQを現在のDBQとして決定し、現在のDBQにパケットがあるか否かをチェックし、現在のDBQにパケットがある場合、ステップ502を実行し、現在のDBQにパケットがない場合、ステップ505を実行する。
ステップ502、DFTポーリングフラグをTRUE に設定し、現在のDBQ内のパケットをトラバースし、トラバースされているパケットを現在のDBQパケットとして決定し、設定済みのパケット重複・除去・整列機能(PREOF:Packet Replication, Elimination, and Ordering Functions)を呼び出して、現在のDBQパケットが重複パケットでないと識別した場合、パケット出力チェーンを生成する。
本ステップ502は、現在のDBQにパケットがあると検出された場合に実行される。現在のDBQにパケットがあるときにDFTポーリングフラグをTRUE に設定することは、DFTが現在、ポーリング処理に入ることを表す。スレッドスケジューリングのオーバーヘッドを削減し、起動動作がDFTのポーリングに影響を与えないようにするためには、このとき、DFTに対して設定された指定機能をオフにするように指示する必要がある。ここで、指定機能をオフにすることは、DFTが睡眠状態に入ることを阻止することを指示するためである。
本実施形態において、DFTにはPREOF機能が設定されている。PREOF機能に基づいて、現在のDBQパケットが重複パケットであるか否かを識別することができる。ここで、PREOF機能は、現在のDBQパケットが、以前にPREOF機能を呼び出すことによって処理されたパケットと重複するパケットであるか否かを識別するために用いられ得、現在のDBQパケットが重複パケットであると識別した場合、現在のDBQパケットを破棄し、現在のDBQにトラバースされていないパケットがある場合、トラバースされていないパケットのトラバースを継続し、ステップ502における、トラバースされているパケットを現在のDBQパケットとして決定するステップに戻る。オプションで、現在のDBQパケットのパケットシーケンス番号が、記録されている当該現在のDBQパケットが属するサービスフローに対応する最大シーケンス番号より小さいか否かを識別し、小さい場合、現在のDBQパケットを重複パケットとして識別するなど、PREOF機能に基づいて現在のDBQパケットが重複パケットであるか否かを識別する方法はたくさんあり、本実施形態は特に限定しない。
オプションで、この実施形態において、PREOF機能に基づいて現在のDBQパケットが重複パケットでないと識別したとすると、PREOF機能を呼び出してパケット出力チェーンを生成してもよい。どのようにPREOF機能を呼び出してパケット出力チェーンを生成するかについては、以下に例を挙げて説明するので、ここでは説明を省略する。
本実施形態において、パケット出力チェーンを生成した後、パケット出力チェーン内の各パケットをカプセル化し、パケットを転送するためのアウトインターフェースに対応するDTQに入れてもよく、詳細はステップ503を参照できる。
ステップ503、パケット出力チェーン内のパケットをトラバースし、トラバースされているパケットを目標パケットとし、目標パケットをカプセル化し、カプセル化された目標パケットを、目標パケットを転送するためのアウトインターフェースに対応するDTQに入れ、目標パケットがパケット出力チェーン内の最後のトラバースされていないパケットであるか否かをチェックし、最後のトラバースされていないパケットである場合、ステップ504を実行し、最後のトラバースされていないパケットでない場合、パケット出力チェーン内のトラバースされていないパケットをトラバースし、トラバースされているパケットを目標パケットとするステップに戻る。
オプションで、本実施形態において、各アウトインターフェースには対応するDTQが設定される。説明の便宜上、例えば、アウトインターフェース1に対応するDTQをDTQ1と表記し、アウトインターフェース2に対応するDTQをDTQ2と表記する・・・。これに基づいて、目標パケットを転送するためのアウトインターフェースを決定した後、目標パケットをカプセル化し、カプセル化された目標パケットを、当該目標パケットを転送するためのアウトインターフェースに対応するDTQに入れ、例えば、目標パケットを転送するためのアウトインターフェースがアウトインターフェース1であると決定した場合、カプセル化された目標パケットを、目標パケットを転送するためのアウトインターフェースに対応するDTQ、すなわちDTQ1に入れる。
どのように目標パケットをカプセル化するかについては、以下に例を挙げて説明するので、ここでは説明を省略する。
最終的に、上述のステップ503により、DBQ内のパケットをDTQに入れることを実現した。
ステップ504、このとき、上述のDTQにバインドされたCFTに対して設定されたCFT起動フラグがFALSEである場合、当該CFT起動フラグをTRUE に設定し、CFT起動フラグがTRUE である当該CFTを起動し、その後、現在のDBQにトラバースされていないパケットがあるか否かを判定し、現在のDBQにトラバースされていないパケットがある場合、トラバースされていないパケットのトラバースを継続し、ステップ502における、当該トラバースされているパケットを現在のDBQパケットとして決定するステップに戻り、現在のDBQにトラバースされていないパケットがない場合、ステップ505を実行する。
本実施形態において、DFTは各CFTに、対応するCFT起動フラグを設定する。最初に、各CFTに対応するCFT起動フラグはFALSEに設定される。
ステップ504により、上述のDTQにバインドされたCFTをタイムリーに起動し、起動されたCFTが、バインドされたDTQ内のパケットをタイムリーに対応するCSQに入れ、SQからパケットを選択し、パケットのアウトインターフェースを介して転送することができ、詳細は後続の図7に示すフローを参照する。
なお、上述のDTQにバインドされたCFTに対して設定されたCFT起動フラグがTRUE である場合、本ステップ504は、直接に、現在のDBQにトラバースされていないパケットがある場合、トラバースされていないパケットのトラバースを継続し、ステップ502における、当該トラバースされているパケットを現在のDBQパケットとして決定するステップに戻り、現在のDBQキューにトラバースされていないパケットがない場合、ステップ505を実行してもよい。
ステップ505、現在のDBQにパケットが存在しないか、または現在のDBQにトラバースされていないパケットが存在しない場合、DFTにバインドされたすべてのDBQにトラバースされていないDBQがあるか否かを検出し、トラバースされていないDBQがある場合、トラバースされていないDBQのトラバースを継続し、ステップ501における、トラバースされているDBQを現在のDBQとして決定するステップに戻り、それ以外の場合、ステップ506を実行する。
ステップ506、CFT起動フラグがTRUE であるCFTについては、当該CFTを起動し、当該CFTのCFT起動フラグをFALSEに設定する。その後、ステップ507を実行する。
ここでステップ506が実行されるのは、前に起動されたが、DFTによるDBQのトラバース中に睡眠状態になったCFTを起動し、決定論的フロー転送の信頼性を保証するためである。
ステップ507、CFTポーリングフラグがTRUE である場合、CFTポーリングフラグをFALSEに設定し、上述のステップ501に戻り、CFTポーリングフラグがFALSEである場合、上述の指定機能をオンにして、DFTに起動されるのを待つように指示する。
これで図5に示すフローは完了した。
図5に示すフローによりDFTの実現フローを説明した。
図5に示すフローにより、どのようにPREOF機能を呼び出してパケット出力チェーンを生成するかについて以下に説明する。
オプションで、一実施形態として、PREOF機能を呼び出してパケット出力チェーンを生成する例は以下を含み得る。
ステップa11、現在のDBQパケットがアウトオブオーダーパケットであるか否かを識別し、アウトオブオーダーパケットでない場合、ステップa12を実行し、アウトオブオーダーパケットである場合、ステップa13を実行する。
オプションで、本実施形態において、現在のDBQパケットが属するサービスフローを識別し、現在のDBQパケットのパケットシーケンス番号が、記録されている、PREOF機能を呼び出すことによって処理された、上述のサービスフローに属するパケットの最大シーケンス番号より大きいと判定した場合、現在のDBQパケットのパケットシーケンス番号が上述の最大シーケンス番号に隣接していなければ、現在のDBQパケットがアウトオブオーダーパケットであると決定し、それ以外の場合、現在のDBQパケットがアウトオブオーダーパケットでないと決定するなど、現在のDBQパケットがアウトオブオーダーパケットであるか否かを識別する方法はたくさんある。
ステップa12、現在のDBQパケットを上述のパケット出力チェーンに入れる。
本ステップa12は、現在のDBQパケットがアウトオブオーダーパケットでないと識別されたことを前提に実行される。現在のDBQパケットがアウトオブオーダーパケットでないと識別されると、後続のDBQパケットがアウトオブオーダーパケットであるか否かの判定を容易にするために、直接に現在のDBQパケットを上述のパケット出力チェーンに入れながら、さらに、記録されている上述の最大シーケンス番号を現在のDBQパケットのパケットシーケンス番号に更新してもよい。
ステップa13、現在のDBQパケットが属するサービスフローを決定し、現在のDBQパケットが条件を満たす場合、現在のDBQパケットと、記録された、前記現在のDBQパケットと正常に整列した少なくとも1つのパケットと、記録された、前記サービスフローに属し且つ所定の時間ウィンドウ外でPREOF機能を呼び出すことによって処理されたが、パケット出力チェーンに入れられていないパケットを、前記パケット出力チェーンに入れ、現在のDBQパケットが前記条件を満たさない場合、記録された、前記サービスフローに属し且つ所定の時間ウィンドウ外でPREOF機能を呼び出すことによって処理されたが、パケット出力チェーンに入れられていないパケットを、前記パケット出力チェーンに入れ、前記条件は、現在のDBQパケットと、記録された、前記サービスフローに属し且つ所定の時間ウィンドウ内でPREOF機能を呼び出すことによって処理された少なくとも1つのパケットとが正常に整列したことを指す。
現在のDBQパケットがアウトオブオーダーパケットであると識別されると、現在のDBQパケットが属するサービスフローを識別し(具体的なサービスフローはパケットに付加され得る)、その後、記録された、上述のサービスフローに属し且つ所定の時間ウィンドウ内でPREOF機能を呼び出すことによって処理された少なくとも1つのパケットと現在のDBQパケットとが正常に整列するか否か(すなわち、少なくとも1つのパケットのシーケンス番号が現在のDBQパケットのシーケンス番号と連続しているか否か)を判定し、例えば、現在のDBQパケットのパケットシーケンス番号が8であり、記録された、上述のサービスフローに属し且つ所定の時間ウィンドウ内でPREOF機能を呼び出すことによって処理された1つのパケットのパケットシーケンス番号が7であると判定した場合、記録された、上述のサービスフローに属し且つ所定の時間ウィンドウ内でPREOF機能を呼び出すことによって処理された少なくとも1つのパケットと、現在のDBQパケットとが正常に整列したことを意味する。なお、上述の所定の時間ウィンドウは、現在時刻から最も近い10usに設定するなど、実際のニーズに応じて設定することが可能であり、本実施形態は特に限定しない。
一実施形態として、現在のDBQパケットと、記録された、上述のサービスフローに属し且つ所定の時間ウィンドウ内でPREOF機能を呼び出すことによって処理された少なくとも1つのパケットとが正常に整列した場合、現在のDBQパケットと、記録された、現在のDBQパケットと正常に整列した少なくとも1つのパケットと、記録された、上述のサービスフローに属し且つ上述の所定の時間ウィンドウ外でPREOF機能を呼び出すことによって処理されたが、パケット出力チェーンに入れられていないパケットを、パケット出力チェーンに入れる。最終的にパケット出力チェーンを生成した。
一実施形態として、現在のDBQパケットと、記録された、上述のサービスフローに属し且つ所定の時間ウィンドウ内でPREOF機能を呼び出すことによって処理された少なくとも1つのパケットとが正常に整列しなかった場合、記録された、上述のサービスフローに属し且つ上述の所定の時間ウィンドウ外でPREOF機能を呼び出すことによって処理されたが、パケット出力チェーンに入れられていないパケットを、パケット出力チェーンに入れる。最終的にパケット出力チェーンを生成した。なお、現在のDBQパケットと、記録された、上述のサービスフローに属し且つ所定の時間ウィンドウ内でPREOF機能を呼び出すことによって処理された少なくとも1つのパケットとが正常に整列しなかった場合、オプションで、現在のDBQパケットのタイムスタンプと、PREOF機能を呼び出して現在のDBQパケットを処理するタイムスタンプとをさらに記録してもよい。
最終的に、上述のステップa11~ステップa13により、パケット出力チェーンの生成を実現した。
上述のステップ503において、どのように目標パケットをカプセル化するかについて、以下に説明する。
オプションで、上述のステップ503における目標パケットのカプセル化は以下を含み得る。
ステップb11、目標パケットがエッジアクセスパケットであるか否かを判定し、エッジアクセスパケットである場合、ステップb12を実行し、エッジアクセスパケットでない場合、ステップb13を実行する。
オプションで、本実施形態において、目標パケットがエッジアクセスパケットであるか否かを判定するために、目標パケットがネットワーク情報でカプセル化されているか否かに依拠してもよく、例えば、目標パケットがSR情報などのネットワーク情報でカプセル化されていない場合、目標パケットがエッジアクセスパケットであると判断し、それ以外の場合、目標パケットがエッジアクセスパケットでないと判断する。なお、これは、目標パケットがエッジアクセスパケットであるか否かを判定する方法を説明するために示した例に過ぎず、限定するためのものではない。
ステップb12、目標パケットに対して第1タイプのカプセル化を行う。
本ステップb12は、目標パケットがエッジアクセスパケットであると決定されたことを前提に実行される。目標パケットがエッジアクセスパケットであると決定された場合、ステップb12に説明されるように、目標パケットに対して第1タイプのカプセル化を行ってもよい。
オプションで、目標パケットに対して第1タイプのカプセル化を行う際に、本実施形態は、高速転送テーブル(FastFwdTbl)という新しい概念を導入した。一実施形態として、高速転送テーブルは、決定論的ネットワークにおけるルーティング情報を変換することによって得てもよい。DFTは、高速転送テーブルを照会することによって、目標パケットのアウトインターフェースを迅速に得ることができ、それにより、関連するDTQ(すなわち、当該アウトインターフェースに対応するDTQ)を見つける。
本実施形態において、決定論的フローは、高速転送テーブルを介して転送されるのは、ベストエフォートフロー転送プロセスから分離され、決定論的フローがベストエフォートフロー転送の影響を受けないようにし、決定論的フロー転送プロセスを短縮し、決定論的フロー転送速度を速くし、決定論的フロー転送に保証を提供するためである。
具体的に実現する際には、高速転送テーブルは、ベストエフォートのFIBテーブルに比べて容量が小さく、ルックアップも高速であり、ルックアップテーブルのオーバーヘッドにはほとんど差がないため、不確定要素を減らすことができる。
一実施形態として、オプションで、高速転送テーブルは、少なくとも、Destination IP(宛先IPアドレス)、Source IP(送信元IPアドレス)、Destination Port(宛先ポート)、Source Port(送信元ポート)、Proto(プロトコル)、区別型サービスコードポイント(DSCP: Differentiated Services Code Point)、アウトインターフェース(Out Interface)、トンネルインデックス(LIndex)を含む。
上述の高速転送テーブルに基づいて、ステップb12の一例として、送信元IPアドレス、宛先IPアドレスなどの目標パケットに付加されたパケット特徴情報に基づいて、高速転送テーブルからOutIfとLIndexを見つけ、その後、作成されたすべてのアウトインターフェース情報(OutIfInfo)から、OutIfに対応するOutIfInfoを見つけ、ここで、OutIfInfoは、少なくともMACアドレス、アウトインターフェースに基づくセグメントルーティングリスト(SRList)のポインタ(ここではセグメントルーティングSRを例として説明する)などのアウトインターフェース情報を含み、その後、LIndexとSRListのポインタに基づいて対応するSRListを取得し、SRList、OutIfInfoにおけるMADアドレスに基づいて目標パケットをカプセル化し、最終的に、目標パケットに対する第1タイプのカプセル化を実現した。図6は、一例として、高速転送テーブルとOutIfInfoおよびSRListsの関連を示す概略図を示している。
ステップb13、目標パケットに対して第2タイプのカプセル化を行う。
本ステップb13は、目標パケットがエッジアクセスパケットでないと決定されたことを前提に実行される。目標パケットがエッジアクセスパケットでないと決定された場合、目標パケットは、上述の第1タイプのカプセル化が行われたことを意味する。これに基づいて、上記ステップb12で例示した第1タイプのカプセル化に対応して、本ステップb13において、目標パケットがカプセル化されたSRListsにおけるSIDに基づいてOutIfを決定し、OutIfにより対応するOutIfInfo(例えば、少なくともMACアドレスなどを含む)を見つけ、得られたOutIfInfo(例えば、少なくともMACアドレスなどを含む)に基づいて、例えば、カプセル化された第2レイヤのヘッダにおける送信元MACアドレスを、OutIfInfoにおけるアウトインターフェースのMACアドレスに置き換えるなど、目標パケットに対してカプセル化の置換を行ってもよく、本実施形態は特に限定しない。
最終的に、上述のステップb11~ステップb13により、ステップ503における目標パケットのカプセル化を実現した。
図7に示すフローにより、CFTの実現フローについて以下に説明する。
図7を参照し、本発明の実施形態にて提供されるCFTの実現を示すフローチャートである。本実施形態において、CFTは、前述の図5に示したフローのステップ504またはステップ506で説明したように、DFTによって起動され得る。別の実施形態として、ネットワークデバイス上に新しいCFTを作成したとき、CFTを直接起動してもよく、例えば、ネットワークデバイス上に新しいCFTを作成したときにCFTがバインドされたCSQ内にタイムリーにパケットを転送する必要があるイベントがあると検出した場合、当該CFTを直接起動してもよい。
図7に示すフローを説明する前に、各CFTの設定について説明する。
一実施形態として、各CFTに対してCFT_Jiffies、CFT_prev_Jiffies、CFT_Rcv_Jiffiesの3つの対応するローカル変数を設定してもよい。
ここで、cft_prev_Jiffiesは、現在処理中の周期を示すことができ、現在処理周期変数と記してもよい。CFT_prev_Jiffiesは、履歴周期を示すために用いられ、履歴周期変数と記してもよい。CFT_Rcv_Jiffiesは、現在処理中の受信周期を記録するために用いられ、パケット受信周期変数と記してもよい。
上記の説明に基づいて、図7に示すように、当該フローは以下のステップを含み得る。
ステップ701、CFTが起動された後、CSQF_Jiffiesの現在の値を読み取り、CFT_Jiffiesを当該読み取ったCSQF_Jiffiesの現在の値に更新する。その後、ステップ702を実行する。
ステップ702、パケット送信周期が更新されたか否かを判定し、更新された場合、ステップ703を実行し、更新されていない場合、ステップ704を実行する。
上述のとおり、CFT_Jiffiesは現在処理周期変数を示し、CFT_Prev_Jiffiesは履歴周期変数を示すので、CFT_JiffiesとCFT_Prev_Jiffiesとに基づいて、パケット送信周期が更新されたか否かを判定することができ、例えば、CFT_JiffiesとCFT_Prev_Jiffiesとが等しくない場合、第1周期から第2周期への周期循環など、周期循環が実行されたことを表し、パケット送信周期が更新されたことを意味し、CFT_JiffiesとCFT_Prev_Jiffiesとが等しい場合、パケット送信周期が更新されていないことを意味する。
ステップ703、CFTに対応するCSQPを再調整し、CFT_Prev_Jiffiesの値をCFT_Jiffiesの現在の値に更新する。その後、ステップ704を実行する。
前述のように、CSQPは、少なくとも、SQP、RQP、TQPを含み、オプションで、一実施形態として、再調整されたSQPが指すCSQの番号は、CFT_JiffiesとCFTにバインドされたCSQの総数dとのモジュロ演算によって得られた余りに基づいて決定される。ここで、当該余りをRemと記してもよい。
再調整されたRQPが指すCSQの番号は、Remと指定ジッタ周期数Jitterとの和で、上述のdに対してモジュロ演算を行うことによって得られた結果に基づいて決定される。例えば、再調整されたRQPが指すCSQの番号は、(Rem+Jitter)mod dに従って決定される。
再調整されたTQPが指すCSQの番号は、(d-1+Rem-Jitter)mod dに従って決定され得る。
なお、CFTに対応するCSQPを再調整する上述の方法は、あくまで一例であり、限定するためのものではない。
ステップ704、SQ内のパケットをトラバースし、トラバースされているパケットを現在のSQパケットとして決定し、現在のSQパケットを転送するためのアウトインターフェースに送信して転送し、その後、SQにトラバースされていないパケットがあるか否かを判定し、SQにトラバースされていないパケットがある場合、トラバースされていないパケットのトラバースを継続し、ステップ704における、トラバースされているパケットを現在のSQパケットとして決定するステップに戻り、SQにトラバースされていないパケットがない場合、ステップ705を実行する。
ステップ705、CFTにバインドされたDTQをトラバースし、トラバースされているDTQを現在のDTQとして決定し、現在のDTQにパケットがあるか否かをチェックし、現在のDTQにパケットがある場合、ステップ706を実行し、現在のDTQにパケットがない場合、ステップ708を実行する。
本ステップ705は、SQにトラバースされていないパケットがない(すなわち、SQが空である)ときに実行される。
ステップ706、CFT_Rcv_Jiffiesの値をCSQF_Jiffiesの現在の値に更新し、現在のDTQ内のパケットをトラバースし、トラバースされているパケットを現在のDTQパケットとして決定し、現在のDTQパケットに付加された周期指定キュー(Cycle)パラメータに基づいて、現在のDTQパケットに対応する目標CSQを決定する。その後、ステップ707を実行する。
上述のCSQF_Jiffies、CFT_Rcv_Jiffiesに基づき、ここでCFT_Rcv_Jiffiesの値をCSQF_Jiffiesの現在の値に更新するのは、スケジューリング遅延を低減するためにCFTスレッドのタイムリーな実行を制御するためである。
本実施形態において、現在のDTQパケットには、目標CSQを指示する周期指定キュー(Cycle)パラメータが付加されたため、これに基づいて、Cycleパラメータの指示に基づいて、現在のDTQパケットに対応する目標CSQを決定することが容易である。
ステップ707、目標CSQがSQとRQの間にある場合、現在のDTQパケットをRQに入れ、目標CSQがTQとSQの間にある場合、現在のDTQパケットをTQに入れ、目標CSQがRQとTQの間にある場合、現在のDTQパケットを目標CSQに入れ、その後、現在のDTQにトラバースされていないパケットがあるか否かを判定し、現在のDTQにトラバースされていないパケットがある場合、トラバースされていないパケットのトラバースを継続し、ステップ706における、当該トラバースされているパケットを現在のDTQパケットとして決定するステップに戻り、現在のDTQにトラバースされていないパケットがない場合、ステップ708を実行する。
本実施形態において、目標CSQがSQとRQの間にある場合、現在のDTQパケットが遅れて到着する可能性があることを表し、遅れて到着する現在のDTQパケットが転送されるのを待つ時間を短くすることを保証するために、現在のDTQパケットをRQに入れてもよい。一方、目標CSQがTQとSQの間にある場合、現在のDTQパケットが早めに到着する可能性があることを表し、他のパケットがタイムリーに転送されることを保証するために、早く到着する現在のDTQパケットは転送されるために比較的多くの時間を待つように制限し、すなわち、現在のDTQパケットをTQに入れてもよい。図9は、一例としてSQ、RQおよびTQの間の構造を示す。
ステップ708、CFTにバインドされたすべてのDTQにトラバースされていないDTQがあるか否かを判定し、CFTにバインドされたすべてのDTQにトラバースされていないDTQがある場合、トラバースされていないDTQのトラバースを継続し、ステップ705における、トラバースされているDTQを現在のDTQとして決定するステップに戻り、それ以外の場合、ステップ709を実行する。
ステップ709、CFTにバインドされたCSQ内に、タイムリーにパケットを転送する必要があるイベントがあるか否かを検出し、イベントがない場合、CFTは睡眠状態に入り、起動されるのを待ち、イベントがある場合、上述のステップ701の実行に戻る。
ここで、前記タイムリーにパケットを転送する必要があるイベントは、上述のCFT_JiffiesとCFT_Rcv_Jiffiesとに基づいて決定され、オプションで、CFT_Jiffiesの値とCFT_Rcv_Jiffiesの値との差が所定の差以下である場合に、タイムリーにパケットを転送する必要があるイベントがあると決定し、それ以外の場合、タイムリーにパケットを転送する必要があるイベントが存在しないと決定する。なお、本実施形態において、所定の差は予め設定されており、例えば、10周期(上述したタイマによる割り込みを生成する周期)に予め設定されるなど、本実施形態は特に限定しない。
これで図7に示すフローは完了した。
図7によりCFTが起動された後に実行するプロセスを説明した。
以上、分配スレッド、DFT、CFTが起動された後に実行するプロセスを例示したが、BFTについては、起動された後、直接にBTQからパケットを取得し、当該パケットを転送するためのアウトインターフェースに転送して、パケットを転送することができるため、ここでの詳細な説明は省略する。
オプションで、本実施形態では、信頼性を確保するために以下の制限が望ましい場合がある。
(1)各DBQについて、一般に1つの分配スレッドにのみ対応し、DBQとパケット受信キューとの間の前述の対応関係に基づいて、DBQと分配スレッドとパケット受信キューとの間の1対1の対応を最終的に実現することができ、各分配スレッドは、パケット受信キュー内の決定論的フローに属するパケットを、当該分配スレッドに対応するDBQに分配する役割を担う。
(2)DBQについて、1つのDBQは一般に1つのDFTのみにバインドされる。
(3)DTQについて、1つのDTQは一般に、1つだけのDFTによってキューに入るパケットを処理され、当該DTQから送信されたパケットの処理を担当する1つのCFTにバインドされる。
(4)CSQについて、1つのCSQは一般に、1つだけのCFTによってキューに入るパケットを処理され、同じCFTが、当該CSQから送信されたパケットの処理を担当する。
以上の説明に基づき、図10に上記制限に基づくスレッド間の動作を例示する。図10では、1つのインターフェース(interface)が1つのCFTに関連する例を示しており、各インターフェースを介して出力されたパケットは、当該インターフェースに関連するCFTによってスケジューリングされる。
さらに、本実施形態において、DBQとDTQは、ロックフリー動作を可能にし、同時実行性を向上させるために、循環キューとして設計されている。
また、DisThr、DFT、CFTはリアルタイム優先スケジューリングスレッドであり、ここで、DFTスレッドとCFTスレッドは他のリアルタイム優先スレッドとCPUコアを共有せず、CPUリソースを解放せずに長時間占有するスレッドともCPUコアを共有しない。
以上、本発明の実施形態にて提供される方法の説明が完了した。本発明の実施形態にて提供される装置を以下に説明する。
図11を参照し、本発明の実施形態にて提供される装置を示す構造図である。当該装置はネットワークデバイスに適用され、
起動された後、バインドされたパケット受信キュー内のパケットを分配することにより、前記パケット受信キュー内の決定論的フローに属するパケットを対応するDBQに分配し、ベストエフォートフローに属するパケットを、対応するBTQに分配する分配スレッドであって、前記パケット受信キュー内のパケットは、前記ネットワークデバイスのローカルインターフェースを介して外部から受信されたパケットである、分配スレッドと、
起動された後、バインドされたDBQ内のパケットを対応するDTQに入れる決定論的転送スレッド(DFT)と、
起動された後、バインドされたDTQ内のパケットを、対応する周期指定キュー(CSQ)に入れ、送信キュー(SQ)からパケットを選択し、パケットを転送するためのアウトインターフェースを介してパケットを転送する周期転送スレッド(CFT)であって、前記SQは前記CFTに対応する送信キューポインタ(SQP)が現在指しているCSQである、周期転送スレッド(CFT)と、を含み得る。
オプションで、前記分配スレッドが、バインドされたパケット受信キュー内のパケットを分配することは、
前記分配スレッドにバインドされたパケット受信キューをトラバースし、現在トラバースされているパケット受信キューを現在のキューとして決定し、前記現在のキューにパケットがあるか否かをチェックすることと、
現在のキューにパケットがある場合、現在のキュー内のパケットをトラバースし、トラバースされているパケットを現在のパケットとして決定し、現在のパケットが決定論的フローに属する場合、現在のパケットを現在のキューに対応するDBQに入れ、現在のパケットがベストエフォートフローに属する場合、現在のパケットを現在のキューに対応するBTQに入れ、その後、現在のキューにトラバースされていないパケットがある場合、トラバースされていないパケットのトラバースを継続し、トラバースされているパケットを現在のパケットとして決定するステップに戻ることと、
現在のキューにパケットが存在しないか、または現在のキューにトラバースされていないパケットが存在しない場合、前記分配スレッドにバインドされたすべてのパケット受信キューにトラバースされていないパケット受信キューがあるとき、前記分配スレッドにバインドされ且つトラバースされていない他のパケット受信キューのトラバースを継続し、現在トラバースされているパケット受信キューを現在のキューとして決定するステップに戻ることと、を含む。
オプションで、前記分配スレッドには対応するスレッドポーリングフラグが設定され、前記分配スレッドが起動されたとき、前記スレッドポーリングフラグはFALSEに設定されており、
前記分配スレッドが現在のキューにパケットがあると検出した場合、さらに、前記スレッドポーリングフラグをTRUE に設定して、前記分配スレッドに対して設定された指定機能をオフにするように指示し、前記指定機能をオフにすることは、前記分配スレッドが睡眠状態に入ることを阻止することを指示するためであり、
前記分配スレッドにバインドされたパケット受信キューがすべてトラバースされた後、さらに、
前記スレッドポーリングフラグがTRUE である場合、前記スレッドポーリングフラグをFALSEに設定し、前記分配スレッドにバインドされたパケット受信キューをトラバースするステップに戻り、前記スレッドポーリングフラグがFALSEである場合、前記指定機能をオンにするように指示し、前記指定機能をオンにすることは、前記分配スレッドに起動されるのを待つように指示するためである。
オプションで、前記分配スレッドが前記パケット受信キュー内の決定論的フローに属するパケットを対応するDBQに分配する際に、さらに、
当該DBQにバインドされたDFTに対して設定されたDFT起動フラグがFALSEである場合、当該DFT起動フラグをTRUE に設定し、DFT起動フラグがTRUE である当該DFTを起動し、および/または、
前記分配スレッドにバインドされたすべてのパケット受信キューがトラバースされた後、さらに、
DFT起動フラグがTRUE であるDFTについて、当該DFTを起動し、当該DFTのDFT起動フラグをFALSEに設定する。
オプションで、DFTがバインドされたDBQ内のパケットを対応するDTQに入れることは、
前記DFTにバインドされたDBQをトラバースし、トラバースされているDBQを現在のDBQとして決定し、前記現在のDBQにパケットがあるか否かをチェックすることと、
現在のDBQにパケットがある場合、現在のDBQ内のパケットをトラバースし、トラバースされているパケットを現在のDBQパケットとして決定し、設定済みのパケット重複・除去・整列機能(PREOF機能)を呼び出して、現在のDBQパケットが重複パケットでないと識別した場合、現在のDBQパケットを少なくとも含むパケット出力チェーンを生成し、前記パケット出力チェーン内の各DBQパケットをカプセル化し、カプセル化されたDBQパケットを、当該DBQパケットを転送するためのアウトインターフェースに対応するDTQに入れ、その後、現在のDBQにトラバースされていないパケットがある場合、トラバースされていないパケットのトラバースを継続し、当該トラバースされているパケットを現在のDBQパケットとして決定するステップに戻ることと、
現在のDBQにパケットが存在しないか、または現在のDBQにトラバースされていないパケットが存在しない場合、前記DFTにバインドされたすべてのDBQにトラバースされていないDBQがある場合、トラバースされていないDBQのトラバースを継続し、当該トラバースされているDBQを現在のDBQとして決定するステップに戻ることと、を含む。
オプションで、前記パケット出力チェーンは、
現在のDBQパケットがアウトオブオーダーパケットであるか否かを識別し、現在のDBQパケットがアウトオブオーダーパケットでないと識別した場合、現在のDBQパケットを前記パケット出力チェーンに入れることと、
現在のDBQパケットがアウトオブオーダーパケットであると識別した場合、現在のDBQパケットが属するサービスフローを決定し、現在のDBQパケットと、記録された、前記サービスフローに属し且つ所定の時間ウィンドウ内でPREOF機能を呼び出すことによって処理された少なくとも1つのパケットとが正常に整列した場合、現在のDBQパケットと、記録された、前記現在のDBQパケットと正常に整列した少なくとも1つのパケットと、記録された、前記サービスフローに属し且つ所定の時間ウィンドウ外でPREOF機能を呼び出すことによって処理されたが、パケット出力チェーンに入れられていないパケットとを、前記パケット出力チェーンに入れ、それ以外の場合、記録された、前記サービスフローに属し且つ所定の時間ウィンドウ外でPREOF機能を呼び出すことによって処理されたが、パケット出力チェーンに入れられていないパケットを、前記パケット出力チェーンに入れることと、により生成される。
オプションで、前記DFTには対応するDFTポーリングフラグが設定され、前記DFTが起動されたとき、前記DFTポーリングフラグはFALSEに設定されており、
前記DFTが現在のDBQにパケットがあると検出した場合、前記DFTポーリングフラグをTRUE に設定して、前記DFTに対して設定された指定機能をオフにし、前記指定機能をオフにすることは、前記DFTが睡眠状態に入ることを阻止することを指示するためであり、
前記DFTにバインドされたDBQがすべてトラバースされた後、さらに、
DFTポーリングフラグがTRUE である場合、前記DFTポーリングフラグをFALSEに設定し、当該起動されたDFTにバインドされたDBQをトラバースするステップに戻り、前記DFTポーリングフラグがFALSEである場合、前記指定機能をオンにし、前記指定機能をオンにすることは、前記DFTに起動されるのを待つように指示するためである。
オプションで、前記DFTがDBQパケットを、当該DBQパケットを転送するためのアウトインターフェースに対応するDTQに入れた後、さらに、
当該DTQにバインドされたCFTに対して設定されたCFT起動フラグがFALSEである場合、当該CFT起動フラグをTRUE に設定し、当該CFT起動フラグがTRUE であるCFTを起動し、
前記DFTにバインドされたすべてのDTQがトラバースされた後、さらに、CFT起動フラグがTRUE に設定されたCFTについて、当該CFTを起動し、当該CFTのCFT起動フラグをFALSEに設定する。
オプションで、前記CFTが、バインドされたDTQ内のパケットを、対応する周期指定キュー(CSQ)に入れることは、
前記CFTにバインドされたDTQをトラバースし、トラバースされているDTQを現在のDTQとして決定し、現在のDTQにパケットがあるか否かをチェックすることと、
現在のDTQにパケットがある場合、現在のDTQ内のパケットをトラバースし、トラバースされているパケットを現在のDTQパケットとして決定し、現在のDTQパケットに付加された周期指定キューCycleパラメータに基づいて、現在のDTQパケットに対応する目標CSQを決定し、目標CSQがSQとRQの間にある場合、現在のDTQパケットをRQに入れ、目標CSQがTQとSQの間にある場合、現在のDTQパケットをTQに入れ、目標CSQがRQとTQの間にある場合、現在のDTQパケットを目標CSQに入れ、その後、前記現在のDTQにトラバースされていないパケットがある場合、トラバースされていないパケットをトラバースし、トラバースされているパケットを現在のDTQパケットとして決定するステップに戻ることであって、前記RQは前記CFTに対応する受信キューポインタ(RQP)が現在指しているCSQであり、前記TQは前記CFTに対応する許容キューポインタ(TQP)が現在指しているCSQである、ことと、
前記現在のDTQにパケットが存在しないか、または前記現在のDTQにトラバースされていないパケットが存在しない場合、前記CFTにバインドされたすべてのDTQにトラバースされていないDTQがある場合、トラバースされていないDTQのトラバースを継続し、当該トラバースされているDTQを現在のDTQとして決定するステップに戻ることと、を含む。
オプションで、前記CFTが、バインドされたDTQ内のパケットを、対応する周期指定キュー(CSQ)に入れることは、前記SQが空のときに実行される。
オプションで、前記CFTが送信キュー(SQ)からパケットを選択し、パケットを転送するためのアウトインターフェースを介してパケットを転送することは、
パケット送信周期が更新されたと判定した場合、前記CFTに対応する周期指定キューポインタ構造(CSQP)を再調整し、再調整されたSQPによって指されるSQ内のパケットをトラバースし、トラバースされているパケットを現在のSQパケットとして決定し、現在のSQパケットを転送するためのアウトインターフェースを呼び出すことによって現在のSQパケットを転送し、その後、SQにトラバースされていないパケットがある場合、当該トラバースされていないパケットのトラバースを継続し、当該トラバースされているパケットを現在のSQパケットとして決定するステップに戻ることであって、前記CSQPは少なくともSQPを含む、ことと、
パケット送信周期が更新されていないと判定した場合、SQ内のパケットをトラバースし、トラバースされているパケットを現在のSQパケットとして決定し、現在のSQパケットを転送するためのアウトインターフェースを呼び出すことによって現在のSQパケットを転送し、その後、SQにトラバースされていないパケットがある場合、当該トラバースされていないパケットのトラバースを継続し、当該トラバースされているパケットを現在のSQパケットとして決定するステップに戻ることと、を含む。
オプションで、前記CSQPはさらに、受信キューポインタ(RQP)と、許容キューポインタ(TQP)とを含み、前記RQPは受信キュー(RQ)とされるCSQを指し、前記TQPは許容キュー(TQ)とされるCSQを指し、
ここで、再調整されたSQPが指すCSQの番号は、前記CFTに対して設定された現在処理周期変数CFT_Jiffiesと、前記CFTにバインドされたCSQの数dとのモジュロ演算によって得られた余りに基づいて決定され、
再調整されたRQPが指すCSQの番号は、前記余りと指定ジッタ周期数Jitterとの和で、前記dに対してモジュロ演算を行うことによって得られた結果に基づいて決定され、
再調整されたTQPが指すCSQの番号は、
(d-1+Rem-Jitter)mod dに従って決定され、Remは前記余りである。
オプションで、当該CFTが、バインドされたすべてのDTQ内のすべてのパケットを、対応する周期指定キュー(CSQ)に入れた後、さらに、
前記CFTにバインドされたCSQ内に、タイムリーにパケットを転送する必要があるイベントがあるか否かを検出し、イベントがある場合、前記CFTによって送信キュー(SQ)からパケットを選択し、パケットを転送するためのアウトインターフェースを介してパケットを転送するステップの実行に戻り、イベントがない場合、再び起動されるのを待つ。
オプションで、前記タイムリーにパケットを転送する必要があるイベントは、前記CFTに対して設定された現在処理周期変数CFT_Jiffiesと現在パケット受信周期変数CFT_Rcv_Jiffiesとに基づいて決定され、前記CFT_Jiffiesの値と前記CFT_Rcv_Jiffiesの値との差が所定の差以下である場合に、タイムリーにパケットを転送する必要があるイベントがあると決定し、それ以外の場合、タイムリーにパケットを転送する必要があるイベントが存在しないと決定し、
前記CFTが起動された場合、または、CFTにバインドされたCSQ内に、タイムリーにパケットを転送する必要があるイベントがあると検出された場合、前記CFT_Jiffiesの値は、設定されたCSQF_Jiffiesの現在の値に更新され、前記CSQF_Jiffiesは、セグメントルーティングに基づいて指定周期キューイングおよび転送(CSQF)の周期計数を実現することを指示するために用いられ、
前記現在のDTQにパケットがあるとチェックされた場合、CFT_Rcv_Jiffiesの値がCFT_Jiffiesの値に更新される。
オプションで、前記パケット送信周期が更新されたか否かは、
前記CFTに対して設定された現在処理周期変数CFT_Jiffiesの値と履歴周期変数CFT_Prev_Jiffiesの値とが等しいか否かをチェックし、等しい場合、パケット送信周期が更新されていないと判定し、等しくない場合、パケット送信周期が更新されたと判定することによって決定され、
前記CFTに対応する周期指定キューポインタ構造(CSQP)が再調整された後、当該方法は、さらに、
前記CFT_Prev_Jiffiesの値を前記CFT_Jiffiesの現在の値に更新することを含む。
これで本発明の実施形態にて提供される装置の説明が完了した。
本発明の実施形態は図11に示す装置のハードウェア構造をさらに提供する。
図12を参照し、本発明の実施形態にて提供される電子デバイスを示す構造図である。図12に示すように、当該ハードウェア構造は、プロセッサと、機械可読記憶媒体とを含み得、機械可読記憶媒体には、前記プロセッサによって実行可能な機械実行可能命令が記憶されており、前記プロセッサは、機械実行可能命令を実行して、本発明の上記例に開示された方法を実施するために用いられる。
上述した方法と同じ発明思想に基づき、本発明の実施形態は、複数のコンピュータ命令を記憶する機械可読記憶媒体をさらに提供し、前記コンピュータ命令は、本発明の上記例に開示された方法が実施されるように、プロセッサによって実行され得る。
例示的に、上記機械可読記憶媒体は任意の電子的、磁性的、光学的または他の物理的記憶装置であってもよく、実行可能な命令、データなどの情報を含むか、または記憶することができるものである。例えば、機械可読記憶媒体は、RAM(Radom Access Memory、ランダムアクセスメモリ)、揮発性メモリ、不揮発性メモリ、フラッシュメモリ、ストレージドライブ(ハードドライブなど)、ソリッドステートドライブ、任意の記憶ディスク(光ディスク、dvdなど)、または類似の記憶媒体や、これらの組み合わせなどが挙げられる。
上記実施形態で説明したシステム、装置、モジュールまたはユニットは、具体的には、コンピュータチップ、エンティティ、または何らかの機能を有する製品によって実現されてもよい。典型的な実現デバイスはコンピュータであり、コンピュータの具体的な形態はパーソナルコンピュータ、ラップトップコンピュータ、携帯電話、カメラ付き電話、スマートフォン、パーソナルデジタルアシスタント、メディアプレーヤ、ナビゲーションデバイス、電子メール送受信デバイス、ゲーム機、タブレット、ウェアラブルデバイス、またはこれらのデバイスの任意のいくつかの組み合わせであってもよい。
なお、説明の便宜上、上記の装置を説明するときに機能によって様々なユニットに分けてそれぞれ説明する。もちろん、本発明を実施する際に、各ユニットの機能を同一または複数のソフトウェアおよび/またはハードウェアで実現することも可能である。
当業者であれば分かるように、本発明の実施形態が、方法、システム、またはコンピュータプログラム製品として提供されてもよい。従って、本発明は、ハードウェアだけからなる実施形態、ソフトウェアだけからなる実施形態、またはソフトウェアとハードウェアを組み合わせた実施形態なる形態を用いてもよい。さらに、本発明の実施形態は、コンピュータで使用可能なプログラムコードを含む1つまたは複数のコンピュータで使用可能な記憶媒体(磁気ディスクメモリ、CD-ROM、光学メモリなどを含むが、これらに限定されない)において実施されるコンピュータプログラム製品の形態であってもよい。
本発明は、本発明の実施形態による方法、デバイス(システム)、およびコンピュータプログラム製品のフローチャートおよび/またはブロック図を参照して説明される。フローチャートおよび/またはブロック図における各フローおよび/またはブロック、並びにフローチャートおよび/またはブロック図におけるフローおよび/またはブロックの組み合わせは、コンピュータプログラム命令によって実現されてもよいことが理解されるべきである。これらのコンピュータプログラム命令は、マシンを生成するために、汎用コンピュータ、専用コンピュータ、組み込みプロセッサ、または他のプログラム可能なデータ処理デバイスのプロセッサに提供されてもよく、それにより、コンピュータまたは他のプログラム可能なデータ処理デバイスのプロセッサによって実行される命令により、フローチャートの1つまたは複数のフロー、および/またはブロック図の1つまたは複数のブロックにおいて指定される機能を実現するための装置が生成される。
また、これらのコンピュータプログラム命令は、コンピュータまたは他のプログラム可能なデータ処理デバイスに特定の方法で作業するように指示することができるコンピュータ可読メモリに記憶されてもよく、その結果、当該コンピュータ可読メモリに記憶されている命令により、フローチャートの1つまたは複数のフローおよび/またはブロック図の1つまたは複数のブロックにおいて指定される機能を実現する命令装置を含む製品が生成される。
これらのコンピュータプログラム命令は、コンピュータまたは他のプログラム可能なデータ処理デバイスにロードしてもよく、それにより、一連の動作ステップがコンピュータまたは他のプログラム可能なデバイス上で実行されることで、コンピュータにより実施される処理が生成され、それにより、コンピュータまたは他のプログラム可能なデバイス上で実行される命令により、フローチャートの1つまたは複数のフロー、および/またはブロック図の1つまたは複数のブロック内で指定される機能を実現するためのステップが提供される。
上記は、本発明の実施形態にすぎず、本発明を限定するために使用されるものではない。当業者にとって、本発明は、様々な変更および変化があり得る。本発明の趣旨と原理から逸脱することなく修正、同等な置換、改善などを行った場合、いずれも本発明の特許請求の範囲に含まれるものとするべきである。

Claims (16)

  1. ネットワークデバイスに適用される決定論的フロー伝送方法であって、
    本デバイス上の起動された分配スレッドによって、当該分配スレッドにバインドされたパケット受信キュー内のパケットを分配することにより、前記パケット受信キュー内の決定論的フローに属するパケットを対応する決定論的フローバッファリングキュー(DBQ)に分配し、ベストエフォートフローに属するパケットを、対応するベストエフォートフローキュー(BTQ)に分配することであって、前記パケット受信キュー内のパケットは、前記ネットワークデバイスのローカルインターフェースを介して外部から受信されたパケットである、ことと、
    前記本デバイス上の起動された決定論的転送スレッド(DFT)によって、当該DFTにバインドされたDBQ内のパケットを対応する決定論的フローキュー(DTQ)に入れることと、
    前記本デバイス上の起動された周期転送スレッド(CFT)によって、当該CFTにバインドされたDTQ内のパケットを、対応する周期指定キュー(CSQ)に入れ、前記CFTによって送信キュー(SQ)からパケットを選択し、パケット転送のためのアウトインターフェースを介して当該パケットを転送することであって、前記SQは前記CFTに対応する送信キューポインタ(SQP)が現在指しているCSQである、ことと、を含む、
    ことを特徴とする決定論的フロー伝送方法。
  2. 前記分配スレッドによって、当該分配スレッドにバインドされたパケット受信キュー内のパケットを分配することは、
    前記分配スレッドにバインドされたパケット受信キューをトラバースし、トラバースされているパケット受信キューを現在のキューとして決定し、前記現在のキューにパケットがあるか否かをチェックすることと、
    現在のキューにパケットがある場合、現在のキュー内のパケットをトラバースし、トラバースされているパケットを現在のパケットとして決定し、現在のパケットが決定論的フローに属する場合、現在のパケットを現在のキューに対応するDBQに入れ、現在のパケットがベストエフォートフローに属する場合、現在のパケットを現在のキューに対応するBTQに入れ、
    現在のキューにトラバースされていないパケットがある場合、トラバースされていないパケットのトラバースを継続し、前記トラバースされているパケットを現在のパケットとして決定するステップに戻ることと、
    現在のキューにパケットが存在しないか、または現在のキューにトラバースされていないパケットが存在しない場合、前記分配スレッドにバインドされたすべてのパケット受信キューにトラバースされていないパケット受信キューがあるとき、前記分配スレッドにバインドされ且つトラバースされていないパケット受信キューのトラバースを継続し、前記トラバースされているパケット受信キューを現在のキューとして決定するステップに戻ることと、を含む、
    ことを特徴とする請求項1に記載の方法。
  3. 前記分配スレッドには対応するスレッドポーリングフラグが設定され、前記分配スレッドが起動されたとき、前記スレッドポーリングフラグはFALSEに設定されており、
    現在のキューにパケットがあると検出した場合、さらに、前記スレッドポーリングフラグをTRUE に設定して、前記分配スレッドに対して設定された指定機能をオフにするように指示し、前記指定機能をオフにすることは、前記分配スレッドが睡眠状態に入ることを阻止することを指示するためであり、
    前記分配スレッドにバインドされたパケット受信キューがすべてトラバースされた後、
    前記スレッドポーリングフラグがTRUE である場合、前記スレッドポーリングフラグをFALSEに設定し、前記分配スレッドにバインドされたパケット受信キューをトラバースするステップに戻り、前記スレッドポーリングフラグがFALSEである場合、前記指定機能をオンにするように指示することであって、前記指定機能をオンにすることは、前記分配スレッドに起動されるのを待つように指示するためである、ことをさらに含む、
    ことを特徴とする請求項2に記載の方法。
  4. 前記分配スレッドによって、前記パケット受信キュー内の決定論的フローに属するパケットを対応するDBQに分配する際に、
    当該DBQにバインドされたDFTに対して設定されたDFT起動フラグがFALSEである場合、当該DFT起動フラグをTRUE に設定し、DFT起動フラグがTRUE である当該DFTを起動することをさらに含むこと、
    および/または、
    前記分配スレッドにバインドされたすべてのパケット受信キューがトラバースされた後、
    DFT起動フラグがTRUEであるDFTについて、当該DFTを起動し、当該DFTのDFT起動フラグをFALSEに設定することをさらに含むこと、
    を特徴とする請求項2または3に記載の方法。
  5. 前記本デバイス上の起動された決定論的転送スレッド(DFT)によって、当該DFTにバインドされたDBQ内のパケットを対応する決定論的フローキュー(DTQ)に入れることは、
    前記DFTにバインドされたDBQをトラバースし、トラバースされているDBQを現在のDBQとして決定し、前記現在のDBQにパケットがあるか否かをチェックすることと、
    前記現在のDBQにパケットがある場合、前記現在のDBQ内のパケットをトラバースし、トラバースされているパケットを現在のDBQパケットとして決定し、設定済みのパケット重複・除去・整列機能(PREOF機能)を呼び出すことによって前記現在のDBQパケットが重複パケットでないと識別した場合、パケット出力チェーンを生成し、前記パケット出力チェーン内の各DBQパケットをカプセル化し、カプセル化されたDBQパケットを、当該DBQパケットを転送するためのアウトインターフェースに対応するDTQに入れ、
    前記現在のDBQにトラバースされていないパケットがある場合、前記現在のDBQ内のトラバースされていないパケットのトラバースを継続し、前記トラバースされているパケットを現在のDBQパケットとして決定するステップに戻ることと、
    前記現在のDBQにパケットが存在しないか、または前記現在のDBQにトラバースされていないパケットが存在しない場合、前記DFTにバインドされたすべてのDBQにトラバースされていないDBQがあるとき、当該トラバースされていないDBQのトラバースを継続し、前記トラバースされているDBQを現在のDBQとして決定するステップに戻ることと、を含む、
    ことを特徴とする請求項1に記載の方法。
  6. 前記パケット出力チェーンは、
    前記PREOF機能を呼び出すことによって前記現在のDBQパケットがアウトオブオーダーパケットでないと識別した場合、前記現在のDBQパケットを前記パケット出力チェーンに入れることと、
    前記PREOF機能を呼び出すことによって前記現在のDBQパケットがアウトオブオーダーパケットであると識別した場合、前記現在のDBQパケットが属するサービスフローを決定し、前記現在のDBQパケットが、前記現在のDBQパケットと、記録された、前記サービスフローに属し且つ所定の時間ウィンドウ内でPREOF機能を呼び出すことによって処理された少なくとも1つのパケットとが正常に整列したという条件を満たす場合、前記現在のDBQパケットと、記録された、前記現在のDBQパケットと正常に整列した少なくとも1つのパケットと、記録された、前記サービスフローに属し且つ所定の時間ウィンドウ外でPREOF機能を呼び出すことによって処理されたパケットとを、前記パケット出力チェーンに入れ、前記現在のDBQパケットが前記条件を満たさない場合、記録された、前記サービスフローに属し且つ所定の時間ウィンドウ外でPREOF機能を呼び出すことによって処理されたパケットを、前記パケット出力チェーンに入れることと、により生成される、
    ことを特徴とする請求項5に記載の方法。
  7. 前記DFTには対応するDFTポーリングフラグが設定され、前記DFTが起動されたとき、前記DFTポーリングフラグはFALSEに設定されており、
    現在のDBQにパケットがあると検出した場合、さらに、前記DFTポーリングフラグをTRUE に設定して、前記DFTに対して設定された指定機能をオフにし、前記指定機能をオフにすることは、前記DFTが睡眠状態に入ることを阻止することを指示するためであり、
    前記DFTにバインドされたDBQがすべてトラバースされた後、
    前記DFTポーリングフラグがTRUE である場合、前記DFTポーリングフラグをFALSEに設定し、当該起動されたDFTにバインドされたDBQをトラバースするステップに戻り、前記DFTポーリングフラグがFALSEである場合、前記指定機能をオンにすることであって、前記指定機能をオンにすることは、前記DFTに、起動されるのを待つように指示するためである、ことをさらに含む、
    ことを特徴とする請求項5に記載の方法。
  8. 前記DFTによって、DBQパケットを、当該DBQパケットを転送するためのアウトインターフェースに対応するDTQに入れた後、
    当該DTQにバインドされたCFTに対して設定されたCFT起動フラグがFALSEである場合、当該CFT起動フラグをTRUE に設定し、当該CFT起動フラグがTRUE であるCFTを起動することをさらに含み、
    前記DFTにバインドされたすべてのDBQがトラバースされた後、
    CFT起動フラグがTRUE に設定されたCFTについて、当該CFTを起動し、当該CFTのCFT起動フラグをFALSEに設定することをさらに含むこと、
    ことを特徴とする請求項5に記載の方法。
  9. 前記本デバイス上の起動された周期転送スレッド(CFT)によって、当該CFTにバインドされたDTQ内のパケットを、対応する周期指定キュー(CSQ)に入れることは、
    前記CFTにバインドされたDTQをトラバースし、トラバースされているDTQを現在のDTQとして決定し、前記現在のDTQにパケットがあるか否かをチェックすることと、
    前記現在のDTQにパケットがある場合、前記現在のDTQ内のパケットをトラバースし、トラバースされているパケットを現在のDTQパケットとして決定し、前記現在のDTQパケットに付加された周期指定キューCycleパラメータに基づいて、前記現在のDTQパケットに対応する目標CSQを決定し、前記目標CSQがSQと受信キュー(RQ)の間にある場合、前記現在のDTQパケットをRQに入れ、前記目標CSQが許容キュー(TQ)とSQの間にある場合、前記現在のDTQパケットをTQに入れ、前記目標CSQがRQとTQの間にある場合、前記現在のDTQパケットを前記目標CSQに入れ、
    前記現在のDTQにトラバースされていないパケットがある場合、トラバースされていない1つのパケットをトラバースし、前記トラバースされているパケットを前記現在のDTQパケットとして決定するステップに戻ることであって、前記RQは前記CFTに対応する受信キューポインタ(RQP)が現在指しているCSQであり、前記TQは前記CFTに対応する許容キューポインタ(TQP)が現在指しているCSQである、ことと、
    前記現在のDTQにパケットが存在しないか、または前記現在のDTQにトラバースされていないパケットが存在しない場合、前記CFTにバインドされたすべてのDTQにトラバースされていないDTQがあるとき、トラバースされていない1つのDTQのトラバースを継続し、前記トラバースされているDTQを現在のDTQとして決定するステップに戻ることと、を含む、
    ことを特徴とする請求項1に記載の方法。
  10. 前記本デバイス上の起動された周期転送スレッド(CFT)によって、当該CFTにバインドされたDTQ内のパケットを、対応する周期指定キュー(CSQ)に入れることは、前記SQが空のときに実行される、
    ことを特徴とする請求項1または9に記載の方法。
  11. 前記CFTによって送信キュー(SQ)からパケットを選択し、パケット転送のためのアウトインターフェースを介して当該パケットを転送することは、
    パケット送信周期が更新されたと判定した場合、少なくともSQPを含む、前記CFTに対応する周期指定キューポインタ構造(CSQP)を再調整し、再調整されたSQPによって指されるSQ内のパケットをトラバースし、トラバースされているパケットを現在のSQパケットとして決定し、前記現在のSQパケットを転送するためのアウトインターフェースを呼び出すことによって前記現在のSQパケットを転送し、
    SQにトラバースされていないパケットがある場合、当該トラバースされていない1つのパケットをトラバースし、前記トラバースされているパケットを現在のSQパケットとして決定するステップに戻ることと、
    前記パケット送信周期が更新されていないと判定した場合、前記SQ内のパケットをトラバースし、トラバースされているパケットを現在のSQパケットとして決定し、前記現在のSQパケットを転送するためのアウトインターフェースを呼び出すことによって前記現在のSQパケットを転送し
    前記SQにトラバースされていないパケットがある場合、当該トラバースされていない1つのパケットをトラバースし、前記トラバースされているパケットを現在のSQパケットとして決定するステップに戻ることと、を含む、
    ことを特徴とする請求項9に記載の方法。
  12. 前記CSQPはさらに、受信キューポインタ(RQP)と、許容キューポインタ(TQP)とを含み、前記RQPは受信キュー(RQ)とされるCSQを指し、前記TQPは許容キュー(TQ)とされるCSQを指し、
    ここで、再調整されたSQPが指すCSQの番号は、前記CFTに対して設定された現在処理周期変数CFT_Jiffiesと、前記CFTにバインドされたCSQの数dとのモジュロ演算によって得られた余りに基づいて決定され、
    再調整されたRQPが指すCSQの番号は、前記余りと指定ジッタ周期数Jitterとの和で、前記dに対してモジュロ演算を行うことによって得られた結果に基づいて決定され、
    再調整されたTQPが指すCSQの番号は、
    (d-1+Rem-Jitter)mod dに従って決定され、ここで、Remは前記余りである、
    ことを特徴とする請求項11に記載の方法。
  13. 前記本デバイス上の起動された周期転送スレッド(CFT)によって、当該CFTにバインドされたすべてのDTQ内のすべてのパケットを、対応する周期指定キュー(CSQ)に入れた後、
    前記CFTにバインドされたCSQ内に、タイムリーにパケットを転送する必要があるイベントがあるか否かを検出し、イベントがある場合、前記CFTによって送信キュー(SQ)からパケットを選択し、パケット転送のためのアウトインターフェースを介して当該パケットを転送するステップの実行に戻り、イベントがない場合、前記CFTが再び起動されるのを待つことをさらに含む、
    ことを特徴とする請求項9に記載の方法。
  14. 前記タイムリーにパケットを転送する必要があるイベントは、前記CFTに対して設定された現在処理周期変数CFT_Jiffiesと現在パケット受信周期変数CFT_Rcv_Jiffiesとに基づいて決定され、前記CFT_Jiffiesの値と前記CFT_Rcv_Jiffiesの値との差が所定の差以下である場合に、タイムリーにパケットを転送する必要があるイベントがあると決定し、それ以外の場合、タイムリーにパケットを転送する必要があるイベントが存在しないと決定し、
    ここで、前記CFTが起動された場合、または、CFTにバインドされたCSQ内に、タイムリーにパケットを転送する必要があるイベントがあると検出された場合、前記CFT_Jiffiesの値は、設定されたCSQF_Jiffiesの現在の値に更新され、前記CSQF_Jiffiesは、セグメントルーティングに基づいて指定周期キューイングおよび転送(CSQF)の周期計数を実現することを指示するために用いられ、
    前記現在のDTQにパケットがあるとチェックされた場合、CFT_Rcv_Jiffiesの値がCFT_Jiffiesの値に更新される、
    ことを特徴とする請求項11または13に記載の方法。
  15. 前記パケット送信周期が更新されたか否かは、
    前記CFTに対して設定された現在処理周期変数CFT_Jiffiesの値と履歴周期変数CFT_Prev_Jiffiesの値とが等しいか否かを判定し、等しい場合、パケット送信周期が更新されていないと判定し、等しくない場合、パケット送信周期が更新されたと判定することによって決定され、
    前記CFTに対応する周期指定キューポインタ構造(CSQP)を再調整した後、
    前記CFT_Prev_Jiffiesの値を前記CFT_Jiffiesの現在の値に更新することをさらに含む、
    ことを特徴とする請求項11に記載の方法。
  16. プロセッサと、機械可読記憶媒体とを含む電子デバイスであって、前記機械可読記憶媒体には、前記プロセッサによって実行可能な機械実行可能命令が記憶され、前記プロセッサは、請求項1~15のいずれか1項に記載の方法を実施するように、機械実行可能命令を実行するために用いられる、
    ことを特徴とする電子デバイス。
JP2023574657A 2021-12-15 2021-12-15 決定論的フロー伝送方法および装置 Pending JP2024520146A (ja)

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
PCT/CN2021/138338 WO2023108479A1 (zh) 2021-12-15 2021-12-15 确定性流传输方法及装置

Publications (1)

Publication Number Publication Date
JP2024520146A true JP2024520146A (ja) 2024-05-21

Family

ID=86775009

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2023574657A Pending JP2024520146A (ja) 2021-12-15 2021-12-15 決定論的フロー伝送方法および装置

Country Status (4)

Country Link
EP (1) EP4336796A4 (ja)
JP (1) JP2024520146A (ja)
CN (1) CN116615899A (ja)
WO (1) WO2023108479A1 (ja)

Families Citing this family (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN117155883B (zh) * 2023-10-31 2024-01-30 国网湖北省电力有限公司电力科学研究院 一种实现报文定时发送的tsn网卡装置、方法及介质

Family Cites Families (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN110024339B (zh) * 2017-11-06 2020-10-09 华为技术有限公司 报文转发方法、转发设备和网络设备
US11398925B2 (en) * 2019-05-03 2022-07-26 Microchip Technology Incorporated Media access for time-sensitive and best efforts data packets, and related systems, methods and devices
WO2021014180A1 (en) * 2019-07-22 2021-01-28 Huawei Technologies Co., Ltd. Control device, switch device and methods
US20210014177A1 (en) * 2020-09-26 2021-01-14 Intel Corporation Deterministic packet scheduling and dma for time sensitive networking
CN113411270B (zh) * 2021-06-07 2023-04-07 中国人民解放军国防科技大学 一种面向时间敏感网络的报文缓冲区管理方法

Also Published As

Publication number Publication date
EP4336796A1 (en) 2024-03-13
EP4336796A4 (en) 2024-06-26
WO2023108479A1 (zh) 2023-06-22
CN116615899A (zh) 2023-08-18

Similar Documents

Publication Publication Date Title
US8830829B2 (en) Parallel processing using multi-core processor
US8230110B2 (en) Work-conserving packet scheduling in network devices
US8155134B2 (en) System-on-chip communication manager
US8953625B2 (en) Applying backpressure to a subset of nodes in a deficit weighted round robin scheduler
JP6682668B2 (ja) コンカレントプライオリティキューにおいてシーケンサを用いるためのシステムおよび方法
CN112585914B (zh) 报文转发方法、装置以及电子设备
TW200920035A (en) Enhancement of end-to-end network QoS
US10419370B2 (en) Hierarchical packet buffer system
US10701002B1 (en) System and method for memory deallocation
TW201001975A (en) Network system with quality of service management and associated management method
US9336006B2 (en) High-performance parallel traffic management for multi-core platforms
CA2697994C (en) Method and apparatus for data processing using queuing
JP2024520146A (ja) 決定論的フロー伝送方法および装置
US8599694B2 (en) Cell copy count
CN110830388A (zh) 一种数据调度方法、装置、网络设备及计算机存储介质
US8879578B2 (en) Reducing store and forward delay in distributed systems
US7474662B2 (en) Systems and methods for rate-limited weighted best effort scheduling
WO2023123104A1 (zh) 一种报文传输方法及网络设备
JP2011091711A (ja) ノード及び送信フレーム振り分け方法並びにプログラム
WO2021136014A1 (zh) 一种安全计算控制方法、数据包处理方法、装置及其系统
CN117749726A (zh) Tsn交换机输出端口优先级队列混合调度方法和装置

Legal Events

Date Code Title Description
A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20231204

A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20231204