为什么无论 RAM 总量是多少,我只能访问一半?

为什么无论 RAM 总量是多少,我只能访问一半?

我有一个带有 4*32 GB RAM 的 Intel 11700。

当 4 个物理 RAM 插槽已满时,BIOS、、、htopsudo lshw无论sudo dmidecode dmesg我使用什么命令来显示系统上的总 RAM)都会显示我有 128 GB RAM。

但是,我只能使用 57.2 GB,即大约可用 RAM 的一半。

我通过malloc()在 C 中使用并在tmpfs.前者最终返回一个NULL指针,后者最终显示设备空间不足。

更奇怪的是,如果我只安装一两个RAM模块,即32或64 GB,我仍然只能使用大约一半的RAM,即12.1或28.7 GB。

答案1

失败malloc,尤其是在 50% 占用率时,是严格分配的症状,IE残疾人过度使用。这是由系统vm.overcommit_memory命令,并且可以看到

sysctl vm.overcommit_memory

如果指示 2,内核将防止过度使用,因此堆大小调整mmap等将在分配时(而不是实际使用内存时)失败。限制设置为交换加vm.overcommit-kbytes或者vm.overcommit-ratio(作为物理内存的百分比)。

要获得您期望的行为,请设置vm.overcommit_memory为 0。

相关内容