hwkim3330의 블로그

View the Project on GitHub hwkim3330/blog

네, 아주 정확하고 중요한 점을 짚어주셨습니다. 그 점을 고려하지 않으면 테스트가 제대로 진행되지 않을 수 있습니다. 사용자께서 GoldVIP 보드의 하드웨어 아키텍처, 특히 SJA1110 스위치 칩의 역할을 정확히 이해하고 계십니다.

제가 이전에 제시한 계획은 일반적인 리눅스 시스템을 가정한 것이었고, 이제 S32G의 특수한 하드웨어 구조를 반영하여 계획을 수정하고 구체화해야 합니다.

S32G 포트 구성의 핵심: Linux Stack vs. Switch Hardware

S32G 보드의 네트워크 포트는 크게 두 종류로 나뉩니다.

  1. GMAC (CPU 직접 제어 포트):
    • 이 포트(eth0 또는 end0으로 표시됨)는 CPU의 이더넷 컨트롤러(GMAC)에 비교적 직접 연결되어 있습니다.
    • 이 포트로 들어온 트래픽은 리눅스 커널의 네트워크 스택을 전부 거치게 됩니다.
    • 따라서 이 포트에 tc 명령어로 CBS 규칙을 적용하면, 이는 리눅스 커널(소프트웨어)이 직접 트래픽 쉐이핑을 수행하는 것을 의미합니다.
    • 장점: 리눅스 표준 기능을 테스트하기에 가장 확실하고 간단한 방법입니다.
    • 단점: 하드웨어 가속/오프로딩의 성능을 측정하는 것이 아닙니다. CPU 사용량이 높아집니다.
  2. PFE/스위치 포트 (SJA1110 스위치 칩 제어):
    • 나머지 대부분의 물리적 포트 (RDB2 보드 기준 P2A, P2B, P4, P5 등)는 SJA1110 이더넷 스위치 칩에 연결되어 있습니다.
    • 이 포트 간의 트래픽은 스위치 칩 내부에서 하드웨어적으로 처리될 수 있으며, 리눅스 커널 스택을 전혀 거치지 않을 수도 있습니다. (이를 “Fast Path” 또는 “Hardware Offloading”이라고 합니다)
    • 이 포트에 CBS를 적용하려면, tc 명령어가 SJA1110 스위치 칩의 하드웨어 CBS 기능을 직접 설정할 수 있어야 합니다. 매뉴얼에 나온 offload 1 옵션이 바로 이 기능을 의미합니다.

이제 두 가지 시나리오를 모두 테스트하여 소프트웨어 CBS와 하드웨어 오프로딩 CBS의 성능을 모두 평가하는 계획을 세우겠습니다.


CBS 시험 평가를 위한 수정된 종합 계획

Plan A: 리눅스 커널 CBS 기능 직접 테스트 (GMAC 포트 활용)

먼저 가장 확실하게 동작을 확인할 수 있는 GMAC 포트를 이용해 테스트 방법론 자체를 검증합니다.

  1. 포트 구성:
    • PC 1 <–> S32G GMAC 포트 (eth0) <–> PC 2
    • 두 대의 PC를 S32G 보드의 GMAC 포트를 통해 서로 연결하여, S32G 보드가 중간에서 라우터/브릿지 역할을 하도록 구성합니다. (만약 PC가 한 대라면, 보드의 다른 포트와 루프백 구성을 할 수도 있지만, 두 대의 PC를 쓰는 것이 명확합니다.)
  2. S32G 보드 설정:
    • eth0 인터페이스에 IP를 설정합니다.
    • 앞서 계획한 대로 eth0 인터페이스에 mqprio 및 CBS tc 규칙을 적용합니다. 이 경우 offload 옵션은 빼거나 hw 0 으로 설정하여 소프트웨어 처리를 명시합니다.
      # MQPrio Qdisc 설정
      tc qdisc add dev eth0 root handle 1: mqprio num_tc 5 ...
              
      # CBS Qdisc 설정 (offload 없음)
      tc qdisc replace dev eth0 parent 1:2 cbs idleslope 10000 sendslope -990000 ...
      tc qdisc replace dev eth0 parent 1:3 cbs idleslope 20000 sendslope -980000 ...
      
  3. 시험 및 결과 분석:
    • PC 1에서 PC 2로 계획했던 20Mbps 트래픽 2개를 동시에 전송합니다.
    • 보드에서 top 이나 htop 같은 명령어로 CPU 사용량을 확인합니다. 소프트웨어로 처리하므로 CPU 부하가 높게 나타날 것입니다.
    • tc -s qdisc show dev eth0 명령어로 드랍 통계를 확인하여 10Mbps 스트림의 드랍 현상을 관찰합니다.

Plan B: 하드웨어 오프로딩 CBS 테스트 (SJA1110 스위치 포트 활용)

Plan A가 성공하여 테스트 방법이 검증되면, 이제 진짜 목표인 하드웨어 오프로딩 성능을 테스트합니다.

  1. 포트 구성:
    • PC 1 <–> S32G 스위치 포트 1 (예: pfe0sl)
    • PC 2 <–> S32G 스위치 포트 2 (예: pfe1sl)
    • 두 PC를 SJA1110 스위치 칩에 연결된 다른 포트들에 각각 연결합니다.
  2. S32G 보드 설정:
    • 리눅스에서 이 두 포트(pfe0sl, pfe1sl)를 브릿지로 묶어 L2 스위치처럼 동작하게 합니다.
      ip link add name br0 type bridge
      ip link set dev pfe0sl master br0
      ip link set dev pfe1sl master br0
      ip link set dev pfe0sl up
      ip link set dev pfe1sl up
      ip link set dev br0 up
      
    • 이제 트래픽이 나가는 포트(예: pfe1sl)tc 규칙을 적용합니다. offload 1 옵션이 여기서 핵심입니다.
      # MQPrio Qdisc 설정 (offload 활성화)
      tc qdisc add dev pfe1sl root handle 1: mqprio hw 1 ... 
              
      # CBS Qdisc 설정 (offload 활성화)
      tc qdisc replace dev pfe1sl parent 1:2 cbs ... offload 1
      tc qdisc replace dev pfe1sl parent 1:3 cbs ... offload 1
      
      • 중요: 이 명령이 성공적으로 실행된다면, 커널의 sja1110 드라이버가 tc 명령을 해석하여 스위치 칩의 하드웨어 레지스터를 직접 설정했다는 의미입니다. 만약 드라이버가 이 기능을 지원하지 않으면 “Operation not supported” 같은 에러가 발생할 것입니다.
  3. 시험 및 결과 분석:
    • PC 1에서 PC 2로 동일한 트래픽을 전송합니다.
    • 보드에서 CPU 사용량을 다시 확인합니다. 트래픽 쉐이핑이 하드웨어(SJA1110)에서 처리되므로 CPU 부하가 Plan A에 비해 현저히 낮아야 합니다.
    • PC 2에서 수신되는 트래픽의 양을 측정하여 10Mbps 스트림이 실제로 제한되었는지 확인합니다. 하드웨어에서 직접 드랍이 일어나므로 tc -s 통계에는 잡히지 않을 수 있습니다. 최종 수신율을 보는 것이 더 정확할 수 있습니다.

최종 실행 계획

  1. [1단계] 현재 GoldVIP 이미지에서 Entware를 이용해 iproute2 (tc 포함)와 iperf3를 설치합니다.
  2. [2단계] Plan A를 먼저 수행합니다. GMAC 포트(eth0)를 사용하여 리눅스 커널의 CBS 기능이 예상대로 동작하는지 (트래픽 제한, 드랍 발생) 확인합니다.
  3. [3단계] Plan B를 수행합니다. SJA1110 스위치 포트(예: pfe0sl, pfe1sl)를 브릿지로 묶고, offload 1 옵션을 포함하여 tc 규칙을 적용해 봅니다.
    • tc 명령이 성공하는지 여부가 1차 관문입니다.
    • 성공한다면, 트래픽을 흘려보내며 Plan A와 CPU 사용량을 비교하여 하드웨어 오프로딩 효과를 확인합니다.
    • 최종 수신 PC에서 대역폭이 실제로 제한되는지를 확인하여 결과를 분석합니다.

이처럼 단계적으로 접근하면, S32G의 복잡한 네트워크 구조를 이해하고 소프트웨어/하드웨어 QoS 성능을 모두 체계적으로 평가하실 수 있습니다. Plan A를 통해 테스트 방법론을 확립하고, Plan B를 통해 실제 하드웨어 성능을 측정하는 것이 핵심입니다.