====== 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 帯域}}