0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

利用PyNVMe3测试SSD盘的可靠性

SSDFans 来源:pynvme 2023-08-07 09:52 次阅读

经历了近十几年的快速发展,SSD已在众多领域取代了HDD。消费级SSD的规格趋于稳定,成本要求不断提高,技术和市场的格局已基本固定。所以,许多初创团队和大厂开始将研发重心放在了企业级SSD上。在这个大背景下,我们开发了一套NVMe SSD的测试软件PyNVMe3。通过最近三年多的推广,我们和众多OEM厂商、SSD厂商建立了良好的合作关系。很多厂商使用我们的产品和服务,并取得了良好的效果:以前抓不到的问题可以抓到了,以前不能测的特性可以测了。

快是王道

为什么PyNVMe3能找出更多的bug?原因在于,PyNVMe3对性能有极致的追求。对于企业级SSD来说,最基本的要求就是稳定。我们对性能的极致追求并不是为了性能测试的结果,而是要最大化对测试盘的压力,提供最紧凑的时序,这样才有可能在有限的开发周期内压出各种潜在的问题。

虽然所有企业级SSD都会使用fio进行性能和压力测试,但其也有一定的局限性。PyNVMe3可以带来比fio更大的测试压力。我们在同一台主机和同一块SSD盘上对fio和PyNVMe3的4K随机读性能进行了测试。fio的单核IOPS为445k,而PyNVMe3可达到831K。PyNVMe3只利用单核CPU就可以打到大部分SSD盘的性能瓶颈。

但有人会问:那我们在用fio测试的时候定义numjobs=4甚至更多的jobs,不就可以了吗?本质上,1个job和4个job是两个不同的测试用例。无论性能还是可靠性,4个job的测试都不能替代1个job的测试。PyNVMe3对性能的极致追求不是为了性能测试的成绩更好看,而是要在各种workload下对测试盘提供最大的压力和最紧凑的时序,用比真实业务场景更大的压力尽量把问题在研发阶段就打出来。

从设计上来看,PyNVMe3能实现比fio更高的性能,是因为PyNVMe3使用了我们基于SPDK自主研发的用户态NVMe驱动。如下图所示,fio的每一个IO都需要经过复杂的内核存储子系统软件堆栈。而PyNVMe3直接通过用户态驱动把IO命令写到和测试盘共享的命令队列,并使用轮询机制从回收队列获得IO的结果。这种方式避免了主机端的内核和中断开销,性能更快、延迟更小,并且性能和延迟的一致性也更好,更接近测试盘的本来面目。打个比方,传统测试工具在测试盘上面盖上了一层厚厚的棉袄,让我们看不清盘的真实面貌;而PyNVMe3的轻量级的驱动只是一层薄薄的纱,让测试脚本可以触摸到测试盘的每一个棱角。

de4835ac-34be-11ee-9e74-dac502259ad0.png

还要可靠

任何存储设备对可靠性的要求都非常高,SSD也是如此。可靠性具体可以分成很多方面:性能要可靠、设备要可靠、数据要可靠。性能可靠:SSD盘要在任何workload下面都提供高并且稳定的性能。设备可靠:SSD盘即便在很大IO压力下,也要能正确处理一些异常事件和命令。数据可靠:SSD盘在各个生命周期的阶段都不能丢数据,真的发生数据丢失也一定要如实报告。

要测试SSD盘的可靠性,需要一个更可靠的测试工具。

PyNVMe3通过上文提到的高性能低延迟的用户态驱动,能给盘最大的压力,并且记录准确的性能跳动和延迟分布。

PyNVMe3可以在Python脚本中创建多个进程,利用多个CPU的资源对同一个测试盘下不同的测试命令。譬如在一个CPU大压力读写测试盘的同时,另一个CPU发指令对测试盘掉电或reset;也可以在一个CPU大压力读写测试的同时,另一个CPU对测试盘发Admin命令或做带外管理操作。

PyNVMe3实现了对测试脚本透明的数据校验机制:通过在DRAM中维护每一个LBA的CRC值,来检查每一笔读数据的正确性。借助x86和ARM提供的CRC专用指令,PyNVMe3可以在实现极高IO性能的同时,对每一笔读IO进行CRC校验。这种机制简化了数据一致性测试的实现,可以在大部分测试中都实现对数据一致性的检查。

PyNVMe3本身的设计也非常注重可靠性。如下图所示,我们在底层驱动中实现了高效的数据流,而将各种各样的NVMe SSD特性放到上层库和Python脚本中实现。通过这种分层设计,将复杂多变的特性和稳定可靠的数据流分开实现,上层的变化不会影响到下层驱动的稳定性。譬如,我们在扩展对ZNS、SRIOV、MI等特性的时候,都是通过上层脚本实现的,避免各种新特性的加入对下层驱动的稳定性造成影响。

de867aba-34be-11ee-9e74-dac502259ad0.png

二次开发

PyNVMe3不仅具有极高的性能和可靠性,而且还非常容易实现二次开发。在PyNVMe3设计之初,我们就确定将所有功能都通过Python API作为唯一的接口开放给客户使用。测试工程师可以通过开发Python脚本来实现他们的创新,并将脚本部署到自动化的测试流程中,实现项目的敏捷开发模式。这对快节奏和高要求的SSD研发项目来说是至关重要的。

PyNVMe3的API设计遵循NVMe协议,通过面向对象的方式把不同的概念和功能封装到不同的类中实现。下图是PyNVMe3 API提供的各种类及其关联方式。

deb948be-34be-11ee-9e74-dac502259ad0.png

利用PyNVMe3提供的API,用户可以快速实现以下各种特性的Python测试脚本:

各种类型的Admin命令

各种压力和类型的IO场景

自定义的NVMe初始化过程

端口

SRIOV

多Namespace

各种LBA format

各种NVMe的特性,如:ZNS,SGL,Reservation,metadata,Arbitration等

注入各种错误和reset事件

掉电测试

Latency和QoS

数据一致性

MI/SMBus带外管理接口

受限于测试工具,以往很多特性不能充分测试。PyNVMe3不仅可以实现上述各种特性的测试,还可以将多种特性结合起来构造更复杂的测试场景。譬如我们发现,将大压力IO和Admin命令放到一起测试,有些盘处理Admin命令的延迟会长达数秒。PyNVMe3提供的这些API让用户可以通过二次开发实现更多的测试用例,让测试开发的效率更高、更富有成效。

我们的脚本开发指南提供了PyNVMe3二次开发的更多细节。

公共平台

PyNVMe3具有很高的性能和可靠性,可以便捷地二次开发各种特性的测试脚本,所以很多客户开始选择PyNVMe3作为内部研发阶段的测试平台,这些客户覆盖了消费级、企业级、数据中心工业和车载等各类SSD产品和主控的研发。

PyNVMe3是一个软件定义的NVMe SSD测试平台,可以工作在笔记本、台式机、工作站以及服务器等各种通用计算机平台之上。PyNVMe3不捆绑特定硬件平台,降低用户大规模部署的成本和风险。PyNVMe3也可以适配各种专门的测试制具,用来实现电源控制、功耗测量、带外管理接口命令等测试。PyNVMe3是一个为广大SSD厂商定制开发的NVMe SSD测试平台,受到广大厂商的关注和信任。

当我们的客户发现他们的合作伙伴也在使用PyNVMe3的时候,PyNVMe3作为一个独立第三方的测试平台的优势就体现出来了:各个厂家可以各自开发PyNVMe3的测试脚本,并且和他们的合作伙伴共享这些测试脚本,来保证双方合作的顺畅。我们经常会遇到一些问题只能通过SSD厂商的内部平台来复现,但是出于各种技术、商业和IP的考虑,这些内部平台无法开放给合作伙伴使用。现在我们只需要在PyNVMe3上面开发脚本,这样合作各方都可以在PyNVMe3这个公共平台上面跑相同的测试脚本。相对于开放整个内部测试平台,共享一些Python测试文件的使用权限在公司之间更容易操作。PyNVMe3正在成为业界一个专业的可获得的SSD测试公共平台。

我们与众多SSD厂商和OEM厂商建立了合作关系,为客户提供我们的测试工具和服务。我们通过PyNVMe3的开放的理念、优越的性能和可靠性、强大的二次开发扩展能力,和业界合作伙伴一起做出更好更稳定的SSD产品!

审核编辑:汤梓红
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 内核
    +关注

    关注

    3

    文章

    1372

    浏览量

    40288
  • SSD
    SSD
    +关注

    关注

    21

    文章

    2862

    浏览量

    117411
  • python
    +关注

    关注

    56

    文章

    4796

    浏览量

    84668
  • HDD
    HDD
    +关注

    关注

    0

    文章

    143

    浏览量

    27436
  • nvme
    +关注

    关注

    0

    文章

    221

    浏览量

    22633

原文标题:PyNVMe3:重塑企业级SSD测试的新范式

文章出处:【微信号:SSDFans,微信公众号:SSDFans】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    深度解读企业级SSD可靠性意义

    本文主要简单介绍一下这些SSD可靠性指标的概念及其意义,方便大家更深入的了解和认识SSD可靠性
    发表于 08-18 11:16 6856次阅读
    深度解读企业级<b class='flag-5'>SSD</b>的<b class='flag-5'>可靠性</b>意义

    #硬声创作季 #可靠性 电子封装可靠性评价中的实验力学方法-3

    可靠性设计可靠性元器件可靠性
    水管工
    发布于 :2022年09月29日 22:10:30

    #硬声创作季 #可靠性 电子封装可靠性评价中的实验力学方法-5

    可靠性设计可靠性元器件可靠性
    水管工
    发布于 :2022年09月29日 22:11:21

    #硬声创作季 #可靠性 电子封装可靠性评价中的实验力学方法-6

    可靠性设计可靠性元器件可靠性
    水管工
    发布于 :2022年09月29日 22:11:46

    可靠性测试方法

    [size=***4pt]课程介绍:实现产品可靠性设计的过程中有两大难题,其中之一就是如何在实验室样机阶段就能把潜在的隐患激发出来,不要让用户成为我们的测试工程师。为了解决此问题,我公司组织多位资深
    发表于 03-28 22:33

    电路可靠性设计与测试

    `电路可靠性设计与测试 [hide][/hide]`
    发表于 07-25 09:06

    可靠性测试

    各位大爷觉得可靠性测试有没有必要做?
    发表于 07-07 17:25

    GaN可靠性测试

    都应通过这样的测试。依我看,JEDEC制定的标准应该涵盖这类测试。您说呢?” 客户的质疑是对的。为使GaN被广泛使用,其可靠性需要在预期应用中得到证明,而不是仅仅通过硅材料配方合格认证(silicon
    发表于 09-10 14:48

    【PCB】什么是高可靠性

    专业学术组织——可靠性技术组。1950年12月,美国成立了“电子设备可靠性专门委员会”,军方、武器制造公司及学术界开始介入可靠性研究,到1952年3月便提出了具有深远影响的建议;研究成
    发表于 07-03 11:09

    什么是高可靠性

    ` 本帖最后由 山文丰 于 2020-7-3 11:20 编辑 PCB可靠性是指“裸板”能够满足后续PCBA装配的生产条件,并在特定的工作环境和操作条件下,在一定的时期内,可以保持正常运行功能
    发表于 07-03 11:18

    单片机应用系统的可靠性可靠性设计

    单片机应用系统中,CPU 运行的是事先固化在单片机的程序存储器的软件.用户无法更改和输入新的程序。这就避免 r 外来计算机病毒的侵袭,其可靠性表现在固化软件本身的可靠性和程序存储器数据保护的可靠性。(
    发表于 01-11 09:34

    如何对嵌入式软件进行可靠性测试

    摘 要 本文针对目前嵌入式软件设计可靠性测试用例的手段主要依靠手工分析,沿用传统的软件测试用例设计方法进行,不能够满足可靠性测试用例设计的基
    发表于 10-27 06:10

    电感可靠性测试

    电感可靠性测试       电感可靠性测试分为环境测试和物理
    发表于 04-10 13:10 4998次阅读

    硅片级可靠性测试详解

    硅片级可靠性(WLR)测试最早是为了实现内建(BIR)可靠性而提出的一种测试手段。
    发表于 03-27 15:53 5043次阅读

    SSD可靠性可靠性量化指标MTBF

    企业环境复杂多变,快速增长的业务需求使得企业在数据存储规模、存储性能和可靠性等多方面提出了越来越高的要求。SSD固态硬盘凭借极高的读写性能、极低延迟成为越来越多企业的首选解决方案,并在数据库、虚拟化
    的头像 发表于 10-11 09:50 9918次阅读
    <b class='flag-5'>SSD</b>的<b class='flag-5'>可靠性</b><b class='flag-5'>可靠性</b>量化指标MTBF