hugepages

就Linux应用程序而言,使用的都是虚拟地址,当应用程序读写一个指定的虚拟地址时,内存管理单元会自动进行虚拟地址到物理地址的转换。一个虚拟地址可以映射到多个物理地址,但当前映射到哪一个物理地址取决于当前的页表(Page Table,一个虚拟地址到物理地址的映射转换表)内容,页表存储在主存储器中,查询速度相对比较慢。为了提高地址转换性能,大多数体系架构都提供一个快速查找缓冲TLB(Translation Lookaside Buffer),TLB读写速度非常快,比如在X86体系架构上,TLB和普通的CPU CACHE并没有本质区别,只不过TLB专职用于缓存页表数据,而普通的CPU CACHE缓存实际的代码指令或数据。TLB缓冲了最近使用过的页表项,在进行虚拟地址到物理地址的转换时先查这个TLB缓冲,只有当查找TLB缓冲失败(TLB miss)后才再去查普通页表(好像有的架构是同时进行查找?)。当然,根据局部性原理,大多数情况下应该都是查找TLB缓冲命中(TLB hit)的,所以性能得以大大提升。这整个具体的页表查找与地址转换过程不是文本描述的重点,但我们需知道如下几点:

1,TLB缓冲能大大提升虚拟地址到物理地址的转换速度。
2,TLB缓冲大小有限,只能缓存一定量的页表项目(Entry)。
3,如果一个页越大,那么一个页表项目就能表示越多的地址空间,整个TLB缓冲命中的几率就越大。
在Linux平台上,页大小普遍为4K,但根据硬件架构的不同,Linux内核也支持更大的内存页,也就是本文要介绍的HugeTLB特性。

[root@localhost ~]# cat /proc/meminfo | grep Huge
HugePages_Total:       0
HugePages_Free:        0
HugePages_Rsvd:        0
HugePages_Surp:        0
Hugepagesize:       2048 kB
[root@localhost ~]#

HugePages_Total:系统当前总共拥有的HugePages数目。
HugePages_Free:系统当前总共拥有的空闲HugePages数目。
HugePages_Rsvd:系统当前总共保留的HugePages数目,更具体点就是指程序已经向系统申请,但是由于程序还没有实质的HugePages读写操作,因此系统尚未实际分配给程序的HugePages数目。
HugePages_Surp:指超过系统设定的常驻HugePages数目的数目。
Hugepagesize:每一页HugePages的大小。


[root@localhost ~]# cat /proc/sys/vm/nr_hugepages
0
[root@localhost ~]# cat /proc/sys/vm/nr_hugepages_mempolicy
0
[root@localhost ~]# cat /proc/sys/vm/nr_overcommit_hugepages
0
[root@localhost ~]#


[root@localhost ~]# echo 0 > /proc/sys/vm/nr_hugepages
[root@localhost ~]# echo 100 > /proc/sys/vm/nr_hugepages
[root@localhost ~]# cat /sys/devices/system/node/node*/meminfo | fgrep Huge
Node 0 HugePages_Total:    50
Node 0 HugePages_Free:     50
Node 0 HugePages_Surp:      0
Node 1 HugePages_Total:    50
Node 1 HugePages_Free:     50
Node 1 HugePages_Surp:      0
[root@localhost ~]#

 
[root@localhost ~]# echo 0 > /proc/sys/vm/nr_hugepages
[root@localhost ~]# numactl -m 0 echo 40 >/proc/sys/vm/nr_hugepages_mempolicy
[root@localhost ~]# cat /sys/devices/system/node/node*/meminfo | fgrep Huge
Node 0 HugePages_Total:    40
Node 0 HugePages_Free:     40
Node 0 HugePages_Surp:      0
Node 1 HugePages_Total:     0
Node 1 HugePages_Free:      0
Node 1 HugePages_Surp:      0
[root@localhost ~]# numactl -m 1 echo 60 >/proc/sys/vm/nr_hugepages_mempolicy
[root@localhost ~]# cat /sys/devices/system/node/node*/meminfo | fgrep Huge
Node 0 HugePages_Total:    40
Node 0 HugePages_Free:     40
Node 0 HugePages_Surp:      0
Node 1 HugePages_Total:    20
Node 1 HugePages_Free:     20
Node 1 HugePages_Surp:      0
[root@localhost ~]# echo 80 >/proc/sys/vm/nr_hugepages_mempolicy
[root@localhost ~]# cat /sys/devices/system/node/node*/meminfo | fgrep Huge
Node 0 HugePages_Total:    50
Node 0 HugePages_Free:     50
Node 0 HugePages_Surp:      0
Node 1 HugePages_Total:    30
Node 1 HugePages_Free:     30
Node 1 HugePages_Surp:      0
[root@localhost ~]# numactl -m 1 echo 100 >/proc/sys/vm/nr_hugepages
[root@localhost ~]# cat /sys/devices/system/node/node*/meminfo | fgrep Huge
Node 0 HugePages_Total:    60
Node 0 HugePages_Free:     60
Node 0 HugePages_Surp:      0
Node 1 HugePages_Total:    40
Node 1 HugePages_Free:     40
Node 1 HugePages_Surp:      0

另一个/proc接口:/proc/sys/vm/nr_overcommit_hugepages,表示程序申请HugePages可超过常驻HugePages数目的最大数目。

参考:

http://blog.csdn.net/cybertan/article/details/9035727


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值