暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

技术分享 | 浅谈一下大页

2331

一、Linux 大内存页特性

Linux 下的大页分为两种类型:标准大页(Huge Pages)和透明大页(Transparent Huge Pages)。
大页的产生:大多数操作系统采用了分段或分页的方式进行管理。分段是粗粒度的管理方式,而分页则是细粒度管理方式,分页方式可以避免内存空间的浪费。相应地,也就存在内存的物理地址与虚拟地址的概念。
通过前面这两种方式,CPU 必须把虚拟地址转换程物理内存地址才能真正访问内存。为了提高这个转换效率,CPU 会缓存最近的虚拟内存地址和物理内存地址的映射关系,并保存在一个由 CPU 维护的映射表中。为了尽量提高内存的访问速度,需要在映射表中保存尽量多的映射关系。
Linux 的内存管理采取的是分页存取机制,为了保证物理内存能得到充分的利用,内核会按照 LRU 算法在适当的时候将物理内存中不经常使用的内存页自动交换到虚拟内存中,而将经常使用的信息保留到物理内存。通常情况下,Linux 默认情况下每页是4K,这就意味着如果物理内存很大,则映射表的条目将会非常多,会影响 CPU 的检索效率。因为内存大小是固定的,为了减少映射表的条目,可采取的办法只有增加页的尺寸。
因此 Hugepage 便因此而来。也就是打破传统的小页面的内存管理方式,使用大页面2M,4M等。如此一来映射条目则明显减少。TLB缓存命中率将大大提高。

二、HugePages

1、概念介绍

1)HugePages 是从 Linux Kernel 2.6 后被引入的。目的是使用更大的内存页面(memory page size) 以适应越来越大的系统内存,让操作系统可以支持现代硬件架构的大页面容量功能。在 Linux 下,page size 默认是4K,如果使用 HugePages ,默认是2M;
2)page table 和 TLB :
page table 映射表:物理内存和 swap 的对应关系、访问内存是先读 page table 、根据表里的映射关系操作;
TLB:cpu cache 组件、缓存部分 page table 以提高转换速度;

2、配置 HugePages 优缺点

1)优点:
  • 不需要内存页交换;

  • 减轻快表压力;

  • 减轻换页表的负载;

  • 提高内存的性能,降低 CPU 负载;

2)缺点:传统大页很难手动管理, 而且通常需要对代码进行重大更改才能有效地使用。

3、HugePages 使用建议

1)如果您的系统经常碰到因为 swap 引发的性能问题,系统毫无疑问需要启用HugePage。
2)OS内存非常大的系统也需要启用HugePage。

4、使用 HugePages 注意事项:

如果未调整 HugePages ,可能会引发下面的问题:

  • 数据库性能低下;

  • 出现内存不足或者过度使用交换空间;

  • 数据库实例不能被启动;

  • 关键性系统服务故障;

5、使用情况与配置查看:

1)确认 HuagePage 是否配置:
cat /proc/sys/vm/nr_hugepages

2)查看大页的使用情况:

$ grep Huge /proc/meminfo
HugePages_Total: 150
HugePages_Free: 150
HugePages_Rsvd: 0
HugePages_Surp: 0
Hugepagesize: 2048 kB

6、HugePages 配置:

1)设置 memlock(内存锁):

vim /etc/security/limits.conf
在文件最后添加信息:
mysql soft memlock unlimited
mysql hard memlock unlimited

2)修改/etc/sysctl.conf:

vi /etc/sysctl.conf
添加/修改信息:
kernel.shmmax = 17179869184
kernel.shmall = 4194304

3)查看 mysql 用户的组信息:

id mysql

4)配置使用大页内存的用户组:

more /proc/sys/vm/hugetlb_shm_group
sysctl -w vm.hugetlb_shm_group=27

5)修改参数停止实例并重启生效:

vi /mysql/data/3306/my.cnf
[mysqld]
large-pages

6)验证 HugePages 配置:

cat /proc/meminfo

三、Transparent Huge Pages

1、介绍

透明大页(Transparent Huge Pages)缩写为THP,从RedHat 6,OEL 6,SLES 11 and UEK2 kernels 开始,系统缺省会启用 Transparent HugePages ,用来提高内存管理的性能。

2、Transparent Huge Pages 的使用建议

ORACLE 官方不建议使用 RedHat 6 、OEL 6 、SLES 11 and UEK2 kernels 时开启透明大页。在 Oracle Linux 6.5、RHEL Linux 6.5+ 版中,已删除 Transparent HugePages 。

3、Transparent Huge Pages 的优点

  • 可以使用 swap ,内存页默认是2M大小,需要使用 swap 的时候,内存被分割为4k大小;
  • 对用户透明,不需要用户做特殊配置;

  • 不需要依某种库文件;

4、使用情况与配置查看

1)查看透明大页是否启用了:

# cat /sys/kernel/mm/transparent_hugepage/enabled

2)使用情况监控:

# cd /sys/kernel/mm/transparent_hugepage/khugepaged
说明:
alloc_sleep_millisecs:多长时间整理一次碎片;
pages_collapsed 一个扫描周期被扫描的内存页数;
scan_sleep_millisecs:多长时间扫描一次。

5、关闭透明大页功能

1)临时关闭:

# echo never >> /sys/kernel/mm/transparent_hugepage/enabled
# echo never >> /sys/kernel/mm/transparent_hugepage/defrag

2)永久关闭:

在/etc/rc.local 文件中加入如下内容:

#!/bin/sh
#
# This script will be executed *after* all the other init scripts.
# You can put your own initialization stuff in here if you don't
# want to do the full Sys V style init stuff.
touch /var/lock/subsys/local
if test -f /sys/kernel/mm/transparent_hugepage/enabled; then
echo never > /sys/kernel/mm/transparent_hugepage/enabled
fi
if test -f /sys/kernel/mm/transparent_hugepage/defrag; then
echo never > /sys/kernel/mm/transparent_hugepage/defrag
fi

四、Huge Pages 和 Transparent Huge Pages 区别

这两者的区别在于大页的分配机制,标准大页管理是在系统启动时预先分配的,而透明大页管理则是动态分配的方式(在运行时由 khugepaged 进程动态的分配),可以实时配置,不需要重启就能生效配置。

说明:透明大页与传统 HugePages 联用会出现一些问题,导致性能问题和系统重启;ORACLE 强烈建议开启 HugePages 需要关闭 Transparent HugePages 。
本文关键字#MySQL调优# #HugePages#

文章推荐:

故障分析 | cassandra 集群数据故障转移

故障分析 | Cassandra 用户信息 list Error

故障分析 | Greenplum 数据状态异常处理

故障分析 | Greenplum 集群 standby 故障处理

转文至此。


以下是个人微信公众号,欢迎关注:


文章转载自戏说数据那点事,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论