커널 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 -m
25MB의 여유 메모리가 있다는 것을 알 수 있습니다.
사용자 공간의 메모리 사용량을 알 수 있는데, 커널 공간이 얼마나 많은 메모리를 사용하고 있는지 어떻게 알 수 있나요?
나는 일부 블로그와 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의 메모리를 사용합니다. 이는 근사치이며 커널에서 사용하는 모든 메모리 바이트를 설명하지 못할 수도 있습니다. 커널이 동적으로 메모리를 할당하고 해제할 때 메모리 사용량도 런타임에 변경됩니다.