dpdk读书笔记--阈值的设置

1 收包队列可释放描述符数量阈值(rx_free_thresh)

1.1 收包队列释放的时机

接收队列的主要职责是负责接收和初步处理网络数据包,即将网卡接收到的数据包的物理地址等信息通过描述符传递给DPDK的接收路径。当数据包到达时,接收队列中的描述符被标记为“已使用”,并包含了数据包的物理地址和长度等关键信息。接下来,DPDK的接收路径会读取描述符中的信息,从物理内存中读取数据包的内容,执行必要的处理,比如解封装、错误检测、过滤、分类等。一旦数据包经过了这些处理步骤,并被交付给上层协议或应用程序,其对应的接收描述符就完成了它的使命。这个时候是可以释放的。

1.2 为什么设置rx_free_thresh

设置rx_free_thresh的目的就是批量设置尾部指针寄存器,通过尾部指针寄存器告知硬件该队列资源可用,可以再次收包了。

2 发包队列发送结果报告阈值(tx_rs_thresh)

2.1 tx_rs_thresh的作用

`tx_rs_thresh` 主要用于控制何时将发送队列中的描述符状态设置为“Ring Status”(通常称为RS位)。当DPDK准备发送数据包时,它会填充发送描述符,包括数据包的物理地址和长度等信息。在描述符准备好后,通常需要设置描述符的RS位,以通知网卡这些数据包已经准备好发送。

但是,频繁地更新RS位会导致大量的MMIO操作,这可能会影响性能。因此,DPDK使用`tx_rs_thresh`来延迟更新RS位,直到准备好的描述符数量达到了这个阈值。一旦达到或超过`tx_rs_thresh`,DPDK会批量更新RS位,通知网卡开始发送这批数据包。

3 发包描述符释放阈值(tx_free_thresh)

3.1 tx_free_thresh的作用

`tx_free_thresh` 则用于控制何时将已发送的数据包描述符从发送队列中释放出来,以便它们可以被重新使用。当数据包成功发送后,网卡会标记对应的描述符为“完成”状态,这些描述符随后需要从发送队列中移除,以便DPDK可以重新使用它们来发送新的数据包。

然而,立即更新描述符状态和释放描述符可能会导致频繁的MMIO操作,影响性能。`tx_free_thresh`提供了一个阈值,DPDK会等到完成状态的描述符数量达到或超过这个阈值时,才批量更新描述符状态,将它们从发送队列中释放出来,重新放入描述符池中,供下次发送数据包时使用。

4 总结

(1)tx_rs_thresh控制何时批量更新描述符的RS位,通知网卡发送数据包。

(2)tx_free_thresh控制何时批量释放已完成发送的数据包描述符,以便它们可以被重新使用。

(3)当接收队列中空闲的描述符数量降到rx_free_thresh以下时,DPDK会触发一个事件,促使应用程序向网卡提供更多的描述符,以保证接收队列不会因为空间不足而无法接收新到达的数据包。这有助于避免数据包丢失和接收延迟,从而维持高吞吐量和低延迟的网络性能。

  • 8
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值