下面记录SPDK常见错误的解决方法,以免重复走弯路
读写没对齐 512B
现象:
nvme_qpair.c: 137:nvme_io_qpair_print_command: *NOTICE*: WRITE sqid:1 cid:191 nsid:1 lba:0 len:65536
nvme_qpair.c: 306:nvme_qpair_print_completion: *NOTICE*: INVALID FIELD (00/02) sqid:1 cid:191 cdw0:0 sqhd:0002 p:1 m:0 dnr:1
解决办法:分析代码允许记录:
TRACE: 09-12 10:45:02: * 0 common/spdknvme_io.c:296] OP: Write, Offset:0, Size: 13
根据SPDK NVME 接口读写要求,必需512B对齐。改成了512B 之后,上面报错消失。
不是从大页内存读写
现象
starting write I/O failed, push back, reback to previous status
starting write I/O failed, push back, reback to previous status
解决办法:
SPDK读写的内存必须是基于EAL 大页申请的内存,这部分内存通过EAL DPDK库能够映射到用户态,如果用普通的内存,无法做DMA以供NVME hardware queue 直接使用,因此需要检查读写的接口使用的内存是否都是从大页分配的。检查了一下,果然这里不符合预期,修改检查允许正常。