NVMe란? NVMe 개요



NVMe Overview

NVMe 란?

  • SSD나 HDD 같은 데이터 저장 장치에서 파일을 주고 받기 위한 일종의 규약
  • SATA와 PCIe 가 자동차가 움직이기 위한 도로라면 AHCI와 NVMe는 도로위에 설치된 신호등 같은 존재입니다.
  • SSD가 등장하게 되면서 하나의 커맨드를 완료할 때 9번의 레지스터 접근이 필요한 AHCI로는 속도를 커버할 수 없었다. 그로 인하여, 레지스터 접근을 2번으로 줄여서 해결했습니다.

지원 기능

  • 최적화된 Queuing Interface (64K commands per queue, up to 64K queues)
  • Streamlined & simple 명령어 set
  • MSI-X & Interrupt aggregation 지원
  • 멀티코어 지원
  • 최소화된 MMIO(Memory Mapped I/O) write

NVMe Queue

  • NVMe 는 원형 큐를 사용합니다. PCIe 메모리 안에 어디든지 큐는 위치할 수 있습니다. 주로 host의 메모리에 위치하고 있습니다.
  • 큐는 고정된 사이즈의 elements 집합으로 구성되어 있습니다.

Admin Queue for Admin Command Set

  • NVMe 컨트롤러 당 최대 4K elements queues를 가짐
  • I/O Queues와 컨트롤러/특징 관리를 구성할 때 사용합니다

I/O Queues for I/O Command Sets

  • 최대 64K elements per queues 를 가진 NVMe 컨트롤러가 최대 64K개의 queues
  • Submit/Complete I/O 명령어에 사용됩니다.

Submission Queues(SQ)

  • 호스트에서 컨트롤러로 가는 메세지의 Queues
  • 명령어를 submit 할 때 사용한다
  • SQ ID로 구분한다

Completion Queues(CQ)

  • 컨트롤러에서 호스트로 가는 메시지의 Queues
  • 완료된 명령어를 보낼 때 사용됨
  • CQ ID로 구분한다.
  • 각각의 CQ가 MSI-X 인터럽트를 독립적으로 가질 수 있다.

NVMe 명령어

image

NVMe 명령어 순서

  1. 명령어를 SQ에 집어 넣는다.
  2. Doorbell을 울린다.
  3. 명령어를 가져온다.
  4. 명령어를 수행한다.
  5. 완료된 명령어를 CQ에 집어 넣는다.
  6. 인터럽트를 발생시킨다.
  7. 프로세스를 완료한다.
  8. Doorbell을 울린다.

출처

  • http://dpg.danawa.com/bbs/view?boardSeq=231&listSeq=3068977&past=Y
  • https://www.flashmemorysummit.com/English/Collaterals/Proceedings/2013/20130812_PreConfD_Marks.pdf