콘텐츠로 이동

RBLN System Management Daemon

개요

RSMD (Rebellions System Management Daemon)는 RBLN NPU 장치를 모니터링하고 제어하기 위한 시스템 관리 데몬입니다. RSMD는 커널 드라이버 인터페이스와 고수준 관리 도구를 연결하여 장치 관리 작업을 위한 통합 gRPC 기반 API를 제공합니다.

RSMD는 온도, 전력 소비, 메모리 사용량, 클럭 주파수, 사용률을 포함한 장치 상태 메트릭의 실시간 모니터링을 지원합니다. 데몬은 netlink 소켓을 통해 커널 이벤트를 수집하고 진단 목적으로 이벤트 이력을 유지합니다. 리셋과 같은 장치 제어 작업은 gRPC 인터페이스를 통해 제공됩니다.

시스템은 대화형 장치 관리를 위한 명령줄 인터페이스(rbln-smdi)를 제공합니다. RSMD는 systemd 서비스로 동작하여 프로덕션 환경에서 여러 NPU 장치에 대한 중앙화된 관리 기능을 제공합니다.


핵심 구성 요소

rbln_daemon

rbln_daemon은 백그라운드에서 지속적으로 실행되는 핵심 서비스로, gRPC 인터페이스를 통해 장치 관리 기능을 제공합니다.

기능

데몬은 netlink 소켓을 통해 커널 이벤트를 모니터링하고 로그를 저장합니다. 온도, 전력 소비, 메모리 사용량, 클럭 주파수, 사용률을 포함한 장치 텔레메트리는 gRPC 인터페이스를 통해 제공됩니다. 리셋과 같은 장치 제어 작업은 동일한 인터페이스를 통해 처리됩니다.

특징

  • 자동 시작 및 생명주기 관리를 위한 systemd 서비스(rbln_daemon.service)로 동작
  • 클라이언트 연결을 위한 TCP(기본 포트 50051) 및 Unix 도메인 소켓 지원
  • 구성 가능한 이벤트 보존 및 자동 로테이션

설정

환경 변수로 데몬 동작을 제어합니다:

  • RBLN_SMD_PORT (기본값: 50051): gRPC 서버 TCP 포트
  • MAX_RBLN_EVENT (기본값: 1000): 장치당 저장되는 최대 이벤트 수
  • REMOVE_EVENT_NUM_AFTER_EXCEED (기본값: 500): 제한 초과 시 삭제할 이벤트 수

서비스 관리

데몬은 systemd 서비스로 실행됩니다. 서비스 상태는 다음 명령으로 확인할 수 있습니다:

sudo systemctl status rbln_daemon

로그는 systemd 저널을 통해 확인할 수 있습니다:

sudo journalctl -u rbln_daemon -f

데몬은 systemd 서비스 설정에서 --uri 옵션을 지정하여 TCP 포트 외에 Unix 도메인 소켓을 사용하도록 구성할 수 있습니다:

rbln_daemon --uri unix:///var/run/rbln.sock

이벤트 로그:

장치 이벤트는 CSV 파일 형식으로 /var/log/rebellions/rsmd_<device>.event에 저장됩니다. 이 로그에는 다음이 포함됩니다:

  • 이벤트 유형 및 소스
  • 타임스탬프 (UTC 및 커널 시간)
  • 이벤트 데이터 및 하위 값

Protobuf API

Protobuf API는 모든 RSMD 클라이언트가 사용하는 gRPC 서비스 인터페이스를 정의합니다. Protobuf 스키마(rbln_services.proto)는 언어 중립적인 인터페이스를 제공하여 Python, C++, Go, Java 등 다양한 언어의 클라이언트를 생성할 수 있게 지원합니다. 또한 엄격한 데이터 타입 정의를 통해 데이터 무결성을 보장하며, 효율적인 바이너리 압축으로 성능을 최적화합니다.

사용 가능한 서비스:

RBLNServices gRPC 서비스는 다음 RPC 메서드를 제공합니다:

메서드 설명 반환값
getDeviceList 감지된 모든 장치 목록 조회 Device 스트림
getServiceableDeviceList 작업 준비가 된 장치 목록 조회 Device 스트림
resetDevice 특정 장치 리셋 StatusMsg
resetAllDevice 시스템의 모든 장치 리셋 StatusMsg
getVersion 펌웨어, 드라이버, SMC 버전 조회 VersionInfo
getHWInfo 온도 및 전력 소비 조회 HWInfo
getMemoryInfo 전체 및 사용 중인 메모리 조회 MemoryInfo
getClockInfo 장치 클럭 주파수 조회 ClockInfo
getEventInfo 커널에서 하드웨어 이벤트 조회 EventInfo 스트림
getTotalInfo 종합 장치 정보 조회 DeviceInfo 스트림
getUtilization NPU 사용률 백분율 조회 UtilInfo

메시지 타입:

주요 메시지 타입:

  • Device: 장치 식별자 (이름, UUID, PCI 버스 ID, 장치 ID)
  • DeviceInfo: 완전한 장치 상태 (메모리, 온도, 전력, 버전, 사용률, 상태)
  • HWInfo: 하드웨어 텔레메트리 (온도: 밀리-섭씨, 전력: 마이크로-와트)
  • MemoryInfo: 메모리 사용량 (GB 단위의 전체 및 사용량)
  • ClockInfo: CP, DNC, Bus, SHM, DRAM 클럭 주파수 (MHz)
  • EventInfo: 타임스탬프가 포함된 커널 보고 이벤트
  • VersionInfo: 펌웨어, 드라이버, SMC 버전
  • UtilInfo: 장치 사용률 백분율

프로토콜 정의

프로토콜 버퍼 정의 파일(rbln_services.proto)은 일반적으로 /opt/rebellions/etc/ 또는 유사한 시스템 위치에 설치됩니다. 클라이언트 애플리케이션은 이 파일을 사용하여 데몬과의 gRPC 통신을 위한 언어별 바인딩을 생성합니다.


rbln-smdi

rbln-smdi 명령줄 인터페이스는 RSMD 기능에 대한 대화형 접근을 제공합니다. 이 도구는 사람이 읽기 쉬운 결과를 위한 포맷된 테이블 출력과 자동화 및 스크립팅을 위한 선택적 JSON 출력을 제공합니다. CLI는 다른 호스트에서 실행 중인 데몬 인스턴스에 대한 원격 연결을 지원합니다.

공통 옵션

모든 명령은 다음 전역 옵션을 지원합니다:

  • --ip <주소>: gRPC 서버 IP (기본값: localhost)
  • --port <번호>: gRPC 서버 포트 (기본값: 50051)
  • --jsons: 테이블 대신 JSON 형식으로 출력

CLI 예제

요약

감지된 모든 장치(로컬/원격)를 나열하며 자동화를 위한 JSON 출력을 지원합니다.

명령어

명령어 (로컬)
$ rbln-smdi get list
명령어 (원격)
$ rbln-smdi get list --ip 192.168.1.100 --port 50051
명령어 (JSON)
$ rbln-smdi get list --jsons

출력 (예시)

장치 목록 (예시)
Rebellions Device List

+-----+--------------+
| IDX | DEVICE NAME  |
+-----+--------------+
|  0  |    rbln0     |
|  1  |    rbln1     |
+-----+--------------+

요약

장치 정보를 조회합니다 (모든 장치에 대한 요약 또는 특정 장치에 대한 상세 정보). 자동화를 위한 JSON 출력을 지원합니다.

명령어

명령어 (요약)
$ rbln-smdi get all
명령어 (상세)
$ rbln-smdi get info rbln0
명령어 (JSON)
$ rbln-smdi get all --jsons

출력 (예시)

장치 정보 (예시)
Device Information

+----------+--------------------------------------+--------------+-------------+----------+------------+---------+---------+---------+----------+
| DEV NAME |                 UUID                 | TOTAL MEM(GB)| USED MEM(GB)| TEMP.(c) | Power (mW) | P-state | FW VER  | DRV VER | UTIL(%)  |
+----------+--------------------------------------+--------------+-------------+----------+------------+---------+---------+---------+----------+
|  rbln0   | 00000000-0000-0000-0000-000000000001 |     16.0     |    2.5      |  45.23   |   100.5    |    0    | 1.2.3   | 2.1.0   |   15.5   |
+----------+--------------------------------------+--------------+-------------+----------+------------+---------+---------+---------+----------+

출력 필드

출력에는 다음이 포함됩니다:

  • 장치 이름 및 UUID
  • 메모리 사용량 (GB 단위의 전체/사용량)
  • 온도 (°C)
  • 전력 소비 (mW)
  • P-state
  • 펌웨어 및 드라이버 버전
  • 사용률 (%)

요약

장치의 이벤트 이력을 출력합니다.

명령어

명령어
$ rbln-smdi get event rbln0

출력 (예시)

이벤트 정보 (예시)
Device rbln0 Event Information

+-----+----------+------------------+---------------------+--------------+-------------------+-------+
| IDX | DEV NAME |       TYPE       |      UTC TIME       | KERNEL TIME  |       DATA1       | DATA2 |
+-----+----------+------------------+---------------------+--------------+-------------------+-------+
|  0  |  rbln0   |  NO_RESPONSE     | 2024-01-15 10:30:45 | 12345.678    |     CP_EVENT      |  0x0  |
|  1  |  rbln0   | RESPONSE_REQUIRED| 2024-01-15 10:25:12 | 12300.123    | SINGLE_HARD_RESET |  0x1  |
+-----+----------+------------------+---------------------+--------------+-------------------+-------+

참고 사항

이벤트에는 다음이 표시됩니다:

  • 이벤트 유형 (예: NO_RESPONSE, RESPONSE_REQUIRED)
  • 이벤트 소스 (예: SINGLE_HARD_RESET, RSD_HARD_RESET, TDR_EVENT, CP_EVENT)
  • UTC 및 커널 타임스탬프
  • 이벤트 데이터 값

요약

특정 장치 또는 모든 장치를 리셋합니다. 원격 데몬 연결을 지원합니다.

명령어

명령어 (단일 장치)
$ rbln-smdi reset rbln0
명령어 (모든 장치)
$ rbln-smdi reset all
명령어 (원격 데몬)
$ rbln-smdi reset rbln0 --ip 192.168.1.100 --port 50051

출력 (예시)

리셋 결과 (예시)
device rbln0 reset succeeded

실패 시

리셋 결과 (실패 예시)
device rbln0 reset failed

텔레메트리 단위

RSMD는 텔레메트리 데이터에 대해 다음 단위를 사용합니다:

  • 온도: 밀리-섭씨로 표현 (1000으로 나누면 °C)
  • 전력: 마이크로-와트로 표현 (1,000,000으로 나누면 와트)
  • 메모리: GB (기가바이트)로 표현
  • 클럭: MHz (메가헤르츠)로 표현
  • 사용률: 백분율 (0-100)로 표현

CLI 도구는 자동으로 이를 사람이 읽기 쉬운 단위로 변환합니다.


권장 사항

  1. 정기 모니터링: 스케줄된 스크립트를 사용하여 장치 상태 메트릭을 지속적으로 모니터링
  2. 이벤트 보존 설정: 로깅 요구사항 및 사용 가능한 디스크 공간에 따라 MAX_RBLN_EVENT 구성
  3. 네트워크 보안: 로컬 접근에는 Unix 도메인 소켓 사용 권장; 방화벽 규칙을 통해 TCP 포트 접근 제한
  4. 오류 처리: 결과 처리 전 모든 API 응답에서 err_status 필드 확인
  5. 로그 검토: 패턴, 이상 징후 또는 잠재적 문제를 식별하기 위해 주기적으로 이벤트 로그 검토

참고 자료

  • gRPC 정의: 프로토콜 버퍼 정의 파일(rbln_services.proto)은 일반적으로 /opt/rebellions/etc/ 또는 시스템 설정 디렉터리에 위치합니다
  • Systemd 서비스: 서비스 유닛 파일은 /etc/systemd/system/rbln_daemon.service에 설치됩니다