intro
telemetry가 무슨 의미지?
the science or process of collecting information about objects that are far away and sending the information somewhere electronically
영영사전 뜻을 보면, 데이터나 정보를 모으는 프로세스 정도로 이해된다.
nvme spec에서의 telemetry
영영사전 의미와 다르지 않다. nvme device의 internal data를 수집하는 방법을 정의하고 있다.
overview
- The telemetry data collection may be initiated by the host or by the controller. // get log page command의 telemetry host initiated, controller initiated 내용 참고
- The data captured is vendor specific. // 어떤 data를 수집해야 하는지는 nvme spec에 정의되어있지 않다.
- Each telemetry data log is made up of a single set of Telemetry Data Blocks.
- Each Telemetry Data Block is 512 bytes in size.
- All telemetry data areas start at Telemetry Data Block 1. // telemetry data area는 data block(unit 512Bytes)으로 구성된다.
telemetry data area
a) Three Telemetry Data Areas (i.e., small, medium, and large), if bit 6 of the Log Page Attributes field is cleared to ‘0’; or
b) Four Telemetry Data Areas (i.e., small, medium, large and extra-large) If bit 6 of the Log Page Attributes field is set to ‘1’ and the Extended Telemetry Data Area 4 Supported (ETDAS) field is set to 1h in the Host Behavior Support feature (refer to section 5.27.1.18).
data area를 n개의 area로 구분하고 있다. 그리고 n번째 area는 n-1번째 area를 포함한다. 각 area에 data를 어떻게 분배할 수 있는지는 다음 그림을 참고하자.


Telemtery Data Format
host는 get log page command - telemetry host initiated 또는 controller initiated를 issue하여, device에 telemetry data를 요청할 수 있다. data format은 다음과 같다.
| Byte Offset | description |
| 511:0 | header - area1, 2, 3, 4 last block (*1) - telemetry data generation number - and so on (*1) area1, 2, 3의 last block은 2Bytes 크기의 필드이다. 즉, last block의 최댓값이 65535입니다. area3까지만 지원한다고 했을 때, Telemetry Data의 최댓값은 65535 * 512 + 512(header) = 32MiB입니다. 더 큰 사이즈의 telemetry data가 필요한 경우, area4를 지원해야합니다. area4 last block은 4Bytes 크기의 필드이기 때문입니다. |
| 1023:512 | data block 1 |
| 1535:1024 | data block 2 |
| ... | data block n |
Usecase
- host는 telemetry data를 device에 요청한다. 가능하면 host는 data area 1,2,3,4를 다 요청해야한다.
- host는 telemetry data의 header를 다시 요청한다. header의 generation number가 1과 동일한지 확인하기 위함이다. // 동일하지 않다는 것은 1에서 read한 telemetry data가 신뢰하기 어려움을 의미한다. 왜냐하면, controller가 data collection을 하고 있는 중에 host에게 telemetry data를 전달했을 수 있기 때문이다. 이런 경우, host가 다시 telemetry data를 재요청할 것으로 기대된다.
OCP Spec에서의 Telemetry
ocp spec 2.5에서 telemetry data area 1, 2의 standard format을 정의하고 있다. 이는 고객, 즉 host도 read한 telemetry data를 분석하고 싶은 의지로 보인다.

overview
- 성능에 영향을 미치지 않으면서 생성되는 디버깅 data는 area1에 배치한다. (*2)
- 성능에 영향을 미치면서 생성되는 디버깅 data는 area2에 배치한다. (*2)
- The Statistic Area contains a group of Statistic Descriptors.
- There are a total of up to 16 independent Event FIFO queues that may be configured between Telemetry Data Area 1 and Telemetry Data Area 2.
(*2) 성능에 영향을 미치는가에 대한 여부로 왜 나눌까? 예를 들어, host initiated telemetry 관점에서 생각해보자. host는 crash 상황이 아닌 디버깅을 위해서도, device에 수시로 host initiated telemetry data를 요청할 수 있다. 이 때, host가 device에 I/O를 하고 있는 도중일 수 있는데, 이 때 성능에 영향을 미치는 data까지는 generated 요청을 안하고 싶은 거 아닐까 싶다.
requirement
| data area | purpose | data area size | latency |
| 1 | periodic logging | 16KB | < max 5ms |
| 2 | logging for debug items that impact latency | - | > area1 requirement |
| 3 | optional vendor unique | - | - |
| 4 | optional vendor unique | - | - |
reference
nvme spec 2.0
ocp spec 2.5
'컴퓨터 > SSD' 카테고리의 다른 글
| [nvme] MSI(Message Signaled Interrupt) (0) | 2025.03.03 |
|---|---|
| [NVMe] CQ Entry - phase tag (0) | 2025.03.02 |
| [PCIe] Enumeration (0) | 2023.06.22 |
| [NVMe] Reservation (0) | 2023.06.07 |
| [NVMe] Feature (0) | 2023.05.21 |