리눅스

리눅스 SWAP 파티션 영역의 용도와 필요성

윈도우에 페이징 파일 관리가 있다면 리눅스에서는 스왑(SWAP) 파티션 영역이 있습니다. 이러한 파티션 영역은 주로 운영체제를 설치할 때 지정하게 됩니다.

 

 

리눅스 SWAP 파티션 기능


일단, 스왑은 쉽게 말해서 시스템 메모리가 부족할 경우 하드 디스크의 일부 공간을 활용하여 작업을 계속 진행할 수 있도록 돕는 영역입니다.

스왑 영역을 사용하게되면 메모리(RAM)에 처리되어야 할 작업이 하드 디스크에서 처리되기 때문에 프로그램 실행이나 명령어 처리에 있어서 인터럽트가 발생하지 않는다는 이점이 있습니다. 물론 하드 디스크 영역을 사용하기 때문에 RAM의 빠른 처리 속도에 미치지 못하는 수준에서 작업이 진행되므로 스왑 영역이 많다고 속도가 빨라지지는 않습니다. 언제까지나 스왑 영역은 메모리 공간의 부족 방지를 위한 임시 방편이기 때문에 많은 작업이 필요하다면 RAM 용량을 증가시키는 것이 올바른 답이 될 것입니다.

 

운영체제의 절전 기능은 컴퓨터 전원이 꺼진 상태에서도 현재 운영체제 작업 현황을 그대로 메모리에 저장하여 추후 전원을 켰을 때에도 작업을 지속할 수 있도록 합니다.

절전에는 일반 절전최대 절전 방식이 있습니다. 일반 절전은 절전 모드로 전환하는 속도가 빠른 장점은 있지만 전원이 완전히 차단되면 메모리에 있는 내용이 그대로 사라져버리기 때문에 예기치않은 상황에 대한 복구 효율이 떨어집니다. 반면 최대 절전(Hibernation 절전이라고도 함)은 전환 시 다소 시간이 소요되지만 작업 내용을 메모리에 내용을 저장하지 않고 하드 디스크 영역에 작성하여 전원이 차단되어도 작업 내용이 사라지지 않습니다. 최대 절전 모드는 하드 디스크의 비휘발성 특징을 이용한 일종의 트릭이며 Windows의 최대 절전 모드에서도 이와 같은 방법을 사용합니다.

리눅스의 스왑 영역은 위 최대 절전 모드에서의 하드 디스크 영역이기도 합니다. 스왑 영역에 메모리 내용을 저장하기 때문에(이는 메모리의 전체 크기보다 스왑 영역이 커야하는 이유이기도 합니다.) 안전하게 작업 내용을 저장할 수 있게 됩니다.

 

또한 스왑 영역은 메모리(RAM)에서 사용되어야 하는 중요한 작업을 위해 메모리에서 하드 디스크로, 하드 디스크에서 메모리로 영역 간 이동을 처리하기도 합니다.

 

 

SWAP 영역 필요성


대부분의 리눅스 운영체제에서는 SWAP 파티션 생성을 권장하고 있습니다. 그러나 아래 경우에 따라 예외적으로 SWAP을 지정하지 않거나 적은 크기로 지정해야합니다.

 

먼저, SWAP 파티션이 없어도 운영체제가 정상적으로 실행됩니다. 때문에 파티션을 굳이 할당하지 않아도 큰 문제는 되지 않습니다. 또한 서버를 운영하기 위해서라면 스왑 영역은 가급적 자주 사용되지 않는 것이 좋습니다.  따라서 자신의 운영체제 사용 환경에 따라서 스왑 영역의 중요도가 달라질 수 있음을 유의해야 합니다.

그리고 SWAP 영역에서 읽고 쓰는 작업은 하드 디스크에서 이루어지기 때문에 하드 디스크의 실질적인 성능과 용량에 영향을 미칠 수 있습니다. 따라서 RAM 용량이 과하게 적거나 SWAP 영역의 사용 빈도가 과하게 많을 경우 오히려 성능에 지장이 생길 수도 있는 것입니다.

SWAP 영역을 얼마나 자주 활용할 것인지에 대한 빈도를 스와피니스(Swappiness)라고 지칭합니다. 말 그대로 스와핑 활용도에 따라 SWAP 영역의 크기와는 상관없이 얼마나 RAM 또는 SWAP에 먼저 의존하는가에 대한 중요도를 정의할 수 있습니다.

 


▲ SWAP 파티션 영역을 설정하는 예시. CentOS 7

 

 

SWAP 영역의 크기 지정


SWAP 파티션 영역의 크기는 대개 메모리(RAM) 크기의 2배 또는 그 이상으로 지정하는 것을 권장하고 있습니다. 예를 들어 RAM 용량이 2 GB인 경우의 SWAP 영역 크기는 4 GB가 적당합니다.

만약 이러한 권장사항이 아닌 크기로 설정한다면, 최소한 256 MB 이상으로 지정해야 합니다.

CentOS 7 기준으로 디스크 파티셔닝을 하는 예시는 아래 문서를 참고해보시는 것도 좋습니다.

 

JooTC

안녕하세요. 테크놀로지에 관심이 많은 블로거입니다.

Recent Posts

[iOS] Xcode ‘You do not have required contracts to perform an operation’ 해결

Xcode에서 iOS 애플리케이션을 빌드(Archive)하고 App Store Connect에 앱을 업로드하는 도중, 아래와 같은 에러가 발생하면서 더…

2주 ago

[안드로이드] INSTALL_FAILED_INSUFFICIENT_STORAGE 해결

INSTALL_FAILED_INSUFFICIENT_STORAGE 문제 안드로이드 스튜디오에서 에뮬레이터를 실행하고 개발중인 애플리케이션을 실행하려 하면 로그 창에 아래와 같이 표시되면서…

6개월 ago

Zalgo 텍스트와 이를 방지하는 방법

인터넷 커뮤니티 사이트에서 게시글이나 댓글에 간혹 장난을 목적으로 작성된 특이한 글자를 볼 수 있습니다. 위…

8개월 ago

리눅스 kill, killall 명령어 – 특정 프로세스 종료하기

리눅스 명령어 - kill, killall 리눅스 kill 명령어는 특정 프로세스를 종료해주는 명령어입니다. 백그라운드에서 실행되고 있는…

8개월 ago

JavaScript typeof null이 ‘object’인 이유

JavaScript는 역사가 긴 스크립트 프로그래밍 언어입니다. 세월이 흐르면서 많은 자바스크립트 표준이 만들어졌고, 현재는 많은 문법적…

8개월 ago

Mocha Error: Resolution method is overspecified. 해결 방법

NodeJS 테스트 프레임워크인 Mocha는 비동기 테스트를 지원합니다. 간혹 특정 테스트 스크립트를 작성하고 실행하면 아래와 같이…

8개월 ago