그 동안 회원님들의 유익한 사용기를 읽기만 했는데, 모처럼 생긴 저의 잉여력을 활용해서 저도 회원님들께 도움이 되는 사용기를 써보려고 합니다. 야밤에 급 사용기가 쓰고 싶어졌습니다. 내용은 빠른 저장장치에 관한 얘기입니다.

CPU의 처리 속도는 급격하게 발전하는데 저장장치는 그러지 못했습니다. 저장장치는 빨라지는 것 보다 더 큰 용량을 가지는 것이 더 중요했었지요. 하지만 요즘에는 저장장치의 속도가 무섭게 발전하고 있습니다. SSD가 대중화되면서 일반 사용자도 더 빠른 저장장치를 요구하고 있고, 빅데이터 시대라 불릴 만큼 최근 응용프로그램들은 많이 데이터를 사용하면서, 빠른 저장장치가 시스템의 전체 성능을 향상시킬 수 있는 키가 되고 있습니다.

더 빠른 저장장치를 만들기 위해 수년전부터 활발히 연구되던 비휘발성 메모리들은 이제 서서히 상품으로 등장하려고 합니다(개인적으로는 아직 멀었다고 생각하지만...). 재작년 인텔과 마이크론이 쓰리디―크로스포인트 라는 저장장치를 발표했고, 작년에는 인텔이 옵테인 메모리를 발표했습니다. 올 초에는 하이닉스와 도시바가 고밀도 에스티티엠램을 발표했고, 올 여름에는 삼성이 지낸드를 발표할 예정입니다.

저장장치의 기술이 어떻게 흘러갈지 아무도 모르지만, 현재 가장 빠른 저장장치는 엔브이딤이 아닐까 생각합니다. 엔브이딤은 위에서 언급한 최신 기술들에 비해 매우 간단한 기술입니다. 구현이 쉬워서 그런지 현재는 대기업들 보단 미국의 스타트업들이 많이 개발하고 있습니다. 엔브이딤은 여러 타입이 있는데 아래 그림은 엔브이딤-엔 타입입니다.

nvdimm1.png

위 그림에서 보이는 것처럼, 엔브이딤은 디램과 낸드플래시로 구성됩니다. 평상시에는 디램을 사용하다가 파워가 없어지면 배터리에 있는 파워를 사용해서 디램의 데이터를 낸드플래시로 옮깁니다. 이 후에 재부팅되면 낸드플래시에 저장되어 있던 데이터를 다시 디램으로 옮겨서, 휘발성 디램을 마치 비휘발성 디램처럼 사용할 수 있게 해주는 기술입니다.

엔브이딤 기술과 더불어 덱스 기술을 사용하면 메인메모리의 일부를 파일시스템으로 사용할 수 있습니다. 덱스는 램디스크와는 전혀 다른 기술입니다. 램디스크는 메인메모리의 일부를 가상의 블록장치로 만드는 기술입니다. 따라서 램디스크의 파일을 읽으면, 먼저 그 파일은 운영체제의 페이지 캐시에 캐싱됩니다. 그 파일이 메인메모리에 존재함에도 불구하고 또 한 번 메인메모리로 복사되는 것이죠. 뿐만 아니라 블록 입출력을 하기위해 운영체제의 복잡한 블록 입출력 스택을 모두 사용해야 합니다. 이 블록 입출력 스택은 저장장치가 SSD/HDD 정도의 속도라고 가정하고 설계되었습니다. 이 때문에 매우 큰 소프트웨어 오버헤드가 발생하게 됩니다. 덱스는 이러한 오버헤드를 피하기 위해 만들어졌습니다. 덱스는 위에서 설명한 불필요한 비용 없이 엔브이딤의 파일을 읽고 쓸 수 있습니다.

nvdimm2.png

작년 2월 쯤, 미국에 출장 갔을 때, 유즈닉스 페스트라는 컨퍼런스에 참석했습니다. 그 곳에서 넷리스트라는 회사가 전시 중인 엔브이딤을 구경했습니다. 위 사진은 그 때 사진입니다. 저도 써보고 싶어서 바로 구매하고 싶다고 얘기했습니다. 그리고 작년 여름에 한국에서 엔브이딤을 받았습니다. 아마도 국내에서는 제가 첫 구매자가 아닐까 싶습니다. 제가 구입한 엔브이딤의 자세한 정보는 아래 링크에서 확인할 수 있습니다. 이 페이지에서 말하길, 이 엔브이딤이 NVMe SSD 보다 IOPS가 30배 높고, 지연시간은 1000배 빠르다고 하네요.

http://www.netlist.com/products/vault-memory-storage/nvvault-ddr4-nvdimm/default.aspx

어찌됐건, 엔브이딤을 제 컴퓨터에 꽂았습니다. 이 컴퓨터는 메인메모리가 64GB입니다. 디램 32GB에 엔브이딤 32GB입니다. 아래 사진이 엔브이딤을 제 컴퓨터에 꽂은 사진인데, 일반 디램과 비슷하게 보입니다. 큰 차이점은, 엔브이딤에는 파워선이 연결되어 있습니다.

nvdimm3.jpg

엔브이딤의 성능을 소개하기 위해 에프아이오라는 툴을 사용했습니다. 아마 이 툴이 SSD/HDD등 저장장치의 성능을 측정하기 위해 가장 많이 사용되는 툴인 것 같습니다. 제가 사용한 워크로드는 싱글 스레드로 30초 동안 4GB의 파일을 4KB 단위로 순차적으로 읽는 워크로드 입니다. 이 워크로드는 크리스탈디스크마크에서 사용하는 방식과 유사하기 때문에 그 결과와 비교해도 무방할 것 같습니다.

nvdimm4.JPG

위 그래프가 실험 결과입니다. 일반적인 read 시스템 콜을 사용한 경우에 처리량이 2.4GB/s 정도 나옵니다. 매우 빠른 성능 입니다. 요즘 저장장치가 매우 빨라지면서 메모리 맵 파일 입출력(엠맵) 기술이 주목받고 있다고 합니다. 그래서 엠맵 시스템 콜을 사용한 경우도 실험해 봤는데, 처리량이 최고 3.2GB/s나 나왔습니다. 참고로 최근 논문에 의하면 메인메모리 용 파일시스템에 맞게 최적화한 엠맵은, 싱글 스레드에서 6.3GB/s 나 성능이 나온다고 합니다.

간단히 써보려고 했는데, 얘기가 자꾸 길어지는 것 같습니다. 잠이 와서 계속 못 쓸 것 같습니다. ㅜㅜ 다 못 쓴 내용은 나중에 다시 보충하도록 하겠습니다... 

감사합니다.

==

<추가>

아래 링크는 올해 엠에스에스티에서 엔디 루도프가 발표한 영상입니다. 

https://www.youtube.com/watch?v=hz1nO7zEOYU&feature=youtu.be

MSST17.JPG
profile

HelloWorld