hwkim3330의 블로그

View the Project on GitHub hwkim3330/blog

CBS 시험 전체 절차 정리 (마크다운 버전)

목표


네트워크 주소 (링크-로컬)

장치 인터페이스 IP/넷마스크
PC enp9s0 169.254.13.30/16
보드 end0 169.254.13.31/16

1 PC 측 스크립트 pc_recv_capture.sh

cat <<'EOF' > pc_recv_capture.sh
#!/bin/sh
IF=enp9s0
PC_IP=169.254.13.30
BOARD_IP=169.254.13.31

# IP 설정
sudo ip addr flush dev $IF
sudo ip addr add ${PC_IP}/16 dev $IF
sudo ip link set $IF up

# pcap 캡처 시작
CAP="$HOME/cbs_recv_$(date +%Y%m%d_%H%M%S).pcap"
sudo tcpdump -i $IF udp and \(port 6001 or port 6002\) -w $CAP &
TCPDUMP_PID=$!

# iperf3 서버 2개
iperf3 -s -p 6001 -i 1 &
iperf3 -s -p 6002 -i 1 &
IPERF_PIDS="$!"

# 45 초 뒤 종료(보드 40 s 전송 예정)
sleep 45
kill $IPERF_PIDS
sudo kill $TCPDUMP_PID
echo "=== pcap saved to $CAP ==="
EOF

chmod +x pc_recv_capture.sh

2 보드 측 스크립트 board_send_cbs.sh

cat <<'EOF' > board_send_cbs.sh
#!/bin/sh
IF=end0
BOARD_IP=169.254.13.31
PC_IP=169.254.13.30

######## 0. IP 설정 ########
ip addr flush dev $IF
ip addr add ${BOARD_IP}/16 dev $IF
ip link set $IF up

######## 1. MQPRIO (메뉴얼 맵) ########
tc qdisc del dev $IF root 2>/dev/null
tc qdisc add dev $IF root handle 1: mqprio \
    hw 0 num_tc 5 \
    map 1 1 2 3 4 \
    queues 1@0 1@1 1@2 1@3 1@4

######## 2. CBS ─ TC2 20 Mb/s, TC3 10 Mb/s ########
tc qdisc replace dev $IF parent 1:2 cbs \
    idleslope 20000  sendslope -980000 \
    hicredit 2147483647 locredit -2147483648 offload 1
tc qdisc replace dev $IF parent 1:3 cbs \
    idleslope 10000  sendslope -990000 \
    hicredit 2147483647 locredit -2147483648 offload 1

######## 3. clsact + flower : 포트 → SKB prio ########
tc qdisc add dev $IF clsact
tc filter add dev $IF egress protocol ip prio 10 flower ip_proto udp dst_port 6001 \
    action skbedit priority 2
tc filter add dev $IF egress protocol ip prio 10 flower ip_proto udp dst_port 6002 \
    action skbedit priority 3

######## 4. UDP 100 Mb/s × 2 스트림 송신 ########
iperf3 -c ${PC_IP} -p 6001 -u -b 100M -l 1470 -t 40 -i 0 -f m &
iperf3 -c ${PC_IP} -p 6002 -u -b 100M -l 1470 -t 40 -i 0 -f m &
wait
echo "=== 전송 완료. 'tc -s qdisc show dev $IF' 로 드롭 확인 ==="
EOF

chmod +x board_send_cbs.sh

3 실행 순서

# 1) PC 터미널
./pc_recv_capture.sh   # pcap 캡처 + iperf 서버 대기

# 2) 보드 터미널 (sudo 필요)
./board_send_cbs.sh    # CBS 설정 + 두 스트림 송신

4 검증 포인트

측정 기대
PC 수신 속도 6001 ≈ 20 Mb/s, 6002 ≈ 10 Mb/s
보드 qdisc tc -s qdisc show dev end0 → TC2·TC3 drops 증가
pcap 분석 Wireshark → 초당 비트레이트 그래프에서 20 M / 10 M 한도 확인

트러블슈팅 빠른 체크리스트

현상 점검
속도가 제한되지 않음 flower 필터 → SKB prio 매핑 실패? tc filter show dev end0 egress 확인
offload failed 오류 queue 0 에 CBS 걸었는지, 커널 ≥ 5.15 인지 확인
링크 Down ethtool end0 / ethtool enp9s0 로 Link detected 여부 확인

이 문서대로 따라 하면 메뉴얼 그대로의 CQAV 시험(TC2 20 Mb/s + TC3 10 Mb/s) 결과를 손쉽게 재현할 수 있습니다.