[转帖]内存配置+大页 HugePage

内存,配置,hugepage · 浏览次数 : 0

小编点评

## Memory Configuration Example 1: **Client Machine:** * qemu-system-x86_64 /home/dudu/kvm/ubuntu14.04.img **Memory Information:** * `free` command: * `MemTotal: 111MB` (actual usable memory) * `MemAvailable: 1024MB` (available memory for other processes) **Memory Configuration Example 2: (2048M)** **Client Machine:** * qemu-system-x86_64 -m 2048M /home/dudu/kvm/ubuntu14.04.img **Memory Information:** * `MemTotal: 2001MB` (total memory) * `MemAvailable: 1969MB` (available memory for other processes) ## HugePage Configuration **Client Machine:** * `vm.nr_hugepages = 200` (set in `/proc/sys/vm/nr_hugepages`) **Memory Information after setting `vm.nr_hugepages`:** * `HugePages_Free: 116` (84 usable pages) * `HugePages_Rsvd: 84` (reserved memory for future allocation) ## Summary: * HugePage allows the client to use up to 200MB of memory, even though the host only provides 200M of physical memory. * This is achieved by keeping only the necessary pages in memory and using the rest as a cache for frequently used data. * HugePage also helps to reduce TLB load, Page Table space, and Page Table search load.

正文

内存配置

例1:不加内存参数,模拟一个默认大小内存的客户机系统。

qemu-system-x86_64 /home/dudu/kvm/ubuntu14.04.img

    在这里插入图片描述
    客户机中,可以通过两种常用的方式来查看内存信息,具体如下:
    在这里插入图片描述
    free命令通常用来查看内存的使用情况,“-m”参数是指内存大小以MB为单位来显示。在上面示例中,我们使用了默认大小的内存,值为128M,而根据上面输出可知总的内存为111MB,这个值比128MB小,这是因为free命令显示的内存是实际能够使用的内存,已经除去了内核执行文件占用内存和一些系统保留的内存。
    在这里插入图片描述
    在这里插入图片描述
    使用cat命令来查看/proc/meminfo看到的“MemTotal”大小是113704 kB,这个值比128M*1024=131071kB小,其原因也是因为此处显示的内存是实际能够使用的内存。
    例2:模拟一个内存大小为2048M的客户机系统。

    qemu-system-x86_64 -m 2048M /home/dudu/kvm/ubuntu14.04.img
    或 qemu-system-x86_64 -m 2G /home/dudu/kvm/ ubuntu14.04.img
    • 1

    在这里插入图片描述

    客户机中,查看内存信息,具体如下:
    在这里插入图片描述
    根据上面输出可知,可用的总内存为2001MB,这个值比2048MB小。

    大页 HugePage

    可以在宿主机中,通过以下操作让客户机使用HugePage,具体操作如下:
    (1)查看宿主机中内存页的大小
    通常情况下,内存页大小为4KB。
    在这里插入图片描述
    (2)查看宿主机中透明大页是否开启
    Ubuntu16.04中透明大页是默认开启状态。
    在这里插入图片描述
    (3)开启透明大页
    如果已开启,略过该步骤。
    在这里插入图片描述
    (4)查看宿主机中HugePage的大小
    通常情况下,宿主机中HugePage的大小是2048kB,即2MB。
    在这里插入图片描述

    HugePages_Total: Hugepage的页面数量
    HugePages_Free: 剩余的页面数量
    HugePages_Rsvd: 被分配预留但是还没有使用的page数目
    HugePages_Surp:HugePages_Total减去/proc/sys/vm/nr_hugepages中的值
    
    • 1
    • 2
    • 3
    • 4

    默认情况下,大页的数目为0,0表示透明大页未被配置使用。
    在这里插入图片描述
    (5)创建挂载点目录
    Ubuntu16.04中默认有此目录。如果有的话,该步骤省略。
    在这里插入图片描述
    (6)挂载大页
    内存只有被挂载了之后,才能被应用程序使用。到刚创建的hugepages目录下,挂载hugetlbfs文件系统。
    在这里插入图片描述
    (7)设置HugePage的数量
    使用sysctl(sysctl命令用于设置和显示在/proc/sys目录中的内核参数)命令设置vm.nr_hugepages,将大页个数设置为200(200 * 2M=400M,需要确保宿主机有足够可以分配的内存)。
    上面的方式是临时修改,永久修改可以使用另一个操作方法,在/etc/sysctl.conf添加如下配置:vm.nr_hugepages=200 。修改后,用命令sysctl -p 使得设置生效。
    在这里插入图片描述
    设置完毕后查看大页数量:
    在这里插入图片描述
    (8)启动客户机,并让其使用HugePage内存

    qemu-system-x86_64 -m 200M /home/dudu/kvm/ubuntu14.04.img -mem-path /dev/hugepages/

      在这里插入图片描述
      开启客户机时,客户机的内存大小要小于宿主机设置的大页hugepage的大小。(宿主机大页设置了200 * 2M=400M,客户机的内存为200M。)如果客户机设置的内存大小超出了宿主机的 hugepage,则会报以下错误:qemu-system-x86_64: unable to map backing store for guest RAM: Cannot allocate memory
      (9)再次查看宿主机中HugePage的使用情况
      在这里插入图片描述
      通过上述结果,可以看到HugePages_Free数量减少了,因为客户机使用了一定数量的HugePage。但是HugePages_Free的数量没有减少100个(100 * 2M=200M),这是因为刚启动客户机时并没有分配200MB内存。
      (10)使用“mem-prealloc”参数
      使用“-mem-prealloc”参数,会让meminfo文件中HugePages_Free数量的减少和分配给客户机的内存保持一致。

      qemu-system-x86_64 -m 168 /home/dudu/kvm/ubuntu14.04.img -mem-path /dev/hugepages/ -mem-prealloc

        在这里插入图片描述
        查看宿主机中HugePage的使用情况:
        在这里插入图片描述
        HugePages_Free的值为116,说明使用了200-116=84个大页,一共84 * 2=168M,这个值正好是分配给虚拟机的内存大小。
        (11)总结
        在linux环境中开启HugePage有很多好处,具体如下:

        • (1) 非Swap内存:当开启HugePage的时候,HugePage是不会Swap的;
        • (2) 减少TLB(Translation Look aside Buffer)负担:TLB是在CPU里面的一块缓冲区域,其中包括了部分PageTable内容。使用HugePage可以减少TLB工作负载;
        • (3) 减少Page Table空间负载:在PageTable管理中,每条Page记录是要占据64byte的空间。也就是说,如果一块50G的RAM,4k大小的PageTable要有80MB左右;
        • (4) 减少PageTable检索负载:更小的PageTable意味着更快的检索定位能力;
        • (5) 内存性能提升:Page数量减少和大小的增加,减少了管理过程的复杂性,进一步减少了瓶颈出现的概率。

        与[转帖]内存配置+大页 HugePage相似的内容:

        [转帖]内存配置+大页 HugePage

        内存配置 例1:不加内存参数,模拟一个默认大小内存的客户机系统。 qemu-system-x86_64 /home/dudu/kvm/ubuntu14.04.img 在客户机中,可以通过两种常用的方式来查看内存信息,具体如下: free命令通常用来查看内存的使用情况,“-m”参数是指内存大小以MB为

        [转帖]配置大页内存实施方案

        https://tool.4xseo.com/article/35670.html 如果系统性能稳定无异常,则不需要大的页面内存。HugePages_Free等于HugePages _ Total ... 展开 一、概述HugePages是通过使用大页内存来取代传统的4kb内存页面,使得管理虚拟地址

        [转帖]修改jmeter内存配置(win&mac&linux)

        目录 一、背景: 二、win环境下修改jmeter内存 三、mac&linux环境下修改jmeter内存 四、验证内存是否修改成功 一、背景: 在进行大数据、高并发压测的过程性,有时会遇上JMeter卡死现象,使得测试无法进行,查看日志显示:java.lang.OutOfMemoryError: J

        [转帖]Linux内存管理——大部分人没有掌握的shmall和shmmax参数

        https://zhuanlan.zhihu.com/p/551804053 内核中的 shmall 和 shmmax 参数 SHMMAX= 配置了最大的内存segment的大小 >这个设置的比SGA_MAX_SIZE大比较好。 SHMMIN= 最小的内存segment的大小 SHMMNI= 整个系

        [转帖]FIO 存储性能压测

        测试环境 3台服务器:ceph配置内外网分离,外网使用万兆线,内网使用千兆线,osd共21个。 1台客户端:安装fio工具、内核客户端,使用万兆线。 测试目的 针对fio工具中的iodepth(队列深度)和numjobs(线程数)参数,分析使用fio工具时,哪个参数对带宽值测试结果影响比较大。 测试

        [转帖]fio工具中的iodepth参数与numjobs参数-对测试结果的影响

        测试环境 3台服务器:ceph配置内外网分离,外网使用万兆线,内网使用千兆线,osd共21个。 1台客户端:安装fio工具、内核客户端,使用万兆线。 测试目的 针对fio工具中的iodepth(队列深度)和numjobs(线程数)参数,分析使用fio工具时,哪个参数对带宽值测试结果影响比较大。 测试

        [转帖]Linux 监测服务心跳、服务重启策略

        文章目录 前言背景一、curl服务可用验证二、服务探测脚本三、配置系统定时任务四、Linux特殊字符转义总结 前言 请各大网友尊重本人原创知识分享,谨记本人博客:南国以南i、 提示:以下是本篇文章正文内容,下面案例可供参考 背景 当服务假死情况下,导致服务不可用,一时间定位不到服务假死原因,可以采用

        [转帖]内存优化表MOT管理

        目录 1.MOT持久性 1.1 MOT日志记录:WAL重做日志 1.2 MOT日志类型 1.3 配置日志 1.4 MOT检查点 2.MOT恢复 3.MOT复制和高可用 4.MOT内存管理 5.MOT VACUUM清理 6.MOT统计 7.MOT监控 7.1 表和索引大小 7.2 MOT全局内存详情

        [转帖]一张图搞定redis内存优化及配置

        https://www.jianshu.com/p/3195663af83e Redis内存优化及配置.png Redis优化及配置 Redis所有的数据都在内存中,而内存又是非常宝贵的资源。常用的内存优化方案有如下几部分:一、配置优化二、缩减键值对象三、命令处理四、缓存淘汰方案 一、配置优化 Li

        [转帖]MySQL 内存泄露怎样检查

        MySQ使用内存上升90%!在运维过程中50%的几率,会碰到这样的问题。算是比较普遍的现象。 MySQL内存使用率过高,有诸多原因。普遍的情况是因为使用不当导致的,还有mysql本身的缺陷的导致的。到底是那方面的问题,那就需要一个一个进行排查。 下面介绍排查思路: 1.参数配置需要确认。是否内存设置