标题: 在 Linux on POWER 上利用透明大内存页(1) [打印本页] 作者: look_w 时间: 2018-6-14 16:50 标题: 在 Linux on POWER 上利用透明大内存页(1)
简介和背景透明地利用 Linux® 上的大内存页会使内存页面表项能够覆盖更大范围内(多至数兆字节)的连续物理内存,有了最近推出的 SourceForge 的 libhugetlbfs 库版本 1(参见 ),这一切就变得更加容易。libhugetlbfs 库已经针对 SUSE Linux Enterprise Server 10 (SLES 10) 作了更新并可用于 Red Hat Enterprise Server Linux 5 (RHEL 5)。客户可以利用它进行基准测试活动以改进运行 Linux 的 POWER、Intel® 和 AMD 系统上的特定应用程序的性能。本文只侧重于具有 16MB 页面大小的、基于 IBM POWER 处理器的系统,简要介绍了 libhugetlbfs,具体包括的内容如下:
何时应该及何时不应该使用 libhugetlbfs
如何安装和设置 libhugetlbfs
如何提供到大内存页的系统访问控制
一个简单的代码示例,用大内存页备份 malloc 和应用程序 bss 段。
使用了 libhugetlbfs 的行业标准的外部发布的示例
所支持的系统 对于 Linux on POWER 系统而言,具有 16MB 页面的 SLES 10 和 RHEL 5 系统均支持 libhugetlbfs 库,比如 POWER4、POWER5、POWER5+ 系统和 BladeCenter® JS20 和 BladeCenter JS21。
虽然本文只侧重 POWER 系统,但是支持大内存页的、基于 Intel 和 AMD 的 Linux 系统也提供对 libhugetlbfs 的支持。对于某些系统,虽然硬件页面的大小不同,但方式类似,而且显示某些良好性能改进的测试也都可以在这些 Linux 系统上看到。
对应用程序无需进行任何源代码更改在本文中,透明地利用大内存页 指的是应用程序可以利用较大的硬件页面大小的性能优势,而无需进行任何源代码更改。虽然 Linux 支持利用系统大内存页,但应用程序必须进行特定的编码才能利用该特性。这类支持存在于常见的一些系统软件产品中,比如最新的一些 Java™ 引擎和各种大型数据库提供商的产品。
如果是在具有上述平台的 32 位或 64 位应用程序上使用 libhugetlbfs,则应用程序无需进行任何代码更改就可以利用 16MB 大内存页。可选的使用方式有多种,包括:
为了开发受客户环境支持的应用程序,您需要一个受支持的 Linux 发行版。对于 SUSE,就是 SLES 10。对于 Red Hat,就是包括 libhugetlbfs 库的 Red Hat Enterprise Linux 5 (RHEL 5)。本文无意介绍 SLES 9 和 RHEL 4,原因是它们不具有对 libhugetlbfs 适当的内核支持。虽然有经验的 Linux 用户总是可以获得能提供所需 libhugetlbfs 内核功能的最新的主流内核,但这并不是一种受客户支持的配置。
Linux on POWER 上的大内存页是在使用(或在 boot 之上使用或由 root 用户使用)之前定义的 16MB 大内存页,这些大内存页会在被使用时由操作系统在主内存中固定。POWER 系统上的 16MB 大内存页是连续的 16MB 物理内存块。
对于 POWER 系统而言,Linux 社区将这些内存页称作 “huge page”,而传统的 AIX® 和 IBM POWER 硬件团队则将这些内存页称为 “large page”。由于社区和业界的术语一直模糊不清,因此我建议用所使用页的实际大小来加以区别。在本文中,我所指的是 16MB 大内存页,不区分 “large page” 和 “huge page”,认为二者表示的内容相同,即都指的是 16MB 大内存页。
可以在 Linux on POWER 上的虚拟的逻辑分区 (LPAR) 中使用 16MB 大内存页,也可以在将所有资源分配给该分区的全系统 LPAR 中使用 16MB 大内存页。