安庆

导航

dpdk读2字节,却触发了两次tlp

在通过vfio框架透传设备到vm中,并且在vm中运行dpdk的驱动。

我们发现,dpdk偶尔的一次pread 2字节,却触发了两次tlp。

原因在于:

do_io_rw
{
else if (fillable >= 2 && !(off % 2)) {//caq:如果偏移是2的倍数
			u16 val;

			if (iswrite) {
				if (copy_from_user(&val, buf, 2))
					return -EFAULT;

				vfio_iowrite16(val, io + off);
			} else {
				val = vfio_ioread16(io + off);

				if (copy_to_user(buf, &val, 2))
					return -EFAULT;
			}

			filled = 2;
}

所以如果需要通过vfio接口读取两个字节,而且偏移是一字节对齐的时候,则会触发两次tlp 读。
这种场景对于dpdk中的接口设计,是有隐性的要求,如果一个字段是2字节,则最好2字节对齐发送,否则后端板卡可能会实现为两次tlp的读写。

posted on 2022-08-22 09:06  _备忘录  阅读(74)  评论(0编辑  收藏  举报