tbf의 버킷 크기


11

Linux의 토큰 버킷 필터 (tbf) 에 대해 여러 번 읽었 지만 여전히 수치 burstlatency매개 변수를 계산하는 방법을 완전히 이해하지 못합니다.

합리적인 대기 시간이 약 50ms라고 가정합니다. 좋습니다.하지만 버스트에는 어떤 가치가 있습니까?

맨 페이지는 다음과 같이 말합니다.

후자의 계산은 버킷의 크기, 속도 및 가능한 경우 최고 속도 (설정된 경우)를 고려합니다. 이 두 매개 변수는 상호 배타적입니다.

그렇다면 대기 시간은 버킷 및 필터와 어떤 관련이 있습니까? 계산할 공식이 있습니까? 아니면 단순히 "OK, X 바이트의 버스트와 Y 초의 대기 시간이 나에게 좋을 것"입니까?


1
이것을 명확하지 않은 사람은 모두 tbfLinux 트래픽 제어 프레임 워크의 일부입니다. man tbf또는 man tc-tbf문서를 가지고해야한다.
derobert

1
편집 결과, 개념적으로 토큰 버킷 필터에 대한 설명이 필요한 것 같습니다. 컴퓨터 앞에 다시 들어 오면 내 답변에 답변을 추가하겠습니다 (휴대 전화로 작성).
derobert

개념 설명에 마지막으로 추가됨
derobert

답변:


16

맨 페이지에서 유일한 제한 burst은 구성된 속도를 허용하기에 충분히 높아야한다는 것입니다. 속도 / HZ 이상이어야합니다. HZ는 커널 구성 매개 변수입니다. 커널 설정을 확인하여 시스템에 무엇이 있는지 알아낼 수 있습니다. 예를 들어 데비안에서는 다음을 수행 할 수 있습니다.

$ egrep '^CONFIG_HZ_[0-9]+' /boot/config-`uname -r`
CONFIG_HZ_250=y

따라서 시스템의 HZ는 250입니다. 10mbps의 속도를 달성하려면 burst최소 10,000,000 비트 / 초 ÷ 250Hz = 40,000 비트 = 5000 바이트가 필요합니다. 맨 페이지에서 더 높은 값은 HZ = 100이 기본값 일 때의 값입니다.

그러나이 외에도 burst정책 도구이기도합니다. 또한 나중에 사용할 수 있도록 더 적은 대역폭을 사용하여 "저장"할 수있는 범위를 구성합니다. 여기서 한 가지 일반적인 점은 작은 다운로드 (예 : 웹 페이지)를 매우 빠르게 진행하면서 큰 다운로드를 제한 할 수 있다는 것입니다. burst작은 다운로드로 간주되는 크기 로 늘리면 됩니다. (그러나 종종 htb와 같은 클래스 풀 qdisc로 전환하여 다른 트래픽 유형을 분류 할 수 있습니다.)

따라서 원하는 버스트를 달성 할 수있을 정도로 버스트를 적어도 크게 구성하십시오 rate. 그 외에도 달성하려는 목표에 따라 추가로 증가시킬 수 있습니다.

토큰 버킷 필터의 개념적 모델

토큰 버킷 필터

"버킷"은 은유 적 객체입니다. 주요 속성은 토큰을 보유 할 수 있고 보유 할 수있는 토큰의 수가 제한되어 있다는 것입니다. 실제 버킷). 버킷의 크기를이라고 burst합니다.

실제로 패킷을 네트워크로 전송하려면 해당 패킷은 크기가 바이트 또는 mpu그보다 큰 토큰을 가져와야합니다 .

토큰을 기다리는 패킷 라인이 있거나 대기열에있을 수 있습니다. 버킷이 비어 있거나 패킷 크기보다 적은 수의 토큰이있는 경우 발생합니다. 버킷 앞의 보도에는 공간이 너무 많으며 공간 크기 (바이트)는로 직접 설정됩니다 limit. 또는, latency이상적인 세계에서는 계산을 간접적으로 설정할 수 있습니다 ( rate× 는 계산 latency).

커널은 필터링 된 인터페이스로 패킷을 보내려고 할 때 패킷을 줄의 끝에 배치하려고 시도합니다. 보도에 공간이 없으면 보도의 끝이 바닥이없는 구덩이이고 커널이 패킷을 삭제하기 때문에 패킷에 대해 불행합니다.

마지막 조각은 모든 틱마다 버킷에 rate/ HZ토큰을 추가하는 토큰 제작 기계입니다 . (따라서 버킷이 최소한이 크기 여야합니다. 그렇지 않으면 새로 채굴 된 토큰 중 일부가 즉시 버려집니다).


나는 버스트가 반대라고 생각했다. 당신은 잠시 동안의 속도를 능가하고 나중에 평균 속도에 도달하기 위해 더 낮은 속도로 보상받을 수 있다고 생각했다.
sebelk

@sebelk RTFS가 없으면 확실하지 않지만 현재 tbf 이상에서 실행중인 인터페이스에 tbf가 추가 된 경우를 제외하고는 동일한 결과를 얻을 수 있습니다 rate. 아니면, 양동이가 가득 차 있다고 말할 수
있듯이

@sebelk : 사실이기도합니다. 버킷이 1000 바이트 (버스트 크기)이고 토큰 속도가 10 바이트 인 경우를 가정 해 보겠습니다. 둘째. 따라서 100 초 동안 패킷이 도착하지 않으면 버킷이 채워집니다. 그러면 도착한 다음 1000 바이트의 패킷이 대기하지 않고 즉시 전송됩니다. 토큰 생성 속도보다 높을 수있는 데이터 속도의 버스트
Bjarke Freund-Hansen

5

derobert 's를 보완하는 또 다른 대답.

첫째, 최신 인텔 CPU에서 매뉴얼이 오래되었습니다. 최신 CPU에는 고해상도 타이머가 있으며 최신 Linux는 틱이 적습니다. 문자 그대로 타이머 틱이 없음을 의미합니다. 따라서 버킷을 하나의 타이머에 넣을 수있을만큼 큰 버킷을 만드는 모든 의견은 관련이 없습니다. 실제로 버킷 비유는 사용자가 타이머 세분성 및 전송 속도 간의 상호 작용을 이해하는 데 도움을주기위한 것입니다. Linux는 최신 하드웨어에 나노초 타이머를 가지고 있으므로 유용성을 잃습니다.

TBF의 경우 버스트 매개 변수는 속도 제한 ( rate로 지정 )이 시작 되기 전에 무제한 속도로 전송 될 수있는 바이트 수 입니다. 속도 제한이 다시 버스트하는 유일한 방법으로 시작되면 전송을 해당 속도 미만으로 제한하는 것입니다. .

예를 들어, tbf 버스트 매개 변수가 10K 바이트이고 tbf 속도 매개 변수가 2K 바이트 / 초이고 현재 속도가 제한되어 있습니다 (즉, 버스트가 소진되어 2kbps로 전송하는 것으로 제한됨). 10 초 동안 1Kbps로 전송하는 속도를 자발적으로 줄이면 10K 바이트 버스트 허용량이 다시 누적됩니다 (= (2000 [bytes / sec]-1000 [bytes / sec]) * 10 sec). tbf를 사용하면 버스트 매개 변수 보다 더 많이 누적 할 수 없으므로 1kbps 아래로 10 초 이상 유지해도 효과가 없습니다 .

완전히 지출을 중단하면 버스트 수당을 다시 5 초 (= 100000 [바이트] / 2000 [바이트 / 초])로 다시 얻게됩니다.

버스트 허용 한도를 다시 사용하지 않아도 누적 된만큼 사용할 수 있습니다.

이것을 보는 또 다른 방법은 다음과 같습니다. 버스트 바이트를 무제한 속도 로 보낼 수 있으며 , 그 후에 장기 평균 속도가 rate를 초과 할 수 없습니다 . 그러나 장기 평균이므로 속도 이하 떨어지면 최고 속도로 전송하여 따라 잡을 수 있지만 최대 버스트 바이트 동안 만 ​​전송이 가능합니다. 당신이 따라 잡을 수 없습니다).

다른 주름은 TBF 에 이러한 속도 제한 기 중 두 개가 있으며 트래픽이 두 가지를 모두 통과해야한다는 것입니다. 두 번째 매개 변수에서는 버스트 매개 변수를 mtu 라고 하고 속도를 peakrate 라고 합니다. 첫 번째 버스트가 버스트를 보낼 수있는 속도를 제한하기 위해이 두 번째 것을 사용해야합니다. 이 두 번째 것을 사용하는 것은 선택 사항이며, 사용하지 않으면 버스트가 장치 속도로 전송됩니다.

마지막으로, tbf에는 limit 매개 변수가 있습니다. 프로그램이 지속적으로 rate 보다 빠르게 전송하면 패킷이 대기열에 쌓입니다. 커널 메모리는 무한하지 않으므로 limit 은 커널이 패킷을 삭제하기 전에 몇 바이트를 만들 수 있는지를 말합니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.