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 1as 顯然不在 中/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 頁面。意料之中,這是極其常見的。)

相關內容