Guillermo Austin Kim

Sources

Posts

998 posts

[Arm프로세서] 캐시(Cache): Direct-Mapped 캐시 구조

Guillermo Austin Kim|2022년 6월 12일

Direct-Mapped 캐시는 가장 단순한 캐시 구조입니다. 사실 이전 절에서 다뤘던 캐시의 구조는 모두 Direct-Mapped 입니다. 이번에는 다음 그림을 보면서 Direct-Mapped 캐시의 구조 배워봅시다. 그림 17.9 Direct-Mapped 캐시의 구조 그림 왼쪽 부분은 캐시, 오른쪽 부분은 메인 메모리의 주소 공간을 나타냅니다. 먼저 왼쪽 부분에 있는 캐시를 보면 캐시 라인은 8개이며 각각 라인은 메모리 주소에 바로 매핑됩니다. Direct-Mapped 캐시는 그림과 같이 구조가 간단하므로 하드웨어 관점으로 회로를 간단하게 구성할 수 있습니다. 또한 데이터를 빠르게 검색할 수 있습니다. 그런데 Direct-Mapped 캐시는 캐시 히트 비율이 떨어진다는 단점이 있습니다. 각각

[Arm프로세서] 캐시(Cache): 멀티 캐시 정책

Guillermo Austin Kim|2022년 6월 10일

캐시를 L1, L2, L3 캐시와 계층 구조로 설계한다면 다음과 같은 요구 사항을 생각해 볼 필요가 있습니다. 상위와 하위 레벨에 있는 캐시에 데이터를 중복해 저장할 것인가?중복해 보관하지 않으면 어떤 방식으로 데이터를 중복하지 않게 보관할 것인가? 위 요구 사항에 따라 멀티 캐시를 구현하는 방식은 크게 3가지로 분류할 수 있는데 이를 멀티 캐시 정책이라고 합니다. 다음 표에서 3가지 멀티 캐시 정책을 확인할 수 있습니다. 표 17.3 멀티 캐시 정책의 종류 위와 같은 3가지 정책 중에 어느 방식을 적용해 멀티 캐시를 구현할까요? 멀티 캐시 정책에는 각기 장단점이 있어 어떤 방식이 가장 좋다고 말하기 어렵습니다. 멀티 레벨 캐시를 구현하는 정책을 적절히 적용해 프로세서를 설계하면 됩니다.

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

Guillermo Austin Kim|2022년 6월 10일

이어서 Arm 아키텍처 문서에서 발췌한 다이어그램을 보면서 멀티 레벨 캐시의 구조를 알아봅시다. 그림 17.8 기본적인 캐시의 구조(출처: ARM® Cortex®-A Series Version: 1.0, Programmer’s Guide for ARMv8-A) 그림을 보면 알 수 있듯이, 프로세서 내에 캐시가 하나만 있지 않고, L1, L2, L3로 계층을 이루고 있습니다. 프로세서에 한 개의 캐시가 아니라 계층을 이뤄서 캐시를 구성하는 이유는 뭘까요? "바로 메모리 레이턴시를 더 줄일 수 있기 때문입니다." 앞서 살펴봤듯이 캐시 사이즈를 키우면 캐시 미스 비율은 떨어집니다. 하지만 캐시에서 데이터를 읽어 오는 시간이 더 오래 걸립니다. 한 가지 예를 들어볼까요? 64

[Arm프로세서] 캐시의 성능 지표

Guillermo Austin Kim|2022년 6월 6일

이번 포스트에서 다룬 캐시의 동작을 다시 요약하면 다음과 같습니다. “속도가 빠른 캐시를 CPU 근처에 두고 CPU가 자주 사용하는 데이터를 캐시라는 임시 저장 공간에 두면 성능을 키울 수 있다.” 실제 Arm 프로세서의 메모리 아키텍처 다이어그램을 분석하면 멀티 레벨로 캐시가 구성됐다는 사실을 알 수 있습니다. 캐시를 레벨로 구성하는 이유를 알려면 먼저 캐시의 성능을 측정하는 지표를 알 필요가 있습니다. 대부분 캐시의 성능 지표로 캐시 미스나 캐시 히트만 떠 올립니다. 캐시의 성능을 측정하는 정량적인 지표는 다음과 같습니다.  평균 접근 시간 = 히트 레이턴시(hit latency) + 미스 비율(where) 미스 비율 = 캐시 미스/(캐시 미스 + 캐시 히트) x 미스 패널티

[공유] v5.15 라즈비안 커널에서 '4.11.2 리눅스 유틸리티 프로그램을 이용한 실행 추적' 실습하기

Guillermo Austin Kim|2022년 6월 5일

Overview 리눅스 커널 버전이 업그레이드 되면서 함수의 이름이나 루틴이 계속 바뀌고 있습니다.리눅스 커널이 오픈 소스 프로젝트로 운영되니 당연한 현상으로 볼 수 있는데요. 커널 버전이 업그레이드되면서 예전 버전에 잘 동작하던 셸 스크립트도 업데이트해야 합니다. * 집필 시점 라즈비안 커널 버전: v4.19.30 * 현재(2022년 6월) 라즈비안 커널 버전: v5.15.31 리눅스 커널은 생명체와 같이 살아 숨시는 것 같네요. 4.11.2 절에서 언급된 스크립트 271 페이지를 보면 ftrace 로그를 설정하는 셸 스크립트 코드가 확인됩니다. echo do_exit search_binary_handler copy_process.part.5 > /sys/kernel