Intro
Protection Information(PI)란? Host와 NVMe Device 간의 data transfer가 있는 command에 대해서, E2E Data Protection을 하기 위한 metadata 내의 information이다. 이번 포스팅에서는 Host의 PI 설정, NVMe Device의 PI processing 등을 이해하고자 한다.
Background
NVMe의 PI는 E2E Protect을 위해서, CRC-16 error detection 메커니즘을 사용한다. PI 필드에 16 bit CRC checksum 값이 있다. 예를 들어, Host에서 Device에 data를 전송하는 경우를 생각해 보자. Host는 전송하고자 하는 data와 CRC-16 값을 PI에 실어서 보낸다. Device는 전송받은 data를 가지고 CRC-16을 계산하고, Host로부터 받은 CRC-16 값과 같은지 확인할 수 있다. 값이 다른 경우에는 E2E Protection에 문제가 있음을 의미한다.
PI 설정을 위한 Command내 Field
Identify Namespace Struct(IDNS) Command
E2E Data Protection Capabilities (DPC)
PI Type 1, 2, 3을 지원하는가?
metadata의 맨 앞에 PI 8 bytes를 지원하는가?
metadata의 맨 뒤에 PI 8 bytes를 지원하는가?
E2E Data Protection Type Settings (DPS)
PI Type이 1, 2, 3 중에 어느 것으로 설정되어 있는지? 아니면 설정이 안되어 있는지?
PI 8 bytes가 metadata의 위치가 맨 앞 또는 뒤로 설정되어 있는지?
LBA Format Data Structure의 Metadata Size (MS)
이는 metadata의 bytes 크기를 의미한다.
0은 metadata를 지원하지 않는다.
metadata를 지원한다면, NS는 metadata를 LBA data에 연속적으로 설정하거나, 별도의 buffer에 저장하도록 설정할 수 있다. DPS에서 E2E가 enable이라면, metadata의 맨 앞 또는 뒤에 PI 8 bytes가 있다.
Format NVM Command
Protection Information Location (PIL)
PI가 enabled이면, PI 8 byte가 metadata의 맨 앞인지 뒤인지 위치를 설정한다.
Protection Infomation (PI)
PI를 enable할지 disable 할지, enable 한다면 PI Type은 어떻게 할지 설정한다.
Metadata Settings (MSET)
metadata를 LBA data에 연속적으로 설정하거나, 별도의 buffer에 저장하도록 설정한다.
E2E PI Field
data transfer를 하는 command는 E2E PI Field를 가지고 있다.
command마다 PI Action과 Check 대상을 설정한다.
Protection Information Action (PRACT)
해당 필드와 metadata size에 조합으로, PI processing이 결정된다.
Protection Information Check (PRCHK)
PI는 Guard field, Application Tag field, Logical Block Reference Tag field가 있다.
무엇을 check 하도록 enable 할 것인지를 설정한다.
Metadata Handling
여기서 잠깐!!! PI와 metadata가 무슨 상관이지? PI가 metadata 내에 포함된다. 그러므로, metadata를 NVMe Spec에서 어떻게 handling 하는지, 이해가 필요하다.
주 내용은,
controller는 LBA당 metadata를 지원할 수 있다.
host가 metadata를 어떻게 만드는 지에 대한 요구사항은 없다. 일반적으로 E2E PI를 전송할 뿐이다.
그렇다면 metadata를 어떻게 전송할까? 이는 Format NVM Command의 MSET에 의해서 결정된다.
case1. LBA Data에 연속해서 metadata를 전송한다; Data Integrity Field (DIF)

case2. LBA Data Buffer와 MetaData Buffer를 분리한다; Data Integrity Extension (DIX)

Protection Information
format (8 bytes)

Guard는 LBA data의 CRC-16 값이다.
Processing
LBA data와 metadata가 controller를 통과할 때, metadata내의 PI가 check 된다.
controller가 host로부터 data를 받는다. 그러고, 받은 data에 문제가 없는지 check 한다.
check 한 결과가 수신한 metadata내의 결과와 다른 경우,
예를 들어, write command를 보자.
- PRACT가 0이면, NVM의 metadata field와 Host buffer의 metadata 크기가 같다.

- PRACT가 1이면, metadata size에 따라서 다른데,

TODO
- CRC-16 checksum은 어떻게 계산할까?
reference
- NVMe Spec 1.4
- chatGPT
'컴퓨터 > SSD' 카테고리의 다른 글
| [PCIe] Enumeration (0) | 2023.06.22 |
|---|---|
| [NVMe] Reservation (0) | 2023.06.07 |
| [NVMe] Feature (0) | 2023.05.21 |
| [PCIe] Reset (1) | 2023.05.01 |
| [NVMe] Controller Initialization (1) | 2023.04.11 |