Hypervisor之半虚拟化virtio

article/2025/10/29 14:59:28

1 基本概念
virtio共享内存使用的是guest GPA,由guest virtio front-end驱动初始化队列的时候分配,在back-end驱动中,QVM或者QEMU将GPA转换到HVA或者HPA地址再读写数据。

virtio front-end通知back-end方式:访问doorbell寄存器触发EPT misconfig(Extended Page Table)。x86 CPU EPT每级页表的每个entry中存放的一般都是下一级页表物理基地址的bit (N-1):12。
ARM-v8 TTBR: Tranlation Table Base Register
x86 CR3: Control Register

2 Protocol
2.1 virtio 0.95
Legacy模式只使用了PCI的BAR0
Figure 2-1 BAR0指向的寄存器

2.2 virtio 1.0
QNX hypervisor使用了virtio 1.0协议。
capability ID参考:include/uapi/linux/pci_regs.h

struct virtio_pci_cap {
    __u8 cap_vndr;
    __u8 cap_next;
    __u8 cap_len;
    __u8 cfg_type;
    __u8 bar;
    __u8 padding[3];
    __le32 offset;
    __le32 length;
};
根据上述结构体可知,每个能力在PCI配置空间中占用16个字节,并且capability ID(cap_vndr)= 0x09,virtio 1.0中五个cfg_type如下所示。
#define VIRTIO_PCI_CAP_COMMON_CFG   1      /* 占用PCI Bar内存0x38个字节 */
#define VIRTIO_PCI_CAP_NOTIFY_CFG       2      /* 占用PCI Bar内存8个字节 */
#define VIRTIO_PCI_CAP_ISR_CFG              3      /* 占用PCI Bar内存4个字节 */
#define VIRTIO_PCI_CAP_DEVICE_CFG       4      /* 占用PCI Bar内存0x0c个字节 */
#define VIRTIO_PCI_CAP_PCI_CFG              5      /* 占用PCI Bar内存0个字节 */

5个cfg_type仅占用一个PCI Bar,只是地址偏移offset和长度不一样。获取每个能力的offset和长度(都是小端格式),用户空间可以使用libpci库,为简单起见,示例代码中仅读取了4个字节,实际需要读取16个字节。
参数ptr是配置空间偏移0x34地址指向的一个字节。
static bool pci_is_pcie(struct pci_dev *pdev, unsigned char ptr)
{
    unsigned int value;
    unsigned int next_ptr;
    unsigned int cap_id;

    next_ptr = ptr;
    if (0 == ptr) {
        return false;
    }
    do {
        value = pci_read_long(pdev, next_ptr);
        next_ptr = (value >> 8) & 0xff;
        cap_id = value & 0xff;
        /* PCI Express Capability Structure */
        if (cap_id == 0x10) {
            return true;
        }
    } while (next_ptr);

    return false;
}

2.3 virtio 1.1
- virtio 1.1,packed模式,将virtio 1.0中的3个ring合成一个

3 Abbreviations
fio:flexiable io


http://chatgpt.dhexx.cn/article/yYXUiqBd.shtml

相关文章

VMware vSphere Hypervisor (ESXi) 7.0U3g安装

VMware vSphere Hypervisor“ESXi” 7.0U3g 安装 一、准备工作1、查看支持ESXI7.0U3的CPU型号;2、下载将镜像制作成安装盘的软件;3、注册vmware账号,下载ESXI7.0U3镜像; 二、安装VMware vSphere Hypervisor (ESXi) 7.0U3g三、配置…

Vmware vSphere hypervisor 虚拟化软件安装

目录 一、概述 1.1.什么是 vSphere Hypervisor? 二、U盘启动制作 2.1. ultraiso安装完成后打开文件 2.2.选择我们下载好的虚拟化软件ios 2.3.写入映像文件 2.4.写入硬盘映像,驱动器选择插入的U盘 三、 Vmware vSphere hypervisor安装 四、虚拟机…

Hypervisor---虚拟化技术简易说明

Hypervisor,虚拟机监视器(英语:virtual machine monitor,缩写为 VMM),是一种运行在基础物理服务器和操作系统之间的中间软件层,可允许多个操作系统和应用共享硬件。 被Hypervisor用来执行一个或多个虚拟机器…

hypervisor - qnx

按照definition of Goldberg (1973), Hypervisor – Wikipedia: qnx hypervisor is type 2 QNX considers its hypervisor to be a type 1 (although it is a type 2)

什么是虚拟机管理程序hypervisor,什么是hypervisor type 1, hypervisor type 2

服务器虚拟化目前是IT界的一个热门话题。它的受欢迎程度和使用率一直在增长,尤其是在企业环境中。使虚拟化成为可能的是所谓的hypervisor 管理程序。服务器虚拟化允许不同的操作系统在一台服务器上运行单独的应用程序,同时仍使用相同的物理资源。这些虚拟…

了解以及区分物理机,虚拟机(hypervisor/VMM) 和 容器(Docker)的适用场景

了解以及区分物理机,虚拟机hypervisor/VMM 和 容器Docker的适用场景 Abbreviations物理机和虚拟机以及容器的区别动机motivation:为什么要有虚拟机物理机:虚拟机容器 虚拟机的种类以及他们的本质区别虚拟化方式虚拟机类型docker技术传统计算机体系结构虚…

虚拟化与hypervisor

文章目录 虚拟化HypervisorHypervisor分类Hypervisor优点Container vs HypervisorHypervisorContainer 虚拟化 虚拟化通过将公司的物理资源视为可以动态分配虚拟资源的池,从而提高了IT资源的利用率。 虚拟化涉及从物理思维到逻辑思维的转变,将IT资源视…

Hypervisor 简介

单词解释 Hypervisor:超级监督者,管理程序 虚拟化技术 概念 一种运行在基础物理服务器和操作系统之间的中间软件层,可以访问服务器上包括磁盘和内存在内的所有物理设备。Hypervisor协调着这些硬件资源的访问,以及各个虚拟机之间…

Hypervisor技术

KVM介绍 KVM内置于Linux,是内核模块;KVM可以直接利用Linux来做一些在xen中需要利用hypervisor来做的事情,比如任务调度,内存管理等等。所以相比之下,KVM更轻量,更易管理,并且版本更新也可以随着…

hypervisor详解

hypervisor:一种运行在物理服务器和操作系统之间的中间层软件,可以允许多个操作系统和应用共享一套基础物理硬件。可以将hypervisor看做是虚拟环境中的“元”操作系统,可以协调访问服务器上的所有物理设备和虚拟机,所以又称为虚拟…

Hypervisor简介

从头开始了解和使用Hypervisor(第4部分) - 嘶吼 RoarTalk – 回归最本质的信息安全,互联网安全新媒体,4hou.com 根据 Hypervisor 的不同类型,我们将虚拟化分为I 型和 II 型两种。 I 型虚拟化,也被称为裸金属虚拟化,Hy…

什么是Hypervisor

根据维基百科:“Hypervisor 或者virtual machine monitor (VMM)是创造并且运行虚拟机的软件、固件、或者硬件”。 通俗来讲,Hypervisor是一种将操作系统与硬件抽象分离的方法,以达到host machine的硬件能同时运行一个至多个虚拟机作为guest …

虚拟化技术介绍 hypervisor简介

什么是虚拟化? 虚拟化(英语:Virtualization)是一种资源管理技术,是将计算机的各种实体资源,如服务器、网络、内存及存储等,予以抽象、转换后呈现出来,打破实体结构间的不可切割的障…

Hypervisor

1 什么是Hypervisor? Hypervisor是一种系统软件,它充当计算机硬件和虚拟机之间的中介,负责有效地分配和利用由各个虚拟机使用的硬件资源,这些虚拟机在物理主机上单独工作,因此,Hypervisor也称为虚拟机管理…

2020-12-01 剖析 Linux hypervisor

hypervisor:一种运行在物理服务器和操作系统之间的中间层软件,可以允许多个操作系统和应用共享一套基础物理硬件。可以将hypervisor看做是虚拟环境中的“元”操作系统,可以协调访问服务器上的所有物理设备和虚拟机,所以又称为虚拟…

Hypervisor定义、种类及产品介绍

Hypervisor 是一种运行在物理服务器和操作系统之间的中间软件层(可以是软件程序,也可以是固件程序),Hypervisor 分两种,一种是直接运行在硬件设备上的;另一种是运行在具有虚拟化功能的操作系统上的。 Hyper…

剖析 Linux hypervisor KVM

Linux 的最重要创新之一就是转变为hypervisor(或运行其他操作系统的操作系统)。现在涌现许多使用 Linux 作为内核的 hypervisor 解决方案。本文探索 hypervisor 背后的原理,以及两个使用 Linux 作为平台的 hypervisor(KVM 和 Lguest)。 hypervisor 之于操作系统类似于操作…

Hypervisor介绍

一、单词释义: Hypervisor:超级监督者,管理程序; 二、虚拟化技术: 1.概念: 运行在基础物理服务器和操作系统之间的中间软件层,可以访问服务器上包括磁盘和内存在内的所有物理设备。Hypervis…

趣味俄罗斯方块代码分享(C语言)

趣味俄罗斯方块代码分享(C语言) 代码源自明日科技编著的《C语言项目开发|实战入门》,书中是使用Dev c/Visual C6.0编写,我是将代码在VC2019中重新编写,部分地方有修改。 操作系统:win 10 编译软件&#x…

【c语言小项目】基于easyX的俄罗斯方块

EeayX是针对 C/C 的简单图形库插件,本项目基于easyX游戏框架下实现俄罗斯方块游戏。 俄罗斯方块功能实现中主要运用了二维数组的循环遍历。能够实现基本功能,暂未实现旋转 c语言系列专栏:c语言之路重点知识整合 更多【c语言】小项目&…