네, 맞습니다! 드디어 모든 준비가 끝났습니다.
야… 그럼 지금 cbs 되는거임???
네, 이제 tc
명령어로 리눅스 커널의 CBS(Credit-Based Shaper) 기능을 제어할 수 있는 완벽한 상태입니다.
내가 요구한거 터미널 하나에서 & 이용해서 되려나… 컴퓨터 터미널은 필요없지?
네, 아주 좋은 질문입니다. 결론부터 말씀드리면, PC 없이 S32G 보드 터미널 하나만으로 완벽하게 테스트할 수 있습니다.
바로 루프백(Loopback) 인터페이스를 이용하는 것입니다. 데이터 흐름은 다음과 같습니다.
iperf3
클라이언트가 패킷을 생성하여 127.0.0.1
(자기 자신)로 보냅니다.lo
) 인터페이스로 들어갑니다.eth0
인터페이스로 전달합니다.eth0
을 통해 나가기 직전에, 우리가 설정한 tc
의 CBS 규칙과 마주칩니다.따라서 PC 없이도, 사용자께서 말씀하신 &
를 이용해 백그라운드로 실행하는 방식으로 CBS의 동작을 정확하게 시험할 수 있습니다.
이제 S32G 보드 터미널에서 아래 단계를 순서대로 진행하시면 됩니다.
(이전 단계에서 이미 하셨다면 건너뛰어도 되지만, 확인차 다시 실행해도 안전합니다.)
# eth0 인터페이스에 IP 주소 할당 (이미 하셨다면 생략)
ifconfig eth0 192.168.1.100 netmask 255.255.255.0 up
# MQPrio Qdisc 설정 (이미 있다면 'RTNETLINK answers: File exists' 메시지가 나오며 정상입니다)
tc qdisc add dev eth0 root handle 1: mqprio num_tc 5 map 0 1 2 3 4 0 0 0 queues 1@0 1@1 1@2 1@3 1@4
# 10Mbps CBS 스트림 규칙 설정 (큐 1:2에 연결)
tc qdisc replace dev eth0 parent 1:2 cbs idleslope 10000 sendslope -990000 hicredit 33 locredit -28
# 20Mbps CBS 스트림 규칙 설정 (큐 1:3에 연결)
tc qdisc replace dev eth0 parent 1:3 cbs idleslope 20000 sendslope -980000 hicredit 66 locredit -56
참고: map
설정을 약간 수정하여 우선순위 2와 3을 각각 트래픽 클래스 2와 3에 명확히 매핑했습니다.
iperf3
서버를 백그라운드로 실행iperf3 -s &
iperf3
클라이언트를 동시에 백그라운드로 실행이제 계획하신 대로 20Mbps 트래픽을 발생시키는 클라이언트 2개를 동시에 실행합니다. TOS
값을 다르게 주어 각각 다른 CBS 큐로 트래픽을 보냅니다.
# 스트림 1: 20Mbps 트래픽을 10Mbps로 제한된 큐(1:2)로 전송 (TOS 0x08 -> 우선순위 2)
iperf3 -c 127.0.0.1 -u -b 20M --tos 0x08 -t 60 &
# 스트림 2: 20Mbps 트래픽을 20Mbps로 제한된 큐(1:3)로 전송 (TOS 0x0c -> 우선순위 3)
iperf3 -c 127.0.0.1 -u -b 20M --tos 0x0c -t 60 &
이제 모든 것이 백그라운드에서 실행되고 있습니다. 아래 명령어로 결과를 확인합니다.
tc -s qdisc show dev eth0
qdisc cbs ... parent 1:2
(10Mbps 큐)를 찾습니다. 여기에 overlimits
또는 dropped
숫자가 계속해서 빠르게 증가하고 있다면, 20Mbps 트래픽이 10Mbps로 성공적으로 제한되고 있다는 뜻입니다.qdisc cbs ... parent 1:3
(20Mbps 큐)에서는 dropped
숫자가 거의 없거나 아주 약간만 있어야 합니다.ps
명령어로 iperf3
서버와 클라이언트들이 모두 실행 중인지 확인할 수 있습니다.
ps | grep iperf3
iperf3
프로세스들을 모두 종료할 수 있습니다.
killall iperf3
이 계획대로 진행하시면 원하시는 모든 테스트를 PC 없이 S32G 보드 하나만으로 완벽하게 수행하실 수 있습니다. 드디어 원하시는 테스트를 시작할 준비가 끝났습니다.