물리 메모리 4GB, VmallocTotal은 34TB?

Erdos·2025년 8월 23일

LINUX/UNIX

목록 보기
6/8

컴퓨터 A

# cat /proc/meminfo
MemTotal: 3753908 kB // 물리적 메모리 총량
MemFree: 2994292 kB  // 놀고 있는 메모리
MemAvailable: 3181004 kB // 가용 메모리
Buffers: 26304 kB  
Cached: 296432 kB 
SwapCached: 0 kB // 아래 swaptotal 1GiB. 아직 0 사용 중
Active: 95480 kB 
Inactive: 337040 kB  
Active(anon): 5644 kB 
Inactive(anon): 118664 kB 
Active(file): 89836 kB 
Inactive(file): 218376 kB 
Unevictable: 0 kB 
Mlocked: 0 kB 
SwapTotal: 1048576 kB 
SwapFree: 1048576 kB 
Dirty: 3704 kB 
Writeback: 0 kB 
AnonPages: 108960 kB 
Mapped: 135384 kB 
Shmem: 14500 kB 
KReclaimable: 32936 kB 
Slab: 83836 kB 
SReclaimable: 32936 kB 
SUnreclaim: 50900 kB 
KernelStack: 4752 kB 
PageTables: 5248 kB 
NFS_Unstable: 0 kB 
Bounce: 0 kB 
WritebackTmp: 0 kB 
CommitLimit: 2925528 kB 
Committed_AS: 879164 kB 
VmallocTotal: 34359738367 kB  // 커널 vmalloc 가상공간 한도(이론치)
VmallocUsed: 26116 kB 
VmallocChunk: 0 kB 
Percpu: 6912 kB 
AnonHugePages: 16384 kB 
ShmemHugePages: 0 kB 
ShmemPmdMapped: 0 kB 
FileHugePages: 0 kB 
FilePmdMapped: 0 kB 
HugePages_Total: 0 
HugePages_Free: 0 
HugePages_Rsvd: 0 
HugePages_Surp: 0 
Hugepagesize: 2048 kB 
Hugetlb: 0 kB 
DirectMap4k: 70656 kB 
DirectMap2M: 3792896 kB 
DirectMap1G: 8388608 kB

컴퓨터 B

MemTotal:       16054204 kB
MemFree:         3582996 kB
MemAvailable:   10947360 kB
Buffers:           55204 kB
Cached:          8415032 kB
SwapCached:            4 kB
Active:          6630756 kB
Inactive:        3447644 kB
Active(anon):    2781012 kB
Inactive(anon):       20 kB
Active(file):    3849744 kB
Inactive(file):  3447624 kB
Unevictable:     1092428 kB
Mlocked:           35656 kB
SwapTotal:       4194300 kB
SwapFree:        4194044 kB
Zswap:                 0 kB
Zswapped:              0 kB
Dirty:             17936 kB
Writeback:             0 kB
AnonPages:       2700628 kB
Mapped:          1168640 kB
Shmem:           1158448 kB
KReclaimable:     409812 kB
Slab:             787976 kB
SReclaimable:     409812 kB
SUnreclaim:       378164 kB
KernelStack:       26624 kB
PageTables:        57324 kB
SecPageTables:         0 kB
NFS_Unstable:          0 kB
Bounce:                0 kB임시글
WritebackTmp:          0 kB
CommitLimit:    12221400 kB
Committed_AS:   22163276 kB
VmallocTotal:   34359738367 kB
VmallocUsed:       94356 kB
VmallocChunk:          0 kB
Percpu:            43008 kB
HardwareCorrupted:     0 kB
AnonHugePages:      2048 kB
ShmemHugePages:   997376 kB
ShmemPmdMapped:        0 kB
FileHugePages:      6144 kB
FilePmdMapped:      2048 kB
Unaccepted:            0 kB
HugePages_Total:       0
HugePages_Free:        0
HugePages_Rsvd:        0
HugePages_Surp:        0
Hugepagesize:       2048 kB
Hugetlb:               0 kB
DirectMap4k:      517216 kB
DirectMap2M:     9650176 kB
DirectMap1G:     7340032 kB

의문


물리적인 메모리 총량에 비해 가상메모리 총량이 지나치게 큰 이유는 무엇일까?

의문을 해결하기 위해 개념부터 잡기

출처: Operating System Concepts - 10th Edition chapter10

가상메모리

프로세스 전체가 메모리 내에 올라오지 않더라도 실행이 가능하도록 하는 기법

  • 장점: 사용자 프로그램이 물리 메모리보다 커져도 된다.
  • 가상 메모리는 물리 메모리로부터 프로그래머 관점의 논리 메모리를 분리해 메인 메모리를 균일한 크기의 저장 공간으로 구성된 엄청나게 큰 배열로 추상화 시켜준다.
  • 이 기법을 통해 프로그래머는 메모리의 크기에 제약으로부터 자유로워진다.

스택 영역과 힙 영역 사이에 sparse 주소 공간이 있다.(화살표 2개가 만나는 부분) = 메모리 내에서의 프로세스 가상 주소 공간

  • 성긴 주소 공간의 공백은 스택이나 힙 세그먼트가 확장될 때 사용되거나 프로그램 실행 중 동적으로 라이브러리를 링크할 필요가 있을 때 사용된다.
  • 이 공간은 논리 메모리를 물리 메모리로부터 분리해준다.
  • 가상 메모리는 페이지 공유를 통해 파일이나 메모리가 둘 또는 그 이상의 프로세스들에 의해 공유되는 것을 가능하게 한다.

1) VmallocTotal란 커널이 프로세스/드라이버 등에 가상 메모리(vm)를 할당할 때 사용할 수 있는 최대 주소 공간 범위. 주소만 잡아둔 이론적 최대치다.

  • 그래서 실제 RAM이 없어도 예약해 둘 수 있다.
  • 실제 메모리 용량과 무관하다. 주소 공간 설계상의 상한치를 보여주고자 함.
  • CPU 아키텍처, 커널 빌드 설정에 따라 이 값은 바뀔 수 있다.
  • 위에 두 컴퓨터의 vmalloctotal이 동일했던 이유는 모두 64bit커널이기 떄문.

2) 크게 잡는 이유

  • 드라이버/커널 모듈 호환성
    • 장치 드라이버, 커널 확장 기능, I/O 매핑 등에서 다양한 크기의 가상 메모리 영역을 요구
    • 제한이 너무 작으면 대형 메모리 매핑(GPU, 고속 네트워크, 대용량 버퍼)를 지원하지 못함
  • 가상 주소 공간 비용이 싸다
  • 실제 램과 달리 가상 주소 공간은 예약만 하면 된다
  • 넉넉히 잡아두면 호환성과 확장성이 올라감.

3) 2^35-1 = 34359738367 의 의미

  • x86-64 아키텍쳐 CPU에서는 48비트 가상 주소를 지원한다.
  • 이 48비트 중 일부를 vmalloc전용으로 떼어놓는다. -> 커널 메모리 레이아웃 설계 결과(memory layout design)
  • vmalloc전용으로 35비트 주소 공간을 할당한다. 이렇게 주소 공간을 넉넉하게 예약해놓고(실제 램과는 무관) 필요할 때 실제 물리 메모리를 매핑함.

profile
수학을 사랑하는 애독자📚 Stop dreaming. Start living. - 'The Secret Life of Walter Mitty'

0개의 댓글