Transparent Huge Pages相关概念及对mysql的影响

以前在弄tokudb的时候,在centos 6上面,须要执行 echo never > /sys/kernel/mm/redhat_transparent_hugepage/enabled关闭Transparent Huge Pages,当时未做深究,如今从新翻出来看看。mysql

说Transparent Huge Pages以前,首先说说Huge Pages。linux

通常而言,内存管理的最小块级单位叫作page,一个page是4096bytes,1M的内存会有256个page,1GB的话就会有256,000个page。CPU经过内置的内存管理单元维护着page表记录。算法

正常来讲,有两种方式来增长内存能够管理的内存大小:sql

1.增大硬件内存管理单元的大小。centos

2.增大page的大小。性能

第一个方法不是很现实,现代的硬件内存管理单元最多只支持数百到上千的page表记录,而且,对于数百万page表记录的维护算法必将与目前的数百条记录的维护算法大不相同才能保证性能,目前的解决办法是,若是一个程序所需内存page数量超过了内存管理单元的处理大小,操做系统会采用软件管理的内存管理单元,但这会使程序运行的速度变慢。优化

从redhat 6(centos,sl,ol)开始,操做系统开始支持 Huge Pages,也就是大页。spa

简单来讲, Huge Pages就是大小为2M到1GB的内存page,主要用于管理数千兆的内存,好比1GB的page对于1TB的内存来讲是相对比较合适的。操作系统

THP(Transparent Huge Pages)是一个使管理Huge Pages自动化的抽象层。进程

目前须要注意的是,因为实现方式问题,THP会形成内存锁影响性能,尤为是在程序不是专门为大内内存页开发的时候,简单介绍以下:

操做系统后台有一个叫作khugepaged的进程,它会一直扫描全部进程占用的内存,在可能的状况下会把4kpage交换为Huge Pages,在这个过程当中,对于操做的内存的各类分配活动都须要各类内存锁,直接影响程序的内存访问性能,而且,这个过程对于应用是透明的,在应用层面不可控制,对于专门为4k page优化的程序来讲,可能会形成随机的性能降低现象。

对于mysql的意义:

mysql有两个参数控制对于Huge Pages的使用。

large_page_size以及large_page,large_page_size没有意义,只是用于显示large_page占用的大小,large_page参数用于启用innodb的Huge Pages使用,而且支持linux的THP,能够避免THP运行对mysql进程的影响。

相关文章
相关标签/搜索