Arm Linux Kernel Hacks

rousalome.egloos.com

포토로그 Kernel Crash


통계 위젯 (화이트)

37120
1703
402252


[Arm프로세서] 캐시(Cache): 멀티 캐시를 구성하는 원리 Arm: Cache and Barrier

이어서 Arm 아키텍처 문서에서 발췌한 다이어그램을 보면서 멀티 레벨 캐시의 구조를 알아봅시다.

 

그림 17.8 기본적인 캐시의 구조
(출처: ARM® Cortex®-A Series Version: 1.0, Programmer’s Guide for ARMv8-A)
 
그림을 보면 알 수 있듯이, 프로세서 내에 캐시가 하나만 있지 않고, L1, L2, L3로 계층을 이루고 있습니다. 프로세서에 한 개의 캐시가 아니라 계층을 이뤄서 캐시를 구성하는 이유는 뭘까요?  

    "바로 메모리 레이턴시를 더 줄일 수 있기 때문입니다."

앞서 살펴봤듯이 캐시 사이즈를 키우면 캐시 미스 비율은 떨어집니다. 하지만 캐시에서 데이터를 읽어 오는 시간이 더 오래 걸립니다. 한 가지 예를 들어볼까요? 64KB 캐시인 경우 캐시에 있는 데이터를 읽어 오는데 5사이클이 걸린다고 가정합시다. 그렇다면 8KB 캐시는 어떨까요? 8KB 사이즈의 캐시는 1~2 사이클이 걸릴 수 있습니다. 64KB 캐시인 경우 8KB 크기의 캐시 보다는 캐시 미스 비율이 낮을 수 있습니다.

그런데 L1 캐시는 CPU 코어와 가장 가까이 위치하고 매우 빈번하게 명령어와 데이터를 CPU에 전달해야 합니다. 그래서 캐시 미스 비율보다는 캐시 라인에 있는 데이터를 읽어 오는 히트 레이턴시가 더 중요한 설계 요소입니다. 그래서 L1 캐시 사이즈는 크게 설정하지 않습니다. 한 가지 예를 들어 볼까요? 20년 전에 출시된 Arm11 프로세서의 L1 캐시 사이즈는 16KB~64KB인데, 비교적 최근에 출시된 Cortex-A72 프로세서의 L1 캐시의 사이즈는 64KB 혹은 80KB로 머물러 있습니다.

대신 L2 캐시는 프로세서의 사양이 좋아지면서 점점 캐시 라인 사이즈가 커지고 있습니다. Arm11 프로세서는 L2 캐시의 사이즈는 128KB인데, Cortex-A72 프로세서의 L2 캐시 사이즈는 512KB, 1MB, 2MB 혹은 4MBㅇ입니다. 예전에 출시된 프로세서에 비해 L2 캐시의 사이즈가 많이 커져졌습니다.  

L1 캐시를 설계할 때 캐시에서 데이터를 가져오는데 걸리는 시간인 히트 레이턴시를 가장 중요한 성능 지표로 삼습니다. L1보다 높은 레벨의 L2와 L3 캐시는 어떤 지표가 중요할까요? L2 캐시와 L3 캐시의 가장 중요한 성능 지표는 캐시 미스입니다. 
---
[정보] L2 캐시와 L3 캐시의 위치 

L1 캐시에 비해 L2 캐시와 L3 캐시는 CPU에서 점점 멀리 위치합니다.
---

L3 캐시와 같이 프로세서 내부의 가장 외곽에 있는 LLC(Last Level Cache)는 접근 시간보다는 캐시 히트 레이트가 가장 중요한 성능 지표입니다. LLC(Last Level Cache)에 데이터가 없으면 DRAM에 접근해야 합니다. 외부 메모리에 접근해 데이터를 가져오려면 CPU 입장에서 수 많은 사이클을 허비해야 합니다. AMBA 버스 프로토콜에 맞게 시그널을 전달하고 DRAM 콘트롤러를 동작시켜야 합니다. LLC에서 캐시 미스가 일어나면 실행 시간이 오래 걸리므로 LLC는 되도록 캐시 미스 비율을 낮추는 방향으로 설계합니다.

여기까지 멀티 캐시를 설계하는 주요 성능 지표를 알아봤습니다. 멀티 레벨 캐시를 디자인하는 기준은 다음과 같이 정리할 수 있습니다.

L1 캐시의 사이즈는 작고 빠르게 설계해 히트 레이턴시를 높히자.
사이즈가 크지만 속도는 상대적으로 느린 L2 혹은 L3 캐시로 구성해 캐시 히트 비율을 높히자.

캐시를 멀티 레벨로 구성하면 결국 히트 레이턴시와 히드 미스 비율을 동시에 잡을 수 있는 효과를 볼 수 있습니다. 

#Reference Armv8: 캐시(Cache)

캐시 소개
캐시의 기본 동작 원리
   캐시의 검색 방법
   캐시 lookup 기본 동작 원리
       캐시 히트 동작  
       캐시 미스 동작  
캐시 제어 레지스터





.

핑백

덧글

댓글 입력 영역