로 대역폭을 제한 tc
하고로 결과를 확인 하려고합니다 iperf
. 나는 이렇게 시작했다 :
# iperf -c 192.168.2.1
------------------------------------------------------------
Client connecting to 192.168.2.1, TCP port 5001
TCP window size: 23.5 KByte (default)
------------------------------------------------------------
[ 3] local 192.168.2.7 port 35213 connected with 192.168.2.1 port 5001
[ ID] Interval Transfer Bandwidth
[ 3] 0.0-10.0 sec 830 MBytes 696 Mbits/sec
두 인스턴스는 이더넷을 통해 직접 연결됩니다.
그런 다음 htb
qdisc
대역폭을 1mbit / sec로 제한하기 위해 하나의 기본 클래스로 설정했습니다 .
# tc qdisc add dev bond0 root handle 1: htb default 12
# tc class add dev bond0 parent 1: classid 1:12 htb rate 1mbit
그러나 나는 내가 기대하는 것을 얻지 못한다.
# iperf -c 192.168.2.1
------------------------------------------------------------
Client connecting to 192.168.2.1, TCP port 5001
TCP window size: 23.5 KByte (default)
------------------------------------------------------------
[ 3] local 192.168.2.7 port 35217 connected with 192.168.2.1 port 5001
[ ID] Interval Transfer Bandwidth
[ 3] 0.0-12.8 sec 768 KBytes 491 Kbits/sec
속도를 두 배로 늘리면 측정 된 대역폭이 변경되지 않습니다. 내가 무엇을 놓치고 있습니까? 측정 된 대역폭이 rate
파라미터 의 1mbit에 해당하지 않는 이유는 무엇 입니까? 대역폭을 정확한 속도로 제한하기 위해 어떤 매개 변수를 설정해야합니까?
그러나이 man
페이지에는 이 작업을 위해 선택 tbf
해야한다고되어 있습니다 qdisc
.
토큰 버킷 필터는 트래픽을 정확하게 구성된 속도로 느리게하는 데 적합합니다. 큰 대역폭으로 잘 확장됩니다.
tbf
매개 변수가 필요합니다 rate
, burst
그리고 ( limit
| latency
). 따라서 가용 대역폭에 어떻게 burst
( limit
| latency
) 영향을 미치는지 이해하지 않고 다음을 시도했습니다 .
# tc qdisc add dev bond0 root tbf rate 1mbit limit 10k burst 10k
이것은 113Kbits / sec의 측정 된 대역폭을 얻었습니다. 이러한 매개 변수를 mtu
가지고 놀아도 값을 추가하는 것이 크게 바뀌는 것을 알 때까지 크게 바뀌지 않았습니다 .
# tc qdisc add dev bond0 root tbf rate 1mbit limit 10k burst 10k mtu 5000
측정 된 대역폭은 1.00Mbits / sec입니다.
대역폭을 정확한 속도로 제한하기 위해 어떤 매개 변수를 설정해야합니까?
이를 위해 큐잉 htb
또는 tbf
큐잉 징계를 사용해야 합니까?
편집 :
이러한 리소스를 바탕으로 몇 가지 테스트를 수행했습니다.
- https://help.ubuntu.com/community/UbuntuBonding
- https://help.ubuntu.com/community/LinkAggregation
- /usr/share/doc/ifenslave-2.6/README.Debian.gz http://lartc.org/
다음 설정을 시도했습니다.
실제 머신에서
/etc/network/interfaces
:
auto lo
iface lo inet loopback
auto br0
iface br0 inet dhcp
bridge_ports eth0
로 측정 iperf
:
# tc qdisc add dev eth0 root handle 1: htb default 12
# tc class add dev eth0 parent 1: classid 1:12 htb rate 1mbit
# iperf -c 192.168.2.1
------------------------------------------------------------
Client connecting to 192.168.2.1, TCP port 5001
TCP window size: 23.5 KByte (default)
------------------------------------------------------------
[ 3] local 192.168.2.4 port 51804 connected with 192.168.2.1 port 5001
[ ID] Interval Transfer Bandwidth
[ 3] 0.0-11.9 sec 1.62 MBytes 1.14 Mbits/sec
iperf
서버가 다른 대역폭을 계산 한 반면 :
[ 4] local 192.168.2.1 port 5001 connected with 192.168.2.4 port 51804
[ 4] 0.0-13.7 sec 1.62 MBytes 993 Kbits/sec
본딩이없는 가상 머신
/etc/network/interfaces
:
auto lo
iface lo inet loopback
auto eth0
iface eth0 inet dhcp
로 측정 iperf
:
# tc qdisc add dev eth0 root handle 1: htb default 12
# tc class add dev eth0 parent 1: classid 1:12 htb rate 1mbit
# iperf -c 192.168.2.1
------------------------------------------------------------
Client connecting to 192.168.2.1, TCP port 5001
TCP window size: 23.5 KByte (default)
------------------------------------------------------------
[ 3] local 192.168.2.7 port 34347 connected with 192.168.2.1 port 5001
[ ID] Interval Transfer Bandwidth
[ 3] 0.0-11.3 sec 1.62 MBytes 1.21 Mbits/sec
iperf
서버가 다른 대역폭을 계산 한 반면 :
[ 4] local 192.168.2.1 port 5001 connected with 192.168.2.7 port 34347
[ 4] 0.0-14.0 sec 1.62 MBytes 972 Kbits/sec
본딩이있는 가상 시스템 (tc가 eth0에 구성됨)
/etc/network/interfaces
:
auto lo
iface lo inet loopback
auto eth0
allow-bond0 eth0
iface eth0 inet manual
bond-master bond0
bond-primary eth0 eth1
auto eth1
allow-bond0 eth1
iface eth1 inet manual
bond-master bond0
bond-primary eth0 eth1
auto bond0
iface bond0 inet dhcp
bond-slaves none
bond-mode 1
# bond-arp-interval 250
# bond-arp-ip-target 192.168.2.1
# bond-arp-validate 3
로 측정 iperf
:
# tc qdisc add dev eth0 root handle 1: htb default 12
# tc class add dev eth0 parent 1: classid 1:12 htb rate 1mbit
# iperf -c 192.168.2.1
------------------------------------------------------------
Client connecting to 192.168.2.1, TCP port 5001
TCP window size: 23.5 KByte (default)
------------------------------------------------------------
[ 3] local 192.168.2.9 port 49054 connected with 192.168.2.1 port 5001
[ ID] Interval Transfer Bandwidth
[ 3] 0.0-11.9 sec 1.62 MBytes 1.14 Mbits/sec
iperf
서버가 다른 대역폭을 계산 한 반면 :
[ 4] local 192.168.2.1 port 5001 connected with 192.168.2.9 port 49054
[ 4] 0.0-14.0 sec 1.62 MBytes 972 Kbits/sec
본딩이있는 가상 시스템에서 (tc는 bond0에 구성됨)
/etc/network/interfaces
:
auto lo
iface lo inet loopback
auto eth0
allow-bond0 eth0
iface eth0 inet manual
bond-master bond0
bond-primary eth0 eth1
auto eth1
allow-bond0 eth1
iface eth1 inet manual
bond-master bond0
bond-primary eth0 eth1
auto bond0
iface bond0 inet dhcp
bond-slaves none
bond-mode 1
# bond-arp-interval 250
# bond-arp-ip-target 192.168.2.1
# bond-arp-validate 3
로 측정 iperf
:
# tc qdisc add dev bond0 root handle 1: htb default 12
# tc class add dev bond0 parent 1: classid 1:12 htb rate 1mbit
# iperf -c 192.168.2.1
------------------------------------------------------------
Client connecting to 192.168.2.1, TCP port 5001
TCP window size: 23.5 KByte (default)
------------------------------------------------------------
[ 3] local 192.168.2.9 port 49055 connected with 192.168.2.1 port 5001
[ ID] Interval Transfer Bandwidth
[ 3] 0.0-13.3 sec 768 KBytes 475 Kbits/sec
iperf
서버가 다른 대역폭을 계산 한 반면 :
[ 4] local 192.168.2.1 port 5001 connected with 192.168.2.9 port 49055
[ 4] 0.0-14.1 sec 768 KBytes 446 Kbits/sec
eth1
본드에서 (수동 인터페이스)를 제거해도 결과가 변경되지 않습니다 .
결론
본드 인터페이스의 트래픽 제어 가 작동하지 않거나 최소한 예상대로 작동하지 않습니다. 더 조사해야 할 것입니다.
해결 방법으로 큐잉 규칙 을 본드에 속한 인터페이스에 직접 추가 할 수 있습니다 .
tc filter
하면 패킷을 클래스에 넣는 데 사용해야한다고 생각 합니다. htb 매개 변수 중 일부를 변경해야 할 수도 있습니다 (tbf와 같이 조정). 나는 tcng
tc의 프론트 엔드 인을 살펴볼 것을 제안한다 . (이것은 빠른 포인터입니다 ...)