白话 virtio DMA 过程 (二)

40 篇文章 9 订阅
8 篇文章 0 订阅

上一篇里面,我们讲述了DMA的过程,本文里面,我们讲述virtio报文的格式和处理工作。

virtio 报文如下图所示

除了我们常见的报文头 + 报文载荷以外(蓝色部分),以网络为例,还会增加一个virtio_net_hdr,这个virtio_net_hdr 主要用在virtio前后端传输使用,前端用这个头告诉后端一些信息,如buffer数量,特殊卸载过程、参数等等,这些都可以是自定义的。所以我们在代码里面会看到,在报文的头部会追加virtio_net_hdr。virtio_net_hdr 在DPDK的实现里面,可以放在一个新的mbuf中,也可以放在报文的mbuf中,通过can_push参数进行控制。

既然 virtio_net_hdr 主要用在virtio前后端传输使用,就只会在前后端之间存在,在前后端的终点进行终结。下图提现了报文的处理过程

从做往右看,

左侧:IP stack 发出标准的报文,前端驱动会在保准报文前面追加 virtio_net_hdr,然后从前端送往后端。后端可以是软件实现,硬件实现,也可以是软硬件结合的实现,所以对应的virtio_net_hdr可以在软件剥离或硬件剥离,具体实现依赖于厂商决定。剥离了virtio_net_hdr后,报文送往MAC,发送到NETWORK上。

右侧:MAC收到报文,按照和左边对应的方式,由软件或硬件添加virtio_net_hdr报文头并填充响应的处理信息,哪个进行添加依赖于厂商定义,然后送往前端驱动中,前端驱动处理了virtio_net_hdr后,进行剥离,最后标准报文送往IP 协议栈,完成处理。

另外,我们可以看到,后端使用virtio_net_hdr就足以处理转发的报文,也就是处理不需要送往guest OS的转发报文。

好了,今天先到这里,谢谢观看

 

参考文档:

白话 virtio DMA 过程 (一)

 

  • 1
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
virtio dma报文头是指在virtio网络设备中用来处理转发报文的头部信息。根据引用,后端使用virtio_net_hdr结构体来处理不需要送往guest OS的转发报文。具体地,在virtio-net.c文件中的virtio_net_handle_rx函数(引用)中,通过调用qemu_flush_queued_packets函数将队列中的报文发送到后端驱动的nic设备中进行处理。在virtio网络设备的前端驱动部分,报文的处理流程包括start_xmit、xmit_skb、sg_set_buf等步骤(引用)。通过这些步骤,virtio dma报文头被设置和处理,以实现报文的转发功能。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* [白话 virtio DMA 过程)](https://blog.csdn.net/leoufung/article/details/115293619)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] - *2* *3* [virtio-net发包流程分析](https://blog.csdn.net/qq_41596356/article/details/128248214)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值