问题标签 [huge-pages]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
java - Java 周期性地挂在 futex 和非常低的 IO 输出
目前我的应用程序周期性地阻塞在 IO 中,并且输出非常低。我使用一些命令来跟踪该过程。
通过使用jstack,我发现该应用程序挂在 FileOutputStream.writeBytes 上。
通过使用strace -f -c -p pid收集系统调用信息,我发现了这一点。对于正常情况,它同时具有 futex 和 write 系统调用。但是当它变得异常时,只有 futex 系统调用。该应用程序不断调用 futex 但都失败并抛出 ETIMEDOUT,就像这样:
此问题会定期发生,并持续数分钟或数小时,然后再次正常。
特别是,当 IO 被阻塞时,echo 3 > /proc/sys/vm/drop_caches总是让它暂时正常。我用谷歌搜索并找到了一些类似的问题,如下所列。
- 闰秒。不起作用,我们系统的 ntpd 已停止。
- 透明大页错误。https://bugzilla.redhat.com/show_bug.cgi?id=879801 这个和我的问题很相似,但是我的khugepaged进程是正常的,负载总是接近于零。尤其是drop_caches也适用于我的应用程序。而且我的系统也是多核大内存的。它对我不起作用。那么有人遇到过同样的问题或熟悉这个问题吗?
关于我的系统的一些信息。操作系统:Redhat 6.1,内核版本 2.6.31
JDK:1.7.0_05
CPU:X5650,24核
内存:24GB 和 48GB
c - Mac OS X 上的大页面
Mac OS X mmap 手册页说可以分配超级页面,我认为这与 Linux 大页面相同。
https://developer.apple.com/library/mac/documentation/Darwin/Reference/ManPages/man2/mmap.2.html
但是,以下简单测试在 Mac OS X (Yosemite 10.10.5) 上失败:
输出是:
结果与MAP_FIXED
从标志中删除并NULL
作为地址参数提供的结果相同。替换VM_FLAGS_SUPERPAGE_SIZE_2MB
为-1
预期结果中的结果,即没有发生错误,但显然分配的内存空间使用了常规的 4k 页。
以这种方式分配超级页面可能会出现什么问题?
linux - 错误:ld.so:来自 LD_PRELOAD 的对象“libhugetlbfs.so”无法预加载:忽略
我正在尝试运行一个简单的 malloc 程序来查看我的大页面环境是否已正确设置。libhugetlbfs 仅安装在默认系统目录 /usr/local 中。操作系统是 RHEL 6.7。我检查了 libhugetlbfs.so 是否在 /usr/lib64 文件夹中。当我使用
HUGETLB_MORECORE=yes LD_PRELOAD=libhugetlbfs.so运行代码时
编码
输出给出
很明显 malloc dint 使用大页面发生。我检查了所有环境变量..找不到问题..任何建议???
windows - 2MB 以外的 Windows 大页面支持?
我读到英特尔芯片支持高达 1 GB 的虚拟内存页面大小。使用带有 MEM_LARGE_PAGES 的 VirtualAlloc 可以获得 2MB 页面。有没有办法获得不同的页面大小?我们目前使用的是 Server 2008 R2,但计划升级到 Server 2012。
linux - 无法写入 /sys/kernel/ 以禁用 OVH CentOS 7 上 MongoDB 的透明大页面 (THP)
我的问题
我无法在 OVH CentOS 7 安装上删除有关透明大页面 (THP) 的 MongoDB 警告,问题似乎是无法以/sys/kernel/mm
root 身份写入。
首先,我意识到 OVH 内核是定制的,我知道你们中的许多人会说要使用新的非定制内核,但现在这不是一个选择。我需要为当前的操作系统解决这个问题。
MongoDB 警告:
MongoDB 正在尝试读取 transparent_hugepage 文件(如下),但它们不存在:
无法创建文件
我见过的所有解决方案都涉及创建文件和填充它们never
,包括MongoDB 文档中的脚本。在所有解决方案中,这是关键部分:
但是,这些文件不存在,我无法/sys/kernel/mm
以 root 身份创建任何内容。
目录的所有者和组/sys/kernel/mm
是root
,我暂时将权限从 700 更改为 777,但我仍然无法以 root 身份创建目录。
调整的配置文件也无济于事
为了彻底,我还创建了自定义 Tuned 配置文件(根据上面 MongoDB 链接中的说明)并激活它,但它会产生错误WARNING tuned.plugins.plugin_vm: Option 'transparent_hugepages' is not supported on current hardware.
调整配置文件(/etc/tuned/no-thp/tuned.conf):
调整日志中的错误:
MongoDB本身的一些解决方案?
似乎最好的解决方案是以某种方式显式配置 MongoDB 不使用 THP,这样它就不必检查丢失的文件,但我没有看到这样的情况。如果有办法,即使它涉及自定义 MongoDB(并在每次更新后重复),我也愿意这样做。
c - 将大页面用于文本和数据段
我正在探索按照https://github.com/libhugetlbfs/libhugetlbfs/blob/master/HOWTO中的指南使用大页面支持文本和数据段的可能性中的指南使用大页面支持文本和数据段的可能性。
我已按照建议通过添加“-B/usr/share/libhugetlbfs -Wl,--hugetlbfs-align”重新链接应用程序,并使用“hugectl --text --data --heap --bss /path/to”启动应用程序/我的应用程序”。
但是我不太确定如何验证数据和文本段是否确实被复制到了hugetlbfs文件系统上的文件中。
检查 /proc/{pid}/maps 可以看出,hugepages 用于堆,但不用于文本和数据段,因为前两个地址范围映射到应用程序而不是 hugepage 文件系统。
我的理解正确吗?实际上,我怀疑我关于 /proc/{pid}/maps 将大页面用于堆的结论也是不正确的。
我应该如何验证数据和文本段是否支持大页面?我知道如果成功,数据和文本段将被复制到hugetlbfs文件系统,但如何验证呢?
谢谢!
/proc/{pid}/maps 的输出
google-compute-engine - GCE 上的大页面支持
我正在运行一个我们已成功配置的 JBOSS 应用程序,它在 GCE 以外的其他云平台上使用 Huge Pages/Large Pages。但是我在 GCE 上遇到了问题。我看到了错误:
当我启动 JVM 时。这些在基于 Ubuntu 14.04 的系统上运行,它们的配置就像我们之前有大页面工作的类似系统一样,所以我想知道虚拟机级别的某些设置是否设置不正确以允许大页面工作. 有人有什么建议吗?
c - 如何获取大页面的物理地址
我需要从用户空间获取大页面(2 MB)的物理地址。我设法从页面映射中获取了正常 4 KB 页面的物理地址,如https://shanetully.com/2014/12/translating-virtual-addresses-to-physcial-addresses-in-user-space/#codeprocpidpagemapcode所示但是我不明白我应该如何使用页面映射来获取大页面的物理地址。pagemap中如何表示大页面页框号?任何参考资料,尤其是任何一段代码都将受到高度赞赏。
numa - 使用巨大的页面和 numa_tonode_memory 分配内存,给出“总线错误”
我正在尝试使用巨大的 TLB 页面(1GB)分配 2GB 缓冲区并将内存区域绑定到特定的 numa 节点。
要使用巨大的 TLB 页面分配缓冲区,我使用以下代码:
然后,我打电话:
将缓冲区移动到特定节点。
当我运行程序时,一旦我访问大于 1GB 的缓冲区偏移量,程序就会停止并显示“总线错误(核心转储)”。
删除 numa_tonode_memory 可以避免错误,但是,它也会破坏在特定节点上分配内存的目的。
我想知道是否有任何解决这个问题的方法,
谢谢,
ubuntu-14.04 - Transparent_hugepage - 禁用 memsql
我正在为 memsql 使用 Ubuntu 14.04.4 LTS。我试图通过向 grub 添加行来禁用 transparent_hugepage
我已经改变了
至
然后我在 shell 中执行 sudo update-grub 。并且抛出了以下错误
请帮助我。