본문으로 이동

OpenMPDK와 uNVMe 사용자 용량 기기 드라이버

짧은 개발 기간 내에 삼성전자의 최첨단 스토리지 솔루션을 최대한 활용할 수 있게 해주는 오픈소스

  • 메일
다운로드
A man is looking at the server in the server room holding a laptop on his hand.
A man is looking at the server in the server room holding a laptop on his hand.

최적화된 종합적 스토리지 솔루션에 대한 수요 증가 최근에는 기술 및 관련 제품의 향상이 더욱 빨라지고 있다. 삼성전자는 소프트웨어 에코시스템 구축을 돕고자 OEM 호스트 공급업체를 지원하기 위해 레퍼런스 소프트웨어 라이브러리와 기기 드라이버, 소프트웨어 도구를 개발하여 제공하기 시작했다.
The 1st Infographic describing traditional step-by-step solution development. Samsung develops State-of-the-art memory and storage product. And the OEM Host vendors construct Samsung's new memory and storage features using software driver, library and tools maximally then finally begin mass production. And second Infographic describing new faster & optimized solution development. Samsung develops state-of-the-art memory and storage product and optimal software drivers, library and tools. The OEM Host vendor integrates the two previous tasks and finally begins mass production.
The 1st Infographic describing traditional step-by-step solution development. Samsung develops State-of-the-art memory and storage product. And the OEM Host vendors construct Samsung's new memory and storage features using software driver, library and tools maximally then finally begin mass production. And second Infographic describing new faster & optimized solution development. Samsung develops state-of-the-art memory and storage product and optimal software drivers, library and tools. The OEM Host vendor integrates the two previous tasks and finally begins mass production.

삼성전자의 OpenMPDK: 메모리와 스토리지 솔루션을 위한 소프트웨어 플랫폼 OEM 호스트 공급업체의 요구에 더 잘 부응하기 위해 삼성전자는 오픈 메모리 플랫폼 개발 키트(OpenMPDK)라고 하는 소프트웨어 패키지를 제공한다. 이 OpenMPDK를 사용하면 OEM 호스트 공급업체는 더 쉽고 빠르게 삼성전자의 메모리 및 스토리지 제품과 통합할 수 있다. 또한 OpenMPDK를 통해 소프트웨어 구현을 최적화할 수 있으며 최신 삼성전자 메모리와 스토리지 제품의 성능 또한 높일 수 있다. 서버와 데이터 센터 애플리케이션을 위해 더 빠르고 최적화된 드라이버 생산 OpenMPDK에 속한 사용자 용량 uNVMe 기기 드라이버는 엔터프라이즈와 데이터 센터 서버에 최적화된 스토리지 솔루션을 제공한다. 애플리케이션과 스토리지 기기를 제어하는 하드웨어의 데이터 IO 요청이 기기 드라이버 소프트웨어를 통해 처리된다. 기존 IO 모델에는 근본적으로 오버헤드가 다양하기 때문에 엔터프라이즈 서버와 데이터 센터 서버 애플리케이션에서 요구하는 낮은 지연 시간과 높은 처리량이라는 요구를 충족하기 어려웠다. 이런 문제를 해결하기 위해 사용자 용량 IO(UIO) 시스템이 리눅스에 설계되었고, 그 결과 스토리지 애플리케이션을 사용자 용량 맥락에서 실행하는 방향으로 변화가 일어났다.
Infographic comparing before and after of OpenMPDK applied. Before OpenMPDK applied, the process of running storage application in the user-space context to SSD in the disk space should be through Kernel Space which has 5 steps(VFS, Disk File System, Generic Block Layer, IO Schedule Layer, Kernel Block Device Driver). However OpenMPDK helps applies the process of running storage application in the user-space context to SSD in the disk space doesn't need to go through Kernel Space by applying uNVMe User space driver at User Space. As a result, the benefits of applying OpenMPDK are Reduced latency, Higher Performance, No blue-screen in case of driver crash.
Infographic comparing before and after of OpenMPDK applied. Before OpenMPDK applied, the process of running storage application in the user-space context to SSD in the disk space should be through Kernel Space which has 5 steps(VFS, Disk File System, Generic Block Layer, IO Schedule Layer, Kernel Block Device Driver). However OpenMPDK helps applies the process of running storage application in the user-space context to SSD in the disk space doesn't need to go through Kernel Space by applying uNVMe User space driver at User Space. As a result, the benefits of applying OpenMPDK are Reduced latency, Higher Performance, No blue-screen in case of driver crash.

또한 삼성전자의 사용자 용량 uNVME 드라이버 소프트웨어에는 첨단 IO 아키텍처가 포함되어 있다. 따라서 사용자 용량 드라이버 방식을 사용하면서 호스트 CPU 사용 또한 효율적으로 개선된다. 그 결과 확장성, 즉 연결된 SSD의 숫자를 늘리는 역량 또한 높아진다. Github에 uNVMe 소스 코드 공유 삼성전자의 uNVMe 기기 드라이버는 샘플 애플리케이션을 서로 연결할 수 있는 라이브러리로 구현되는 사용자 용량 기기 드라이버 소프트웨어이다. 사용자는 삼성전자의 uNVMe 드라이버를 https://github.com/OpenMPDK/uNVMe에서 다운로드할 수 있다. 삼성전자의 SDK를 사용하면 샘플 애플리케이션이 시작되어 IO 워크로드를 제출하고 연결된 NVMe 기기에 직접 처리한다.
Infographic describing the steps of uNVMe Source Code. In app step, there are external, fio, fio_plugin and in driver step, there are build, debug, release, core, external, common, dpdk, spdk, include, mk. In test step, there are command_ut, hash_perf, iterate, iterate_async, udd_perf, udd_perf_async and in io step which is next step of include step, there are deps, doxygen, kv_perf_scripts, src, common, slab, tests. The last step is script.
Infographic describing the steps of uNVMe Source Code. In app step, there are external, fio, fio_plugin and in driver step, there are build, debug, release, core, external, common, dpdk, spdk, include, mk. In test step, there are command_ut, hash_perf, iterate, iterate_async, udd_perf, udd_perf_async and in io step which is next step of include step, there are deps, doxygen, kv_perf_scripts, src, common, slab, tests. The last step is script.

삼성전자의 사용자 용량 uNVMe 기기 드라이버는 아래 그림에서 볼 수 있듯이 NVMe SSD 같은 저지연 SSD의 경우 특히 더 최적화된 성능을 제공한다.
Infographic comparing before and after of uNVMe device driver applied. Kernel Driver, before uNVMe device driver applied, has long latency time due to VFS, Context Switch, MSI-X and Interrupt Handler steps after SSD IO Latency. However Samsung User Space Driver, after uNVMe device driver applied, provedes Latency reduction, Throughput improvement by Polling after FS steps, after SSD IO Latency.
Infographic comparing before and after of uNVMe device driver applied. Kernel Driver, before uNVMe device driver applied, has long latency time due to VFS, Context Switch, MSI-X and Interrupt Handler steps after SSD IO Latency. However Samsung User Space Driver, after uNVMe device driver applied, provedes Latency reduction, Throughput improvement by Polling after FS steps, after SSD IO Latency.

성능 향상 삼성전자의 PM983 NVMe SSD 스토리지 성능을 두 종류의 서버 시스템, 즉 Intel CPU와 AMD CPU에서 커널 기기 드라이버와 uNVME 기기 드라이버를 모두 사용하여 측정되었다. 상세한 내용은 아래 표에서 확인할 수 있다.
Table showing two types of server systems used to measure performance of Samsung PM983 NVMe SSD. System1 used intel CPU, Dell R740xd as System, Intel Xeon SP Gold 6142 @ 2.6GHz (per Socket:16core, 32thread) as CPU. System 2 used AMD CPU, SMC 2023US-TR4 as System, AMD EPYC 7451 @ 2.0GHz(per Socket:24core, 48thread) as CPU. Both systems have Memory-64GB, Storage-Samsung PM983 1.92TB x 4ea, OS-CentOS 7.5 (Linux Kernel 3.10), NVMe Device Driver-Kernel Driver:Kernel 3.10 / User Driver:uNVMe Driver v2.0 + FIO Plug-in(https://github.com/OpenMPDK/uNVMe), Test tool-FIO 3.3, IO engle&Workload-Libaio for kernel IO / uNVMe2_fio_plugin for user-level IO / Workload:4KB Random Read.
Table showing two types of server systems used to measure performance of Samsung PM983 NVMe SSD. System1 used intel CPU, Dell R740xd as System, Intel Xeon SP Gold 6142 @ 2.6GHz (per Socket:16core, 32thread) as CPU. System 2 used AMD CPU, SMC 2023US-TR4 as System, AMD EPYC 7451 @ 2.0GHz(per Socket:24core, 48thread) as CPU. Both systems have Memory-64GB, Storage-Samsung PM983 1.92TB x 4ea, OS-CentOS 7.5 (Linux Kernel 3.10), NVMe Device Driver-Kernel Driver:Kernel 3.10 / User Driver:uNVMe Driver v2.0 + FIO Plug-in(https://github.com/OpenMPDK/uNVMe), Test tool-FIO 3.3, IO engle&Workload-Libaio for kernel IO / uNVMe2_fio_plugin for user-level IO / Workload:4KB Random Read.

uNVMe 기기 드라이버를 사용했을 때, 데이터 센터와 엔터프라이즈 서버 시스템에 가장 중요한 임의적 읽기 워크로드에서 가장 큰 성능 향상을 보였다. 쓰기 성능의 경우 NAND에 대해 요구되는 쓰기 시간이 일반적으로 병목 현상을 보이는 상황에서 성능은 제한적이었지만 SSD의 쓰기 성능이 향상됨에 따라 향후에는 성능이 향상될 가능성이 있다.
Graph comparing performance of Random Read work in Intel CPU of User-space driver(udd), and of kernel device driver(kdd). Both worked in PM983 NVMe SSD performance measurement; fio-3.3, 4KB IO, numjobs=4. UDD's performance was 1.7x greater than KDD in QD32, and 2.9x greater in QD128.
Graph comparing performance of Random Read work in Intel CPU of User-space driver(udd), and of kernel device driver(kdd). Both worked in PM983 NVMe SSD performance measurement; fio-3.3, 4KB IO, numjobs=4. UDD's performance was 1.7x greater than KDD in QD32, and 2.9x greater in QD128.
Graph comparing performance of Random Read work in AMD CPU of User-space driver(udd), and of kernel device driver(kdd). Both worked in PM983 NVMe SSD performance measurement; fio-3.3, 4KB IO, numjobs=4. UDD's performance was 2.3x greater than KDD's in QD32, and 3.5x greater in QD128.
Graph comparing performance of Random Read work in AMD CPU of User-space driver(udd), and of kernel device driver(kdd). Both worked in PM983 NVMe SSD performance measurement; fio-3.3, 4KB IO, numjobs=4. UDD's performance was 2.3x greater than KDD's in QD32, and 3.5x greater in QD128.

uNVMe 기기 드라이버의 이점을 누리기 위해 삼성전자의 OpenMPDK 다운로드 성능을 높이고 시스템 통합 시간을 줄이기 위해 최첨단 메모리 또는 스토리지 솔루션을 현재 시스템에 통합하려면 OpenMPDK 오픈소스 웹사이트1)를 방문하여 지침에 따라 레퍼런스 소프트웨어를 다운로드한 후 테스트하고 전체 시스템 제품을 출시. OpenMPDK 오픈소스 웹사이트는 http://github.com/OpenMPDK이다.