ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • Modern Hardware Architecture_focusing on cache
    카테고리 없음 2019. 5. 13. 11:52

    개요


    좋은 성능을 내는 애플리케이션 개발을 위해서는 하드웨어 아키텍쳐를 이해할 필요가 있다. 모던 하드웨어라고 할 만한 현대의 하드웨어는 어떠한 구조로 이루어져 있는지 살펴보자.

     

    구조


    모던 하드웨어 아키텍처는 위와 같은 구조로 이루어져 있다.

    • 1개 이상의 CPU
    • L1 Cache
    • L2 Cache
    • L3 Cache
    • Main Memory(RAM)
    • Disk(HDD/SSD)
    • Network Card

    L1, L2, L3의 의미는 Level 1, 2, 3 의 줄임말이다. 각 레벨 캐시를 조금 더 자세히 살펴보자.

    L1과 L2 Cache

    각 CPU는 L1과 L2 메모리 캐시를 가지고 있다. L1 캐시는 일반적으로 작지만 읽는 속도가 매우 빠르다. L2 캐시는 일반적으로 더 크지만 읽는 속도가 L1 캐시보다 느리다. CPU가 메모리로부터 데이터를 읽을 때, L1과 L2 캐시들을 먼저 탐색한다. L1과 L2 캐시들에 데이터가 있으면, 훨씬 빠른 속도로 데이터를 읽어올 수 있다. 물론 당연히 L1, L2 캐시로부터 읽어온 데이터 값을 바꾸었을 경우, 다시 메모리에 그 값을 쓴다.

     

    L3 Cache

    L3 캐시는 일반적으로 위의 그림처럼 메인 메모리의 위에 위치하는 cache layer이다. L3 캐시는 따라서 모든 CPU들에 공유된다. 메인 메모리로부터 데이터를 읽어들일 때, 필요한 데이터보다 더 많은 데이터 블록을 읽어와서 L3 캐시에 넣어둔다. (big-block-loading)

     

    왜 필요한 데이터보다 더 많은 데이터를 읽어올까? CPU가 다음 연산 때 메모리에 연속적으로 저장되어있는 그 다음 데이터를 필요로할 때를 대비하기 위해서이다. 일반적으로 서로 인접한 데이터들은 가까운 미래에 사용될 가능성이 높다.

    이를 Spatial Locality라고 한다.

     

    • 참고

    애초에 캐시가 Locality 덕택에 효율성을 높일 수 있는 것인데, L3 캐시(L1, L2도 마찬가지)는 한 걸음 더 나아가 필요한 데이터 뿐만 아니라 인접한 데이터들까지 미리 캐시해두는 방식으로, 더욱 효율성을 높였다고 할 수 있겠다.

    L1, L2, L3의 캐싱 원칙

    위 캐시들이 종합적으로 어떻게 동작하는지 살펴보면 위의 그림과 같다. 위와 같은 'big-block-loading'은 순차 접근을 더욱 빠르게 만들어준다.

     

    참고


    http://tutorials.jenkov.com/java-performance/modern-hardware.html

     

    댓글

Designed by Tistory.