Linux 系统如何进行大页面配置

3/31/2018

本文内容

在 Linux 中,物理内存是以页为单位来管理的。页的大小为 4096 字节。 1MB 的内存能划分为 256 页; 1GB 则等同于 256000 页。 CPU 中有一个内置的内存管理单元,用于存储这些页的列表,每页都有一个对应的入口。在这种情况下,内存管理单元的大小决定了服务器能使用的最大内存大小。

如果为服务器分配的内存远大于现有内存管理单元能管理的量,则会造成内存的浪费。 CentOS 6 中为解决这个问题,使用了大页面的方式。简单来说,大页面即大小为 2MB 或者 1GB 的页。 2MB 的页适用于管理 GB 级单位的内存; 1GB 的页适用于 TB 级单位的内存。

手动去管理大页面较麻烦,往往需要更改代码。为了便于系统管理员和开发人员使用, CentOS 引入了 transparent huge pages (后续简称 THP )的概念。 THP 是一个抽象层,其自动化了创建,管理和使用大页面的大多数步骤。

大页面的配置

大页面配置需要连续的内存空间,因此在开机时就分配是最可靠的方式。配置大页面的参数有:

hugepages :在内核中定义了开机启动时就分配的永久大页面的数量。默认为 0,即不分配。只有当系统有足够的连续可用页时,分配才会成功。由该参数保留的页不能用于其他用途。

hugepagesz: 在内核中定义了开机启动时分配的大页面的大小。可选值为 2MB 和 1GB 。默认是 2MB 。

default_hugepagesz:在内核中定义了开机启动时分配的大页面的默认大小。

要调整页的尺寸,必须将配置以参数格式写入到启动命令中。如要为系统配置 10 个 1GB 的大页面,则启动命令中要包含: default_hugepagesz=1G hugepagesz=1G hugepages=10。配置 1GB 的大页面,CPU 特性需要支持 pdpe1gb ,系统内核也需要支持。

查看与大页面的相关的配置:

命令 sysctl -a | grep -I huge 输出:

命令 cat /proc/meminfo 输出:

若配置了不同大小的大页面,可以通过 /var/log/message 中的启动参数进行查看:

大页面对内存使用的影响

配置大页面后,系统在开机启动时会首选尝试在内存中找到并预留连续的大小为 hugepages * hugepagesz 的内存空间。如果内存空间不满足,则启动会报错 Kernel Panic, Out of Memory 等错误。

使用大页面后,能减少系统管理和访问页的时间;内核中的 swap 守护进程也不会管理大页面占用的这部分空间。合理设置大页面能减少内存操作的负担,减少访问页表造成性能瓶颈的可能性,从而提升系统性能。

如只配置了一个大小的大页面,可以通过 /proc/meminfo 中的 Hugepagesize 和 HugePages_Total 计算出大页面所在内存空间的大小。这部分空间会被算到已用的内存空间里,即使还未真正被使用。

因此,用户可能观察到下面现象:使用 free 命令查看已用内存很大,但 top 或者 ps 中看到 %mem 的使用总量加起来却很少。

命令 free -g 输出:

命令 top 输出, Shift+m 按内存使用排序:

命令 ps,查看进程内存用量:

ps -eo uid,pid,rss,trs,pmem,stat,cmd

备注

一般情况下,配置的大页面可能主要供特定的应用程序或服务使用,其他进程是无法共享这部分空间的(如 Oracle SGA )。

请根据系统物理内存和应用需求来设置合适的大小,避免大页面使用的浪费;以及造成其他进程因竞争剩余可用内存而出现内存溢出的错误,进而导致系统崩溃的现象。

参考文档:

linux调整大页内存,Linux 系统如何进行大页面配置相关推荐

  1. linux透明大页内存,Linux如何禁用透明大页

    环境: RHEL 6.5 + Oracle 11.2.0.4 RAC 1.确认透明大页是否开启 grep HugePage /proc/meminfo cat /sys/kernel/mm/redha ...

  2. linux 内存大页,Linux大页内存管理等---菜鸟初学

    1. 查看linux的内存情况: free -m 2. 查看是否开启大页的方法: cat /proc/meminfo |grep -i HugePage AnonHugePages: 276480 k ...

  3. DPDK 大页内存实现(二十二)

    上一篇文件介绍了linux内存管理以及大页内存的原理,有了原理的支撑,接下里分析dpdk大页内存源码就轻松了,才不会云里雾里不知道在说啥.所谓的dpdk大页内存的实现,说白了就是dpdk自己实现了一套 ...

  4. DPDK 大页内存原理(二十一)

    在分析dpdk大页内存的源码之前,有必要对linux内存管理的原理以及大页内存的原理有个了解,缺少这些底层基础知识,分析dpdk大页内存的源码将举步维艰.这篇文章详细介绍下linux内存管理以及大页内 ...

  5. MySQL 开启大页内存

    1. 开启大页内存 概述: 有些硬件或操作系统支持大于默认值的内存页(通常为4KB),这个时取决于底层硬件和操作系统.执行大页内存可以检查设备缓冲区的丢失.也可以改进性能. MySQL 使用Innod ...

  6. 大页内存与透明大页详解

    大页内存 大页内存(HugePages),有时也叫"大内存页"."内存大页"."标准大页".操作系统以内存页为单位管理内存,内存页的大小对系 ...

  7. 内存虚拟化、内存复用、大页内存作用及详解

    内存虚拟化.内存复用.大页内存作用及详解 1. 内存虚拟化 2. 内存复用 2.1. 内存共享 2.2. 内存置换 2.3. 内存气泡 3. 大页内存 3.1. 大页内存原理 3.2. 大页内存配置 ...

  8. 【内存】Linux 页表、大页与透明大页|大页内存

    目录 页表与MMU CPU访问的是什么地址(虚拟地址,物理地址)? MMU如何工作 MMU对内存的保护 多级页表 一. 内存映射与页表 1. 内存映射 2. 页表 4. 页表的简单工作原理 大页 什么 ...

  9. Linux 调优篇:虚拟化调优(hugepage 大页内存)* 叁

    一. 大页(HugePages)概念     Hugepage的引入 二. hugepages相关概念 三.Regular Pages 与 HugePages     a.Regular Pages ...

最新文章

  1. 计算机组成原理时序,计算机组成原理 中央处理器(CPU) 多级时序系统
  2. Specification排序orderby
  3. SQL数据分析概览——Hive、Impala、Spark SQL、Drill、HAWQ 以及Presto+druid
  4. 4-玩转数据结构-链表
  5. 转载:python3 安装pycrypto
  6. 统计学习方法之机器学习相关理论
  7. 【干货】就这一篇,解决90% 新手连接虚拟机的网络问题
  8. Spark On Yarn 运行模式(详细)
  9. 源码|详解分布式事务之 Seata-Client 原理及流程
  10. 英特尔中国祝贺高亭宇夺冠:至强CPU提供更精准训练支持
  11. Atitit onvif协议获取rtsp地址播放java语言attilx总结
  12. 三款好用的前端代码编辑器推荐
  13. 修改tomcat日志打印位置
  14. varchar2(数值)和varchar2(数值 char)的说明
  15. 【基础入门题048】骰子游戏(一)
  16. 数字万用表性能指标介绍
  17. Java开源文件病毒扫描_使用多种反病毒引擎扫描文件
  18. 什么样的企业要使用360评估?
  19. C#+ArcEgine开发(2)添加shp和lyr文件
  20. 几款炫酷的CSS代码样式

热门文章

  1. FullCalendar 四:FullCalendar应用——新建日程事件
  2. Linux: 传参数给alias
  3. php 保存远程图片到本地
  4. 图片旋转 rotate
  5. jQuery插件FontSizer实现自定义动态调整网页文字大小
  6. Python_排序算法实现
  7. 人工智障学习笔记——机器学习(8)K均值聚类
  8. jira7.12.1安装与破解
  9. 对象的使用 java 1613806439
  10. 对象数组快速掌拨 java 0913