====== tcで帯域制限 ======
発信帯域を制限できる。
[[01_linux:01_net:nicのスピード変更_ethtool|NICのスピード変更(ethtool)]]では、NIC自体のスピードを変更できる。
====== 10Mに制限 ======
bitで指定
tc qdisc add dev eth0 root tbf limit 15Kb buffer 10Kb/8 rate 10Mbit
====== 確認コマンド ======
tc qdisc show
qdisc tbf 8002: dev eth0 rate 50000Kbit burst 10Kb lat 819us
====== 制限を削除 ======
tc qdisc delete dev eth0 root tbf
====== 例 ======
bpsでも指定できる。
tc qdisc add dev eth0 root tbf limit 15Kb buffer 10Kb/8 rate 10Mbps
tc qdisc show
qdisc tbf 8004: dev eth0 rate 80000Kbit burst 10Kb lat 512us
30MBitに変更制限する場合
tc qdisc change dev rkm5w03y7gq3pv root tbf rate 30mbit latency 50ms burst 1mb
[root@hv9142 ~]# tc qdisc | grep rkm5w03y7gq3pv
qdisc tbf 8018: dev rkm5w03y7gq3pv rate 30000Kbit burst 1024Kb lat 50.0ms
====== 検証 ======
tc は/proc/net/devで見た時のTransmit(アウトバウンド)にしかかからない。
※HV上から仮想インターフェースにtcを書ける場合、仮想インターフェースのTransmit(VMからみるとインバウンド)にかけることになる。
[[http://www.atmarkit.co.jp/ait/articles/0803/18/news147_3.html|参考サイト]]
===== 普通のサーバ =====
=== 何も制限をかけてない場合 ===
# i=bond0
# while : ; do _T1=$( grep $i: /proc/net/dev | cut -d: -f 2|awk '{print $9}'); \
> sleep 1; _T2=$( grep $i: /proc/net/dev | cut -d: -f 2|awk '{print $9}'); \
> echo "$(expr \( \( $_T2 - $_T1 \) \* 8 \) \/ 1024 ) kbps"; done
14 kbps
5 kbps
47177 kbps
204251 kbps
204287 kbps
204298 kbps
204369 kbps
204417 kbps
138687 kbps
=== 10Mbpsで制限をかけた場合 ===
# tc qdisc add dev bond0 root tbf rate 10mbit latency 50ms burst 1mb mtu 33000
# tc qdisc | grep bond0
qdisc tbf 800a: dev bond0 rate 10000Kbit burst 1024Kb lat 50.0ms
# i=bond0
# while : ; do _T1=$( grep $i: /proc/net/dev | cut -d: -f 2|awk '{print $9}'); sleep 1; _T2=$( grep $i: /proc/net/dev | cut -d: -f 2|awk '{print $9}'); echo "$(expr \( \( $_T2 - $_T1 \) \* 8 \) \/ 1024 ) kbps"; done
11572 kbps
11590 kbps
11579 kbps
11566 kbps
11578 kbps
11566 kbps
11566 kbps
===== 仮想VM(HV上から仮想インターフェースへかける) =====
=== 制限なし ===
# i=nxiort3mfzk3mq
# while : ; do _T1=$( grep $i: /proc/net/dev | cut -d: -f 2|awk '{print $9}'); sleep 1; _T2=$( grep $i: /proc/net/dev | cut -d: -f 2|awk '{print $9}'); echo "$(expr \( \( $_T2 - $_T1 \) \* 8 \) \/ 1024 ) kbps"; done
98837 kbps
98661 kbps
98789 kbps
98711 kbps
98765 kbps
98666 kbps
98790 kbps
98779 kbps
98708 kbps
98803 kbps
98660 kbps
=== 1Mに制限した場合 ===
tc qdisc change dev nxiort3mfzk3mq root tbf rate 100mbit latency 50ms burst 1mb mtu 33000
# i=nxiort3mfzk3mq
# while : ; do _T1=$( grep $i: /proc/net/dev | cut -d: -f 2|awk '{print $9}'); sleep 1; _T2=$( grep $i: /proc/net/dev | cut -d: -f 2|awk '{print $9}'); echo "$(expr \( \( $_T2 - $_T1 \) \* 8 \) \/ 1024 ) kbps"; done
1157 kbps
1157 kbps
1157 kbps
1157 kbps
1157 kbps
1157 kbps
1162 kbps
{{tag>tc 帯域}}