文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

Linux虚拟化KVM-Qemu分析之Virtqueue

2024-12-03 08:30

关注

背景

说明:

  1. KVM版本:5.9.1
  2. QEMU版本:5.0.0
  3. 工具:Source Insight 3.5, Visio
  4. 文章同步在博客园:https://www.cnblogs.com/LoyenWang/

1. 概述

汪汪汪,最近忙成狗了,一下子把我更新的节奏打乱了,草率的道个歉。

2. 数据结构

先看一下核心的数据结构:

  1. struct vring_desc:描述符表,每一项描述符指向一片内存,内存类型可以分为out类型和in类型,分别代表输出和输入,而内存的管理都由驱动来负责。该结构体中的next字段,可用于将多个描述符构成一个描述符链,而flag字段用于描述属性,比如只读只写等;
  2. struct vring_avail:可用描述符区域,用于记录设备可用的描述符ID,它的主体是数组ring,实际就是一个环形缓冲区;
  3. struct vring_used:已用描述符区域,用于记录设备已经处理完的描述符ID,同样,它的ring数组也是环形缓冲区,与struct vring_avail不同的是,它还记录了设备写回的数据长度;

这么看,当然是有点不太直观,所以,下图来了:

3. 流程分析

3.1 发送

当驱动需要把数据发送给设备时,流程如上图所示:

①A表示分配一个Buffer并添加到Virtqueue中,①B表示从Used队列中获取一个Buffer,这两种中选择一种方式;

②表示将Data拷贝到Buffer中,用于传送;

③表示更新Avail队列中的描述符索引值,注意,驱动中需要执行memory barrier操作,确保Device能看到正确的值;

④与⑤表示Driver通知Device来取数据;

⑥表示Device从Avail队列中获取到描述符索引值;

⑦表示将描述符索引对应的地址中的数据取出来;

⑧表示Device更新Used队列中的描述符索引;

⑨与⑩表示Device通知Driver数据已经取完了;

3.2 接收

当驱动从设备接收数据时,流程如上图所示:

①表示Device从Avail队列中获取可用描述符索引值;

②表示将数据拷贝至描述符索引对应的地址上;

③表示更新Used队列中的描述符索引值;

④与⑤表示Device通知Driver来取数据;

⑥表示Driver从Used队列中获取已用描述符索引值;

⑦表示将描述符索引对应地址中的数据取出来;

⑧表示将Avail队列中的描述符索引值进行更新;

⑨与⑩表示Driver通知Device有新的可用描述符;

3.3 代码分析

代码的分析将围绕下边这个图来展开(Virtio-Net),偷个懒,只分析单向数据发送了:

3.3.1 virtqueue创建

3.3.2 virtio-net驱动发送

3.3.3 Qemu virtio-net设备接收

草草收场了,下回见。

参考

https://www.redhat.com/en/blog/virtqueues-and-virtio-ring-how-data-travels

Virtual I/O Device Version 1.1

来源:LoyenWang内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     813人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     354人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     318人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     435人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     224人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-后端开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯