Linux-5.10.24에서 커널 메모리 사용량을 확인하는 방법은 무엇입니까?

Linux-5.10.24에서 커널 메모리 사용량을 확인하는 방법은 무엇입니까?

커널 5.10.24를 사용하여 임베디드 Linux 시스템을 개발 중입니다. 시스템에는 96MB DRAM이 있습니다.
시스템이 시작되었을 때 메모리 사용량을 확인해보니 다음과 같은 정보를 얻었습니다.

# dmesg | grep "kernel code"
[    0.000000] Memory: 85888K/131072K available (7885K kernel code, 692K rwdata, 1284K rodata, 560K init, 336K bss, 45184K reserved, 0K cma-reserved)
# free -m
              total        used        free      shared  buff/cache   available
Mem:             84          56           1           0          26          25
Swap:             0           0           0
#
#
# cat /proc/meminfo
MemTotal:          86448 kB
MemFree:            1992 kB
MemAvailable:      25948 kB
Buffers:               0 kB
Cached:            26896 kB
SwapCached:            0 kB
Active:             9632 kB
Inactive:          39064 kB
Active(anon):         72 kB
Inactive(anon):    21796 kB
Active(file):       9560 kB
Inactive(file):    17268 kB
Unevictable:           0 kB
Mlocked:               0 kB
SwapTotal:             0 kB
SwapFree:              0 kB
Dirty:                 4 kB
Writeback:             0 kB
AnonPages:         21852 kB
Mapped:             7664 kB
Shmem:                68 kB
KReclaimable:        696 kB
Slab:               8632 kB
SReclaimable:        696 kB
SUnreclaim:         7936 kB
KernelStack:         608 kB
PageTables:          400 kB
NFS_Unstable:          0 kB
Bounce:                0 kB
WritebackTmp:          0 kB
CommitLimit:       43224 kB
Committed_AS:     146992 kB
VmallocTotal:    1048372 kB
VmallocUsed:        4156 kB
VmallocChunk:          0 kB
Percpu:              200 kB

출력 결과를 보면 free -m25MB의 여유 메모리가 있다는 것을 알 수 있습니다.
사용자 공간의 메모리 사용량을 알 수 있는데, 커널 공간이 얼마나 많은 메모리를 사용하고 있는지 어떻게 알 수 있나요?

나는 일부 블로그와 SO를 읽고 커널에서 사용하는 메모리를 Buffers발견 Slab했습니다 ./proc/meminfo

합산해도 여전히 차이가 있습니다!
그렇다면 커널 공간에서 사용되는 메모리를 어떻게 알 수 있습니까? 커널 공간에서 메모리 사용량을 확인하는 것으로 충분 Buffers합니까 ?Slab/proc/meminfo

답변1

커널 메모리 사용량은 버퍼 및 슬랩으로 제한되지 않습니다. 또한 커널 코드, 커널 데이터, 커널 스택과 같은 다른 구성 요소도 포함됩니다.

다음 구성 요소를 사용하여 커널 메모리 사용량을 계산할 수 있습니다.

Kernel code (from dmesg output): 7885 KB
rwdata (from dmesg output): 692 KB
rodata (from dmesg output): 1284 KB
init (from dmesg output): 560 KB
bss (from dmesg output): 336 KB
Slab (from /proc/meminfo): 8632 KB
KernelStack (from /proc/meminfo): 608 KB

이제 함께 추가하세요.

7885 + 692 + 1284 + 560 + 336 + 8632 + 608 = 19997 KB

따라서 커널은 약 19,997KB 또는 약 19.5MB의 메모리를 사용합니다. 이는 근사치이며 커널에서 사용하는 모든 메모리 바이트를 설명하지 못할 수도 있습니다. 커널이 동적으로 메모리를 할당하고 해제할 때 메모리 사용량도 런타임에 변경됩니다.

관련 정보