[CPU] L1, L2, L3 캐시

LDB·2025년 1월 12일
0

CS 지식

목록 보기
4/7

작성계기

예전에 JPA의 이론과 관련하여 글을 작성한 적이 있었다. 거기서 JPA의 특징 중의 하나가 2차 캐시를 사용할 수 있다는 점이었다. 그래서 2차 캐시를 사용하면 동시성 문제를 해결할 수 있다. 라고만 알았지 정확히 L2 캐시가 무엇인지 그리고 어째서 L2 캐시를 쓰면 동시성 문제를 해결할 수 있는지 의문을 가지게 되었고 그래서 L2 캐시와 함께 L1, L2, L3 캐시에 대해 알아보려고 한다.

캐시(cache) 메모리


위의 이미지처럼 윈도우에서 작업 관리자를 실행하고 성능 탭으로 넘어가면 이렇게 본인 PC의 하드웨어 스펙을 알 수 있는데 여기에 L1, L2, L3 캐시의 존재를 확인 할 수 있다.

그렇다면 캐시메모리는 왜 만들어졌는가 알아보면 "속도가 빠른 장치와 느린 장치 사이에서 속도 차에 따른 병목 현상을 줄이기 위한 범용 메모리" 라고 이야기하고 있다.

간단히 정리하자면 CPU의 성능이 높아지면서 메인메모리와의 속도 차이가 크게 벌어지게 되었고 CPU와 메인메모리 사이의 데이터 접근시간을 줄이기 위해 만들어졌다, 이러한 병목현상을 막기 위해 CPU 내부에 캐시를 2~3개씩 만들어둔다.

CPU 병목현상
CPU가 컴퓨터 시스템 내의 구성요소로 전체 성능을 제한할 때 발생하는 문제로 보통 CPU를 포함한 하드웨어의 구성이 균형적이지 않을 때 발생한다. 대표적으로 CPU의 성능과 GPU의 성능의 차이가 많이날때 일어난다.


CPU에서 캐시메모리 구조

참고할 점은 이것은 보편적인 CPU구조로 모든 CPU가 위와 같은 구조를 띄진 않는다. 경우에 따라 L3 캐시가 없거나 아니면 L4 캐시를 도입하는 CPU도 존재한다. 또한 어떤 CPU는 L2 캐시까지 CORE영역에 포함되어있는 CPU도 존재한다.

(자료를 찾던중 L2캐시가 CORE에 포함되어있는 것도 있고 별도로 분리되어있는 이미지도 있었는데 해당 게시글에서는 하나의 CORE에 포함하는걸로 했다.)


L1 캐시메모리

  • L1캐시는 일반적으로 CPU 칩안에 내장되어 데이터 사용/참조에 가장 먼저 사용
  • 그래서 L1캐시는 명령어캐시와 데이터캐시로 나뉜다.
  • 자주 사용하는 데이터나 명령어를 저장한다.
  • CPU코어와 가장가깝기 때문에 데이터를 우선적으로 L1캐시에서 찾고 찾지 못한다면 L2캐시로 이동한다.

L1 i-cache : Instruction즉 명령어를 처리하는 캐시로 보통 공간 지역성이 높다.

공간 지역성 : 실제 프로그램이 참조된 주소와 인접한 주소의 내용이 다시 참조되는 특성

L1 d-cache : data의 약자로 명령어를 제외한 모든 데이터를 다루는 캐시로 보통 시간 지역성이 높다.

시간 지역성 : 특정 데이터를 최초로 가져온 경우, 그 데이터를 가까운 미래에 또 한번 접근할 가능성이 높은 특성


L2 캐시메모리

  • L1캐시와 L3캐시 사이에 존재하고 L1캐시에서 데이터를 찾지 못할 경우 사용된다.
  • L1캐시보다는 느리지만 메인메모리보다는 빠르다.

동시성 문제
그렇다면 앞에서 말했듯이 동시성 문제란 무엇인가 간단히 이야기하면 한 게시글에 좋아요 버튼이 있는데 좋아요를 사용자가 동시에 클릭했을 경우 모두가 생각하는 결과는 2가 되어야하지만 최종적으로 1이 되는 상황을 말한다. 이런 경우를 경쟁 조건이라고 한다. 동시성 문제는 경쟁 조건 말고도 데이터 불일치, 교착 상태등 여러가지가 있다.

L2 캐시로 동시성 문제 완화
1. 캐시 일관성 프로토콜을 통해 여러 코어에 걸쳐 캐시간의 일관성을 유지하는데 하나의 코어가 데이터를 업데이트할 때 다른 코어가 업데이트 된 값을 보장하여 동시 실행에서 발생 할 수 있는 오래되거나 일관되지 않은 데이터 문제를 방지한다.

2. 캐시 스래싱으로 여러 코어가 캐시 공간을 두고 경쟁을 하는데 그 과정에서 캐시 라인이 자주 제거된다. L2캐시의 크기가 클 수록 다양한 스레드의 데이터를 수용할 수있게 되고 더 많은 공간이 제공되어 스레싱이 줄어들고 동시성 성능이 향상된다.


L3 캐시메모리

  • L3도 마찬가지로 L2에서 데이터를 찾지 못하면 사용된다.
  • CPU설계에 따라 다르지만 L3캐시는 존재하거나 아니면 존재하지 않는경우가 있다, 왜냐하면 대부분 L2캐시로 충분히 커버할 수있기 때문이다.
  • 만약 L3캐시에도 데이터가 없으면 CPU가 DRAM에 직접연결하여 데이터를가져온 후 L3캐시에 로드를 한다.

결론

2차 캐시는 JPA에서 만든 언어로 영속성 컨테이너에서 데이터를 조회하는 쿼리를 조회하고 같은 요청이 들어왔을 때 같은 조건으로 출력한 조회 결과를 리턴하는 기술이었다, 하지만 L2캐시로도 동시성 문제를 해결하는 방법이 존재했고 새로운 지식을 알 수 있게된 좋은 기회였다.


참고 게시글

https://hwannny.tistory.com/96

https://j0nnie99.tistory.com/61

https://chunsubyeong.tistory.com/73

https://www.purestorage.com/kr/knowledge/cpu-bottleneck.html

https://www.corsair.com/kr/ko/explorer/gamer/gaming-pcs/what-is-pc-bottlenecking/

(항상 감사합니다.)

profile
가끔은 정신줄 놓고 멍 때리는 것도 필요하다.

0개의 댓글

관련 채용 정보