进入正文

面向服务器和数据中心的 OpenMPDK 和 uNVMe

开源使得三星先进的存储解决方案得到更充分利用,缩短开发时间

  • 邮件
下载
一位男士手持笔记本电脑站在服务器机房中查看服务器。
一位男士手持笔记本电脑站在服务器机房中查看服务器。

针对经过优化的总体存储解决方案的需求不断增长 如今,技术和相关产品的更新换代越来越快。三星决定帮助构建软件生态系统,并开始开发和提供参考软件库、设备驱动程序和软件工具,从而降低主机原始设备制造商的工作量。
第 1 幅信息图描述了传统分步式解决方案开发。三星开发先进的内存和存储产品。主机原始设备制造商充分利用三星的软件驱动程序、库和工具构建新的内存和存储功能,并最终开始量产。第 2 幅信息图描述了速度更快且更全面优化的新型解决方案开发。三星开发先进的内存和存储产品以及最优的软件驱动程序、库和工具。主机原始设备制造商集成上述两项任务,并最终开始量产。
第 1 幅信息图描述了传统分步式解决方案开发。三星开发先进的内存和存储产品。主机原始设备制造商充分利用三星的软件驱动程序、库和工具构建新的内存和存储功能,并最终开始量产。第 2 幅信息图描述了速度更快且更全面优化的新型解决方案开发。三星开发先进的内存和存储产品以及最优的软件驱动程序、库和工具。主机原始设备制造商集成上述两项任务,并最终开始量产。

三星的 OpenMPDK:一个面向内存和存储解决方案的软件平台 为了更好地满足主机原始设备制造商的需求,三星提供了统称为“开放式内存平台开发工具包”(OpenMPDK) 的软件包。通过这些 OpenMPDK,主机原始设备制造商能够更快速更轻松地集成三星的内存和存储产品。此外,它还为最新的三星内存和存储产品提供更全面优化的软件实施和更佳的性能。 为服务器和数据中心应用开发速度更快、更全面优化的驱动程序 作为 OpenMPDK 的一部分,用户空间 uNVMe 设备驱动程序可为企业和数据中心服务器提供最佳的存储解决方案。处理来自应用的数据输入输出 (IO) 请求并控制存储设备的硬件,是通过设备驱动程序软件执行的。 传统输入输出 (IO) 模型由于存在各种固有开销,已很难满足企业服务器和数据中心服务器应用的低延迟和高吞吐量需求。 为了解决这些问题,Linux 中设计了用户空间输入输出 (UIO) 系统,转向在用户空间环境中运行存储应用。
信息图对应用 OpenMPDK 之前与之后进行比较。在应用 OpenMPDK 之前,将在用户空间环境中运行存储应用的进程应用于磁盘空间中的 固态硬盘 时,应穿越分 5 步(VFS、磁盘文件系统、通用区块层、输入输出 (IO) 调度层,以及内核区块设备驱动程序)的内核空间。但是,OpenMPDK 可帮助将在用户空间环境中运行存储应用的进程应用于磁盘空间中的 固态硬盘,通过在用户空间应用 uNVMe 用户空间驱动程序,则无需穿越内核空间。因此,应用 OpenMPDK 的好处是降低了延迟,提高了性能,在驱动程序崩溃时不会出现蓝屏。
信息图对应用 OpenMPDK 之前与之后进行比较。在应用 OpenMPDK 之前,将在用户空间环境中运行存储应用的进程应用于磁盘空间中的 固态硬盘 时,应穿越分 5 步(VFS、磁盘文件系统、通用区块层、输入输出 (IO) 调度层,以及内核区块设备驱动程序)的内核空间。但是,OpenMPDK 可帮助将在用户空间环境中运行存储应用的进程应用于磁盘空间中的 固态硬盘,通过在用户空间应用 uNVMe 用户空间驱动程序,则无需穿越内核空间。因此,应用 OpenMPDK 的好处是降低了延迟,提高了性能,在驱动程序崩溃时不会出现蓝屏。

此外,三星的用户空间 uNVME 驱动程序软件融合了先进的输入输出 (IO) 体系结构。因此,主机中央处理器 (CPU) 的利用率得到有效提高,并且同时可利用用户空间驱动程序方案。因而,可扩展性(即提高附加的 SSD 的数量)也得到增强。 共享 uNVMe 源代码 Github 三星的 uNVMe 设备驱动程序是一个用户空间设备驱动程序软件,它作为一个软件库进行实施,可在其中将样本应用程序关联到一起。用户可通过网址 https://github.com/OpenMPDK/uNVMe 驱动程序。 通过利用三星 SDK,样本应用程序可直接在附加的 NVMe 设备中初始化、提交和处理输入输出 (IO) 工作负载。
信息图描述了 uNVMe 源代码的步骤。在 app 步骤中,存在 external、fio、fio_plugin;在 driver 步骤中,存在 build、debug、release、core、external、common、dpdk、spdk、include、mk。在 test 步骤中,存在 command_ut、hash_perf、iterate、iterate_async、udd_perf、udd_perf_async;在 include 步骤的下一步(即 io 步骤)中,存在 deps、doxygen、kv_perf_scripts、src、common、slab、tests。最后一步是 script。
信息图描述了 uNVMe 源代码的步骤。在 app 步骤中,存在 external、fio、fio_plugin;在 driver 步骤中,存在 build、debug、release、core、external、common、dpdk、spdk、include、mk。在 test 步骤中,存在 command_ut、hash_perf、iterate、iterate_async、udd_perf、udd_perf_async;在 include 步骤的下一步(即 io 步骤)中,存在 deps、doxygen、kv_perf_scripts、src、common、slab、tests。最后一步是 script。

在采用较低延迟的 SSD(例如 NVMe SSD)的情况下,三星用户空间 uNVMe 设备驱动程序可提供特别优化的性能,如下所示。
信息图对应用 uNVMe 设备驱动程序之前与之后进行比较。应用 uNVMe 设备驱动程序之前,内核驱动程序存在较长时间的延迟,原因是 固态硬盘 输入输出 (IO) 延迟之后,有 VFS、环境切换、MSI-X 和中断处理程序步骤。但在应用 uNVMe 设备驱动程序之后,三星用户空间驱动程序通过在文件系统步骤之后、固态硬盘 输入输出 (IO) 延迟之后进行轮询,降低了延迟,提高了吞吐量。
信息图对应用 uNVMe 设备驱动程序之前与之后进行比较。应用 uNVMe 设备驱动程序之前,内核驱动程序存在较长时间的延迟,原因是 固态硬盘 输入输出 (IO) 延迟之后,有 VFS、环境切换、MSI-X 和中断处理程序步骤。但在应用 uNVMe 设备驱动程序之后,三星用户空间驱动程序通过在文件系统步骤之后、固态硬盘 输入输出 (IO) 延迟之后进行轮询,降低了延迟,提高了吞吐量。

性能提高
在两种类型的服务器系统中,包括 Intel 中央处理器 (CPU) 和 AMD 中央处理器 (CPU),三星的 PM983 NVMe SSD 存储器的性能同时使用内核设备驱动程序和 uNVME 设备驱动程序进行度量。
表中显示了用于度量三星 PM983 NVMe 固态硬盘 的性能的两种类型的服务器系统。采用 intel 中央处理器的系统 1,系统为 Dell R740xd,中央处理器为 Intel Xeon SP Gold 6142 @ 2.6GHz(每个插槽:16 个核心,32 个线程)。采用 AMD 中央处理器的系统 2,系统为 SMC 2023US-TR4,中央处理器为 AMD EPYC 7451 @ 2.0GHz(每个插槽:24 个核心,48 个线程)。这两个系统都具有:内存-64GB,存储器-三星 PM983 1.92TB x 4ea,操作系统-CentOS 7.5 (Linux Kernel 3.10),NVMe 设备驱动程序-内核驱动程序:Kernel 3.10 /用户驱动程序:uNVMe 驱动程序 2.0 版 + FIO 插件 (https://github.com/OpenMPDK/uNVMe)、测试工具-FIO 3.3,输入输出 (IO) 引擎与工作负载-面向内核输入输出 (IO) 的 Libaio/面向用户级输入输出 (IO) 的 uNVMe2_fio_plugin/工作负载:4KB 随机读取。
表中显示了用于度量三星 PM983 NVMe 固态硬盘 的性能的两种类型的服务器系统。采用 intel 中央处理器的系统 1,系统为 Dell R740xd,中央处理器为 Intel Xeon SP Gold 6142 @ 2.6GHz(每个插槽:16 个核心,32 个线程)。采用 AMD 中央处理器的系统 2,系统为 SMC 2023US-TR4,中央处理器为 AMD EPYC 7451 @ 2.0GHz(每个插槽:24 个核心,48 个线程)。这两个系统都具有:内存-64GB,存储器-三星 PM983 1.92TB x 4ea,操作系统-CentOS 7.5 (Linux Kernel 3.10),NVMe 设备驱动程序-内核驱动程序:Kernel 3.10 /用户驱动程序:uNVMe 驱动程序 2.0 版 + FIO 插件 (https://github.com/OpenMPDK/uNVMe)、测试工具-FIO 3.3,输入输出 (IO) 引擎与工作负载-面向内核输入输出 (IO) 的 Libaio/面向用户级输入输出 (IO) 的 uNVMe2_fio_plugin/工作负载:4KB 随机读取。

通过使用 uNVMe 设备驱动程序,随机读取工作负载方面表现出最大的性能提高,这对于数据中心和企业服务器系统最为重要。对于写入性能,由于写入 NAND 所需的时间通常是一个瓶颈因素,因而性能提高比较有限,但在未来性能可能会得到较大提升,具体取决于 SSD 写入性能提高情况。
图中比较了采用用户空间驱动程序 (udd) 和内核设备驱动程序 (kdd) 时 Intel 中央处理器的随机读取工作性能。两种情况都采用度量 PM983 NVMe 固态硬盘 性能的形式;fio-3.3,4KB 输入输出 (IO),numjobs=4。采用 QD32 时,用户空间驱动程序的性能是内核设备驱动程序的 1.7 倍;采用 QD128 时,前者的性能是后者的 2.9 倍。
图中比较了采用用户空间驱动程序 (udd) 和内核设备驱动程序 (kdd) 时 Intel 中央处理器的随机读取工作性能。两种情况都采用度量 PM983 NVMe 固态硬盘 性能的形式;fio-3.3,4KB 输入输出 (IO),numjobs=4。采用 QD32 时,用户空间驱动程序的性能是内核设备驱动程序的 1.7 倍;采用 QD128 时,前者的性能是后者的 2.9 倍。

图中比较了采用用户空间驱动程序 (udd) 和内核设备驱动程序 (kdd) 时 AMD 中央处理器的随机读取工作性能。两种情况都采用度量 PM983 NVMe 固态硬盘 性能的形式;fio-3.3,4KB 输入输出 (IO),numjobs=4。采用 QD32 时,用户空间驱动程序的性能是内核设备驱动程序的 2.3 倍;采用 QD128 时,前者的性能是后者的 3.5 倍。
图中比较了采用用户空间驱动程序 (udd) 和内核设备驱动程序 (kdd) 时 AMD 中央处理器的随机读取工作性能。两种情况都采用度量 PM983 NVMe 固态硬盘 性能的形式;fio-3.3,4KB 输入输出 (IO),numjobs=4。采用 QD32 时,用户空间驱动程序的性能是内核设备驱动程序的 2.3 倍;采用 QD128 时,前者的性能是后者的 3.5 倍。

下载三星的 OpenMPDK 以获取 uNVMe 设备驱动程序的好处 要将尖端的内存或存储解决方案集成到您当前的系统中,以实现更佳的性能和更短的系统集成时间,请访问 OpenMPDK 开源网站1),下载参考软件,按照指导进行集成,测试它,然后发布您的整个系统产品。OpenMPDK 开源网站为 http://github.com/OpenMPDK。 此外,请单击下面的链接以下载白皮书。

* SSD - 固态硬盘 * NAND - 非易失闪存 * UDD - 用户空间设备驱动程序 * KDD - 内核级设备驱动程序

本网站的产品图片以及型号、数据、功能、性能、规格参数等仅供参考,三星有可能对上述内容进行改进,具体信息请参照产品实物、产品说明书。除非经特殊说明,本网站中所涉及的数据均为三星内部测试结果,所涉及的对比,均为与三星传统产品相比较.