본문 바로가기

Linux is..../Algorithm

물리적 메모리free영역이, 남아있음에도 불구하고, Swap영역을 Attach하는 이유는 무엇인가?

1) 물리적 메모리free영역이, 남아있음에도 불구하고, Swap영역을 Attach하는 이유는 무엇인가?

Free 메모리가 있는 상황에서 시스템이 어느정도의 스왑메모리를 사용하는 것은 정상적인 상황이다. 커널은 근미래에 사용될 가능성이 높은 메모리 페이지(사용자 프로세스이던 커널 캐쉬이던간에 상관없음)를 스왑아웃하지 않고 메모리상에 계속 보관해두어 퍼포먼스를 높이고자 한다. 또한 아주 적은 빈도로 사용될 가능성이 높은 페이지는 가용메모리 공간 낭비를 피하기 위해 스왑아웃 시킨다. (예: X11 getty, 기타 inactive한 데몬 관련...) 이와 관련해서 커널의 스와핑 활용 경향을 변경/셋팅할 수 있다. /proc/sys/vm/swappiness 값을 셋팅하면 되는데 기본값은 60이다. 0으로 셋팅할 경우, Free메모리가 남아있을 때까지는 스왑공간을 사용하지 않게된다. 100으로 셋팅할 경우, Free메모리가 남아있더라도 최대한 적극적으로 스왑공간을 활용하게된다. 시스템이 운영되고 있는 상황에서 임시적으로 변경하고자 할 경우는 sysctl 명령으로 vm.swappiness 커널 파라미터에 값을 주면 된다. 영구적으로 값을 셋팅하고자 할 경우는 /etc/sysctl.conf 파일에 vm.swapiness= 형식으로 값을 셋팅하면 된다 vm.swappiness = 60 기본값

- 스왑메모리에 대한 활용빈도를 결정한다.

- echo "100" > /proc/sys/vm/swappiness 스왑을 적극적으로 활용한다.




메모리 스와핑은 두가지 면에서 중요하다.

첫째, 시스템에서 특정 어플리케이션이나 프로세스가 현재 가용한 피지컬 메모리보다 많은 양의 메모리를 요청할 경우, 커널은 적은 빈도율로 사용되는 메모리 페이지를 스왑아웃해서 가용 메모리 공간을 확보한 뒤 이를 해당 프로세스에 할당해 줌으로써 프로세스 실행이 가능하게된다. 둘째, 특정 어플리케이션이 실행되기 시작할 때 초기화를 위해서만 필요하고 이후에는 사용되지 않는 메모리 페이지들은 시스템에 의해 스왑아웃되며, 이로인해 가용해진 메모리 공간은 다른 어플리케이션이나 디스크캐쉬 용도로 활용된다.

스와핑의 단점은 아래와 같다.

메모리는 나노초 단위로 수행되는 반면, 디스크는 밀리초단위로 수행되기 때문에 상대적으로 속도가 느리다. 스왑아웃된 데이터를 메모리대신 디스크에서 액세스할 경우, 메모리에서 해당 데이터를 액세스하는 것에 비해 상대적으로 느리게되므로 퍼포먼스 저하가 발생하게 된다.