系统相关
首页 > 系统相关> > Linux虚拟化KVM-Qemu分析(九)之virtio设备

Linux虚拟化KVM-Qemu分析(九)之virtio设备

作者:互联网

目录

1. 概述

2. 流程分析

3. tap创建 - 网卡后端设备

4. virtio-net创建

4.1 数据结构

4.2 流程分析

4.2.1 class_init

4.2.2 instance_init

4.2.3 realize

参考


 

Linux虚拟化KVM-Qemu分析(一)

Linux虚拟化KVM-Qemu分析(二)之ARMv8虚拟化

Linux虚拟化KVM-Qemu分析(三)之KVM源码(1)

Linux虚拟化KVM-Qemu分析(四)之CPU虚拟化(2)

Linux虚拟化KVM-Qemu分析(五)之内存虚拟化

Linux虚拟化KVM-Qemu分析(六)之中断虚拟化

Linux虚拟化KVM-Qemu分析(七)之timer虚拟化

Linux虚拟化KVM-Qemu分析(八)之virtio初探

Linux虚拟化KVM-Qemu分析(九)之virtio设备

virtio 网络的演化

在CentOS上进行虚拟化:QEMU、Xen、KVM、LibVirt、oVirt

ARM SMMU原理与IOMMU技术(“VT-d” DMA、I/O虚拟化、内存虚拟化)

OpenVZ,Xen,KVM等:虚拟化解决方案

KVM Virtio: An I/O virtualization framework for Linux(Linux虚拟IO框架)

ARM SMMU原理与IOMMU技术(“VT-d” DMA、I/O虚拟化、内存虚拟化)

用QEMU构建嵌入式LINUX系统

疫情下的远程办公:理解Linux虚拟网络设备之tun/tap

Linux虚拟网络设备之tun/tap

Tun/Tap接口教材-[翻译:Tun/Tap interface tutorial]

Linux的TUN/TAP编程

 

说明:

  1. KVM版本:5.9.1
  2. QEMU版本:5.0.0
  3. 工具:Source Insight 3.5, Visio
  4. 文章同步在博客园:https://www.cnblogs.com/LoyenWang/

 

1. 概述

先来张图:

 
想在一篇文章中写完这四个模块,有点too yong too simple,所以,看起来又是一个系列文章了。
本文先从Qemu侧的virtio device入手,我会选择从一个实际的设备来阐述,没错,还是上篇文章中提到的网络设备。

 

2. 流程分析

在Qemu的网卡虚拟化时,通常会创建一个虚拟网卡前端和虚拟网卡后端,如下图:

全文围绕着Tap设备的创建和Virtio-Net设备的创建展开。

入口流程如下:

下边进入细节,the devil is in the details

 

3. tap创建 - 网卡后端设备

疫情下的远程办公:理解Linux虚拟网络设备之tun/tap

Linux虚拟网络设备之tun/tap

Tun/Tap接口教材-[翻译:Tun/Tap interface tutorial]

Linux的TUN/TAP编程

从上文中,我们知道,TapVirtio-Net属于前后端的关系,最终是通过结构体分别指向对方,如下图:

创建Tap设备的主要工作就是创建一个NetClientState结构,并添加到net_clients链表中:

函数的调用细节如下图:

以上就是Tap后端的创建过程,下文将针对前端创建了。

 

4. virtio-net创建

这是一个复杂的流程。

4.1 数据结构

Qemu中用C语言实现了面向对象的模型,用于对设备进行抽象,精妙!

针对Virtio-Net设备,结构体及拓扑组织关系如下图:

 

4.2 流程分析

与设备创建相关的三个函数,可以从device_init_func入口跟踪得知:

 

4.2.1 class_init

 

4.2.2 instance_init

类初始化结束后,开始对象的创建:

 

4.2.3 realize

到目前为止,我们似乎都还没有看到Virtio-Net设备的相关操作,不用着急,已经很接近真相了:

本文基本捋清了虚拟网卡前端设备和后端设备的创建过程,完成的工作只是绑定了彼此,数据交互以及通知机制,留给后续吧。

 

参考

《 Virtual I/O Device (VIRTIO) Version 1.1》
https://www.redhat.com/en/blog/virtio-devices-and-drivers-overview-headjack-and-phone

欢迎关注个人公众号,不定期更新技术文章。

作者:LoyenWang
出处:https://www.cnblogs.com/LoyenWang/
公众号:LoyenWang
版权:本文版权归作者和博客园共有
转载:欢迎转载,但未经作者同意,必须保留此段声明;必须在文章中给出原文连接;否则必究法律责任

标签:virtio,虚拟化,KVM,Virtio,Linux,Qemu,设备
来源: https://blog.csdn.net/Rong_Toa/article/details/113819437