Guillermo Austin Kim

Sources

Posts

998 posts

[Arm프로세서] 캐시 알고리즘: 알고리즘 지역성(algorithm locality)

Guillermo Austin Kim|2022년 5월 17일

프로그램은 함수의 호출과 자료 구조로 구성돼 있습니다. 코드를 유심히 분석하면 자주 사용하는 자료 구조나 알고리즘이 어느 정도 정해져 있습니다. 예를 들어 링크드 리스트나 스택과 같은 데이터 구조나 알고리즘을 사용해 데이터를 관리하는 패턴을 볼 수 있습니다. 그런데 데이터 구조나 알고리즘을 사용할 때 메모리에 접근하는 패턴을 관찰하면 시간 지역성이나 공간 지역성을 확인하기 어렵습니다. 한 가지 예를 들까요? 링크드 리스트로 데이터 관리할 때 메모리에 접근하는 패턴을 살펴보면 특정 위치에 있는 데이터에 다시 접근하지 않을 확률이 높습니다. 시간 지역성과 같은 특징을 지니지 않습니다. 또한 링크드 리스트는 배열과 달리 인접한 메모리 주소 공간에 접근하지 않아 공간 지역성에도 맞지 않습니다. 그런데 링크드

[Arm프로세서] 캐시 알고리즘: 공간 지역성(Spatial Locality)

Guillermo Austin Kim|2022년 5월 15일

자주 가는 카페에 갔다면 그 카페만 갈까요? 항상 그렇지는 않습니다. 자주 가는 카페 옆에 있는 다른 카페에 갈 가능성도 있습니다. 이렇듯 프로그램이 어떤 데이터를 사용하면 그 데이터와 인접한 데이터에 접근할 확률이 높습니다. 이런 패턴을 공간 지역성(Spatial Locality)라고 합니다. [정보] 섹션 정보를 활용한 공간 지역성프로그램을 컴파일하면 컴파일러는 연관된 객체(자료구조)를 특정 메모리 공간(섹션)에 모아두는 경향이 있습니다.

[리눅스커널] 스페큘레이션, 멜다운 방지 패치(x86 기준)

Guillermo Austin Kim|2022년 5월 15일

CPU 코어 내부을 들여다 보면.... CPU가 분기 예측을 하려면 파이프 라인에 앞으로 실행할 코드를 미리 올려 놓거든요.스페큘레이션, 멜다운을 방지하는 기법이 여러 가지지만, 대표적으로 배리어 명령어를 사용합니다. 관련 글과 패치는 다음과 같은데요. 관련 커밋은 아래와 같습니다. 패치를 간단히 설명드리면;CONFIG_SLG을 하나 선언하고요 diff --git a/arch/x86/Kconfig b/arch/x86/Kconfigindex 7399327d1eff7..dd13ba82ce7ab 100644--- a/arch/x86/Kconfig+++ b/arch/x86/Kconfig@@ -472,6 +472,18 @@ config RETPOLINE branches. Requires a com

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

Guillermo Austin Kim|2022년 5월 13일

캐시는 CPU 근처에 있는 용량이 작지만 동작 속도는 빠른 임시 저장 공간입니다. CPU는 접근 속도가 오래 걸리는 메인 메모리보다 캐시에 먼저 접근해 찾으려는 데이터가 있는지 체크합니다. 만약 캐시에 데이터가 있으면 캐시에 존재하는 데이터를 가져옵니다. CPU가 접근하려는 데이터나 명령어가 캐시에 존재하는 확률이 높을 수록 CPU의 성능이 더 좋아집니다. 캐시가 CPU가 자주 사용하는 데이터를 갖고 있으면 CPU의 성능이 좋아지므로 "CPU가 자주 사용하는 데이터를 어떤 방식으로 미리 로딩할까?"라는 주제로 고민 했습니다. 이 과정에서 CPU가 자주 사용하는 데이터를 예측하는 방법을 연구하기 시작했습니다. 프로그램이 실행될 때 CPU 메모리에 접근하는 패턴을 면밀히 관찰했는데, 그 결과 몇 가지 패턴이

[Arm프로세서] L1 캐시와 L2 캐시란

Guillermo Austin Kim|2022년 5월 12일

이전 포스트에서는 한 개 캐시로 구성된 프로세서를 기준으로 캐시의 기본 개념을 설명했습니다. 대부분 시스템은 멀티 레벨로 캐시가 구성돼 있습니다. 다음 그림을 보면서 멀티 레벨 캐시에 대해 알아봅시다. 그림 17.2 메모리 계층 구조에서 캐시의 역할 그림의 왼쪽과 오른쪽에 있는 Core는 말 그대로 CPU 코어를 뜻합니다. Core 아랫 부분을 보면 L1I$와 L1D$ 캐시가 보입니다. 여기서 L1은 레벨 1 캐시라고 하며 L1I$는 명령어(Instruction) 캐시, L1D$는 데이터(Data) 캐시를 뜻합니다. 위와 같이 Arm 프로세서를 비롯한 대부분 프로세서는 캐시가 여러 계층으로 구성돼 있습니다. L1(Level 1: 레벨 1캐시), L2(Level 2: 레벨 2캐시)는 최신 Cor