ipcs -lm 和 cat /sys/proc/kernel/xxxx 有什么区别

ipcs -lm 和 cat /sys/proc/kernel/xxxx 有什么区别

我试过

ipcs-lm

------ Shared Memory Limits --------
max number of segments = 4096
max seg size (kbytes) = 67108864
max total shared memory (kbytes) = 34359738368
min seg size (bytes) = 1

cat /proc/sys/kernel/shmmni
4096
cat /proc/sys/kernel/shmmax
68719476736
cat /proc/sys/kernel/shmall
8589934592

从我读过的文档中,我了解到它们描述的是相同的值,但它们是不同的。你能解释一下它们之间有什么区别吗?

干杯

答案1

在 Linux 上,ipcs 会从 读取共享内存限制/proc。只有当失败时,它才会重新使用shmctl()。并且# define SHMMIN 1显然 中没有/proc

  • /proc/sys/kernel/shmall单位是页,ipcs转换max total shared memory为KB。
  • /proc/sys/kernel/shmmax单位是字节,ipcs转换max seg size为KB。

源代码是 util-linux 包,其中一个镜像位于 https://github.com/karelzak/util-linux/blob/stable/v2.33/sys-utils/ipcs.c
请注意,do_shm() 会执行页面大小单位转换:

uint64_t tmp, pgsz = getpagesize();

tmp = (uint64_t) lim.shmall * pgsz;

(因为最大总共享内存/shmall = 页面大小,可以告诉你你的机器有 4 KB 的页面。这是预料之中的,这是非常常见的。)

相关内容