본문 바로가기
OS 운영체제/LINUX

swap (가상 저장 공간)

by yororing 2024. 4. 4.

00 용어 정리

  • 공간 = 메모리 
  • swap (v.): to give in trade; exchange 바꾸다, 서로 교환하다

01 swap이란

1. 정의

  • Swap: Linux 기반 OS에서 가상 메모리 (virtual memory)로 작동하는 저장 장치 (예: HHD, SSD, 가상 저장 장치)의 전용 공간/메모리
  • 시스템의 사용 가능한 메모리 부족 시 물리적 RAM (random access memory)을 보충하는 데 사용됨
  • swap 공간/메모리를 통해 OS는 덜 자주 사용되는 데이터를 RAM에서 swap 공간/메모리로 이동하여 더 중요/자주 접근하는 데이터를 위해 RAM 공간 확보 가능
  • 아주 쉬운 설명: 물리적인 RAM(메모리)이 부족할 때 사용할 수 있는 디스크 공간

2. 형태

  • swap은 partition 또는 file 형태일 수 있음
형태 설명
swap partition 저장 장치의 전용 파티션
swap file 기존 파일 시스템 내의 파일

3. 장점

  • 메모리 부족 상황 시: 시스템의 RAM 부족 시 swap 공간은 덜 중요한 데이터를 일시적으로 저장하여 더 중요한 데이터를 실제 메모리에 저장 가능
  • 최대 절전 모드: 최대 절전 모드에서 시스템은 RAM의 전체 내용을 swap 공간에 저장한 다음 전원을 끔. 시스템이 다시 켜지면 swap 공간의 내용이 RAM으로 복원되고 시스템은 이전 상태를 재개함

4. swap 공간의 개념

  • Swap 공간은 Linux 커널 메모리 관리 하위 시스템에서 제어하는 디스크 영역. 커널은 메모리 비활성 페이지를 보관하여 시스템 RAM을 보완하기 위해 swap 공간을 사용함. 시스템의 가상 메모리에는 결합된 시스템, RAM, swap 공간이 포함됨
  • 시스템의 메모리 사용량이 정의된 한도를 초과할 경우 커널은 RAM에서 프로세스에 할당된 유휴 메모리 페이지를 검색함. 커널은 유휴 페이지를 swap 공간에 쓰고 RAM 페이지를 다른 프로세스에 다시 할당함. 프로그램에서 디스크의 페이지에 접근해야 하는 경우 커널은 메모리의 다른 유휴 페이지를 찾아 디스크에 쓴 다음 swap 공간에서 필요한 페이지를 불러옴
  • swap 공간이 디스크에 상주하므로 swap은 RAM에 비해 속도가 느림. swap 공간은 시스템 RAM을 늘리는 데 사용되지만 워크로드에 비해 RAM이 부족한 경우 swap 공간을 지속 가능한 해결책으로 간주해서는 안되며, 물리적 메모리를 늘리는 것이 좋음 

5. swap 공간 계산

  • 관리자는 시스템의 메모리 워크로드에 따라 swap 공간의 크기를 조정해야 함
  • 애플리케이션 벤더가 swap 공간 계산에 대한 권장 사항을 제공하는 경우도 있음
  • 실제 메모리 총량에 따른 지침/권장 사항:
RAM swap 공간 최대 절전 모드 시 swap 공간
> 2 GB RAM * 2 RAM * 3
2 - 8 GB RAM과 동일 RAM * 2
8 - 64 GB 4 GB < RAM * 1.5
64 GB < 4 GB < 권장되지 않음
  • laptop 및 desktop 최대 절전 모드 기능은 시스템의 전원을 끄기 전에 swap 공간을 사용하여 RAM 내용을 저장함
  • 시스템을 다시 키면 커널이 swap 공간에서 RAM 내용을 복원하므로 완전한 부팅 불필요
  • 해당 시스템의 경우 swap 공간이 RAM 크기보다 커야 됨

02 swappiness (vm.swappiness)

1. swappiness란

  • swap 메모리/공간 활용 수준 값
  • Linux에서 kernel 속성 중 하나로 swap 메모리 활용 수준 조절 가능
  • 어떻게? swappiness의 값을 설정
  • 공식 문서 정의 (Documentation for /proc/sys/vm/*)
    • swappiness:
      • This control is used to define how aggressive (적극) the kernel will swap memory pages  
      • value range: 0 ~ 100
      • Higher values → higher aggressiveness (increases the amount of swap); lower values → lower aggressiveness (decreases the amount of swap)

2. swappiness 값의 범위

  • 0 ~ 100 (기본값 = 60)
swap 메모리 활용 수준 설정값 설명
vm.swappiness = 0 swap 비활성화 (사용 안 함)
vm.swappiness = 1 swap 사용 최소화
vm.swappiness = 60 (기본값)
vm.swappiness = 100 적극적으로 swap 사용

3. swappiness 설정값 확인하기

# sysctl vm.swappiness		# 방법 1
vm.swappiness = 1			# 출력값
# sysctl -a | grep swappiness	# 방법 2
vm.swappiness = 1			# 출력값
# cat /proc/sys/vm/swappiness	# 방법 3
1					# 출력값

4. swappiness 설정 방법

1) 즉시 (임시) 적용

  • 특징: 재부팅 시 원상복구 됨
# sysctl [-w] vm.swappiness = n		# 방법 1
# sysctl vm.swappiness = 1			# 예 
# sysctl -w vm.swappiness = 1			# 예 

# echo n > /proc/sys/vm/swappiness	# 방법 2
# echo 40 > /proc/sys/vm/swappiness		# 예

2) 영구 적용

# vi /etc/sysctl.conf
아래의 문장 추가 혹은 기존 값 수정
vm.swappiness = 1

# sysctl -p	# 설정 재로드 혹은 장비 재기동

2. swap 명령어 사용

  • swap 공간 활성화 명령어 실행 전 수행해야 하는 것:
    • 파일 시스템 유형이 linux-swap인 파티션 생성 (parted, fdisk 등 명령어 사용)
    • 장치에서 swap 시그니처 저장 (mkswap 사용)

1) swap 활성화

# swapon /dev/sda5

2) swap 비활성화

# swapoff /dev/sda5

3) 장치 또는 파일에 swap 영역 설정

# mkswap /dev/sda5

4) 현재 활성화된 swap 공간 표시

# swapon --show

5) 시스템에서  사용 가능한 물리적 메모리, swap 메모리의 총량 확인

    • MB, GB 형식의 물리적 및 swap 메모리 사용량을 보여줌
# free -h

6) 지정된 크기로 미리 할당된 swap 파일 생성

  • /swapfile이라는 이름을 가진 2GB swap 파일 생성
# fallocate -l 2G /swapfile

 

7) dd: 지정된 파일 복사 및 변환하여 swap 파일 생성

  • /dev/zero에서 데이터를 복사하여 /swapfile이라는 이름의 2GB swap 파일 생성
# dd if=/dev/zero of=/swapfile bs=1M count=2048

8) swap 파일 권한 변경

  • /swapfile의 권한을 root 사용자만 읽기 + 쓰기 가능하도록 설정
# chmod 600 /swapfile

9) swappiness 설정값 지정 (임시)

  • swappiness 값은 10으로 설정
# sysctl vm.swappiness=10

참조

  1. https://www.merriam-webster.com/dictionary/swap 
  2. https://easyitwanner.tistory.com/149
  3. https://github.com/torvalds/linux/blob/v5.0/Documentation/sysctl/vm.txt#L809 
  4. https://foxybearkim.tistory.com/16
  5.  
  6.  

 

'OS 운영체제 > LINUX' 카테고리의 다른 글

/etc/passwd (사용자 정보 파일)  (0) 2024.04.08
find (파일 검색 명령어)  (0) 2024.04.05
tar (archive 파일 작업 명령어)  (0) 2024.03.28
scp (서버간 파일 복사 명령어)  (0) 2024.03.20
Linux 디렉토리 구조  (0) 2024.03.20