Physical memory에 형성된 swap space

현재 솔라리스를 공부하고 있는데 swap -l과 -s 옵션으로 스왑으로 잡힌 양을 살펴보던 중 이상한 것을 발견했습니다.
swap -l으로 나온 것은 제가 스왑용 슬라이스(파티션)로 잡았던 2기가가 나왔지만 swap -s으로 나온 결과는 약 2.7기가가였습니다.(실제 피지컬 메모리는 1기가입니다. 어차피 가상화 프로그램으로 부여된 것이긴 하지만)

책과 인터넷을 보고 원인을 분석하다보니 솔라리스만 그런게 아닌 것 같더군요.
-l옵션과 달리 -s옵션을 사용하면 제가 잡은 swap에 더하여 물리적인 메모리(RAM) 속에 잡힌 스왑 영역이 포함되어 나온다고 하더군요.
저는 이 '물리적인 메모리에 잡힌 스왑 영역’이란 존재를 오늘 처음 알았습니다.

스왑영역이 이미 존재하는데 어째서 물리적인 메모리(즉, RAM) 속에 따로 스왑 공간을 만든다는지 이해를 못하겠습니다.(그것도 1기가 중 700메가나 말이죠) 스왑이 생긴 이유와 전혀 맞지 않는 현상이라고 생각합니다. RAM 속에 스왑을 잡을 바에 그냥 그대로 그 메모리 공간을 사용하면 되는 것 아닌가요? 이런 현상과 그 이유에 대해 알고 싶습니다.

참고로 솔라리스10의 man페이지에서는 -s 옵션에 대해 다음과 같이 설명하고 있습니다.
These number include swap from all configured swap areas as listed by the -l option, as well swap space in the form of physical memory.

맨 페이지에 사용된 용어가 조금 혼동을 가져오는군요.

[b:mnh1ge66]물리 메모리 안에 swap영역이 따로 있는게 아닙니다[/b:mnh1ge66]

swap 영역이라는 용어 자체가 물리 메모리가 부족할때 하드 디스크 공간을 가상의(virtual)메모리로 추가해서
진짜 메모리 인것처럼 쓰는 겁니다.
swap=virtual memory 로 보는 입장에서 physical memory 역시 swap 즉 virtual memory 의 한 형태인거죠.

솔라리스의 경우

총 가상메모리(virtual memory) = 물리 메모리(physical memory) + swapfs를 통해 만들어진 swap file + swapfs를 통해 만들어진 swap partition

입니다.

swap -l 로 측정할수있는 것이
swapfs를 통해 만들어진 swap file + swapfs를 통해 만들어진 swap partition
이구요.

swap -s로 측정되는것이

물리 메모리(physical memory) + swapfs를 통해 만들어진 swap file + swapfs를 통해 만들어진 swap partition

입니다.
[b:mnh1ge66]즉 swap -s 는 virtual memory의 총량과 사용내역을 보여주는 명령입니다.[/b:mnh1ge66]

[quote:mnh1ge66]These number include swap from all configured swap areas as listed by the -l option, as well swap space in the form of physical memory.[/quote:mnh1ge66]

이해가능하게 번역해 보죠.

[b:mnh1ge66]swap -s 로 측정된 수치는 -l옵션으로 측정된 모든 swap 공간(파티션 ,파일)에 physical memory를 합한 것이다.[/b:mnh1ge66]

처음 글을 보고 리얼 메모리와 스왑디바이스와의 차이로 추축을 하여 문서를 찾아 보니, 아래와 같은 정보가 있더군요…


예를 들어

top :
last pid: 10368; load avg: 0.09, 0.06, 0.06; up 18+22:13:31 13:32:45
25 processes: 24 sleeping, 1 on cpu
CPU states: 98.3% idle, 0.3% user, 1.4% kernel, 0.0% iowait, 0.0% swap
Memory: 2048M phys mem, 1696M free mem, 2057M total swap, 2057M free swap <---------- swap info

swap -s :
total: 10576k bytes allocated + 1280k reserved = 11856k used, 3745040k available

  • top
    free swap 2057MB
    total swap 2057 MB

  • swap -s
    free swap 3745040 KB -> 3656 MB
    used swap 11856 KB -> 11 MB
    total swap 3667 MB <-free 와 used의 합산.

의 경우

swap -s 의 경우 출력되는 값은 dev에 형성된 swap space 정보에다가
physical memory 에 형성된 swap space 영역까지 모두 포함하는 계산이었고 top의 경우는 dev에 형성된 swap space에만 국한된 데이타 였습니다.

라고 합니다. 즉, 일반적으로 우리가 swap이라 함은 swap -l 을 말합니다.

[quote="reandr":2fpp39qn][b:2fpp39qn]swap -s 로 측정된 수치는 -l옵션으로 측정된 모든 swap 공간(파티션 ,파일)에 physical memory를 합한 것이다.[/b:2fpp39qn][/quote:2fpp39qn]
단순히 그렇다고 하기에는 출력되는 총량이 너무 적습니다. 설령 1기가의 메모리에서 1024(1k)와 1000의 오차를 제외하더라도 300MB의 분량이 깎여나간다는 것은 불가능하죠.(스왑용 파티션(슬라이스)은 2G의 단위로 잡았기 때문에 오차는 없습니다) 커널 영역을 제외하고 계산하는 것일까요?

솔라리스 정식 교재에 있는 swapfs 파일 시스템 설명에서 그림을 보면 [b:2fpp39qn]Swap Space(말씀하신 Virtual Memory에 대해서는 책에도 있기 때문에 저도 알고 있지만 이건 Virtual Memory가 아닙니다)[/b:2fpp39qn]에는 Swap Slice(파티션), Swap File, 그리고 무려 RAM이 포함되어 있습니다. 재미있는 것은 [b:2fpp39qn]물리 중 일부만 포함[/b:2fpp39qn]된다는 것입니다.(그림상으로는 전체 중 절반이 약간 넘는 공간) 그렇다면 출력결과에서 300메가나 깎여나간 것이 이해가 됩니다. 문제는 그 공간이 왜 계산이 안 되어 있으며 그 공간 안에 무엇이 들어있는가라고 할 수 있겠죠. 책에는 그 이유가 안 나와있습니다. 이런, 어쩌라고… -_-;

진실은 아직도 미궁속에…

제가 사용한 용어도 그리 정확하지 못했군요.
깎여나간 양의 원인에 대해 생각해 봤습니다.

swap -s 로 측정된 총량은

swap file + swap partition + (값 측정 순간의 현재 사용가능한 )물리 메모리

깎여 나간 부분은 swap -s 측정 순간 이미 다른 곳에서 쓰고 있기에
virtual swap space 로서 사용할수 없는 물리 메모리의 양입니다.

용어 때문에 더 헷갈려 하신다면

이렇게 구분하죠.
virtual memory = swap file + swap partion + all physical memory
virtual swap space = swap file + swap partition + currently available physical memory

[quote="reandr":34t889bx]virtual memory = swap file + swap partion + all physical memory
virtual swap space = swap file + swap partion + currently available physical memory[/quote:34t889bx]

virtual swap space = ‘all virtual memory 중 현재 사용 가능한 공간’ 이 아닐까요?
virtual swap space = currently available space of (swap file + swap partition + physical memory)

믿거나 말거나… :oops:

[quote="reandr":nczlscy0]이렇게 구분하죠.
virtual memory = swap file + swap partion + all physical memory
virtual swap space = swap file + swap partion + currently available physical memory[/quote:nczlscy0]
이렇게 생각하시면 될 거 같습니다.
virtual memory = swap file + swap partion + all physical memory
∴ total available memory = 가상/실제를 통털어 시스템이 가지고 있는 메모리 용량

virtual swap space = swap file + swap partion + currently available physical memory
∴ total available swap space = 가상/실제를 통털어 현재 스왑 용도로 사용 가능한 메모리 용량.

음 역시 총 가용 용량을 표시한 걸까요. 답변 감사합니다. :D

virtual swap space 의 총량 = swap file + swap partion + currently available physical memory

swap -s 는 virtual swap space 의 총량과
swap에 사용돤 양, 남은 양을 측정해서 표시 합니다.
따라서 tinywolf님이 말씀하신것은 아닌거 같구요.

The Solaris OS uses the concept of virtual swap space, a layer between anonymous memory pages and the physical storage (or disk-backed swap space) that actually back these pages. A system’s virtual swap space is equal to[quote:2btosrak] the sum of all its physical (disk-backed) swap space plus a portion of the currently available physical memory.[/quote:2btosrak]

[quote="reandr":1u0klyv4]swap -s 는 virtual swap space 의 총량과
swap에 사용돤 양, 남은 양을 측정해서 표시 합니다.[/quote:1u0klyv4]

[quote="Vulpes":1u0klyv4]virtual swap space = swap file + swap partion + currently available physical memory
∴ total available swap space = 가상/실제를 통털어 현재 스왑 용도로 사용 가능한 메모리 용량.[/quote:1u0klyv4]

두 분 말씀이 같은 뜻 같네요.
현재 swap으로 사용 가능한 용량 = 총 swap 용량 + 남은 메모리 용량

역시 추측의 신뢰도는 반반(믿거나 말거나)입니다. :cry: