/proc/meminfo의 값들을 계산할 때도 zoneinfo에서 사용되는 page 정보들을 이용해 계산되는가
네, 정확히 맞습니다!
/proc/meminfo의 값들은 /proc/zoneinfo의 페이지 정보들을 집계해서 계산됩니다.
/proc/meminfo의 주요 항목 계산
c
// linux/mm/page_alloc.c에서
si_meminfo() 함수가 zoneinfo를 읽어서 meminfo 계산
MemTotal = Σ(모든 zone의 managed)
MemFree = Σ(모든 zone의 free)
MemAvailable = MemFree + 회수 가능한 페이지들
MemUsed = MemTotal - MemFree
```
## 당신의 RPi4 데이터로 검증
```
/proc/zoneinfo에서:
Node 0, DMA: managed = 220735, free = 215866
Node 0, DMA32: managed = 253815, free = 133994
Node 1, DMA32: managed = 497449, free = 380141
────────────────── ──────────────
합계 = 971999 합계 = 730001
↓ 이를 /proc/meminfo로 변환 ↓
MemTotal = 971999 × 4 = 3,887,996 KB
MemFree = 730001 × 4 = 2,920,004 KB
/proc/meminfo의 다른 항목들도 zoneinfo 기반
bash
MemTotal = Σ managed
MemFree = Σ free
MemAvailable = MemFree + (회수 가능한 파일 캐시)
Buffers = 버퍼 캐시 (zoneinfo의 nr_file_pages 관련)
Cached = 파일 캐시 (zoneinfo의 nr_active_file + nr_inactive_file)
Active = Σ nr_active_anon + nr_active_file
Inactive = Σ nr_inactive_anon + nr_inactive_file
AnonPages = Σ nr_anon_pages
Slab = Σ (nr_slab_reclaimable + nr_slab_unreclaimable)
커널 소스코드
c
// mm/page_alloc.c
void si_meminfo(struct sysinfo *val)
{
unsigned long pages = 0;
// 모든 zone 순회
for_each_zone(zone) {
pages += zone->managed_pages; // MemTotal 계산
}
val->totalram = pages;
// MemFree 계산
val->freeram = global_node_page_state(NR_FREE_PAGES);
// 기타 항목들...
}
실제 확인 방법
bash
# zoneinfo의 managed 합계
awk '/managed/{sum+=$2} END {print "MemTotal = " sum*4 " KB"}' /proc/zoneinfo
# zoneinfo의 free 합계
awk '/pages free/{sum+=$3} END {print "MemFree = " sum*4 " KB"}' /proc/zoneinfo
# /proc/meminfo 값과 비교
grep "MemTotal\|MemFree" /proc/meminfo
```
## 더 상세한 대응관계
```
/proc/meminfo 항목 zoneinfo 출처
─────────────────────────────────────────────
MemTotal Σ managed
MemFree Σ free
MemAvailable MemFree + 회수 가능
Buffers (버퍼 캐시)
Cached Σ nr_file_pages
Active(anon) Σ nr_active_anon
Inactive(anon) Σ nr_inactive_anon
Active(file) Σ nr_active_file
Inactive(file) Σ nr_inactive_file
AnonPages Σ nr_anon_pages
Slab Σ nr_slab_reclaimable +
nr_slab_unreclaimable
KernelStack Σ nr_kernel_stack
PageTables Σ nr_page_table_pages
```
## 계층 관계
```
/proc/zoneinfo (세부 정보)
↑
│ (커널이 집계)
↓
/proc/meminfo (통합 정보)
↑
│ (사용자가 조회)
↓
free, top 등의 도구
결론:
- ✅ /proc/meminfo는 /proc/zoneinfo 정보를 실시간으로 집계해서 만들어짐
- ✅ zoneinfo의 managed/free 합계 × 4K = meminfo의 MemTotal/MemFree
- ✅ 둘 다 같은 커널 메모리 관리 데이터 구조에서 나옴
'linux' 카테고리의 다른 글
| ftrace script (0) | 2025.12.28 |
|---|---|
| /proc/zoneinfo 해석 방법 (0) | 2025.12.28 |
| zone, free_area, list_head[MIGRATE_TYPES] 관련 (0) | 2025.12.28 |
| raspberry pi 4 커널 빌드 및 교체 시 주의 사항 (0) | 2025.12.26 |
| gst와 omx IL의 관계 (0) | 2022.11.03 |