请教一下 OVS DPDK 发送队列 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
yan17
V2EX    编程

请教一下 OVS DPDK 发送队列

  •  
  •   yan17 2021-12-03 11:21:17 +08:00 1715 次点击
    这是一个创建于 1415 天前的主题,其中的信息可能已经有所发展或是发生改变。

    关于 OVS dpdk 的接收队列,很多文档都有描述,通过 RSS 等方式让不同的包去往不同的队列,然后不同的队列交给不同的核处理,可以加快处理速度等。但关于发送队列我找到的资料很有限,特别是 OVS-DPDK 的,

    1. 多队列的支持问题,使用虚拟端口 vhostuser 时,源码上面看到至多可配置 1024 个发送接收队列。但物理网卡的队列我不太清楚,应该是物理网卡的实际队列数还是说也可以虚拟很多队列,与网卡的实际队列无关?(对了,有看到说如果存在多个 PMD 访问同一个网卡的话,会为每一个 PMD 准备一个队列,避免冲突)

    2. 在多队列的情况下,网卡是怎么选择从哪一个队列发取包发送诶?

    yan17
        1
    yan17  
    OP
       2021-12-06 13:20:06 +08:00
    目前我理解的是对物理网卡单个端口来说,它最多可以使用的队列数就是它的实际队列数,每一个队列都有一段缓存空间,放着对应的描述符队列`rx_ring`,还有`sw_ring`,存放着`*mbuf`。

    回到 OVS DPDK 的发包,每一个 PMD 静态分配了一个发送队列 qid (也可以使用 XPS 动态分配队列),对所有发送端口都使用该队列,如有的网卡有 8 个队列,有的只有 4 个队列,在将数据包入队时,会将 qid 与实际端口的最大队列作取余。

    现在 PMD 取到了队列,准备将数据包放入发送队列中。放入的过程就是将数据包相关的信息写入到 发包描述符中,其中最关键的有两个,一个就是标识完整的包结束的标志 EOP (End Of Packet),另外一个就是请求报告发送状态 RS (Report Status)。由于一个包可能存放在一个或者多个内存缓冲块里面,需要一个或者多个发包描述符来表示一个等待发送的包,EOP 就是驱动程序用来通知网卡硬件一个完整的包结束的标志。每当驱动程序设置好相应的发包描述符,硬件就可以开始根据发包描述符的内容来发包。

    至于多个 PMD 同时往同一个端口的不同队列中写入时,端口如何选择先从哪一个队列发包?
    以及多个 PMD 往同一个队列中写入时,需要不需锁?(我在 tx_pkt_burst 源码中没有看到锁,struct igb_tx_queue 队列结构体中也没有锁,在《 dpdk 深入浅出》中说,如果有多个核可能需要同时访问同一个网卡,那么 DPDK 就会为每个核都准备一个单独的接收队列 /发送队列。这样,就避免了竞争,也避免了 Cache 一致性问题。但我的场景是会多个核访问同一个队列.....)

    参考: https://www.codenong.com/cs109400686/
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     2637 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 29ms UTC 14:54 PVG 22:54 LAX 07:54 JFK 10:54
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86