DPDK对于Queue的配置_weixin_37097605的博客-程序员宝宝

640?wx_fmt=jpeg

作者简介

颜智润 Intel软件工程师

主要从事DPDK开发与虚拟化方面的工作。

640?wx_fmt=gif

DPDK 通过全局变量nb_rx_qnb_tx_q标记txq和rxq的数量。该值可通过—rxq和—txq参数传入,也可以在运行过程中修改。DPDK 19.02 增加支持动态修改queue数量,可以通过原有的queue-num-per-vf 参数预分配,也可以使用新feature的特性动态增加。Testpmd 中可以使用configport port_id rxq queue_number调整queue数量。在默认情况下都会有一个最大值的限制。并且调整queue数量后,需要重新配置queue。

使用

方法一:预分配

./testpmd -c f -n 4 -w05:00.0,queue-num-per-vf=8 \

--file-prefix=test1 --socket-mem 1024,1024 ---i

方法二:动态、运行过程中再申请

testpmd> port stop all

配置Queue的主要代码简介

  • 1.配置前,通过rte_eth_dev_info_get() 获取可分配的queue数量以及可以支持的最大可分配queue数量max_rx_queues和 max_tx_queues。

  • 2.如果应用程序未指定rxq txq数量,则以默认值分配,通常为1。值得注意的一点是,VF调整queue数量需要和PF进行协商,在满足一定条件的情况下,才会同意VF调整queue数量的操作。以i40evf为例:默认VF可以使用最大queue为4。理论上来说,该值可以调整到网卡可分配最大的queue数量,但是由于软硬件各方面的限制,在目前来说,该值不可能也不需要无限大。根据目前的需求,后续版本可能会加入对queue数量在一定范围内动态调整的功能。

  • 3.在通常情况下,i40e 驱动会预分配4个queue给VF,并且限定最大queue数量为4。并且默认使用一个queue。此时可以通过重新config来调整queue的数目为1~4之间的值。Kerneldriver已经支持动态调整,并且i40evf最大可以支持到16个queues。

  • 4.配置queue会使用rte_eth_dev_rx_queue_config()和rte_eth_dev_tx_queue_config()在此处会dev->data->rx_queues= rte_zmalloc("ethdev->rx_queues", sizeof(dev->data->rx_queues[0])* nb_queues,     RTE_CACHE_LINE_SIZE); 分配相应数量的指针指向由驱动分配的queue结构体。在i40e中的结构为i40e_tx_queue和i40e_rx_queue。

  • 5.如果queue数量向下调整(如4->1)会释放多余的3个queue资源。如果queue数量向上调整(如2->3)则会在原有基础上,新分配queue资源。rte_eth_tx_queue_setup()和rte_eth_rx_queue_setup()则调用具体driver的处理函数分配queue资源。

一些相同与不同点

1.在kernel中,i40evf重新分配queue数量通过发送VIRTCHNL_OP_REQUEST_QUEUES 消息给pf来协商queue数量。当pf有能力提供更多数量queue的时候会通过VIRTCHNL_EVENT_RESET_IMPENDING事件通知VF需要执行reset。

2.DPDK中queue-num-per-vf是预分配若干个queue,随后根据用户需求进行使用。动态申请则是和kernel driver基本相同,在运行过程中申请,在动态申请的过程中需要执行对VF的reset操作。

一个简单的测试

在testpmd中可以通过增加—rss-udp 参数来开启rss。此时会利用哈希分桶的原理分发到不同的queue上。停止收发包后可以在testpmd上清楚的看到多个queue的使用情况。

640?wx_fmt=jpeg

 推荐阅读 

640?wx_fmt=jpeg


版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/weixin_37097605/article/details/101514638

智能推荐

JSLink and Display Templates Part 3 – Creating a custom editing interface_weixin_30344131的博客-程序员宝宝

So this part talks about some of the more interesting bits of Display Templates .. the editing interface. This introduces some new features as not only are we required to provide and rendering all of ...

创建maven或者Gradle项目的时候GroupId和ArtifactId以及Version是什么意思?__small_tail的博客-程序员宝宝_gradle 项目的version

GroupId 是项目组织的唯一标识符,在实际开发中对应JAVA的包的结构,就是main目录里java的目录结构,如 ‘com.itcast.demo’。ArtifactId是项目的唯一标识符,在实际开发中一般对应项目的名称,就是项目根目录的名称,例:GradleDemo。Version 是项目的版本号,例:1.0-SNAPSHOT 。其中1.0是版本号,SNAPSHOT版本代表不稳定、尚...

关于在el-table中使用el-popover碰到最后一行显示问题和解决_香酥蟹的博客-程序员宝宝

问题在使用element-ui过程中碰到个问题,想在el-table中实现点击表格出现浮框,显示内容,通过文档查到了el-popover这个控件,在刚使用的时候如下方所写,但是在使用的过程中,发现一个问题,table中最后一行的表格点击怎么都不显示,于是换了一种写法,解决了问题。 <el-table-column label="投诉内容" align="center" min-widt...

达梦数据库创建定时作业_g360382的博客-程序员宝宝_sp_db_bakset_remove_batch(null,sysdate-7);

达梦数据库创建定时作业1、新建代理环境2、新建定时全备、增备作业2.1 作业名及作业描述2.2 作业步骤2.2.1 常规2.2.2 作业步骤2.2.3 作业调度2.2.4 DDL2.2.5 增备与全备全备的区别3、定时作业执行SQL脚本3.3.1 常规3.3.2 作业步骤3.3.2.1 调用系统存储过程使用DM管理工具代理作业进行定时备份或执行脚本,此次,我分享一下我创建定时作业的步骤。1、新建代理环境2、新建定时全备、增备作业右键作业,点击“新建作业”2.1 作业名及作业描述_1671465600

【CodeForces - 122B】Lucky Substring(思维)_bfcx的博客-程序员宝宝

Petya loves lucky numbers. Everybody knows that lucky numbers are positive integers whose decimal representation contains only the lucky digits 4 and 7. For example, numbers 47, 744, 4 are lucky and 5...

mysql获取表结构sqlserver,SQL Server2008中通过SQL获取表结构_weixin_39553776的博客-程序员宝宝

搜索热词下面是编程之家 jb51.cc 通过网络收集整理的代码片段。编程之家小编现在分享给大家,也给大家做个参考。selectsyscolumns.name as [Name],systypes.name as [Type],syscolumns.length AS [Size],syscolumns.xprec As [Precision],ISNULL(syscolumns.scale,0) ...

随便推点

SpringFramework核心技术三:Spring时间处理和类型转换_向小凯同学学习的博客-程序员宝宝

使用在(1)中,我们学习了蛮多的基本概念,在(2)中咱们看一下如何使用的问题。一、以编程方式使用ConversionService要以编程方式使用ConversionService实例,只需为其他bean注入一个引用即可:@Servicepublic class MyService { @Autowired public MyService(Conver...

UIScrollView以编程方式滚动到底部_xfxf996的博客-程序员宝宝_uiscrollview 滚动到底部

How can I make a UIScrollView scroll to the bottom within my code? 如何使UIScrollView滚动到代码底部? Or in a

数据库类型区分_「已注销」的博客-程序员宝宝_数据库数量什么类型怎么看

数据库类型主要可分为:网状数据库(Network Database)、关系数据库(Relational Database)、树状数据库(Hierarchical Database)、面向对象数据库(Object-oriented Database)等。商业应用中主要是关系数据库,比如DB2、Sybase、MS SQL Server、Informax、MySQL等。U2FsdGVkX1855sYOYpAFVTpldPT2uMRICQ4ypqYK4CMwqGMXZoJt0dtmT7Hyy5EEs.

Java客户端调用Websocket服务端,基于Springboot_最爱猫被窝的博客-程序员宝宝

WebSocket服务端创建Springboot工程,引入WebSocket依赖配置WebSocketConfig配置WebSocketServerJava客户端创建Springboot工程,引入java客户端依赖配置JavaClient创建连接测试效果

sqlite c语言api 实例,sqlite3数据库c语言常用接口应用实例_weixin_39801075的博客-程序员宝宝

#include /***************************typedef int (*sqlite3_callback)(void*, // Data provided in the 4th argument of sqlite3_exec()int, // The number of columns in rowchar**, // An array of...

PyHook3监听任意窗口内键盘事件示例_一粒马豆的博客-程序员宝宝

#监听键盘 import pythoncom import PyHook3import win32clipboard import os,sysprint("键盘按下组合键Ctrl+M后,剪贴板内的内容就可以保存到本地文件")path=os.getcwd()file_save=path+os.path.sep+"keyboard.txt"def OnKeyboardE...

推荐文章

热门文章

相关标签