-
Notifications
You must be signed in to change notification settings - Fork 0
Home
欢迎大家来了解和使用pynvme。pynvme不仅面向SSD测试人员,也面向SSD开发人员。通过提供一个好用的测试工具,鼓励开发工程师自己测试自己的代码。我们在接下来的21天时间里带大家一起学习如何使用pynvme,主要是如何通过pynvme开发测试脚本。在这之前让我们先做些准备工作。
测试出现在产品生命周期的各个环节,pynvme主要服务于产品开发阶段的测试。有别于产品发布前的QA测试,开发阶段的测试有一些不同的需求。
首先,SSD的市场越来越大,但是NAND原厂给这个行业带来的压力也越来越大。SSD厂商通过开发差异化的产品来吸引不同的客户,或是紧随NVMe标准的演进在第一时间推出新增特性,又或是要不断地更新NAND和主控来降低成本。但是在测试方面,并不是所有团队都有足够的资源和技术积累来应对这些挑战。利用现有的测试工具,也很难对这些改变做到充分而有效的测试。
其次,敏捷开发的模式通常要求在开发阶段就引入足够的测试,甚至是通过测试来驱动开发。越早开始测试,就能越早发现问题,解决问题的成本也最低。同时,开发阶段充分而高效的测试也可以保证测试的代码覆盖率,保持代码迭代的稳定性,降低QA测试的风险。
pynvme通过一系列Python API接口直接操作NVMe SSD,让用户可在产品开发阶段快速而高效地开发各种测试脚本。具有如下特点:
- pynvem是一个轻量级的用户态NVMe驱动,直接操作PCIe SSD设备,可以对SSD的各种操作做到精确控制,把SSD的功能、特性和缺陷完全暴露给测试脚本。
- 由于完全绕过内核的存储软件栈,pynvme的性能极高,可以非常高效率地执行测试,也可以压出各种极限条件下可能存在的bug。
- pynvme的面向对象的接口定义,符合NVMe协议的标准,极大降低脚本开发的难度和成本。
- 作为python生态的一员,pynvme可以让用户享受到整个开源社区的帮助,能整合各种第三方软件包,让SSD的测试进入到互联网时代。
pynvme是一个软件定义的测试工具,可以工作在各类x86体系的计算机上,从笔记本到台式机,从工作站到服务器。如上图是一个基本的pynvme开发平台配置(小米笔记本),SATA SSD用来安装OS,PCIe SSD作为被测设备。这样,一台笔记本就是一个完备的测试脚本开发平台。借助于CI和虚拟化工具,我们也可以将测试自动部署到服务器上,池化我们的测试硬件资源。
pynvme工作于Linux环境下,推荐使用Fedora Desktop 32。首先下载源代码:
git clone https://github.com/pynvme/pynvme
然后编译:
cd pynvme
./install.sh
最终能得到nvme.so二进制库文件。
安装完成之后,通过如下命令建立pynvme的运行时环境,并执行一个测试,以验证软件安装是否成功。
make setup
make test TESTS="driver_test.py::test_ioworker_iops_multiple_queue[1]"
如果你能看到如下输出,那说明pynvme的环境已经配置好了。我们可以出发了!
============================= test session starts ==============================
platform linux -- Python 3.8.2, pytest-5.4.1, py-1.8.1, pluggy-0.13.1 -- /usr/bin/python3
cachedir: .pytest_cache
rootdir: /home/cranechu/pynvme, inifile: pytest.ini
plugins: cov-2.8.1
collecting ... collected 1 item
driver_test.py::test_ioworker_iops_multiple_queue[1]
-------------------------------- live log setup --------------------------------
[2020-05-09 15:29:21.466] INFO script(65): setup random seed: 0x1288f3c7
-------------------------------- live log call ---------------------------------
[2020-05-09 15:29:31.917] INFO test_ioworker_iops_multiple_queue(2133): Q 1 IOPS: 75.430K
PASSED
------------------------------ live log teardown -------------------------------
[2020-05-09 15:29:31.919] INFO script(67): test duration: 10.453 sec
============================== 1 passed in 10.89s ==============================