在 Linux on POWER 上利用透明大内存页(2)使用 libhugetlbfs 的几点限制
- UID
- 1066743
|
在 Linux on POWER 上利用透明大内存页(2)使用 libhugetlbfs 的几点限制
系统大内存页是有限的宝贵系统资源。在考虑使用 libhugetlbfs 时,有如下几点限制:
- 在 Linux 上,一个使用 libhugetlbfs 和大内存页的应用程序必须保证在运行时让所需要的所有大内存页都可用和空闲,否则若大内存页请求失败,应用程序就会在运行时终止。在如下这些情况下,这一点更需要格外注意:
- 应用程序可能会使用很多内存,甚至多于可用的 16MB 大内存页。
- 系统没有足够的物理内存来支持此执行体和所有特定页的加载。
- 操作系统在用完大内存页时 “回落” 到常规页面的能力一直是 Linux 操作系统的一个难以很好实现的问题。在这一方面,社区还在不断的努力之中,目前也提出了多种原型和方案。随着系统硬件在所支持的页大小的数量上越来越灵活,相信操作系统中也会出现更多更灵活的控件。
- 并非所有应用程序或软件解决方案都能从大内存页的使用中受益。利用大内存页最主要的性能改进是 Translation Lookaside Buffer (TLB) 遗漏的减少。通常建议您将透明大内存页尝试用于您的应用程序,看看是否会产生任何切实的性能改进。libhugetlbfs 所能带来的性能改进一般可以达到 10 % 到 15 %。但一些应用程序的性能也有可能会降低。一些应用程序的性能则会无改进或者有 少许改进,所以这种方式只适合在特定的应用程序为获得特定的性能改进而使用。
- 总的来说,使用 libhugetlbfs 对于有限的一组应用程序来说都是一种提高性能的恰当方式。典型地,这种方法可用在需要极大型数据数组以及进行大量内存访问的 Fortran 程序,但这种方式也适用于任何 C、C++ 或 Fortran 程序。
- 具有加载进大内存页的 .text 段(可执行文本)的应用程序往往不能有效剖析(例如,通过 oprofile)或调试(例如,通过 gdb),因为执行体本身会在没有征兆的情况下复制到匿名大内存页然后运行。在某些情况下,剖析十分有帮助,Linux 社区在这一方面还在不断努力以期扩展这一功能。
- libhugetlbfs 采用的是 Linux 内置的动态链接工具。所以,静态链接的执行体将不能利用 libhugetlbfs 的特性。
|
|
|
|
|
|