



SSD的一些测试项目需要驱动提供专门的测试接口,而标准的驱动并不提供这些接口,比如在NVMe或SATA协议测试中,测试需要根据当前要测试的协议要求点,构建命令包,然后下发给SSD,从而验证SSD能否正确响应该命令。在组包时,会故意注入一些错误,以验证SSD的错误处理功能。标准的驱动程序并不提供这些测试接口,只能通过自研驱动实现。一些商业测试工具的驱动其实也是由设备供应商替换掉了原有的标准驱动,提供了一系列测试用的API接口。
SSD的驱动开发工作按照以下步骤开展。
充分理解自研驱动需要解决哪些问题、实现哪些测试功能、服务的对象是何种类型的SSD(PCIe、SATA、SAS)、运行在何种操作系统(Linux、Windows)、运行在何种平台(Intel、AMD、国产化平台)等关键信息,整理成驱动开发需求。结合需求组织讨论,将最终要实现的需求确定下来,并准备好开发资源。
NVMe自研驱动需实现的功能如下:
● 数据PRP造错。
● 创建/删除队列。
● 创建/删除队列造错。
● 异步事件透传给用户处理。
● 命令超时不会触发复位,保留现场。
● HMB获取。
● HMB内容造错。
● 定制化内核日志。
……
驱动程序中包括协议栈(NVMe协议、SATA协议等)、数据流处理、错误处理、内存管理等多个关键功能,这些功能均建议采用模块化设计,以便日后维护和升级。驱动程序对性能影响也很大,在面向高性能的PCIe SSD的驱动设计中,可以通过减少驱动层次、降低协议开销来提升主机驱动性能。在具体实现上,可以采用请求队列、中断聚合、请求TAG寄存器等技术,有效提高系统并行度,降低输入输出请求产生的中断次数,达到提高驱动性能的目的。
对驱动的测试包含以下几类。
● 兼容性测试 :确保驱动能够在不同的测试环境中运行。兼容性测试需要覆盖不同的操作系统版本、硬件平台(AMD、Intel、ARM等)以及SSD(不同容量和品牌)。为SSD自研的驱动类程序需要通过WHQL认证测试。
● 压力测试 :确认驱动可以长期运行工作,期间没有功能故障。
● 功能测试 :确认驱动的各项功能都已经正确实现。
● 性能测试 :驱动与SSD的性能测试结果相关,可以测试SSD盘片在标准驱动和自研驱动下的性能差异,确认驱动对性能的影响。
通过以上测试,确保驱动程序的正确性和可靠性。
对驱动程序进行定期维护和更新,以适应新的需求,例如针对新的操作系统、新的硬件平台进行补充兼容性测试。解决过程中发现的问题,确保驱动程序在新环境下的兼容性。
自研SSD驱动是一项复杂的工作,开发者需要具备驱动开发的相关知识(Linux驱动、Windows驱动),熟悉存储接口协议(NVMe、SATA、PCIe等),还要有较好的编码能力和调试能力。这些都需要开发者具备较强的综合素质。