[TIL CS] 디스크와 메모리 처리 방식 이해하기
초당 입력 및 출력 건수 IOPS에서의 횟수 기준 알기
부족한 CS 지식 채워넣기 : 디스크와 메모리 처리 방식 이해하기
스토리지 강의를 들으면서 IOPS를 보여주며 이정도의 처리량이 가능하다는 설명들을 보다가 읽기 및 쓰기 처리량이라는건 아는데 어떤 건수를 기준으로 잡는건지 질문이 생겼다. 찾아봤을 때 4KB를 기준으로 1건으로 계산하며 60,000 IOPS는 4kb * 60,000 을 1초에 처리 가능하다는 의미라고 알게 되었다.
그럼 왜 4KB인지 또 궁금해진다. CPU, 메모리, 디스크가 서로 주고받을 때 가장 효율적인 단위가 실험적으로 4KB였기 때문이라고 한다. 그래서 이번 주제는 CPU, 메모리, 디스크의 정보 처리 방식 개념에 대해서 가볍게 공부해보려고 한다.
메모리와 디스크
흔히 알듯이 메모리는 기억하는 공간, 디스크는 오래 보관하는 창고 역할을 한다. 그렇기에 메모리는 빠르게 데이터를 처리하지만 전원이 꺼지면 휘발된다. 반대로 디스크는 데이터 처리가 느리지만 전원이 꺼져도 저장되어 있다. 그래서 컴퓨터는 중요한 데이터를 디스크에 저장하고, 실행하거나 처리할 때만 메모리로 옮겨 빠르게 작업한다.
데이터 처리 단위
운영체제는 4KB를 한 페이지(메모리의 읽고 쓰기 최소 단위)로 보고, 디스크도 4KB 블록(여러 페이지 묶음)을 한 단위로 생각한다. IOPS의 한 단위는 4KB 블록 하나를 읽거나 쓰는 것을 말한다. 그러니까 IOPS는 속도라기보다 작업 건수에 가깝다.
메모리에서 일어나는 일
프로그램을 실행하면 운영체제는 프로그램을 통해 비어있는 메모리에 기록한다. 이때 기록된 위치가 가상 메모리 주소이다. 실제 메모리는 아니지만 프로그램은 이 주소를 보고 데이터를 읽고 쓴다. 이 주소를 숫자들로 관리하기 어려우니 메모리를 작은 조각들로 나눠 관리하는데 이것이 페이지(Page)이고 한 페이지 단위가 4KB라는 것이다.
페이지와 캐시의 차이
자주 나오는 개념이지만 페이지와 캐시는 뭐가 다를까? 페이지는 운영체제가 메모리를 관리하기 위한 단위이다. 즉 공간의 분할 방식이다. 반면 캐시는 속도를 높이기 위한 임시 저장소이다. CPU가 계산하려고 메모리에서 데이터를 가져오면 그걸 가까이 두기 위해 캐시에 복사한다.
디스크 종류
메모리가 부족하거나 데이터를 처음 읽어올때는 디스크에서 읽어온다. 디스크의 종류는 흔히 알려진 HDD, SSD로 HDD의 경우 기계식이라 느리고, SSD는 전자식이라 빠르다. 물론 메모리보다는 느리다. 이러한 디스크에서 계속 읽는것은 느리기 때문에 미리 메모리에 복사해 둔다.
미리 메모리에 복사하는 중간 단계 – 페이지 캐시와 버퍼 캐시, 그리고 스왑 공간
운영체제는 디스크 접근을 줄이고 시스템 성능을 높이기 위해, 디스크와 메모리 사이에 중간 계층의 완충장치(cache)들을 둔둔다. 대표적으로 페이지 캐시(page cache), 버퍼 캐시(buffer cache), 그리고 스왑 공간(swap space)이 존재한다.
페이지 캐시 (Page Cache)
- 파일 내용을 메모리에 페이지 단위로 저장해두는 캐시
- 운영체제가 디스크에서 읽어온 데이터를 페이지 프레임에 복사해두고 이후 동일한 파일을 다른 프로세스가 요청하면 디스크로 가지 않고 메모리에서 바로 제공
- 운영체제의 메모리 관리자는 각 페이지가 물리 메모리(페이지 프레임)에 있는지, 아니면 디스크(원본 파일 또는 스왑 공간)에 있는지를 추적한다. 만약 어떤 프로세스가 파일 데이터를 요청했는데 해당 데이터가 이미 페이지 캐시에 있다면, 디스크 접근 없이 바로 메모리에서 읽어 제공하여 성능을 높인다.
버퍼 캐시 (Buffer Cache)
- 파일 시스템 입출력의 관점에서 작동하는 캐시
- 디스크에 데이터를 쓰기 전, 일시적으로 메모리 내 커널 공간에 데이터를 저장해둔다.
- 일정량이 모이거나 타이밍이 되면 한 번에 디스크로 flush(쓰기)
- 과거에는 버퍼 캐시와 페이지 캐시가 명확히 분리되어 있었으나,
최근에는 대부분의 OS에서 이 둘을 Unified Buffer Cache(통합 캐시)로 관리
이 방식에서는 버퍼 캐시 영역을 따로 두지 않고 페이지 캐시 공간을 필요에 따라 재활용
스왑 공간 (Swap Space)
- 메모리가 부족해졌을 때, 사용되지 않는 페이지를 디스크의 스왑 공간에 임시로 저장해두는 영역
- 이후 다시 필요해지면, 스왑에서 메모리로 다시 불러오게 된다.
- 참고로 코드 영역(예: 실행파일의 읽기 전용 부분)은 스왑 공간으로 내려가지 않는다 이미 디스크의 실행파일에 존재하기 때문에 필요하면 다시 거기서 읽어오면 되기 때문 이런 방식은 파일의 내용을 메모리 주소 공간에 직접 매핑하여, 파일 접근을 메모리 접근처럼 다루는 memory-mapped I/O(메모리 맵 입출력)의 대표적인 예시다
이렇게 운영체제는 메모리와 디스크 사이에 중간 캐시 계층을 두고 속도는 최대한 빠르게 유지하며, 메모리 용량도 유연하게 관리하려고 한다. 특히 버퍼 캐시와 페이지 캐시가 통합된 현대 시스템에서는 하나의 캐시 영역을 상황에 맞게 다양한 목적으로 사용할 수 있게 되어 더욱 효율적이다.
CPU 캐시 – 메모리보다 더 빠른 공간
메모리도 빠르긴 하지만 CPU 입장에서는 여전히 느리다. 그래서 CPU도 자기 안에 캐시를 가지고 있다.
- L1 캐시: 가장 작고, 가장 빠름. CPU 안에서 바로 사용
- L2 캐시: 조금 더 크고 느림. 여전히 빠름
- L3 캐시: 여러 CPU 코어가 공유. 가장 크지만 가장 느림 (그래도 RAM보단 빠름)
CPU는 속도에 따라 L1 → L2 → L3 → RAM → 디스크 순서로 데이터를 꺼내 쓰려고 한다.
내용 요약
디스크와 메모리. 핵심적인 내용은 이해하고 있었으나 구체적으로 어떤 구성으로 이뤄졌는지, 이에 대한 용어가 불분명했었다. 내용을 찾아보며 정리하면서 CPU가 캐시(L1,L2,L3)로, 메모리가 페이지 캐시, 버퍼 캐시, 스왑 공간으로 구분되어 각 중간 단계에 어떻게 처리되고 있는지 감을 찾아가는 길이었다. 위의 내용에서 핵심적인 내용은 다음과 같다.
구분 | 개념 요약 | 목적/용도 | 기본 단위 | 저장 위치 | 주요 대상 |
---|---|---|---|---|---|
페이지 (Page) | 메모리 공간을 일정 단위(보통 4KB)로 나눈 조각 | 가상 메모리 주소 관리 | 4KB | RAM (메모리) | 프로세스 주소 공간 |
페이지 캐시 | 디스크에서 읽은 파일 내용을 페이지 단위로 메모리에 저장 | 읽기 속도 향상 (재사용) | 4KB | RAM (페이지 프레임) | 파일 데이터 (읽기용) |
버퍼 캐시 | 디스크에 쓸 데이터를 커널 공간에 임시 저장 | 쓰기 효율 향상, I/O 병합 | 4KB 이상 | RAM (커널 버퍼) | 파일 시스템 (쓰기 중심) |
Unified Buffer Cache | 페이지 캐시와 버퍼 캐시를 통합하여 하나의 메모리 공간에서 관리 | 메모리 효율, 관리 일원화 | 4KB | RAM (공유 영역) | 읽기/쓰기 모두 |
스왑 공간 (Swap) | 사용하지 않는 페이지를 디스크에 임시 저장 | 메모리 부족 시 보조 메모리 역할 | 페이지 단위 | 디스크 (Swap 영역) | 비활성화된 프로세스 메모리 |
IOPS | 초당 입출력 작업 수 (읽기 또는 쓰기 한 번 = 1 IOPS) | 스토리지 성능 측정 지표 | 4KB 기준 | 디스크 또는 스토리지 | I/O 요청 (읽기/쓰기 건수) |
CPU 캐시 (L1~L3) | CPU 내부의 초고속 임시 저장 공간 | 계산 성능 향상, 메모리 접근 최소화 | 수십~수백 B | CPU 내부 | 연산 대상 데이터/명령어 |
이렇게 하드웨어의 구성을 이해하고 있어야 클라우드, VM 환경에서의 데이터 처리 (데이터베이스나 분산 처리 환경에서의 데이터 웨어하우스 등)를 잘 이해할 수 있을 것 같아서 이렇게 하나씩 정리해보려고 한다. 앞으로도 새로운 질문이 나오면 그 질문에 기반이 되는 CS 지식을 이렇게 정리해볼 것이다. 끝!