HugePage简介和KVM中使用HugePage

11 篇文章 0 订阅
4 篇文章 0 订阅
KVM测试中,有一项是要测试huge page的使用,所以对Huge Page(巨页)做了一些了解,结合网上的一些资料进行总结一下。
现在,有许多的处理器架构都支持多种的 内存 页大小,其中就包括比一般的page size大很多的huge page。就目前来说,尽管在个人电脑中基本都实现了对huge page的支持,然而,huge page的使用主要还是在一些大型服务器和计算机集群中使用。
1.查看huge page的size是多大? Linux中,可以通过 cat /pro/meminfo | grep Hugepagesize  来查看。
  通常情况下,是2048kB即2MB (不同的处理器架构,可能不一样)
  另外,一般的内存页大小为4kB,可以通过命令:getconf PAGE_SIZE 来查看,一般是4096Byte
  也可以通过C程序调用sysconf()函数来查询,示例代码如下
#include <stdio.h>
#include <unistd.h> /* sysconf(3) */

int main(void) {
        printf("The page size for this system is %ld bytes.\n",
               sysconf(_SC_PAGESIZE)); /* _SC_PAGE_SIZE is OK too. */

        return 0;
}

2.huge page的相关信息:cat /proc/meminfo | grep Huge
HugePages_Total:    1024
HugePages_Free:     1024
HugePages_Rsvd:        0
HugePages_Surp:        0
Hugepagesize:       2048 kB
  解释一下显示输出中的几个参数的意义吧。
  HugePages_Total: Hugepage的页面数量
  HugePages_Free: 剩余的页面数量
  HugePages_Rsvd: 被分配预留但是还没有使用的page数目
 
HugePages_Surp:HugePages_Total减去/proc/sys/vm/nr_hugepages中的值(我对这个理解也不很清楚)。
  Hugepagesize: 每单位数量大小
3.设置了多少的huge page,free内存就会被使用多少。
  比如:我使用sysctl vm.nr_hugepages=1024 之后,free命令可以看到free的内存会减少2048MB。(这也和
Hugepagesize的大小有关)
4. 使用Hugepages的内存页是不会被交换出去到磁盘的,永远常驻在内存中,所以也减少了内存页交换的额外开销。使用hurgepage的内存不能被 其他的进程使用,所以,一定要合理设置这个值,避免造成浪费。使用超过8G物理内存的系统,有人推荐使用HugePage。
  HugePages_Free - HugePages_Rsvd部分的内存是浪费的,且不能被其他程序使用。在实际应用中,尽可能让HugePages_Free - HugePages_Rsvd=0
5.HugePage的好处:
  大大提高了CPU cache中存放的page table所覆盖的内存大小,从而提高了TLB命中率。进程的虚拟内存地址段先连接到page tables然后再连接到物理内存。所以在访问内存时需要先访问page tables得到虚拟内存和物理内存的映射关系,然后再访问物理内存。CPU cache中有一部分TLB(Translation Lookaside Buffer)用来存放部分page table以提高这种装换的速度。因为page size变大了,所以同样大小的TLB,所覆盖的内存大小也变大了。提高了TBL命中率,也就是提高了地址转换的速度。
  系统进程是通过虚拟地址访问内存,但是CPU必须把它转换程物理内存地址才能真正访问内存。为了提高这个转换效率,CPU会缓存最近的虚拟内存地址和物理内存地址的映射关系,并保存在一个由CPU维护的映射表中。为了尽量提高内存的访问速度,需要在映射表中保存尽量多的映射关系。
6.Linux kernel 2.6.X 通过hugetlbfs文件系统对Huge pages进行了支持。当然 Windows也有相应的支持,此处暂不详述。
7.如何设置huge pages?
  首先mount一个hugetlbfs文件系统: mount -t hugetlbfs hugetlbfs /dev/hugepages
  然后为huge pages保留一定数量的内存:sysctl vm.nr_hugepages=1024
  (另一个操作方法, 在/etc/sysctl.conf加入如下配置就可以:vm.nr_hugepages=1024  修改后,用命令sysctl -p 使得设置生效
  (或者,改动linux启动的grub参数也是可以的,加上 hugepages=1024 这样的参数)
8.KVM如何让guest使用huge pages ?
  首先,让host开启huge pages(像上面那样设置)
  在qemu启动时加上参数,示例:qemu-system-x86_64 -m 2048 -hda /mnt/rhel6.img -mem-path /dev/hugepages
  如果是用libvirt来启动KVM的,那么需要在启动guest的XML配置文件中添加如下的参数:
    <memoryBacking>
    <hugepages/>
    </memoryBacking>
  (启动guest后,可以发现,在host中的cat /pro/meminfo看到的HugePages_Free数量有所减少)
9.很多 Oracle DBA对hugepages比较关系的,他们也写了些关于huge pages的东西,可以看看后面的参考资料,有DBA建议将huge pages的大小设置为SGA的大小。关于Oracle的SGA这些细节,我也不甚了解:The SGA(System Global Area) is an area of memory (RAM) allocated when an Oracle Instance starts up. The SGA's size and function are controlled by initialization (INIT.ORA or SPFILE) parameters.

一些参考资料:
http://en.wikipedia.org/wiki/Huge_pages
http://www.mjmwired.net/kernel/Documentation/vm/hugetlbpage.txt
http://space.itpub.net/231499/viewspace-366360
http://space.itpub.net/23650854/viewspace-689545

http://fedoraproject.org/wiki/Features/KVM_Huge_Page_Backed_Memory

humblec.com/give-hugepage-memory-for-guests/

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值