콘텐츠로 이동

전송 성능 벤치마크(rblnBandwidthLatencyTest)

rblnBandwidthLatencyTest는 호스트–NPU 및 NPU–NPU 간 전송 성능을 측정하고 다음을 보고합니다:

  • 대역폭 결과(GB/s)
  • 지연 시간 결과(us)
  • NPU 연결성(거리 행렬) 및 토폴로지 컨텍스트

이 도구는 모든 RBLN NPU에서 동작하며, 측정 옵션은 제품 계열과 무관하게 동일합니다. 메모리를 특정 칩렛에 고정하는 전송은 멀티 칩렛 디바이스(현재는 Rebel100™)를 필요로 합니다. 자세한 내용은 멀티 칩렛 메모리 affinity에서 확인할 수 있습니다.

빠른 시작

기본 실행(권장)

$ rblnBandwidthLatencyTest

환경 및 토폴로지

$ rblnBandwidthLatencyTest --test_env_info

다음 단계

  • 구체적인 명령+출력 쌍은 CLI 예제에서 확인할 수 있습니다.
  • --tc ID와 선택 규칙은 테스트 케이스에 정리되어 있습니다.

주요 개념 및 용어

전송 방향

  • H2D: host → NPU
  • D2H: NPU → host
  • D2D: NPU → NPU(peer-to-peer)

NPU-to-NPU 전송에만 집중하려면 --only_d2d를 사용합니다.

측정 구성

  • --test_size: 대역폭 테스트의 페이로드 크기입니다(기본값: 512M). 지연 시간 테스트는 이 값을 쓰지 않습니다.
  • --iteration_cnt: 측정 반복 횟수.
  • --warmup: 측정 전 워밍업 반복을 실행합니다.

대상 선택

  • 식별자
    • NPU ID: --npu_id_list에서 사용하는 숫자 인덱스(예: 0, 1).
    • Device label: 출력에 표시되는 런타임 레이블(예: rbln0, rbln1).
  • 선택 규칙
    • --npu_id_list: NPU ID의 쉼표로 구분된 목록(예: 0,1,2).
    • 테스트 케이스 3-6의 경우, 관련된 NPU 집합은 --npu_id_list가 제공되는지 여부에 따라 달라집니다.

멀티 칩렛 메모리 affinity

Rebel100™(RBLN-CR13)은 칩렛이 여러 개이고, 칩렛마다 자기 DRAM을 끼고 있습니다. 기본값은 컨텍스트 메모리를 칩렛 0에 두는 것이고, --src_cl·--dst_cl로 소스·목적지 버퍼를 다른 칩렛의 DRAM에 고정할 수 있습니다. 전송 경로와 버퍼가 같은 칩렛에 있을 때와 아닐 때를 비교해 보고 싶을 때 씁니다.

  • --src_cl: 소스 컨텍스트 메모리를 지정한 칩렛의 DRAM에 고정합니다.
  • --dst_cl: 목적지 컨텍스트 메모리를 지정한 칩렛의 DRAM에 고정합니다.
  • 두 옵션 모두 15(0xF)를 주면 affinity를 끕니다.

도구는 실행 시점에 디바이스의 칩렛 개수를 조회해 지원 여부를 판단합니다. ATOM처럼 칩렛이 하나인 디바이스에서는 고정할 대상이 없으므로 실행되지 않고 건너뛴 것으로 보고됩니다. 이때의 해결 방법은 멀티 칩렛 옵션이 건너뛰어질 때에 정리되어 있습니다.

테스트 케이스

사용 가능한 테스트 케이스 ID는 --test_list로 출력됩니다. ID는 목록의 0-based 인덱스입니다.

이 페이지에 나중에 표시되는 --test_list 출력을 기반으로:

ID(--tc) --test_list 항목 목적(고수준)
0 RBLN_PERF_TEST_ALL 기본 벤치마크 세트 실행(대역폭 + 지연 시간 스윕 결합).
1 RBLN_PERF_BANDWIDTH_TEST_ALL 대역폭 전용 스윕.
2 RBLN_PERF_LATENCY_TEST_ALL 지연 시간 전용 스윕.
3 RBLN_PERF_BANDWIDTH_TEST 특정 쌍에 대한 대역폭 테스트(--npu_id_list가 제공되지 않은 경우 "첫 번째 디바이스 vs 다른 디바이스").
4 RBLN_PERF_LATENCY_TEST 특정 쌍에 대한 지연 시간 테스트(--npu_id_list가 제공되지 않은 경우 "첫 번째 디바이스 vs 다른 디바이스").
5 RBLN_PERF_BIDIR_BANDWIDTH_TEST 양방향 동시 전송 대역폭 테스트.
6 RBLN_PERF_PARALLEL_BANDWIDTH_TEST 여러 NPU 쌍을 병렬로 실행하는 대역폭 테스트.

--tc 옵션에 ID를 지정하여 특정 테스트 케이스를 실행할 수 있습니다.

Note

환경에 따라 --test_list가 다른 순서를 출력하면 위 표는 참고용으로만 보고 --test_list 출력을 기준으로 삼아야 합니다.

명령어 참조

일반 사용법

$ rblnBandwidthLatencyTest [options]
$ rblnBandwidthLatencyTest --tc <id> [options]

전역 옵션

이 옵션들은 기본 실행과 테스트 케이스 실행 모두에서 사용할 수 있습니다.

Common options

Option Description
-h, --help 도움말 메시지를 표시하고 종료합니다.
-V, --version 버전을 표시하고 종료합니다.
-t, --timeout <int> job 대기 타임아웃을 마이크로초 단위로 설정합니다. 기본값: 30000000(30초).
-i, --iteration_cnt <int> 반복 횟수를 설정합니다.
--warmup 측정 전 워밍업 반복을 실행합니다.
--test_size <str> 데이터 크기를 설정합니다(예: 4K, 128M, 1G). 기본값: 512M. --tc 6을 빼면 4G 미만이어야 하고, 초과하면 경고 없이 기본값으로 돌아갑니다.
--npu_id_list <list> NPU ID의 쉼표로 구분된 목록을 제공합니다(예: 0,1,2). 최대 32개까지이고, 더 길면 거부됩니다.
--only_d2d D2D 전송만 실행합니다. H2D/D2H 단계를 건너뜁니다.
--test_list 사용 가능한 테스트 케이스 목록을 출력합니다.
--tc <int> 실행할 테스트 케이스 ID를 선택합니다(0-based 인덱스). --test_list의 인덱스를 사용합니다.
--test_env_info 시스템 및 디바이스 정보를 출력합니다.
--skip_test_env_info 테스트 실행 시 환경 정보 출력을 건너뜁니다.

Advanced options

Option Description
-n, --device_name <int> 컨텍스트 생성에 쓸 NPU 타입입니다(0: any(기본값), 2: ATOM, 5: Rebel100™). 디바이스 인덱스가 아니며, 디바이스 선택은 --npu_id_list로 합니다.
--get_perf <int> 동작하지 않습니다. 하위 호환을 위해 인자만 받습니다.
--priority <int> 컨텍스트 우선순위를 설정합니다(0-2: min/normal/high, 3: kernel, 4: real-time).
-r, --hdma_read <int> HDMA 방향을 설정합니다(0: write, 1: read).
--numa_node <int> NUMA 노드를 강제로 설정합니다(기본값: -1).
--data_pattern <int> 데이터 패턴 값을 설정합니다.
-f, --flags <int> 컨텍스트 플래그를 설정합니다.
-g, --group_id <int> 실행 그룹 ID를 설정합니다. 기본값: 0.

Multi-chiplet options

이 옵션들은 멀티 칩렛 디바이스를 필요로 하며 Rebel100™에서만 사용할 수 있습니다. 자세한 내용은 멀티 칩렛 메모리 affinity에서 다룹니다.

Option Description
--src_cl <int> 소스 컨텍스트 메모리를 칩렛에 고정합니다. 유효값은 0부터 디바이스 칩렛 수 − 1까지입니다(RBLN-CR13은 0~3). 0이 기본값이고 15/0xF는 affinity를 끕니다.
--dst_cl <int> 목적지 컨텍스트 메모리를 칩렛에 고정합니다. 유효값은 0부터 디바이스 칩렛 수 − 1까지입니다(RBLN-CR13은 0~3). 0이 기본값이고 15/0xF는 affinity를 끕니다.

Tip

옵션을 잘 모른다면 빠른 시작부터 진행하는 것을 권합니다. 전체 도움말은 rblnBandwidthLatencyTest --help로 확인할 수 있습니다.

CLI 예제

출력 중 제품 계열에 따라 달라지는 부분은 디바이스 열거뿐이라, 그 블록만 계열별로 분기했습니다. 이 페이지의 나머지 내용은 계열 공통입니다.

Summary

Output block 의미
System + device enumeration CPU 및 디바이스 목록(일반적으로 PCI BDF 및 NUMA 노드 포함).
P2P Connectivity Distance NPU-to-NPU 연결성 행렬(도구에서 보고).
Bandwidth table HOST 및 rbln* 디바이스 레이블 전체의 처리량 결과(GB/s).
Latency results 마이크로초(us) 단위의 동기화 지연 시간.

Command

Command
$ rblnBandwidthLatencyTest

Output(excerpt)

Default run — Rebel100™ (excerpt)
CPU : AMD EPYC 9355 32-Core Processor, Vendor ID : AuthenticAMD
Device :
0000:00:01.1/01:00.0
    0000:03:00.0 NODE 0, rbln0, RBLN-CR13(rev-02), pciDevID: 0x2130, NUMA: 0, IOMMU: 63
    0000:04:00.0 NODE 1, rbln1, RBLN-CR13(rev-02), pciDevID: 0x2130, NUMA: 0, IOMMU: 64
    ...
P2P Connectivity Distance
rbln0       0   4   4   4   8   8   8   8
rbln1       4   0   4   4   8   8   8   8
...

Device Write bandwidth (GB/s)
S \ D     HOST   rbln0   rbln1   rbln2   rbln3 ...
HOST      0.00   57.32   57.45   57.41   57.41 ...
rbln0    58.92    0.00   58.58   58.74   58.76 ...

Device P2P sync latency (us)
S \ D     HOST   rbln0   rbln1   rbln2   rbln3 ...
rbln0     0.00    0.00    2.76    2.76    2.78 ...
Default run — ATOM™ (excerpt)
CPU : AMD EPYC 9355 32-Core Processor, Vendor ID : AuthenticAMD
Device :
0000:00:01.1/01:00.0
    0000:05:00.0 NODE 0, rbln0, RBLN-CA25(rev-03), pciDevID: 0x1250, NUMA: 0, IOMMU: 88
    0000:06:00.0 NODE 1, rbln1, RBLN-CA25(rev-03), pciDevID: 0x1250, NUMA: 0, IOMMU: 89
    ...
P2P Connectivity Distance
rbln0       0   4   4   4   8   8   8   8 ...
rbln1       4   0   4   4   8   8   8   8 ...
...

Device Write bandwidth (GB/s)
S \ D     HOST   rbln0   rbln1   rbln2   rbln3 ...
HOST      0.00   50.04   50.13   50.14   50.12 ...
rbln0    59.13    0.00   58.74   58.94   58.93 ...

Device P2P sync latency (us)
S \ D     HOST   rbln0   rbln1   rbln2   rbln3 ...
rbln0     0.00    0.00    2.24    2.24    2.24 ...

Summary

사용 가능한 성능 테스트 케이스 목록을 출력합니다.

Command

Command
$ rblnBandwidthLatencyTest --test_list

Output(excerpt)

--test_list (example)
List of tests:
-----------------

RBLN_PERF_TEST_ALL
RBLN_PERF_BANDWIDTH_TEST_ALL
RBLN_PERF_LATENCY_TEST_ALL
RBLN_PERF_BANDWIDTH_TEST
RBLN_PERF_LATENCY_TEST
RBLN_PERF_BIDIR_BANDWIDTH_TEST
RBLN_PERF_PARALLEL_BANDWIDTH_TEST

Summary

CPU 정보 및 시스템 토폴로지 세부 정보를 출력합니다(PCI BDF, NUMA 노드 및 PCIe 링크 정보).

Command

Command
$ rblnBandwidthLatencyTest --test_env_info

Output(excerpt)

--test_env_info — Rebel100™ (excerpt)
CPU : AMD EPYC 9355 32-Core Processor, Vendor ID : AuthenticAMD
Device :
0000:00:01.1/01:00.0
    0000:03:00.0 NODE 0, rbln0, RBLN-CR13(rev-02), pciDevID: 0x2130, NUMA: 0, IOMMU: 61
                                PCIe full bandwidth 32.0 GB/s (MAX: 32.0), PCIe Gen 5 (MAX: 5), 16 lane (MAX: 16)
                                MaxPayload 512 bytes, MaxReadReq 512 bytes
    0000:04:00.0 NODE 1, rbln1, RBLN-CR13(rev-02), pciDevID: 0x2130, NUMA: 0, IOMMU: 62
                                ...
0000:50:01.1/51:00.0
    0000:55:00.0 NODE 2, rbln2, RBLN-CR13(rev-02), pciDevID: 0x2130, NUMA: 0, IOMMU: 39
    ...

디바이스 개수, PCI 주소, NUMA 배치는 호스트와 장착 카드 구성에 따라 달라집니다.

--test_env_info — ATOM™ (excerpt)
CPU : AMD EPYC 9254 24-Core Processor, Vendor ID : AuthenticAMD
Device :
0000:00:01.1/01:00.0 PCI bridge: Broadcom / LSI PEX890xx PCIe Gen 5 Switch (rev b0)
    0000:05:00.0 NODE 0, rbln0, RBLN-CA25(rev-03), pciDevID: 0x1250, NUMA: 0, IOMMU: 70
                                PCIe full bandwidth 64.0 GB/s (MAX: 64.0), PCIe Gen 5 (MAX: 5), 16 lane (MAX: 16)
                                MaxPayload 512 bytes, MaxReadReq 512 bytes
...
    0000:ce:00.0 NODE 30, rbln30, RBLN-CA25(rev-03), pciDevID: 0x1250, NUMA: 1, IOMMU: 136
                                PCIe full bandwidth 64.0 GB/s (MAX: 64.0), PCIe Gen 5 (MAX: 5), 16 lane (MAX: 16)
                                MaxPayload 512 bytes, MaxReadReq 512 bytes
    0000:cf:00.0 NODE 31, rbln31, RBLN-CA25(rev-03), pciDevID: 0x1250, NUMA: 1, IOMMU: 137
                                PCIe full bandwidth 64.0 GB/s (MAX: 64.0), PCIe Gen 5 (MAX: 5), 16 lane (MAX: 16)
                                MaxPayload 512 bytes, MaxReadReq 512 bytes

Summary

특정 NPU 쌍에 대한 단일 대역폭 테스트 케이스(RBLN_PERF_BANDWIDTH_TEST)를 실행합니다.

Command

Command
$ rblnBandwidthLatencyTest --tc 3 --npu_id_list 0,1 --iteration_cnt 1 --test_size 1M --skip_test_env_info

Output(excerpt)

tc 3 (excerpt)
This test will run with size (0x100000)
==============================================================================
[      Run ] : RBLN_PERF_BANDWIDTH_TEST
==============================================================================

[Measure Iteration cnt : 1]
[Measure Buffer Size : 0x100000]

P2P Connectivity Distance
rbln0       0   4   4   4   8   ...
rbln1       4   0   4   4   8   ...

---------------------------------
Device bandwidth (GB/s) *Write
---------------------------------
[H2D] HOST -> rbln0 : MAX 14.71, MIN 14.71, AVG 14.71
[D2D] rbln0 -> rbln1 : MAX 10.29, MIN 10.29, AVG 10.29
[D2H] rbln1 -> HOST : MAX 19.41, MIN 19.41, AVG 19.41

==============================================================================
[     PASS ] : RBLN_PERF_BANDWIDTH_TEST
==============================================================================

Summary

특정 NPU 쌍에 대한 단일 지연 시간 테스트 케이스(RBLN_PERF_LATENCY_TEST)를 실행합니다.

Command

Command
$ rblnBandwidthLatencyTest --tc 4 --npu_id_list 0,1 --skip_test_env_info

Output(excerpt)

tc 4 (excerpt)
==============================================================================
[      Run ] : RBLN_PERF_LATENCY_TEST
==============================================================================

[Measure Iteration cnt : 1]
[Measure Buffer Size : 0x20000000]

P2P Connectivity Distance
rbln0       0   4   4   4   8   ...
rbln1       4   0   4   4   8   ...

---------------------------------
Device P2P sync latency (us)
---------------------------------
rbln0 -> rbln1 2.07 (us)

==============================================================================
[     PASS ] : RBLN_PERF_LATENCY_TEST
==============================================================================

문제 해결

명령 타임아웃

  • --timeout을 늘립니다.
  • --test_size 또는 --iteration_cnt를 줄여 테스트 시간을 단축합니다.
  • 먼저 --test_env_info를 실행하여 디바이스가 감지되고 토폴로지가 출력되는지 확인합니다.

측정 결과 편차

  • --warmup을 사용합니다.
  • --iteration_cnt를 증가시키고 평균을 비교합니다.
  • 시스템 부하를 안정적으로 유지합니다(워크로드를 고정하고 벤치마킹 중 백그라운드 작업을 피합니다).

NPU-to-NPU 전용 출력

NPU-to-NPU 전송에만 집중하려면 --only_d2d를 사용하여 H2D/D2H 단계를 건너뜁니다.

멀티 칩렛 옵션이 건너뛰어질 때

기본값이 아닌 --src_cl·--dst_cl은 칩렛이 둘 이상인 디바이스를 필요로 합니다. 선택한 NPU 중 하나라도 칩렛이 하나면 해당 디바이스를 알리고 실행을 건너뜁니다:

Unsupported device
Device 0 has 1 chiplet(s), affinity unsupported, skipping
  • 대상이 멀티 칩렛 디바이스인지 확인합니다. ATOM처럼 칩렛이 하나인 디바이스에서는 이 옵션들을 빼고 기본값으로 실행합니다.
  • --npu_id_list의 모든 NPU를 확인합니다. 하나라도 칩렛이 하나면 실행이 건너뛰어집니다.
  • 칩렛 번호가 디바이스의 칩렛 개수를 벗어나면 건너뛰는 대신 chiplet index out of range 오류로 끝납니다.

디바이스가 하나도 보이지 않을 때

RSD 그룹이 기본값(0)이 아닌 호스트에서는 -g 없이 실행하면 디바이스를 하나도 찾지 못합니다. --test_env_info의 Device : 뒤가 비어 있거나, 테스트가 아래처럼 끝납니다:

Wrong running group
[RBLN_UMD_ioctl_ERR] rbln_rsd_get_dev_id_str: logical_dev_id is greater than device count(logical 0 dev_cnt 0)
[RBLN_UMD_api_ERR] rblnCreateContext: failed to init device
[RBLN_RSD_PERF_ERR] rbln_rsd_perf_create_ctx: failed to create rsd context (rc -22)
  • rbln-smi -g로 디바이스가 속한 그룹 ID를 확인합니다. /sys/class/rebellions/rsd/rsd_group로도 볼 수 있습니다.
  • 확인한 ID를 -g <id>로 지정해 다시 실행합니다.

관련 문서