NVM Express (NVMe) 또는 비-휘발성 메모리 호스트 제어기 인터페이스 사양(Non-Volatile Memory Host Controller Interface Specification, 줄여서 NVMHCIS)은 PCI Express (PCIe) 버스를 통해 붙여진 비-휘발성 저장 매체에 접근하기 위한 열린 논리-장치 인터페이스 사양입니다. 약어 NVM은 비-휘발성 메모리를 나타내며, 이것은 종종 솔리드-스테이트 드라이브 (SSD), PCI Express (PCIe) 애드-인 카드, M.2 카드, 및 다른 형식을 포함하는 여러 물리적 형식 규격에서 오는 낸드 플래시 메모리입니다. 논리적 장치 인터페이스로써, NVM Express는 솔리드-스테이트 저장 장치의 낮은 대기-시간과 내부 병렬-처리를 활용하기 위해 설계되어 왔습니다.
그것의 설계에 의해, NVM Express는 호스트 하드웨어와 소프트웨어를 현대 SSD에서 가능한 병렬-처리의 수준을 완전히 활용하는 것을 허용합니다. 결과로써, NVM Express는 I/O 오버-헤드를 줄이고 다중 긴 명령 대기열, 및 감소된 대기 시간을 포함하여 이전의 논리-장치 인터페이스에 비해 다양한 성능 향상을 가져옵니다. 이전의 인터페이스 프로토콜은 요청과 데이터 전송 사이에 (CPU 작업에 비해) 매우 긴 지연이 존재하고, 데이터 속도가 RAM 속도보다 훨씬 더 느리고, 디스크 회전과 탐색 시간이 추가적인 최적화 요구-사항을 발생시키는 곳에서 훨씬 더 느린 하드 디스크 드라이브 (HDD)와 함께 사용하기 위해 개발되었습니다.
NVM Express 장치는 주로 표준-크기의 PCI Express 확장 카드의 형식과 U.2 커넥터 (이전에는 SFF-8639로 알려짐)를 통해 4-레인 PCI Express 인터페이스를 제공하는 2.5-인치 형식 규격 장치로 이용할 수 있습니다. 논리 장치 인터페이스로 NVM Express를 지원하는 SATA Express 및 M.2 사양을 사용하는 저장 장치는 NVMe에 대해 인기 있는 사용-사례이고 서버, 데스크톱 및 랩톱 모두를 위한 지배적인 형식의 솔리드-스테이트 저장이 되어 왔습니다.
Specifications
현재까지 출시된 NVMe 사양은 다음을 포함합니다:
- 1.0e (January 2013)
- 1.1b (July 2014)
- 1.2 (November 2014)
- 1.2a (October 2015)
- 1.2b (June 2016)
- 1.2.1 (June 2016)
- 1.3 (May 2017)
- 1.3a (October 2017)
- 1.3b (May 2018)
- 1.3c (May 2018)
- 1.3d (March 2019)
- 1.4 (June 2019)
- 1.4a (March 2020)
Background
역사적으로, 대부분의 SSD는 컴퓨터 시스템의 나머지 부분과의 인터페이스를 위해 SATA, SAS or 파이버 채널과 같은 버스를 사용했습니다. SSD가 대량 시장에서 유용하게 되었으므로, SATA는 개인용 컴퓨터에서 SSD를 연결하는 가장 전형적인 방법이 되었습니다; 어쨌든, SATA는 주로 기계식 하드 디스크 드라이브 (HDD)와의 인터페이스를 위해 설계되었었고, 그것은 시간이 지남에 따라 속도가 개선되었던 SSD에 점점 부적합해졌습니다. 예를 들어, 대량 시장이 주류로 채택된 지 약 5년 (2005–2010) 이내에 많은 SSD가 이미 하드 드라이브에서 유용한 비교적 느린 데이터 율로 인해 지연되었습니다—하드 디스크 드라이브와 달리 일부 SSD는 SATA의 최대 처리량에 의해 제한됩니다.
고성능 SSD는 NVMe 이전에 PCI Express 버스를 사용하였지만, 비-표준 사양 인터페이스를 사용하여 만들어져 왔습니다. SSD의 인터페이스를 표준화함으로써, 운영 시스템은 사양을 준수하는 모든 SSD에서 작동하기 위해 오직 하나의 공통적인 장치 드라이버가 필요합니다. 그것은 역시 각 SSD 제조업체가 특정 인터페이스 드라이버를 설계하기 위해 추가적인 자원을 사용할 필요가 없음을 의미합니다. 이것은 USB 대용량 저장 장치가 USB 대용량-저장 장치 클래스 사양을 따르고 모든 컴퓨터에서 작동하도록 제작된 방법과 유사하며, 장치-별 드라이버가 필요하지 않습니다.
NVM Express 장치는 후가쿠 슈퍼컴퓨터, 서밋 슈퍼컴퓨터 및 시에라 슈퍼컴퓨터, 등과 같은 많은 선도하는 슈퍼컴퓨터에서 버스트 버퍼 저장소의 빌딩 블록으로 역시 사용됩니다.
History
비-휘발성 메모리를 접근하는 새로운 표준의 첫 번째 세부 사항은 NVMHCI가 메모리 (플래시) 칩 측에 Open NAND Flash Interface Working Group (ONFI)을 가졌던 제안된 아키텍처 설계의 호스트-측 프로토콜로 표시되었을 때 Intel Developer Forum 2007에서 나타났습니다. 인텔이 이끄는 NVMHCI 워킹 그룹은 그 해에 구성되었습니다. NVMHCI 1.0 사양은 2008년 4월에 완성되었고 인텔의 웹 사이트에 공개되었습니다.
NVMe에 대한 기술 작업은 2009년 하반기에 시작되었습니다. NVMe 사양은 90개 이상의 회사로 구성된 NVM Express Workgroup에 의해 개발했었습니다; 인텔의 Amber Huffman이 워킹 그룹의 의장이었습니다. 사양의 버전 1.0은 2011년 3월 1일에 출시되었으며, 사양의 버전 1.1은 2012년 10월 11일에 출시되었습니다. 버전 1.1에 더해진 주요 특색은 (이름-공간 공유와 함께) 다중-경로 I/O 및 임의-길이 분산-수집 I/O입니다. 향후 개정이 이름공간 관리를 크게 향상할 것으로 예상됩니다. 그것의 특색 초점 때문에, NVMe 1.1은 처음에는 "엔터프라이즈 NVMHCI"이라고 불렸습니다. 버전 1.0e라고 불리는, 기본 NVMe 사양에 대해 업데이트가 2013년 1월에 출시되었습니다. 2011년 6월에서, 7개 회사에 의해 선도되는 프로모터 그룹이 결성되었습니다.
최초의 상업적으로 유용한 NVMe 칩셋은 2012년 8월에서 Integrated Device Technology (89HF16P04AG3 및 89HF32P08AG3)에 의해 출시되었습니다. 최초의 NVMe 드라이브, 삼성의 XS1715 엔터프라이즈 드라이브는 2013년 7월에 발표되었습니다; 삼성에 따르면, 이 드라이브는 이전 엔터프라이즈 제품보다 6배 더 빠른 3GB/s의 읽기 속도를 지원했습니다. 2013년 11월에 출시된 LSI SandForce SF3700 제어기 제품군은 역시 NVMe를 지원합니다. 이 제어기를 사용하는 킹스턴 HyperX "프로슈머" 제품은 2014년 소비자 가전 전시회에서 선보였고 유사한 성능을 약속했습니다. 2014년 6월에서, 인텔은 DC P3700 시리즈, DC P3600 시리즈, 및 DC P3500 시리즈를 포함하는 PCI Express 버스를 통해 호스트와 인터페이스하는 인텔 SSD 데이터 센터 제품군, 그들 최초의 NVM Express 제품을 발표했습니다. 2014년 11월부터, NVMe 드라이브가 상업적으로 유용합니다.
2014년 3월에서, 그 그룹은 NVM Express, Inc.로 통합되었으며, 2014년 11월 현재 업계 전반에 걸쳐 65개 이상의 회사로 구성됩니다. NVM Express 사양은 NVM Express, Inc.에 의해 소유되고 유지-관리하며, 이것은 업계 표준으로서 NVM Express에 대한 업계 인식을 촉진합니다. NVM Express, Inc.는 Cisco, Dell, EMC, HGST, Intel, Micron, Microsoft, NetApp, Oracle, PMC, Samsung, SanDisk 및 Seagate를 포함하는 Promoter Group에서 선정한 13명의 이사회에 의해 감독됩니다.
2016년 9월에서, CompactFlash Association은 NVMe를 사용하는 새로운 메모리 카드 사양, CFexpress를 출시할 것이라고 발표했습니다.
Form factors
AIC, U.2, U.3, M.2 등과 같은 NVMe 솔리드-스테이트 드라이브의 많은 형식 규격이 있습니다.
AIC (add-in card)
거의 모든 초기 NVMe 솔리드-스테이트 드라이브는 PCIe 2.0 또는 3.0 인터페이스를 갖는 HHHL (절반 높이, 절반 길이) 또는 FHHL (전체 높이, 절반 길이) AIC입니다. HHHL NVMe 솔리드-스테이트 드라이브 카드는 서버의 PCIe 슬롯에 쉽게 삽입하는 것입니다.
U.2 (SFF-8639)
이전에 SFF-8639로 알려진 U.2는 솔리드-스테이트 드라이브를 컴퓨터에 연결하기 위한 컴퓨터 인터페이스입니다. 그것은 최대 4개의 PCI Express 레인을 사용합니다. 유용한 서버는 최대 4개의 U.2 NVMe 솔리드-스테이트 드라이브를 결합할 수 있습니다.
U.3 (SFF-8639)
U.3는 U.2 사양을 기반으로 하고 같은 SFF-8639 커넥터를 사용합니다. 그것은 SAS, SATA 및 NVMe 지원을 단일 제어기로 결합한 '삼중-모드' 표준입니다. U.3는 펌웨어 지원이 유용한 다른 드라이브 사이의 핫스왑을 역시 지원할 수 있습니다. U.3 드라이브는 여전히 U.2와 역-호환되지만, U.2 드라이브는 U.3 호스트와 호환되지 않습니다.
M.2
이전에 Next Generation Form Factor (NGFF)로 알려진, M.2는 M.2 NVMe 솔리드-스테이트 드라이브 컴퓨터 버스를 사용합니다. M.2 커넥터를 통해 제공되는 인터페이스는 PCI Express 3.0 또는 PCI Express 4.0 (최대 4개 레인)입니다.
NVMe-oF
NVM Express over Fabrics (NVMe-oF)는 장치가 PCIe 버스에 (또는 PCIe 스위치를 통해 PCIe 버스로) 직접 연결되는 NVMe와 달리, 원격 장치를 연결하기 위해 네트워크에 걸쳐 전송 프로토콜을 사용하는 개념입니다. 2014년 9월에서, 파이버 채널 (FC)에 걸쳐 NVMe를 사용하는 표준이 제안되었었고, 이러한 조합은 종종 FC-NVMe (또는 때때로 NVMe/FC)로 참조됩니다. NVMe-oF는 한 컴퓨터를 여러 전송 프로토콜에 걸쳐 원격 직접 메모리 접근을 통해 또 다른 컴퓨터에 부착된 블록-수준 저장 장치에 접근하는 것을 허용하는 통신 프로토콜입니다:
- FC, FC-NVMe
- TCP, NVMe/TCP
- Ethernet, RoCE (over converged Ethernet) and iWARP (over traditional Ethernet)
- InfiniBand, NVMe over InfiniBand
- Other next-generation transport protocols.
NVMe over Fabrics에 대해 표준은 2016년에 NVM Express, Inc.에서 발표했습니다.
다음 드라이버는 NVMe-oF 프로토콜을 구현합니다:
- 리눅스 NVMe-oF initiator 및 대상 드라이버
- Storage Performance Development Kit (SPDK) NVMe-oF initiator 및 대상 드라이버
- 마이크로소프트 윈도우에 대해 NVMe-oF initiator 드라이버
리눅스 커널 5.0부터 시작하여 네이티브 지원이 NVMe/TCP에 대해 더해져 왔습니다.
Comparison with AHCI
Advanced Host Controller Interface (AHCI)는 광범위한 소프트웨어 호환성의 이점을 가지지만, PCI Express 버스를 통해 연결된 SSD와 함께 사용될 때, 최적의 성능을 제공하지 못한다는 단점을 가집니다. 논리적-장치 인터페이스로서, AHCI는 시스템에서 호스트 버스 어댑터 (HBA)의 목적이 회전하는 자기 매체를 기반으로 하는 훨씬 더 느린 저장소 하위-시스템과 CPU/메모리 하위-시스템을 연결하는 것이었을 때 개발되었습니다. 결과로써, AHCI는 SSD 장치와 함께 사용될 때 특정 비-효율성을 가져오며, 이것은 회전하는 미디어보다 훨씬 더 RAM처럼 작동합니다.
NVMe 장치 인터페이스는 PCI Express SSD의 낮은 대기-시간과 병렬-처리를 활용하고, 최신 CPU, 플랫폼과 응용의 병렬-처리를 보완하여, 처음부터 설계되어 왔습니다. 높은 수준에서, AHCI를 넘어 NVMe의 기본 장점은 호스트 하드웨어와 소프트웨어에서 병렬-처리를 활용하기 위한 그것의 능력과 관련이 있으며, 명령 대기열 깊이의 차이, 인터럽트 처리의 효율성, 캐시할 수 없는 레지스터 접근의 숫자, 등에 의해 나타나며, 다양한 성능 향상을 결과로 초래합니다.
아래 테이블은 NVMe와 AHCI 논리-장치 인터페이스 사이의 높은-수준의 차이점을 요약합니다.
AHCI 및 NVMe의 높은-수준 비교 | ||
AHCI | NVMe | |
최대 대기열 깊이 | 하나의 명령 대기열; 대기열-당 32 명령 |
65535 대기열; 대기열-당 65536 명령 |
캐시 할 수 없는 레지스터 액세스 (각각 2000 사이클) |
비-대기열 명령-당 여섯; 대기열 명령-당 아홉 |
명령-당 둘 |
MSI-X 및 인터럽트 조향 |
단일 인터럽트; 조향 없음 |
2048 MSI-X 인터럽트 |
병렬-처리 및 다중 쓰레드 |
명령을 처리하기 위해 동기화 잠금을 요구함 |
잠금 없음 |
4KB 명령에 대한 효율성 |
명령 매개 변수는 두 개의 직렬화된 호스트 DRAM 가져오기를 요구함 |
하나의 64-바이트 가져오기에서 명령 매개 변수를 얻음 |
Operating system support
- Chrome OS : 2015년 2월 24일에, NVM Express 장치로부터 부팅에 대해 지원이 Chrome OS에 더해졌습니다.
- DragonFly BSD : NVMe를 지원하는 DragonFly BSD의 첫 번째 출시는 버전 4.6입니다.
- FreeBSD : 인텔은 FreeBSD의 헤드 및 안정판/9 가지에 대해 NVM Express 드라이버를 후원했습니다. nvd(4) 및 nvme(4) 드라이버는 2015년에서 FreeBSD 버전 10.2 이후 기본적으로 GENERIC 커널 구성에 포함됩니다.
- Genode : 소비자-등급 NVMe에 대해 지원이 18.05 출시의 일부로 Genode 프레임워크에 더해졌습니다.
- Haiku : Haiku 2019년 4월 18일에 NVMe에 대한 지원을 받았습니다.
- illumos : illumos는 2014년 10월 15일에 NVMe에 대한 지원을 받았습니다.
- iOS : iPhone 6S 및 6S Plus의 출시와 함께, 애플은 스마트폰에서 PCIe에 걸쳐 NVMe의 최초 모바일 배포를 도입했습니다. 애플은 PCIe에 걸쳐 역시 NVMe를 사용하는 1-세대 iPad Pro and 1-세대 iPhone SE의 출시와 함께 이들 출시를 따랐습니다.
- 리눅스 : 인텔은 2011년 3월 3일에 리눅스에 대해 NVM Express 드라이버를 발표했으며, 이것은 2012년 1월 18일에 리눅스 커널 메인라인에 병합되었었고 2012년 3월 19일에 리눅스 커널 버전 3.3의 일부로 출시되었습니다.
- macOS : 애플은 Yosemite에서 NVM Express에 대한 소프트웨어 지원을 도입했습니다. NVMe 하드웨어 인터페이스는 2016 MacBook와 MacBook Pro에 도입되었습니다.
- NetBSD : NetBSD는 NetBSD 8.0에서 NVMe에 대한 지원을 추가했습니다. 그 구현은 OpenBSD 6.0에서 파생되었습니다.
- OpenBSD : OpenBSD에서 NVMe를 지원하는 데 필요한 개발 작업은 이전에 USB 2.0과 AHCI 지원을 담당했던 선임 개발자에 의해 2014년 4월에 시작했습니다. NVMe에 대한 지원은 OpenBSD 6.0 출시에서 활성화되었습니다.
- Solaris : 솔라리스는 오라클 솔라리스 11.2에서 NVMe에 대한 지원을 받았습니다.
- VMware : 인텔은 vSphere 6.0과 그 이후의 빌드에 포함된 VMware에 대한 NVMe 드라이버를 제공해 왔으며, 다양한 NVMe 장치를 지원합니다. vSphere 6 업데이트 1부터, VMware의 VSAN 소프트웨어-정의 저장 하위-시스템은 NVMe 장치를 역시 지원합니다.
- Windows : 마이크로소프트는 윈도우 8.1과 윈도우 서버 2012 R2에 NVMe에 대한 네이티브 지원을 더했습니다. 윈도우 7과 윈도우 서버 2008 R2에 대해 네이티브 드라이버가 업데이트에 더해져 왔습니다. 추가적으로, 윈도우 XP와 Vista에 대한 지원은 마찬가지로 비공식적으로 더해졌습니다. OpenFabrics Alliance는 NVMe 워크그룹, 특히 IDT, 인텔 및 LSI에서 여러 프로모터 회사에 의해 제출된 기준 코드에서 개발된 윈도우 7/8/8.1 및 윈도우 서버 2008R2/2012/2012R2에 대해 오픈-소스 NVMe 윈도우 드라이버를 유지-보수합니다. 현재 출시는 2016년 12월로부터 1.5입니다.
Software support
QEMU NVMe는 2013년 8월 15일에 출시된 버전 1.6 이후 QEMU에 의해 지원됩니다. UEFI UEFI에 대해 오픈 소스 NVMe 드라이버는 SourceForge에서 유용합니다.
Management tools
nvmecontrol
nvmecontrol 도구는 FreeBSD에 대한 명령 줄에서 NVMe 디스크를 제어하기 위해 사용됩니다. 그것은 FreeBSD 9.2에서 추가되었습니다.
nvme-cli
Linux에 대해 NVM-Express 사용자 공간 도구.
External links
- Official website
- LFCS: Preparing Linux for nonvolatile memory devices, LWN.net, April 19, 2013, by Jonathan Corbet
- Multipathing PCI Express Storage, Linux Foundation, March 12, 2015, by Keith Busch
- Introduction of NVMe, NVMe-oF and RDMA for network engineers, August 2020, by Jerome Tissieres