【问题标题】:performance degradation with large pages大页面的性能下降
【发布时间】:2013-01-11 09:32:15
【问题描述】:

我使用 Java 基准测试 (SPECJbb),但观察到启用大页面(每页 2M)时性能会有所下降。我们的服务器基于 NUMA arch,有 80 个内核(启用 HT 时为 160 个逻辑 CPU)和 260G 内存。

基准消耗大约200G内存,所以我在内核大页面池中分配了200G大。但是性能是6%~8%下降。我想我应该有一些性能提升,因为这个基准测试使用了 200G 内存。

我的问题是,在什么情况下,使用大页面会降低性能? 我们的操作系统是RHEL6.3,我尝试了HotSpot JDK 1.6.381.6.37,这两个版本我都发现了这种退化。谢谢。

【问题讨论】:

    标签: linux memory-management jvm benchmarking huge-pages


    【解决方案1】:

    大页面通常会带来高达 5% 的性能提升。

    您应该检查大页面是否正确分配:

    • 请参阅cat /proc/meminfo 并检查实际的大页面分配大小
    • 您的堆有多大?您是否使用了-XX:+UseLargePages 选项?看到JVM设法使用大页面,如果有问题在JVM输出日志中会有警告

    此外,LargePages + NUMA 架构可能存在问题。每个核心有多少内存?见:

    【讨论】:

    • 感谢您的回答!我还检查了这个页面linux-hacks.blogspot.com/2009/06/using-large-pages.html。作者说“经过一些调试,问题原来是应用程序无法利用分配的大页面(感谢我遇到的一些奇怪的环境;-))。”。看来我和他有同样的症状,但他在博客中并没有说明真正的原因。
    • 是的,这就是我所指的链接。您的 JVM 是否设法从您提供的大页面开始?您的 JVM 选项是什么?而且,是否有任何错误消息? HugePages_Free 数字应该随着堆的大小而减少。
    • 嗨,我通过使用 root 运行我的基准测试解决了这个问题。看来JVM使用SYS5风格的api来分配大页面池,需要root权限。
    • 不错!很高兴知道它至少适用于您的操作系统。现在您应该能够弄清楚如何在其他用户下运行 - 因为我知道它应该也可以工作。
    猜你喜欢
    • 1970-01-01
    • 2021-12-03
    • 2020-12-21
    • 2020-04-07
    • 2019-11-21
    • 1970-01-01
    • 2014-05-19
    • 2013-12-24
    • 1970-01-01
    相关资源
    最近更新 更多