tcの基本的コマンド

2024年4月11日

■tcを使って帯域を10Mbpsに制限する"だけ"のコマンド
sudo tc qdisc add dev eth0 root tbf rate 10mbit burst 10kb latency 100ms
(burst 10kb latency 100msを付けないと、エラーになる)

■tcを使って遅延を500msに制限するだけのtcコマンド
sudo tc qdisc add dev eth0 root netem delay 500ms

■tcを使ってパケットロスを10%に制限する"だけ"のコマンド
sudo tc qdisc add dev eth0 root netem loss 10%

■tcを使ってパケットを保持できるキューの最大数を1000に制限する"だけ"のコマンド
sudo tc qdisc change dev eth0 root handle 1: pfifo limit 1000

  • change: 既存のキューイング方式を変更する際に使用されるオプションです。
  • dev eth0: 変更を加える対象となるネットワークインターフェースを指定します。この場合はeth0です。
  • root: ルートキュー(ルートディスクリプタ)に変更を加えることを示します。
  • handle 1:: ルートキューを特定するためのハンドルを指定します。1:は一般的にルートキューを表します。
  • pfifo: パケットを先入先出順で処理する単純なキューイング方式です。
  • limit 1000: パケットを保持できるキューの最大数を指定します。ここでは1000としています。
分類 qdiscの名前 カーネルソースファイルの場所 概要
クラスレス qdisc pfifo_fast net/sched/sch_generic.c デフォルトのqdiscです。FIFOのキューが3つあります
pfifo net/sched/sch_fifo.c FIFOのキューが1つあります。キュー長の最大値はパケット数で表します
bfifo 同上 FIFOのキューが1つあります。 キュー長の最大値はバイト数で表します
sfq(Stochastic Fairness Queueing) net/sched/sch_sfq.c フローにもとづいてパケットをスケジューリングします。フローとは送信元/送信先IPアドレス、ポート番号の組です
tbf(Token Bucket Filter) net/sched/sch_tbf.c パケットシェーピング機能を提供します。制限レートを超えたパケットはキューに保留されます
netem(Network Emulator) net/sched/sch_netem.c 送信パケットに対して、パケット廃棄、遅延等の操作をするためのqdiscです
fq(Fair Queue Packet Schedule) net/sched/sch_fq.c Fair Queue Packet Scheduler (per flow pacing)
クラスフル qdisc prio net/sched/sch_prio.c ルールにしたがってパケットを分類(class)します。デフォルトでは3つのクラスがあります。それぞれのクラスにqdisc(sfq,tbf等)を設定することができます。
htb(Hierarchy Token Bucket) net/sched/sch_htb.c 1つのリンクを複数のサービス(www,ftp等)で共有する場合、各サービスに最低限必要な帯域を割り当てることができます

計測は、iperf3で行う

iPerf3を使用したネットワーク速度計測

sudo tc qdisc add dev eth0 root tbf rate 10mbit burst 10kb latency 100ms このコマンドにパケットロス10%を追加して下さい

sudo tc qdisc add dev eth0 root handle 1: tbf rate 10mbit burst 10kb latency 100ms sudo tc qdisc add dev eth0 parent 1:1 handle 10: netem loss 10%

 

 

 

2024年4月11日2024,江端さんの技術メモ

Posted by ebata