0

我正在为 nvme-cli 开发一个测试工具(用 c 编写并且可以在 linux 上运行)。

出于 SSD 验证的目的,我实际上是在寻找自定义命令(例如 I/O 命令,写入然后读取相同,最后比较两个数据是否相同)

对于读取,ioctl()函数的使用如下面的代码所示。

struct nvme_user_io io = {
    .opcode     = opcode,
    .flags      = 0,
    .control    = control,
    .nblocks    = nblocks,
    .rsvd       = 0,
    .metadata   = (__u64)(uintptr_t) metadata,
    .addr       = (__u64)(uintptr_t) data,
    .slba       = slba,
    .dsmgmt     = dsmgmt,
    .reftag     = reftag,
    .appmask    = appmask,
    .apptag     = apptag,
};
err = ioctl(fd, NVME_IOCTL_SUBMIT_IO, &io);

为了理解读取,我可以到哪里执行控制。

我也想要另一个看起来像的命令

err = ioctl(fd,NVME_IOCTL_WRITE_AND_COMPARE_IO, &io);

这样我就可以在内部进行写入,然后读取相同的位置,最后比较两个数据以确保磁盘仅包含我想要写入的数据。

由于我是这个 nvme/ioctl() 的新手,如果有任何错误,请纠正我。

4

1 回答 1

0

nvme_io() 是一个主命令处理程序,它接受您要发送到设备的 NVMe 操作码作为参数。根据标准,您有单独的命令(操作码)用于读取、写入和比较。您可以单独发送这些命令,也可以添加特定于供应商的命令来计算您需要的内容。

于 2017-12-14T11:14:13.993 回答