출처: http://ssu1945.egloos.com/4007260

 

NVMe 는 실제 Command단위로 움직이는 Protocol Layer

그 밑의 Transport, Link, Physcal (SATA  기준으로) Layer는 PCIe 의 spec.을 따릅니다.

 

그리고 보통 S/W 가 작업하는 F/W level 은 Protocol Layer 부분부터 가져오게 됩니다.

 

아래 그림에서 NVMe Protocol 이 정의 하는 내용은 Software layer 이다.

 

그 밑단의 일련의 작업들은 실제로 PHY chip 이라 불리우는 H/W가 작업을 해줍니다.

실제 S/W engineer 가 신경써야 하는 것은 Software layer 이다.

 

그럼 H/W 만 믿으면 되지 않느냐? 라고 하겠지만 실제 Data의 순서 및 PCI device로의 인식등 여러가지 문제들을 생각하고 구현해야 SSD를 만들수 있어요.

 

 

( https://www.mindshare.com/files/ebooks/PCI%20Express%20System%20Architecture.pdf)

 

그래서 NVMe spec.의 2장은 System Bus (PCI Express) Registers 라고 이름 붙여져 있습니다.

 

PC 에서 Power ON 이 되면 Mainboard 의 F/W 인 BIOS 에서 PCI device를 인식합니다.

인식한 뒤에 Link layer 에서 Link 부분의 조율(한국어로는 조율이라는 표현이 제일 맞을것 같네요.)을 합니다.

(Link와 Physical 부분은 제가 전문가는 아니라서 정확히는 모르고 PCI 와 SATA 가 Speed set 부분에 있어 순서가 다른데 정확한 정보 확인 뒤에 업데이트 하도록 하겠습니다.)

Link 부분이 정확히 끝난뒤에 실제 PCI device로 부터 PCI header 를 읽어 갑니다.

 

이때 부터 PCI device 인지 알게 되는 거죠. 

 

PCI slot을 보통 그래픽 카드나 랜카드, 사운드 카드를 사용하시는데 많이 쓰셨을껀데, Device ID 중에 mass storage가 있습니다.

PCIe Header 까지 설명하면 너무 길어지니 적당히 이야기 할게요.

Header 안에는 device 의 vendor(회사명 입니다. PCI sig 에 등록된 생산회사명), Device ID(PCI 에 붙은 장치의 종류 : 그래픽 카드라던가...), BAR, Expansion ROM Address 등등이 적혀 있고, 이부분을 다 읽어가고 나면 이제 NVMe device 로서 인식을 하고 NVMe 명령어를 던지게 됩니다.

 

기본적으로 NVMe 명령어도 TLP 단계로 내리면 PCIe로 감싸지기 때문에 위에서 바라볼때만 NVMe 인거지 그 밑단에서는 PCIe 와 다를게 없어요.

 

그래서 NVMe 를 심도 있게 보시려면 PCI 의 TLP 까지는 보셔야 제대로 보실수 있습니다.

 

또한 PCIe 를 사용하는 만큼 커넥터 역시 여러가지를 쓰는데요.

 

우리가 알고 있는 PCIe slot 이외에  M.2 또는 SFF 8639 가 있는데요.

이부분은 SATA, SAS, PCIe 가 모두 활용할 수 있는 부분입니다.

자세한 부분은 구글링 몇번이면 나올거에요. 아래자료에 보면 NVMe 에서 어떻게 설명하고 있는지 나옵니다.

(참조 : http://nvmexpress.org/wp-content/uploads/2013-FMS-NVMe-Track.pdf )

 

결국 PCIe 를 사용하는 입장이기에 PCIe를 어느정도 알지 못하면 NVMe 자체를 잘 사용할수 없다가 결론입니다.

 

PS : NVMe spec. 2장을 공부하시다가 궁금하신건 PCIe spec. 3.0 을 보세요. 전에 언급했던 대로 Mindshare 자료 좋습니다. 참고하세요. 

+ Recent posts