IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 系统运维 -> qemu-kvm网络前后端feature协商 -> 正文阅读

[系统运维]qemu-kvm网络前后端feature协商

作者:recommend-item-box type_blog clearfix

整体框架介绍

启动虚拟机时,前后端网络会进行feature协商。前端指的是guest内部的驱动,后端指的是dpdk中的vhost-user。但guest驱动不能直接和vhost_user协商,中间需要通过qemu这个中介。如下图:
![在这里插入图片描述](https://img-blog.csdnimg.cn/335d4c7e5b50415289ee17f3eb8c485f.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBAc3Vuc2hpbmUwMDg=,size_8,color_FFFFFF,t_70,g_se,x_16)

如果qemu要完成一个中介的角色,那么qemu一定要实现两个代理。一个代理和dpdk进行沟通,另一个用来和guest沟通。如下图:
![在这里插入图片描述](https://img-blog.csdnimg.cn/b062ca21f5e44352a3ecc0bd2431457c.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBAc3Vuc2hpbmUwMDg=,size_20,color_FFFFFF,t_70,g_se,x_16)

和dpdk协商,本质上是与dpdk中的vhost_user协商; 和qemu协商本质上是与guest中的virtio-net驱动协商。因此把qemu中用于和dpdk vhost_user协商的代理称为qemu:vhost_user,把qemu中用于和guest virtio-net协商的代理称为qemu:virtio_net。
所以整个协商过程涉及的核心是:dpdk vhost_user, qemu:vhost_user, qemu:virtio-net, guest virtio-net,共4个模块,每个模块都有自己的feature。
每个模块的feature都由3个概念组成:1)模块代码本身支持的feature;(全量feature); 2)根据实际情况使能的feature;3)经过协商实际生效的feature;

整个协商是自后端到前端,再由前端到后端的。dpdk--->qemu--->guest-->qemu--->dpdk

feature协商过程分析

1、dpdk vhost_user初始化
dpdk在初始化时会初始化全局变量:VHOST_FEATURES。初始值就是dpdk vhost_user代码功能可以支持的全量feature,可以根据需求在启动时调用api(rte_vhost_feature_disable)禁用掉其中一些feature。

2、qemu启动初始化后端代理
qemu后端netdev初始化:
qemu主进程在启动时解析到-netdev,如果指定tap driver实现网络报文收发,libvirt会事先创建好tap设备,qemu只需要取出从libvirt传来的tap设备对应fd,类似迁移时从libvirt获取fd的过程,网络设备的初始化在qemu解析完参数后,由qemu_create_late_backends进入:
qemu-6.0.0

qemu_init
	qemu_create_late_backends
		net_init_clients
			qemu_opts_foreach(qemu_find_opts("netdev"),  net_init_netdev, NULL, errp)     
				net_init_netdev
					net_client_init
						net_client_init1
							net_client_init_fun[netdev->type](netdev, netdev->id, peer, errp)	<=>	net_init_tap

当指定netdev的type为vhost_user时,net_client_init_fun[netdev->type]=net_init_vhost_user。
关键数据结构:net_clients存放NetClientState(及代码中的nc)为单个网卡数据,包含网卡名字、链路状态,nc->info指向net_vhost_user_info为。

-------------未完待续

参考文章:
http://blog.chinaunix.net/uid-28541347-id-5787244.html
http://blog.chinaunix.net/uid-28541347-id-5786547.html
https://blog.csdn.net/hzj_001/article/details/94156107
https://blog.csdn.net/huang987246510/article/details/121046398

  系统运维 最新文章
配置小型公司网络WLAN基本业务(AC通过三层
如何在交付运维过程中建立风险底线意识,提
快速传输大文件,怎么通过网络传大文件给对
从游戏服务端角度分析移动同步(状态同步)
MySQL使用MyCat实现分库分表
如何用DWDM射频光纤技术实现200公里外的站点
国内顺畅下载k8s.gcr.io的镜像
自动化测试appium
ctfshow ssrf
Linux操作系统学习之实用指令(Centos7/8均
上一篇文章      下一篇文章      查看所有文章
加:2022-04-07 23:07:00  更:2022-04-07 23:09:28 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/15 21:54:48-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码