NVMe란?
NVMe 는 NVM Express의 약자로 쓰인다. 우리가 주로 NVMe를 검색할 일은 컴퓨터를 사기 위해 SSD를 검색할 때 정도일 것 같다. 임베디드쪽을 하지 않는다면 NVMe를 들어볼일이 거의 없는 것 같다.
위키에서는 NVMe를 다음과 같이 정의하고 있다.
NVM 익스프레스(NVM Express, NVMe) 또는 비휘발성 메모리 호스트 컨트롤러 인터페이스 사양(Non-Volatile Memory Host Controller Interface Specification, NVMHCI)은 PCI 익스프레스(PCIe) 버스에 부착된 비휘발성 기억 매체 접근을 위한 논리 장치 인터페이스 사양이다. "NVM"은 "비휘발성 메모리"(non-volatile memory)를 뜻하며, 보통 솔리드 스테이트 드라이브(SSD) 형태로 출시되는 플래시 메모리를 가리킨다.
NVMe의 경우 결국 전체 약자를 보면 Non-Volatile Memory Express 라고 보면 된다.
그래서 NVMe는 무엇인가?
간단하게 생각하면 PCIe를 사용하여 통신할 수 있도록 되어있는 비휘발성 메모리를 접근하는 방법을 정리해둔 프로토콜로 생각하면 된다.
NVMe를 이용하여 PCIe를 통해 Device와 통신할 수 있는 것이다.
처음 NVM에 접근하는 새로운 표준에 관한 내용은 인텔 개발자 포럼 2007에서 처음 등장했다.
NVMe에 대한 작업은 2009년 후반에 시작되었는데, 90개가 넘는 회사에서 워크 그룹을 구성하여 작업을 하였다. 그룹 의장은 인텔의 Amber Huffman 이었다.
첫 NVMe Spec의 버전인 1.0은 2011년 3월 1일에 공개되었고, 1.1버전의 경우 2012년 10월 11일에 공개되었다.
1.1은 처음에 Enterprise NVMHCI로 불리웠다. NVMHCI는 Non Volatile Memory Host Controller Interface로 Host가 Device를 컨트롤 하는 방법에 대한 규약정도로 이해하면 될 것 같다.
그렇다면 왜 NVMe를 사용하게 되었을까?
기존에 많이 알려지고 사용되었던 AHCI라는 인터페이스가 이미 있었다.
AHCI는 Advanced Host Controller Interface로 소프트웨어 호환성이 매우 뛰어난 편이지만 단점이 있었다.
PCIe를 통해 연결된 SSD를 사용할 때 최적화된 성능을 뽑아낼 수 없다는게 문제였다.
그도 그럴것이, AHCI는 우리가 HDD라고 하드디스크처럼 물리적으로 동작하는 저장장치에 맞추어 개발되었었기 때문에 전자적으로 동작하는 SSD와는 비효율성이 있을 수 밖에 없다.
NVMe와 AHCI는 어떤 차이가 있을까?
NVMe vs AHCI
AHCI | NVMe | |
Max Queue Depth | 1개의 Queue 큐 하나 당 32개의 명령 |
65535개의 Queue 큐 하나 당 65536개의 명령 |
Uncachable Register Access (Each 2000 Cycle) |
큐에 없는 명령마다 6개 큐가 있는 명령마다 9개 |
명령 당 2개 |
MSI-X Interrupt Stearing |
단일 인터럽트 스티어링 없음 |
2048개의 MSI-X 인터럽트 |
병렬화 및 다중 스레드 |
명령 발행을 위해 동기화 락이 필요 |
락 없음 |
4 KB 명령의 효율성 |
명령 매개변수는 2개의 직렬화된 호스트 DRAM 페치 필요 |
하나의 64바이트 페치의 명령 매개변수를 가져옴 |
AHCI vs NVMe
이렇듯 성능이나 범용성에서도 NVMe를 사용하면서 장점이 매우 많아졌다.
OS 지원목록
NVMe가 개발되면서 대중적으로 사용할 수 있도록 운영체제 들에서도 지원을 시작했다.
지원되는 OS목록은 다음과 같다.
Chrome OS, FreeBSD, illumos, iOS, Linux, OpenBSD, OS X, Solaris, Vmware, Window
다음 자료에서는 NVMe Spec에 대해서 알아볼 예정이다.
'임베디드SW > NVMe Spec' 카테고리의 다른 글
[NVMe] Volatile Write Cache (0) | 2023.03.08 |
---|
댓글