如何计算 shmmax 和 shmmni 值并第一次在 Redhat 中定义。我想了解其背后的数学原理。我可以在内核参数中看到一个大数字,这个大数字是什么?它与物理内存有何关系?我有 128GB 内存和 SHMMAX=“123695063040”
答案1
根据红帽文档https://access.redhat.com/solutions/1437883(访问可能仅限于红帽授权客户):
在 Red Hat Enterprise Linux 7.1 中,kernel.shmmax 和 kernel.shmall 的默认值已更改。
Red Hat Enterprise Linux 7.1 中 kernel.shmmax 和 kernel.shmall 的默认值已更改,以符合上游内核中设置的值。 kernel.shmmax 和 kernel.shmall 的新默认值设置为 18446744073692774399。
在内核代码中使用以下公式计算新的默认值:
include/uapi/linux/shm.h
[...]
#define SHMMAX (ULONG_MAX - (1L<<24)) /* max shared seg size (bytes) */
#define SHMALL (ULONG_MAX - (1L<<24)) /* max shm system wide (pages) */