虚拟化之内存(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进行查看!

  • 27
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
MemoryError是一种Python中的异常,它表示内存不足。当系统的内存资源不足以满足程序的内存需求时,就会引发MemoryError异常。\[2\]这可能是由于程序需要分配更多的内存空间,但系统无法提供足够的内存。当出现MemoryError时,Python会抛出异常并停止程序的执行。 解决MemoryError的方法有几种。首先,您可以尝试扩大虚拟内存。虚拟内存是计算机硬盘上的一部分空间,用作临时存储器。通过增加虚拟内存的大小,您可以为程序提供更多的内存空间来运行。这可以通过在操作系统设置中调整虚拟内存的大小来实现。\[1\] 另外,您还可以尝试关闭一些可能限制内存的软件。有些软件可能会占用大量的内存资源,导致其他程序无法获得足够的内存。通过关闭这些软件,您可以释放一些内存空间供其他程序使用。 如果您希望在程序中捕获MemoryError并记录它们,您可以使用try-except语句来捕获异常。在except块中,您可以使用traceback模块的format_exception函数来格式化MemoryError异常的信息。这样,您就可以将异常信息记录下来以供后续分析和调试。\[3\] 总之,当出现MemoryError时,您可以尝试扩大虚拟内存、关闭一些可能限制内存的软件,并使用try-except语句来捕获并记录异常信息。这些方法可以帮助您解决内存不足的问题。 #### 引用[.reference_title] - *1* [Python程序运行中报Memoryerror的解决方案](https://blog.csdn.net/y15520833229/article/details/130589639)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insert_down28v1,239^v3^insert_chatgpt"}} ] [.reference_item] - *2* *3* [如何记录python MemoryError(当我内存不足时)](https://blog.csdn.net/weixin_39907596/article/details/110503513)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insert_down28v1,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值