virtio,vhost 和vhost-user

article/2025/7/9 6:18:11

virtio

在虚拟机中,可以通过qemu模拟e1000网卡,这样的经典网卡一般各种客户操作系统都会提供inbox驱动,所以从兼容性上来看,使用类似e1000的模拟网卡是非常一个不错的选择。

但是,e1000网卡上也包含了复杂的io端口,寄存器,缓存配置,虚拟机每次收发包都会引起更多的io和mmio操作,使得虚拟机频繁的陷出,最终导致网络性能不佳。

为了解决上述全虚拟化的性能问题,IBM在2005年提出了virtio, 虚拟机中的半虚拟化前端驱动和主机上的后端服务简单的使用virtqueue共享队列交换数据,大幅的减少了e1000模拟时复杂的io操作,从而可以较大程度的提升虚拟网络性能。

这里写图片描述

virtio是qemu的半虚拟化驱动,guest使用virtio driver将请求发送给virtio-backend。

图中描述了virtio的io路径: guest发出中断信号退出kvm,从kvm退出到用户空间的qemu进程。然后由qemu开始对tap设备进行读写。 可以看到这里从用户态进入内核,再从内核切换到用户态,进行了2次切换。

virtio的io路径:

  1. guest设置好tx;
  2. kick host;
  3. guest陷出到kvm;
  4. kvm从内核切换到用户态的qemu进程;
  5. qemu将tx数据投递到tap设备;

vhost

vhost技术对virtio-net进行了优化,在内核中加入了vhost-net.ko模块,使得对网络数据可以在内核态得到处理。

这里写图片描述

图中描述了vhost的io路径: guest发出中断信号退出kvm,kvm直接和vhost-net.ko通信,然后由vhost-net.ko访问tap设备。 这样网络数据只需要经过从用户态到内核态的一次切换,就可以完成数据的传输。大大提高了虚拟网卡的性能。 由于这个技术中vhost-backend在内核中,所以也被叫做vhost-kernel。

vhost的io路径:

  1. guest设置好tx;
  2. kick host;
  3. guest陷出到kvm;
  4. vhost-net将tx数据投递到tap设备;

vhost将部分virio驱动的操作从用户态移到内核态,减少了用户态/内核态切换时间和包的拷贝次数,从而更进一步的提升了性能。

vhost-user

随着技术的发展,将网络数据放入用户态处理将可以得到更灵活的形式。在原有的vhost架构中,进行了改动,增加了 一种新的vhost-backend,叫做vhost-user。

这里写图片描述

图中描述了的io路径:guest发出中断信号退出kvm,kvm直接和vhost-backend通信,然后网络数据将交由vhost-backend 进行处理。

vhost-user的io路径

  1. guest设置好tx;
  2. kick host;
  3. guest陷出到kvm;
  4. kvm将通知vhost-backend;
  5. vhost-backend将tx数据直接发送到nic设备。

vhost-user的提交者是Luke Gorrie,他也是snabbswitch的作者: vhost-backend从原来kernel中的vhost-net 变成了用户空间的snabbswitch,snabbswitch直接接管物理网卡的驱动,从而直接控制网络信息的输入输出。snabbswitch主要使用了下面的技术来提高性能:

  1. 采用了大页来作为host和vm之间通信的内存空间
  2. 用户态操作网卡,使用类似于netmap的zero copy技术来加速对物理设备的访问
  3. 使用numa技术,加快中断响应速率

值得一提的是使用snabbswitch后,不用再使用原来的tap设备模拟的网卡。

使用vhost-user技术,从虚拟机到host上实现了数据的zero copy(通过大页共享),host到nic的zero copy(snabbswitch实现的驱动),能进一步加快数据的传输。

DPDK便是一个在用户态可以直接操作物理网卡的库函数,它和vhost-user结合便可以实现类似于snabb switch一样性能强劲的用户态交换机了。

vhost-user数据面:基于virtqueue,由三部分组成:descriptor table、available ring、used ring。详见:
virtqueue:数据结构以及通信机制

vhost-user控制面:前后端协商基于vhost-user协议。详见:
dpdk vhost-user协议


http://chatgpt.dhexx.cn/article/7oFH1O4H.shtml

相关文章

GO的服务

1.go的安装 1.1 确认版本go version go version go1.20.4 darwin/amd64 可以看到是macos10.14版本。如果是m1 需要安装对应的版本 1.2 用vscode 进行编写go的简单例子 先进入vscode的界面,新建一个目录为godemo,里面就是go的例子的工作目录&#xff0…

Go Registry

实现微服务的服务注册中心,支持服务服务注册、接收心跳等。客户端实现基于注册中心的服务发现机制 微服务 微服务是一些协同工作的小而自治的服务 微服务主要分为六个部分组成 服务描述:类似服务的文档说明,简单但不可或缺。 比如&#xff1a…

Gogs私服搭建

1. Gogs介绍 官网地址:https://gogs.io 文档地址:https://gogs.io/docs Gogs,全称为Go Git Service,是一个基于 Go 语言开发的Git服务。它提供了一个类似于GitHub的界面和功能,允许您在自己的服务器上搭建私有的Git仓库…

vhost-user

1,virtqueue 图一 每个queue实际上是由tx/rx两个virtqueue组成的也就是说tx和rx的virtqueue是分开的,并没有共享。一个virtio net设备最多有多少个queue由后端vhost决定,但前端可以通过ethtool –L eth0 combined 16命令动态修改当前队列数&…

gohost -- go 开发的命令行hosts配置管理工具

前几天在微博上看到有人推荐了lazygit这个工具,让人眼前一亮,什么时候命令行也可以这么抢到了,?,调研了下,发现它使用了gocui,使用它可以做出来很多很炫的命令行工具。 现有的hosts工具里面也有switchosts…

Android studio占用C盘资源的解决方法

Android studio占用C盘资源的解决方法 Android Studio安装成功后会在系统盘用户目录下产生这几个文件夹 一、目录介绍 1、.android 是Android SDK生成的AVD(Android Virtual Device Manager)即模拟器存放路径 2、.AndroidStudio4.0(这里我安…

Minecraft神奇玩家不用键盘,行走全部靠骑猪最后通关MC

大家好,在Minecraft中有非常多的玩法,但是您听说过全程游戏不用键盘只用鼠标通关的玩法吗?也就是说在游戏中不能使用WSAD和空格按键通关!这听起来简直就是天方夜谈了! 在国外有位玩家叫做HeightAdvantage的玩家&#…

2021大树分享收集的网盘搜索站给兄弟们

聚合网盘搜索 https://www.chaonengso.com/ 某柠檬 https://www.moulem.com/ 史莱姆 http://www.slimego.cn/ 蓝菊花-城通网盘 http://www.lanjuhua.com google Drive搜索引擎 https://gezhong.vip/ 陈蛋蛋的宝藏库 http://www.chendandan.ys168.com/ xx资料网 https://www.xxu…

WPF窗体最小化到任务栏

WPF程序也可以很轻松的实现类似QQ那样最小化到任务栏的功能。 WindowState ws;WindowState wsl;NotifyIcon notifyIcon;

android ip格式化输入法,手机键盘还能这样玩?简单几步,让你的输入法萌动可人!...

玩手机,打字忙,输入法你用的是原厂、还是第三方?相信大多数网友跟我一样,换了新手机,会在第一时间安装自己习惯的第三方输入法。 相对而言,我更喜欢百度输入法,它的优势之一便是拥有种类丰富、脑…

渗透测试 ( 1 ) --- 相关术语、必备 工具、导航、全流程总结、入侵网站思路

From:https://zhuanlan.zhihu.com/p/401413938 渗透测试实战教学:https://www.zhihu.com/column/c_1334810805263515648 导航类网站: 渗透师网络安全从业者安全导航(速查小手册)​ 渗透师导航:https…

csgo原始输入开不开_CSGO职业哥参数配置:帅气猪猪JW

在CSGO游戏中,狙击手一直都扮演着团队中非常重要的位置,无论是进攻还是防守,利用狙击的远距击杀,不仅能够造成人数上面的领先,同时还可以打乱对方的战术安排部署,是真正的牵一发而动全身的关键位置。 那么,我们今天来介绍的是这么一位狙击手,CSGO圈中是这么评价他的:在…

dialog dismiss时键盘不消失的问题。

当setCanceledOnTouchOutside(true),点击阴影处,dialog dismiss时键盘不消失的问题。 一开始觉得很简单,监听下onDimiss()方法,在里面隐藏键盘不就行了。 但是发现大多数手机都不会隐藏(魅族x4…

pe没法给服务器装系统吗,U盘重装系统无法进入PE解决方法

使用U盘启动盘重装系统,进不去PE怎么办?制作好U盘启动盘,准备装系统的时候,遇到不能进入PE的情况该怎么解决?下面小编整理一篇教程,帮助大家解决这个问题。 首先先分析u盘装系统不能进入pe的原因&#xff1…

真正的黑客键盘

IT程序猿 微博网友评论: 金先生不睡觉:甚至没有退格键! O2酱:复读机的键盘:Ctrl,C,V 蓝天草地生活:高手专用! 吴彦猪猪_yzy:其实不需要done 某个序列表示don…

LeetCode500. 键盘行

项目场景: 行百里路者半九十 问题描述 键盘行 给你一个字符串数组 words ,只返回可以使用在 美式键盘 同一行的字母打印出来的单词。键盘如下图所示。 美式键盘 中: 第一行由字符 “qwertyuiop” 组成。 第二行由字符 “asdfghjkl” 组成…

又一款度盘不限速下载神器,无需登录,10M/s!

开局一张图 这是我最新发现的一款百度云下载工具 简介 有一个网站叫 6盘,这个网站呢,可以转存百度网盘的资源。 然后再将转存的文件下载就可以不限速下载了。 然后,工具的作者觉得 6盘网页版还行,PC版丑拒。 于是,一时…

推荐6款珍藏已久的网盘搜索工具

最近收集了几款好用的网盘资源搜索网站,可能你已经在用了,可能你还不知道它的存在 。如果你已经在用了,说明你很有远光,好的搜索网盘将大大提高我们平时的搜索资源的效率 。 1 胖次搜索 胖次网盘搜索引擎,独家的索引挖掘技术,为您…

深度linux没有硬盘,安装Deepin系统到硬盘分区部分没有发现硬盘数据的解决

使用华为笔记本安装Deepin系统非常的顺利,但是在使用戴尔笔记本安装Deepin的时候却不那么如意,在安装到选择语言后,进展到硬盘分区部分,却没有发现硬盘数据,如下图所示,没有任何的数据,这里就不…