Skip to content

Commit

Permalink
Feat : [OS] 클라우드 환경 속 swap 메모리 (#9)
Browse files Browse the repository at this point in the history
  • Loading branch information
hjch0211 authored Jan 1, 2025
1 parent 1462656 commit 1162484
Showing 1 changed file with 60 additions and 0 deletions.
60 changes: 60 additions & 0 deletions AWS/SwapMemoryInCloud.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,60 @@
## 개요

현재 운영중인 서비스가 메모리 4G의 클라우드 서비스 인스턴스에 올라가있습니다. 저희가 원래 8G램을 사용하다가 비용을 아끼기 위해 내린 것인데요. 하지만 아쉽게도 4G에서 빈번하게 OOM(Out Of Memory)가 발생하여 돈을 더 주고 다시 비싼 스펙으로 업그레이드를 했어야 했습니다...😭 그러던중, 사용하던 리눅스의 swap 영역이 0인것을 확인했습니다. 클라우드의 리눅스는 가상메모리를 사용안하나?라는 궁금증으로 정리하였습니다.

## 목표

1. 메모리 이해하기
2. 스레싱 이해하기
3. 클라우드 환경에서의 swap 메모리

## 1. 메모리 개요

### 1) (메인)메모리란

- 주기억장치라고도 불림
- 모든 프로그램은 실행되기 위해 메모리에 위치되어야 함 -> 프로그램 실행을 위해 존재
- 주로 DRAM으로 구성

### 2) 메모리 보호

- 현재 대부분의 현대 운영체제는 `시분할기법`을 이용하여 여러 프로그램을 동시에 실행
- 따라서 메모리에는 여러 프로그램들이 동시에 나눠가져 공간을 차지함
- 만약 프로그램 A가 다른 프로그램 B의 영역에 침범하게 된다면 얘기치 않은 오류가 발생할 수 있음
- 이를 방지하기 위해 메모리 속 프로그램 간 경계를 침범하지 않도록 레지스터들을 이용하여 관리
- bound register(경계)는 시작 주소, limit register(한계)는 주소 범위를 저장
- CPU는 해당 작업이 `범위를 넘어서면 메모리 오류와 함께 인터럽트를 발생`시킴

### 3) Memory Manage Unit

- MMU는 메모리 관리 유닛으로 메모리 관리를 담당함
- MMU는 fetch, placement, replacement를 통해 메모리를 관리
- fetch : 프로세스와 데이터를 메모리에 가져와 올림
- 요구 페이징 기법 : 메모리에 많은 프로세스들이 무작정 올라와져있으면 좀비 프로세스가 생성되거나 관리하기 복잡하게 됨. 현대 운영체제는 이 문제와 반응성을 고려하여, 사용자가 요구할 때 해당 페이지를 가져오는 방식을 사용
- placement : paging(고정 분할. 메모리를 일정하게 분리)이나 segmentation(가변 분할. 프로세스 크기에 맞게 배치)기법들을 사용하여 메모리에 프로세스 배치
- 세그멘테이션-페이징 혼용 기법 : 단편화 문제를 해결하기 위해 현대 운영체제는 이 기법을 사용
- 내부 단편화 : 페이징 기법을 통해 할당된 공간에 작은 크기의 프로세스가 들어가 내부에 공간이 남아있게 되는 문제
- 외부 단편화 : 세그멘테이션 기법을 통해 프로세스를 할당 후 나갔을 때, 남겨진 공간들에 그것보다 큰 프로세스를 할당하지 못하는 문제
- replacement : 메모리가 꽉 찼을 때 앞으로 사용하지 않을 프로세스를 찾아 디스크의 swap area로 내보냄
- 교체 알고리즘 : FIFO, 최적 근접 알고리즘 등을 사용하여 메모리에 어떤 페이지를 swap in할지 정함

### 4) 가상 메모리

- `가상 메모리는 물리적 메모리 공간 + 디스크의 swap area를 합친 가상의 공간`
- MMU의 swap-in과 swap-out을 통해 프로세스를 swap area에 넣는 작업을 통해 이론적으로는 가상 메모리는 무한한 크기의 공간을 가질 수 있음
- 가상 메모리의 관리는 MMU에 의해 수행됨

## 2. 스레싱

- 가상 메모리가 swap area를 사용한다고 해서 절대 만능이 아님. 디스크 I/O는 메모리보다 속도가 느려 성능을 저하시키므로. 이를 통해 스레싱이 발생할 수 있음
- thrashing : 요구된 페이지가 메모리에 없어 swap area 등으로 찾으러 가야되는 경우. 이 때 컴퓨터는 작업이 멈춘 것처럼 보이게 됨
- 결국 swap area를 과도하게 사용한다는 것은 애플리케이션 성능을 저하하게 됨

## 3. 궁금증 : 클라우드 환경의 swap 메모리

- 일부 배포판 리눅스의 경우 swap 메로리가 설정이 안된 경우가 있음 -> 이는 swap 메모리 사용으로 인한 성능 저하를 고려한 것
- 그렇다고하면 클라우드 환경에서 메모리가 부족한 현상을 겪고 있을 때, 메모리를 증가하는 스케일 업을 하는 것이 좋을까 아니면 swap 메모리를 사용하는 것이 좋을까?
- 클라우드 환경에서는 추가적인 고려가 필요하다. Red Hat 블로그에 따르면, 추가 외부 스토리지를 구매하여 swap 메모리를 사용하면 스토리지에 따라 메모리 성능이 좌우될 수 있으며 스토리지 변경에 따라 매니징과 계획이 필요하다. 추가로 자동화를 위해 쿠버네티스 등을 도입하게 되는데, 이 때 메모리 계산에도 혼동을 준다고 한다.
- 결론 : 가상 메모리의 swap을 통해 메모리 공간의 한계를 극복할 수 있다. 하지만 클라우드에서의 인스턴스는 필요에 따라 스펙을 변경할 수 있는 오토 스케일업을 자주 사용하게 된다. swap을 사용할 경우, 추가적인 고려와 성능 저하의 문제로 swap의 사용은 선택이 된다.

\*출처 : 쉽게 배우는 운영체제, [Analyzing cases for and against setting swap space on cloud instances](https://www.redhat.com/en/blog/cloud-swap)

0 comments on commit 1162484

Please sign in to comment.