
나는 노력했다
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 = 페이지 크기이기 때문에 시스템에 4KB 페이지가 있음을 알 수 있습니다. 이는 매우 일반적입니다.)