NVM 익스프레스

위키백과, 우리 모두의 백과사전.

비휘발성 메모리 호스트 컨트롤러 인터페이스 사양
Non-Volatile Memory Host Controller Interface Specification
상태출판됨
시작 연도2011년(13년 전)(2011)
마지막 버전2.0c
2022년 10월[1]
조직NVM Express Work Group (incorporated as NVM Express in 2014)
약어NVMe
웹사이트nvmexpress.org

NVM 익스프레스(NVM Express, NVMe) 또는 비휘발성 메모리 호스트 컨트롤러 인터페이스 사양(Non-Volatile Memory Host Controller Interface Specification, NVMHCI)은 PCI 익스프레스(PCIe) 버스에 부착된 비휘발성 기억 매체 접근을 위한 논리 장치 인터페이스 사양이다. "NVM"은 "비휘발성 메모리"(non-volatile memory)를 뜻하며, 보통 솔리드 스테이트 드라이브(SSD) 형태로 출시되는 플래시 메모리를 가리킨다.

설계 상, NVM 익스프레스는 현대의 SSD에서 볼 수 있는 여러 수준의 병렬화를 허용하며 이로써 호스트 하드웨어와 소프트웨어에 의해 완전히 이용될 수 있다. 그 결과, NVM 익스프레스는 입출력 부하를 줄이고 길이가 긴 다중 명령 큐, 감소된 레이턴시를 포함하여 이전 논리 장치 인터페이스에 비해 다양한 성능 개선을 이루게 된다.

NVM 익스프레스 장치는 표준 크기의 PCI 익스프레스 확장 카드[2], U.2 단자(이전 이름: SFF-8639)를 통해 4 레인의 PCI 익스프레스 인터페이스를 제공하는 2.5인치 폼 팩터 장치로 존재한다.[3][4] 내부적으로 마운트된 컴퓨터 확장 카드를 위한 SATA 익스프레스 스토리지 장치와 M.2 사양 또한 NVM 익스프레스를 논리 장치 인터페이스로서 지원한다.[5][6]

역사[편집]

논리 장치 인터페이스로서 NVM 익스프레스를 사용하는 SSD. PCI 익스프레스 3.0 ×4 확장 카드 형태 (전면 및 후면)

비휘발성 메모리를 접근하는 새로운 표준에 대한 상세 내용은 인텔 개발자 포럼 2007에서 처음 등장하였고, 이 때 NVMHCI가 메모리 (플래시) 칩 사이드의 ONFI(Open NAND Flash Interface Working Group)가 포함된 제안 형태의 아키텍처 디자인의 호스트 사이드 프로토콜로 모습을 드러냈다.[7] 인텔이 주도한 NVMHCI 워킹 그룹은 그 해에 창설되었다. NVMHCI 1.0 사양은 2008년 4월 완료되었고 인텔의 웹 사이트에 공개되었다.[8][9][10]

NVMe에 대한 기술적인 작업은 2009년 후반에 시작되었다.[11] NVMe 사양은 NVM 익스프레스 워크그룹에 의해 개발되었고, 90곳이 넘는 회사로 구성되었다. 인텔의 Amber Huffman는 그룹의 의장이었다. 버전 1.0의 사양은 2011년 3월 1일에 공개되었고[12], 버전 1.1의 사양은 2012년 10월 11일에 공개되었다.[13] 버전 1.1에 추가된 주요 기능으로는 멀티패스 입출력 (이름공간 공유 포함)과 임의 길이 scatter-gather 입출력이다. 차기 버전은 이름공간 관리가 상당히 개선될 것이다. 기능에 초점을 두었기 때문에 NVMe 1.1은 처음에 "엔터프라이즈 NVMHCI"로 불렸다.[14] 버전 1.0e의 기반 NVMe 사양의 업데이트는 2013년 1월에 공개되었다.[15] 2011년 6월에 7개 회사가 주도하는 프로모터 그룹은 형성되었다.

최초로 상용화된 NVMe 칩셋은 2012년 8월 Integrated Device Technology(IDT, 89HF16P04AG3 및 89HF32P08AG)가 출시하였다.[16][17] 최초의 NVMe 드라이브인 삼성의 XS1715 엔터프라이즈 드라이브는 2013년 7월에 발표되었고, 삼성에 따르면 이 드라이브는 과거 기업에 제공되었던 것 보다 6배 더 빠른 3 GB/초의 읽기 속도를 지원하였다.[18] 2013년 11월에 출시된 LSI 샌드포스 SF3700 컨트롤러 계열도 NVMe를 지원한다.[19]

AHCI와의 비교[편집]

고급 호스트 컨트롤러 인터페이스(AHCI) 인터페이스는 폭넓은 소프트웨어 호환성의 이점이 있지만, 단점으로는 PCI 익스프레스 버스를 통해 연결된 SSD와 함께 사용할 때 최적의 성능을 전달하지 않는다는 것이다. 논리 인터페이스로서 AHCI는 시스템의 호스트 버스 어댑터(HBA)의 목적이 CPU/메모리 하위 시스템을 회전하는 자기 매체 기반의 훨씬 더 느린 스토리지 하위 시스템과 연결하는 것이었던 시기에 개발되었다. 그 결과, AHCI는 회전하는 매체 보다 DRAM의 동작에 더 가까운 SSD 장치와 함께 사용할 때 특정한 비효율성이 유입되었다.[5]

NVMe 장치 인터페이스는 밑바닥부터 다시 설계하여, PCI 익스프레스 SSD의 낮은 레이턴시와 병렬화를 이용하고 동시대 CPU, 플랫폼, 응용 프로그램의 병렬화를 보완한다.

높은 수준에서 AHCI 대비 NVMe의 기본적인 이점은 호스트 하드웨어와 소프트웨어의 병렬화를 이용할 수 있다는 것과 관련되며, 이는 명령 큐의 깊이의 차이, 인터럽트 처리의 효율성, 캐시 불가능한 레지스터 접근의 수 등의 차이에서 분명하게 볼 수 있으며, 그 결과 다양한 성능 개선을 이루었다.[5][20]:17–18

아래의 표는 NVMe와 AHCI의 논리 장치 인터페이스 간 차이를 요약한 것이다.

AHCI와 NVMe의 비교[5]
  AHCI NVMe
최대 큐 깊이 하나의 명령 큐
큐 하나 당 32개의 명령
65535개의 큐[21]
큐 하나 당 65536개의 명령
캐시 불가능한 레지스터 접근 수
(각각 2000 사이클)
큐에 없는 명령마다 6개
큐가 있는 명령마다 9개
명령 당 2개
MSI-X
와 인터럽트 스티어링
단일 인터럽트
스티어링 없음
2048개의 MSI-X 인터럽트
병렬화
및 다중 스레드
명령 발행을 위해
동기화 락이 필요
락 없음
4 KB 명령의
효율성
명령 매개변수는
2개의 직렬화된 호스트 DRAM 페치 필요
하나의 64바이트 페치의
명령 매개변수를 가져옴

운영 체제 지원[편집]

리눅스 커널의 스토리지 스택의 다양한 계층 안에 있는 NVMe 데이터 경로와 다중 내부 큐의 위치.[22]
크롬 OS
2015년 2월 24일, NVM 익스프레스 장치의 부팅 지원이 크롬 OS에 추가되었다.[23][24]
FreeBSD
인텔은 FreeBSD의 head 및 stable/9 브랜치용 NVM 익스프레스 드라이버를 지원하였다.[25][26] nvd(4)와 nvme(4) 드라이버가 FreeBSD 버전 10.2 이후로 GENERIC 커널 구성에 기본으로 포함되어 있다.[27]
하이쿠
NVMe의 하이쿠 지원은 예정되어 있으나 아직 완료되지 않았다.[28]
illumos
illumos는 2014년 10월 15일 NVMe의 지원을 받았다.[29]
iOS
아이폰 6S, 6S 플러스의 출시와 함께 애플은 [스마트폰에 PCIe를 통한 NVMe의 첫 모바일 기능을 도입하였다.[30]
리눅스
인텔은 리눅스용 NVM 익스프레스 드라이버[31][32][33]를 출시하였고 2012년 3월 19일 리눅스 커널 버전 3.3 출시와 함께 리눅스 커널 주류에 통합되었다.[34]
OpenBSD
OpenBSD의 NVMe 지원에 필요한 개발 작업이 과거 USB 2.0, AHCI 지원을 맡았던 개발자에 의해 2014년 4월 시작되었다.[35] NVMe의 지원은 OpenBSD 6.0 릴리스에서 활성화되었다.[36]
OS X
OS X 요세미티의 10.10.3 업데이트에서 애플은 NVM 익스프레스의 지원을 도입하였다. 레티나 맥북은 논리 장치 인터페이스로서 PCIe를 통한 NVMe를 사용한다.[37]
솔라리스
솔라리스는 오라클 솔라리스 11.2에서 NVMe의 지원을 받았다.[38]
VMware
인텔은 VMware용 NVMe 드라이버를 제공하였으며[39], vSphere 6.0 이상 빌드에 포함되어 있고 다양한 NVMe 장치를 지원한다.[40]
윈도우
마이크로소프트는 윈도우 8.1윈도우 서버 2012 R2에 NVMe의 네이티브 지원을 추가하였다.[20][41] 윈도우 7윈도우 서버 2008 R2의 네이티브 드라이버는 업데이트에 추가되었다.[42]

소프트웨어 지원[편집]

QEMU
NVMe는 2013년 8월 15일 출시된 버전 1.6부터 QEMU에 의해 지원된다.[43]
UEFI
UEFI용 오픈 소스 NVMe 드라이버는 소스포지를 통해 이용 가능하다.[44]

같이 보기[편집]

각주[편집]

  1. “NVM Express Base Specification 2.0c” (PDF). 《NVM Express》. 2022년 10월 4일. 2023년 5월 10일에 확인함. 
  2. Drew Riley (2014년 8월 13일). “Intel SSD DC P3700 800GB and 1.6TB Review: The Future of Storage”. 《tomshardware.com》. 2014년 11월 21일에 확인함. 
  3. “Intel Solid-State Drive DC P3600 Series” (PDF). Intel. 2015년 3월 20일. 18, 20–22쪽. 2015년 4월 11일에 확인함. 
  4. Paul Alcorn (2015년 6월 5일). “SFFWG Renames PCIe SSD SFF-8639 Connector To U.2”. Tom's Hardware. 2015년 6월 9일에 확인함. 
  5. Dave Landsman (2013년 8월 9일). “AHCI and NVMe as Interfaces for SATA Express Devices – Overview” (PDF). SATA-IO. 2013년 10월 5일에 원본 문서 (PDF)에서 보존된 문서. 2013년 10월 2일에 확인함. 
  6. Paul Wassenberg (2013년 6월 25일). “SATA Express: PCIe Client Storage” (PDF). SATA-IO. 2013년 10월 4일에 원본 문서 (PDF)에서 보존된 문서. 2014년 11월 21일에 확인함. 
  7. “Speeding up Flash... in a flash”. The Inquirer. 2007년 10월 13일. 2009년 9월 18일에 원본 문서에서 보존된 문서. 2014년 1월 11일에 확인함. 
  8. “보관된 사본” (PDF). 2016년 4월 17일에 원본 문서 (PDF)에서 보존된 문서. 2016년 8월 19일에 확인함. 
  9. “Flash new standard tips up”. The Inquirer. 2008년 4월 16일. 2014년 1월 11일에 원본 문서에서 보존된 문서. 2014년 1월 11일에 확인함. 
  10. http://www.flashmemorysummit.com/English/Collaterals/Proceedings/2008/20080813_T2A_Huffman.pdf
  11. http://www.flashmemorysummit.com/English/Collaterals/Proceedings/2013/20130813_A12_Onufryk.pdf
  12. “New Promoter Group Formed to Advance NVM Express” (PDF). 《Press release》. 2011년 6월 1일. 2013년 9월 18일에 확인함. 
  13. Amber Huffman editor (2012년 10월 11일). “NVM Express Revision 1.1” (PDF). 《Specification》. 2013년 9월 18일에 확인함. 
  14. David A. Deming (2013년 6월 8일). “PCIe-based Storage” (PDF). 《snia.org》. 2013년 9월 20일에 원본 문서 (PDF)에서 보존된 문서. 2014년 1월 12일에 확인함. 
  15. Amber Huffman editor (2013년 1월 23일). “NVM Express Revision 1.0e” (PDF). 《Specification》. 2013년 9월 18일에 확인함. 
  16. “IDT releases two NVMe PCI-Express SSD controllers”. The Inquirer. 2012년 8월 21일. 2012년 8월 24일에 원본 문서에서 보존된 문서. 2014년 1월 11일에 확인함. 
  17. “IDT Shows Off The First NVMe PCIe SSD Processor and Reference Design - FMS 2012 Update”. The SSD Review. 2012년 8월 24일. 2014년 1월 11일에 확인함. 
  18. “Samsung Announces Industry’s First 2.5-inch NVMe SSD | StorageReview.com - Storage Reviews”. 《StorageReview.com》. 2013년 7월 18일. 2014년 1월 10일에 원본 문서에서 보존된 문서. 2014년 1월 11일에 확인함. 
  19. “LSI SF3700 SandForce Flash Controller Line Unveiled | StorageReview.com - Storage Reviews”. 《StorageReview.com》. 2013년 11월 18일. 2014년 1월 11일에 원본 문서에서 보존된 문서. 2014년 1월 11일에 확인함. 
  20. Andy Herron (2013). “Advancements in Storage and File Systems in Windows 8.1” (PDF). 《snia.org》. 2014년 1월 10일에 원본 문서 (PDF)에서 보존된 문서. 2014년 1월 11일에 확인함. 
  21. “NVM Express specification revision 1.2” (PDF). section 1.4 Theory of Operation. 
  22. Werner Fischer; Georg Schönberger (2015년 6월 1일). “Linux Storage Stack Diagram”. Thomas-Krenn.AG. 2015년 6월 8일에 확인함. 
  23. “NVM Express  » ChromeOS adds boot support for NVM Express”. 《nvmexpress.org》. 2015년 3월 21일에 확인함. 
  24. “4f503189f7339c667b045ab80a949964ecbaf93e - chromiumos/platform/depthcharge - Git at Google”. 《googlesource.com》. 2015년 3월 21일에 확인함. 
  25. “Log of /head/sys/dev/nvme”. 《FreeBSD source tree》. The FreeBSD Project. 2012년 10월 16일에 확인함. 
  26. “Log of /stable/9/sys/dev/nvme”. 《FreeBSD source tree》. The FreeBSD Project. 2013년 7월 3일에 확인함. 
  27. “FreeBSD 10.2-RELEASE Release Notes”. The FreeBSD Project. 2015년 8월 5일에 확인함. 
  28. “#9910 NVMe devices support”. 《dev.haiku-os.org》. 2016년 7월 28일에 확인함. 
  29. “4053 Add NVME Driver Support to Illumos”. 《github.com》. 2016년 5월 23일에 확인함. 
  30. Ho, Joshua. “iPhone 6s and iPhone 6s Plus Preliminary Results”. 《www.anandtech.com》. 2016년 6월 1일에 확인함. 
  31. Matthew Wilcox (2011년 3월 3일). “NVM Express driver”. LWN.net. 2012년 7월 17일에 원본 문서에서 보존된 문서. 2013년 11월 5일에 확인함. 
  32. Keith Busch (2013년 8월 12일). “Linux NVMe Driver” (PDF). 《flashmemorysummit.com》. 2013년 11월 5일에 확인함. 
  33. “IDF13 Hands-on Lab: Compiling the NVM Express Linux Open Source Driver and SSD Linux Benchmarks and Optimizations” (PDF). 《activeevents.com》. 2013. 2014년 1월 11일에 원본 문서 (PDF)에서 보존된 문서. 2014년 1월 11일에 확인함. 
  34. “Merge git://git.infradead.org/users/willy/linux-nvme”. 《kernel.org》. 2012년 1월 18일. 2013년 11월 5일에 확인함.  |title=에 지움 문자가 있음(위치 7) (도움말)
  35. David Gwynne (2014년 4월 16일). “non volatile memory express controller (/sys/dev/ic/nvme.c)”. 《BSD Cross Reference》. 2014년 4월 27일에 확인함. 
  36. David Gwynne (2016년 4월 14일). “man 4 nvme”. 《OpenBSD man page》. 2016년 8월 7일에 확인함. 
  37. “Faster 'NVM Express' SSD Interface Arrives on Retina MacBook and OS X 10.10.3”. 《macrumors.com》. 2015년 4월 11일에 확인함. 
  38. “nvme(7D)”. Oracle. 2014년 12월 2일에 확인함. 
  39. “Intel Solid-State for NVMe Drivers”. 《intel.com》. 2015년 9월 25일. 2016년 3월 17일에 확인함. 
  40. “VMware Compatibility Guide for NVMe devices”. 《vmware.com》. 2016년 3월 17일에 확인함. 
  41. “Windows 8.1 to support hybrid disks and adds native NVMe driver”. 《Myce.com》. 2013년 9월 6일. 2014년 1월 11일에 확인함. 
  42. “Update to support NVM Express by using native drivers in Windows 7 or Windows Server 2008 R2”. Microsoft. 2014년 11월 13일. 2014년 11월 17일에 확인함. 
  43. “ChangeLog/1.6”. 《qemu.org》. 2015년 3월 21일에 확인함. 
  44. “Download EDK II from”. 《SourceForge.net》. 2014년 1월 11일에 확인함. 

외부 링크[편집]