x86(包括x86-32x86-64)架构的CPU默认使用4KB大小的内存页面(getconf PAGESIZE),但是它们也支持较大的内存页,如x86-64系统就支持2MB大小的大页(huge page)

Linux 2.6及以上的内核都支持huge page

如果在系统中使用了huge page,则内存页的数量会减少,从而需要更少的页表(page table)约了页表所占用的内存数量,并且所需的地址转换也减少了,TLB缓存失效的次数就减少了,从而提高了内存访问的性能

另外,由于地址转换所需的信息一般保存在CPU的缓存中,huge page的使用让地址转换信息减少,从而减少了CPU缓存的使用,减轻了CPU缓存的压力,让CPU缓存能更多地用于应用程序的数据缓存,也能够在整体上提升系统的性能

在KVM中,也可以将huge page的特性应用到客户机中:

qemu-kvm 就提供了"-mempath FILE"参数选项用于使用huge page

另外,还有一个参数"-mem-prealloc"可以让宿主机在启动客户机时就全部分配好客户机的内存,而不是在客户机实际用到更多内存时才按需分配。

-mem-prealloc 必须在有"-mem-path" 参数时才能使用

提前分配好内存的好处是客户机的内存访问速度更快,缺点是客户机启动时就得到了所有的内存,从而让宿主机的内存很快减少(而不是根据客户机的需求而动态调整内存分配)。

通过在宿主机中的如下几个操作让客户机使用huge page

(1)检查宿主机目前状态,检查默认的内存大小和内存使用情况,如下:

getconf  PAGESIZE

cat  /proc/meminfo

(2)(在宿主机中)挂载hugetlbfs文件系统,命令为:

"mount  -t hugetlbfs  hugetlbfs  /dev/hugepages",

如下:

mount  -t hugetlbfs  hugetlbfs  /dev/hugepages

mount|grep  huge

( 3 )设置(在宿主机中设置允许虚拟机使用的)hugepage的数量,命令为"sysctl vm.nr_hugepages=num", 如下:

( 4 )启动客户机让其使用hugepage的内存,使用"-mem-path" 参数,如下:

qemu-system-x86_64  -m 1024  -smp 2  /opt/cs-01.img  -mem-path /dev/hugepages

( 5 )查看宿主机中huge page的使用情况,可以看到"HugePages_Free"数值减少,因为客户机使用了一定数最的hugepage。

在如下的输出中,"HugePages_Free"数值的减少没有512(512*2MB=1024MB)那么多,这是因为启动客户机时并没有实际分配1024MB内存,qemu-kvm命令行中加上前面提到的"-mem-prealloc"参数就会让meminfo文件中"HugePages_Free"的数量减少和分配给客户机的一致

至此,如果在客户机中运行的应用程序(典型的应用为oracle数据库)具备使用huge page的能力,那么就可以在客户机中使用huge page带来性能的提升

总的来说,对于内存访问密集型的应用,在KVM客户机中使用huge page是可以较明显地提高客户机性能的,不过,它也有一个缺点,使用huge page的内存不能被换出(swap out),也不能使用ballooning方式自动增长

大页(Huge Page)简单介绍的更多相关文章

  1. Linux就这个范儿 第15章 七种武器 linux 同步IO: sync、fsync与fdatasync Linux中的内存大页面huge page/large page David Cutler Linux读写内存数据的三种方式

    Linux就这个范儿 第15章 七种武器  linux 同步IO: sync.fsync与fdatasync   Linux中的内存大页面huge page/large page  David Cut ...

  2. 大页(huge pages) 三大系列 ---计算大页配置参数

    使用以下shell 脚本来计算大页配置参数,确保使用脚本实例之前的数据已经开始, 如果数据库的版本号11g,确认是否使用自己主动的内存管理(AMM) +++++++++++++++++++++++++ ...

  3. Huge Page 是否是拯救性能的万能良药?

    本文将分析是否Huge Page在任何条件下(特别是NUMA架构下)都能带来性能提升. 本博客已经迁移至: http://cenalulu.github.io/ 为了更好的体验,请通过此链接阅读: h ...

  4. Linux HugePages及MySQL 大页配置

    http://blog.csdn.net/dba_waterbin/article/details/9669929       ㈠ HugePages简介             HugePages是 ...

  5. [转帖]Huge Page 是否是拯救性能的万能良药?

    Huge Page 是否是拯救性能的万能良药? 本文将分析是否Huge Page在任何条件下(特别是NUMA架构下)都能带来性能提升. 文章欢迎转载,但转载时请保留本段文字,并置于文章的顶部 作者:卢 ...

  6. Android发展简单介绍

    Android一词的本义指“机器人”,同一时候也是Google于2007年11月5日宣布的基于Linux平台的开源手机操作系统的名称,该平台由操作系统.中间件.用户界面和应用软件组成,号称是首个为移动 ...

  7. 大页内存(HugePages)在通用程序优化中的应用

    今天给大家介绍一种比较新奇的程序性能优化方法-大页内存(HugePages),简单来说就是通过增大操作系统页的大小来减小页表,从而避免快表缺失.这方面的资料比较贫乏,而且网上绝大多数资料都是介绍它在O ...

  8. Linux关闭透明大页配置

      一.为何要关闭透明大页 A--MOS获取 . #翻译 由于透明超大页面已知会导致意外的节点重新启动并导致RAC出现性能问题,因此Oracle强烈建议禁用透明超大页面. 另外,即使在单实例数据库环境 ...

  9. 大页内存(HugePages)

    原文转载自:http://blog.csdn.net/yutianzuijin/article/details/41912871 今天给大家介绍一种比较新奇的程序性能优化方法—大页内存(HugePag ...

随机推荐

  1. 老天待我不薄,又来这么一题POJ1753

    还是位运算+BFS系列题: 现在这种真是无比喜欢,今天搞了一上午这题...因为状态的改变写错了-T.T #include<cstdio> #include<queue> #in ...

  2. bzoj 4044: [Cerc2014] Virus synthesis【回文自动机+dp】

    建回文自动机,注意到一个回文串是可以通过一个长度小于等于这个串长度的一半的回文串添上一些字符然后复制得到的,也就是在自动机上向fa走,相当于treedp 每次都走显然会T,记录一个up,指向祖先中最下 ...

  3. USACO Training3.2 01串 By cellur925

    题目传送门 一句话题意:求长度为n的有m个1的大小为第k个的01串. 暑假我做的时候是真·大暴力,用二进制枚举,55分,成功T掉无数点. 正解:开始可以用计数类dp来“预处理”,状态和转移都比较好想. ...

  4. C# 中使用Image.FromFile(string path)后,提示该文件正在被另一进程使用XXX的问题

    C# 中使用Image.FromFile(string path)后,提示该文件正在被另一进程使用XXX的问题 C# 中使用Image.FromFile(string path)后,提示该文件正在被另 ...

  5. iOS 跷跷板动画 Seesaw Animation

    Xcode Playgound示例代码: let testView = UIView() testView.frame = CGRect.init(x: , y: , width: , height: ...

  6. zabbix数据库存储和性能

    1 基本认识 1.1 history zabbix默认每分钟采集一次item的数据,然后会存入history表中.主机越多,需要采集的item值就越多,history表的增长速度就越快. 在histo ...

  7. SQL 实战语句(9)

    1.如何同步根据部门表同步另外一个项目表的部门字段 update A set A.auditownerid=(select lp.epleaderId from (select ep.userid a ...

  8. python之重写父类方法

    #修改父类的方法#重写父类的方法的目的是为了给他扩展功能,父类的方法已经不能满足需求#核心思想就一句话,先调用一下你要重写的父类方法,class Coon(object): #基本类 def __in ...

  9. Hibernate通过实体对象对应数据库表信息

    Hibernate通过实体对象对应数据库表信息,包括:数据库表名称.主键列名.非主键列名等. 获取对象映射缓存管理类: AbstractEntityPersister aep = (AbstractE ...

  10. php一致性hash性能测试(flexihash/memcache/memcached)

    一致性hash的使用在PHP中有三种选择分别是原生的memcache扩展,memcached扩展,还有一个是网上比较流行的flexihash类. 最近有项目需要使用flexihash类操作memcac ...