[virtio](四):通知机制、eventfd 与中断注入
第三篇讨论了 virtqueue。本篇继续补上另一半virtqueue 只是共享内存guest 和 QEMU 如何知道对方有新请求或完成事件这就是 notification、eventfd、irqfd 和中断注入要解决的问题。1. 为什么 virtqueue 还需要通知virtqueue 解决的是数据放在哪里。Guest driver 把 descriptor 写到 guest memoryQEMU 或 backend 从 guest memory 读取 descriptor。但共享内存本身不会告诉对方“我写好了”。所以 virtio 还需要通知机制Guest - Host: 我提交了新的 descriptor请处理。 Host - Guest: 我完成了请求请回收。没有通知双方只能不断轮询 queue index。轮询可以降低延迟但会消耗 CPU中断和 eventfd 可以减少空转但有唤醒和注入成本。virtio 性能优化很大一部分就是在通知次数、批量处理和延迟之间做平衡。2. 基本通知路径一次普通请求的通知路径可以写成Guest submits descriptors | | kick v QEMU / backend wakes up | | process virtqueue v write used ring | | interrupt / notify v Guest driver handles completion这里有两个方向kick: guest 通知 device 有新请求 interrupt: device 通知 guest 请求完成不同 transport 和不同加速路径会影响这两个方向的实现。3. guest 如何 kick QEMU在 virtio-mmio 中guest 通常通过写 MMIO notify register 来通知 device。在 virtio-pci 中guest 可能通过 PCI BAR 中的 queue notify 区域通知 device。抽象模型Guest driver updates avail ring | v Guest writes notify register | v VM exit or ioeventfd path | v QEMU / backend receives kick如果没有加速每次 notify register 写入可能导致 VM exit 到 QEMU由 QEMU 处理这次 kick。为了减少这类高频 exitQEMU/KVM 可以使用 ioeventfd。4. eventfd 的直觉eventfd 是 Linux 提供的一种轻量事件通知机制。在 QEMU/KVM/virtio 路径中可以把 eventfd 理解成一个“可被内核和用户态共同使用的事件计数器”。对于 guest - host kickQEMU 可以把某个 MMIO/PIO 写通知注册给 KVM。当 guest 写对应 notify 地址时KVM 不必返回 QEMU 处理完整 MMIO exit而是直接 signal 一个 eventfd。简化模型Guest writes virtqueue notify | v KVM detects registered ioeventfd | v signal eventfd | v QEMU or vhost backend wakes and handles queue这减少了传统 MMIO exit 的开销。5. QEMU 如何 interrupt guest请求完成后QEMU 或 backend 需要通知 guest。最基本的路径是QEMU writes used ring | v QEMU raises virtio interrupt | v KVM injects virtual interrupt | v Guest interrupt handler runs对于 virtio-mmio设备中断通常接到虚拟中断控制器。对于 virtio-pci可能使用 MSI/MSI-X。在 KVM 加速场景中irqfd 可以进一步减少用户态参与。6. irqfd 的直觉irqfd 解决的是 host - guest interrupt 的快速注入问题。QEMU 可以把一个 eventfd 绑定到某个 guest interrupt。当 backend signal 这个 eventfd 时KVM 可以直接向 guest 注入对应中断而不是让 QEMU 先醒来再调用中断注入接口。简化模型backend completes request | v signal call eventfd | v KVM irqfd path | v inject virtual interrupt | v Guest sees completion interrupt这在 vhost 场景尤其重要。因为数据面已经下沉到 kernel 或独立 backend如果每次 completion 都必须回 QEMU 注入中断会削弱 vhost 的意义。7. kick eventfd 与 call eventfdvirtio/vhost 路径里经常会看到两类 eventfdkick eventfd: guest 通知 backendavail ring 有新请求 call eventfd: backend 通知 guestused ring 有新完成可以画成Guest driver | | kick eventfd v backend processes virtqueue | | call eventfd v Guest interruptQEMU 负责创建、配置和传递这些 eventfd。vhost backend 使用它们实现高效通知。8. notification suppression并不是每次提交 descriptor 都必须通知。也不是每次完成请求都必须中断 guest。virtio 支持 notification suppression 相关机制用来减少通知次数。例如 guest 可以告诉 device暂时不要每完成一个请求就中断我。 我稍后会批量检查 used ring。device 也可以根据 queue 状态决定是否需要通知 guest。这类机制的目标是减少VM exiteventfd signalinterrupt injectionguest interrupt handler 开销host/guest 上下文切换代价是 completion latency 可能上升。所以高吞吐场景倾向于批量化高低延迟场景则要更谨慎。9. QEMU 主循环与 virtqueue 处理在基础 QEMU device model 路径中kick 到来后QEMU 通常会在自己的事件循环或 bottom half 中处理 virtqueue。简化模型event arrives | v QEMU main loop wakes | v schedule virtio device handler | v process available descriptors | v complete requests and notify guest这说明 QEMU device model 的性能不只取决于 virtqueue 本身也取决于 QEMU event loop、backend I/O 和通知策略。10. vhost 场景下的通知路径使用 vhost 后通知路径会变成Guest driver | | kick eventfd v vhost backend | | process vring directly v call eventfd / irqfd | v Guest interruptQEMU 在这里主要做控制面设置 guest memory table设置 vring address设置 kick/call eventfd启动或停止 vhost backend管理 feature 和 migration高频数据面不再每次经过 QEMU 主循环。11. 通知路径中的性能权衡virtio notification 的核心权衡是通知太频繁: 低延迟但 exit / eventfd / interrupt 开销高 通知太少: 吞吐可能高但 completion latency 变大优化手段包括batch descriptor processinginterrupt coalescingnotification suppressionioeventfdirqfdvhostmultiqueuepolling不同 workload 目标不同。数据库、网络转发、块 I/O、低延迟 RPC对通知策略的需求并不一样。12. 源码阅读入口本篇可以看hw/virtio/virtio.chw/virtio/virtio-mmio.chw/virtio/virtio-pci.chw/virtio/vhost.chw/virtio/vhost-user.cinclude/hw/virtio/virtio.hinclude/hw/virtio/vhost.h阅读问题guest notify 最终调用到哪里VirtQueue的 handler 在哪里被触发used ring 写回后如何决定是否通知 guesteventfd 在哪里创建和绑定irqfd 在哪里接入 KVMvhost 的 kick/call fd 如何配置13. 本篇小结virtqueue 只是共享内存结构notification 负责让双方知道“该看队列了”。Guest 通过 kick 通知 host 有新 descriptorQEMU 或 backend 完成请求后通过 used ring 和 interrupt 通知 guest。eventfd、ioeventfd 和 irqfd 的作用是减少高频通知路径上的用户态往返和不必要 VM exit。可以把本篇压缩成一句话virtio 的数据在 virtqueue 里流动时机由 notification 驱动eventfd 和 irqfd 则把这些通知尽量变成轻量、可批量、可下沉的数据面事件。14. 下一篇预告virtio-mmio 与 virtio-pci transport下一篇讨论 transport。会回答virtio 协议和 transport 的区别是什么RISC-Vvirtmachine 为什么常见 virtio-mmiovirtio-pci 如何暴露设备transport 如何连接 guest driver 和VirtIODevice下一篇的问题可以写成同样是 virtio 设备guest 到底是通过什么“总线外观”发现和配置它的

相关新闻

Qt Android开发环境配置全攻略:从零搭建到项目部署

Qt Android开发环境配置全攻略:从零搭建到项目部署

1. 项目概述:为什么要在Qt中配置Android环境? 作为一名在C和Qt领域摸爬滚打了十多年的开发者,我经历过无数次从零搭建开发环境的“阵痛期”。尤其是当你想把用Qt写的漂亮桌面应用,一键打包成APK,放到安卓手机上运行时…

2026/8/6 14:27:04 阅读更多 →
当业务人员开始用自然语言问数据:ChatBI带来的决策链路重构

当业务人员开始用自然语言问数据:ChatBI带来的决策链路重构

导语 在很多企业的传统认知里,数据分析是数据分析师和IT团队的专属工作——业务人员提需求,分析师写SQL取数、做报表,业务人员再拿着结果做决策,这套流程已经运行了十几年。但有一个反直觉的结论正在被越来越多企业验证&#xff1…

2026/8/6 14:27:04 阅读更多 →
电源缓启动电路设计:从浪涌电流原理到MOSFET线性控制实战

电源缓启动电路设计:从浪涌电流原理到MOSFET线性控制实战

1. 项目概述:为什么我们需要“软起动”?在电子设备的设计与维修中,电源模块的可靠性往往是整个系统稳定性的基石。很多工程师,尤其是刚入行的朋友,可能都遇到过这样的场景:一块精心设计的电路板&#xff0c…

2026/8/6 14:27:04 阅读更多 →

最新新闻

基于FPGA的数字分频器实现

基于FPGA的数字分频器实现

实现内容: 数控分频器的功能就是当在输入端给定不同输入数据时,将对输入的时钟信号有不同的分频比,对原时钟进行占空比为50%的分频。选择50M时钟,对其进行2~15分频,并可以随意调节奇数分频和偶数分频 实现方法: 偶数分频: 在给定的时钟频率上,对时钟进行,这就需要…

2026/8/7 17:20:28 阅读更多 →
高校学生网络钓鱼与电信诈骗识别、风险机理及闭环防护研究 —— 以伦敦政治经济学院校园反诈实践为实证

高校学生网络钓鱼与电信诈骗识别、风险机理及闭环防护研究 —— 以伦敦政治经济学院校园反诈实践为实证

摘要 高校在校生作为数字生活高频群体,因账户多、财务周期集中、社会经验不足,已成为网络钓鱼与各类校园定向诈骗的核心受害群体。本文以伦敦政治经济学院(LSE)2026 年 8 月发布的学生反诈专题报道为核心实证素材,系统…

2026/8/7 17:20:28 阅读更多 →
重新定义企业级流程引擎:UFLO2的架构革命与技术创新

重新定义企业级流程引擎:UFLO2的架构革命与技术创新

重新定义企业级流程引擎:UFLO2的架构革命与技术创新 【免费下载链接】uflo UFLO是一款基于Spring的纯Java流程引擎,支持并行、动态并行、串行、会签等各种流转方式。 项目地址: https://gitcode.com/gh_mirrors/uf/uflo 在数字化转型的浪潮中&…

2026/8/7 17:20:28 阅读更多 →
如何实现打印功能

如何实现打印功能

九米科技,河北九米电子科技有限公司九米科技,河北九米电子科技有限公司九米科技,河北九米电子科技有限公司九米科技,河北九米电子科技有限公司九米科技,河北九米电子科技有限公司九米科技,河北九米电子科技…

2026/8/7 17:20:28 阅读更多 →
三步轻松获取官方电子课本:智慧教育平台PDF下载终极方案

三步轻松获取官方电子课本:智慧教育平台PDF下载终极方案

三步轻松获取官方电子课本:智慧教育平台PDF下载终极方案 【免费下载链接】tchMaterial-parser 国家中小学智慧教育平台 电子课本下载工具,帮助您从智慧教育平台中获取电子课本的 PDF 文件网址并进行下载,让您更方便地获取课本内容。 项目地…

2026/8/7 17:20:28 阅读更多 →
Answerbit领跑2026GEO工具盘点

Answerbit领跑2026GEO工具盘点

Answerbit领跑2026 GEO工具盘点 GEO(Generative Engine Optimization,生成引擎优化),是指优化品牌内容使其在 AI 搜索引擎(元宝、豆包、Kimi 等)中被推荐和引用的做法,其核心特点是面向语义理解…

2026/8/7 17:19:28 阅读更多 →

日新闻

为什么scrcpy成为Android投屏的终极解决方案:完整实战指南

为什么scrcpy成为Android投屏的终极解决方案:完整实战指南

为什么scrcpy成为Android投屏的终极解决方案:完整实战指南 【免费下载链接】scrcpy Display and control your Android device 项目地址: https://gitcode.com/GitHub_Trending/sc/scrcpy 想要将Android手机屏幕完美投射到电脑上,享受大屏操作的自…

2026/8/7 0:00:19 阅读更多 →
如何在5分钟内掌握Tom Select:打造现代化表单选择器的终极指南

如何在5分钟内掌握Tom Select:打造现代化表单选择器的终极指南

如何在5分钟内掌握Tom Select:打造现代化表单选择器的终极指南 【免费下载链接】tom-select Tom Select is a lightweight (~16kb gzipped) hybrid of a textbox and select box. Forked from selectize.js to provide a framework agnostic autocomplete widget wi…

2026/8/7 0:00:19 阅读更多 →
5分钟快速上手:NSZ压缩工具终极指南,轻松管理Switch游戏文件

5分钟快速上手:NSZ压缩工具终极指南,轻松管理Switch游戏文件

5分钟快速上手:NSZ压缩工具终极指南,轻松管理Switch游戏文件 【免费下载链接】nsz NSZ - Homebrew compatible NSP/XCI compressor/decompressor 项目地址: https://gitcode.com/gh_mirrors/ns/nsz 你是否在为Nintendo Switch游戏文件占用大量存储…

2026/8/7 0:00:19 阅读更多 →

周新闻

最大流算法详解:从水管网络到Ford-Fulkerson与Dinic实战

最大流算法详解:从水管网络到Ford-Fulkerson与Dinic实战

1. 从水管网络到最大流:一个核心问题的诞生想象一下,你是一个城市供水系统的总工程师。你的城市有多个水源(水库),需要通过一个复杂的地下管道网络,将水输送到各个居民区。每条管道都有其最大通水能力&…

2026/8/6 22:02:27 阅读更多 →
基于Springboot的企业门户网站(源码+LW+调试文档+讲解)

基于Springboot的企业门户网站(源码+LW+调试文档+讲解)

温馨提示:本人主页置顶文章(点我)开头有 CSDN 平台官方提供的学长联系方式的名片! 温馨提示:本人主页置顶文章(点我)开头有 CSDN 平台官方提供的学长联系方式的名片! 温馨提示:本人主页置顶文章(点我)开头有 CSDN 平台…

2026/8/6 22:02:27 阅读更多 →
MATLAB xcorr函数详解:从互相关原理到四大实战应用

MATLAB xcorr函数详解:从互相关原理到四大实战应用

1. 从一次信号“找茬”说起:为什么我们需要互相关几年前,我在处理一组声学传感器数据时遇到了一个棘手的问题。我有两个麦克风记录了一段相同的音频信号,理论上它们接收到的声音波形应该非常相似,只是由于麦克风位置不同&#xff…

2026/8/6 22:02:27 阅读更多 →

月新闻

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南 【免费下载链接】BaiduNetdiskPlugin-macOS For macOS.百度网盘 破解SVIP、下载速度限制~ 项目地址: https://gitcode.com/gh_mirrors/ba/BaiduNetdiskPlugin-macOS 还在为百度网盘macOS版的龟速下…

2026/8/7 17:02:37 阅读更多 →
终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换

终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换

终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换 【免费下载链接】ncmdump 项目地址: https://gitcode.com/gh_mirrors/ncmd/ncmdump 还在为网易云音乐下载的NCM格式文件无法在其他播放器播放而烦恼吗?ncmdump解密工具帮你轻松解决这个困…

2026/8/6 22:02:28 阅读更多 →
HarmonyOS 应用开发《掌上英语》第81篇: 智能体卡片:为英语学习 App 打造桌面级学习助手

HarmonyOS 应用开发《掌上英语》第81篇: 智能体卡片:为英语学习 App 打造桌面级学习助手

AgentCard 智能体卡片:为英语学习 App 打造桌面级学习助手适用平台:HarmonyOS 7.0 (API 26 Beta)一、引言 HarmonyOS 7.0(API 26 Beta)新增了 AgentCard 智能体卡片能力,这是继 HMAF(鸿蒙智能体框架&#x…

2026/8/7 17:02:36 阅读更多 →