
私は試した
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パッケージで、そのミラーの1つは 参考:
do_shm() はページ サイズの単位変換を行うことに注意してください。
uint64_t tmp, pgsz = getpagesize();
tmp = (uint64_t) lim.shmall * pgsz;
(最大合計共有メモリ / shmall = ページ サイズなので、マシンには 4 KB のページがあることがわかります。予想どおり、これは非常に一般的です。)