NVMe

Persistent Event Log Page

PCIeMaster 2022. 3. 22. 18:03
Command type Admin   
Opcode 02h Get llog Page
Log Page Identifier (LID) 0Dh Persistent Event Log 

 

Get log Page 의 Log Identifier 0Dh 는 Persistent Event Log Page 를 가져온다. 

Persistent Evnet Log Page는 특정한 command 에 특화된 event가 아닌, 중다한 event 들에 대한 정보를 담고 있다. 이 정보들은 power cycle 이나, reset 을 해도 그대로 유지 된다. NVM subsystem 은 power 문제가 발생시에도, 정보의 손실이 최소화 되도록 설계되어 있어야 한다. 해당 log는 log 를 설명하는 header 와 0 또는 더 많은 persistent events 들로 구성 되어 있다. 

 

해당 log page는 NVM subsystem에 global 이다. 

 

sanitize 동작은 해당 log page를 변경할 수 있습니다.  하지만 NVMe 1.4 Spec.  에서는 이 부분을 정의하고 있지 않습니다. 

 

Persistent Event Log 는  더 나중에 발생한 event 가 먼저 발생한 event 보다 데이타의 앞쪽에 위치하는 순서로 보고 됩니다.  (먼저 나오는 것이 더 최신) NVM 서브시스템이 이벤트가 발생한 순서를 결정하는 방법은 벤더에 따라 다릅니다.

 

지원되는 event 개수는 밴더에 따라 다릅니다. 지원되는 최대 persistent event log size는 Identify Controller 의 PELS field 값과 동일합니다.  지원되는 이벤트 수와 지원되는 최대 사이즈는 해당 device 의 수명동안 해당 공간이 가득 차지 않을 정도로 충분히 커야 합니다. 

 

컨트롤러는 모든 지원되는 이벤트들에 대하여, 각 이벤트가 발생하는 순간 마다 모두 log로 남겨야 합니다. 다만 같은 이벤트가 각 벤더에서 결정한 임계값을 초과하는 빈도로 발생한다면, 모든 이벤트를 다 기록할 필요는 없다고 결정 할 수 있습니다. 

 

어떤 이벤트가 삭제 될지는 벤더에 따라 다릅니다 하지만  미래에 생길 event를 위한 room을 확보하는 차원에서 삭제가 필요합니다.  만약,

a) persistent event log 의 크기가, 최대 지원 가능 크기에 도달 했다. 

b) event의 개수가 최대 리포트 가능 event 수에 도달 했다, 또한 

c) 하나의 카테고리 안의 event 수가 , 해당 카테고리 내의 최대 리포트 가능 event 수에 도달 했다. 

 

persistent event log 의 reporting 내용은 벤더에 따라 다르다. 컨트롤러는 어떤 정보가 포함될 것인지 결정하여, 생성 한다. 

컨트롤러는 아래의 상황이 되기 전 까지는 persistent event log reporting 내용을 유지 해야 한다. 

a) 컨트롤러 프로세스들 

   a) Action Field를 02h로 설정한( Release Context) , Persistent Event Log page 를 요청하는 Get Log Page command,
   b) NVM subsystem reset 또는 
   c) Controller Level Reset
b)  지속적 이벤트 로그 페이지 데이터를 검색할 수 있을 만큼 충분히 긴 벤더 스페시픽 시간 동안.

 

호스트는 persistent event log page data를 읽은 이후, persistent event log 보고 내용을를 릴리즈 하기 위해서, Action field 를 02h로 설정한 Get Log Page command를 issue할 것이 기대 된다. 

 

 

Get Log Page 의 Command Dword 10 

  • Number of Dwords Lower (NUMDL) : 해당 16 bits은 command 에 의해 return 되는 dword 개수를 명시하는데 사용됩니다. 하지만 host software가 해당 log page 의 사이즈 보다 더 큰 size를 명시 했을 경우에, controller는 그 log page 전체를 통채로 return 한다. 
  • Retain Asynchronous Event (RAE) : 해방 1 bit 은 비동기 이벤트를 유지할 것인지, 클리어 할 것인지를 명시한다. 만일 해당 bit 이 '0'으로 설정 되면, 해당하는 비동기 이벤트가 command 가 성공적으로 완료되는 순간 클리어 된다. 만약 해당 bit 이 '1'로 설정 되면, command 가 성공적으로 완료 되어도, 해당 event 가 계속 유지 된다.  호스트 소프트웨어는, 비동기 이벤트를 사용하지 안는 log page 들에 대해서는 해당 bit을 반드시 '0'으로 설정해야 한다. 
  • Log Specific Field(LSP) :  Log page specific 정보를 명기한다. 
  • Log Page Identifier : 가져올 log page 의 식별자를 명기한다. 

Get Log Page 의 Command Dword 11 

Get Log Page 의 Command Dword 12 / Dword 13

  • Log Page Offset Lower (LPOL)  와 Log Page Offset Upper(LPOU) : 해당 log page 를 읽어 들일 때의 offset을 지정한다. LPOL 은 하위 32 bits , LPOU는 상위 32 bits 를 기리켜서, 총 64 bits 의 addressing offset을 줄 수 있다. 

Persistent Evnet Log Page 의 Log Specific Field(LSP)

  • Bit 9:8 을 사용하며, Action 속성을 정의합니다. 이는 controller 가 Get Log Page command를 수행하는 동안 어떠한 동작을 취하는 지를 명시 하는 것입니다. 
  • 00b : Read Log Data - persistent event log data 를 return 합니다. return 의 시작 점은 LPOU 와 LPOL fields 에 명시되어있는 offset 을 적용하여 결정됩니다. 만약 controller가 persistent event log reporting context를 가지고 있지 않다면, controller 는 해당 command 를 Command Sequence Error status code 를 주며 fail 시킵니다. 
  • 01b : Establish Context and Read Log Data - 해당 option과 함께라면, controller 는 
       a) persistent event log page data 의 길이를 결정 한다.
       b) persistent event log page data 에 저장될 events 셋트를 결정한다.
       c) 리포트를 하기 위해, persistent event log data 를 설명하는 정보를 저장하기 위해 persistent event log reporting context 를 확립힌다. 
    해당 내용을 확립한 이후, 컨트롤러는 persistent event log data를 return 한다. return의 시작 점읜 LPOU 와 LPOL fields 에 명시되어 있는 offset을 적용하여 결정됩니다. 

    만약 Get Log Page 커맨드의 Number odf dwords to return 이 0으로 설정 되었다면, log data 가 return 되지 않는다. 

    만약 persistent event log reporting context 가 이미 존재한다면, 해당 command 는 Command Sequence Error state 로 fail 된다. 
  • 10b : Release Context - 컨트롤러는 현재 존재하고 있는 persistent event log reporting context를 삭제 합니다. 현재 persistent event log reporting context 가 전혀 없어도 이것은 error로 간주되지 않습니다.



Persistent event log ; returned data 

먼저 512 bytes 의 persistent Event Log Header 가 return 되고, 연이어 Persistent Event 0 ~ N 까지의 log event 들이 return 됩니다. 

 

Log Identifier : 0Dh

Total Number of Events(TNEV) : event 엔트리 개수 

Total Log Length (TLL) :  가능한한 해더를 포함한 전체 persistent event log byte

Log Revision : 01h

Log Header Length : 필드는 뒤에 오는 로그 헤더 정보의 길이(바이트)를 포함합니다. 로그 헤더의 총 길이(바이트)는 이 필드의 값에 20을 더한 값입니다.

Timestamp : persistent event log reporting context 가 확립된 순간의 timestamp

Power on Hours (POH) : 해당 필드는 persisent event log 를 읽어 들인 순간의 power on hours 을 보여 준다. 해당 POH는 controller 에 power 가 가해 졌지만, non-operational state(= Low Power State) 에 들어선 기간은 포함되지 않는다.

 

Supported Events Bitmap : 해당 필드는 persisent event log events 의 각 항목들에 대한 지원 유무를 보여주는 bitmap을 제공합니다. 해당 bitmap의 각 bit은 각 event type을 가리킵니다. 해당 field 의 총 크기는 256 bits (32 bits) 입니다. 각 항목의 bit이 '1' 로 설정되어 있으면, 해당 event type이 지원됨을 의미하며, '0'이면 지원되지 않음을 의미합니다. 

 

Persistent Event Format 

Event Type : 

Event Header Length (EHL) : 이 필드는 뒤에 오는 이벤트 헤더 정보의 길이(바이트)를 포함합니다. 이벤트 헤더의 총 길이(바이트)는 이 필드의 값에 3을 더한 값입니다. 호스트는 이 필드의 값을 사용하여 Vendor Specific Information 필드의 시작 부분에 대한 오프셋을 계산해야 합니다.


Controller Identifier : ?


Event Timestapm:  해당 event 가 발생한 시점의 time stamp. 

 

Vendor Specific Information Length (VSIL) : 이 필드는 Vendor Specific Information 의 bytes 를 가리킵니다. 만일 Vendor Specific Information 이 없을 경우, 이 필드는 0h로 설정 됩니다. Vendor Specific Information 의 길이는 Event Length field에 포함됩니다. 

Event Length (EL) : Vendor Specific Infomration 의 length 와 , 만약 존재할 경우, 이어지는 persistent event log event data 의 length bytes를 가리킵니다. 전체 이벤트 lengh byte는 이 값 더하기 Event Header Length field + 3 입니다. 

 

 Vendor Specific Information : 벤더별 고유 정보를 담고 있습니다. 

 

Event Data: persistent event log events 정보를 담고 있습니다. 

 

'NVMe' 카테고리의 다른 글

[굿썸]Autonomous Power State Transition(APST)  (1) 2024.01.09
Power management  (1) 2023.11.24
Features and Log pages  (0) 2022.03.24