
ネットワークスケジューラ(パケットスケジューラ、キューイングディシプリン(qdisc)、キューイングアルゴリズムとも呼ばれる)は、パケット交換通信ネットワークのノード上のアービタです。プロトコルスタックとネットワークインターフェースコントローラの送信キューと受信キューにおけるネットワークパケットの順序を管理します。さまざまなオペレーティングシステム向けに複数のネットワークスケジューラが用意されており、既存のネットワークスケジューリングアルゴリズムの多くを実装しています。
ネットワークスケジューラのロジックは、次に転送するネットワークパケットを決定します。ネットワークスケジューラはキューイングシステムと関連付けられており、ネットワークパケットが送信されるまで一時的に保存します。システムには単一または複数のキューが存在する場合があり、それぞれのキューは1つのフロー、分類、または優先度のパケットを保持します。
場合によっては、システムの制約内で全ての送信をスケジュールできないことがあります。このような場合、ネットワークスケジューラが、どのトラフィックを転送し、どのトラフィックを破棄するかを決定する責任を負います。
ネットワークスケジューラは、特定のネットワークトラフィック制御イニシアチブの実装に責任を負う場合があります。ネットワークトラフィック制御は、ネットワークの混雑、遅延、パケット損失を減らすことを目的としたすべての対策を包括する用語です。具体的には、アクティブキュー管理(AQM) は、キューに入れられたネットワークパケットを選択的に破棄することで、過度のネットワーク混雑を防ぐというより大きな目標を達成します。スケジューラは、破棄するパケットを選択する必要があります。トラフィックシェーピングは、パケットがバーストでキューに入れられたときに送信パケットを遅延させることで、トラフィックフローの帯域幅要件を平滑化します。スケジューラは、送信パケットのタイミングを決定します。サービス品質(QoS) は、サービスクラス (差別化サービス) または予約接続 (統合サービス)に基づいてトラフィックの優先順位付けを行うことです。
時間の経過とともに、多くのネットワークキューイング手法が開発されてきました。これらの手法はそれぞれ、さまざまな送信バッファまたは受信バッファ内でネットワークパケットの特定の並べ替えや破棄を提供します。[ 1 ]キューイング手法は、特定のクラスのネットワークパケットの遅延を 減らすなど、さまざまなネットワーク条件を補償する試みとして一般的に使用され、一般的にQoS対策の一部として使用されます。[ 2 ] [ 3 ] [ 4 ]
クラスフルキューイング規律では、ツリーの枝のように機能するクラスを作成できます。各クラスにパケットをフィルタリングするためのルールを設定できます。各クラス自体に、他のクラスフルまたはクラスレスキューイング規律を割り当てることができます。クラスレスキューイング規律では、キューイング規律を追加することはできません。[ 5 ]
ネットワークトラフィックの管理に適したアルゴリズムの例としては、以下のようなものがあります。
上記のいくつかはLinuxカーネルモジュールとして実装されており[ 13 ] [ 14 ]、無料で利用可能です。
バッファブロートとは、パケット交換ネットワークにおいて、パケットのバッファリングが過剰になることでレイテンシが増大し、パケット遅延のばらつきが大きくなる現象です。バッファブロートは、ネットワークスケジューラが戦略的にパケットを破棄することで、不必要に高いバッファリングバックログの発生を回避し、対処することができます。例としては、CoDel、FQ-CoDel、ランダム早期検出などが挙げられます。

Linuxカーネルのパケットスケジューラは、Linuxカーネルのネットワークスタックの不可欠な部分であり、すべてのNICの送信および受信リングバッファを管理します。
パケットスケジューラは、(トラフィック制御tcの略)と呼ばれるユーティリティを使用して構成されます。デフォルトのキューイング規律として、パケットスケジューラはpfifo_fastと呼ばれる FIFO 実装を使用します[ 15 ]。ただし、systemd はバージョン 217 以降、デフォルトのキューイング規律を に変更しています[ 16 ] 。fq_codel
およびユーティリティを使用するifconfigとip、システム管理者は、イーサネットフレームのサイズに関係なく、各デバイスのバッファサイズtxqueuelenとをrxqueuelen個別に構成できます。Linuxカーネルのネットワークスタックには、ネットワークスケジューラによって管理されない他のいくつかのバッファが含まれています。[ a ]
Berkeley Packet Filterフィルタは、パケットスケジューラの分類器にアタッチできます。2015年に Linux カーネルのバージョン 4.1 で導入されたeBPF機能は、従来の BPF プログラマブル分類器を eBPF に拡張します。 [ 17 ]これらはLLVM eBPF バックエンド を使用してコンパイルし、ユーティリティを使用して実行中のカーネルにロードできますtc。[ 18 ]
ALTQはBSD系OS向けのネットワークスケジューラの実装です。OpenBSDバージョン5.5以降、ALTQはHFSCスケジューラに置き換えられました。
通信ネットワークのスケジューラは、パケットの優先順位付け、タイミング、リソースの分配など、リソースの割り当てを管理します。高度な実装では、現代のネットワーク構成の複雑さに対処するために、人工知能がますます活用されています。たとえば、セルフリーネットワークでは、複数の無線ユニット(RU)とユーザ機器(UE)間の相互作用を効率的に処理するために、教師ありニューラルネットワーク(NN)ベースのスケジューラが導入されています。このアプローチは、計算の複雑さを軽減しながら、遅延、スループット、リソースの割り当てを最適化するため、5G以降のネットワークにとって有望なソリューションとなっています。[ 19 ]