리눅스 트래픽 제한걸기 (tc 명령어) 가 잘 되지 않습니다.
안녕하세요, CentOS 5.3 (커널 2.6.27.29) 에서.
tc 라는 명령어를 이용하여 트래픽 제한을 걸고자 합니다.
현재 처음에 설정한 명령은.
tc qdisc add dev $DEV root handle 1: htb default 30
tc class add dev $DEV parent 1: classid 1:1 htb rate $DOWNLOAD
tc class add dev $DEV parent 1: classid 1:2 htb rate $UPLOAD
tc filter add dev $DEV protocol ip parent 1:0 prio 1 u32 match ip dst $IP/32 flowid 1:1
tc filter add dev $DEV protocol ip parent 1:0 prio 1 u32 match ip src $IP/32 flowid 1:2
(각각 $DEV, $DOWNLOAD, $UPLOAD, $IP 는 변수이며, 값이 설정 됨)
위와 같이 제한을 걸었더니, download는 제한이 잘 되나 , upload는 제한이 되지 않고 있습니다.
그래서, priority 값도 바꿔보고, src의 IP를 0.0.0.0/0 으로도 바꿔보고,
class를 add 할때 ceil 과 burst 값들을 지정 해 보기도 하고,
class 밑에 qdisc를 하나 더 만들어 (ex, 1:1 class 의 qdisc는 1:10) 거기에 handle을 걸고 해 보기도 하였으나.
업로드는 계속 제한이 걸리지 않고 있습니다.
구글 에서 이것 저것 찾아보고 해 보아도, 잘 되지 않습니다.
어떻게 하면 업로드도 제한을 걸 수 있을까요?
아시는분은 답변 부탁 드리겠습니다.
일단 제한은 ceil을
일단 제한은 ceil을 사용하시는게 맞습니다. rate는 보장에 가깝습니다. ceil은 한계에 가깝고요.
만약 실제 트래픽의 합이 한계 트래펵을 넘어선다면, rate 비율로 나누게 됩니다만, 그게 아니라면 ceil로 각 트래픽을 제한하게 됩니다.
ceil 을 사용했을때 제대로 제한이 안된 이유는 잘 모르겠습니다.
언제나 삽질 - http://tisphie.net/typo/
프로그래밍 언어 개발 - http://langdev.net
언제나 삽질 - http://tisphie.net/typo/
프로그래밍 언어 개발 - http://langdev.net
제가 알기로는
tc를 이용한 속도제한은
서버 -> 클라이언트 방향의 속도제한은 잘되지만
그 반대인 클라이언트 -> 서버 로의 속도제한은 안되는걸로 알고 있습니다..
http://kldp.org/node/59454
( tc를 통해 제어하는 트래픽 셰이핑은 내보내는 트래픽에만 적용되기 때문입니다. )
가장 현실적인 방법은 IMQ라는걸 설치하는건데..
http://www.linuximq.net/faq.html 이 사이트를 보면, Kernel Recompile 이 필요한거 같습니다.(저는 무서워서 못해봤습니다 ㅋㅋ, 근데 http://kldp.org/node/59454 를 보면 분명 성공하신분이 있으니까 믿고 해볼만하다고 생각합니다)
그렇네요. ingress
그렇네요. ingress 속도제한은 별개라는걸 깜빡했습니다.
저도 예전에 IMQ 인터페이스 만들어서 했었고, 그럭저럭 잘 돌아갔던걸로 기억합니다.
언제나 삽질 - http://tisphie.net/typo/
프로그래밍 언어 개발 - http://langdev.net
언제나 삽질 - http://tisphie.net/typo/
프로그래밍 언어 개발 - http://langdev.net
두분 모두 친절한 답변 감사 드립니다.
두분 모두 친절한 답변 감사 드립니다.
제가 지금 외부에 나와 있는 관계로 바로 테스트를 해보지 못하고 있습니다.
주말이 지난 후 커널 재 컴파일을 해 보고
테스트를 해 보도록 하겠습니다.
감사합니다~
내용 추가
http://mrain7.egloos.com/2534849 를 참고하시면, 아래와 같은 내용이 있네요..
Device Drivers → Network device support → Intermediate Functional Block support
과거의 IMQ는 동작은 잘하지만 잘못된 방법으로 구현된 것이라고 해서 리눅스 2.6.19커널 이후 부터는 IFB가 지원되기 시작했다. IMQ와 IFB는 공히 ingress traffic에 대하여 traffic shaping 기능을 동일하게 사용할 수 있게 해주는 일종의 dummy device를 제공하는 모듈이다.
---------------------------------------------------------------
사용해 보지는 않았지만.. 2.6.19커널이후라 하면.. 최신기술같네요...
---------------------------------------------------------------
참고 : http://loveyuna.egloos.com/2119539 (약간의 문제도 있음)
참고 : http://www.linuxfoundation.org/collaborate/workgroups/networking/ifb
음..
갑자기 다른 일이 막 생겨버려서
테스트를 잠시 미루어여 될 것 같네요..
바쁜 일이 끝난 후 해 보아야 할것 같습니다.
좋은 말씀 감사 합니다!
댓글 달기