1.1 Overview

NVMe interface는 host software가 non-volatile memory subsystem와 통신할 수 있도록 해준다.

NVMe는 PCIe interface를 사용하는 enterprise와 client SSD에 최적화되어 있다.

1.2 Scope

해당 spec은 NVM subsystem의 controller와 register interface를 정의한다.

세 종류의 Controller가 존재한다.

  1. I/O controllers

  2. Discovery controllers

  3. Administrative controllers

1.3 Outside of scope

1.4 Theory of Operation

NVMe Interface는 최적화된 command submission과 completion paths를 제공한다.

Key attributes

  • command submission 또는 completion path에서 uncacheable/MMIO register read가 필요하지 않다.

  • command submmision path에서 최대 하나의 MMIO register wrtie가 필요하다.

  • 최대 64K I/O queue 지원과 각 I/O queue는 64K개의 outstanding commands가 가능하다.

  • 각 I/O queue와 관련된 priority는 well-defined arbitration mechanism으로 조정 된다.

  • 4KB read 요청을 완료하기 위한 모든 정보는 64B command에 포함된다.

  • 효율적이고 streamlined command set을 가진다.

  • MSI / MSI-X와 interrupt 지원한다.

  • Multiple namespaces 지원한다.

  • SR-IOV처럼 효율적인 I/O virtualization을 지원한다.

  • Robust error reporting과 management capabilities

  • Multi path I/O와 namespace sharing을 지원한다.

NVMe controller는 single PCI function과 연관된다.

전체 controller에 적용되는 capabilities와 설정들은 Controller Capabilities (CAP) 레지스터와 Identify Controller data structure를 나타낸다.

하나의 namespace는 logical block으로 format된 non-volatile memory의 quantity이다.

NVMe controller는 namespace ID를 가지는 multiple namspaces를 지원한다.

Namspaces는 Namespace Management와 Namespace Attachment commands로 생성과 삭제가 된다.

Identify Namespace data structure는 특정 namespace의 capabilities와 설정을 나타낸다.

NVMe interface는 submission과 completion queue의 pair 형태를 기반으로 한다.

Commands는 host software에 의해 submission queue에 issue 된다.

Completions는 controller에 의해 completion queue에 issue 된다.

Multiple submiision queues는 동일한 completion queue를 이용한다.

Submission과 complition queues는 메모리에 할당 된다.

Admin submission과 이와 관련된 completion queeu는 controller 관리, I/O submission과 completion queues들의 생성과 삭제 및 aborting commands 등 control 목적을 위해 존재한다.

I/O command set은 I./O queue pair로 사용된다.

해당 spec에서는 I/O command set을 NVM command set으로 명시한다.

Queue pair

  • Host software는 controller가 지원하는 최대 개수의 queue를 생성한다.

  • queue 생성은 system configuration과 anticipated workload에 기반한다.

  • queue 생성의 종류는 1:1 mapping, n:1 mapping이 존재 한다.

Submission Queue와 Completion Queue를 이용한 I/O 처리 과정

  • Submission Queue (SQ)는 host software가 controller에 의해 실행되기 위한 commands를 전달하기 위한 고정된 크기의 circular buffer이다

  • 실행되어야 할 1~n개의 새로운 commands이 있다면 host software는 적절한 SQ Tail doorbell 레지스터를 업데이트 한다. 

  • 새로운 doorbell resister write가 있을때 이전의 SQ tail 값을 덮어 쓰기한다.

  • Controller는 SQ entries을 SQ에서 순차적으로 fetch하고 어떤 순서로(알고리즘에 기반) 실행한다.

  • 각 SQ entry는 command이고 64B의 크기를 가진다.

  • 메모리내 Physical 메모리는 data 전송을 위해 사용되며, Phsical Region Page (PRP) entries 또는 Scatter Gather Lists가 나타낸다.

  • 각 command는 두개의 PRP entires 또는 하나의 SGL segment를 포함한다.

  • 만약 data buffer를 위해 두개 이상의 PRP entires가 필요하다면, PRP Lists의 pointer가 PRP entires를 가리킨다.

  • 위와 동일하게 하나 이상의 SGL이 필요한 경우, SGL semgment는 다음 SGL segment pointer를 제공한다.

  • Completion Queue (CQ)는 completed command의 상태를 나타내기 위한 고정된 크기의 circular buffer이다. 

  • Completed command는 host software에서 할당된 SQ identifier와 comand identifier의 조합으로 식별된다.

  • Multiple SQ는 하나의 CQ를 사용한다. 

Multi-Path I/O and Namespace Sharing

  • Multi path I/O는 하나의 host와 하나의 namespace 사이간에 두개 이상의 독립된 path를 말한다.

  • 반면에 namespace sharing은 두개이상의 host가 다른 NVM controller를 사용하는 shared namespace에 접근하는 것을 말한다. 

1.5 Conventions

Abbreviations

  • RO : Read Only

  • RW : Read Write

  • R/W : Read Write. The value read may not be the last value written.

  • RWC : Read/Write '1' to clear

  • RWS : Read/Write '1' to set

  • Impl Spec : Implementation Spec

  • HwInit : The default state is dependent on NVMe controller and system configuration

  • Reset : This column indicates the value of the field after a reset

Use a '0's based value 

1.6 Definitions

Admin queue

  • identifier 0을 가지는 SQ와 CQ이다.

  • administrative commnad를 submit하고 completions을 받기 위해 admin SQ와 admin CQ는 pair를 이룬다.

Administrative controller

  • Host가 NVM subsystem을 관리할수 있도록 capabilities를 가지고 있는 controller

  • 해당 controller는 I/O queues를 가지지 않는다.

  • Logical blocks과 관련된 metadata 또는 data에 대한 접근을 제공한다.

  • namespaces를 지원한다.

Arbitration burst

  • Round robin 또는 weighted round robin을 사용하는 SQ로부터 한번에 처리 가능한 commands의 최대 수를 말한다.

Arbitration mechanism

  • SQ에서 Controller에 의해 수행되기 위한 command를 결정하기 위해 사용 된다.

Cache

  • NVM subsystem을 사용하는 data storage area

Command completion

  • Controller가 command를 처리한 command

  • 처리 결과 상태는 completion queue entry에 업데이트 된다.

Command submission

  • Command는 SQ Tail doorbell write는 처리되었을때 submmit 된다. 

Controller

  • Types

    • I/O controllers

    • Discovery controllers

    • Administrative controllers

  • Controller는 host에 의해 SQ에 submmit된 commands를 실행하고 completion queue에 completion을 업로드 한다.

  • 각 controller는 하나의 admin SQ와 하나의 admin CQ를 가진다.

  • Controller에 따라 하나 이상의 I/O queues를 가질수 있다.

directive

  • host와 NVM subsystem 또는 controller 정보를 교환하는 방법이다.

  • 정보는 Directive Send와 Directive Receive commands를 통해 전달된다.

  •  I/O commands의 subset은 I/O command와 관련된 정보를 통신하기 위해 Directive Type field와 Directive Specfic field를 포함한다.

Discovery controller

  • Host가 Discovery Log Page 정보를 받을수 있도록 하는 특성을 가진 controller이다.

  • I/O queues를 가지지 않는다. 

Emulated controller

  • Software에 정의된 NVMe controller이다. 

Endurance Group

  • NVM subsystem내 NVM 중 일부이다.

  • Group 으로 endurance가 관리된다.

extended LBA

  • 연속적인 LBA 전송과 관련된 memta가 전송될때 생성된다.

firmware slot

  • NVM subsystem내에서 firmware image를 저장하기 위해 사용되는 슬롯이다. 

  • NVM subsystem은 1~7개 firmware images를 저장할 수 있다.

I/O completion queue

  • I/O completion queue는 completion queue이다. 

  • 하나 이상의 SQ와 연관되며, I/O CQ identifiers는 64K까지 값을 가진다.

I/O submission queue

  • I/O submission queue는 SQ이다. 

  • Controller에 의해 실행하기 위한 I/O command를 SQ에 submit한다.

I/O controller

  • I/O queues를 가지는 controller이다. 

  • NVM storage를 접근하기 위해 사용된다.

LBA range

  • 연속적인 logical blocks의 범위이다.

Logical block

  • 가잔 작은 접근 가능한 data 단위이다.

Logical block address (LBA)

  • Logical block의 주소이다.

metadata

  • 특정 LBA 데이터에 대한 정보이다.

primary controller

  • Virtualization Management command를 지원하는 NVMe controller이다.

 

+ Recent posts