NVMe에 대해서는 그동안 이론적으로 설명된 수많은 글을 보았을 것이다. 여기서는 그런 글들을 동어반복할 생각은 없다.
다 제끼고 Samsung 950 Pro에 구현된 NVM Express Admin Command 몇 가지에 대해서 간단히 살펴보자.
0. 분석 방법
분석 방법은 Perisoft Bus Hound 공개 버전으로 어떤 명령어가 어느 계층에서 쓰이는지 감을 잡은 후, 인터넷에 있는 버스 필터 드라이버 예제 등을 조합하여 확인하였다.
아쉽게도 실험 후 검증 도중 소스 및 참고자료를 저장해두던 스토리지의 RAID1이 풀리는 사고로, 현재 남아있는 버스 필터 드라이버 관련 자료는 없다.
수많은 시도중에 성공한 거라 정확한 기억이 없으나, Bus Analyzer를 잘 활용하면 많은 힌트를 얻을 수 있다. 사실 정식 버전이 있다면 단일 프로그램만으로도 해결할 수 있을 듯 하나 굉장히 비싸다.
분석 시에는 벤더 드라이버보다 기본 드라이버를 사용하는 것이 좋다.
- Passthrough
2015년 11월 현재 공식적으로 윈도에 구현된 NVMe Passthrough 커맨드는 없다.
따라서 Samsung 950 Pro의 경우는 Admin Command Passthrough를 SCSI Security Protocol In/Out 커맨드를 사용해서 구현한다.
2. Identify
SCSI의 동치 명령어를 사용할 수도 있으나, 일단 이름이 다르게 나오므로(Vendor가 NVMe, Model이 Samsung SSD 950으로 ‘PRO XXXGB’ 부분이 짤린다), 원래 모델명을 얻고 싶다면 필수적이다.
명령 번호는 5번이다. 다른 내용은 필요하지 않다. 결과물에 대한 자세한 내용은 NVM express 1.1 공식 문서를 참고하시라.
참고로 NVM express 1.2부터 Identify 부분에 많은 내용이 추가되었는데, 당연하겠지만 950이 1.2 표준을 준수하지 않는 이상 그런 부분을 바라서는 안 된다.
3. Get Log Page
이 또한 SCSI에 동치 명령어가 있으나, SCSI에서 제대로 나오는 정보는 온도 정보밖에 없으므로 빠르게 포기하고 NVMe Admin Command를 찾는 쪽이 좋다.
명령 번호는 6번이다. 대부분의 사람들이 관심있을 SMART는 Global Log Page에 해당한다. NVM express 1.1에 따르면 Global Log Page는 FFFFFFFFh이므로 4번~7번 바이트에 FFh를 채우고 보내주면 된다.
이것도 매지션에 나오는 만큼만 제공되니 뒷 부분에 대한 기대는 포기하는 것이 좋다.
4. 풀버전 소스