首页 > 系统相关 >学好虚拟化,首先要学Linux

学好虚拟化,首先要学Linux

时间:2023-04-20 23:00:10浏览次数:50  
标签:VMM Guest 虚拟化 要学 虚拟机 页表 Linux 内存

上次讲到了虚拟化的基础知识,比如虚拟化的应用、各个厂商都是通过何种技术路径来实现的等等,本篇想记录一下我学习到的CPU内存虚拟化和网络虚拟化相关知识,通过记录来制造反馈,让自己更有效地学习。需要注意的是,学习虚拟化就免不了和Linux打交道了。

 

在此之前还是回顾一下虚拟化的基础知识。

 

虚拟化对于我们网络行业来说已经起到了越来越大的作用,从最开始做实验用的VMware和EVE,到现网运行的各种虚拟网络设备,无一例外都提醒着从业者要多加了解此技术。不仅是技术人员会用到虚拟化,其实大多数人的生活都离不开虚拟化,比如我们所用的Windows也是一种虚拟化,因为他是分时复用系统,分时系统最早由IBM的工程师研发出来,它会把资源切分成无数的小分片,这样就实现了多任务的同时处理。广义的虚拟化是在一套硬件平台上虚拟出多个系统,来提高硬件的利用效率。

 

 

接下来介绍一下CPU硬件辅助虚拟化。这时就要提及CPU的两大厂商Intel和AMD了,其中Intel使用VT-x技术,AMD使用AMD-V技术来实现。他们的核心思想其实都是通过引入新的指令和运行模式,使VMM和Guest OS分别运行在

ROOT模式和非ROOT模式之下,Guest OS运行在Ring 0下。通常Guest OS核心指令不需要经过VMM,可直接下达到计算机硬件被执行,只有当它执行到特殊指令时才会切到VMM来处理特殊指令。

 

当讲到内存虚拟化时,首先要了解三个概念:VA(virtual address)虚拟机逻辑地址,虚拟机中进程使用的逻辑地址;PV(phyiscal virtual address)虚拟机物理机地址,虚拟机自己看到自己的物理地址;MA 是host os真正的物理机地址。内存虚拟化其实就是由MA到PV的映射。物理机内存是一段连续的地址空间,虚拟监视器(VMM)上层的各个虚拟机共享物理机的内存地址空间。但由于虚拟机是以随机的方式访问内存,而又需要保证虚拟机内部内存地址的连续,因此VMM就需要合理的映射PV和MA才行。VMM对物理机内存进行管理,并对虚拟机的需求进行合理分配。其中的映射是通过内存虚拟化中的内存管理单元来完成,其中的技术分为影子页表法、页表写入法和扩展页表EPT。

 

影子页表法实现的是内存全虚拟化。其中VMM为每个Guest维护一个影子页表,表中维护VA到MA的映射关系,而Guest也不维护VA到PV的映射关系。当VMM捕获到Guest页表的变化时,VMM会查找负责PV到MA映射的P2M页表或哈希函数,找到对应的MA,再将它填充到真正在硬件上起作用的影子页表,而Guest页表无需变动。

 

页表写入法是一种半虚拟化,通过修改操作系统的代码,剥夺Guest OS的写入页表权力,所以VMM可直接将及其弟子写入到Guest OS的页表而实现页表虚

拟化。其细节是当客户机常见页表时,VMM也会创建一套相同的仪表,其中保存到时虚拟机物理地址和物理机地址的映射,在客户机对页表写操作时,VMM剥夺客户机操作系统的写操作权限,并对客户机操作系统页表进行更新,是Guest OS从它自己的页表中读取真实物理机地址。

 

扩展页表EPT是硬件辅助虚拟化,它在原有页表基础上又加了EPT页表,用来记录PV到MA的映射关系,VMM把EPT页表设置到CPU中,就无需VMM再干预了,转换时CPU自动查找两张页表来完成Guest到机器地址的转换,降低整个内存虚拟化的开销。

 

在网络虚拟化中,通过SR-IOV技术实现。SR-IOV主要解决pass-through只能被一台虚拟机访问的问题,其中pass-through模型是让虚拟机直接使用物理设备,使得网络性能最高。SR-IOV的实现需要CPU、芯片组和PIC等协同在硬件上实现,实现了虚拟化的“最后一公里”。支持SR-IOV的网卡可以在VMM里注册多个网卡,每个设备通过pass-through分配给虚拟子机。

 

在上篇我们介绍了不同厂家的各种虚拟化软件和技术,比如VMware,RedHat的QEMU-KVM,微软的hyper-V,还有Citrix的Xen。本篇介绍了虚拟化中的内存虚拟化和网络虚拟化的基础知识。需要注意的是,学习虚拟化就免不了和Linux打交道了,因为大部分时间操作的都是Linux系统,在此我对Linux基础薄弱的同学推荐《Linux就该这么学》这本书,在线阅读:www.linuxprobe.com.网站上有电子版可以阅读,如感觉到有所收获,别忘了买一本实体书支持一下作者。学无止境,希望和大家一起用知识充实自己。

标签:VMM,Guest,虚拟化,要学,虚拟机,页表,Linux,内存
From: https://www.cnblogs.com/cainiaoyige1/p/17338669.html

相关文章

  • 为什么要虚拟化
    前言如标题中的问题所提到的虚拟化,容器,Docker和K8s那样,我们不妨这样问:这些技术到底适用于哪些场景,有没有别的技术可以替代?这些技术的优劣在哪里?下面我将针对性地从以上几个问题的出发点,去和大家分享自己的答案。一、虚拟化—历史的选择我们现在提到虚拟化技术,一般会知道有5种:......
  • Linux磁盘LVM在线扩容
     LVM逻辑卷管理LVM是Linux系统用于对硬盘分区进行管理的一种机制,理论性较强,其创建初衷是为了解决硬盘设备在创建分区后不易修改分区大小的缺陷。尽管对传统的硬盘分区进行强制扩容或缩容从理论上来讲是可行的,但是却可能造成数据的丢失。而LVM技术是在硬盘分区和文件系统之间添加......
  • Linux 安装 Node Exporter
    1.下载安装cdsrcwgethttps://github.com/prometheus/node_exporter/releases/download/v1.5.0/node_exporter-1.5.0.linux-amd64.tar.gztarxfnode_exporter-1.5.0.linux-amd64.tar.gzmvnode_exporter-1.5.0.linux-amd64/node_exporter/usr/binuseradd-s/sbin/nologin......
  • linux创建指定大小的文件并查看
    转载自:https://www.shuzhiduo.com/A/Gkz10WM2dR/=============== 生成文件大小和实际占空间大小一样的文件ddif=/dev/zeroof=50M.filebs=1Mcount=50ddif=/dev/zeroof=20G.filebs=1Gcount=20bs=1M表示每一次读写1M数据,count=50表示读写50次,这样就指定了生成文件的......
  • Linux 编译安装 OpenSSH
    1.安装依赖yum-yinstallgccopenssl11openssl11-develpam-develzlib-devel2.设置编译FLAGexportCFLAGS=$(pkg-config--cflagslibssl11)exportLDFLAGS=$(pkg-config--libslibssl11)3.备份配置,删除系统自带软件包mv/etc/pam.d/sshd/etc/pam.d/sshd.bakrpm-e--n......
  • Linux 编译安装 Python3
    本文档适用Python3.9及以上版本。1.提前安装依赖yuminstall-ygccncurses-develgdbm-develxz-develsqlite-develtk-develuuid-develreadline-develbzip2-devellibffi-developenssl11openssl11-devel2.设置编译FLAGAWSAMI:exportCFLAGS=$(pkg-config--cflagsli......
  • linux环境C语言实现:h264与pcm封装成mp4视频格式
    前言H.264是压缩过的数据,PCM是原始数据,MP4是一种视频封装格式。实际H.264与PCM不能直接合成MP4格式,因为音频格式不对。这里需要中间对音频做一次压缩处理。基本流程为:将PCM音频数据压缩成AAC格式音频数据,再将AAC与H.264合成MP4视频格式。(一)PCM压缩为AAC格式直接上代码,接口函数......
  • linux环境C语言实现:h264与pcm封装成AVI格式
    ​前言拖了很久的AVI音视频封装实例,花了一天时间终于调完了,兼容性不是太好,但作为参考学习使用应该没有问题。RIFF和AVI以及WAV格式,可以参考前面的一些文章。这里详细介绍将一个H264视频流和一个2通道PCM音频流封装成一个AVI格式的视频文件。测试过可以在暴风,迅雷和VLC播放器上......
  • linux环境C语言实现:h265与pcm封装成AVI格式
    ​前言不知道是处于版权收费问题还是什么原因,H265现在也并没有非常广泛的被普及。将h265数据合成AVI的资料现在在网上也基本上没有。使用格式化工厂工具将h265数据封装成AVI格式,发现它在封装的时候其实是对数据进行了一个装换,转成了FMP4格式。正文因为是在嵌入式设备中使用,所......
  • linux设备树-设备树常用OF操作函数
    ----------------------------------------------------------------------------------------------------------------------------内核版本:linux5.2.8根文件系统:busybox1.25.0u-boot:2016.05-------------------------------------------------------------------------------......