
macOS는 HMB를 지원할까?
시험 공부를 해야하는데, 집중도 잘 안되고 최근 진행한 가벼운 실험의 결과를 공유하려고 합니다. 사실, 써야 할 글은 이게 아니라 870 EVO의 리뷰인데 말이죠.
아니, 870 EVO 리뷰가 급한 것은 아닌데, 밀린 데이터를 쳐내야 대여받은 SN850X의 리뷰를 작성할 수 있거든요. Article 태그에 글을 안 쓰고 최대한 Review 태그를 소비하고 있는데, 올해 안에 밀린 리뷰를 완전히 끝내고 싶습니다.
잡담이 길어졌네요. 결론부터 말씀드리겠습니다.
macOS는 HMB(Host Memory Buffer)를 지원하지 않는다!
사실, 지원하지 않는다는 것은 검색하거나 LLM에게만 물어봐도 답이 나옵니다.

지원하지 않는다는 것을 잘 알려주네요. 하지만, 우리는 정보를 얻을 때 주의할 필요가 있습니다. 출처를 물어보면 살짝 답변이 길어지는데, 공식 문서보다는 커뮤니티에서 발췌한 내용들을 위주로 답합니다.
macOS의 공식 문서에는 이와 관련된 내용을 찾을 수 없으니 어쩔 수 없기도 하죠. 하지만, 커뮤니티에서는 신빙성이 높은 답변을 찾아보기 힘들었습니다.
직접 테스트, 해봐야겠죠?
Test Method
제 리뷰를 읽으시는 분들은 종종 보셨던 "Performance by Active Range" 단락이 기억나실까요? 낯선 분도 계실 테니 간단하게 설명하겠습니다.
SSD에 있는 DRAM은 주로 L2P Table을 Caching합니다. 복잡한 설명은 생략하고, L2P Table의 크기는 NAND 1TB당 약 1GB입니다. 따라서 1TB SSD에는 1GB의 DRAM이 실장되는 것이 일반적인 것이죠. 그렇지 않은 제품들도 일부 있지만, 여기서는 일반적으로만 다룹시다.
HMB(Host Memory Buffer)는 DRAMless인 NVMe SSD에 구현할 수 있는 기술로, Host의 DRAM을 빌려서 사용하는 것입니다. 이때 빌리는 DRAM의 양은 일반적으로 64MB인데, 당연히 전체 L2P Table을 Caching하기에는 크기가 작습니다.

따라서 넓은 영역에 대해 I/O가 발생하게 되면 HMB로 Caching한 L2P Table의 영역을 벗어나게 됩니다. 결과적으로 성능이 하락하게 되는 것이죠.
하지만, HMB가 모종의 이유로 활성화되지 않았다면, L2P Table은 컨트롤러 내부의 SRAM 등에 Caching 됩니다. 이때, SRAM의 용량은 HMB로 빌리는 DRAM의 용량보다 훨씬 작습니다. 따라서, HMB가 비활성화된 DRAMless SSD들은 아주 좁은 영역에 대한 I/O만 고성능을 낼 수 있습니다. I/O가 발생하는 영역이 조금이라도 넓어지면 성능이 급락하게 되는 거죠.
더 간단하게 설명해 드리자면, HMB가 활성화된 그래프와 비활성화된 그래프. 어느 쪽이 macOS에서 보이는지 비교하는 것입니다. 이해가 어렵더라도 그래프는 직관적으로 보일 겁니다.
Test Environment

이번 실험에 사용할 SSD는 PCIe 5.0 인터페이스를 가진 DRAMless SSD입니다.
그리고, HMB는 PCIe를 통해 Host의 DRAM에 접근하는 기술이기에, 일반적인 USB 인클로저를 사용하면 검증할 수 없습니다. PCIe Tunneling을 지원하는 USB4나 Thunderbolt 인클로저가 필요하죠.

HighPoint의 RocketStor 6661A입니다. 낯설 수도 있는데, 일반적인 Thunderbolt 3 기반의 인클로저입니다. TB3 컨트롤러는 Intel DSL6540(Alpine Ridge)를 사용하고요.

기준이 될 테스트는 Linux 기반 데스크탑에서 fio 3.42로 진행하는데, 대략적인 사양은 위와 같으며, ROG STRIX B860-I 보드를 사용합니다.

macOS에서의 테스트는 MacBook Pro(14inch, M5)를 사용하며, OS는 macOS Tahoe 26.3.1입니다. 물론, Linux와 동일하게 fio 3.42를 통해 테스트를 진행합니다.

마지막으로, 케이블은 U2725QE의 구성품인 1m 길이의 Thunderbolt 4 케이블을 사용합니다.
다른 부분은 크게 중요하지 않으니 생략하겠습니다.
바로 결과를 봅시다. 참고로, SSD는 사전에 전부 채워놓은 상태이며, RND 4k QD1으로 진행합니다.

Linux 데스크탑에서 HMB가 활성화되었을 때의 그래프입니다. 파란색은 PCIe 5.0(PEG slot) 연결일 때, 주황색은 동일한 슬롯에서 PCIe 3.0 연결일 때, 초록색은 Thunderbolt 3로 연결되었을 때입니다.
이 그래프의 개형을 잘 기억해 주세요.

동일하게 Linux 데스크탑에서 HMB가 비활성화되었을 때의 그래프입니다. 확실하게 개형이 다르죠?

macOS에서의 그래프입니다.

모든 경우를 하나로 합쳤습니다. HMB가 활성화된 것 같나요? 전 활성화되지 않았다고 판단했습니다.
추가로, Linux 데스크탑과 macOS 노트북에서 발생하는 성능 차이에는 여러 이유가 있습니다.
- Linux 데스크탑에서의 측정은
ioengine=io_uring과 Polling을 사용했지만, macOS 노트북에서의 측정은ioengine=posixaio를 사용했으며, Polling과 관련된 옵션은 전부 비활성화했습니다. - macOS 노트북은 백그라운드에 CPU 리소스가 어느 정도 소모되고 있어, 엄밀하게 IDLE 상태라고 말하기 힘들었습니다.
- 기본적으로 CPU가 다르기에 4k QD1의 차이도 당연히 발생합니다.
사실, 저도 여태껏 궁금하긴 했는데, macOS에서 fio를 써본 경험도 없었고 큰 계기가 없었거든요.
그런데, 이번에 SSD를 대리로 구매해 주신 지인분의 요청?으로 인해 테스트하게 되었습니다. 사실 대화 중에 제 호기심을 자극한게 더 컸지만요. macOS와 기존 스크립트 호환성이 잘 맞아서 생각보다 큰 어려움 없이 바로 측정할 수 있었습니다.
짤막한 실험은 여기까지. 다음엔 870 EVO 리뷰로 찾아뵙겠습니다.


Comments