美文网首页
virtio network数据传输

virtio network数据传输

作者: 迷死她张 | 来源:发表于2019-06-28 18:34 被阅读0次

网络驱动数据传输有两个队列:接收队列和发送队列;每个队列都对应一个virtqueue,两个队列之间是互不影响的。

当两个queue都需要客户机填充buffer,ReceiveQueue需要客户机 driver提前填充分配好的空buffer,然后记录到availRing,并在恰当的时机通知后端,当外部网络有数据包到达时,qemu后端就从availRing 中获取一个buffer,然后填充数据,完事后记录buffer head index到usedRing.最后在恰当的时机通知客户机(向客户机注入中断),客户机接收到信号便知道有数据包到达,这里只需要从usedRing 中获取到index,然后取data数组的第i个元素即可。因为在客户机填充buffer的时候把逻辑buffer的指针保存在data数组中。

而SendQueue同样需要客户机去填充,只不过这里是当客户机需要发送数据包时,把数据包构造成逻辑buffer,然后填充到send Queue,并在恰当的时机通知后端,qemu后端收到通知就知道那个队列有请求到达,如果当前没有处理其他数据包就着手处理这个数据包。具体就同样是从AvailRing中取出buffer head index,然后从描述符表中get到buffer,这时就需要从buffer中copy数据了,因为要把数据包从host发送出去,然后更新usedRing。最后同样要在恰当的时机通知客户机。注意这里客户机同样需要从usedRing 中get index,但是这里主要是用于delay notify,因为数据包由客户机构造,其占用的buffer并不能重复使用,只是每次有数据包就把其构造成buffer而已。

以上便是基本的使用sendqueue和receive的原理。

相关文章

  • virtio network数据传输

    网络驱动数据传输有两个队列:接收队列和发送队列;每个队列都对应一个virtqueue,两个队列之间是互不影响的。 ...

  • qemu-kvm创建虚拟机

    创建桥接 编辑/etc/network/interface 创建虚拟磁盘 安装系统 windows安装virtio...

  • Virtio的基本架构

    Virtio由前端驱动和后端处理程序构成,前端驱动(front-end,如virtio-blk、virtio-ne...

  • vhost-net 1 -- 重要流程

    vhost-net介绍 virtio架构virtio架构 virtio表示虚拟化IO,用于实现设备半虚拟化,即虚拟...

  • 5g网络切片摘要

    NS(network slice) Background 传统网络架构面临着结构封闭僵化,数据传输转发性能高度受限...

  • virtio blk原理

    别人写的virtio blk原理 virtio的原理说起来挺简单的,两边是front-driver,backend...

  • Virtio and QEMU storage stack

    virtio Virtio是IO虚拟化中的一个优化方案,属于para-virtulization的一种实现,即Gu...

  • DPDK编程指南(翻译)( 二十七)

    27. Vhost 库 Vhost库实现了一个用户空间virtio网络服务器,允许用户直接操作virtio。 换句...

  • virtio blk

    又到了喜闻乐见的总结时间了,我测试了一下virtio接口的虚拟磁盘的性能,基本上和native差了一半。不知道是不...

  • SPDK (part 3, virtio/vhost基础)

    KVM virtio virtio是linux下的半虚拟化框架,半虚拟化相对于全虚拟化而已,即虚机需要感知当前的虚...

网友评论

      本文标题:virtio network数据传输

      本文链接:https://www.haomeiwen.com/subject/bujecctx.html