[virtio](八):vhost-user 与独立用户态数据面
第七篇讨论了 virtio-net 和 vhost-net。本篇继续看 vhost-user如果 virtio 数据面不在 QEMU也不在 host kernel而是在另一个用户态进程里QEMU 如何把 guest memory、virtqueue 和 eventfd 交给它1. vhost-user 解决什么问题vhost-kernel 把数据面下沉到 host kernel。vhost-user 则把数据面交给一个独立的用户态 backend process。典型场景是高性能网络例如 DPDK 相关后端。模型如下QEMU process | | vhost-user protocol over Unix socket v vhost-user backend process | v high-performance packet processing它的目标是让数据面独立演进让 backend 使用 DPDK/SPDK 等用户态高性能框架避免 QEMU 主循环处理高频数据包在 QEMU 之外部署专门的 I/O backend代价是系统结构更复杂。2. vhost-user 与 vhost-kernel 的区别vhost-kernelQEMU | | ioctl to kernel vhost device v host kernel vhost backendvhost-userQEMU | | Unix socket messages v user-space backend process二者都接管 virtqueue 数据面。区别在于 backend 运行位置不同。vhost-kernel 适合利用内核网络栈和 tap。vhost-user 适合独立用户态包处理、DPDK、用户态存储后端或定制数据面。3. QEMU 仍然是控制面即使使用 vhost-userQEMU 仍然负责 virtio 设备控制面。包括创建设备暴露 transportfeature negotiationdevice statusqueue setupresetmigration coordination管理接口与 backend 建立连接vhost-user backend 处理的是数据面。结构是QEMU control plane | | vhost-user protocol v backend data plane这和 vhost-net 的思想一致只是 backend 从 kernel 变成了另一个用户态进程。4. vhost-user 协议传什么QEMU 和 vhost-user backend 通过 Unix socket 交换控制消息。常见信息包括feature bitsprotocol feature bitsguest memory regionsvring addressesvring sizekick eventfdcall eventfdqueue enable statebackend configurationmigration/inflight state其中 guest memory region 和 vring 信息最关键。backend 要直接处理 guest virtqueue就必须知道guest physical address 如何映射到 backend 可访问的 host virtual address descriptor table 在哪里 avail ring 在哪里 used ring 在哪里 kick/call eventfd 是哪些5. guest memory 如何共享给 backendvhost-user backend 是独立进程。它不能天然访问 QEMU 进程中的 guest RAM。因此 QEMU 需要通过协议把 guest memory region 描述和文件描述符传给 backend。常见方式是基于共享内存 fd。抽象模型QEMU owns guest RAM mappings | | send memory region metadata fd v vhost-user backend maps same memory | v backend can access virtqueue and packet buffers这一步非常敏感。如果 memory table 错误backend 解析 descriptor 时就无法正确访问 guest buffer。6. vring 如何交给 backendGuest 配置 virtqueue 后QEMU 知道 vring 的地址和大小。QEMU 会通过 vhost-user 协议告诉 backendqueue index queue size descriptor table address avail ring address used ring addressbackend 拿到这些信息后就可以像 QEMU 或 vhost-kernel 一样解析 descriptor chain。路径是Guest writes descriptors | v virtqueue in guest RAM | v vhost-user backend maps memory and reads vring | v backend processes I/OQEMU 不再逐个解析高频 descriptor。7. kick 和 call eventfdvhost-user backend 还需要通知机制。QEMU 会把 eventfd 传给 backend。kick fd: guest - backend有新 descriptor call fd: backend - guest有 completion完整路径Guest updates avail ring | | kick eventfd v vhost-user backend wakes | v backend processes descriptors | | call eventfd v KVM injects interrupt / QEMU handles notify | v Guest sees completion如果配置了 irqfdcompletion 可以更快进入 guest interrupt injection 路径。8. vhost-user-net 的典型场景vhost-user-net 常见于 DPDK 场景。结构类似Guest virtio-net driver | v virtqueue in guest RAM | v vhost-user socket | v DPDK backend process | v physical NIC / userspace switch数据包可以在用户态网络栈中高速处理减少传统内核网络栈和 QEMU 主循环开销。常见后端可以是OVS-DPDKVPP自定义 DPDK 程序用户态虚拟交换机9. vhost-user 的复杂度vhost-user 的灵活性来自进程解耦。但复杂度也来自进程解耦。需要处理的问题包括backend 进程生命周期socket 重连feature 兼容memory region 更新queue 启停顺序migration 协调backend 崩溃恢复安全隔离NUMA 和 hugepage placement如果 backend 崩溃QEMU 需要决定 VM 如何表现。如果 memory mapping 不一致backend 可能读错 guest buffer。如果 migration 时 backend 状态没保存target 恢复后可能丢包或 queue 卡住。10. vhost-user 与迁移vhost-user 迁移比基础 QEMU device model 更复杂。因为设备状态分散在 QEMU 和 backend 中。迁移时需要pause or quiesce backend data plane | v collect virtqueue state and inflight descriptors | v serialize QEMU virtio state | v coordinate backend state | v restore on target | v reconnect or start target backend | v resume queues如果存在 in-flight packet 或 request需要确保它不会丢失或重复完成。这也是 vhost-user protocol feature 和 backend migration 能力重要的原因。11. vhost-user 的安全边界vhost-user backend 能访问 guest memory 中的 virtqueue 和 data buffer。这意味着它处在敏感边界上。安全设计需要考虑backend 进程权限shared memory 范围fd 传递sandboxingbackend 输入验证descriptor 合法性检查guest 和 backend 之间的隔离vhost-user 并不因为在用户态就天然安全。它获得了高性能访问能力也承担了正确解析 guest 提供数据结构的责任。12. 源码阅读入口本篇可以看hw/virtio/vhost-user.chw/virtio/vhost.cinclude/hw/virtio/vhost.hinclude/hw/virtio/vhost-user.hhw/net/vhost_net.cnet/vhost-user.cdocs/interop/vhost-user.rst阅读问题QEMU 如何连接 vhost-user socketmemory region 如何发送给 backendvring address 如何设置kick/call eventfd 如何传递backend feature 如何协商backend 启停和 reset 如何处理migration 相关状态如何协调13. 本篇小结vhost-user 把 virtio 数据面交给独立用户态 backend。QEMU 通过 Unix socket 把 guest memory、vring、eventfd、feature 和 queue 状态传递给 backend。backend 直接处理 guest virtqueueQEMU 保留控制面和迁移编排。可以把本篇压缩成一句话vhost-user 用进程边界换取数据面灵活性让 virtio backend 可以独立优化但也把 memory sharing、queue state、迁移和故障恢复变成必须认真处理的系统问题。14. 下一篇预告virtio 设备迁移状态下一篇讨论 migration。会回答virtio 迁移为什么不只是复制 guest RAMqueue index、feature、config 和 pending interrupt 如何保存in-flight request 如何处理vhost backend 如何配合迁移下一篇的问题可以写成一台 VM 迁移到 target host 后guest driver 为什么还能相信 virtio 设备只是暂停了一下

相关新闻

Everspin异步MRAM存储芯片嵌入式系统应用

Everspin异步MRAM存储芯片嵌入式系统应用

在嵌入式系统高速迭代的当下,传统存储芯片难以兼顾高速读写、低功耗与宽温稳定运行等多重需求。MRAM存储芯片凭借独特的自旋电子存储原理,突破了SRAM、Flash等传统存储器件的技术瓶颈,成为工业控制、车载电子、智能物联网等领域的优选非易失性…

2026/8/5 15:16:43 阅读更多 →
Laravel-api-generator高级配置:自定义Model路径、命名空间与软删除实现

Laravel-api-generator高级配置:自定义Model路径、命名空间与软删除实现

Laravel-api-generator高级配置:自定义Model路径、命名空间与软删除实现 【免费下载链接】laravel-api-generator Laravel API/Scaffold/CRUD Generator including Controller, Repository, Model, Migrations, routes.php update. 项目地址: https://gitcode.com…

2026/8/5 15:16:43 阅读更多 →
Mixamo动画导入UE4全攻略:解决骨骼匹配与FBX参数设置

Mixamo动画导入UE4全攻略:解决骨骼匹配与FBX参数设置

1. 项目概述:从Mixamo到UE4的动画流水线搭建 在游戏开发,尤其是独立游戏或中小团队项目中,角色动画的制作往往是成本与效率的瓶颈。自己手K动画对美术功底要求高,而购买动捕设备或高质量动作库又是一笔不小的开销。这时&#xff0…

2026/8/5 15:15:43 阅读更多 →

最新新闻

STM32单片机智能红外感应光照检测台灯路灯30-31(设计源文件+万字报告+讲解)(支持资料、图片参考_相关定制)_

STM32单片机智能红外感应光照检测台灯路灯30-31(设计源文件+万字报告+讲解)(支持资料、图片参考_相关定制)_

STM32单片机智能红外感应光照检测台灯路灯30-31(设计源文件万字报告讲解)(支持资料、图片参考_相关定制)_ 产品功能描述: 本系统由STM32F103C8T6单片机核心板、(无线蓝牙/WIFI模块-可选)、红外探头传感器、光敏电阻、高…

2026/8/5 15:56:11 阅读更多 →
Compiler Barrier

Compiler Barrier

编译器屏障(Compiler Barrier) 与内存屏障(Memory Barrier)是并发编程中两个极易混淆但分工明确的概念。简单来说:编译器屏障:约束编译器,防止它优化或重排代码。内存屏障:约束CPU&a…

2026/8/5 15:56:11 阅读更多 →
STM32单片机智能坐姿提醒器台灯171-31(设计源文件+万字报告+讲解)(支持资料、图片参考_相关定制)_

STM32单片机智能坐姿提醒器台灯171-31(设计源文件+万字报告+讲解)(支持资料、图片参考_相关定制)_

STM32单片机智能坐姿提醒器台灯171-31(设计源文件万字报告讲解)(支持资料、图片参考_相关定制)_ 产品功能描述: 本系统由STM32F103C8T6单片机核心板、TFT1.44寸彩屏液晶显示电路、超声波测量电路、光敏检测电路、JR6001语音播报电路、USB灯驱…

2026/8/5 15:56:11 阅读更多 →
READ_ONCE

READ_ONCE

READ_ONCE 是 Linux 内核中一个非常核心的宏,它的主要作用是防止编译器对特定的内存读取操作进行各种优化,从而确保读操作是“安全”且“准确”的。简单来说,它就像给编译器下达的一道强制命令:“从这个地址读数据,而且…

2026/8/5 15:56:11 阅读更多 →
3分钟快速上手Waifu2x-Extension-GUI:让模糊图片视频秒变清晰的AI神器

3分钟快速上手Waifu2x-Extension-GUI:让模糊图片视频秒变清晰的AI神器

3分钟快速上手Waifu2x-Extension-GUI:让模糊图片视频秒变清晰的AI神器 【免费下载链接】Waifu2x-Extension-GUI Video, Image and GIF upscale/enlarge(Super-Resolution) and Video frame interpolation. Achieved with Waifu2x, Real-ESRGAN, Real-CUGAN, RTX Vid…

2026/8/5 15:56:11 阅读更多 →
如何快速管理音乐歌词:跨平台歌词工具终极指南

如何快速管理音乐歌词:跨平台歌词工具终极指南

如何快速管理音乐歌词:跨平台歌词工具终极指南 【免费下载链接】163MusicLyrics 云音乐歌词获取处理工具【网易云、QQ音乐】 项目地址: https://gitcode.com/GitHub_Trending/16/163MusicLyrics 你是否曾为音乐播放器中的歌词显示不准确而烦恼?是…

2026/8/5 15:55:11 阅读更多 →

日新闻

Java缓存框架:JetCache

Java缓存框架:JetCache

TOC 一、简介 JetCache 是一个 Java 缓存抽象框架,为不同的缓存解决方案提供了统一的使用方式。 它提供的注解比 Spring Cache 更加强大。 JetCache 的注解支持原生 TTL、两级缓存以及在分布式环境中的自动刷新功能,同时你也可以通过代码直接操作 Cach…

2026/8/5 0:00:43 阅读更多 →
AD 铺铜设置十字连接,过孔全连接,新版AD的简单设置

AD 铺铜设置十字连接,过孔全连接,新版AD的简单设置

需求:通孔焊盘 十字花;过孔 Via 实心直连;贴片焊盘按需设置 AD 测试版本AD24 很多工程师踩坑:全部统一十字,导致接地过孔阻抗高、大电流发热! 一、快捷键打开规则 PCB 界面按下:D R 展开…

2026/8/5 0:00:43 阅读更多 →
AI素描转换技术深度拆解(2024最新论文+工业级落地代码):从Stable Diffusion ControlNet到LoRA微调全链路解析

AI素描转换技术深度拆解(2024最新论文+工业级落地代码):从Stable Diffusion ControlNet到LoRA微调全链路解析

更多请点击: https://kaifayun.com 第一章:AI生成素描效果 AI生成素描效果是计算机视觉与风格迁移技术融合的典型应用,其核心在于将彩色照片或RGB图像转换为具有手绘质感、明暗对比强烈、边缘清晰的单色素描图像。该过程通常依赖于深度学习模…

2026/8/5 0:00:43 阅读更多 →

周新闻

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

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

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

2026/8/5 15:00:43 阅读更多 →
基于Springboot的企业门户网站(源码+LW+调试文档+讲解)

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

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

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

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

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

2026/8/5 10:20:36 阅读更多 →

月新闻

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

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

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

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

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

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

2026/8/4 11:09:16 阅读更多 →
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/4 13:38:40 阅读更多 →