사용자 도구

사이트 도구


os:system:usage:mem:proc_meminfo

/proc/meminfo

개요

  1. kernel 에서 제공하는 memory 정보를 알아보자
  2. linux kernel 2.6.x 에서는 /proc/meminfo 를 통해서 정보를 가지고 온다.

High-Level Statistics

MemTotal 사용 가능한 최대 메모리(RAM)량
( Physical RAM - a few reserved bits - kernel binary code )
MemFree LowFree + HighFree
MemShared 호환성을 위하여 존재하는 필드로 항상 0(zero)
Buffers buffer cache 메모리 크기 (커널 2.6부터는 의미가 없다고 한다)
Buffer cache는 원래 directory name 과 inode 정보등의 meta data를 cache하기 위한 것이며 I/O 단위는 block size 이다.
Cached Pagecache (disk cache) 메모리 크기에서 SwapCached가 빠진 크기.
Pagecache는 file 의 내용을 cache하기 위한 것으로 I/O단위는 page size와 같다.
SWAP공간으로의 page-in/out 또한 Pagecache를 통해 이루어지며 Software MMU라고도 불리운다.
커널 2.6에서 Buffer cache가 Pagecache로 통합이 되었다.
SwapCache 스와핑 아웃되었던 메모리로, 스와핑 인되었지만 여전히 스왑 파일에 존재하는 메모리
(메모리가 다시 필요하다면 이미 스왑파일에 존재하므로 또 다시 스와핑 아웃될 필요가 없음. 이는 I/O를 절약할 수 있음)

Detailed Level Statistics - VM Statistics

  1. 가상 메모리는 캐시 페이지를 active와 inactive 메모리로 나눈다.
    이 개념은 만역 여러분이 메모리가 필요하고 그것을 위해서 대체할 어떤 캐시가 필요하다면 여러분은 inactive를 사용하게 될것이다.
    inative는 사용하지 않는 것으로 예상되기 때문이다.
    가상 메모리는 기본적으로 사용된 것과 변화가 생긴것을 체크한다.
  2. 메모리를 사용할 때 CPU는 페이지테이블에 비트를 설정한다.
    그리고 가상 메모리는 수시로 비트를 체크하여 이동된 페이지를 active로 바꾼다.
    active된 페이지들 중 가장 오래 사용되지 않은 순서로 사용한다.
    (대략적으로 - 이것은 현실적으로 조금 더 복잡하다).
    가장 오래전에 사용된 것은 inactive로 이동될 수 있다.
    inactive는 커널(2.4.18 - 24.8.0)위에서 두가지로 나누어 진다.
Active 가장 최근에 사용되었던 메모리로 완전히 불필요하지 않은 경우를 제외하고서는 빈공간으로 반환되지 않음
Inact_dirty 여기서 dirty의 의미는 “디스크나 스왑 공간으로 기록될 필요가 있음”을 의미하며, 빈 공간으로 반환되기 위해서는 몇가지 작업이 필요하다.
아직 기록되지 않은 파일이 예가 될 것이다.
너무 일찍 메모리에 기록하여 I/O의 성능을 떨어뜨릴 필요가 없기 때문이다.
예를 들어 log를 기록한다고 할 때 완벽한 로그가 구성될 때까지 디스크에 기록하지 않는 것이 성능에 도움이 된다.
Inact_clean 쉽게 빈 공간으로 반환될 수 있음을 의미한다.
커널은 항상 일정한 양의 빈 공간을 확보하고 있는데, 이는 움직일 수 있는 여유를 가지기 위함이다.
Inact_target 커널에서 inactive페이지가 충분히 보장되도록 하기 위한 목적으로 사용된다.
이것이 초과되었을때 커널은 페이지를 active에서 inactive로 이동시키기 위한 작업을 더이상 하지 않을 것이다.

Memory Statistics

HighTotal 상위 영역(high region)에 존재하는 메모리의 전체 양으로, Highmem은 physical RAM에서 대략 860MB 위의 메모리를 의미한다.
커널은 상위 영역의 메모리 메모리에 접근하기 위해 간접적인 트릭(indirect tricks)을 사용한다.
데이터 캐시가 이 메모리 영역에 포함될 수 있다.
LowTotal 비상위메모리(non-highmem) 영역에 대한 총량
LowFree 하위메모리 영역(low memory region)의 빈 공간.
커널이 직접적으로 접근할 수 있는 메모리 영역으로, 모든 커널 데이터구조(datastructures)가 이 메모리 영역에 저장된다.
SwapTotal 물리적인 스왑 메모리(physical swap memory)의 총량
SwapFree 스왑 공간의 빈 영역의 총량
Committed_AS 99.99%의 보장(이러한 부하에서는 OOM[Out of Memory]를 결코 발생시키지 않음)을 위해 필요로 하는 RAM의 추측값.
일반적인 상황에서는 커널이 메모리를 지나치게 낭비하는 경우이다.
즉, 1GB malloc를 사용한다고 할 때 실제적으로는 아무런 일도 발생하지 않는다.
단지 메모리를 실제로 사용하기 시작할 때 malloc에 의해 필요로 하는 메모리가 요구된다.
즉 저당을 잡히고 은행이 망하지 않기만을 바라는 상황이 된다.
또 다른 경우에는 mmap 파일을 이용해서 두 프로세스 간에 공유할 경우가 포함된다.
Committed_AS는 최악의 상황에서 필요로 하는 RAM/swap의 추측값이다.
os/system/usage/mem/proc_meminfo.txt · 마지막으로 수정됨: 2010/01/09 10:27 저자 starlits