虚拟化之内存(Memory)
一 内存的查看方式
- free -k/m/h
- cat /proc/meminfo
- dmesg |grep memory
free命令的实质是根据meminfo中的文件来提取信息
二 内存虚拟化
1.概念:由于物理MMU只能通过Host机的物理地址进行寻址,所以实现内存虚拟化,关键是需要将Guest机的虚拟地址GVA转换为HPA
2.内存虚拟化的作用:
- 提供给虚拟机一个从0地址开始的连续物理内存空间GPA
- 实现虚拟机之间有效隔离、调度及共享资源
3.术语介绍
- GVA(Guest Virtual Address):客户机/虚拟机虚拟地址
- GPA(Guest Physical Address):客户机/虚拟机物理地址
- HPA(Host Physical Address):物理机物理地址
工作方式:GVA--GPA->HPA的转换,KVM引入一层新的地址空间GPA,该地址空间并不是真正的物理地址空间,它只是HOST主机虚拟地址空间在Guest地址空间上的一个映射

- 新的两种内存虚拟化方式
- 影子页表 <软件实现:GVA到HPA的映射>,每个虚机都有一个影子页表
- EPT/NPT <硬件实现,产生出的EPT表>
影子页表与传统的转换过程对比图:

EPT:intel的二代硬件虚拟化技术,针对内存管理单元MMU的虚拟化扩展。相比影子页面提高了内存虚拟化的性能。NPT是AMD的。
一个EPT页表=N个影子页表
- 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为开启
- 其他
- Linux中的格式化-->制作文件系统(i节点、block块4K)
- 内存调用磁盘中的数据到自己的文件系统RAMFS中
- 内存页是管理内存的单元,其大小4K
查看默认内存页大小:
getconf PAGESIZE ===> 4096(字节)=4K
三 内存技术--大页Huge Page
- 大页:将其设为2M则称为大页
- 内核2.6以上支持大页
- 对大页的管理方式为管理个数,因为每个页的大小固定为2M
- 大页的优势:
- 内存页的数量减少,节约页表所占用的空间,减少地址转换,提高内存访问性能
- 地址转换信息一般保存在CPU缓存中,地址转换信息减少,CPU负载降低
- 大页的劣势:
- 不能Swap out
- 不能使用ballooning 方式增长
- 为虚拟机开启大页
①查看当前系统的大页
cat /proc/meminfo |grep Huge

②开启大页<方式待商榷>
在主机中找到虚拟机的配置文件xml,添加hugepages=yes
③挂载hugetlbfs文件系统<默认系统已挂载>

如果未挂载,则需挂载:
mount -t hugetlbfs hugetlbfs /dev/hugepages
④设置大页的数量
sysctl vm.nr_hugepages=500
⑤查看大页

四 内存超配
- 超配方式
- 内存交换:用swap空间来弥补
- 气球ballooning:通过virio_balloon驱动来实现宿主机Hypersion和客户机之间的协作
- 页共享:通过KSM合并多个客户机进程使用的相同内存页
注:如果使用swap,就要对swap进行监控,最大使用率30%
- swap大小的设定
- 2倍于真实内存,适用于内存小于2G的情况
- 真实机大于2G的情况,内存大小+2G
- Redhat官方给的方案:当内存超过16G,swap给8G,当swap不够再继续添加
- Swap的使用
- 创建swap空间的对象:磁盘、分区、lv、dd出的文件
- mkswap、swap on/off
五 Virsh常用的命令
virsh是KVM的管理工具,通过调用libvirt API来管理
- virt-manager图形化管理工具
- virt-top :top界面<只显示虚拟机所属进程>
- virsh list :查看运行的虚拟机
- virsh list --all : 查看所有的虚机
- virsh console 虚机名 :连接虚机
- Ctrl +] 退出虚机
- define xx.xml 声明虚拟机
- virsh start/stop/reboot 虚机名 :开启/关闭/重启虚机
- virsh suspend/resume 虚机名:挂起/恢复虚机
10.virsh autostart 虚机名 :子机随母机启动而启动
11. virsh destroy 虚机名 :删除虚机(在列表中删除)
virsh undefine 虚机名:解除标记
执行上面两步才算彻底删除虚机
命令较多,此处就不一一列出,可help进行查看!
相关文章:
虚拟化之内存(Memory)
一 内存的查看方式 free -k/m/h cat /proc/meminfodmesg |grep memory free命令的实质是根据meminfo中的文件来提取信息 二 内存虚拟化 1.概念:由于物理MMU只能通过Host机的物理地址进行寻址,所以实现内存虚拟化,关键是需要将Guest机的…...
ospf虚链路实验简述
1、ospf虚链路实验简述 ospf虚链路配置 为解决普通区域不在骨干区域旁,通过配置Vlink-peer实现不同区域网络设备之间建立逻辑上的连接。 实验拓扑图 r1: sys sysname r1 undo info enable int loopb 0 ip add 1.1.1.1 32 ip add 200.200.200.200 32 quit int e0/0/…...
全网最细,web自动化测试实战场景(滚动元素的滚动操作)直接上干g货......
前言 使用 selenium 进行 web 自动化测试对我们来说是个常规操作。用了很多次后,我们经常会抱怨 selenium 封装的操作实在是太少了。 比如说 selenium 没有对页面的滚动提供丰富 API , 有的只有一个孤零零的 location_once_scrolled_into_view 方法,把…...
Java特性之设计模式【过滤器模式】
一、过滤器模式 概述 过滤器模式(Filter Pattern)或标准模式(Criteria Pattern)是一种设计模式,这种模式允许开发人员使用不同的标准来过滤一组对象,通过逻辑运算以解耦的方式把它们连接起来。这种类型的…...
Linux设备模型(十) - bus/device/device_driver/class
四,驱动的注册 1,struct device_driver结构体 /** * struct device_driver - The basic device driver structure * name: Name of the device driver. * bus: The bus which the device of this driver belongs to. * owner: The module own…...
性能问题分析排查思路之机器(3)
本文是性能问题分析排查思路的展开内容之一,第2篇,主要分为日志1期,机器4期、环境2期共7篇系列文章,本期是第三篇,讲机器(硬件)的网络方面的排查方法和最佳实践。 主要内容如图所示:…...
PostgreSQL安装教程
系统环境 下载压缩包 下载压缩包 解压压缩包 查看解压文件 编译安装 编译 安装 用户权限和环境变量设置 创建用户 创建数据目录和日志目录 设置权限 设置环境变量 初始化数据库 数据库访问控制配置文件 postgresql.conf pg_hba.conf PostgreSQL启动与关闭 手…...
SLAM基础知识:前端和后端
在SLAM中前端和后端是被经常提到的一个概念。但是对于前端和后端的理解有着不同的看法,我的理解是: 前端:前端负责处理传感器数据,特征提取,进行状态估计和地图构建的初步步骤。 后端:后端接受不同时刻的里…...
一文彻底搞懂从输入URL到显示页面的全过程
简略版: 用户输入URL后,浏览器经过URL解析、DNS解析、建立TCP连接、发起HTTP请求、服务器处理请求、接收响应并渲染页面、关闭TCP连接等步骤,最终将页面显示给用户。 详细版: URL解析:浏览器根据用户输入的URL&#x…...
好书安利:《大模型应用开发极简入门:基于GPT-4和ChatGPT》这本书太好了!150页就能让你上手大模型应用开发
文章目录 前言一、ChatGPT 出现,一切都变得不一样了二、蛇尾书特色三、蛇尾书思维导图四、作译者简介五、业内专家书评总结 前言 如果问个问题:有哪些产品曾经创造了伟大的奇迹?ChatGPT 应该会当之无愧入选。仅仅发布 5 天,Chat…...
力扣题库第4题:移动零
题目内容: 给定一个数组 nums,编写一个函数将所有 0 移动到数组的末尾,同时保持非零元素的相对顺序。 请注意 ,必须在不复制数组的情况下原地对数组进行操作。 示例 : 输入: nums [0,1,0,3,12] 输出: [1,3,12,0,0] 答案&…...
Java解决IP地址无效化
Java解决IP地址无效化 01 题目 给你一个有效的 IPv4 地址 address,返回这个 IP 地址的无效化版本。 所谓无效化 IP 地址,其实就是用 "[.]" 代替了每个 "."。 示例 1: 输入:address "1.1.1.1" 输出…...
[数据结构初阶]队列
鼠鼠我呀,今天写一个基于C语言关于队列的博客,如果有兴趣的读者老爷可以抽空看看,很希望的到各位老爷观点和点评捏! 在此今日,也祝各位小姐姐女生节快乐啊,愿笑容依旧灿烂如初阳,勇气与童真永不…...
MySQL学习Day27——MySQL事务日志
事务的隔离性由锁机制实现,而事务的原子性、一致性和持久性由事务的redo日志和undo日志来保证。其中REDO LOG称为重做日志,提供再写入操作,恢复提交事务修改的页操作,用来保证事务的持久性,redo log是存储引擎层生成的日志,记录的是物理级别上的页修改操作,主要为了保证…...
ETAS工具链ISOLAR-AB重要概念,RTE配置,ECU抽取
RTE配置界面,包含ECU抽取关联 首次配置RTE,出现需要勾选的抽取EXTRACT 创建System System制作SWC到ECU的Mapping System制作System Data 的Mapping...
蓝桥杯倒计时 43天 - 前缀和
思路:如果用n^2复杂度暴力会超时。nlogn 可以,利用前缀和化简,提前存储某个位置前的每个石头搬运到该位置和每个石头后搬运到该位置的前缀和On最后直接输出 On。排序花 nlogn #include<bits/stdc.h> using namespace std; typedef pai…...
【Web - 框架 - Vue】随笔 - Vue的简单使用(01) - 快速上手
【Web - 框架 - Vue】随笔 - Vue的简单使用(01) - 快速上手 Vue模板代码 代码 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><title>模板</title> </head> <body> <div></di…...
【简说八股】Redisson的守护线程是怎么实现的
Redisson Redisson 是一个 Java 语言实现的 Redis SDK 客户端,在使用分布式锁时,它就采用了「自动续期」的方案来避免锁过期,这个守护线程我们一般也把它叫做「看门狗」线程。 Redission是一个在Java环境中使用的开源的分布式缓存和分布式锁实…...
WPS/Office 好用的Word插件-查找替换
例如:一片文档:…………泰山…………泰(少打了山字)………… 要是把“泰”查找替换为“泰山”,就会把前面的“泰山”变成“泰山山”,这种问题除了再把“泰山山”查找替换为“泰山”,有没有更简单…...
Go 简单设计和实现可扩展、高性能的泛型本地缓存
相信大家对于缓存这个词都不陌生,但凡追求高性能的业务场景,一般都会使用缓存,它可以提高数据的检索速度,减少数据库的压力。缓存大体分为两类:本地缓存和分布式缓存(如 Redis)。本地缓存适用于…...
Draft-classic:云原生开发中Kubernetes部署的快速原型工具
1. 项目概述:从零到一的云原生应用部署加速器 如果你和我一样,长期在云原生和Kubernetes领域摸爬滚打,一定经历过这样的场景:一个应用的核心代码逻辑早已写完,但为了让它能在Kubernetes集群里跑起来,你不得…...
离线语音模块在塔扇智能化中的集成与应用实践
1. 项目概述:当塔扇“听懂”你的话 家里的塔式风扇,你是不是也经常遇到这样的场景:晚上躺在床上,风扇对着吹有点冷,想调小一档或者关掉,结果发现遥控器不知道被塞到哪个沙发缝里了,只能挣扎着爬…...
连接池为什么重要?从一次“数据库没打满,但应用越来越慢”的事故说起
连接池为什么重要?从一次“数据库没打满,但应用越来越慢”的事故说起 在很多后端系统里,数据库往往是最容易被怀疑的对象。 接口慢了,第一反应是: “是不是数据库扛不住了?” 订单页卡住了,第一…...
NotebookLM隐私策略更新暗藏玄机:2024年Q2 TOS第4.7.2条修订背后,3类原始文档正被静默提取用于模型微调?
更多请点击: https://intelliparadigm.com 第一章:NotebookLM隐私数据安全 NotebookLM 是 Google 推出的基于用户上传文档构建个性化 AI 助手的工具,其核心优势在于“本地文档理解”,但所有文档均需上传至 Google 云端处理。这意…...
告别Xilinx思维:用Microsemi Libero为SmartFusion FPGA创建你的第一个工程(附资源清单)
告别Xilinx思维:用Microsemi Libero为SmartFusion FPGA创建你的第一个工程(附资源清单) 当习惯了Xilinx Vivado或Intel Quartus的工程师第一次打开Microsemi Libero时,那种感觉就像突然被扔进了一个陌生的城市——所有的路标都似…...
Swagger2Word终极指南:3种方法实现API文档自动化转换
Swagger2Word终极指南:3种方法实现API文档自动化转换 【免费下载链接】swagger2word 项目地址: https://gitcode.com/gh_mirrors/swa/swagger2word 还在为手动编写API文档而烦恼吗?Swagger2Word为你提供了一站式自动化解决方案,将Swa…...
Onekey:重构Steam Depot清单下载流程的现代化解决方案
Onekey:重构Steam Depot清单下载流程的现代化解决方案 【免费下载链接】Onekey Onekey Steam Depot Manifest Downloader 项目地址: https://gitcode.com/gh_mirrors/one/Onekey Onekey作为一款专为Steam Depot清单设计的自动化下载工具,通过其创…...
解密VideoDownloadHelper:开源浏览器插件的智能视频提取技术
解密VideoDownloadHelper:开源浏览器插件的智能视频提取技术 【免费下载链接】VideoDownloadHelper Chrome Extension to Help Download Video for Some Video Sites. 项目地址: https://gitcode.com/gh_mirrors/vi/VideoDownloadHelper 当你在浏览微博、秒拍…...
基于WebSocket的机械爪远程控制桥接系统设计与实战
1. 项目概述:一个连接物理世界与数字世界的“机械爪”远程控制桥最近在捣鼓一个挺有意思的开源项目,叫lucas-jo/openclaw-bridge-remote。光看名字,你可能觉得这又是一个关于机器人或者机械臂的遥控项目,但实际深入进去࿰…...
CircuitPython REPL与库管理:嵌入式开发的效率利器
1. CircuitPython REPL:你的嵌入式开发“瑞士军刀” 如果你玩过Arduino,肯定对“上传-编译-看结果”这个循环不陌生。每次改一行代码,都得重新编译、上传,然后盯着串口看输出,效率低得让人抓狂。CircuitPython带来的R…...
