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