![](https://csdnimg.cn/release/download_crawler_static/4332316/bg1.jpg)
Linux Hugepages
Hugepages 是从 Linux kernal 2.6 后被引入的,其目的是使用更大的 memory page size 以适应越来越大
的系统内存。
在我上大学那会,买一条 64M 133Mhz 的内存(对,你没看错,64M)价格为 500 多人民币,而现在 4G 1600Mhz
的内存的价格也就 500 多。
计算机硬件的发展速度太快了,所以操作系统的一些配置也要相应的随之改变。
在 Linux 下,默认的 page size 大小为 4k。显然对于现在的 SGA 比较大的数据库系统来说,4k 的 page size
有点太小了。
我们来看看两者之间有什么区别
1. Page Table 大小
Page Table 是用来存放虚拟内存也和物理内存页对应关系的内存结构。因为 page size 较小,所以相应的改内
存结构也会比较大。
而 Huagepages 的常见 page size 为 2M,是 4k size 的 500 倍,所以可以大大减小 page table 的 size。
我们来看两个例子:
这是一个没有配置 Hugepage 的系统,系统内存 128G,pagetable 大小大约为 4G。
cat /proc/meminfo
MemTotal: 132086880 kB
PageTables: 4059612 kB
这是配置了 Hugepage 的系统,系统内存 96G, PageTable 大小仅为 78M
MemTotal: 98999880 kB
PageTables: 79916 kB
2. 大大提高了 CPU cache 中存放的 page table 所覆盖的内存大小,从而提高了 TLB 命中率
进程的虚拟内存地址段先连接到 page tables 然后再连接到物理内存。所以在访问内存时需要先访问 page
tables 得到虚拟内存和物理内存的映射关系,然后再访问物理内存。
CPU cache 中有一部分 TLB(Translation Lookaside Buffer)用来存放部分 page table 以提高这种装
换的速度。因为 page size 变大了,所以同样大小的 TLB,所覆盖的内存大小也变大了。提高了 TBL 命中率,也
就是提高了地址转换的速度。
3. 使用 Hugepages 的内存页是不会被交换出去的,永远常驻在内存中,所以也减少了内存也替换的额外开销
下面再说说在数据库服务器上使用 Hugepages 要注意的几点