MinUk.Dev
Cache - minuk dev wiki

Cache

created : Mon, 06 Jul 2020 20:38:22 +0900
modified : Thu, 03 Jun 2021 16:38:03 +0900

관련 스크립트

pagecache 해제

echo 1 > /proc/sys/vm/drop_caches

dentries, inodes 해제

echo 2 > /proc/sys/vm/drop_caches

pagecache, dentries, inodes 모두 해제

echo 3 > /proc/sys/vm/drop_caches

플러싱하기

sync

출처

요약

  • Pinciple of Locality 에 따라 최근 접근한 데이터 또는 인접한 데이터를 빠르게 접근할수 있는 곳에 두고 접근하는 것.

Cache 의 종류

  • 출처 : https://parksb.github.io/article/29.html
  • L1 Cache : 프로세서와 가장 가까운 캐시. 속도를 위해 I$D$ 로 나뉜다.
    • Instruction Cache (I$) : 메모리의 TEXT 영역 데이터를 다루는 캐시
    • Data Cache (D$) : TEXT 영역을 제외한 모든 데이터를 다루는 캐시.
  • L2 Cache : 용량이 큰 캐시, 크기를 위해 L1캐시처럼 나누지 않는다.
  • L3 Cache : 멀티 코어 시스템에서 여러 코어가 공유하는 캐시

궁금해서 찾아본 내 컴퓨터의 캐시 사이즈

# lshw -C memory
  • linux에서 명령어로 확인해볼수 있다.
  • 아래 내용을 보면 확인 할수 있듯이 L1 은 32KiB, L2 는 256KiB, L3 는 3MiB 이다.
  • 지금 작업하는 곳이 대학교 입학할때 사용한 i3 4세대? 5세대? 쯤이니까 감안해서 보면 될듯.
  *-firmware
       description: BIOS
       vendor: American Megatrends Inc.
       physical id: 0
       version: P02RDQ.029.160707.JJ
       date: 07/07/2016
       size: 64KiB
       capacity: 6080KiB
       capabilities: pci upgrade shadowing cdboot bootselect socketedrom edd int13floppy1200 int13floppy720 int13floppy2880 int5printscreen int14serial int17printer acpi usb biosbootspecification uefi
  *-cache:0
       description: L1 cache
       physical id: 38
       slot: L1 Cache
       size: 32KiB
       capacity: 32KiB
       capabilities: synchronous internal write-back data
       configuration: level=1
  *-cache:1
       description: L1 cache
       physical id: 39
       slot: L1 Cache
       size: 32KiB
       capacity: 32KiB
       capabilities: synchronous internal write-back instruction
       configuration: level=1
  *-cache:2
       description: L2 cache
       physical id: 3a
       slot: L2 Cache
       size: 256KiB
       capacity: 256KiB
       capabilities: synchronous internal write-back unified
       configuration: level=2
  *-cache:3
       description: L3 cache
       physical id: 3b
       slot: L3 Cache
       size: 3MiB
       capacity: 3MiB
       capabilities: synchronous internal write-back unified
       configuration: level=3
  *-memory
       description: System Memory
       physical id: 3e
       slot: System board or motherboard
       size: 4GiB
     *-bank:0
          description: SODIMM DDR3 Synchronous 1600 MHz (0.6 ns)
          product: 8KTF51264HZ-1G9P1
          vendor: Micron
          physical id: 0
          serial: 12CACA3A
          slot: ChannelA-DIMM0
          size: 4GiB
          width: 64 bits
          clock: 1600MHz (0.6ns)
     *-bank:1
          description: DIMM [empty]
          physical id: 1
          slot: ChannelB-DIMM0

Cache Metrics

  • 캐스의 성능을 측정할 때는 Hit latency 와 Miss Latency 가 중요 요인으로 꼽힌다.
  • $$\text{Miss rate} = \frac{\text{Cache misses}}{\text{Cache accesses}}$$

Cache Organization

Indexing

  • 주소값 전체를 키로 사용하지 않고, 그 일부만을 사용한다.

Tag Matching

  • 주소값의 일부를 Tag 로 사용하여 인덱스의 충돌을 줄인다.

Associative Cache

  • 서로 다른 두 주소가 같은 인덱스를 가지고 계속해서 둘다 접근된다면 캐시미스가 지속적으로 발생한다. 이를 Ping-pong problem이라한다. (이건 처음 듣는다. 위의 참조 에서 처음 들음)
  • 이를 태그 배열과 데이터 배열을 여러 개 만드는 식으로 개선한다.
    • Direct mapped : 인덱스당 가르키는 공간이 단 1개 (위에서 설명한 방식)
    • Full associative : 인덱스가 어떤 공간이던지 가리킬수 있음 (충돌이 적지만 모든 블록을 탐색해야함. 속도가 느림)
    • Set associative : 인덱스가 가리키는 공간이 두개 이상인 경우 n-way set associative 캐시라고 부른다.

Handling Cache Writes

  • Cache에서 업데이트된 데이터를 언제 메모리에 쓸것인가
  • Write-through : 캐시에 데이터가 바뀔때마다 바로바로 업데이트함.
  • Write-back : dirty bit를 추가하여 데이터가 변경되었다면 1로 체크해준뒤 블록이 교체될때 dirty비트를 확인하여 메모리의 데이터를 변경하는 구조.