虚拟化之内存(Memory)

一 内存的查看方式

  • free -k/m/h   
  • cat /proc/meminfo
  • dmesg |grep memory

free命令的实质是根据meminfo中的文件来提取信息

内存虚拟化

1.概念:由于物理MMU只能通过Host机的物理地址进行寻址,所以实现内存虚拟化,关键是需要将Guest机的虚拟地址GVA转换为HPA

2.内存虚拟化的作用:

  1. 提供给虚拟机一个从0地址开始的连续物理内存空间GPA
  2. 实现虚拟机之间有效隔离、调度及共享资源

3.术语介绍

  • GVA(Guest Virtual Address):客户机/虚拟机虚拟地址
  • GPA(Guest Physical Address):客户机/虚拟机物理地址
  • HPA(Host Physical Address):物理机物理地址

工作方式:GVA--GPA->HPA的转换,KVM引入一层新的地址空间GPA,该地址空间并不是真正的物理地址空间,它只是HOST主机虚拟地址空间在Guest地址空间上的一个映射

  1. 新的两种内存虚拟化方式
  • 影子页表  <软件实现:GVA到HPA的映射>,每个虚机都有一个影子页表
  • EPT/NPT   <硬件实现,产生出的EPT表>  

影子页表与传统的转换过程对比图:

EPT:intel的二代硬件虚拟化技术,针对内存管理单元MMU的虚拟化扩展。相比影子页面提高了内存虚拟化的性能。NPT是AMD的。

一个EPT页表=N个影子页表

  1. VPID和TLB
  • VPID虚拟处理器标识,提升实时迁移的效率,节省迁移开销,提高速度,降低延迟(就是标识某块物理内存属于哪台虚拟机
  • TLB旁路转换缓冲/页表缓冲,里面存放着页表文件(EPT表)

常用命令:

grep ept /proc/cpuinfo   查看cpu是否支持EPT

grep vpid /proc/cpuinfo  查看cpu是否支持vpid

cat /sys/module/kvm_intel/parameters/ept  显示Y则ept已开启

cat /sys/module/kvm_intel/parameters/vpid 显示Y则vpid已开启

modprobe kvm_intel ept=0,vpid=0  关闭ept/vpid  1为开启

  1. 其他
  • Linux中的格式化-->制作文件系统(i节点、block块4K)
  • 内存调用磁盘中的数据到自己的文件系统RAMFS中
  • 内存页是管理内存的单元,其大小4K

查看默认内存页大小:

getconf PAGESIZE ===> 4096(字节)=4K

三 内存技术--大页Huge Page

  1. 大页:将其设为2M则称为大页
  2. 内核2.6以上支持大页
  3. 对大页的管理方式为管理个数,因为每个页的大小固定为2M
  4. 大页的优势
  • 内存页的数量减少,节约页表所占用的空间,减少地址转换,提高内存访问性能
  • 地址转换信息一般保存在CPU缓存中,地址转换信息减少,CPU负载降低
  1. 大页的劣势
  • 不能Swap out
  • 不能使用ballooning 方式增长
  1. 为虚拟机开启大页

①查看当前系统的大页

cat /proc/meminfo |grep Huge

②开启大页<方式待商榷>

在主机中找到虚拟机的配置文件xml,添加hugepages=yes

③挂载hugetlbfs文件系统<默认系统已挂载>

如果未挂载,则需挂载:

mount  -t hugetlbfs hugetlbfs /dev/hugepages

④设置大页的数量

sysctl vm.nr_hugepages=500

⑤查看大页

四 内存超配

  1. 超配方式
  • 内存交换:用swap空间来弥补
  • 气球ballooning:通过virio_balloon驱动来实现宿主机Hypersion和客户机之间的协作
  • 页共享:通过KSM合并多个客户机进程使用的相同内存页

注:如果使用swap,就要对swap进行监控,最大使用率30%

  1. swap大小的设定
  • 2倍于真实内存,适用于内存小于2G的情况
  • 真实机大于2G的情况,内存大小+2G
  • Redhat官方给的方案:当内存超过16G,swap给8G,当swap不够再继续添加
  1. Swap的使用
  • 创建swap空间的对象:磁盘、分区、lv、dd出的文件
  • mkswap、swap on/off

五 Virsh常用的命令

virsh是KVM的管理工具,通过调用libvirt API来管理

  1. virt-manager图形化管理工具
  2. virt-top :top界面<只显示虚拟机所属进程>
  3. virsh list :查看运行的虚拟机
  4. virsh list --all : 查看所有的虚机
  5. virsh console 虚机名 :连接虚机
  6. Ctrl +]  退出虚机
  7. define xx.xml  声明虚拟机
  8. virsh start/stop/reboot 虚机名 :开启/关闭/重启虚机
  9. virsh suspend/resume 虚机名:挂起/恢复虚机

10.virsh autostart 虚机名 :子机随母机启动而启动

11. virsh destroy 虚机名 :删除虚机(在列表中删除)

 virsh undefine 虚机名:解除标记

执行上面两步才算彻底删除虚机

命令较多,此处就不一一列出,可help进行查看!

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

⭐每天一道leetcode:58.最后一个单词的长度(简单;istringstream;遍历查看)

⭐今日份题目 给你一个字符串 s&#xff0c;由若干单词组成&#xff0c;单词前后用一些空格字符隔开。返回字符串中 最后一个 单词的长度。 单词 是指仅由字母组成、不包含任何空格字符的最大子字符串。 示例1 输入&#xff1a;s "Hello World" 输出&#xff1a…

Ubuntu将c++编译成.so文件并测试

一、准备cpp和h文件 创建test.cpp 在cpp中定义相加的函数funcAdd&#xff0c;给出函数的细节代码 #include <iostream> using namespace std;int funcAdd(int x, int y) {return xy; }创建test.h 在h中声明定义的函数&#xff0c;不需要任何细节 #ifndef __TEST__ #…

Catf1agCTF-Web通关合集

本文相关的ctf平台链接&#xff1a;Catf1agCTF - 综合训练平台 WEB签到 查看源代码 flag倒叙了&#xff0c;可以使用下面这个 文本字符串倒序在线工具(ESJSON在线工具) flag&#xff1a; catf1ag{welcome_to_catf1agctf_!!!_gogogo_!!!} flag在哪呢&#xff1f; 查看源代…

1、MQ_介绍、优缺点、类型等

MQ介绍 1. MQ概述 MQ&#xff08;Message Queue&#xff09;&#xff1a;消息队列&#xff0c;是基础数据结构中FIFO&#xff08;first in first out&#xff09;的一种数据结构。一般用来解决流量削峰、应用解耦、异步处理等问题&#xff0c;实现高性能&#xff0c;高可用&a…

Error:java:JDK isn‘t specified for module “模块名称“

可能是创建模块后不小心删掉了.idea.或.idea出错 只要删除.idea&#xff0c;close project出去&#xff0c;重新进让idea自动下载

FL Studio2024中文正式版水果编曲软件(支持苹果M1处理器)

FL Studio 2024是一款功能强大的数字音频工作站&#xff0c;它具有多种功能和特点&#xff0c;使得音乐制作变得更加简单、高效和有趣。 首先&#xff0c;它支持多轨录音和编辑&#xff0c;用户可以同时处理多个音频轨道&#xff0c;进行复杂的音乐编排和混音。此外&#xff0…

蜘蛛池是什么意思,怎么生成蜘蛛池

蜘蛛池是由自然界中的蜘蛛群落构成的一个小生态系统&#xff0c;也是身处自然界中的游客们可以在风雨中体验到最贴近自然气息的地方。 点开我主页面 Baidu蜘蛛的作用&#xff1a; 引蜘蛛逐渐收录&#xff0c;降权引蜘蛛可以疗伤&#xff0c;排名/收录不稳定&#xff0c;没有收…

基于springboot+vue的善筹网众筹网站

博主主页&#xff1a;猫头鹰源码 博主简介&#xff1a;Java领域优质创作者、CSDN博客专家、阿里云专家博主、公司架构师、全网粉丝5万、专注Java技术领域和毕业设计项目实战&#xff0c;欢迎高校老师\讲师\同行交流合作 ​主要内容&#xff1a;毕业设计(Javaweb项目|小程序|Pyt…

Linux 开发工具 yum、git、gdb

目录 一、yum 1、软件包 2、rzsz 3、注意事项 4、查看软件包 5、安装软件 6、卸载软件 二、git操作 1、克隆三板斧 2、第一次使用会出现以下情况&#xff1a; 未配置用户名和邮箱&#xff1a; push后弹出提示 三、gdb使用 1、背景 2、使用方法 例一&#xff1a…

数据库:2024/3/6

作业1&#xff1a;使用C语言完成数据库的增删改 代码&#xff1a; #include <myhead.h>//定义添加员工信息函数 int Add_worker(sqlite3 *ppDb) {//准备sql语句printf("请输入要添加的员工信息:\n");//从终端获取员工信息char rbuf[128]"";fgets(r…

阿里云2核2G服务器多少钱?99元一年,轻量云是61元一年

阿里云2核2G服务器多少钱&#xff1f;99元一年&#xff0c;轻量云服务器是61元一年。2核2G服务器性能如何&#xff1f;性能很不错&#xff0c;不限制CPU性能&#xff0c;99元2核2G服务器是ECS经济型e实例&#xff0c;61元2核2G服务器是轻量应用服务器&#xff0c;都是3M公网带宽…

Facial Micro-Expressions:An Overview 阅读笔记

Proceedings of the IEEE上一篇微表情相关的综述&#xff0c;写的很详细。从心理学与计算机两个领域阐述了微表情生成的原因与相关算法&#xff0c;值得仔细研读。 摘要&#xff1a; Four main tasks in ME analysis arespecifically discussed,including ME spotting,ME recog…

【MySQL】数据库设计

目录 数据库设计基本任务 软件项目开发周期中数据库设计数据库设计的基本步骤解释需求分析需求分析的三个步骤&#xff1a;1.需求调查:2.分析数据字典内容定义数据的方法案例 3. 评审 概念结构设计概念模型概念结构设计E-R图概念模型组成元素&#xff1a;关系解释案例分析 逻辑…

获得店铺的所有商品API接口

使用淘宝淘口令接口的步骤通常包括&#xff1a; 注册成为淘宝开放平台的开发者&#xff1a;在淘宝开放平台网站上注册账号并完成认证。 创建应用以获取API密钥&#xff1a;在您的开发者控制台中创建一个应用&#xff0c;并获取用于API调用的密钥&#xff0c;如Client ID和Clie…

【QT】鼠标事件<QMouseEvent>

事件&#xff08;鼠标事件&#xff09; 功能单一的事件&#xff0c;鼠标进来是一个事件&#xff0c;鼠标出去是另外一个事件。 QT提供了很多的事件函数&#xff0c;我们通过重写这些事件函数就可以实现我们想要的效果。 事件函数都是虚函数 写一个子类&#xff0c;继承QLab…

Python 文件基础科普与文件打开技术详解【第117篇—文件打开技术】

Python 文件基础科普与文件打开技术详解 在Python编程中&#xff0c;文件操作是一项基础而重要的任务。无论是读取数据、写入文件还是进行其他文件处理操作&#xff0c;都需要对文件基础知识有一定的了解。在本文中&#xff0c;我们将首先介绍Python文件的基础概念&#xff0c…

Unity性能优化篇(九) 模型优化之LOD技术概述以及操作方法

LOD模型优化技术概述: 1.LOD技术可以根据摄像头远近来显示不同精度的模型(例如吃鸡游戏 随着跳伞高度 来显示下面树木以及建筑的模型精度) LOD模型优化技术操作方法: 可使用Unity自带的LOD Group组件&#xff0c;并根据项目的情况来调整该组件的属性。Untiy资源商店也有一些其…

机器学习——线性回归

机器学习——线性回归 文章目录 机器学习——线性回归一、什么是线性回归二、一元线性回归方程三、损失函数四、代码实现五、运用说明 一、什么是线性回归 线性回归是一种用来建立自变量和因变量之间线性关系的统计分析方法&#xff0c;也是机器学习中最常见、最容易理解的一个…

Flyway 9.22.3 + springboot3 + MySQL8.0+,简单使用

文章目录 flyway的依赖配置ieda 启动&#xff01;&#xff01;&#xff01; 关于这篇文章主要是自己在使用flyway时遇到的一些问题以及最终的解决方法 当然包括所有的配置&#xff0c;主要目的是记录一下防止下次使用的时候忘记 flyway的依赖 这里 springboot 3 具体版本不再描…

力扣经典 4. 寻找两个正序数组的中位数(多种语言解)

给定两个大小分别为 m 和 n 的正序&#xff08;从小到大&#xff09;数组 nums1 和 nums2。请你找出并返回这两个正序数组的 中位数 。算法的时间复杂度应该为 O(log (mn)) 。 目录 题目描述 知识点 解题思路 完整代码 Python Java C 题目描述 给定两个大小分别为 m 和…