리눅스 스왑(SWAP) 파티션이란 무엇? 어떤 일을 하나요?
대부분의 리눅스 배포판은 스왑(SWAP) 파티션 설정을 권장합니다. 파티션 하나에 전체 운영 체제를 두고 사용해온 윈도우 사용자에게는 낯설게 보일 수 있는 광경이죠.
그럼, 스왑(SWAP) 파티션이 하는 일은 무엇일까요? 하나 정도는 꼭 있어야 하는 걸까요? 그리고 크기는 어느 정도인 게 좋은 걸까요? 이 셋 모두 중요한 질문입니다. 그리고 알맞은 답을 고른다면 시스템 성능을 매우 큰 폭으로 향상시킬 수 있습니다.
쉽게 말해 스왑(SWAP) 파티션은 컴퓨터 메모리(RAM)가 흘러 넘칠 때 댐의 역할을 합니다. 메모리가 완전히 가득 차면 추가적으로 실행되는 프로그램은 메모리가 아닌 스왑 파티션에서 실행됩니다. 메모리 공간이 가득 차서 부족할 때 프로그램 실행이 가능하도록 예비 공간의 역할을 하는 셈이죠.
이 말을 들으면 실제 메모리를 추가하지 않고도 사용 가능한 메모리의 양을 쉽게 늘릴 수 있는 방법인 것처럼 들리지만, 실제로는 그렇지 않습니다. 메모리(RAM)는 실행할 프로그램을 올려두기에 최적인 하드웨어입니다. 메모리는 매우 속도가 빠른 반면, 스왑이 저장되는 하드디스크는 상대적으로 봤을 때 매우 느리기 때문입니다. SSD는 속도가 큰 폭으로 향상된 덕분에 성능 측면에서의 문제는 이전 보다 덜합니다. 하지만 SSD 조차도 메모리(RAM)를 대적하진 못합니다. 여기에 더해서, SSD 드라이브를 불필요하게 소모하지 않는 게 좋겠죠.
스왑 파티션의 가장 가까운 비유로는 윈도우의 가상 메모리 페이지 파일을 들 수 있습니다. 둘 사이에 기술적 차이점이 많기는 하지만 말이죠.
스왑 파티션은 메모리에 더 중요한 항목을 둘 여유 공간을 확보하기 위해, 일부 항목을 메모리에서 하드디스크로 옮기는데도 도움을 줍니다. 이런 특성은 거의 건드릴 일조차 없는 항목은 스왑 파티션으로 이동할 것임을 넌지시 나타냅니다.
사용이나 접근이 얼마나 드물어야 스왑에 저장할 지의 빈도는 설정을 조정할 수 있습니다. 이 설정은 스왑 활용도(Swappiness, 스와피니스)라고 불립니다. 스왑 활용도를 높이면 메모리 항목이 스왑 파티션에 이동할 확률이 높아집니다. 그리고 이 설정을 낮게 조정하면 항목이 스왑으로 이동할 확률이 낮아집니다.
마지막으로, 스왑 파티션은 시스템이 최대 절전 모드로 들어갈 때마다 메모리의 내용을 보관하는 장소로 사용됩니다. 이 말은 스왑 파티션이 없다면 리눅스가 최대 절전 모드로 들어갈 수 없다는 이야기가 되죠.
물론, 실제로 사용자가 최대 절전 기능을 사용하는 경우는 상당히 드물기 때문에 여러분께는 문제가 되지 않을 수 있습니다.
그럼, 이 모든 말이 의미하는 게 스왑 파티션이 필요하다는 걸까요? 결코 그렇지는 않습니다! 리눅스 시스템은 스왑 파티션 없이도 완벽하게 잘 동작합니다. 하지만 스왑 파티션을 하나 두면 몇 가지 장점이 있고, 단점도 있습니다.
장점:
* 메모리가 완전히 다 찼을 때 보조 공간 제공
* 빠른 속도의 메모리에서 더 많은 공간을 사용할 수 있게 드물게 필요한 항목을 옮길 수 있게 함
* 최대 절전 기능을 사용할 수 있게 해줌
단점:
* 스왑 파티션은 동적으로 크기를 조정할 수 없어 하드디스크의 공간을 차지함
* 하드디스크의 소모율을 높일 수 있음
* 반드시 성능을 향상시켜 주는 것은 아님 (아래를 보세요)
예? 스왑 파티션이 항상 성능 향상을 돕는 건 아니라 구요? 그럼 스왑 파티션을 사용하는 게 사용하지 않을 때보다 실제로는 더 좋지 않은 경우를 설명해 보겠습니다.
1GB의 메모리와 5,400rpm 속도의 하드디스크를 장착한 넷북에 리눅스를 설치해본 적이 있습니다. 메모리가 1GB만 있다 보니, 웹 브라우저의 탭을 몇 개 열어두는 것만으로 상당히 빨리 메모리가 찰 것이란 점을 짐작해 볼 수 있죠. 스왑 파티션은 메모리의 부족한 공간을 대신해 모든 탭을 열어놓을 수 있게 해줬습니다.
하지만 하드디스크의 5,400rpm 속도 때문에 병목 현상이 나타났습니다. 하드디스크가 너무 느렸고, 시스템은 계속해서 스왑 파티션에 접근하고 싶어했습니다. 때문에 넷북은 너무나도 버벅대며 매우 느리게 움직였습니다. 결국 모든 걸 닫아 메모리를 좀 확보하기 전까지는 거의 사용할 수 없는 지경에까지 이르렀지요.
스왑 활용도 설정은 메모리에 여유 공간이 생겼는데도 불구하고 스왑 파티션에 있는 모든 걸 다시 메모리로 되돌아 오게 해주진 못했습니다. 그 대신, 이들 중 많은 항목이 스왑 파티션에 남게 되어 계속해서 넷북이 버벅거리게 만들었습니다. 이 문제는 시스템 재시작으로만 해결할 수 있었습니다. 시스템이 종료 전에 스왑 파티션에 있는 모든 항목을 지워야 하기 때문에 이 역시도 시간이 한 동안 걸렸죠.
그래서, 전 이렇게 추천해 드립니다.
* 컴퓨터에서 최대 절전 기능을 활용하고 싶으시다면 스왑 파티션이 있어야 합니다. 스왑의 크기는 적어도 설치된 메모리 크기와 같아야 하고, 스왑 파티션에 이미 옮겨져 있는 여러 항목을 위해 추가적으로 10~25% 여유 공간을 더 줘야 합니다.
* 성능을 아주 조금 올리고 싶을 경우 (+최소 7,200rpm의 하드디스크가 장착된 경우), 원한다면 스왑 파티션을 추가할 수 있습니다. 하지만 설치된 메모리가 4GB 보다 적은 게 아니라면 그리 필요치는 않습니다. 스왑의 크기는 원하는 대로 지정해 주면 됩니다. 하지만 최대 절전 기능을 위해 스왑 파티션을 만든다면 저는 위에서 얘기한 것보다 더 크게 만들지는 않을 겁니다.
* 5,400rpm 하드디스크를 사용하고 있다면 병목 현상이 컴퓨터 상황을 악화시킬 것이라는 점 만으로도 스왑 파티션을 만들지 않는 게 좋습니다. 하지만, 스왑 파티션을 확실히 만들고 싶다면 위에서 언급한 것과 같은 크기로 파티션을 만들 수 있습니다. 그렇지만 스왑 활용도 값을 훨씬 더 낮은 걸로 바꿔주세요.
스왑 활용도를 바꾸려면, gksu gedit /etc/sysctl.conf 명령을 실행해 다재다능한 편집기인 지에디트(Gedit)로 변경할 설정 파일을 엽니다. 다음으로 "vm.swappiness"라고 적힌 부분을 찾아 그 값을 다른 걸로 바꿉니다 (10이 좋습니다). 혹시 이 값이 보이지 않는다면 파일의 맨 끝에 아래 줄을 추가해 넣으세요.
vm.swappiness=10
방금 입력한 값은 리눅스가 어느 시점에 메모리에서 스왑 파티션으로 활발하게 프로세스 옮기는 작업을 시작하게 할 건지를 지정합니다. 예를 들면, 10을 값으로 입력하면 메모리 사용률이 90%에 도달했을 때 프로세스를 옮겨야 함을 나타냅니다. 그리고 우분투의 기본 스왑 활용도 값인 60은 메모리 사용률이 40% 도달했을 때 프로세스를 옮겨야 함을 가리킵니다.
스왑 활용도에 대해 상세히 설명해야 할 다른 부분이 많이 있지만, 이런 것들은 모든 걸 더 복잡하게 만들 뿐이겠지요.
스왑 파티션은 시스템 성능에 큰 차이를 가져올 수 있습니다. 때로는 더 낫게, 그리고 때로는 더 나쁘게 말이죠. 글의 내용이 스왑 파티션을 이해하는 데 좋은 참고가 되었으면 좋겠습니다.
스왑 파티션에 대해 어떤 이야기를 들어 오셨나요? 사용할만한 가치가 있다고 생각하시나요? 댓글로 알려주세요!