[virtio](一):`hw/virtio/` 总览

发布时间:2026/8/6 15:21:54

[virtio](一):`hw/virtio/` 总览
这一组文章从 QEMUhw/virtio/入手拆解 virtio 设备模型、virtqueue、通知机制、transport、vhost、迁移和调试路径。本篇先建立全局地图hw/virtio/到底负责什么读源码时应该从哪里开始。1. 为什么从hw/virtio/开始virtio 是虚拟化 I/O 中最重要的协议之一。传统设备模拟会尽量伪装成真实硬件例如模拟一块网卡或磁盘控制器。这种方式兼容性好但设备语义复杂寄存器访问、中断和状态机都可能带来大量 VM exit 和用户态处理开销。virtio 的思路不同。它不假装自己是一块传统真实硬件而是定义一套 guest 和 host 都理解的虚拟化友好协议。Guest driver 通过共享内存队列提交请求host device model 或 vhost backend 处理请求再通过 used ring 和中断通知 guest 完成。在 QEMU 源码里hw/virtio/承担的是 virtio 设备模型的公共层。它不是某一个具体设备而是很多 virtio 设备共同依赖的骨架。它覆盖的内容包括virtio device 生命周期feature negotiationdevice statusconfig spacevirtqueue 管理notificationinterrupt deliveryvhost 接入migration state具体设备例如 virtio-blk、virtio-net、virtio-scsi、virtio-balloon会建立在这套公共机制之上。2. virtio 的三层结构读 QEMU virtio 源码时最容易混淆的是 device、transport 和 backend。可以先把 virtio 拆成三层virtio device type virtio-blk, virtio-net, virtio-scsi, virtio-balloon virtio transport virtio-mmio, virtio-pci, virtio-ccw virtqueue guest 和 device model 交换请求的共享队列device type 决定设备语义。例如 virtio-blk 处理块请求virtio-net 处理网络包virtio-balloon 处理内存气球。transport 决定 guest 如何发现和配置这个设备。例如 RISC-Vvirtmachine 上常见 virtio-mmio服务器虚拟化里常见 virtio-pci。virtqueue 则是请求传输机制。无论是 virtio-blk 还是 virtio-net最终都要通过 virtqueue 在 guest 和 host 之间交换 descriptor。3. QEMU 中的关键对象阅读hw/virtio/时可以先关注几个核心对象VirtIODeviceVirtQueueVRingVirtioDeviceClassVirtIOMMIOProxyVirtIOPCIProxyvhost_dev其中VirtIODevice是通用 virtio 设备对象。它保存 feature、status、config、queue、interrupt 等公共状态。具体设备通常会把VirtIODevice作为父对象或公共成员再扩展自己的设备状态。简化模型VirtIODevice | -- virtio-blk state -- virtio-net state -- virtio-scsi state -- virtio-balloon stateVirtQueue则表示一条 virtqueue。它不是把 guest 内存里的 vring 复制一份而是记录 guest 提供的 vring 地址、队列大小、索引状态和通知状态。QEMU device model 通过它读取 guest descriptor chain处理完成后写回 used ring。4.hw/virtio/与具体设备目录的关系hw/virtio/中既有公共 virtio 框架也有一部分具体设备实现。常见文件可以粗略分成几类。公共层virtio.cvirtio-mmio.cvirtio-pci.cvhost.cvhost-user.c具体设备virtio-blk.cvirtio-net.cvirtio-scsi.cvirtio-balloon.cvirtio-rng.c头文件和接口通常分布在include/hw/virtio/include/standard-headers/linux/virtio_*.h其中standard-headers里的内容来自 Linux UAPI 相关头文件用来保持 QEMU 和 guest driver 对 virtio 协议结构的理解一致。5. 不要一开始就硬读具体设备很多人第一次读 virtio 源码会直接打开virtio-blk.c或virtio-net.c。这当然可以但容易遇到两个问题。第一具体设备代码会大量调用 virtio 公共函数。如果不了解VirtIODevice和VirtQueue会看不出请求是如何从 guest 内存里被取出来的。第二virtio-net 这类设备本身就很复杂。它涉及多队列、offload、control queue、vhost、迁移和网络后端。直接从这里开始很容易把 virtio 框架问题和网络设备语义问题混在一起。更稳妥的路线是virtio common layer | v virtqueue data path | v transport layer | v simple device: virtio-blk | v complex device: virtio-net | v vhost and migration这条路线先建立协议骨架再进入具体设备。6. 一次 virtio I/O 的全局路径可以用一条 virtio-blk 读请求建立整体直觉Guest process reads file | v Guest VFS / block layer | v virtio-blk driver | | write descriptor chain v virtqueue in guest RAM | | kick v QEMU virtio-blk device model | v QEMU block layer | v host image file / block backend | | completion v used ring interrupt | v Guest virtio-blk driver completes request这条路径里hw/virtio/负责的不是某一个点而是一组机制guest 如何配置设备virtqueue 如何被设置descriptor 如何被取出used ring 如何被写回中断如何被触发vhost 如何接管数据面迁移时状态如何保存7. QEMU、KVM 和 vhost 的分工virtio 经常和 KVM、vhost 一起出现但它们不是同一层东西。KVM 负责 CPU 执行和内核态虚拟化能力。QEMU 负责虚拟整机和设备模型。vhost 负责把某些高频 virtqueue 数据面从 QEMU 下沉到 kernel 或独立用户态 backend。可以粗略理解为QEMU: control plane, device model, migration orchestration KVM: vCPU execution, memory slots, interrupt injection support vhost: fast data plane for selected virtio devices即使用了 vhostQEMU 也不会消失。它仍然负责设备创建、feature negotiation、queue setup、config space、reset、迁移和管理接口。8. 本系列阅读地图这一组文章建议按下面顺序读1. hw/virtio 总览 2. VirtIODevice 与设备生命周期 3. virtqueue 与 descriptor chain 4. notification、eventfd 与中断注入 5. virtio-mmio 与 virtio-pci transport 6. virtio-blk 请求路径 7. virtio-net 与 vhost-net 8. vhost-user 9. virtio 设备迁移状态 10. trace、调试与故障定位这条线覆盖从框架到数据面再到迁移和调试的完整路径。9. 源码阅读入口第一阶段可以先看hw/virtio/virtio.cinclude/hw/virtio/virtio.hhw/virtio/virtio-mmio.chw/virtio/virtio-pci.chw/virtio/vhost.cinclude/hw/virtio/vhost.h阅读时可以带着几个问题VirtIODevice保存了哪些公共状态virtqueue 在 QEMU 中如何表示guest 提交 descriptor 后QEMU 从哪里取request completion 如何写回notification 和 interrupt 如何连接vhost 如何拿到 virtqueue 和 guest memory 信息10. 本篇小结hw/virtio/不是某一个 virtio 设备的实现而是 QEMU virtio 体系的公共骨架。它向上支撑 virtio-blk、virtio-net 等具体设备向下连接 transport、guest memory、eventfd、irqfd、vhost backend 和 migration。读 QEMU virtio 源码最好先理解两个核心对象VirtIODevice设备公共状态和生命周期VirtQueueguest 和 host 交换请求的队列抽象可以把本篇压缩成一句话QEMUhw/virtio/是 virtio 设备模型的中枢它把设备语义、共享队列、通知机制、transport、vhost 和迁移状态连接成一条完整 I/O 路径。11. 下一篇预告VirtIODevice与设备生命周期下一篇进入VirtIODevice。会讨论virtio device statusfeature negotiationconfig spacequeue setupresetDRIVER_OK为什么重要

相关新闻

TPM安全芯片详解:功能、检查与设置指南

TPM安全芯片详解:功能、检查与设置指南

2026/8/6 15:21:54

1. TPM究竟是什么?为什么你的电脑需要它TPM(Trusted Platform Module)是一种安全芯片,它独立于计算机的主处理器和操作系统运行。这块小小的芯片实际上是一个微型的加密计算机,专门用于生成、存储和管理加密密钥。我第…

UE5光照开发:解决编辑器与播放模式曝光差异的EV100配置指南

UE5光照开发:解决编辑器与播放模式曝光差异的EV100配置指南

2026/8/6 15:21:54

1. 项目概述:当编辑器的“所见”非播放的“所得” 如果你在虚幻引擎5(UE5)中做过光照,大概率遇到过这个让人头疼的场景:在编辑器视口里,你的场景光照明明调得恰到好处,明暗有致,氛围…

基于python的学生选课系统

基于python的学生选课系统

2026/8/6 15:21:54

一、关键词学生选课、课程管理、成绩管理、专业管理二、作品包含源码数据库万字设计文档PPT全套环境和工具资源本地部署教程三、项目技术前端技术: Html、Css、Js、Vue3.3、Element-Plus后端技术:Python、Flask四、运行环境(以下版本亲测&…

大批量做电商带货短视频,主流 AI 工具实测参数看完再决定

大批量做电商带货短视频,主流 AI 工具实测参数看完再决定

2026/8/6 16:41:57

一、行业现状与选型核心前提据行业调研数据,2026 年电商行业 AI 短视频工具商用渗透率达到 87%,但规模化批量产出场景下内容有效利用率仅 29%~42%,核心差异来源于工具底层算力调度、批量渲染架构、团队权限管控与电商场景适配度的差距。传统人…

终极指南:用SMAPI快速打造个性化星露谷物语模组体验

终极指南:用SMAPI快速打造个性化星露谷物语模组体验

2026/8/6 16:41:57

终极指南:用SMAPI快速打造个性化星露谷物语模组体验 【免费下载链接】SMAPI The modding API for Stardew Valley. 项目地址: https://gitcode.com/gh_mirrors/smap/SMAPI 你是否曾经为星露谷物语安装模组时感到困惑?游戏崩溃、模组冲突、安装失败…

3分钟实现精准窗口尺寸控制:告别桌面混乱的智能解决方案

3分钟实现精准窗口尺寸控制:告别桌面混乱的智能解决方案

2026/8/6 16:41:57

3分钟实现精准窗口尺寸控制:告别桌面混乱的智能解决方案 【免费下载链接】WindowResizer 一个可以强制调整应用程序窗口大小的工具 项目地址: https://gitcode.com/gh_mirrors/wi/WindowResizer 你是否曾在多任务处理时,被那些固执的应用程序窗口…

状态空间矩阵参与因子计算:从原理到工程实践的系统稳定性分析利器

状态空间矩阵参与因子计算:从原理到工程实践的系统稳定性分析利器

2026/8/6 16:41:57

1. 项目概述:从“黑箱”到“透明”的系统分析利器 在电力系统、控制工程乃至航空航天等复杂动态系统的分析与设计中,我们常常会面对一个核心问题:如何从一堆看似抽象的数学方程中,快速、直观地找到影响系统稳定性的“关键先生”&a…

Visual Basic入门指南:从零搭建开发环境到编写第一个Windows程序

Visual Basic入门指南:从零搭建开发环境到编写第一个Windows程序

2026/8/6 16:41:57

1. 为什么今天还要学Visual Basic?如果你在2024年听到“Visual Basic”这个词,第一反应可能是“这不是老古董吗?”或者“现在谁还用这个?”。确实,在Python、JavaScript、Go等现代语言大行其道的今天,Visua…

告别视频制作烦恼:Pixelle-Video如何用AI技术重塑短视频创作

告别视频制作烦恼:Pixelle-Video如何用AI技术重塑短视频创作

2026/8/6 16:31:57

告别视频制作烦恼:Pixelle-Video如何用AI技术重塑短视频创作 【免费下载链接】Pixelle-Video 🚀 AI 全自动短视频引擎 | AI Fully Automated Short Video Engine 项目地址: https://gitcode.com/GitHub_Trending/pi/Pixelle-Video 还在为制作短视…

ncmdumpGUI:一键解锁网易云音乐ncm文件的终极解决方案

ncmdumpGUI:一键解锁网易云音乐ncm文件的终极解决方案

2026/8/4 15:23:37

ncmdumpGUI:一键解锁网易云音乐ncm文件的终极解决方案 【免费下载链接】ncmdumpGUI C#版本网易云音乐ncm文件格式转换,Windows图形界面版本 项目地址: https://gitcode.com/gh_mirrors/nc/ncmdumpGUI 你是否曾经从网易云音乐下载了心爱的歌曲&am…

分布式配置中心选型实战:Nacos与Consul在创业场景下的对比

分布式配置中心选型实战:Nacos与Consul在创业场景下的对比

2026/8/5 6:02:27

分布式配置中心选型实战:Nacos与Consul在创业场景下的对比工程导读:本文深入讨论 分布式配置中心选型实战:Nacos与Consul在创业场景下的对比 在生产工程实践中的核心落地方案。基于 分布式架构与微服务设计 视角,剖析实际痛点、架…

MoneyPrinterPlus实战指南:AI视频批量生成与自动化发布完整解决方案

MoneyPrinterPlus实战指南:AI视频批量生成与自动化发布完整解决方案

2026/8/5 8:19:55

MoneyPrinterPlus实战指南:AI视频批量生成与自动化发布完整解决方案 【免费下载链接】MoneyPrinterPlus AI一键批量生成各类短视频,自动批量混剪短视频,自动把视频发布到抖音,快手,小红书,视频号上,赚钱从来没有这么容易过! 支持本地语音模型chatTTS,fasterwhisper,…

Unity相机抖动插件Camera-Shake集成与应用实战指南

Unity相机抖动插件Camera-Shake集成与应用实战指南

2026/8/6 0:00:51

1. 项目概述与核心价值最近在做一个动作游戏,需要给主角的重击和爆炸场景加点料,让打击感更足。我第一时间就想到了给相机加个抖动效果,毕竟这是提升玩家沉浸感最简单直接的手段之一。自己手写一个也不是不行,但时间成本高&#x…

Cocos Creator 3.7微信小游戏开发:从架构设计到提审上线的全流程实战指南

Cocos Creator 3.7微信小游戏开发:从架构设计到提审上线的全流程实战指南

2026/8/6 0:00:51

1. 项目概述:为什么需要一份3.7版本的专属适配指南?如果你是一位使用Cocos Creator开发微信小游戏的开发者,并且项目正运行在3.7版本上,那么你很可能已经感受到了那份“甜蜜的烦恼”。一方面,Cocos Creator 3.7是一个功…

AI编程实战:从Prompt工程到工具链集成,打造高效开发工作流

AI编程实战:从Prompt工程到工具链集成,打造高效开发工作流

2026/8/6 0:00:51

1. 项目概述:一次开源AI编程课程的深度重构 最近,我把自己的开源AI编程课程《Claude Code》做了一次从里到外的大更新。如果你对利用Claude、Codex这类大模型来辅助编程感兴趣,或者正在寻找一个能跟上最新AI编码工具迭代节奏的学习路径&#…

摆脱论文困扰!盘点2026年全网爆红的的AI论文写作工具

摆脱论文困扰!盘点2026年全网爆红的的AI论文写作工具

2026/8/6 5:43:30

一天写完毕业论文在2026年已不再是天方夜谭。2026年最炸裂、实测能大幅提速的AI论文写作工具,覆盖选题构思、文献整理、内容生成、格式排版等核心场景,真正帮你高效搞定论文难题。 一、全流程王者:一站式搞定论文全链路(一天定稿首…

导师推荐!2026最新AI论文工具测评与实用推荐

导师推荐!2026最新AI论文工具测评与实用推荐

2026/8/4 14:25:14

2026年真正好用的AI论文工具,核心看生成的论文质量、低AI味、格式正确、学术适配四大指标。综合实测,千笔AI、ThouPen、豆包、DeepSeek、Grammarly 是当前最值得推荐的梯队,覆盖从免费到付费、从中文到英文、从文科到理工的全场景需求。 一、…

告别游戏崩溃:XCOM 2模组管理器的智能革命

告别游戏崩溃:XCOM 2模组管理器的智能革命

2026/8/4 15:11:03

告别游戏崩溃:XCOM 2模组管理器的智能革命 【免费下载链接】xcom2-launcher The Alternative Mod Launcher (AML) is a replacement for the default game launchers from XCOM 2 and XCOM Chimera Squad. 项目地址: https://gitcode.com/gh_mirrors/xc/xcom2-lau…