何度も読みました。Linux用トークンバケットフィルタ(tbf)そして、私はまだ計算burst
とlatency
パラメータがどのように実行されるべきかを完全に理解していません。恥ずかしいことです:(
合理的な遅延時間は約50ミリ秒程度だと思います。いいですね。しかし、バーストはどのような値を取るべきですか?
マニュアルページには次のように記載されています。
後者の計算では、バケットのサイズ、速度、および可能な最高速度(設定されている場合)を考慮します。これら2つのパラメータは相互に排他的です。
では、遅延時間はバケットやフィルタとどのような関係がありますか?計算する式がありますか?それとも、「いいね、XバイトのバーストとY秒の遅れが私にはいい」という質問ですか?
ベストアンサー1
マンページの唯一の制限burst
は、設定した速度を可能にするのに十分な高さでなければならないことです。つまり、少なくとも rate/HZ でなければなりません。 HZはカーネル構成パラメーターです。カーネル構成を確認して、システムに何があるかを調べることができます。たとえば、Debianでは次のことができます。
$ egrep '^CONFIG_HZ_[0-9]+' /boot/config-`uname -r`
CONFIG_HZ_250=y
したがって、私のシステムのHZは250です。 10mbpsを達成するには、burst
少なくとも10,000,000ビット/秒 ¼ 250Hz = 40,000ビット = 5000バイトが必要です。 (マンページのより高い値は、デフォルト値HZ = 100から始まります。)
ただし、burst
これはポリシーツールでもあります。後で使用できるように「保存」するために今使用できる帯域幅の量を設定します。ここで一般的な問題は、大量のダウンロードを制限しながら、小さなダウンロード(Webページなど)を非常に高速に実行できるようにすることです。burst
ダウンロードサイズを小さくすると思われるサイズに増やすだけです。 (ただし、さまざまな種類のトラフィックを分類できるように、htbなどのクラス型qdiscに切り替えることがよくあります。)
したがって、必要なものを達成するのに十分な大きさのバーストを構成しますrate
。それに加えて、達成しようとしている目標に応じてさらに増やすことができます。
トークンバケットフィルタの概念モデル
「バケット」は比喩的なターゲットです。主な機能はトークンを保持できることであり、保持できるトークンの数には制限があります。より多くのトークンを追加しようとすると、「オーバーフロー」され、余分なトークンが失われます(たとえば、容器に水が多すぎます)、実際のバケットなど。バケットのサイズを言いますburst
。
実際にパケットをネットワークに転送するには、パケットはバイトサイズまたはmpu
(どちらか大きい方)サイズと同じトークンを取得する必要があります。
トークンを待つパケットのキューがあります(または存在する可能性があります)。これは、バケットが空の場合、またはトークンがパケットサイズより小さい場合に発生します。バレル前の歩道にはこの程度の空間のみあり、空間の量(バイト)は直接設定されますlimit
。または間接的に設定することもできます(理想的な場合は×latency
と評価されます)。rate
latency
カーネルがフィルタリングされたインターフェイスからパケットを送信しようとすると、パケットを行の末尾に配置しようとします。プレスにスペースがない場合、プレスの終わりは床のないピットであり、カーネルがパケットを破棄するため、これはパケットに不幸です。
最後の部分は、サイクルごとにバケットにトークンを追加rate
/トークンを作成するトークンメーカーです。HZ
(これがバケットが少なくともこれほど大きくなければならない理由です。そうしないと、新しく作成されたトークンの一部がすぐに破棄されます。)