커널 ↔ 유저스페이스 ABI

상태: v1 초안. 트레이스 포맷이 바이트 레이아웃을 담당한다면, 이 문서는 시스템 콜 표면을 정의합니다.

목차

캐릭터 디바이스

모듈은 컨트롤러 하나당 /dev/nvme-hmb-trace0, /dev/nvme-hmb-trace1, … 를 생성합니다.

File op 동작
open 트레이스 ring에 대한 배타적 잠금을 획득(단일 컨슈머).
close 잠금 해제. close 시 ring을 drain하지 않음.
mmap HMB 영역 전체를 read-only로 매핑. 길이는 GET_INFO가 보고한 total_mmap_size와 동일해야 함. PROT_WRITEEACCES로 거부.
poll head != tail이면 POLLIN 반환(컨슈머에게 할 일이 있음을 알림).
ioctl 아래 표 참고.

ring 헤더의 tail 필드는 컨슈머 커서입니다. 컨슈머가 tail을 직접 갱신하는 방법은 별도 메커니즘으로 구현됩니다 — 작은 writable shadow page를 만들거나 전용 ioctl을 두는 안이 검토 중입니다. v1에서는 미확정. 그동안 mmap은 read-only로 유지되며, 컨슈머가 (자리표시) NVME_HMB_TRACE_ADVANCE_TAIL ioctl을 호출하면 커널이 tail을 갱신합니다.

ioctl 번호

magic = 'H' = 0x48. 번호는 추가만 가능 — 절대 재사용 금지.

번호 이름 방향 페이로드
0x01 NVME_HMB_TRACE_GET_INFO _IOR struct nvme_hmb_trace_info

struct nvme_hmb_trace_info

오프셋 크기 필드 설명
0x00 4 abi_version 모듈이 빌드된 시점의 HMB_TRACE_ABI_VERSION
0x04 4 ring_size record area 크기
0x08 4 record_area_off base → record area 오프셋(v1에서 0x40)
0x0C 4 total_mmap_size 호출자가 mmap에 전달해야 하는 바이트 수

sysfs

예정(v1 스텁에는 없음):

  • /sys/class/nvme-hmb-trace/trace0/abi_version
  • /sys/class/nvme-hmb-trace/trace0/ring_size
  • /sys/class/nvme-hmb-trace/trace0/overflow_count

새 sysfs 엔트리를 추가할 때는 반드시 이 문서를 같은 커밋에서 갱신합니다.

버전 이력

버전 날짜 비고
1 2026-05-17 초기 초안. GET_INFO 정의.

GPL-2.0 (kernel/, daemon/) · Apache-2.0 (analyzer/, docs/, mock/)

This site uses Just the Docs, a documentation theme for Jekyll.