RBLN System Management Daemon¶
개요¶
RSMD(Rebellions System Management Daemon) 는 RBLN NPU 장치를 모니터링하고 제어하는 시스템 관리 데몬입니다. 커널 드라이버 인터페이스와 상위 관리 도구 사이에서 동작하며, 장치 관리 작업을 위한 통합 gRPC 기반 API를 제공합니다.
RSMD는 온도, 전력 소비, 메모리 사용량, 클럭 주파수, 사용률 등 주요 장치 상태 메트릭을 실시간으로 모니터링합니다. 또한 netlink 소켓을 통해 커널 이벤트를 수집하고, 진단을 위한 이벤트 이력과 코어덤프를 유지합니다. 리셋·RSD 그룹 관리·런타임 설정 변경과 같은 장치 제어 작업은 gRPC 인터페이스를 통해 제공됩니다.
RSMD는 대화형 장치 관리를 위한 명령줄 인터페이스인 rbln-smdi를 함께 제공합니다. systemd 서비스로 동작하여 프로덕션 환경에서 여러 NPU 장치에 대한 중앙화된 관리 기능을 제공하며, mTLS와 IP/CN 기반 접근 제어를 통해 원격 운영도 안전하게 노출할 수 있습니다.
RSMD는 두 RBLN NPU 제품 계열을 모두 지원합니다. 장치는 자신이 속한 계열을 식별 정보의 일부로 보고합니다. 릴리스별 지원 카드는 지원 매트릭스 에서 확인할 수 있습니다.
아키텍처¶
RSMD 는 데몬–클라이언트 모델을 따릅니다. 단일 rbln-smd 프로세스가 호스트의 모든 NPU 접근을 담당하고 하나의 gRPC 인터페이스로 노출하며, rbln-smdi CLI·원격 클라이언트·자동화 도구는 커널에 직접 접근하지 않고 이 인터페이스에 연결합니다. 접근을 단일 엔드포인트로 집중하면 온디맨드 도구라면 놓칠 커널 이벤트를 지속적으로 기록하고, 모든 원격 작업을 단일 mTLS·allowlist 경계 뒤에 둘 수 있습니다.
| 구성 요소 | 역할 |
|---|---|
rbln-smd | 백그라운드 데몬 — 커널 이벤트 수집, 장치 텔레메트리 조회, 장치 제어를 수행하고 이를 gRPC 로 노출합니다. |
rbln-smdi | 명령줄 클라이언트 — 대화형 조회·제어를 제공하며, 원격 호스트의 데몬에 연결할 수 있습니다. |
rbln_smd_v1.proto | gRPC 계약 — 클라이언트가 언어별 바인딩을 생성할 때 사용하는 서비스·메시지 정의입니다. |
핵심 구성 요소¶
데몬(rbln-smd)¶
rbln-smd 는 백그라운드에서 지속적으로 실행되는 핵심 서비스로, gRPC 인터페이스를 통해 장치 관리 기능을 제공합니다.
Deprecation
동일한 바이너리의 복사본이 호환성을 위해 rbln_daemon 이름으로도 함께 설치됩니다. 이 레거시 이름은 v4.0 에서 제거될 예정이므로, 스크립트와 운영 도구는 rbln-smd 로 마이그레이션해야 합니다.
기능¶
rbln-smd 은 다음 기능을 수행합니다:
- netlink 소켓을 통해 커널 이벤트를 모니터링하고 로그로 저장
- 온도, 전력 소비, 메모리 사용량, 클럭 주파수, 사용률 등의 장치 텔레메트리를 gRPC 인터페이스로 노출
- 현재 NPU 를 점유 중인 호스트 프로세스와 실행 컨텍스트 보고
- 리셋과 같은 장치 제어 작업 처리
- RSD 그룹 생성·소멸 등 그룹 관리 작업 처리
- 온디맨드 하드웨어 검증 실행
- mTLS와 IP/CN 기반 접근 제어 시행
특징¶
- 자동 시작 및 생명주기 관리를 위한 systemd 서비스(
rbln-smd.service)로 동작 - 클라이언트 연결을 위한 TCP(기본 포트 50051) 및 Unix 도메인 소켓 지원
- 구성 가능한 이벤트·코어덤프 보존 및 자동 로테이션
설정¶
환경 변수로 데몬 동작을 제어합니다:
RBLN_SMD_URI: gRPC 수신 URI(기본값:[::]:50051).--uri플래그가 없을 때 그 값을 공급하므로, 플래그를 함께 주면 플래그가 이깁니다.RBLN_SMD_PORT보다는 우선합니다.unix:///var/run/rbln.sock처럼 유닉스 도메인 소켓도 지정할 수 있습니다.RBLN_SMD_PORT(기본값:50051): gRPC 서버 TCP 포트.RBLN_SMD_URI가 설정되면 무시됩니다.RSMD_TLS_CA_CERT/RSMD_TLS_SERVER_CERT/RSMD_TLS_SERVER_KEY: 인증서 3종(CA 인증서, 서버 인증서, 서버 개인 키). 세 개를 함께 설정해야 합니다.RSMD_MAX_EVENTS_PER_DEV(기본값:1000): 장치당 보존되는 최대 이벤트 수. 한도 도달 시 가장 오래된 이벤트부터 자동 삭제됩니다.RSMD_MAX_COREDUMPS_PER_DEV(기본값:200): 장치당 보존되는 최대 코어덤프 디렉터리 수. 한도 도달 시 가장 오래된 항목부터 자동 삭제됩니다.RSMD_FWLOG_MAX_LINES_PER_CP(기본값:10000, 범위1-32768): 코어덤프에 수집하는 Command Processor 당 최대 펌웨어 로그 엔트리 수. 값을 키우면 순환된 링의 더 이전 기록까지 담기지만, 리셋 중 커널 드라이버가 대기하는 장치 읽기 시간이 길어집니다.RSMD_LOG_LEVEL(기본값:6): 로그 상세도.0-2끔,3error,4-5warning,6info,7debug,8verbose.RSMD_REQUIRE_OPENAT2: 인증서 읽기에openat2사용을 강제하여, 이를 지원하지 않는 커널(Linux 5.6 미만)에서는 데몬이 시작되지 않게 합니다. 설정하지 않으면 그런 커널에서는 이전 방식의 경로 검사로 동작합니다.RSMD_SKIP_CERT_DIR_PERM_CHECK: 기동 시 인증서 소유자·권한 검사를 건너뜁니다. 배포 환경이 다른 방법으로 이 권한을 보장하는 경우에만 설정해야 합니다.
Deprecation
RSMD_CERT_PATH 는 인증서 디렉터리 하나를 지정하던 변수입니다. 설정 시 한 번의 경고와 함께 환경 변수 계층으로 매핑되며 v4.0 에서 제거될 예정이므로, RSMD_TLS_* 3종을 설정해야 합니다.
명령줄 플래그¶
데몬은 다음 플래그를 지원합니다(systemd 유닛의 ExecStart= 에 추가하거나 systemctl edit 으로 override):
--mtls: mTLS 모드 활성화.--allow-reset: 장치 리셋 호출 허용. 이 플래그가 없으면 리셋은 항상 거부됩니다.--ca-cert <file>: 클라이언트 인증서 검증에 사용할 CA 인증서.--cert <file>: 서버 인증서.--key <file>: 서버 개인 키.-a, --allowlist <file>: 클라이언트 IP / CN 기반 접근 제한 파일.--uri <uri>: 대체 바인딩(예:unix:///var/run/rbln.sock).--pid-file <path>: PID 파일 경로. 이 플래그,RBLN_SMD_PID_PATH,/run/rbln-smd.pid순으로 우선합니다.
--ca-cert, --cert, --key 는 하나의 계층이므로 함께 지정해야 합니다. 데몬이 인증서 계층을 선택하는 방식과 --mtls, --allow-reset, -a, --allowlist 의 자세한 동작은 접근 제어 및 mTLS 에서 확인할 수 있습니다.
Deprecation
--cert 에 디렉터리를 지정하면 정해진 파일명을 그 디렉터리에서 읽던 v3.2 디렉터리 모드로 동작합니다. 디렉터리 형태는 기동 시 한 번의 경고와 함께 감지되며 v4.0 에서 제거될 예정이므로, --ca-cert / --cert / --key 파일 3종을 지정해야 합니다.
서비스 관리¶
데몬은 systemd 서비스로 실행됩니다. 서비스 상태는 다음 명령으로 확인할 수 있습니다:
로그는 systemd 저널을 통해 확인할 수 있습니다:
데몬은 systemd 서비스 설정에서 --uri 옵션을 지정하여 TCP 포트 대신 Unix 도메인 소켓으로 수신하도록 구성할 수 있습니다. 둘은 배타적이며, Unix 소켓을 쓰면 TCP 리스너는 열리지 않습니다.
유닉스 소켓은 mTLS·allowlist 와 함께 쓸 수 없습니다
유닉스 도메인 소켓은 접근 제어를 파일 권한에 위임하므로 --mtls 나 -a, --allowlist 와 함께 지정하는 것은 설정 오류입니다. 이 경우 한쪽 설정을 무시하지 않고 데몬 시작을 중단합니다.
데몬은 소켓을 모든 사용자가 접근할 수 있는 권한(0777)으로 만들므로, 로컬 사용자 누구나 데몬에 접근할 수 있습니다. 접근을 제한하려면 소켓을 탐색 권한이 제한된 디렉터리에 두어야 합니다.
Info
rbln-smd.service 와 rbln_daemon.service 는 동일한 바이너리를 가리키며 systemd Conflicts= 로 상호 배제됩니다. 두 유닛을 동시에 enable 한 경우 한쪽만 실행됩니다.
이벤트 로그¶
장치 이벤트는 CSV 파일 형식으로 다음 경로에 저장됩니다:
/var/log/rebellions/rsmd_<device>.event
이 로그에는 다음이 포함됩니다:
- 이벤트 유형 및 소스
- 타임스탬프(UTC 및 커널 시간)
- 이벤트 데이터 및 하위 값
Protobuf API¶
Protobuf API는 모든 RSMD 클라이언트가 사용하는 gRPC 서비스 인터페이스를 정의합니다. 스키마는 언어 중립적인 인터페이스이므로 Python, C++, Go, Java 등 지원되는 언어의 클라이언트를 생성할 수 있습니다. 엄격한 데이터 타입 정의를 통해 데이터 무결성을 보장하며, 전송 형식을 간결하게 유지합니다.
현재 API 표면은 버전 1이며, 패키지 rblnservices.v1 의 rbln_smd_v1.proto 에 정의되어 있습니다. 서비스가 관심사별로 나뉘어 있어, 클라이언트는 자신이 사용하는 서비스에만 의존합니다.
사용 가능한 서비스¶
각 서비스와, 이 문서가 다루는 RPC 입니다. 전체 목록의 기준은 proto 파일입니다.
| 서비스 | 목적 | RPC 메서드 |
|---|---|---|
InventoryService | 정적 장치 식별 정보 — 부팅 동안 변하지 않는 값 | ListDevices, GetVersion, GetHardware, GetMemorySpec |
MetricService | 동적 측정값. 클라이언트가 필요한 메트릭을 그룹으로 선언한 뒤 그 그룹의 최신 값을 읽습니다 | ListSupportedMetrics, CreateMetricGroup, UpdateMetricGroup, DeleteMetricGroup, ListMetricGroups, SampleMetrics |
ControlService | 명령형 장치 제어 — 리셋을 통한 장치 복구 | ResetDevice |
JournalService | 이력 기록 조회 전용 — 이벤트 로그와 수집된 코어덤프 | GetEventHistory, ListCoredumps |
GroupService | RSD 그룹 관리 | ListGroups, CreateGroup, DeleteGroup |
TopologyService | 인터커넥트 토폴로지 — NUMA 노드, CPU affinity, 그룹 소속, PCIe 링크 | ListTopology |
ConfigService | 데몬 런타임 설정 및 커널 드라이버 바인딩 | ListConfig, GetConfig, SetConfig, DetachDriver, AttachDriver |
DiagnosticService | 온디맨드 하드웨어 검증 실행. 비동기 — 실행을 시작한 뒤 완료까지 폴링합니다 | RequestDiagnostic, GetDiagnosticResult, CancelDiagnostic |
WorkloadService | 실시간 점유 현황: NPU 에서 동작 중인 호스트 프로세스와 그들이 보유한 실행 컨텍스트 | ListWorkloads, ListContexts |
오퍼레이션 타입¶
모든 RPC 는 메서드 옵션으로 오퍼레이션 타입을 선언합니다. 클라이언트는 설명을 읽지 않고도 메서드의 효과를 판단할 수 있습니다:
| 타입 | 의미 |
|---|---|
QUERY | 상태를 읽습니다. 장치나 데몬 상태를 변경하지 않습니다. |
COMMAND | 장치나 데몬 상태를 변경합니다. |
STREAM | 서버 스트리밍 읽기입니다. |
QUERY 와 STREAM 은 관측이고 COMMAND 는 상태 변경입니다. 데몬은 COMMAND 에 더 엄격한 권한 계층을 요구할 수 있습니다. 자세한 내용은 접근 제어 및 mTLS 에서 확인할 수 있습니다.
동시성¶
QUERY 와 STREAM 은 차단되지 않으며 경합을 이유로 거부되지도 않습니다. COMMAND 는 서로 직렬화되며, 무엇을 건드리는지에 따라 직렬화 범위가 달라집니다. 표는 이 문서가 다루는 COMMAND 를 담으며, 전체 목록의 기준은 proto 파일입니다.
| 직렬화 범위 | 해당 command | 충돌 시 |
|---|---|---|
| 대상 장치 하나 | ResetDevice | 서로 겹치지 않는 장치의 리셋은 동시에 실행됩니다. 이미 리셋 중인 장치와 겹치는 두 번째 리셋도 호출 자체는 실패하지 않으며, 겹친 대상은 응답 results 의 해당 항목에 오류로 보고됩니다. |
| 그룹의 멤버 장치 | CreateGroup, DeleteGroup | 공유하는 장치에서 충돌하면 ABORTED 로 거부됩니다. 전체 그룹 삭제는 데몬 전역으로 직렬화됩니다. |
| 다른 메트릭 그룹 변경 | CreateMetricGroup, UpdateMetricGroup, DeleteMetricGroup | 동시에 들어온 메트릭 그룹 변경은 ABORTED 로 거부됩니다. 장치 command 나 query 와는 경합하지 않습니다. |
| 데몬 전체 | DetachDriver, AttachDriver, RequestDiagnostic | 동시에 들어온 다른 command 는 ABORTED 로 거부됩니다. 단 ResetDevice 는 첫 행과 같이 충돌을 응답 results 에 보고합니다. |
| 없음 | SetConfig, CancelDiagnostic | 경합을 이유로 거부되지 않습니다. |
그 밖의 command 를 동시에 호출하는 클라이언트는 ABORTED 를 요청 자체의 실패가 아니라 "데몬이 충돌하는 command 를 처리 중이니 재시도" 로 해석해야 합니다.
메시지 타입¶
특정 서비스에 속하지 않고 요청·응답 전반에서 쓰이는 타입입니다.
| 타입 | 역할 |
|---|---|
DeviceRef | 장치 하나를 가리키는 안정적인 핸들. |
GroupRef | RSD 그룹 하나를 가리키는 안정적인 핸들. |
MetricGroupRef | 메트릭 그룹 하나를 가리키는 안정적인 핸들. 예약된 id default 는 모든 장치를 포함하도록 미리 등록된 그룹을 가리킵니다. |
DeviceFilter | 서버 측 디바이스 필터. 비어 있으면 전체 장치를 선택하며, 두 선택자를 함께 지정하면 서버가 교집합을 취합니다. |
ErrorDetail | 애플리케이션 수준 오류 정보로, 성공 시 비어 있습니다. 전송 계층 실패는 이 필드가 아니라 gRPC 기본 status 로 전달됩니다. |
EntityStatus | 부분 실패를 표현하는 항목별 처리 결과. 목록 응답은 unreachable 에, 일괄 command 응답은 results 에 담습니다. |
서비스가 반환하는 항목 타입입니다.
| 타입 | 내용 | 반환 서비스 |
|---|---|---|
DeviceInfo | 장치 식별 정보 | InventoryService |
MetricDescriptor | 메트릭 카탈로그의 한 항목 | MetricService |
MetricSample | 한 번의 측정값 | MetricService |
TopologyEntry | NUMA 노드, CPU affinity, RSD 그룹, PCIe 링크 속도/폭 | TopologyService |
GroupEntry | RSD 그룹 ID, 멤버 장치, ID 에서 파생되어 생성 시 지정할 수 없는 이름 | GroupService |
CoredumpEntry | 코어덤프 경로와 타임스탬프 | JournalService |
프로토콜 정의¶
프로토콜 버퍼 정의 파일들은 일반적으로 /opt/rebellions/etc/ 또는 유사한 시스템 위치에 설치됩니다. 클라이언트 애플리케이션은 이 파일을 사용하여 데몬과의 gRPC 통신을 위한 언어별 바인딩을 생성합니다.
이전 API 표면 (deprecated)
패키지 rblnservices 의 rbln_smd.proto 는 버전 1 이전의 단일 RBLNServices 서비스를 정의하며, rbln_services.proto 는 이전 파일명으로 설치되는 그 사본입니다. 둘 다 계속 설치되고 계속 제공되므로, 이를 기준으로 만든 클라이언트는 그대로 동작합니다. rbln_smd.proto 는 deprecated 이며 rbln_services.proto 별칭은 v4.0 에서 제거될 예정이므로, 바인딩은 rbln_smd_v1.proto 로 생성해야 합니다.
제공하는 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 |
RblnListTopology | 장치 토폴로지 조회(NUMA, CPU affinity, RSD 그룹, PCIe 링크) | RblnListTopologyResponse |
RblnListCoredumps | 장치 코어덤프 항목 조회 | RblnListCoredumpsResponse |
RblnGetConfig | 런타임 설정 값 조회 | RblnGetConfigResponse |
RblnSetConfig | 런타임 설정 값 변경 | RblnSetConfigResponse |
RblnListGroups | 활성 RSD 그룹 목록 조회 | RblnListGroupsResponse |
RblnCreateGroup | 지정한 장치로 RSD 그룹 생성 | RblnGroupOpResponse |
RblnDestroyGroup | 그룹 ID 로 RSD 그룹 소멸(-1 은 전체 소멸) | RblnGroupOpResponse |
CLI(rbln-smdi)¶
rbln-smdi 명령줄 인터페이스는 RSMD 기능에 대한 대화형 접근을 제공합니다. 사람이 읽기 쉬운 테이블 형식 출력과, 자동화 및 스크립팅을 위한 선택적 JSON 출력을 지원하며, 다른 호스트에서 실행 중인 데몬 인스턴스에 대한 원격 연결도 지원합니다.
공통 옵션¶
대부분의 서브커맨드는 다음 옵션을 받습니다:
--ip <주소>: gRPC 서버 IP(기본값:localhost)--port <번호>: gRPC 서버 포트(~/.rbln-smdi/config값을 override)--jsons: 테이블 대신 JSON 형식으로 출력
전역 옵션은 서브커맨드 앞에 위치합니다:
--ca-cert <file>: 서버 인증서 검증에 사용할 CA 인증서.--cert <file>: 클라이언트 인증서.--key <file>: 클라이언트 개인 키.--uri <URI>: 데몬 연결 URI(예:unix:///var/run/rbln.sock).--ip/--port보다 우선합니다.-V, --version: CLI 버전 출력.
--ca-cert, --cert, --key 는 하나의 계층이므로 함께 지정해야 합니다. 클라이언트가 인증서 계층을 선택하는 방식은 접근 제어 및 mTLS 에서 확인할 수 있습니다.
디바이스 및 그룹 필터¶
status, topo, journal, ps 는 동일한 두 필터 옵션을 받습니다:
-d <SPEC>: 디바이스 필터. 미지정 시 전체 장치.-g <SPEC>: RSD 그룹 필터.-d가 함께 지정되면 무시됩니다.
-d 는 디바이스 이름, 범위, 쉼표 목록, 글롭, all 을 받습니다:
| 형태 | 예 | 선택 대상 |
|---|---|---|
| 이름 | rbln0 | 해당 장치 하나 |
| 범위 | rbln0..3 | rbln0 부터 rbln3 까지(양끝 포함) |
| 목록 | rbln0,rbln2 | 나열한 장치들 |
| 글롭 | rbln3-* | rbln3 의 VF(Virtual Function)들 |
| 전체 | all | 모든 장치 |
-g 는 그룹 id, 범위, 쉼표 목록을 받습니다. 예를 들어 1, 1..3, 1,2 입니다.
지정한 이름의 장치가 존재하지 않으면 경고와 함께 제외됩니다. 오타 때문에 조회 범위가 조용히 전체로 넓어지는 일은 없습니다.
환경 변수¶
RSMD_IF_CA_PATH/RSMD_IF_CERT_PATH/RSMD_IF_KEY_PATH: 인증서 3종(CA 인증서, 클라이언트 인증서, 클라이언트 개인 키). 세 개를 함께 설정해야 합니다.RBLN_SMDI_VERBOSE:1,true,yes,on중 하나로 설정하면 연결 시점에 선택된 인증서 계층과 세 경로를stderr로 출력합니다. 기본은 꺼짐이라 스크립트에서stderr가 깨끗하게 유지됩니다.
영구 설정¶
~/.rbln-smdi/config 파일에서 다음 키를 설정할 수 있습니다:
secure=true|false: TLS 사용 여부(기본값false).port=<번호>:--port미지정 시 적용되는 기본 포트.ca_path=<file>/cert_path=<file>/key_path=<file>: 인증서 3종. 세 개를 함께 설정해야 합니다.
Info
보안 관련 옵션의 자세한 동작은 접근 제어 및 mTLS 에서 확인할 수 있습니다.
CLI 예제¶
요약
감지된 모든 NPU 장치를 카드 이름, PCI BDF, UUID, 펌웨어 버전, RSD 그룹, 상태와 함께 표시합니다.
명령어
출력(예시)
+-------------------------------------------------------------------------+
| Device Discovery |
+=====+======================================+============+======+========+
| NPU | Identifiers | FW Ver | RSD | Status |
+-----+--------------------------------------+------------+------+--------+
| 0 | rbln0 RBLN-CA25 | CP: 3.4.0 | rsd0 | READY |
| | 0000:47:00.0 PF | SMC: 3.4.0 | | |
| | 00000000-0000-0000-0000-000000000001 | | | |
+-----+--------------------------------------+------------+------+--------+
+-------------------------------------------------------------------------+
| Device Discovery |
+=====+======================================+============+======+========+
| NPU | Identifiers | FW Ver | RSD | Status |
+-----+--------------------------------------+------------+------+--------+
| 0 | rbln0 RBLN-CR13 | CP: 3.5.1 | rsd0 | READY |
| | 0000:47:00.0 PF | SMC: 3.5.1 | | |
| | 00000000-0000-0000-0000-000000000001 | | | |
+-----+--------------------------------------+------------+------+--------+
요약
온도, 전력, 메모리 사용량, NPU 사용률, 장치 상태를 표시합니다. -d 또는 -g 로 범위를 좁힐 수 있습니다.
Name 열은 카드 모델이 아니라 장치가 속한 제품 계열을 표시합니다. 카드 모델이 필요하면 discovery 를 사용합니다.
명령어
출력(예시)
+-----------------------------------------------------------------------------------------------------+
| Device Status |
+======+=====+======+========+=========+===========+======+==========+=============+=========+========+
| RSD | NPU | Name | Device | Temp | Power(mW) | Perf | DNC(MHz) | Memory | Util(%) | Status |
+------+-----+------+--------+---------+-----------+------+----------+-------------+---------+--------+
| rsd0 | 0 | ATOM | rbln0 | 35.00 C | 55000.000 | 2 | 1000 | 2.5/15.7 GB | 12.5 | READY |
+------+-----+------+--------+---------+-----------+------+----------+-------------+---------+--------+
+--------------------------------------------------------------------------------------------------------+
| Device Status |
+======+=====+=======+========+=========+============+======+==========+==============+=========+========+
| RSD | NPU | Name | Device | Temp | Power(mW) | Perf | DNC(MHz) | Memory | Util(%) | Status |
+------+-----+-------+--------+---------+------------+------+----------+--------------+---------+--------+
| rsd0 | 0 | REBEL | rbln0 | 43.00 C | 100000.000 | 2 | 1400 | 2.5/140.0 GB | 12.5 | READY |
+------+-----+-------+--------+---------+------------+------+----------+--------------+---------+--------+
이 예시의 값은 설명을 위한 것이며, 형식은 도구의 실제 출력과 같습니다.
요약
NPU 에서 동작 중인 호스트 프로세스를 표시합니다. 기본 화면은 실행 컨텍스트를 소유 프로세스 단위로 묶어 보여주고, --context 는 개별 컨텍스트를 나열합니다. 읽기 전용이며, 같은 호스트를 장치 단위로 보여주는 status 를 보완합니다.
명령어
참고
여러 NPU 에 걸친 프로세스는 장치마다 한 행씩 생성됩니다. 식별 정보 열은 소유 스레드마다 한 번만 출력되므로, 같은 TID 아래의 행들은 동일한 프로세스에 속합니다. MEM 은 해당 프로세스가 그 장치에서 점유한 크기와 장치 전체 용량이며, 컨텍스트 단위 화면의 GUILTY 는 커널 드라이버가 장치 결함의 원인으로 지목한 컨텍스트를 표시합니다.
출력(예시)
+------------------------------------------------------------------------------------------+
| Workloads |
+========+========+======+=========+========+=====+=====+==============+=========+=========+
| PID | TID | UID | NAME | DEVICE | GRP | CTX | MEM | UTIL(%) | Running |
+--------+--------+------+---------+--------+-----+-----+--------------+---------+---------+
| 257082 | 257082 | 0 | python3 | rbln0 | 0 | 1 | 2.50/15.7 GB | 50.0 | yes |
| | | | | rbln1 | 0 | 1 | 2.50/15.7 GB | 48.0 | yes |
+--------+--------+------+---------+--------+-----+-----+--------------+---------+---------+
| 258431 | 258431 | 1000 | vllm | rbln2 | 1 | 2 | 8.40/15.7 GB | 95.0 | yes |
+--------+--------+------+---------+--------+-----+-----+--------------+---------+---------+
+--------------------------------------------------------------------------------------------+
| Contexts |
+=======+=======+======+========+=========+======+==============+=========+=========+========+
| DEV | CTX | ASID | TID | NAME | PRIO | MEM | UTIL(%) | Running | GUILTY |
+-------+-------+------+--------+---------+------+--------------+---------+---------+--------+
| rbln0 | 10001 | 1 | 257082 | python3 | 0 | 2.50/15.7 GB | 50.0 | yes | - |
+-------+-------+------+--------+---------+------+--------------+---------+---------+--------+
| rbln1 | 10002 | 1 | 257082 | python3 | 0 | 2.50/15.7 GB | 48.0 | yes | - |
+-------+-------+------+--------+---------+------+--------------+---------+---------+--------+
요약
NUMA 노드, CPU affinity, RSD 그룹, PCIe 링크 정보를 표시합니다.
명령어
출력(예시)
+----------------------------------------------------------------------------------------------+
| Device Topology |
+===========+=====+========+==============+===========+==============+============+============+
| RSD Group | NPU | Device | PCI BDF | NUMA Node | CPU Affinity | PCIe Speed | PCIe Width |
+-----------+-----+--------+--------------+-----------+--------------+------------+------------+
| rsd0 | 0 | rbln0 | 0000:47:00.0 | 0 | 0-63 | 16 GT/s | x16 |
+-----------+-----+--------+--------------+-----------+--------------+------------+------------+
요약
커널 이벤트 이력과 코어덤프 항목을 함께 표시합니다. --type 으로 한쪽만 조회할 수 있습니다.
명령어
출력(예시)
+----------------------------------------------------------------------------------+
| Events |
+=====+==========+============+==============+==============+==========+===========+
| IDX | DEV NAME | DATE | TIME | EVENT | CATEGORY | SITUATION |
+-----+----------+------------+--------------+--------------+----------+-----------+
| 0 | rbln0 | 2026-01-15 | 10:25:10.412 | CP_EVENT | DEV_ERR | - |
| 1 | | | 10:25:12.118 | COREDUMP | DEV_ERR | RESET |
| 2 | | | 10:25:14.902 | DEVICE_READY | - | - |
+-----+----------+------------+--------------+--------------+----------+-----------+
+---------------------------------------------------------------------------------------------------------+
| Coredumps |
+=====+==========+============+==========+===========+====================================================+
| IDX | DEV NAME | DATE | TIME | SITUATION | PATH |
+-----+----------+------------+----------+-----------+----------------------------------------------------+
| 0 | rbln0 | 2026-01-15 | 10:25:12 | RESET | /var/log/rebellions/rbln0.20260115_102512.coredump |
+-----+----------+------------+----------+-----------+----------------------------------------------------+
요약
RSD 그룹을 조회·생성·소멸합니다. 생성 시 --attach 로 멤버 장치를 지정하며, -d 와 같은 장치 선택 형식을 받습니다(디바이스 및 그룹 필터 참고). --destroy all 은 모든 그룹을 소멸합니다.
명령어
출력(예시)
+------------------------------------------------+
| RSD Groups |
+==========+============+=========+==============+
| Group ID | Group Name | NPU IDs | Device Count |
+----------+------------+---------+--------------+
| 1 | rsd1 | 0-1 | 2 |
+----------+------------+---------+--------------+
요약
데몬 수준 상태를 읽고 씁니다. 런타임 설정 값과, 데몬이 커널 드라이버에 대해 갖는 바인딩을 다룹니다. 설정 변경은 데몬 재시작 없이 즉시 반영됩니다.
인자 없이 실행하면 데몬이 노출하는 모든 키를 타입, 현재 값, 기본값, --set 이 받는 범위와 함께 나열합니다. 키 목록은 데몬이 소유하므로, 데몬에 키가 추가되면 CLI 를 고치지 않아도 목록에 나타납니다.
명령어
참고
--get 과 --set 은 키 이름과 목록의 idx 를 모두 받습니다. 번호는 대화형 사용을 위한 편의이며 데몬 버전 간 고정되지 않으므로, 스크립트에서는 키 이름을 지정하는 것을 권장합니다. --set 은 읽기 전용 키와 범위를 벗어난 값을 거부하며, idx 로 지정한 경우 성공 시 바뀌기 전 값과 함께 확인해 줍니다.
데몬은 동작하는 동안 커널 드라이버에 대한 참조를 유지하며, 그 때문에 커널 모듈이 로드된 상태로 남습니다. 해제하면 그 참조를 놓아 데몬을 중단하지 않고도 모듈을 교체할 수 있고, 다시 연결하기 전까지는 장치 조작이 불가능합니다.
해제는 참조를 놓기 전에 진행 중인 작업을 배출하므로 시간이 걸릴 수 있습니다. --timeout 은 그 대기를 초 단위로 제한하며 기본값은 30 입니다(0 은 무제한). --attach-driver 에는 적용되지 않습니다. 보고되는 상태는 ATTACHED, DETACHING, DETACHED 중 하나이며, 호출이 실패해도 데몬이 관측한 상태가 함께 보고되므로 "연결된 채로 남았으니 재시도" 와 "해제 중에 멈췄으니 대기 시간 연장" 을 구분할 수 있습니다.
출력(예시)
+-----------------------------------------------------------------------+
| Daemon Config |
+=====+========================+======+===================+=============+
| idx | key | type | current [default] | range |
+-----+------------------------+------+-------------------+-------------+
| 1 | max_events_per_dev | int | 1000 [1000] | 1 .. 100000 |
| 2 | max_coredumps_per_dev | int | 200 [200] | 1 .. 10000 |
| 3 | fwlog_max_lines_per_cp | int | 10000 [10000] | 1 .. 32768 |
| 4 | log_level | int | 6 [6] | 0 .. 8 |
+-----+------------------------+------+-------------------+-------------+
| - | rsmd_version | str | 3.5.1 | read-only |
| - | kmd_version | str | 3.5.1 | read-only |
| - | umd_version | str | 3.5.1 | read-only |
+-----+------------------------+------+-------------------+-------------+
idx selects a key for --get / --set in this listing. It is not stable across
daemon versions, so scripts should pass the key name.
+--------------------------+
| Config |
+--------------------------+
| max_events_per_dev: 1000 |
+--------------------------+
+--------------------------+
| Config (updated) |
+--------------------------+
| max_events_per_dev: 2000 |
+--------------------------+
요약
선택한 장치 또는 RSD 그룹 전체를 리셋합니다. 데몬이 --allow-reset 플래그로 실행 중이어야 합니다.
리셋 단위는 워크로드 단위에 맞춰야 합니다. 장치 단위로 제출된 워크로드는 -d 로 그 장치를 리셋해 복구하고, RSD 그룹에 걸쳐 제출된 워크로드는 -g 로 그룹 전체를 리셋해 복구합니다.
명령어
참고
대상이 아직 살아 있는 컨텍스트를 보유하고 있으면 리셋은 거부됩니다. --force 로 이 거부를 무시할 수 있습니다.
출력(예시)
실패 시
리셋을 강제하면 그룹 워크로드가 교착될 수 있습니다
살아 있는 RSD 그룹 워크로드에 묶여 있는 NPU 에 장치 단위(-d) 리셋을 강제하면, 그룹의 다른 장치들이 커널 드라이버에서 그 장치를 계속 기다리는 사이 해당 장치의 컨텍스트만 파괴됩니다. 워크로드가 그룹에 걸쳐 있다면 -g 로 그룹 전체를 리셋하고, --force 는 정말로 멈춰버린 컨텍스트에만 사용해야 합니다.
Deprecation
reset 서브커맨드(rbln-smdi reset rbln0, rbln-smdi reset all)는 deprecated 입니다. device --reset 을 사용해야 합니다. device --reset 은 all 을 받지 않으므로, 장치는 -d 로 지정하고 RSD 그룹 전체는 -g 로 지정합니다.
접근 제어 및 mTLS¶
이 절은 mTLS 와 접근 제어를 사용해 RSMD 를 운영하는 데 필요한 설정을 데몬 측과 클라이언트 측으로 나누어 다룹니다. 양쪽이 일관되게 구성되어야 보안 채널이 성립합니다.
Check the current mode
데몬(rbln-smd) 설정¶
rbln-smd 는 세 개의 독립 플래그와 인증서 3종으로 전송 보안과 접근 제어를 구성합니다. 데몬 시작 시 systemd 유닛 또는 CLI 옵션으로 지정합니다.
접근 제어 플래그¶
| 플래그 | 목적 |
|---|---|
--mtls | mTLS 모드 활성화. 수신 주소 — RBLN_SMD_PORT, 또는 --uri / RBLN_SMD_URI 로 지정한 TCP 주소 — 에 TLS 전용 채널을 엽니다. 미지정 시 insecure 채널이 열립니다. |
--allow-reset | 장치 리셋 호출(ControlService.ResetDevice, 레거시 API 의 resetDevice / resetAllDevice) 허용. 미지정 시 리셋 호출은 항상 거부됩니다. |
--allowlist <path> | 2-tier allowlist 파일. 어떤 클라이언트가 데몬에 접근할 수 있는지, 그리고 누가 리셋을 포함한 상태 변경 COMMAND 를 호출할 수 있는지 제한합니다. |
운영 모드¶
| 모드 | 플래그 | 동작 |
|---|---|---|
| 모니터링 전용(기본) | (없음) | insecure 채널, 리셋 거부 |
| Insecure + 리셋 | --allow-reset | insecure 채널, 모든 클라이언트가 리셋 가능 |
| mTLS 모니터링 | --mtls | TLS 전용 채널, 리셋 거부 |
| mTLS + 리셋 | --mtls --allow-reset | TLS 전용 채널, mTLS 클라이언트는 리셋 가능 |
| 제한 접근 | --allow-reset -a /path/to/allowlist | allowlist 등재 클라이언트만, privileged tier 만 리셋 |
Warning
--mtls 만 단독으로 사용하면 신뢰된 CA 가 서명한 인증서를 가진 모든 클라이언트가 리셋을 제외한 API 에 접근할 수 있습니다. 클라이언트별 접근 제한이 필요하면 --allowlist 와 함께 사용해야 합니다.
Allowlist¶
Allowlist 는 [basic] 과 [privileged] 두 섹션을 가진 INI 형식 파일입니다. 지정한 파일이 없으면 데몬이 안내 주석이 포함된 템플릿을 자동 생성합니다.
v1 API 에서 [basic] 은 조회와 스트림을 허용하며, 모든 COMMAND 는 [privileged] 가 필요합니다. ResetDevice 는 여기에 --allow-reset 도 필요합니다. 레거시 API 는 리셋만 [privileged] 로 제한합니다.
지원하는 entry 유형:
- IPv4 주소:
192.168.1.100 - IPv4 CIDR:
192.168.10.0/24 - IPv6 주소:
::1 - IPv6 CIDR:
fe80::/10 - CN 문자열:
client-service-name(mTLS 채널에서만 평가)
채널 규칙:
- Insecure 채널: IP / CIDR entry 만 평가됩니다.
-
mTLS 채널: 다음 순서로 평가하며 가장 먼저 매치된 단계의 결과를 반환합니다.
- CN 이
[privileged]에 매치 → privileged - CN 이
[basic]에 매치 → basic - IP / CIDR 이
[privileged]에 매치 → privileged - IP / CIDR 이
[basic]에 매치 → basic - 매치 없음 → 거부
한 클라이언트가 CN 과 IP 양쪽에 등재되면 더 앞 단계의 결과가 반영됩니다. 예를 들어 CN 이
[basic]에 있고 IP 가[privileged]에 있으면 결과는 basic 입니다. - CN 이
Allowlist 파일은 매 gRPC 요청 시 mtime 으로 변경 여부를 검사합니다. 변경 사항은 데몬 재시작 없이 다음 요청부터 반영됩니다. 어느 섹션에도 등재되지 않은 entity 는 모니터링 API 를 포함한 모든 접근이 거부됩니다.
서버 인증서¶
--mtls 활성화 시 데몬은 세 가지 구성 요소가 필요합니다. 클라이언트 인증서를 검증할 CA 인증서, 자신의 서버 인증서, 그리고 그에 대응하는 개인 키입니다.
세 요소는 하나의 계층으로 취급되어 모두 같은 출처에서 읽힙니다. 데몬은 완전하게 채워진 첫 번째 계층을 사용합니다:
- CLI:
--ca-cert,--cert,--key - 환경 변수:
RSMD_TLS_CA_CERT,RSMD_TLS_SERVER_CERT,RSMD_TLS_SERVER_KEY - OS 기본 디렉터리: 리눅스 PKI 관례에 따라 공개 인증서와 개인 키를 나누어, 알려진 파일명을 탐색합니다
계층을 섞거나 한 계층의 세 요소 중 일부만 지정하면 첫 연결 시점이 아니라 데몬 기동 시점에 거부되며, 진단 메시지가 빠진 요소를 알려줍니다. 인증서는 --mtls 가 지정된 경우에만 해석되며, insecure 모드에서는 필요하지 않습니다.
세 번째 계층의 디렉터리는 다음과 같습니다:
| 구성 요소 | Debian / Ubuntu | RHEL / CentOS / Fedora |
|---|---|---|
| CA 인증서, 서버 인증서 | /etc/ssl/certs/ | /etc/pki/tls/certs/ |
| 서버 개인 키 | /etc/ssl/private/ | /etc/pki/tls/private/ |
해당 디렉터리 안에서는 다음 순서로 먼저 존재하는 파일명을 사용합니다:
| 구성 요소 | 파일명 후보 |
|---|---|
| CA 인증서 | ca.crt, rsmd_ca.crt, ca.pem |
| 서버 인증서 | tls.crt, server.crt, rsmd_server.crt |
| 서버 개인 키 | tls.key, server.key, rsmd_server.key |
개인 키는 데몬 외 사용자가 읽지 못하도록 권한을 좁혀야 합니다(예: 데몬 실행 사용자 소유 + 0600).
데몬은 기동 시 인증서 파일과 그 파일이 있는 디렉터리도 검사합니다. 둘 다 root 또는 데몬 실행 사용자 소유여야 하고, 그룹이나 기타 사용자에게 쓰기 권한이 없어야 합니다. 검사를 통과하지 못하면 데몬이 시작되지 않습니다. 읽기 전용 마운트처럼 배포 환경이 다른 방법으로 이 권한을 보장하는 경우에는 RSMD_SKIP_CERT_DIR_PERM_CHECK=1 로 검사를 건너뛸 수 있습니다.
심볼릭 링크는 인증서 디렉터리 안에서 해석되는 한 허용됩니다. 즉 같은 마운트 지점에서 그 디렉터리 아래로 이어져야 합니다. 디렉터리 바깥을 가리키는 링크는 거부됩니다. 쿠버네티스가 마운트된 인증서 Secret 을 제시할 때 쓰는 간접 구조는 그대로 동작합니다.
Linux 5.6 이상에서는 데몬이 openat2 로 인증서 3종을 읽으며, 이 경로는 더 엄격한 규칙을 적용합니다. 대상이 디렉터리 안에 있더라도 절대 경로 링크를 거부합니다. 디렉터리 내부 링크는 상대 경로로 작성해야 합니다. 쿠버네티스 구조는 이미 상대 경로를 사용합니다. openat2 가 없는 커널에서는 이 구분을 하지 않는 경로 검사를 대신 사용하므로, 디렉터리 안을 가리키는 절대 경로 링크가 그대로 로드됩니다. openat2 사용을 강제하려면 RSMD_REQUIRE_OPENAT2=1 을 설정합니다. 미지원 커널에서는 데몬이 시작되지 않습니다.
클라이언트(rbln-smdi) 설정¶
rbln-smdi 는 데몬에 mTLS 채널로 접속할지 여부와 사용할 인증서를 다음 항목으로 결정합니다. 데몬이 --mtls 로 실행 중인 경우 클라이언트도 TLS 를 활성화해야 합니다.
TLS 활성화¶
클라이언트는 세 가지 구성 요소가 필요합니다. 서버 인증서를 검증할 CA 인증서, 자신의 클라이언트 인증서, 그리고 그에 대응하는 개인 키입니다. 데몬 측과 마찬가지로 세 요소는 하나의 계층으로 취급되며, 완전하게 채워진 첫 번째 계층이 선택됩니다:
- CLI:
--ca-cert,--cert,--key— 이번 호출에만 적용됩니다. - 환경 변수:
RSMD_IF_CA_PATH,RSMD_IF_CERT_PATH,RSMD_IF_KEY_PATH— shell 세션 단위로 적용됩니다. - 설정 파일:
~/.rbln-smdi/config의ca_path,cert_path,key_path키로,secure=true일 때 사용됩니다. 영구 설정이라 이후 모든 호출에 적용됩니다.
계층을 섞으면 클라이언트 기동 시점에 거부됩니다. 다만 한 계층을 일부만 채운 경우가 항상 거부되지는 않습니다. 이전 형태 세 가지는 여전히 허용되며, 각각 한 번의 경고와 함께 CLI 계층으로 해석됩니다. TLS 가 꺼져 있으면(secure=false 이고 인증서 관련 플래그·변수가 하나도 없으면) 클라이언트는 insecure 채널로 연결합니다. TLS 가 켜져 있는데 완전한 계층이 없으면 insecure 로 넘어가지 않고 시작 시 오류로 종료합니다.
Deprecation
아래 세 형태는 v4.0 에서 제거될 예정입니다.
--tls <path>: v3.2 의 단일 플래그 형태. 키와 CA 는 인증서 파일명과 그 디렉터리에서 유추합니다.RSMD_IF_CERT_PATH단독 지정. 같은 3종의 나머지 두 변수 없이 쓰는 경우입니다.RSMD_CERT_PATH: v3.2 의 단일 디렉터리 변수.
이 형태는 --ca-cert / --cert / --key 또는 RSMD_IF_* 3종 전체로 옮겨야 합니다.
RBLN_SMDI_VERBOSE=1 을 설정하면 클라이언트가 선택한 계층과 사용할 세 경로를 stderr 로 출력합니다. 설정 파일의 인증서와 환경 변수의 인증서를 구분하는 가장 빠른 방법입니다.
클라이언트 인증서¶
클라이언트별 접근 제한이 필요한 경우 서버 측 allowlist 에 클라이언트 인증서의 CN 값을 등재합니다.
심볼릭 링크는 openat2 단서를 포함해 데몬 측과 동일한 규칙을 따릅니다. 인증서 디렉터리 안에서 해석되어야 하고, openat2 를 제공하는 커널에서는 상대 경로이기도 해야 합니다.
클라이언트도 연결 전에 자신의 인증서에 같은 소유자·쓰기 권한 검사를 적용하며, 이때 데몬 실행 사용자 대신 클라이언트 실행 사용자를 기준으로 합니다. RSMD_SKIP_CERT_DIR_PERM_CHECK 는 클라이언트 쪽 검사도 건너뜁니다.
인증서 갱신¶
기존 경로에 서버 인증서와 키를 덮어쓰는 경우, systemctl reload rbln-smd(SIGHUP)로 재시작 없이 적용됩니다. 기존 연결은 세션을 유지하고, 새 연결부터 새 인증서를 사용합니다. 리로드에 실패하면 데몬은 이전 인증서를 계속 쓰고 systemctl reload 는 그대로 성공하므로, journalctl -u rbln-smd 에서 TLS certificate reloaded 를 확인해야 합니다. CA 인증서 교체는 여전히 데몬 재시작이 필요합니다. 클라이언트 측은 다음 호출부터 새 인증서를 읽습니다.
새 경로로 옮기는 경우, 서버는 인증서 계층 — --ca-cert / --cert / --key 플래그 또는 RSMD_TLS_* 변수 — 을 갱신한 뒤 데몬을 재시작합니다. 클라이언트는 RSMD_IF_* 변수 또는 config 의 ca_path / cert_path / key_path 를 갱신합니다.
클라이언트 측 인증서만 교체할 때는 데몬 재시작 없이 진행할 수 있습니다.
텔레메트리 단위¶
MetricService 는 각 측정값의 단위를 메트릭 식별자 자체에 담습니다. 예를 들어 METRIC_ID_TEMPERATURE_MILLI_CELSIUS 가 그렇습니다. 클라이언트는 단위를 추측하지 않고 식별자에서 읽어냅니다.
아래 단위는 SampleMetrics 응답이 담아 보내는 값의 단위입니다.
| 메트릭 | 식별자가 선언하는 단위 | 응답에 담기는 값 |
|---|---|---|
| 온도 | 밀리 셀시우스(m°C) | 45 °C 는 45000 으로 전달 |
| 전력 | 마이크로와트(µW) | 100.5 mW 는 100500 으로 전달 |
| 사용률 | 밀리 퍼센트 | 50 % 는 50000 으로 전달 |
| 사용 메모리 | 바이트 | 15.7 GiB 는 16877879296 으로 전달 |
| 클럭 주파수 | MHz | 1 GHz 는 1000 으로 전달 |
| 성능 상태 | 순서값, 0 이 가장 높은 성능 상태 | — |
rbln-smdi 는 출력 전에 이 값들을 변환하므로, CLI 표에는 위 값이 아니라 °C, mW(Power(mW)), 퍼센트로 표시됩니다. API 를 직접 호출하는 클라이언트는 변환 없이 그대로 받습니다.
권장 사항¶
- 정기 모니터링: 스케줄된 스크립트를 사용하여 장치 상태 메트릭을 지속적으로 모니터링
- 이벤트·코어덤프 보존 설정: 디스크 가용량에 맞춰
RSMD_MAX_EVENTS_PER_DEV와RSMD_MAX_COREDUMPS_PER_DEV를 조정 - 네트워크 보안: 로컬 접근에는 Unix 도메인 소켓을 권한이 제한된 디렉터리에 두어 사용하고(소켓 자체는 모든 사용자가 접근 가능), 원격 접근에는
--mtls와--allowlist조합을 권장합니다. TCP 포트는 방화벽 규칙으로 추가 제한하는 것을 권장합니다. - 오류 처리: 결과를 사용하기 전에 API 응답의
error정보를 확인하고, 호출이 다루지 못한 항목은unreachable(목록 응답) 또는results(일괄 command)에서 확인 - 로그 검토: 이벤트 로그를 주기적으로 검토하여 이상 징후와 패턴을 식별
참고 자료¶
- gRPC 정의:
rbln_smd_v1.proto는 일반적으로/opt/rebellions/etc/또는 시스템 설정 디렉터리에 위치합니다. - Systemd 서비스: 서비스 유닛 파일은
/etc/systemd/system/rbln-smd.service에 설치됩니다. 호환을 위한 alias/etc/systemd/system/rbln_daemon.service는 동일한 데몬의 바이너리 복사본을 실행하며, v4.0 에서 제거될 예정입니다.