티스토리 뷰
목차
어제오늘 JVM의 메모리 구조를 공부하다가 속도와 용량, 일처리 속도의 최적화에 대해
조금 더 알고 싶어서 찾아보게 되었다.
당연하게도 관련 자료가 매우 많고 논문까지 쌓여있는(...) 수준이라 맛보기의 맛보기 정도만 정리하고 가려고 한다.
Memory?
메모리는 크게 나누면 Primary Memory와 Secondary Memory로 구분되며, 각 특징은 아래와 같다.
Primary Memory | Secondary Memory |
CPU에 직접 접근이 가능함 | CPU에 직접 접근이 불가능함 |
Secondary Memory에 비해 상대적으로 속도가 빠름 | Primary Memory에 비해 상대적으로 속도가 느림 |
임시적(temporary) 메모리이며 일반적으로 휘발성 | 영구적 메모리이며 비휘발성 |
용량 대비 가격이 상대적으로 비쌈 | 용량 대비 가격이 상대적으로 저렴함 |
추가적으로 위 그림에서 표시한 것처럼
Register(CPU 연산의 일부) > Cache > Main Memory(DRAM) >> Secondary Memory
순으로 속도가 빠르다.
계속해서 Primary Memory의 종류와 특징에 대해 알아보자.
Primary Memory
Register
Register는 CPU 안에 연산을 위해 내장된 메모리이다.
모든 컴퓨터 부품중 가장 빠른 CPU에 내장되어있기 때문에 당연히 속도도 메모리 중 가장 빠르다.
데이터와 명령어를 저장할 뿐 아니라 데이터를 처리하는 역할도 맡는데,
2022년 기준 현대적인 프로세서는 메인 메모리에서 레지스터로 데이터를 옮겨와 처리한 후
그 결과를 다시 메인 메모리에 저장하는 로드-스토어 설계를 사용하고 있다고 한다.
Cache
캐시는 속도가 매우 빠른 CPU와 그에 미치지 못하는 메인 메모리 사이의 병목현상을 해결하는 버퍼 역할을 한다.
간단하게 말하면 CPU가 자주 사용할 것으로 예측(!)되는 데이터를 메인 메모리로부터 미리 로딩해두어 시스템 속도를 높인다.
이를 위해 재미있게도 적중률(Hit Ratio)라는 개념이 등장하며 캐시 성능의 지표로 활용된다.
CPU는 메인 메모리에서 데이터를 탐색하기 전 캐시를 먼저 확인하도록 되어있다.
추가로 캐시는 역할과 목적에 따라 다음과 같이 구분된다.
- L1 Cache : 프로세서와 가장 가까운 캐시, 속도를 위해 I$와 D$로 나뉜다.
- Instruction Cache(I$) : 메모리의 TEXT영역 데이터를 다루는 캐시
- Data Cache(D$) : TEXT영역을 제외한 모든 데이터를 다루는 캐시
- L2 Cache : 용량이 큰 캐시, 크기를 위해 L1 캐시처럼 나누지 않는다.
- L3 Cache : 멀티 코어 시스템에서 여러 코어가 공유하는 캐시
- L1 → L2 → L3 → Main Memoey 순으로 탐색
Locality
앞서 캐시의 성능은 CPU가 필요로 하게 될 자료를 얼마나 정확히 예측하느냐에 달렸다(적중률)는 언급을 했다.
이를 최대한으로 끌어올리기 위한 예측에 사용되는 것이 바로 지역성의 원리이다.
여기서 지역성이란 사용자는 정보에 균일하게 접근하는 것이 아닌 특정 부분에 집중해 접근하는 특성을
가졌다는 것을 의미한다. 지역성은 다음의 두 가지로 나뉘어진다.
- 시간 지역성 - 최근 접근했던 데이터에 다시 접근하는 경향을 말한다. 반복문의 인덱스가 그 예가 된다.
- 공간 지역성 - 최근 접근했던 데이터의 주변 공간에 다시 접근하는 경향을 말한다.
하나의 배열의 다른 부분에 반복적으로 접근하는 경우가 그 예가 된다. - 순차적 지역성 - 분기가 없는 순차적 실행의 경우 다음 순서의 데이터가 사용될 확률이 높다.
Cache Line
캐시 라인은 쉽게 말해 목적에 맞게 데이터를 저장하되, set이나 map과 같은 특정 자료구조를 이용해
메모리 주소를 함께 저장해 탐색 속도를 극대화한 묶음 혹은 블록이라 할 수 있다.
매핑 방법에 따라 Direct, Full Associative, Set Associative 등으로 나뉘며,
S3 버킷의 자료 저장 방식과 비슷하다는 인상을 받았다.
Structure
캐시는 보통 반응속도가 빠른 SRAM(Static Random Access Memory)로 구성되며,
키가 주어지면 바로 값으로 접근할 수 있는 해시 테이블과 같은 구조로 이루어져 있다.
즉 다음에 사용할 것으로 예상되는 데이터를 가지고 있으면서, O(1)의 속도로 해당 데이터에 접근할 수 있는 것이다.
Main Memory
여기서 말하는 메인 메모리란 흔히 말하는 (D)RAM을 이야기한다.
RAM은 일반적으로 모든 데이터에 접근하는 시간이 동일하게 걸리는 형태이다.
보조 기억장치와 CPU 연산과정의 중간에 위치하며, 보조 기억장치에 비해 월등히 빠른 속도를 보유한다.
CPU가 현재 처리 중인 데이터나 명령을 일시적으로 보관하는 휘발성 메모리이며, 따라서 컴퓨터의 전원이 내려가면
저장되었던 내용도 전부 사라진다.
Register vs. Cache
- 공통점 - CPU의 명령어와 데이터를 저장하는 역할
- 차이점
- Register > Cache 순으로 속도 차이가 난다.
- 레지스터는 CPU에 내장되어있으며 연산 처리를 위한 데이터를 저장한다.
캐시는 CPU와 별도로 존재하며, CPU와 메인 메모리의 속도 차이를 줄여주기 위한 역할을 한다.
Cache vs. Main Memory
- 공통점 - 데이터를 CPU 가까이 위치시켜 지연시간을 줄이는데 그 목적이 있으며, 대부분 휘발성이다.
- 차이점
Cache | Main Memory | |
목적 | 자주 쓰이는 데이터를 미리 저장한다. | 현재 사용되고 있는 데이터를 저장한다. |
속도 | Main Memory에 비해 빠르지만 Register에 비해 느리다. | Cache에 비해 느리지만 Secondary Memory에 비해 빠르다. |
용량 | 작은 편(MB 단위) | 큰 편(GB 단위) |
구조 | 복잡함(트랜지스터 수 많음) | 단순함(트랜지스터 수 적음) |
용량 대비 가격 | 상대적으로 비쌈 | 상대적으로 저렴함 |
'Development > Technical Interview' 카테고리의 다른 글
[면접 준비 - Java]Java 8 vs. Java 11 (8) | 2022.12.12 |
---|---|
[면접 준비 - Spring]Authentication, Authorization (2) | 2022.12.12 |
[면접 준비 - Spring]Spring Security (2) | 2022.12.11 |
[면접 준비 - Java]JVM 구조(2), Runtime Data Area (0) | 2022.12.11 |
[면접 준비 - Network]Polling, WebSocket(+STOMP), SSE (2) | 2022.12.10 |
[면접 준비 - Cloud]AWS EC2, S3, RDS, 그리고 (1) | 2022.12.09 |
- Total
- Today
- Yesterday
- 유럽여행
- 스프링
- 세계일주
- RX100M5
- 자바
- 스트림
- 백준
- BOJ
- 지지
- 야경
- 파이썬
- 세계여행
- 동적계획법
- spring
- 면접 준비
- 리스트
- 맛집
- 알고리즘
- Backjoon
- Algorithm
- 칼이사
- 유럽
- 세모
- 중남미
- 기술면접
- 남미
- a6000
- Python
- 여행
- java
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |