为什么 DPDK VirtIO 只能跑到 40Gbps?—— 一次 KVM 虚拟交换机性能瓶颈定位全过程(下)
接上文为什么 DPDK VirtIO 只能跑到 40Gbps—— 一次 KVM 虚拟交换机性能瓶颈定位全过程上-CSDN博客七、Split Virtqueue为什么一个队列要维护三张环定位到 Virtqueue 之后我们继续深入分析。很多开发者第一次看到 VirtIO 的数据结构都会疑惑为什么普通网卡只有一个 Descriptor Ring而 VirtIO 却维护三张 Ring实际上在Split Virtqueue中真正的数据结构包括Descriptor Table Available Ring Used Ring三者职责完全不同。整体关系如下Guest Driver │ ▼ Descriptor Table 描述Buffer地址 │ ▼ Available Ring 告诉Host哪些Descriptor可以用了 │ ▼ Host(vhost) 处理数据 │ ▼ Used Ring 告诉Guest哪些Descriptor已经处理完成这里最重要的一点是Descriptor Table 本身不会通知任何人。真正负责发布消息的是avail-idx以及used-idx直到这里。我们才真正理解为什么上一篇 Memory Ordering 会如此重要。VirtIO 的整个同步机制本质上也是先构造对象再发布 Index。八、为什么小包性能下降如此明显继续分析 Perf。我们发现64Byte包CPU大量时间花在virtqueue_notify() ↓ eventfd_write() ↓ KVM ↓ VM Exit为什么假设Burst只有1 Packet流程Guest ↓ Descriptor ↓ avail-idx ↓ Kick ↓ VM Exit ↓ Host 处理 ↓ Notify ↓ VM Entry ↓ 继续一次Packet。一次VM Exit。一次VM Entry。CPU大量时间浪费在虚拟化切换。而1500Byte情况不同。虽然Packet数量减少。但是每个Packet携带的数据更多。最终100Gbps对应PPS大幅下降。例如包长PPS(约)64Byte148.8 Mpps512Byte24 Mpps1500Byte8.1 Mpps也就是说VirtIO真正限制的是PPS。不是Gbps。九、Event IndexVirtIO 最大的优化之一Linux VirtIO 后来增加了Event Index很多人觉得只是一个Flag。实际上它改变了整个Notification模型。传统模式每次 avail ↓ KickHost不停收到Notify。CPU不断VM Exit Event Index则变成Burst 32 Packet ↓ 一次 KickHost收到一次Notification。继续处理32 个Descriptor。CPU VM Exit次数下降几十倍。很多云厂商VirtIO性能能够突破80Gbps。最重要原因之一就是Event Index。十、Packed Virtqueue 为什么越来越流行虽然Split Virtqueue已经使用很多年。但是越来越多的新平台开始默认Packed Virtqueue。原因只有两个字Cache。Split模式需要CPU不停访问Descriptor ↓ Available Ring ↓ Used Ring三个不同区域。CPUCache不断Miss。Packed则把Descriptor状态直接放在同一结构。例如Descriptor Flags Wrap CounterCPU几乎连续访问内存。Cache命中率显著提高。不仅减少Cache Miss。同时减少Memory Barrier。因此新版本VirtIO几乎全部推荐Packed。十一、DPDK vhost-user 为什么还能继续优化很多人认为开启vhost-user性能已经最佳。实际上DPDK还做了很多优化。例如批量处理Descriptor。不是1 Packet ↓ 1 Descriptor而是Burst32 ↓ 32 Descriptor随后统一更新used-idx统一Kick。这样Notification次数再次下降。DPDKlibrte_vhost还会结合批量收发、cache-friendly 的描述符遍历以及尽可能减少 Guest/Host 间同步次数从而降低控制路径开销。十二、问题最终是如何解决的最终整个系统进行了如下优化①开启Packed Virtqueue。②开启Event Index。③Burst由16 ↓ 32④Guest开启Multi Queue。⑤Host每个Queue绑定独立PMD。再次测试结果如下优化前优化后38Gbps91GbpsCPU 48%CPU 63%VM Exit 极高下降约70%Notify 极频繁显著减少可以看到CPU反而更忙。但是吞吐提升超过2 倍。真正说明以前CPU不是处理Packet。而是浪费在Notification。十三、生产环境有哪些经验经过这次故障。团队总结了几条经验。① 不要只盯着 PMDVirtIO瓶颈很多发生在控制路径。不是DMA。不是Descriptor。而是Notification。② PPS 比 Gbps 更重要很多100G测试都是1500Byte。实际上真正决定VirtIO性能的是PPS。尤其64Byte。③ Event Index 建议开启如果业务允许批量发送。Event Index收益非常明显。不过也要注意批量通知会增加一定的数据包完成延迟因此需要根据业务对时延和吞吐的要求进行权衡。④ 优先使用 Packed Virtqueue对于支持 VirtIO 1.1 及以上的平台Packed Virtqueue 通常能带来更好的缓存局部性和更低的同步开销是值得优先考虑的选择。⑤ Host 和 Guest 要共同优化VirtIO不是Host一个人的事情。Guest、Burst、Queue、Affinity。都会影响最终性能。总结回到文章开头的问题为什么 DPDK VirtIO 只能跑到 40Gbps很多团队最初都会怀疑PMD 不够快RSS 不均衡Descriptor 太少HugePage 配置错误CPU 性能不足。但真正的问题往往隐藏在更深的地方。在 VirtIO 架构中数据真正走的是共享内存而性能瓶颈常常来自控制路径——Descriptor 发布、Kick、Notify、Event Index、VM Exit 等同步机制。尤其是在 64Byte 小包场景下PPS 极高每一次 Notification 的成本都会被无限放大。当通知过于频繁时CPU 花费的大量时间并不是转发数据而是在 Guest、KVM、vhost-user 和 Host 之间不断切换。因此一个高性能的 VirtIO 系统不只是需要优秀的 DPDK 数据平面更需要合理设计通知机制、队列模型和批处理策略。真正理解 Virtqueue 的工作原理之后再去分析 vhost-user、Packed Virtqueue、vDPA甚至硬件 VirtIO 加速就会发现它们都在围绕同一个目标进行优化减少同步减少通知减少切换让 CPU 更多时间用于真正的数据转发而不是控制路径。

相关新闻

Mac彻底卸载Parallels Desktop虚拟机全指南

Mac彻底卸载Parallels Desktop虚拟机全指南

1. 为什么需要彻底卸载Parallels Desktop虚拟机 在Mac上使用Parallels Desktop(以下简称PD)运行Windows或其他操作系统时,系统会产生大量关联文件。普通用户往往只删除主程序或虚拟机镜像,却忽略了以下关键问题: 隐藏…

2026/7/17 9:21:55 阅读更多 →
Simulink与PSpice联合仿真实战指南

Simulink与PSpice联合仿真实战指南

1. Simulink与PSpice联合仿真的核心挑战 在电力电子、电机控制等复杂系统设计中,工程师常常面临一个关键矛盾:Simulink擅长算法和控制逻辑仿真,而PSpice在电路级仿真方面具有不可替代的优势。这种专业分工导致了一个现实需求——如何让两种仿…

2026/7/17 9:19:55 阅读更多 →
NovaShader粒子渲染五大高级优化技巧:从GPU实例化到Compute Shader实战

NovaShader粒子渲染五大高级优化技巧:从GPU实例化到Compute Shader实战

1. 项目概述:当粒子效果成为性能瓶颈在游戏和实时渲染项目中,粒子系统是营造氛围、提升视觉冲击力的核心手段。无论是刀光剑影的技能特效、漫天飞舞的雪花,还是熊熊燃烧的火焰,都离不开它。然而,当屏幕上同时存在成百上…

2026/7/17 9:19:55 阅读更多 →

最新新闻

重新定义科学探索:AI Scientist-v2如何通过代理树搜索实现全自动研究

重新定义科学探索:AI Scientist-v2如何通过代理树搜索实现全自动研究

重新定义科学探索:AI Scientist-v2如何通过代理树搜索实现全自动研究 【免费下载链接】AI-Scientist-v2 The AI Scientist-v2: Workshop-Level Automated Scientific Discovery via Agentic Tree Search 项目地址: https://gitcode.com/GitHub_Trending/ai/AI-Sci…

2026/7/17 10:16:23 阅读更多 →
PCB布局设计:信号完整性与EMI优化的九大原则

PCB布局设计:信号完整性与EMI优化的九大原则

1. PCB布局设计的核心价值与挑战作为一名从业十年的硬件工程师,我至今记得第一次独立完成四层板布局时的狼狈经历。当时为了追求"整洁美观",我把所有去耦电容整齐排列在芯片右侧,结果板子回来后的EMI测试直接超标15dB。这个教训让我…

2026/7/17 10:14:22 阅读更多 →
Windows Terminal终极指南:如何通过命令行参数打造高效工作流

Windows Terminal终极指南:如何通过命令行参数打造高效工作流

Windows Terminal终极指南:如何通过命令行参数打造高效工作流 【免费下载链接】terminal The new Windows Terminal and the original Windows console host, all in the same place! 项目地址: https://gitcode.com/GitHub_Trending/term/terminal 作为现代…

2026/7/17 10:14:22 阅读更多 →
如何一键获取无限额度:CursorPro免费助手完全指南

如何一键获取无限额度:CursorPro免费助手完全指南

如何一键获取无限额度:CursorPro免费助手完全指南 【免费下载链接】cursor-free-everyday 完全免费, 自动获取新账号,一键重置新额度, 解决机器码问题, 自动满额度 项目地址: https://gitcode.com/gh_mirrors/cu/cursor-free-everyday 在AI编程工具日益普及的…

2026/7/17 10:12:22 阅读更多 →
CANN/asc-devkit log2f函数

CANN/asc-devkit log2f函数

log2f 【免费下载链接】asc-devkit 本项目是CANN 推出的昇腾AI处理器专用的算子程序开发语言,原生支持C和C标准规范,主要由类库和语言扩展层构成,提供多层级API,满足多维场景算子开发诉求。 项目地址: https://gitcode.com/cann…

2026/7/17 10:12:22 阅读更多 →
Get Shit Done:彻底解决AI编程上下文衰减的终极解决方案

Get Shit Done:彻底解决AI编程上下文衰减的终极解决方案

Get Shit Done:彻底解决AI编程上下文衰减的终极解决方案 【免费下载链接】get-shit-done A light-weight and powerful meta-prompting, context engineering and spec-driven development system for Claude Code by TCHES. 项目地址: https://gitcode.com/GitHu…

2026/7/17 10:10:21 阅读更多 →

日新闻

2026全国外贸独立站搭建公司推荐排行,含零代码SAAS、AI编程、源码定制

2026全国外贸独立站搭建公司推荐排行,含零代码SAAS、AI编程、源码定制

2026全国外贸独立站搭建公司推荐排行 外贸工厂、工贸企业建设官网,核心需求与普通展示型网站并不相同。除了页面整洁、多语言适配和海外访问体验,企业还要重点考虑数据能否导出、站点能否迁移、源码是否可控、后续费用是否透明,以及更换服务…

2026/7/17 0:02:10 阅读更多 →
HarmonyOS 应用开发《掌上英语》第19篇:3D 翻转动画实现——ArkTS 动画系统全解析

HarmonyOS 应用开发《掌上英语》第19篇:3D 翻转动画实现——ArkTS 动画系统全解析

3D 翻转动画实现——ArkTS 动画系统全解析引言 在移动应用中,卡片翻转动画是最受欢迎的交互动效之一,它能给用户带来直观的"物理世界"操作感。在我们的英语学习 App 的单词学习页面(CourseHomePage.ets)中,就…

2026/7/17 0:02:10 阅读更多 →
2026键盘推荐|IQUNIX EV63多场景适配,不允许有人不知道!

2026键盘推荐|IQUNIX EV63多场景适配,不允许有人不知道!

现在很多用户都需要一款能适配多场景的键盘,既能满足交流码字的需求,又能应对居家电竞的性能需求,最好还得有点小颜值。而大多键盘都只能兼顾其中一两个场景。这次我实测了IQUNIX EV63三款配色(银武士、黑武士、紫罗兰&#xff09…

2026/7/17 0:04:10 阅读更多 →

周新闻

互联网大厂 Java 求职面试:燕双非的搞笑回答与技术探讨

互联网大厂 Java 求职面试:燕双非的搞笑回答与技术探讨

互联网大厂 Java 求职面试:燕双非的搞笑回答与技术探讨 在一个阳光明媚的上午,互联网大厂的面试官坐在桌前,准备迎接他的面试候选人——燕双非,一个以搞笑和幽默著称的程序员。第一轮提问 面试官:燕双非,作…

2026/7/17 3:22:28 阅读更多 →
车载以太网PMA测试设备选型:示波器、VNA、信号源3类仪器关键参数与预算评估

车载以太网PMA测试设备选型:示波器、VNA、信号源3类仪器关键参数与预算评估

车载以太网PMA测试设备选型:示波器、VNA、信号源3类仪器关键参数与预算评估在智能驾驶和车联网技术快速发展的今天,车载以太网作为新一代车载网络的核心传输技术,其物理层性能直接决定了数据传输的可靠性和稳定性。1000BASE-T1作为当前主流的…

2026/7/17 3:01:28 阅读更多 →
VSCode EIDE 插件 2.0:APM32/STM32 项目迁移实战,5步完成Keil工程转换

VSCode EIDE 插件 2.0:APM32/STM32 项目迁移实战,5步完成Keil工程转换

VSCode EIDE 插件 2.0:APM32/STM32 项目迁移实战指南嵌入式开发领域正经历一场工具链的静默革命。当传统Keil用户首次打开VSCode的扩展市场搜索EIDE时,往往会惊讶于这个看似简单的插件竟能重构十余年的开发习惯。本文将揭示如何用五个精准步骤&#xff0…

2026/7/16 23:40:37 阅读更多 →

月新闻