dpdk读字节,却触发了两次tlp
阅读原文时间:2023年07月11日阅读:2

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

手机扫一扫

移动阅读更方便

阿里云服务器
腾讯云服务器
七牛云服务器