๐Ÿ’ฟ KAIST:PINTOS | Concept | Cache

์ด์ˆœ๊ฐ„ยท2025๋…„ 5์›” 15์ผ

KAIST:PINTOS

๋ชฉ๋ก ๋ณด๊ธฐ
10/23

๐Ÿš€ ์บ์‹œ๊ฐ€ ํ•„์š”ํ•œ ์ด์œ 

CPU๋Š” ๋น ๋ฅด๊ณ  ๋ฉ”๋ชจ๋ฆฌ๋Š” ๋А๋ฆฌ๋‹ค.
์ด ์†๋„ ์ฐจ์ด๋Š” 100๋ฐฐ ์ด์ƒ ๋‚˜๊ธฐ๋„ ํ•œ๋‹ค.
๋”ฐ๋ผ์„œ ๋ณ‘๋ชฉํ˜„์ƒ์ด ์ผ์–ด๋‚œ๋‹ค.

๐ŸŽฏ ์˜ˆ์‹œ

  • CPU๋Š” 1ns ๋‹จ์œ„๋กœ ์—ฐ์‚ฐํ•จ
  • ๋ฉ”๋ชจ๋ฆฌ๋Š” 100ns~200ns ๊ฑธ๋ฆผ

โ†’ CPU๊ฐ€ ๋ฐ์ดํ„ฐ๋ฅผ ๊ธฐ๋‹ค๋ฆฌ๋Š” ๋™์•ˆ ๋†€๊ณ  ์žˆ๊ฒŒ ๋œ๋‹ค.

๊ทธ๋ž˜์„œ ๋“ฑ์žฅํ•œ ๊ฒƒ์ด Cache(์บ์‹œ).
์ž์ฃผ ์“ฐ๋Š” ๋ฐ์ดํ„ฐ๋ฅผ ๋ฉ”๋ชจ๋ฆฌ์—์„œ ๋ฏธ๋ฆฌ ๊ฐ€์ ธ์™€ CPU ๊ฐ€๊นŒ์ด์— ์ €์žฅํ•ด๋‘๋Š” ์žฅ์น˜๋‹ค.


๐Ÿ—๏ธ ์บ์‹œ์˜ ๊ณ„์ธต ๊ตฌ์กฐ

์บ์‹œ๋Š” ์„ฑ๋Šฅ๊ณผ ๋น„์šฉ์— ๋”ฐ๋ผ ๋‹ค์Œ์ฒ˜๋Ÿผ ๋‹ค์ธต ๊ตฌ์กฐ๋กœ ์„ค๊ณ„๋œ๋‹ค.

๊ณ„์ธต์œ„์น˜์šฉ๋Ÿ‰์†๋„ํŠน์ง•
L1CPU Core ๋‚ด๋ถ€์ˆ˜์‹ญ KB๐ŸŸข ๊ฐ€์žฅ ๋น ๋ฆ„๋ฐ์ดํ„ฐ/๋ช…๋ น์–ด ๋ถ„๋ฆฌ
L2CPU Core ๋‚ด๋ถ€์ˆ˜๋ฐฑ KB๐ŸŸก ๋น ๋ฆ„ํ†ตํ•ฉ ์บ์‹œ
L3CPU ์ „์ฒด ๊ณต์œ ์ˆ˜ MB๐Ÿ”ต ๋А๋ฆผ๋ชจ๋“  ์ฝ”์–ด๊ฐ€ ๊ณต์œ 

โ†’ L1์€ ์ž‘์ง€๋งŒ ์†๋„๊ฐ€ ๋งค์šฐ ๋น ๋ฅด๊ณ , L3๋Š” ๋А๋ฆฌ์ง€๋งŒ ์—ฌ๋Ÿฌ ์Šค๋ ˆ๋“œ๊ฐ€ ๊ณต์œ ํ•œ๋‹ค.


๐Ÿงฌ ์บ์‹œ์˜ ์ž‘๋™ ์›๋ฆฌ

๐Ÿ“Œ Locality of Reference (์ง€์—ญ์„ฑ)

์บ์‹œ๋Š” "์šฐ๋ฆฌ๋Š” ์ž์ฃผ ์“ฐ๋Š” ๋ฐ์ดํ„ฐ๋งŒ ์ž์ฃผ ์“ด๋‹ค"๋Š” ์ „์ œ๋ฅผ ๋ฐ”ํƒ•์œผ๋กœ ํ•œ๋‹ค.

์ง€์—ญ์„ฑ ์ข…๋ฅ˜์„ค๋ช…์˜ˆ์‹œ
Temporal Locality์ตœ๊ทผ ์‚ฌ์šฉํ•œ ๋ฐ์ดํ„ฐ๋ฅผ ๋˜ ์‚ฌ์šฉํ•  ๊ฐ€๋Šฅ์„ฑ๋ฃจํ”„ ๋ณ€์ˆ˜, ์กฐ๊ฑด ์นด์šดํ„ฐ
Spatial Locality๊ทผ์ฒ˜์˜ ๋ฐ์ดํ„ฐ๋ฅผ ํ•จ๊ป˜ ์‚ฌ์šฉํ•  ๊ฐ€๋Šฅ์„ฑ๋ฐฐ์—ด ์ ‘๊ทผ, ํ•จ์ˆ˜ ์Šคํƒ ํ”„๋ ˆ์ž„

โ†’ ๊ทธ๋ž˜์„œ ์บ์‹œ๋Š” "์‚ฌ์šฉํ•œ ๊ฐ’๋งŒ ์ €์žฅ"ํ•˜์ง€ ์•Š๊ณ , ์ฃผ๋ณ€ ๊ฐ’๊นŒ์ง€ ๋ฏธ๋ฆฌ ๊ฐ€์ ธ์˜จ๋‹ค(prefetching).


๐Ÿ“Œ ์บ์‹œ ๋™์ž‘ ํ๋ฆ„

  1. CPU๊ฐ€ ์ฃผ์†Œ A๋ฅผ ์ฝ์œผ๋ ค ํ•œ๋‹ค.

  2. ์บ์‹œ์—์„œ A๊ฐ€ ์กด์žฌํ•˜๋Š”์ง€ ํ™•์ธํ•œ๋‹ค.

    • ์žˆ์œผ๋ฉด Cache Hit โ†’ ๋ฐ”๋กœ ๋ฐ˜ํ™˜ (1~3 cycle)
    • ์—†์œผ๋ฉด Cache Miss โ†’ ๋ฉ”๋ชจ๋ฆฌ์—์„œ ๊ฐ€์ ธ์™€ ์บ์‹œ์— ์ €์žฅ ํ›„ ๋ฐ˜ํ™˜ (์ˆ˜๋ฐฑ cycle)
  3. ์บ์‹œ์˜ ํฌ๊ธฐ๊ฐ€ ์ž‘๊ธฐ ๋•Œ๋ฌธ์—, ์ผ์ • ์ •์ฑ…์— ๋”ฐ๋ผ ๊ธฐ์กด ๋ฐ์ดํ„ฐ์™€ ๊ต์ฒด(eviction)ํ•œ๋‹ค.


๐Ÿ’ฅ Cache Miss ์ข…๋ฅ˜

์ข…๋ฅ˜์„ค๋ช…๋ฐœ์ƒ ์›์ธ
Cold Miss์ฒ˜์Œ ์ ‘๊ทผํ•˜๋Š” ๋ฐ์ดํ„ฐ์•„์ง ์บ์‹œ์— ์—†์Œ
Capacity Miss์บ์‹œ ๊ณต๊ฐ„์ด ๋ถ€์กฑํ•จ๋ฐ์ดํ„ฐ๊ฐ€ ๋„ˆ๋ฌด ๋งŽ์Œ
Conflict Miss์บ์‹œ์˜ ํŠน์ • ์Šฌ๋กฏ์— ์ถฉ๋ŒSet-associative ๊ตฌ์กฐ ํ•œ๊ณ„

ํŠนํžˆ Conflict Miss๋Š” ๋ฐฐ์—ด์˜ stride ์ ‘๊ทผ ๋“ฑ์—์„œ ์ž์ฃผ ๋ฐœ์ƒํ•˜๋ฉฐ, ๊ณ ๊ธ‰ ์„ฑ๋Šฅ ํŠœ๋‹์˜ ํ•ต์‹ฌ์ด๋‹ค.


๐Ÿง  CPU ๋‚ด๋ถ€์—์„œ ์บ์‹œ๊ฐ€ ํ•˜๋Š” ์ผ

  • ๋ช…๋ น์–ด ์บ์‹œ (I-Cache): ์‹คํ–‰ํ•  ๋ช…๋ น์–ด๋ฅผ ์ €์žฅ
  • ๋ฐ์ดํ„ฐ ์บ์‹œ (D-Cache): ์—ฐ์‚ฐ์— ํ•„์š”ํ•œ ๋ฐ์ดํ„ฐ ์ €์žฅ
  • TLB (Translation Lookaside Buffer): ๊ฐ€์ƒ ์ฃผ์†Œ โ†’ ๋ฌผ๋ฆฌ ์ฃผ์†Œ ๋งคํ•‘ ๊ฒฐ๊ณผ ์ €์žฅ (๊ฐ€์ƒ ๋ฉ”๋ชจ๋ฆฌ ์บ์‹œ์˜ ์ผ์ข…)

๐Ÿ’ก ์บ์‹œ๋Š” ๋ฐ์ดํ„ฐ๋งŒ ์ €์žฅํ•˜๋Š” ๊ฒŒ ์•„๋‹ˆ๋ผ, ์ฃผ์†Œ ๋ณ€ํ™˜ ๊ฒฐ๊ณผ๋„ ์ €์žฅํ•จ์œผ๋กœ์จ ๋ฉ”๋ชจ๋ฆฌ ์ ‘๊ทผ ์ „์ฒด๋ฅผ ๋น ๋ฅด๊ฒŒ ๋งŒ๋“ ๋‹ค.


๐Ÿ“ฆ PintOS์™€ ์บ์‹œ์˜ ๊ด€๊ณ„

PintOS๋Š” ์ง์ ‘ CPU ์บ์‹œ๋ฅผ ์ œ์–ดํ•˜์ง€๋Š” ์•Š์ง€๋งŒ, ๋‹ค์Œ ์ƒํ™ฉ์—์„œ ์บ์‹œ์˜ ๊ฐœ๋…์„ ์ดํ•ดํ•˜๊ณ  ์žˆ์–ด์•ผ ํ•œ๋‹ค.


1. ๐Ÿงช ์„ฑ๋Šฅ ์‹คํ—˜ ํ•ด์„

  • ๋ฐ์ดํ„ฐ ๊ตฌ์กฐ (ex. Red-Black Tree vs B-Tree)์—์„œ ์ ‘๊ทผ ํŒจํ„ด์ด ๋‹ค๋ฅด๋ฉด ์บ์‹œ ํšจ์œจ๋„ ๋‹ฌ๋ผ์ง„๋‹ค.
  • ์˜ˆ: B-Tree๋Š” fewer but wider node๋ฅผ ๊ฐ–๊ธฐ ๋•Œ๋ฌธ์— ์บ์‹œ ์ ์ค‘๋ฅ ์„ ๊ณ ๋ คํ•œ ์„ค๊ณ„์ž„
  • PintOS ํ”„๋กœ์ ํŠธ์—์„œ ์‹คํ—˜์„ ํ•  ๋•Œ ์บ์‹œ๋ฅผ ์ดํ•ดํ•˜์ง€ ๋ชปํ•˜๋ฉด ์™œ ์ด ๊ตฌ์กฐ๊ฐ€ ๋น ๋ฅธ์ง€ ์•Œ ์ˆ˜ ์—†๋‹ค.

2. ๐Ÿ”„ ์ปจํ…์ŠคํŠธ ์Šค์œ„์นญ

  • ์Šค๋ ˆ๋“œ ์ „ํ™˜ ์‹œ, ์ด์ „ ์Šค๋ ˆ๋“œ๊ฐ€ ์“ฐ๋˜ ์บ์‹œ ๋ฐ์ดํ„ฐ๋Š” ์˜๋ฏธ ์—†์Œ
  • ์ƒˆ ์Šค๋ ˆ๋“œ๋Š” ์ž์‹ ์˜ ๋ฐ์ดํ„ฐ๊ฐ€ ์บ์‹œ์— ์—†๊ธฐ ๋•Œ๋ฌธ์—, ์บ์‹œ ๋ฏธ์Šค๊ฐ€ ๋นˆ๋ฒˆํžˆ ๋ฐœ์ƒ
  • โ†’ ๋ฌธ๋งฅ ์ „ํ™˜์ด ๋งŽ์•„์งˆ์ˆ˜๋ก ์บ์‹œ ํšจ์œจ์ด ๋–จ์–ด์ง„๋‹ค

3. ๐Ÿ“š ํŽ˜์ด์ง€ ํ…Œ์ด๋ธ” & TLB์™€์˜ ๊ด€๊ณ„

  • ๊ฐ€์ƒ ๋ฉ”๋ชจ๋ฆฌ ๊ตฌํ˜„ ์‹œ, ๊ฐ€์ƒ ์ฃผ์†Œ๋ฅผ ๋ฌผ๋ฆฌ ์ฃผ์†Œ๋กœ ๋งคํ•‘ํ•ด์•ผ ํ•จ
  • ๋งค๋ฒˆ ํŽ˜์ด์ง€ ํ…Œ์ด๋ธ”์„ ์ฐธ์กฐํ•˜๋ฉด ๋А๋ฆฌ๊ธฐ ๋•Œ๋ฌธ์—, TLB๋ผ๋Š” ์ฃผ์†Œ ๋งคํ•‘ ์บ์‹œ๋ฅผ ์‚ฌ์šฉ
  • PintOS Project 3~4์—์„œ TLB miss, page fault ๋“ฑ์˜ ๊ฐœ๋…์€ Cache miss์™€ ์™„์ „ํžˆ ๋™์ผํ•œ ๋งฅ๋ฝ์ด๋‹ค

โš”๏ธ ์บ์‹œ vs ๋ฉ”๋ชจ๋ฆฌ vs ๋””์Šคํฌ ๋น„๊ต

๊ณ„์ธต์˜ˆ์‹œ์†๋„ (cycle)์„ค๋ช…
Registerrax, rsp1CPU ๋‚ด๋ถ€, ๊ฐ€์žฅ ๋น ๋ฆ„
L1 CacheCPU Core ๋‚ด๋ถ€3~4์ดˆ๊ณ ์† ์บ์‹œ
L2 CacheCore ๋‚ด๋ถ€10~15์กฐ๊ธˆ ๋А๋ฆผ
L3 CacheSocket ๊ณต์œ 30~50์—ฌ๋Ÿฌ ์ฝ”์–ด ๊ณต์œ 
DRAM๋ฉ”์ธ ๋ฉ”๋ชจ๋ฆฌ100~300์™ธ๋ถ€ ๋ฉ”๋ชจ๋ฆฌ
SSDNVMe ๋“ฑ10,000~1,000,000+๋น„ํœ˜๋ฐœ์„ฑ ์ €์žฅ์†Œ

๐Ÿ“‰ ์บ์‹œ๋ฅผ ์ž˜ ํ™œ์šฉํ•˜์ง€ ๋ชปํ•˜๋ฉด, ๋ฉ”๋ชจ๋ฆฌ ์ ‘๊ทผ์ด ๋ณ‘๋ชฉ์ด ๋œ๋‹ค.


๐Ÿ“˜ ๋งˆ๋ฌด๋ฆฌ ์š”์•ฝ

  • Cache๋Š” CPU์™€ ๋ฉ”๋ชจ๋ฆฌ ์‚ฌ์ด ์†๋„ ์ฐจ์ด๋ฅผ ์™„ํ™”ํ•˜๋Š” ์ดˆ๊ณ ์† ์ค‘๊ฐ„ ์ €์žฅ์†Œ๋‹ค.
  • ์ง€์—ญ์„ฑ(locality)์„ ๊ธฐ๋ฐ˜์œผ๋กœ ์ž‘๋™ํ•˜๋ฉฐ, ์บ์‹œ ํžˆํŠธ์œจ์ด ๋†’์„์ˆ˜๋ก ํ”„๋กœ๊ทธ๋žจ์€ ๋น ๋ฅด๊ฒŒ ์ž‘๋™ํ•œ๋‹ค.
  • PintOS๋Š” ์บ์‹œ๋ฅผ ์ง์ ‘ ์ œ์–ดํ•˜์ง„ ์•Š์ง€๋งŒ, ์Šค๋ ˆ๋“œ ์Šค์œ„์นญ, ์‹œ์Šคํ…œ ํ˜ธ์ถœ, ๋ฉ”๋ชจ๋ฆฌ ๊ตฌ์กฐ์˜ ์„ฑ๋Šฅ ํ•ด์„์—์„œ ๋ฐ˜๋“œ์‹œ ์ด ๊ฐœ๋…์„ ์ดํ•ดํ•˜๊ณ  ์žˆ์–ด์•ผ ํ•œ๋‹ค.
  • ๊ฐ€์ƒ ๋ฉ”๋ชจ๋ฆฌ์˜ TLB, ํŽ˜์ด์ง€ ํดํŠธ, ํŽ˜์ด์ง€ ๊ต์ฒด ๋“ฑ์˜ ๊ตฌ์กฐ๋Š” ์‚ฌ์‹ค์ƒ ์บ์‹œ์˜ ์—ฐ์žฅ์„ ์ด๋‹ค.
profile
์„œํˆด์ง€์–ธ์ • ๋Š˜ ํ–‰๋™์ด ๋จผ์ €์ด๊ธฐ๋ฅผ

0๊ฐœ์˜ ๋Œ“๊ธ€