KVM虚拟化基础

虚拟化基础与分类

在这里插入图片描述
x86 CPU特权级别设为四个Ring:Kernel Mode运行在Ring 0、User Mode运行在Ring 3;

非硬件辅助虚拟化(一型)


Hypervisor运行在Ring 0;
Guest OS不做修改,以为自己运行在Ring 0上,实际运行在Ring 1上,通过使用虚拟CPU间接使用物理CPU;
Hypervisor对Guest OS的运行在Ring 0上的指令进行转译,变成真实CPU的指令;

直接安装在物理机上,称作bare metal hypervisor。例如:VMware ESXi、Microsoft Hyper-V、KVM。

硬件辅助全虚拟化(二型)

在这里插入图片描述
Intel VT and AMD-V创建一个新的Ring -1,Hypervisor运行在其上,
Guest OS无需修改,可以直接运行在Ring 0;

安装在物理机的操作系统上的软件,称作hosted hypervisor。例如:VMware Workstation、VirtualBox。

半虚拟化

在这里插入图片描述
Hypervisor使用Kernel Mode,运行在Ring 0;
Guest OS的Kernel需要修改,将运行在Ring 0上的指令转为调用Hypervisor;
Guest OS上的应用运行在Ring 3;

替换不能虚拟化的部分指令,通过超级调用hypercall直接和底层的虚拟化层hypervisor来通讯,hypervisor同时也提供了超级调用接口来满足其他关键内核操作,比如内存管理、中断和时间保持。例如:xen。

KVM介绍

在这里插入图片描述
一型虚拟化:非硬件辅助虚拟化,可对NUMA框架的cpu做定制的调优;

在这里插入图片描述

system call:应用程序原本运行在ring 3上。如果要做受控操作(访问磁盘、写文件),需执行系统调用函数。执行时,运行级别会发生ring 3到ring 0的切换,并跳转到系统调用对应的内核代码位置执行,完成设备访问后,再从ring 0切换回ring 3。此过程也称作用户态和内核态的切换。

qemu

在这里插入图片描述
qumu-kvm:帮助kvm进行io模拟的Hypervisor;
/dev/kvm:被宿主机调用的接口,负责vcpu/vmem资源;(比如:qemu进程利用mmap系统调用映射一块内存给VM的描述符,其实也就是给VM创建内存的过程)

关键文件

配置文件: /etc/libvirt/libvirtd.conf
虚拟化守护进程日志文件:/var/log/libvirt/libvirtd.log

虚拟机配置文件:/etc/libvirt/qemu/instance-0000xxxx.xml
虚机日志文件:/var/log/libvirt/qemu/instance-0000xxxx.log

xml配置文件举例及解释

<domain type='kvm'>          ##描述hypervisor<name>centos7.0</name>        ##定义虚拟机整体信息<uuid>c2d264d3-5c61-4d2e-8678-b28673c1f64b</uuid><memory unit='KiB'>1048576</memory><currentMemory unit='KiB'>1048576</currentMemory><vcpu placement='static'>1</vcpu><os>                  ##系统信息<type arch='x86_64' machine='pc-i440fx-rhel7.0.0'>hvm</type><boot dev='hd'/>      ##开机从哪里启动</os><features>          ##硬件资源特性<acpi/><apic/></features><cpu mode='custom' match='exact'><model fallback='allow'>Haswell-noTSX</model></cpu><clock offset='utc'><timer name='rtc' tickpolicy='catchup'/><timer name='pit' tickpolicy='delay'/><timer name='hpet' present='no'/></clock><on_poweroff>destroy</on_poweroff>      ##突发事件处理<on_reboot>restart</on_reboot><suspend-to-mem enabled='no'/><suspend-to-disk enabled='no'/></pm><devices>                ##外设资源<emulator>/usr/libexec/qemu-kvm</emulator><disk type='file' device='disk'>    ##描述虚拟磁盘image<driver name='qemu' type='qcow2'/><source file='/var/lib/libvirt/images/centos7.0.qcow2'/><target dev='vda' bus='virtio'/><address type='pci' domain='0x0000' bus='0x00' slot='0x07' function='0x0'/></disk><controller type='usb' index='0' model='ich9-ehci1'><address type='pci' domain='0x0000' bus='0x00' slot='0x06' function='0x7'/></controller><controller type='usb' index='0' model='ich9-uhci1'><master startport='0'/></controller><controller type='usb' index='0' model='ich9-uhci2'><master startport='2'/><address type='pci' domain='0x0000' bus='0x00' slot='0x06' function='0x1'/></controller><controller type='usb' index='0' model='ich9-uhci3'><master startport='4'/><address type='pci' domain='0x0000' bus='0x00' slot='0x06' function='0x2'/><controller type='virtio-serial' index='0'><address type='pci' domain='0x0000' bus='0x00' slot='0x05' function='0x0'/></controller><interface type='bridge'>    ##虚拟网络,基于网桥<mac address='52:54:00:6a:1e:54'/><source bridge='br0'/><model type='virtio'/><address type='pci' domain='0x0000' bus='0x00' slot='0x03' function='0x0'/></interface><serial type='pty'>      ##串口信息可以不用更改<target port='0'/></serial><console type='pty'><target type='serial' port='0'/></console><channel type='unix'><target type='virtio' name='org.qemu.guest_agent.0'/><address type='virtio-serial' controller='0' bus='0' port='1'/></channel><channel type='spicevmc'><target type='virtio' name='com.redhat.spice.0'/><address type='virtio-serial' controller='0' bus='0' port='2'/></channel><input type='tablet' bus='usb'/><input type='mouse' bus='ps2'/><input type='keyboard' bus='ps2'/><graphics type='vnc' port='-1' autoport='yes' keymap='en-us'/><sound model='ich6'>      ##从此往下的内容可以不用更改<address type='pci' domain='0x0000' bus='0x00' slot='0x04' function='0x0'/></sound><video><model type='qxl' ram='65536' vram='65536' vgamem='16384' heads='1'/><address type='pci' domain='0x0000' bus='0x00' slot='0x02' function='0x0'/></video><redirdev bus='usb' type='spicevmc'></redirdev><redirdev bus='usb' type='spicevmc'></redirdev><memballoon model='virtio'><address type='pci' domain='0x0000' bus='0x00' slot='0x08' function='0x0'/></memballoon></devices>
</domain>
<domain type='kvm'>
#虚拟机整体信息
#系统信息
#硬件资源特性
#突发事件处理
#虚拟磁盘(单个或多个)
#虚拟光盘(可选)
#虚拟网络(单个或多个)
#vnc/spice配置
</domain> # 修改虚机配置文件命令,关机重启即可生效
# 不建议直接使用vi编辑xml文件
virsh edit <domain>

常用命令

# 列出所有虚机
virsh list --all
# 虚机开关机、重启
virsh shutdown/start/reboot uuid
# 迁移回退
virsh domjobabort uuid
# 根据xml定义虚机
virsh define /var/lib/nova/instances/uuid/libvirt.xml
# 取消虚机定义
virsh undefine uuid
# 获取xml配置
virsh dumpxml uuid
# 虚机挂载、卸载盘
virsh attach-device/detach-device uuid add_disk.xml
# 获取qga信息
virsh qemu-agent-command uuid  '{"execute":"guest-info"}' 
# 查询文件系统状态
virsh qemu-agent-command uuid '{"execute":"guest-fsfreeze-status"}'
# 查询虚机所有磁盘
virsh domblklist uuid
# kvm内核模块正常加载
lsmod | grep kvm 
# libvirt服务
systemctl status/start/stop/restart libvirtd
# 查看kvm虚机进程
ps -efww | grep qemu-kvm

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/bicheng/29757.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

OpenAPI Typescript Codegen 的基本使用

下载 axios npm install axios OpenAPI Typescript Codegen 官网&#xff1a;https://github.com/ferdikoomen/openapi-typescript-codegen 安装 OpenAPI Typescript Codegen npm install openapi-typescript-codegen --save-dev–input&#xff1a;指定接口文档的路径、url …

小程序餐饮点餐系统,扫码下单点菜,消费端+配送端+收银端+理端

目录 前言&#xff1a; 一、小程序功能有哪些 前端&#xff1a; 管理端&#xff1a; 二、实体店做小程序的好处 方便快捷的点餐和支付体验&#xff1a; 扩大店铺的曝光度和影响力&#xff1a; 优化顾客体验和服务质量&#xff1a; 降低成本和提高效率&#xff1a; 数据…

C#语言进阶(一)—委托

总目录 C# 语法总目录 委托 委托1. 基本用法2.委托作为方法参数3.多播委托4.实例对象方法、静态方法与委托之间的关系5. 委托类型参数为泛型6. System空间下的 Func 委托和 Action 委托 委托 委托类似于CPP中的函数指针。它定义了一个方法类型&#xff0c;这个方法类型有返回类…

代码随想录算法训练营第四十二天|LeetCode1049、LeetCode494 目标和

题1&#xff1a; 指路&#xff1a;1049. 最后一块石头的重量 II - 力扣&#xff08;LeetCode&#xff09; 思路与代码&#xff1a; 本题中&#xff0c;我们要让剩下的石头重量尽可能小&#xff0c;那么每次就要尽可能找重量相等或最相近的两个石头&#xff0c;如果我们把两个…

3.8. 马氏链-一般状态空间的马氏链(Harris链)

一般状态空间的马氏链-Harris链 1. Harris链及示例1.1. Harris链1.2. 示例2. 修改的Harris链( X ˉ n \bar{X}_{n} Xˉn​)2.1. 修改的Harris链( X ˉ n \bar{X}_{n} Xˉn​)2.2. 三个引理(可以从 X ˉ n \bar{X}_{n} Xˉn​的结论推出 X n X_{n} Xn​的结论)3. 推广相关…

页面置换算法详解

页面置换算法是操作系统中管理虚拟内存的一种技术&#xff0c;特别是在当物理内存不足以容纳所有活跃的进程时。页面置换算法的目标是决定哪些页面应该被保留在物理内存中&#xff0c;哪些应该被交换到磁盘上。以下是一些常见的页面置换算法&#xff1a; 1. **最佳置换算法&am…

【学习】程序员资源网址

1 书栈网 简介&#xff1a;书栈网是程序员互联网IT开源编程书籍、资源免费阅读的网站&#xff0c;在书栈网你可以找到很多书籍、笔记资源。在这里&#xff0c;你可以根据热门收藏和阅读查看大家都在看什么&#xff0c;也可以根据技术栈分类找到对应模块的编程资源&#xff0c;…

Microsoft Visual C++ Redistributable 【安装包】【高速下载】

方法1、可以从官方下载&#xff0c;如下图 Visual C Redistributable for Visual Studio 2015 但是此链接只有一个版本 方法2 已经下载好并且已经整理好了2008--2022的所有版本点击下方链接即可高速下载 如果是win7-win8-win10-win11直接可以下载2015--2022版本&#xff0c…

KDtree高维空间特征向量分类树的缺陷与补救方案

背景描述 最近在做高维特征向量查找比对的过程中&#xff0c;由于数据库内的数据过于庞大&#xff0c;从头遍历效率太低&#xff0c;故想要寻找一些快速的高维空间向量的查找方式。 经过调研与学习&#xff0c;笔者发现有球树、KDtree等多种高维空间向量查找方式&#xff0c;…

如何避免死锁?

避免死锁是多线程编程中的一个重要问题。死锁通常发生在多个线程持有资源并等待其他线程释放资源时&#xff0c;如果这些线程以不同的顺序请求资源&#xff0c;可能会导致它们永远等待下去。 以下是一些避免死锁的策略&#xff1a; 1.避免循环等待&#xff1a; 确保线程以相同…

DOCTYPE的作用

DOCTYPE是document type&#xff08;文档类型&#xff09;的缩写&#xff0c;它位于HTML文档的最前面&#xff0c;处于<html>标签之前。DOCTYPE声明的主要作用是告诉浏览器的解析器使用哪种HTML规范或者XHTML规范来解析页面。 1. 提高浏览器兼容性 在W3C标准出来之前&a…

大模型基础知识:探索人工智能的巨轮

人工智能大模型&#xff0c;这个在近年来频繁出现在科技新闻和学术论坛的热门词汇&#xff0c;已经成为了推动人工智能技术发展的关键力量。这些大模型&#xff0c;如OpenAI的GPT-3、谷歌的BERT、百度的ERNIE等&#xff0c;以其强大的性能和广泛的应用范围&#xff0c;引起了广…

js原型链原理与查找机制

JavaScript中的原型链是实现继承的机制&#xff0c;它是基于对象的。每个对象都有一个内部指针&#xff08;proto&#xff09;&#xff0c;指向它的原型对象&#xff08;prototype&#xff09;。原型对象也是一个对象&#xff0c;同样具有自己的原型对象&#xff0c;形成一个链…

【AI大模型】在健康睡眠监测中的深度融合与实践案例

文章目录 1. 应用方案2. 技术实现2.1 数据采集与预处理2.2 构建与训练模型2.3 个性化建议生成 3. 优化策略4. 应用示例&#xff1a;多模态数据融合与实时监测4.1 数据采集4.2 实时监测与反馈 5. 深入分析模型选择和优化5.1 LSTM模型的优势和优化策略5.2 CNN模型的优势和优化策略…

若依RuoYi-Vue分离版—配置多数据源

若依RuoYi-Vue分离版—配置多数据源 一、修改application-druid.yml二、修改pom文件&#xff0c;引入依赖第一种&#xff1a;下载jar包到本地&#xff0c;然后引入&#xff08;我这边用的是这种&#xff09;本地引入的&#xff0c;打包时需要加上配置 第二种&#xff1a;从远程…

随想录Day63 | 单调栈 42. 接雨水 84.柱状图中最大的矩形

随想录Day63 | 单调栈 42. 接雨水 84.柱状图中最大的矩形 42. 接雨水 题目链接 42 给定 n 个非负整数表示每个宽度为 1 的柱子的高度图&#xff0c;计算按此排列的柱子&#xff0c;下雨之后能接多少雨水。 第一次提交 class Solution { public:int trap(vector<int>…

模板类的实例—栈

#include<iostream>using namespace std;typedef int Datatype;class Stack { private:Datatype* items;//栈数组int stacksize;//栈的实际大小int top;//栈顶指针 public://构造函数&#xff1a;1&#xff09;分配栈数组内存&#xff0c;2&#xff09;把栈顶指针初始化为…

云原生微服务开发日趋成熟:有效拥抱左移以改善交付

在软件工程和应用程序开发方面&#xff0c;云原生已经成为许多团队的常用术语。当人们调查云原生的世界时&#xff0c;他们经常会得出这样的观点&#xff1a;云原生的整个过程都是针对大型企业应用程序的。几年前&#xff0c;情况可能确实如此&#xff0c;但随着 Kubernetes 等…

解码 ResNet:残差块如何增强深度学习性能【数学推导】

ResNet简介 残差网络结构 残差网络&#xff08;ResNet&#xff09;是由何凯明等人在2015年提出的&#xff0c;它极大地提高了深度神经网络的训练效果&#xff0c;尤其是非常深的网络。ResNet的核心思想是引入“残差块”&#xff08;Residual Block&#xff09;&#xff0c;通…

《Fundamentals of Power Electronics》——理想变压器基本公式推导

接下去推导理想变压器的基本公式。理想变压器满足以下三个条件&#xff1a; 1、无铜损。假设原副边线圈均无纯电阻&#xff0c;则不会因在铜导线中产生焦耳热引起能量损耗&#xff0c;另外也不考虑回路中的分布电容。 2、无铁损。忽略通过铁芯的磁通量变化引起的涡流损耗&…