随着2024年的钟声渐渐敲响,世界的每一个角落都沉浸在辞旧迎新的喜悦之中,此刻您是否和我一样还坚守在工作岗位(假装在上班)。今天是我今年最后一个工作日,明天将踏上回家的旅途。祝愿大家归途一切顺利,平安抵达家的港湾。
近期VPP社区提交一个补丁,允许为Tap接口设置 virtio 设置busypoll_timeout_us属性,将配置传递给virtio后端,改善后端的性能,用来提升TAP接口收包处理性能,据邮件中描述在禁用 gso 的情况下,tcp 和 udp 的性能提高了约 15%。性能提升还是相当可观的。(tap接口相关介绍可以参见链接:learning:tap/tun(1))。
patch 链接:https://gerrit.fd.io/r/c/vpp/+/40292 tap: add virtio polling option Pass busypoll-timeout-us value to virtio backend. This can improve backend performance - it will perform busypoll after recieving a packet. Type: improvement Change-Id: I66e23bd2795fcc9ac55ffef278c7c367d93ac6b0 Signed-off-by: Stanislav Zaikin stanislav.zaikin@46labs.com vpp-dev邮箱讨论链接:https://lists.fd.io/g/vpp-dev/topic/104194897#24033
此补丁还没有被官方merge,我们可以通过使用下面git命令将补丁文件合并到代码
git fetch https://gerrit.fd.io/r/vpp refs/changes/92/40292/1 && git cherry-pick FETCH_HEAD
核心代码是在调用创建tap接口函数tap_create_if时,对每一个rx_queue对应的fd通过ioctol设置VHOST_SET_VRING_BUSYLOOP_TIMEOUT属性。
if (args->busypoll_timeout_us)
{
state.num = args->busypoll_timeout_us;
virtio_log_debug (vif, "VHOST_SET_VRING_BUSYLOOP_TIMEOUT: time %lu",
state.num);
_IOCTL (fd, VHOST_SET_VRING_BUSYLOOP_TIMEOUT, &state);
}
下面是文心一言中描述关于VHOST_SET_VRING_BUSYLOOP_TIMEOUT 参数的解释:是一个用于Linux vhost-user 后端的 ioctl(输入/输出控制)调用,它允许用户空间程序为 vhost-user 虚拟环(vring)设置一个“忙碌循环”超时。这个参数的主要目的是控制 vhost-user 后端在轮询虚拟环以查找新的请求或数据时应该等待多久,从而避免无用的 CPU调用。
以下是关于 VHOST_SET_VRING_BUSYLOOP_TIMEOUT 的详细解释:
总之,VHOST_SET_VRING_BUSYLOOP_TIMEOUT 是一个用于控制 vhost-user 后端在轮询虚拟环时的忙碌循环超时的参数。通过合理地设置此参数,可以优化系统性能,避免不必要的 CPU 使用,同时保持响应性。
TAP接口在VPP产品中广泛使用,VPP项目中目前最活跃的插件《Learning VPP: linux-cp(1)》中就使用到了。在《Flexiwan 架构及功能说明》中,其他LTE、wifi、及DHCP server服务中都广泛使用。有性能困扰的哥们可以尝试使用一下,期待各位的反馈。
本文分享自 DPDK VPP源码分析 微信公众号,前往查看
如有侵权,请联系 cloudcommunity@tencent.com 删除。
本文参与 腾讯云自媒体同步曝光计划 ,欢迎热爱写作的你一起参与!