0 投票
分类:DPDK初学入门 | 用户: (130 分)

dpdk是绕开内核直接在用户态进行包收发的,这个包发送到网卡的pmd驱动后,是通过将发送数据的物理地址写入ring描述符后更新描述符索引来触发发送的吧。  

  但我没有找到刷cache到main memory的地方,如果在调用tx_burst之前修改过包内的数据,然后直接调用tx_burst发送,岂不是网卡可能会拿到仍然在cache而不在main memory中的数据?   我知道kernel中是通过stream dma或者coherent dma分配来保证内存一致性的,但dpdk代码里没找到相应的操作的处理地方。

1个回答

+1 投票
用户: (5.4k 分)

看你的描述,似乎是想修改包的内容,然后将修改后的包发出去,如果是这样的话,直接修改后调用tx_burst就可以了

用户: (130 分)
不是的,我是想弄明白dpdk是如何处理设备dma与cache coherency的关系的,这个问题已经一个月了,我在其他地方搜索后差不多明白了。 cache coherency是由具体的cpu架构和cache 控制器来做保证的,pcie控制器访问内存和cpu访问内存都受到控制器的控制,所以多数架构都不需要做额外处理,像在x86上直接tx_burst就能直接发送消息。

相关问题

0 投票
1 回答
最新提问 3月 26, 2019 分类:DPDK初学入门 | 用户: hehuan (370 分)
0 投票
1 回答
+1 投票
0 回答
最新提问 1月 24, 2019 分类:DPDK API问答 | 用户: ningwei222 (140 分)

欢迎来到 DPDK交流社区 ,有什么问题可以尽管在这里提问,您将会收到社区其他成员的回答;也可以将您的总结写在这里,为社区其他成员提供帮助。

QQ交流2群:635461501 (入群请注明来源)

冀ICP备15005332号-2
...