Arm Linux Kernel Hacks

rousalome.egloos.com

포토로그 Kernel Crash


통계 위젯 (화이트)

46107
469
422678


[Arm프로세서] 캐시 알고리즘: 시간적 지역성(temporal locality) Arm: Cache and Barrier

캐시는 CPU 근처에 있는 용량이 작지만 동작 속도는 빠른 임시 저장 공간입니다. CPU는 접근 속도가 오래 걸리는 메인 메모리보다 캐시에 먼저 접근해 찾으려는 데이터가 있는지 체크합니다. 만약 캐시에 데이터가 있으면 캐시에 존재하는 데이터를 가져옵니다. CPU가 접근하려는 데이터나 명령어가 캐시에 존재하는 확률이 높을 수록 CPU의 성능이 더 좋아집니다.

캐시가 CPU가 자주 사용하는 데이터를 갖고 있으면 CPU의 성능이 좋아지므로 "CPU가 자주 사용하는 데이터를 어떤 방식으로 미리 로딩할까?"라는 주제로 고민 했습니다. 이 과정에서 CPU가 자주 사용하는 데이터를 예측하는 방법을 연구하기 시작했습니다.  프로그램이 실행될 때 CPU 메모리에 접근하는 패턴을 면밀히 관찰했는데, 그 결과 몇 가지 패턴이 있다는 사실을 확인했고 이를 활용해 캐시의 세부 기능을 구현했습니다.

시간적 지역성(temporal locality)

누군가 평소 자주 들리는 카페에 다시 갈 가능성이 있을까요? 한 번도 안 간 사람보다 다시 갈 확률이 높을 겁니다. 이와 유사하게 프로그램이 특정 명령어나 특정 변수를 반복적으로 사용하는 패턴을 시간적 지역성(temporal locality)이라고 합니다. 프로그램이 실행될 때 특정 명령어나 변수에 자주 접근하면, 가까운 미래에 사용할 것을 대비해, 사용된 명령어나 데이터를 캐시에 미리 로딩합니다. 

시간적 지역성(temporal locality) 특성을 활용하는 기법 중 하나는 디멘트 패치(demand fetch)입니다. 프로그램이 명령어나 데이터를 메인 메모리에 접근해 명령어나 데이터를 캐시에 로딩한 다음에 일정 시간 동안 유지시키는 방식입니다. 

이번에는 다음 예제 소스를 보면서 시간적 지역성(temporal locality)에 대해 더 자세히 알아 봅시다.

01 static int arr[10];
02 int sump = 0;
03
04 for (i = 0; i < 10; i++) {
05   sum += arr[i];
06 }

위 코드에서 05번 째 줄이 최초로 실행되는 시점에 arr[0] 주소에 있는 데이터를 로딩해 sum에 저장합니다. 05번째 줄을 메모리 주소에 접근하는 패턴 관점으로 분석하면 "배열 arr의 주소를 증가하면서 연속적인 메모리 공간에 접근한다"라고 볼 수 있습니다. 당연한 이야기지만 배열의 요소들이 메모리 공간에 연속적으로 할당되기 때문입니다. 이 패턴을 활용해 a[1]~a[10]이 존재하는 주소에 미리 접근해 데이터를 캐시에 올려 놓으면 for 루프가 더 빨리 동작할 겁니다.

이처럼 시간적 지역성(temporal locality)은 최근 접근한 데이터의 주변 공간에 다시 접근하는 소프트웨어의 패턴을 뜻합니다. 이런 특징을 잘 활용해 미리 메모리에 존재하는 데이터를 로딩하면 메모리에 접근하는 횟수를 줄일 수 있습니다. 그 결과 작성된 루틴이 더 성능을 내면서 실행될 것입니다.


#Reference Armv8: 캐시(Cache)

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






핑백

덧글

  • 신중식 2022/05/13 13:57 # 삭제 답글

    '성능 향상을 위한 파이프라인' or '성능 향상을 위한 분기 예측'
    + 캐시의 지역성을 사용한 엑세스 타임 측정으로 값을 알아내는 취약점이 있었죠. 멜트다운과 스팩터입니다.
    최근에 읽었던 페이지입니다.
    https://parksb.github.io/article/31.html
    한 2년전에 회사에서 보안패치 했던 기억이 나는데, 방어 코드를 읽어본적이 없어서 어떤 방식으로 방어했는지 궁금하네요.
  • AustinKim 2022/05/15 13:44 #

    제가 알고 있는 키크고 멋진 중식님 맞나요?
    댓글을 달다 보니 길어져서 아예 새로운 글을 포스팅합니다. 아래 글 참고하세요.

    http://rousalome.egloos.com/10140132

    조만간에 치맥 한잔 해요.
    주말 잘 보내세요.
  • 신중식 2022/05/13 14:08 # 삭제 답글

    파이프라인 -> 비순차실행 으로 정정합니다.
댓글 입력 영역