巨页内存与Qemu/KVM虚拟化内存优化

这篇具有很好参考价值的文章主要介绍了巨页内存与Qemu/KVM虚拟化内存优化。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

前言

在虚拟化环境中,需要对虚拟机的优化,其中包括在某些情况下利用巨页内存进行内存的优化以提高虚拟机性能。那么什么是巨页内存?巨页内存有什么好处?Qemu/KVM虚拟化环境下如何使用巨页内存?本文将对这几个问题进行阐述。

从分页式内存管理说起

对于内存管理,大多数现代操作系统都采用分页式的内存管理方式。
大页内存优缺点,虚拟化,linux,架构,系统架构,运维
依图,CPU进行内存访问大体流程:

  1. CPU将虚拟地址给MMU硬件
  2. 由MMU硬件将虚拟地址翻译成实际的物理地址

具体的数据流是这样的:

a. 虚拟地址中的p为页表地址的索引部分,d为页内偏移,p作为MMU里面Page Table Walk Unit的输入;
b. Page Table Walk Unit依据p从Page中进行查找;
c. 获得对应的物理frame number;
d. 依据frame number获得实际物理地址页的起始地址;
e. 依据页内偏移d读取对应的内存的数据。

由于Page walk是个比较耗时的过程:
大页内存优缺点,虚拟化,linux,架构,系统架构,运维
MMU需要根据各级页表索引逐级查询。所以MMU内部引入TLB,将查询过的地址映射记录到TLB,这样对于已经查询过的页表,可以避免重复查询。
大页内存优缺点,虚拟化,linux,架构,系统架构,运维当然TLB的大小也是有限制的,所以在TLB还没有热身或者TLB被填满后根据某些规则将某些TLB给清除掉,所以会产生TLB miss。产生TLB miss后就依旧需要进行一次正常的Page Walk。

基于TLB的内存访问的数据流是这样的:

a. 虚拟地址中的p为页表地址的索引部分,d为页内偏移,MMU先依据P去TLB进行查询;
b. 如果查询到,则为TLB hit,通过查询得到的‘f+d’就可以直接访问内存;
c. 如果没有查询到,则为TLB miss;
d. Page Table Walk Unit依据p从Page中进行查找
e. 获得对应的物理frame number;
f. 依据frame number获得实际物理地址页的起始地址;
g. 依据页内偏移d读取对应的内存的数据。

什么是巨页内存

普通内存页为4K大小。巨页则是远远大于4K的页面,巨页的大小取决于所使用的操作系统的内核版本以及不同的硬件平台,一般最小的巨页也有2M。
大页内存优缺点,虚拟化,linux,架构,系统架构,运维

巨页内存的优缺点

巨页带来的优点:

  1. 降低TLB miss的概率: 拿普通的4KB页面和2MB的大页相比,都是使用一条页表项,能cover的内存大小却差了511倍,所以更多的使用大页能大大减少系统中页表项的数量,再加上TLB cache大小固定且有限,再再加上程序访问的地址的局部性原理,TLB miss的概率就下来了。
  2. 降低walk page table的长度: 由于大页的页表级数(PGD PUD PMD)比普通页面级数(PGD PUD PMD PTE)小1,所以在走表时会高效一些。(以普通页面是四级页表为例)。

巨页也有缺点:

  1. 可能需要对应用程序进行改造:对于传统巨页,必须使用特定的方式使用。详情参考下面巨页内存的类型及使用方式。
  2. 可能导致内存浪费:如果程序使用内存小,却申请了大页内存,会造成内存浪费,因为内存分配最小单位是页。

巨页内存的类型

  1. 传统巨页: 是指在系统中提前预留巨页,用户必须显式地通过hugetlbfs文件系统实现的mmap底层接口或者通过libhugetlbfs.so的库指定使用巨页。
  2. 透明巨页: 是指系统无须提前预留巨页,无须提前准备,进程分配内存在系统使能透明巨页策略的情况下,会自动默认优先使用巨页,用户无法觉察。

什么情况下使用巨页内存?

是否开启巨页内存需要根据工作负载的类型来决定:通常应用对内存需求较大时,可以考虑开启大内存分页。比如一个搜索引擎,需要大量在内存中的索引。有时候应用对内存的需求是隐性的。比如有的机器用来抗高并发访问,虽然平时对内存使用不高,但是当高并发到来时,应用对内存的需求自然就上去了。虽然每个并发请求需要的内存都不大, 但是总量上去了,需求总量也会随之提高。这种情况下,你也可以考虑开启大内存分页。

如果在虚拟机内有对于内存访问密集型的应用,在KVM客户机中使用huge page是可以较明显地提高客户机性能。

Qemu/KVM虚拟化如何使用巨页内存

  1. 如果是透明巨页,仅需要对Linux的host进行配置就行了,虚拟机部分自然会使用透明巨页。可以参考透明大页进行配置。
  2. 如果是传统巨页,分两种情况:
    a. 使用libvirt方式进行虚拟机管理的话,参考通过配置透明大页,提高kvm的性能进行配置。
    b. 使用命令行启动的话,参考KVM内存管理(五)—— hugepage进行配置。

依据KVM内存管理(七)—— 内存页/大页/透明大页 Stream 数据对比,使用传统巨页比使用透明巨页,虚拟机的性能会更好一点。

巨页引起的问题分析

如果程序内存占用大,TLB的miss又很多的情况下,可以使用perf工具进行分析,看是否申请了巨页却没有使用。比如查看TLB的miss多少:

perf record -e dTLB-loads -e faults -p pid
perf report

具体参考坑爹的大页内存。

虚拟化环境下利用巨页优化内存的例子

利用巨页内存加速虚拟机启动速度,请参考QEMU VFIO 内存优化探索与实践。文章来源地址https://www.toymoban.com/news/detail-723014.html

参考链接

  1. TLB原理
  2. Linux Memory Management
  3. 一文读懂 HugePages(大内存页)的原理
  4. Linux内存管理:大页内存原理
  5. 坑爹的大页内存
  6. KVM内存管理(七)—— 内存页/大页/透明大页 Stream 数据对比
  7. QEMU VFIO 内存优化探索与实践
  8. 通过配置透明大页,提高kvm的性能
  9. KVM内存管理(五)—— hugepage
  10. Linux内存管理之MMU的过程
  11. CPU通过MMU访问内存
  12. 透明大页

到了这里,关于巨页内存与Qemu/KVM虚拟化内存优化的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【KVM虚拟化】· KVM中的网络

      目录 🍎虚拟机的网络模式 🍒网络配置文件 🍒virsh查看命令 🍎基于NAT的虚拟网络 🍎基于网桥的虚拟网络 🍎基于隔离的虚拟网络     🦐博客主页:大虾好吃吗的博客     🦐专栏地址:KVM虚拟化专栏 基于NAT(Network Address Translation)的虚拟网络 基于网桥(Bridge)的虚拟

    2024年02月06日
    浏览(68)
  • kvm虚拟化

    虚拟化是云计算的基础。简单的说,虚拟化使得在一台物理的服务器上可以跑多台虚拟机,虚拟机共享物理机的 CPU、内存、IO 硬件资源,但逻辑上虚拟机之间是相互隔离的。 物理机我们一般称为宿主机(Host),宿主机上面的虚拟机称为客户机(Guest)。 那么 Host 是如何将自

    2024年01月17日
    浏览(57)
  • kvm网络虚拟化介绍

    在QEMU中,主要给出了客户机提供了4种不同的网络配置方案: 1、基于网桥(Bridge)的虚拟化网卡模式 2、基于NAT的虚拟网络模式 3、QEMU内置的用户网络模式 4、直接分配网络设置模式 网桥和NAT是基于linux-bridge实现的软件虚拟网络模式,QEMU是QEMU软件虚拟的网络模式,第四种网络模

    2024年02月14日
    浏览(54)
  • 【KVM虚拟化环境部署】

    1、装系统时手动选择安装 2、CentOS 7 最小化安装 安装好CentOS 7后,去设置里面点击处理器,将右边虚拟化引擎勾上 添加一块硬盘 分区并格式化 创建虚拟机,本例使用iso镜像 选择镜像路径

    2024年02月12日
    浏览(44)
  • 什么是KVM虚拟化

    维基百科关于虚拟化的定义是:“In computing,virtualization refers to the act of creating a virtual(rather than actual)version of something,including virtual computer hardware platforms,storage devices,and computer network resources。”(在计算机领域,虚拟化指 创建某事物的虚拟(而非实际)版本,包括虚拟的

    2023年04月08日
    浏览(48)
  • KVM虚拟化ubuntu

    KVM(Kernel-based Virtual Machine)是一种基于Linux内核的虚拟化技术,它将Linux内核作为虚拟机的底层操作系统,利用硬件虚拟化支持创建和管理虚拟机。KVM虚拟化技术被广泛应用于云计算、虚拟化服务器、虚拟化桌面等场景。 KVM虚拟化技术的主要特点包括: 1.硬件虚拟化支持:

    2024年02月10日
    浏览(45)
  • 【KVM虚拟化】· 图形化KVM安装linux

    目录 🍁虚拟化技术 🍂KVM的整体结构 🍂KVM 的功能列表 🍂KVM 工具集合 🍁安装kvm虚拟化功能 🍁创建虚拟机    🦐博客主页:大虾好吃吗的博客    🦐专栏地址:KVM虚拟化专栏 全虚拟化 半虚拟化 硬件辅助的虚拟化 从GUI到Linux内核,包括以下五个组件: virt-manager一个用来

    2024年02月01日
    浏览(49)
  • 【KVM虚拟化】· 命令行KVM安装linux

    目录 🍁基础本环境配置 🍁添加lvm卷 🍁qemu-img创建磁盘文件 🍂创建raw格式 🍂创建虚拟机 🍂转换格式为qcow2 🍁virt-install命令参数 🍁案例操作    🦐博客主页:大虾好吃吗的博客    🦐专栏地址:KVM虚拟化专栏 最小化安装centos系统,勾选虚拟化功能。   修改网卡信息,

    2024年02月04日
    浏览(52)
  • Ubuntu 安装 KVM 虚拟化

    KVM 是 Linux 内核中一个基于 hypervisor 的虚拟化模块,它允许用户在 Linux 操作系统上创建和管理虚拟机。 如果机器的CPU不支持硬件虚拟化扩展,是无法使用KVM(基于内核的虚拟机)直接创建和运行虚拟机的。此时最多只能使用QEMU的完全软件仿真模式来运行虚拟机,但是性能会极度

    2024年04月29日
    浏览(31)
  • 虚拟化技术KVM入门学习

      虚拟化[Virtualization]技术最早出现在 20 世纪 60 年代的 IBM ⼤型机系统,在70年代的 System370 系列中逐渐流⾏起来,这些机器通过⼀种叫虚拟机监控器[Virtual Machine Monitor,VMM]的程序在物理硬件之上⽣成许多可以运⾏独⽴操作系统软件的虚拟机[Virtual Machine]实例。随着近年多核

    2024年02月10日
    浏览(56)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包