ebpf 直接为虚拟机 tap 网卡提供 零 copy

结合检索的信息,在 QEMU virtio 标准化背景下,eBPF 结合 tap 设备或 socket(如 DPDK)实现东西向虚拟机(VM)之间零拷贝的主要技术原理和现状如下:

  • Tap 设备在 QEMU 中通常作为虚拟机的网卡后端,通过用户态进程与宿主机网络通信。eBPF 可挂载在宿主机的 tap 或相关网络栈路径中,对数据包进行处理和重定向,实现内核态零拷贝转发,减少上下文切换和数据复制。(但虚拟机内部和 tap 之间不像容器使用 veth 那么高效,毕竟跨了一层内核 os 协议栈,而且虚拟机 tap 会接入桥)

  • 使用 DPDK 和 vhost-user 技术,VM 与宿主机用户态数据平面(如 OVS-DPDK)共享内存环(vring),实现直接内存访问(DMA),数据在 VM 和宿主机之间可以零拷贝传输。eBPF 可以集成在 DPDK 用户态程序旁辅助数据处理和调度,但传统 eBPF 运行于内核,故限于内核空间操作(DPDK 性能比 eBPF 更好,一般来说,不必混用)。

  • 近期研究和实践中,有提出结合 eBPF 与共享内存(如 IVSHMEM)构建透明且标准化的高速通信通道,绕过 TCP/IP,兼容 virtio 标准,实现低延迟的东西向 VM 通信[1]。(这个共享内存倒是有点意思,但不能只考虑东西向,虚拟机需要南北向)

  • QEMU virtio-net 支持 eBPF RSS(接收端多队列散列)增强性能 ,进一步降低上下文切换和包处理开销,但全面零拷贝依赖于底层驱动、内存布局和主机/guest 配合

综上,eBPF 在 tap 设备与 socket(DPDK)结合 QEMU virtio 环境下,理论上可以配合已有零拷贝机制(如 DPDK vhost-user 共享内存环),实现东西向虚拟机间的高效零拷贝通信,尤其是在跨越内核和用户空间的路径上减少数据复制;不过实际零拷贝全链路仍依赖 virtio 标准支持、共享内存配置以及用户态和内核态协同优化。最新趋势是利用 eBPF 加强共享内存通信透明化和高效调度[2][3][1][4][5].

如需更具体技术实现或源码层面细节,也可以再深入探究。

Sources [1] Transparent Shared Memory Communications with eBPF netdevconf.info/0x18/sessio...

2\] Open vSwitch with AF_XDP [docs.openvswitch.org/en/latest/i...](https://link.juejin.cn?target=https%3A%2F%2Fdocs.openvswitch.org%2Fen%2Flatest%2Fintro%2Finstall%2Fafxdp%2F "https://docs.openvswitch.org/en/latest/intro/install/afxdp/") \[3\] 44. Vhost Library - Documentation [doc.dpdk.org/guides-18.1...](https://link.juejin.cn?target=https%3A%2F%2Fdoc.dpdk.org%2Fguides-18.11%2Fprog_guide%2Fvhost_lib.html "https://doc.dpdk.org/guides-18.11/prog_guide/vhost_lib.html") \[4\] How OVS DPDK and qemu communicate via the vhost ... [www.cnblogs.com/dream397/p/...](https://link.juejin.cn?target=https%3A%2F%2Fwww.cnblogs.com%2Fdream397%2Fp%2F14367127.html "https://www.cnblogs.com/dream397/p/14367127.html") \[5\] The Case for Vhost-User [www.cnblogs.com/dream397/p/...](https://link.juejin.cn?target=https%3A%2F%2Fwww.cnblogs.com%2Fdream397%2Fp%2F13931679.html "https://www.cnblogs.com/dream397/p/13931679.html") \[6\] Chapter 23. Understanding the eBPF networking features ... [docs.redhat.com/en/document...](https://link.juejin.cn?target=https%3A%2F%2Fdocs.redhat.com%2Fen%2Fdocumentation%2Fred_hat_enterprise_linux%2F10%2Fhtml%2Fconfiguring_firewalls_and_packet_filters%2Funderstanding-the-ebpf-networking-features-in-rhel-10 "https://docs.redhat.com/en/documentation/red_hat_enterprise_linux/10/html/configuring_firewalls_and_packet_filters/understanding-the-ebpf-networking-features-in-rhel-10") \[7\] dpdk vhost user + vhost cuse - tycoon3 [www.cnblogs.com/dream397/p/...](https://link.juejin.cn?target=https%3A%2F%2Fwww.cnblogs.com%2Fdream397%2Fp%2F13931740.html "https://www.cnblogs.com/dream397/p/13931740.html") \[8\] Design and Implementation of eBPF-based Virtual TAP for ... [dl.ifip.org/db/conf/cns...](https://link.juejin.cn?target=https%3A%2F%2Fdl.ifip.org%2Fdb%2Fconf%2Fcnsm%2Fcnsm2018%2F1570493112.pdf "https://dl.ifip.org/db/conf/cnsm/cnsm2018/1570493112.pdf") \[9\] eBPF RSS virtio-net support --- QEMU 10.0.2 documentation [qemu.readthedocs.io/en/v10.0.2/...](https://link.juejin.cn?target=https%3A%2F%2Fqemu.readthedocs.io%2Fen%2Fv10.0.2%2Fdevel%2Febpf_rss.html "https://qemu.readthedocs.io/en/v10.0.2/devel/ebpf_rss.html") \[10\] A Framework for eBPF-Based Network Functions in an Era of ... [sebymiano.github.io/publication...](https://link.juejin.cn?target=https%3A%2F%2Fsebymiano.github.io%2Fpublication%2F2021-polycube%2F2021-polycube.pdf "https://sebymiano.github.io/publication/2021-polycube/2021-polycube.pdf") \[11\] VIRTIO-USER: A New Versatile Channel for Kernel-Bypass ... [dl.acm.org/doi/10.1145...](https://link.juejin.cn?target=https%3A%2F%2Fdl.acm.org%2Fdoi%2F10.1145%2F3098583.3098586 "https://dl.acm.org/doi/10.1145/3098583.3098586") \[12\] \[dpdk-stable\] patch 'vhost: remove zero-copy and client mode ... [inbox.dpdk.org/stable/2020...](https://link.juejin.cn?target=https%3A%2F%2Finbox.dpdk.org%2Fstable%2F20200724120030.1863487-1-luca.boccassi%40gmail.com%2FT%2F "https://inbox.dpdk.org/stable/20200724120030.1863487-1-luca.boccassi@gmail.com/T/") \[13\] eBPF Offensive Capabilities -- Get Ready for Next-gen ... [www.sysdig.com/blog/ebpf-o...](https://link.juejin.cn?target=https%3A%2F%2Fwww.sysdig.com%2Fblog%2Febpf-offensive-capabilities "https://www.sysdig.com/blog/ebpf-offensive-capabilities") \[14\] QEMU Development [patchwork.ozlabs.org/project/qem...](https://link.juejin.cn?target=https%3A%2F%2Fpatchwork.ozlabs.org%2Fproject%2Fqemu-devel%2Flist%2F%3Fsubmitter%3D5225%26param%3Dstate%26page%3D2 "https://patchwork.ozlabs.org/project/qemu-devel/list/?submitter=5225¶m=state&page=2") \[15\] Day One: Contrail DPDK vRouter [www.juniper.net/documentati...](https://link.juejin.cn?target=https%3A%2F%2Fwww.juniper.net%2Fdocumentation%2Fen_US%2Fday-one-books%2Fcontrail-DPDK.pdf "https://www.juniper.net/documentation/en_US/day-one-books/contrail-DPDK.pdf") \[16\] Performance Implications at the Intersection of AF_XDP and ... [dl.acm.org/doi/10.1145...](https://link.juejin.cn?target=https%3A%2F%2Fdl.acm.org%2Fdoi%2F10.1145%2F3748355.3748359 "https://dl.acm.org/doi/10.1145/3748355.3748359") \[17\] Chapter 45. Understanding the eBPF networking features ... [docs.redhat.com/en/document...](https://link.juejin.cn?target=https%3A%2F%2Fdocs.redhat.com%2Fen%2Fdocumentation%2Fred_hat_enterprise_linux%2F8%2Fhtml%2Fconfiguring_and_managing_networking%2Fassembly_understanding-the-ebpf-features-in-rhel-8_configuring-and-managing-networking "https://docs.redhat.com/en/documentation/red_hat_enterprise_linux/8/html/configuring_and_managing_networking/assembly_understanding-the-ebpf-features-in-rhel-8_configuring-and-managing-networking") \[18\] Detection Frameworks and Latest Methodologies for eBPF ... [windshock.github.io/en/post/202...](https://link.juejin.cn?target=https%3A%2F%2Fwindshock.github.io%2Fen%2Fpost%2F2025-04-29-ebpf-backdoor-detection-framework%2F "https://windshock.github.io/en/post/2025-04-29-ebpf-backdoor-detection-framework/") \[19\] A Tale of Two Paths: Optimizing Paravirtualized Storage I/O ... [dl.acm.org/doi/10.1145...](https://link.juejin.cn?target=https%3A%2F%2Fdl.acm.org%2Fdoi%2F10.1145%2F3760404 "https://dl.acm.org/doi/10.1145/3760404") \[20\] DPDK Support - Kube-OVN Document - GitHub Pages [kubeovn.github.io/docs/v1.10....](https://link.juejin.cn?target=https%3A%2F%2Fkubeovn.github.io%2Fdocs%2Fv1.10.x%2Fen%2Fadvance%2Fdpdk%2F "https://kubeovn.github.io/docs/v1.10.x/en/advance/dpdk/")

相关推荐
沐雨橙风ιε6 分钟前
Spring Boot整合Apache Shiro权限认证框架(应用篇)
java·spring boot·后端·apache shiro
考虑考虑10 分钟前
fastjson调用is方法开头注意
java·后端·java ee
小蒜学长30 分钟前
springboot基于javaweb的小零食销售系统的设计与实现(代码+数据库+LW)
java·开发语言·数据库·spring boot·后端
brzhang39 分钟前
为什么 OpenAI 不让 LLM 生成 UI?深度解析 OpenAI Apps SDK 背后的新一代交互范式
前端·后端·架构
EnCi Zheng1 小时前
JPA 连接 PostgreSQL 数据库完全指南
java·数据库·spring boot·后端·postgresql
brzhang1 小时前
OpenAI Apps SDK ,一个好的 App,不是让用户知道它该怎么用,而是让用户自然地知道自己在做什么。
前端·后端·架构
LucianaiB1 小时前
从玩具到工业:基于 CodeBuddy code CLI 构建电力变压器绕组短路智能诊断系统
后端
武子康3 小时前
大数据-118 - Flink 批处理 DataSet API 全面解析:应用场景、代码示例与优化机制
大数据·后端·flink
不要再敲了3 小时前
Spring Security 完整使用指南
java·后端·spring
IT_陈寒3 小时前
Redis 高性能缓存设计:7个核心优化策略让你的QPS提升300%
前端·人工智能·后端