Linux에서 tc로 인터페이스 대역폭 제한 dev eth0

외부에 10GBe 인터페이스가 있고 내부에 본드 기가비트 이더넷 인터페이스가있는 Linux 라우터가 있습니다.

현재 2GBit / s의 예산이 있습니다. 한 달 동안이 속도를 평균 5 % 이상 초과하면 전체 10Gbit / s 용량이 청구됩니다. 달러 단위로 상당히 향상되었습니다.

따라서 10GBe 인터페이스에서 이것을 2GBit / s로 제한하고 싶습니다.

TBF 필터가 이상적 일 수 있지만이 의견이 우려됩니다.

Alpha를 제외한 모든 플랫폼에서 버스트를 최소화하면서 이상적인 1mbit / s의 일반 트래픽을 형성하여 구성된 속도로 데이터를 정확하게 전송할 수 있습니다.

TBF 또는 다른 필터를 사용하여이 속도를 인터페이스에 적용하고 어떻게 수행해야합니까? 여기에 주어진 예를 이해하지 못합니다 : Traffic Control HOWTO

특히 “예 9. 256kbit / s TBF 작성”

tc qdisc add dev eth0 handle 1:0 root dsmark indices 1 default_index 0
tc qdisc add dev eth0 handle 2:0 parent 1:0 tbf burst 20480 limit 20480 mtu 1514 rate 32000bps

256K 비트 / s 속도는 어떻게 계산됩니까? 이 예에서 32000bps = 초당 32k 바이트입니다. tc는 초당 bps = 바이트를 사용하기 때문입니다. 나는 버스트와 한계가 작동한다고 생각하지만 원하는 비율에 도달하기 위해 합리적인 숫자를 어떻게 선택하겠습니까?

이것은 실수가 아닙니다. 나는 이것을 테스트했고 256K에 가까운 속도를 냈지만 정확히는 아닙니다.


편집하다

많은 읽기 및 테스트를 수행 한 후 관련 대역폭으로 인해 TBF가 부적절하다는 결론에 도달했습니다. 어떤 설정을 시도해도 TBF가 ~ 50Mbit / s 이상의 대역폭을 제공하지 못했습니다. lartc.org/lartc.pdf에 따르면, RED 방법은 100Mbit / s 이상의 대역폭을 형성하는 것이 좋습니다.

그러나 최소값을 선택하십시오 (즉, 표시가 가능한 평균 큐 크기). 주어진 예는 다음과 같습니다.

원하는 최대 허용 가능한 기본 큐 대기 시간을 계산하여 대역폭을 곱하여 최소값을 설정해야합니다. 예를 들어, 64kbit / s ISDN 링크에서 200ms의 기본 큐잉 대기 시간을 원하므로 min을 1600 바이트로 설정합니다.

  1. 가장 적합한 기본 큐 대기 시간을 어떻게 선택 하시겠습니까? 예는 64kbit / s입니다.

  2. 2Gbit / s에 허용되는 것은 무엇입니까?



답변

  1. 트래픽 유형에 따라 적절한 대기열 대기 시간을 선택해야합니다.

    • 예를 들어, 음성 큐잉의 경우 200ms 이상이 이미 문제입니다.
    • ftp / 토런트 트래픽에 500ms 버퍼를 갖는 것은 큰 문제가 아닙니다.
  2. 대기열 대기 시간 / 전략은 인터페이스 속도가 아닌 트래픽 유형의 문제입니다. 예를 들어, VOIP는 전혀 대기하지 않아야합니다. 불행히도 tc RED 문서는 명확하지 않으므로 Juniper / Cisco 사이트에서 일부 RED 정보를 읽고 해당 지식을 tc에 적용하는 것이 좋습니다.


답변

256K 비트 / s 속도는 어떻게 계산됩니까? 이 예에서는 초당 32,000bps = [32,000] 바이트입니다.

예, 수학이 맞습니다. 256k에 가까운 숫자가 표시되면 약간 아래에있을 것입니다. 그 숫자는 어디에서 측정합니까? 브라우저의 다운로드 또는 이와 유사한 경우 패킷 헤더의 오버 헤드는 계산하지 않지만 tc모든 것을 계산합니다.


답변

필자의 경험에 따르면 qdisc TBF는 대역폭을 1Gbps로 쉽게 제한 할 수 있으므로 2Gbps로 확장 될 것으로 생각합니다. 그러나 일부 저가형 라우터 대신 작업에 실제 CPU가 필요할 수 있습니다. 4GHz i3과 같은 것이 충분할 것입니다.

같은 것을 시도하십시오

tc qdisc add dev "$DEV" root handle 1: \
  tbf rate "$UPLINK_RATE" burst "$UPLINK_BURST" latency "$TBF_LATENCY"

어디

DEV="$(ip route | grep "^default " | grep -Po "(?<=dev )[^ ]+")"
UPLINK_RATE="2000Mbit"
UPLINK_BURST="6500"
TBF_LATENCY="14ms"

대기 시간이 짧은 TBF를 사용하려면 PREEMPT 커널 (예 : Ubuntu linux-lowlatency-hwe-*패키지)을 실행해야 하거나 시스템이 해당 패키지를 모두 처리하지 못할 수 있습니다.

참조 : https://networkengineering.stackexchange.com/a/54404/36597