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 memoryKB に変換されます。
  • /proc/sys/kernel/shmmax単位はバイトで、ipcs はmax seg sizeKB に変換されます。

ソースコードはutil-linuxパッケージで、そのミラーの1つは 参考:
do_shm() はページ サイズの単位変換を行うことに注意してください。

uint64_t tmp, pgsz = getpagesize();

tmp = (uint64_t) lim.shmall * pgsz;

(最大合計共有メモリ / shmall = ページ サイズなので、マシンには 4 KB のページがあることがわかります。予想どおり、これは非常に一般的です。)

関連情報