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

2022-10-28,,,

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

dpdk读字节,却触发了两次tlp的相关教程结束。

《dpdk读字节,却触发了两次tlp.doc》

下载本文的Word格式文档,以方便收藏与打印。