首页 > 其他分享 >dpdk读字节,却触发了两次tlp

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

时间:2022-08-22 09:24:31浏览次数:48  
标签:tlp vfio 字节 val io dpdk

在通过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的读写。

标签:tlp,vfio,字节,val,io,dpdk
From: https://www.cnblogs.com/10087622blog/p/16611694.html

相关文章