我有一台 1TB 内存的 RHEL4 机器,发现 malloc 和 mmap 拒绝分配任何超过 512GB 的内存。同时,我的 RHEL5 机器似乎没有问题。那么,我假设这只是内核配置的问题。有谁知道什么控制最大进程大小(假设页面大小固定)?
答案1
这amd64 的 Linux 初始端口只支持40位虚拟地址空间,分为512GB给进程,512GB给内核。当前版本支持48位虚拟地址空间,分为128TB/128TB。最后一个限制是当前版本的 amd64 架构所固有的:根本没有办法配置内存管理单元使更多位变得重要。看Linux 如何在 x86-64 中支持超过 512GB 的虚拟地址范围?有关 amd64 MMU 的说明,或AMD64架构程序员手册(§5.1)了解全文。
我不知道这个限制是什么时候改变的,但是你的 2.6.9 内核真的很旧。红帽发布了特性和限制表对于 RHEL 3 到 RHEL 6。RHEL4 上的最大每个进程地址空间为 512GB。 RHEL5 将为您提供 2TB,但您可能希望直接升级到支持完整 128TB 的 RHEL6。