|
swap: amount of swap space currently available (Kbytes) free: size of the free list (Kbytes) re: page reclaims mf: minor faults pi: kilobytes paged in po: kilobytes paged out fr: kilobytes freed de: anticipated short-term memory shortfall (Kbytes) sr: pages scanned by clock algorithm
Solaris는 가상 메모리(Virtual Memory) 시스템을 사용한다. 가상 메모리 시스템이란 물리적 메모리(physical memory)와 하드 디스크(swap device)를 결합하여 하나의 큰 메모리처럼 사용하는 것을 말한다. 즉. 물리적 메모리가 100M 이고 swap device가 100M이면 가상 메모리량은 약 180MB 정도 된다.
physical memory + swap device - VM management overhead = swap(VM)
간단히 생각하면
(physical memory + swap device) * about 90% ~= swap(VM)
(100M + 100M) * 0.9 ~= 180M
Solaris는 이러한 가상 메모리를 관리하기 위하여 메모리를 페이지 단위로 나누어 관리한다.
Solaris에서는 가상 메모리를 swap으로 명칭한다(swap partition과 구별해 주십시오). 이 swap(VM)은 운영체제가 사용할 수 있는 메모리이다. vmstat 명령어의 4번째 필드 swap은 사용 가능한 가상 메모리의 크기를 KB 단위로 나타내고 5번째 필드 free는 사용 가능한 물리적 메모리를 KB 단위로 나타낸다. 가상 메모리에 대한 자세한 사항은 다음과 같은 명령어로 알 수 있다.
# swap -s
total: 664720k bytes allocated + 53320k reserved = 718040k used, 485160k available
|
응용 프로그램이 동작할 때, 필요한 메모리는 swap(VM)에서 가져온다. 물리적 메모리가 많든 적든 관계없이 swap 공간이 충분하면 프로그램이 실행되는 데에는 전혀 문제가 없다. 만일 물리적 메모리가 절대적으로 부족하다면, 실행속도가 늦어질 뿐, 메모리 부족으로 애플리케이션이 중단되는 일은 없다.
swap partition에 대한 정보는 다음과 같이 확인할 수 있다.
# swap -l
swapfile dev swaplo blocks free
/dev/dsk/c0t0d0s1 151,1 16 1638992 933104
|
blocks은 전체 swap partition의 크기이며 512 바이트 단위의 블럭이고, free는 그 중에 사용 가능한 swap partition의 크기이며 512 바이트 단위의 블럭이다. 즉,
(blocks - free) / 2 = 현재 스왑 아웃된 양(KB)
위의 swap -l 명령어의 결과에서 보면, 352944KB의 메모리가 swapout 되었음을 알 수 있다.
(1638992 - 933104) / 2 = 352944KB ~= 344.67MB
Solaris의 메모리 관리 방법에서는 여유 있는 물리적 메모리를 화일 시스템의 캐쉬로 사용한다. 디폴트로 프리 메모리(free physical memory)가 전체 물리적 메모리 양의 1/64(lotsfree)보다 크면, 화일 시스템을 통한 디스크 I/O는 모두 메모리에 남겨두어 화일 시스템의 캐쉬로 사용한다. 프리 메모리가 물리적 메모리 양의 1/64보다 적으면, Solaris는 프리 메모리를 1/64로 채우기 위하여 시스템에 있는 페이지를 조사하여, 최근에 사용되지 않은 페이지를 찾아서 프리시킨다. 이때 운영체제가 조사한 페이지의 갯수가 sr(scan rate)값이다. 프리시킨 페이지 수는 KB 단위로 환산되어 fr(free)에 보여준다. 페이지를 프리시킬 페이지의 내용이 변경되었을 경우, 그 페이지를 disk에 저장한다. (변경된 페이지가 프로그램의 데이타일 경우, 스왑 파티션에 저장되고, 화일 시스템의 케쉬이면 해당 디스크 파티션에 저장된다.) 이때, 디스크에 저장된 페이지를 KB 환산하여 po(page out)에 보여준다. Solaris에서 화일 시스템은 페이지 서브 시스템을 통하여 이루어 진다. 즉, 화일 시스템의 입출력은 모두 page I/O로 이루어 진다. 화일 시스템을 통하여 화일을 읽을 때, 읽은 양은 KB로 환산되어 pi(page in)에 보여준다.
페이지의 크기는 pagesize 명령어로 확인할 수 있다.(sun4u 시스템은 8KB이고 sun4m은 4KB이다)
특별히 메모리를 많이 사용하는 프로그램이 없는데도, 보통 Solaris 시스템의 프리 메모리의 크기가 아주 작게 보인다. 이것은 정상적이라고 말할 수 있다. 앞에서 설명한 바와 같이 화일 시스템의 캐쉬로 많은 부분이 사용되고 있기 때문이다.
프로그램을 실행할 경우에 운영체제는 프로세스에 대한 어드레스 맵핑 테이블을 만들고, 프로세스를 실행한다. 프로세스가 실행되다가 필요한 페이지가 자신의 어드레스 맵핑 테이블에 연결되어 있지 않으면, 페이지 폴트가 발생하는데, 그 페이지가 메모리에 있으면(minor page fault라고 함), 그 페이지를 자신의 어드레스 맵핑 테이블에 등록한다. vmstat의 mf(minor fault)는 minor page fault 횟수를 나타낸다.
프리 메모리가 부족할 경우, paging이 발생하여 최근에 사용되지 않은 페이지를 찾아서 프리시켜 부족한 메모리를 보충하게 되는데, 이렇게 프리되는 페이지의 내용은 훼손되지 않고 프리 메모리 영역에서 관리된다. 이렇게 프리된 페이지가 프로세스의 요청에 따라 다시 사용될 수 있다. 이렇게 다시 사용된 페이지 수를 re(reclaim)에 보여준다.
de: Unknown |