前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >提升tap接口转发性能方法

提升tap接口转发性能方法

作者头像
dpdk-vpp源码解读
发布2024-02-22 15:06:27
2770
发布2024-02-22 15:06:27
举报
文章被收录于专栏:DPDK VPP源码分析

随着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命令将补丁文件合并到代码

代码语言:javascript
复制
 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属性。

代码语言:javascript
复制
       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 的详细解释:

  1. 用途:当 vhost-user 后端在轮询其虚拟环时,如果没有找到任何新的请求或数据,它将继续等待,直到超时。这个超时就是通过 VHOST_SET_VRING_BUSYLOOP_TIMEOUT 设置的。这有助于避免 CPU 过度使用,尤其是在低负载或空闲时。
  2. 参数:此 ioctl 调用接受一个整数参数,表示超时时间(以微秒为单位)。例如,如果设置为 100000,那么 vhost-user 后端在轮询虚拟环时最多等待 100,000 微秒(即 0.1 秒)。
  3. 行为:
    • 如果在指定的超时时间内,vhost-user 后端找到了新的请求或数据,它将立即处理它们。
    • 如果超时时间到达而没有新的请求或数据,vhost-user 后端将停止轮询并返回,稍后再试。
  4. 调整:根据工作负载和系统性能,可能需要调整此超时值。如果设置得太低,可能会导致 CPU 使用率过高,因为 vhost-user 后端将频繁地轮询虚拟环。如果设置得太高,可能会导致响应延迟增加。
  5. 默认值:不同的系统和 vhost-user 实现可能会有不同的默认值。在某些情况下,默认值可能是为了平衡 CPU 使用率和响应性而选择的。
  6. 与其他参数的关系:这个参数与 vhost-user 的其他参数(如队列大小、批处理大小等)一起工作,共同影响性能。调整这些参数时,需要考虑它们之间的相互作用。

总之,VHOST_SET_VRING_BUSYLOOP_TIMEOUT 是一个用于控制 vhost-user 后端在轮询虚拟环时的忙碌循环超时的参数。通过合理地设置此参数,可以优化系统性能,避免不必要的 CPU 使用,同时保持响应性。

TAP接口在VPP产品中广泛使用,VPP项目中目前最活跃的插件《Learning VPP: linux-cp(1)》中就使用到了。在《Flexiwan 架构及功能说明》中,其他LTE、wifi、及DHCP server服务中都广泛使用。有性能困扰的哥们可以尝试使用一下,期待各位的反馈。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2024-02-07,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 DPDK VPP源码分析 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档