๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ

ํ•™์Šต ๊ธฐ๋ก (Learning Logs)/Today I Learned

๐Ÿ“˜ 10์žฅ. ๋ฉ€ํ‹ฐํ”„๋กœ์„ธ์„œ ์Šค์ผ€์ค„๋ง

๐Ÿ“˜ 10์žฅ. ๋ฉ€ํ‹ฐํ”„๋กœ์„ธ์„œ ์Šค์ผ€์ค„๋ง

ํ•ต์‹ฌ ์ฃผ์ œ: ์—ฌ๋Ÿฌ CPU ์ฝ”์–ด๊ฐ€ ์žˆ์„ ๋•Œ, ์–ด๋–ป๊ฒŒ ์Šค์ผ€์ค„๋งํ• ์ง€๋ฅผ ๊ณ ๋ฏผ.

  • 10.1 ๋ฉ€ํ‹ฐํ”„๋กœ์„ธ์„œ ๊ตฌ์กฐ:
    SMP (๋Œ€์นญ ๋‹ค์ค‘์ฒ˜๋ฆฌ) ๊ตฌ์กฐ ๊ธฐ๋ฐ˜. ์—ฌ๋Ÿฌ CPU๊ฐ€ ๋™์ผํ•œ ๋ฉ”๋ชจ๋ฆฌ ์ ‘๊ทผ.
  • 10.2 ๋™๊ธฐํ™”๋ฅผ ์žŠ์ง€๋งˆ๋ผ:
    ์—ฌ๋Ÿฌ ์ฝ”์–ด ๊ฐ„ ์ž์› ์ถฉ๋Œ ๋ฐฉ์ง€๋ฅผ ์œ„ํ•ด ๋ฝ, ์„ธ๋งˆํฌ์–ด ๋“ฑ ๋™๊ธฐํ™” ํ•„์š”.
  • 10.3 ์บ์‹œ ์นœํ™”์„ฑ:
    ์Šค๋ ˆ๋“œ๊ฐ€ ๊ฐ™์€ CPU์—์„œ ์‹คํ–‰๋˜๋ฉด ์บ์‹œ ํšจ์œจ์„ฑ์ด ์ฆ๊ฐ€. ์ด๋ฅผ ๊ณ ๋ คํ•œ ๋ฐฐ์น˜ ํ•„์š”.
  • 10.4 ๋‹จ์ผ ํ ์Šค์ผ€์ค„๋ง:
    ๋ชจ๋“  ์ž‘์—…์„ ํ•˜๋‚˜์˜ ํ์—์„œ ์ฒ˜๋ฆฌ. ๊ณต์ •ํ•˜๋‚˜, ํ ๋ณ‘๋ชฉ ๊ฐ€๋Šฅ.
  • 10.5 ๋ฉ€ํ‹ฐ ํ ์Šค์ผ€์ค„๋ง:
    CPU๋งˆ๋‹ค ํ๋ฅผ ๋”ฐ๋กœ ๋‘ . ์„ฑ๋Šฅ ํ–ฅ์ƒ ๊ฐ€๋Šฅ, ํ•˜์ง€๋งŒ ๋ถ€ํ•˜ ๋ถˆ๊ท ํ˜• ๋ฌธ์ œ ๋ฐœ์ƒ ๊ฐ€๋Šฅ.
  • 10.6 Linux ๋ฉ€ํ‹ฐ ํ”„๋กœ์„ธ์„œ ์Šค์ผ€์ค„๋Ÿฌ:
    CFS (Completely Fair Scheduler) ๋“ฑ Linux์—์„œ ์‚ฌ์šฉ๋˜๋Š” ์‹ค์ œ ์Šค์ผ€์ค„๋Ÿฌ ๊ตฌ์กฐ ์†Œ๊ฐœ.
  • 10.7 ์š”์•ฝ:
    ๋ฉ€ํ‹ฐ์ฝ”์–ด ํ™˜๊ฒฝ์—์„œ๋Š” ์บ์‹œ ํšจ์œจ, ๋™๊ธฐํ™”, ํ ๊ตฌ์กฐ ๋“ฑ ์—ฌ๋Ÿฌ ์š”์†Œ๊ฐ€ ์„ฑ๋Šฅ์— ์˜ํ–ฅ.

์š”์•ฝ

๋ฉ€ํ‹ฐํ”„๋กœ์„ธ์„œ ์‹œ์Šคํ…œ์—์„œ์˜ ์Šค์ผ€์ค„๋ง์€ ๋‹จ์ผ ํ”„๋กœ์„ธ์„œ ์‹œ์Šคํ…œ๋ณด๋‹ค ๋ณต์žกํ•จ

์บ์‹œ ์ผ๊ด€์„ฑ, ๋™๊ธฐํ™”, ๋ถ€ํ•˜ ๋ถ„์‚ฐ ๋“ฑ ๋‹ค์–‘ํ•œ ์š”์†Œ๋ฅผ ๊ณ ๋ คํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

 


๋ฐฐ๊ฒฝ: ๋ฉ€ํ‹ฐํ”„๋กœ์„ธ์„œ ๊ตฌ์กฐ


๋ฉ€ํ‹ฐํ”„๋กœ์„ธ์„œ ์‹œ์Šคํ…œ์—์„œ๋Š” ๊ฐ CPU๊ฐ€ ์ž์ฒด ์บ์‹œ๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ์œผ๋ฉฐ, ์ด๋กœ ์ธํ•ด ์บ์‹œ ์ผ๊ด€์„ฑ ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์˜ˆ๋ฅผ ๋“ค์–ด, ํ•˜๋‚˜์˜ CPU์—์„œ ๋ฉ”๋ชจ๋ฆฌ ๊ฐ’์„ ๋ณ€๊ฒฝํ•˜๋ฉด ๋‹ค๋ฅธ CPU์˜ ์บ์‹œ์—๋Š” ์ด์ „ ๊ฐ’์ด ๋‚จ์•„ ์žˆ์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์ด๋ฅผ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•ด **๋ฒ„์Šค ์Šค๋ˆ„ํ•‘(bus snooping)**๊ณผ ๊ฐ™์€ ํ•˜๋“œ์›จ์–ด ๊ธฐ์ˆ ์ด ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค.

 


๐Ÿง  1. ์ปดํ“จํ„ฐ๋Š” ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ์–ด๋–ป๊ฒŒ ์ €์žฅํ•˜๊ณ  ์ ‘๊ทผํ• ๊นŒ?

๐Ÿ“š ๋ฉ”๋ชจ๋ฆฌ ๊ณ„์ธต ๊ตฌ์กฐ

์ปดํ“จํ„ฐ ์‹œ์Šคํ…œ์€ ์†๋„์™€ ๋น„์šฉ์˜ ๊ท ํ˜•์„ ๋งž์ถ”๊ธฐ ์œ„ํ•ด ๋‹ค๋‹จ๊ณ„ ๋ฉ”๋ชจ๋ฆฌ ๊ตฌ์กฐ๋ฅผ ์‚ฌ์šฉ

 

๐Ÿ“ ๋ ˆ์ง€์Šคํ„ฐ < ์บ์‹œ < ๋ฉ”์ธ ๋ฉ”๋ชจ๋ฆฌ(RAM) < ๋””์Šคํฌ(HDD/SSD)
     (๊ฐ€์žฅ ๋น ๋ฆ„)                      (๊ฐ€์žฅ ๋А๋ฆผ)
  • ๋ ˆ์ง€์Šคํ„ฐ: CPU ๋‚ด๋ถ€์— ์žˆ๋Š” ์•„์ฃผ ๋น ๋ฅด๊ณ  ์ž‘์€ ์ €์žฅ ๊ณต๊ฐ„.
  • ์บ์‹œ (L1, L2, L3): CPU์— ๊ฐ€๊นŒ์šด ๊ณ ์† ๋ฉ”๋ชจ๋ฆฌ. ์ ‘๊ทผ ์†๋„๊ฐ€ ๋น ๋ฅด๊ณ , ์ตœ๊ทผ ์ž์ฃผ ์‚ฌ์šฉํ•˜๋Š” ๋ฐ์ดํ„ฐ๋ฅผ ์ €์žฅ.
  • ๋ฉ”์ธ ๋ฉ”๋ชจ๋ฆฌ (RAM): ๋น„๊ต์  ํฌ๊ณ  ๋А๋ฆฌ๋ฉฐ, ํ”„๋กœ๊ทธ๋žจ ์‹คํ–‰์— ํ•„์š”ํ•œ ๋Œ€๋ถ€๋ถ„์˜ ๋ฐ์ดํ„ฐ๋ฅผ ์ €์žฅ.
  • ๋””์Šคํฌ (SSD/HDD): ์•„์ฃผ ๋А๋ฆฌ์ง€๋งŒ ๋งค์šฐ ํฐ ์ €์žฅ ๊ณต๊ฐ„.

 

โš™๏ธ 2. ์บ์‹œ๋Š” ์–ด๋–ป๊ฒŒ ์ž‘๋™ํ• ๊นŒ?

โœ… ์ง€์—ญ์„ฑ ์›๋ฆฌ (Locality)

์บ์‹œ๋Š” ํ”„๋กœ๊ทธ๋žจ ์‹คํ–‰ ํŒจํ„ด์„ ์˜ˆ์ธกํ•ด์„œ ์ž์ฃผ ์ ‘๊ทผํ•  ๋ฐ์ดํ„ฐ๋ฅผ ๋ฏธ๋ฆฌ ๊ฐ€์ ธ๋‹ค ๋†“๋Š” ๋ฐฉ์‹์œผ๋กœ ์ž‘๋™ํ•ด์š”.

  • ์‹œ๊ฐ„์  ์ง€์—ญ์„ฑ (Temporal):
    ๋ฐฉ๊ธˆ ์“ด ๋ฐ์ดํ„ฐ๋Š” ๋˜ ์“ธ ๊ฐ€๋Šฅ์„ฑ์ด ๋†’์Œ → ๋‹ค์‹œ ์ ‘๊ทผํ•  ๊ฑธ ๋Œ€๋น„ํ•ด ์ €์žฅ
  • ๊ณต๊ฐ„์  ์ง€์—ญ์„ฑ (Spatial):
    ์ง€๊ธˆ x ์ฃผ์†Œ์— ์ ‘๊ทผํ–ˆ๋‹ค๋ฉด, x ๊ทผ์ฒ˜์˜ ๋ฐ์ดํ„ฐ๋„ ๊ณง ์ ‘๊ทผํ•  ๊ฐ€๋Šฅ์„ฑ์ด ์žˆ์Œ → ๋ฉ์–ด๋ฆฌ๋กœ ๋ฏธ๋ฆฌ ๋ถˆ๋Ÿฌ์˜ด

๐Ÿ’ก ํ•˜๋“œ์›จ์–ด ์บ์‹œ ๊ณ„์ธต(cache hierarchy)

์บ์‹œ(Cache)

CPU๊ฐ€ ๋ฉ”์ธ ๋ฉ”๋ชจ๋ฆฌ๋ณด๋‹ค ๋น ๋ฅด๊ฒŒ ๋ฐ์ดํ„ฐ์— ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ๋„๋ก ๋„์™€์ฃผ๋Š” ๊ณ ์† ์ž„์‹œ ์ €์žฅ์†Œ

ํ•˜์ง€๋งŒ ์บ์‹œ๋Š” ์šฉ๋Ÿ‰์ด ์ž‘๊ธฐ ๋•Œ๋ฌธ์—, ๋” ํšจ์œจ์ ์œผ๋กœ ์“ฐ๊ธฐ ์œ„ํ•ด ๊ณ„์ธต ๊ตฌ์กฐ๋กœ ๋‚˜๋ˆ ์„œ ์‚ฌ์šฉ

 

 

  • ์บ์‹œ๋Š” CPU์™€ ๋ฉ”๋ชจ๋ฆฌ ์‚ฌ์ด์˜ ์ค‘๊ฐ„ ๋‹ค๋ฆฌ ์—ญํ• 
  • L1 → L2 → L3 → RAM ์ˆœ์œผ๋กœ ์ ์  ๋А๋ ค์ง€๊ณ  ์ปค์ง
  • ์†๋„ vs ์šฉ๋Ÿ‰ ํŠธ๋ ˆ์ด๋“œ์˜คํ”„
  • ์ง€์—ญ์„ฑ(locality)์„ ๊ธฐ๋ฐ˜์œผ๋กœ ๋™์ž‘ → ์ตœ๊ทผ/๊ทผ์ฒ˜์˜ ๋ฐ์ดํ„ฐ๋ฅผ ์ž์ฃผ ์บ์‹œ์— ๋‘ 

 

 

๐Ÿงฑ ์บ์‹œ ๊ณ„์ธต ๊ตฌ์กฐ (๋ณดํ†ต L1 → L2 → L3)

CPU Core
  โ”œโ”€ L1 Cache (๋น ๋ฅด๊ณ  ์ž‘์Œ)
  โ”œโ”€ L2 Cache (์ค‘๊ฐ„ ์†๋„, ์ค‘๊ฐ„ ํฌ๊ธฐ)
  โ””โ”€ L3 Cache (๋А๋ฆฌ์ง€๋งŒ ํผ, ์—ฌ๋Ÿฌ ์ฝ”์–ด ๊ณต์œ )
        ↓
      Main Memory (RAM)โ€‹

 

๊ณ„์ธต ์œ„์น˜ ์†๋„ ํฌ๊ธฐ ํŠน์ง•
L1 ์บ์‹œ CPU ์ฝ”์–ด ๋‚ด๋ถ€ ๊ฐ€์žฅ ๋น ๋ฆ„ ๋งค์šฐ ์ž‘์Œ (16~64KB) ๋ช…๋ น์–ด ์บ์‹œ(I-cache)์™€ ๋ฐ์ดํ„ฐ ์บ์‹œ(D-cache)๋กœ ๋ถ„๋ฆฌ๋จ
L2 ์บ์‹œ CPU ์ฝ”์–ด ๋‚ด๋ถ€ ๋น ๋ฆ„ ์ค‘๊ฐ„ ํฌ๊ธฐ (256KB~1MB) L1๋ณด๋‹ค ๋А๋ฆฌ์ง€๋งŒ ๋” ํผ
L3 ์บ์‹œ CPU ์ „์ฒด ๊ณต์œ  ๋А๋ฆผ ํผ (2~64MB) ์—ฌ๋Ÿฌ ์ฝ”์–ด๊ฐ€ ํ•จ๊ป˜ ์‚ฌ์šฉ (๊ณต์œ  ์บ์‹œ)
RAM (๋ฉ”์ธ ๋ฉ”๋ชจ๋ฆฌ) CPU ์™ธ๋ถ€ ํ›จ์”ฌ ๋А๋ฆผ ํผ (GB ๋‹จ์œ„) ์บ์‹œ ๋ฏธ์Šค ์‹œ ์—ฌ๊ธฐ์„œ ๋ฐ์ดํ„ฐ๋ฅผ ์ฝ์Œ

 

  • L1์€ ์—„์ฒญ ๋น ๋ฅด์ง€๋งŒ ๋„ˆ๋ฌด ์ž‘์Œ
  • L3๋Š” ๋งŽ์ด ๋‹ด์„ ์ˆ˜ ์žˆ์ง€๋งŒ ๋А๋ฆผ
    → ๊ทธ๋ž˜์„œ ๋น ๋ฅด๊ณ  ์ž‘์€ ์บ์‹œ๋ถ€ํ„ฐ ์ฐจ๋ก€๋Œ€๋กœ ์กฐํšŒํ•˜๋ฉด์„œ ์„ฑ๋Šฅ๊ณผ ์šฉ๋Ÿ‰์˜ ๊ท ํ˜•์„ ๋งž์ถค

 

 

๐ŸŒ€ ๋ฐ์ดํ„ฐ ํ๋ฆ„ ์˜ˆ์‹œ

CPU๊ฐ€ ๋ณ€์ˆ˜ x๋ฅผ ์‚ฌ์šฉํ•˜๋ ค๊ณ  ํ•  ๋•Œ:

  1. L1 ์บ์‹œ์—์„œ ์ฐพ์Œ (hit) → ๋ฐ”๋กœ ์‚ฌ์šฉ! โœ…
    1. L1์— ์—†์œผ๋ฉด → L2 ์บ์‹œ์—์„œ ์ฐพ์Œ
    2. L2์—๋„ ์—†์œผ๋ฉด → L3 ์บ์‹œ์—์„œ ์ฐพ์Œ
    3. ๊ทธ๋ž˜๋„ ์—†์œผ๋ฉด → RAM์—์„œ ๊ฐ€์ ธ์˜ด (๋งค์šฐ ๋А๋ฆผ)
  2. ์ฐพ์€ ๊ฐ’์„ ์œ„ ๊ณ„์ธต ์บ์‹œ์— ๋ณต์‚ฌํ•ด๋‘๊ณ  ์‚ฌ์šฉ

 


โ—๏ธ๋ฉ€ํ‹ฐํ”„๋กœ์„ธ์„œ ์‹œ์Šคํ…œ์—์„œ ์ƒ๊ธฐ๋Š” ๋ฌธ์ œ: ์บ์‹œ ์ผ๊ด€์„ฑ ๋ฌธ์ œ

 

 

๋ฉ€ํ‹ฐ์ฝ”์–ด(๋ฉ€ํ‹ฐCPU) ์‹œ์Šคํ…œ์—์„œ๋Š” ๊ฐ CPU๊ฐ€ ์ž์‹ ๋งŒ์˜ ์บ์‹œ๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ์–ด์š”.
๊ทธ๋Ÿฐ๋ฐ ๋ฌธ์ œ๋Š” ์ด ์บ์‹œ๋“ค์ด ๊ณต์œ  ๋ฉ”๋ชจ๋ฆฌ์˜ ๋ฐ์ดํ„ฐ๋ฅผ ๋ณต์‚ฌํ•ด ์ €์žฅํ•œ๋‹ค๋Š” ์ ์ด์—์š”.

โ“๋ฌธ์ œ ์ƒํ™ฉ

  • CPU1์˜ ์บ์‹œ์— x = 10
  • CPU2์˜ ์บ์‹œ์— x = 10

 

  • CPU1์ด ์ฃผ์†Œ A์˜ ๊ฐ’์„ ์บ์‹œ์—์„œ 10 → 20๋กœ ๋ณ€๊ฒฝ
  • CPU2๋Š” ๊ฐ™์€ ์ฃผ์†Œ A๋ฅผ ๋ฉ”์ธ ๋ฉ”๋ชจ๋ฆฌ์—์„œ ์ฝ๋Š”๋ฐ, ์—ฌ์ „ํžˆ ์˜›๋‚  ๊ฐ’ 10
  • ๐Ÿ’ฅ ๋‘ CPU๊ฐ€ ์„œ๋กœ ๋‹ค๋ฅธ ๊ฐ’์„ ๊ฐ–๊ฒŒ ๋จ (๋ถˆ์ผ์น˜ ๋ฐœ์ƒ) → ๐Ÿ’ฃ ์ผ๊ด€์„ฑ ๊นจ์ง

๐Ÿ˜ฑ ์™œ ์ด๋ ‡๊ฒŒ ๋˜๋ƒ๋ฉด?

  • ์บ์‹œ์—๋งŒ ๋ณ€๊ฒฝํ•˜๊ณ , ๋ฉ”์ธ ๋ฉ”๋ชจ๋ฆฌ์— ์“ฐ๋Š” ๊ฑด ๋‚˜์ค‘์—(dirty write-back) ํ•˜๊ธฐ ๋•Œ๋ฌธ
  • ๊ทธ๋ž˜์„œ CPU2๋Š” ๋ฉ”์ธ ๋ฉ”๋ชจ๋ฆฌ์— ์žˆ๋Š” ์˜ค๋ž˜๋œ ๊ฐ’์„ ์ฝ๋Š” ๊ฒƒ!

 


๐Ÿ”„ ํ•ด๊ฒฐ์ฑ…: ์บ์‹œ ์ผ๊ด€์„ฑ ํ”„๋กœํ† ์ฝœ (Cache Coherence Protocol)

 

"๋ชจ๋“  CPU๋“ค์ด ๋ฉ”๋ชจ๋ฆฌ ๋ฒ„์Šค๋ฅผ ์—ฟ๋“ค์œผ๋ฉด์„œ(snoop), ๋‹ค๋ฅธ CPU๊ฐ€ ์–ด๋–ค ๋ฐ์ดํ„ฐ๋ฅผ ์ฝ๊ฑฐ๋‚˜ ์“ฐ๋Š”์ง€ ๊ฐ์‹œํ•œ๋‹ค."

๐Ÿ’ฌ ๋ฒ„์Šค ์Šค๋ˆ„ํ•‘ (Bus Snooping)

  • ๋ชจ๋“  CPU๊ฐ€ ๋ฉ”๋ชจ๋ฆฌ ๋ฒ„์Šค๋ฅผ ๊ฐ์‹œ(snoop)ํ•ด์„œ, ๋‹ค๋ฅธ CPU๊ฐ€ ์–ด๋–ค ์ฃผ์†Œ๋ฅผ ์ฝ๊ฑฐ๋‚˜ ์“ฐ๋Š”์ง€ ์ฒดํฌ
  • ๋‹ค๋ฅธ CPU๊ฐ€ ๋‚ด๊ฐ€ ๊ฐ–๊ณ  ์žˆ๋Š” ๋ฐ์ดํ„ฐ๋ฅผ ๋ฐ”๊ฟจ๋‹ค๋ฉด?
    • → ๋‚ด ์บ์‹œ์˜ ๊ทธ ๋ฐ์ดํ„ฐ๋ฅผ ๋ฌดํšจํ™”(Invalidate)
    • → ๋˜๋Š” ์‚ญ์ œ->๊ฐฑ์‹ (Update) ํ•ด์„œ ์ผ๊ด€์„ฑ ์œ ์ง€

๐Ÿ“ฆ MESI ํ”„๋กœํ† ์ฝœ (๋Œ€ํ‘œ์ ์ธ ์ผ๊ด€์„ฑ ํ”„๋กœํ† ์ฝœ)

 

๋ฒ„์Šค ์Šค๋ˆ„ํ•‘์„ ๊ตฌํ˜„ํ•  ๋•Œ ์ž์ฃผ ์‚ฌ์šฉํ•˜๋Š” ์ƒํƒœ ๊ธฐ๋ฐ˜ ํ”„๋กœํ† ์ฝœ

์ƒํƒœ ์˜๋ฏธ
M (Modified) ๋‚ด๊ฐ€ ๊ฐ€์ง€๊ณ  ์žˆ๊ณ , ๋ฉ”๋ชจ๋ฆฌ์™€ ๋‹ค๋ฆ„
E (Exclusive) ๋‚ด๊ฐ€ ๊ฐ€์ง€๊ณ  ์žˆ์ง€๋งŒ ๋ฉ”๋ชจ๋ฆฌ์™€ ๊ฐ™์Œ
S (Shared) ์—ฌ๋Ÿฌ ์บ์‹œ์—์„œ ๊ณต์œ 
I (Invalid) ๋ฌดํšจ ์ƒํƒœ

→ ์ด๋Ÿฐ ์ƒํƒœ ์ „์ด๋ฅผ ํ†ตํ•ด ์บ์‹œ ๋ฐ์ดํ„ฐ์˜ ์ผ๊ด€์„ฑ์„ ์œ ์ง€ํ•จ

 

 


๐Ÿ’ก TLB๋ž€?

๋”๋ณด๊ธฐ

๐Ÿ’ก TLB๋ž€?

TLB๋Š” Translation Lookaside Buffer์˜ ์ค„์ž„๋ง์ด๊ณ ,
ํ•œ๊ตญ์–ด๋กœ๋Š” ๋ณ€ํ™˜ ํ›„๋ฐฉ ๋ฒ„ํผ ๋˜๋Š” ๊ทธ๋ƒฅ "์ฃผ์†Œ ๋ณ€ํ™˜ ์บ์‹œ"๋ผ๊ณ  ๋ถˆ๋Ÿฌ์š”.

๊ฐ€์ƒ์ฃผ์†Œ๋ฅผ ๋ฌผ๋ฆฌ์ฃผ์†Œ๋กœ ๋ฐ”๊พธ๋Š” page table ๋‚ด์šฉ์„ ์บ์‹œํ•ด๋‘ 
CPU
 โ””โ”€ TLB (์ฃผ์†Œ ๋ณ€ํ™˜ ์บ์‹œ)
     โ””โ”€ ํŽ˜์ด์ง€ ํ…Œ์ด๋ธ” (RAM ์•ˆ์— ์žˆ์Œ)
         โ””โ”€ ์‹ค์ œ ๋ฌผ๋ฆฌ ๋ฉ”๋ชจ๋ฆฌ

 

๐Ÿง  ์™œ TLB๊ฐ€ ํ•„์š”ํ• ๊นŒ?

๐Ÿ‘‰ ํ˜„๋Œ€ ์šด์˜์ฒด์ œ๋Š” ๊ฐ€์ƒ ๋ฉ”๋ชจ๋ฆฌ(Virtual Memory)๋ฅผ ์‚ฌ์šฉํ•ด์š”.

์ฆ‰, ํ”„๋กœ๊ทธ๋žจ์€ ์‹ค์ œ ๋ฉ”๋ชจ๋ฆฌ(RAM) ์ฃผ์†Œ๋ฅผ ์ง์ ‘ ์“ฐ๋Š” ๊ฒŒ ์•„๋‹ˆ๋ผ,
๊ฐ€์ƒ์˜ ์ฃผ์†Œ(๊ฐ€์ƒ ์ฃผ์†Œ)๋ฅผ ์“ฐ๊ณ  -> ์‹ค์ œ๋กœ๋Š” ๊ทธ๊ฑธ ์‹ค์ œ ๋ฌผ๋ฆฌ ์ฃผ์†Œ๋กœ ๋ณ€ํ™˜ํ•ด์„œ ์‚ฌ์šฉํ•ด์š”.

์ด ๊ฐ€์ƒ ์ฃผ์†Œ → ๋ฌผ๋ฆฌ ์ฃผ์†Œ ๋ณ€ํ™˜์€ **ํŽ˜์ด์ง€ ํ…Œ์ด๋ธ”(Page Table)**์ด๋ผ๋Š” ๊ฑธ ํ†ตํ•ด ์ด๋ฃจ์–ด์ ธ์š”.

โ—๋ฌธ์ œ๋Š”?

Page Table์„ ๋งค๋ฒˆ ๋ฉ”์ธ๋ฉ”๋ชจ๋ฆฌ(RAM)์—์„œ ์ฐพ์•„๊ฐ€๋ฉฐ ๋ณ€ํ™˜ํ•˜๋ ค๋ฉด ๋„ˆ๋ฌด ๋А๋ ค์š”.

 

 

โœ… ๊ทธ๋ž˜์„œ ๋“ฑ์žฅํ•œ ํ•ด๊ฒฐ์ฑ…: TLB

"TLB๋Š” ์ตœ๊ทผ ์‚ฌ์šฉ๋œ ๊ฐ€์ƒ ์ฃผ์†Œ → ๋ฌผ๋ฆฌ ์ฃผ์†Œ ๋ณ€ํ™˜ ๊ฒฐ๊ณผ๋ฅผ ์บ์‹ฑํ•ด๋‘๋Š” ์žฅ์น˜"์˜ˆ์š”.

  • ์˜ˆ์ „์— ํ•œ๋ฒˆ ๋ณ€ํ™˜ํ–ˆ๋˜ ์ฃผ์†Œ๊ฐ€ ๋˜ ํ•„์š”ํ•˜๋ฉด
  • RAM์— ์žˆ๋Š” ํŽ˜์ด์ง€ ํ…Œ์ด๋ธ”๊นŒ์ง€ ๊ฐ€์ง€ ์•Š๊ณ 
  • TLB์—์„œ ๋น ๋ฅด๊ฒŒ ์ฃผ์†Œ๋ฅผ ์ฐพ์•„๋‚ผ ์ˆ˜ ์žˆ์–ด์š”!

 

๐Ÿ”„ ๋™์ž‘ ํ๋ฆ„

  1. CPU๊ฐ€ ์–ด๋–ค ๊ฐ€์ƒ ์ฃผ์†Œ 0xABC123์— ์ ‘๊ทผํ•จ
  2. TLB์— ํ•ด๋‹น ์ฃผ์†Œ๊ฐ€ ์žˆ๋Š”์ง€ ๋จผ์ € ํ™•์ธ
    • ์žˆ์œผ๋ฉด → ๋น ๋ฅด๊ฒŒ ๋ฌผ๋ฆฌ ์ฃผ์†Œ๋กœ ๋ณ€ํ™˜ โœ… (TLB hit)
    • ์—†์œผ๋ฉด → ํŽ˜์ด์ง€ ํ…Œ์ด๋ธ”๊นŒ์ง€ ๊ฐ€์„œ ๋ณ€ํ™˜ํ•˜๊ณ , TLB์— ์ €์žฅ โŒ (TLB miss)

 

 


๋™๊ธฐํ™”(synchronization)

์—ฌ๋Ÿฌ CPU๊ฐ€ ๊ณต์œ  ๋ฐ์ดํ„ฐ๋ฅผ ์ ‘๊ทผํ•  ๋•Œ, **๋™๊ธฐํ™”(synchronization)**๊ฐ€ ํ•„์ˆ˜์ ์ž…๋‹ˆ๋‹ค.

๊ทธ๋ ‡์ง€ ์•Š์œผ๋ฉด ๋ฐ์ดํ„ฐ ๋ถˆ์ผ์น˜๋‚˜ ๊ฒฝํ•ฉ ์ƒํƒœ๊ฐ€ ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๋”ฐ๋ผ์„œ ๋ฝ(lock)๊ณผ ๊ฐ™์€ ๋™๊ธฐํ™” ๋ฉ”์ปค๋‹ˆ์ฆ˜์„ ์‚ฌ์šฉํ•˜์—ฌ ์ƒํ˜ธ ๋ฐฐ์ œ๋ฅผ ๋ณด์žฅํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

 

๋ฝ์„ ํ•˜๋ฉด ์„ฑ๋Šฅ์ด ๋А๋ ค์ง„๋‹ค.


์บ์‹œ ์นœํ™”์„ฑ(cache affinity)

ํ”„๋กœ์„ธ์Šค๊ฐ€ ๋™์ผํ•œ CPU์—์„œ ์ง€์†์ ์œผ๋กœ ์‹คํ–‰๋˜๋ฉด ํ•ด๋‹น CPU์˜ ์บ์‹œ์— ๋ฐ์ดํ„ฐ๊ฐ€ ์œ ์ง€๋˜์–ด ์„ฑ๋Šฅ์ด ํ–ฅ์ƒ๋ฉ๋‹ˆ๋‹ค.

์ด๋ฅผ **์บ์‹œ ์นœํ™”์„ฑ(cache affinity)**์ด๋ผ๊ณ  ํ•˜๋ฉฐ,

์Šค์ผ€์ค„๋Ÿฌ๋Š” ์ด๋ฅผ ๊ณ ๋ คํ•˜์—ฌ ํ”„๋กœ์„ธ์Šค๋ฅผ ๊ฐ€๋Šฅํ•œ ํ•œ ๋™์ผํ•œ CPU์— ํ• ๋‹นํ•˜๋ ค๊ณ  ํ•ฉ๋‹ˆ๋‹ค.

 

โœ… ๊ฐ™์€ CPU์—์„œ ์‹คํ–‰๋˜๋ฉด?

→ ์ด๋ฏธ ์บ์‹œ์— ๋ฐ์ดํ„ฐ๊ฐ€ ์˜ฌ๋ผ๊ฐ€ ์žˆ์œผ๋‹ˆ๊นŒ → ๋น ๋ฅด๊ฒŒ ์‹คํ–‰๋จ! (cache hit ๋ฐœ์ƒ)

โŒ ๋‹ค๋ฅธ CPU์—์„œ ์‹คํ–‰๋˜๋ฉด?

→ ๋‹ค๋ฅธ CPU ์บ์‹œ์—๋Š” ์•„๋ฌด๊ฒƒ๋„ ์—†์Œ → ๋‹ค์‹œ ๋ฐ์ดํ„ฐ๋ฅผ RAM์—์„œ ๋ถˆ๋Ÿฌ์™€์•ผ ํ•จ → ๋А๋ ค์ง (cache miss)

 

๐Ÿ’ฅ ๋ฌธ์ œ๋Š”?

๋ฉ€ํ‹ฐ์ฝ”์–ด ์‹œ์Šคํ…œ์—์„œ๋Š” OS ์Šค์ผ€์ค„๋Ÿฌ๊ฐ€ ํ”„๋กœ์„ธ์Šค๋ฅผ ์ž์œ ๋กญ๊ฒŒ ์–ด๋–ค CPU์—์„œ๋“  ์‹คํ–‰์‹œํ‚ฌ ์ˆ˜ ์žˆ์–ด์š”.
๊ทธ๋Ÿฐ๋ฐ ๋งค๋ฒˆ ๋‹ค๋ฅธ CPU์—์„œ ์‹คํ–‰๋˜๋ฉด ์„ฑ๋Šฅ์ด ๋–จ์–ด์ง„๋‹ค๋Š” ๊ฒŒ ๋ฌธ์ œ.

 

 

 

 


๋‹จ์ผ ํ ์Šค์ผ€์ค„๋ง
๋ชจ๋“  ์ž‘์—…์„ ํ•˜๋‚˜์˜ ์ „์—ญ ํ์—์„œ ๊ด€๋ฆฌํ•˜๋ฉฐ, ๊ฐ CPU๋Š” ์ด ํ์—์„œ ์ž‘์—…์„ ๊ฐ€์ ธ์™€ ์‹คํ–‰ํ•ฉ๋‹ˆ๋‹ค.

์ด ๋ฐฉ์‹์€ ๊ณต์ •์„ฑ์„ ๋ณด์žฅํ•˜์ง€๋งŒ, ํ๊ฐ€ ๋ณ‘๋ชฉ์ด ๋  ์ˆ˜ ์žˆ๊ณ , ์บ์‹œ ์นœํ™”์„ฑ์ด ์ €ํ•˜๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

 

 


๋ฉ€ํ‹ฐ ํ ์Šค์ผ€์ค„๋ง
๊ฐ CPU๋งˆ๋‹ค ์ž์ฒด์ ์ธ ํ๋ฅผ ๊ฐ€์ง€๊ณ  ์ž‘์—…์„ ๊ด€๋ฆฌํ•ฉ๋‹ˆ๋‹ค.

์ด๋Š” ์บ์‹œ ์นœํ™”์„ฑ์„ ๋†’์ผ ์ˆ˜ ์žˆ์ง€๋งŒ, CPU ๊ฐ„์˜ ๋ถ€ํ•˜ ๋ถˆ๊ท ํ˜•(load imbalance) ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

 

 


Linux ๋ฉ€ํ‹ฐํ”„๋กœ์„ธ์„œ ์Šค์ผ€์ค„๋Ÿฌ
Linux๋Š” ๋ฉ€ํ‹ฐํ”„๋กœ์„ธ์„œ ํ™˜๊ฒฝ์—์„œ **Completely Fair Scheduler (CFS)**๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๊ฐ CPU์˜ ๋Ÿฐํ(run queue)๋ฅผ ๊ด€๋ฆฌํ•˜๊ณ ,

๋ถ€ํ•˜ ๋ถ„์‚ฐ(load balancing) ์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ํ†ตํ•ด CPU ๊ฐ„์˜ ์ž‘์—… ๋ถ€ํ•˜๋ฅผ ์กฐ์ ˆํ•ฉ๋‹ˆ๋‹ค.