Arm Linux Kernel Hacks

rousalome.egloos.com

포토로그 Kernel Crash


통계 위젯 (화이트)

11105
637
415734


[Arm프로세서] 캐시 히트 동작 Arm: Cache and Barrier

데이터 주소를 바탕으로 캐시에 접근하는 과정을 캐시 룩업(Lookup)이라고 합니다. 캐시 룩업 동작은 크게 캐시 히트와 캐시 미스로 분류됩니다.

먼저 캐시에 접근해 캐시 히트가 동작하는 과정을 알아봅시다.

캐시 히트 동작

캐시는 캐시 라인과 캐시 라인의 속성을 나타내는 하드웨어로 구성돼 있습니다. 다음 그림을 보면서 캐시의 전체 구조를 알아봅시다.
 
그림 17.4 데이터 주소로 캐시에 접근해 캐시 히트가 되는 과정  

위 그림은 0x0000_00D4 주소에 존재하는 데이터를 로딩하기 위해 캐시에 접근하는 동작을 나타냅니다. 먼저 그림에서 가장 위에 보이는 부분은 캐시에서 바라 본 주소 포멧입니다. 캐시에 접근할 때 주소를 '태그 + 인덱스 + 오프셋'으로 분류합니다. 16진수 포멧인 0x0000_00D4주소를 2진수로 변환하면 1101 0100입니다. 2진수로 구성된 비트는 다음과 같이 분류할 수 있습니다.

태그: 011 
인덱스: 01
오프셋: 01

이번에는 그림 17.4의 아랫 부분에 있는 캐시를 보겠습니다. 캐시를 간단한 구조로 보면 태그램(TagRam)과 캐시 라인으로 구성돼 있습니다. 태그램은 이미 캐시에서 로딩한 태그 정보를 담고 있는 저장 공간입니다. 태그램 오른쪽에 있는 박스는 캐시 라인을 나타냅니다. 캐시 라인에는 실제 메모리에서 로딩한 데이터가 저장돼 있습니다.

그림의 가장 왼쪽에 보이는 인덱스의 범위는 0~3인데 인덱스의 전체 길이는 캐시 라인의 갯수라고 볼 수 있습니다. 위 그림에서 캐시 라인의 갯수는 4개입니다. 이 인덱스는 어떻게 사용될까요? 주소에서 추출한 인덱스 값은 캐시 라인의 인덱스를 찾는데 사용됩니다.

이어서 캐시 라인의 윗 부분에는 오프셋을 봅시다. 오프셋의 범위는 0~3으로 이 크기를 캐시의 사이즈라고 정의합니다. 캐시의 사이즈가 4K이면 오프셋의 범위가 0~4K입니다

그림의 전체 구조를 알아봤으니 이번에는 0x0000_00D4 주소에 있는 데이터를 캐시에 접근해 읽어오는 과정을 알아봅시다.

캐시에 접근하면 가장 먼저 0x0000_00D4 주소의 인덱스에 해당되는 캐시 라인에 접근합니다. 0x0000_00D4 주소의 인덱스가 01(이진수)이니 1번째에 있는 캐시 라인에 접근합니다. 여기서 1번재 캐시 라인에 매핑된 태그램에 0x0000_00D4 주소의 Tag인 011(이진수)가 있는지 체크합니다.

만약 태그램에 011(이진수)이 있으면 캐시에 접근하려는 주소가 있다고 판단합니다. 이 조건에서 캐시에 있는 데이터를 바로 가져가며 이 동작을 캐시 히트라고 합니다.

캐시 히트에 대해 알아봤으니 캐시 미스가 발생하는 과정을 배워 봅시다.


#Reference Armv8: 캐시(Cache)

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







핑백

덧글

댓글 입력 영역