ํ‹ฐ์Šคํ† ๋ฆฌ ๋ทฐ

Day 1) ๋ชจ๋ฐ”์ผ ์„ฑ๋Šฅ์˜ ์ „์ฒด ์ง€๋„

  • CPU ์‹คํ–‰(๋ช…๋ น์–ด/ํŒŒ์ดํ”„๋ผ์ธ) ↔ ๋ฉ”๋ชจ๋ฆฌ(์บ์‹œ/DRAM) ↔ OS(์Šค์ผ€์ค„๋ง/๊ฐ€์ƒ ๋ฉ”๋ชจ๋ฆฌ) ↔ UI ํ”„๋ ˆ์ž„
  • ํ•ต์‹ฌ ๋ฉ”์‹œ์ง€: ํ”„๋ ˆ์ž„ ๋“œ๋ž์€ ์ œํ•œ ์‹œ๊ฐ„ ์•ˆ์— ์ž‘์—…์„ ๋๋‚ด์ง€ ๋ชปํ•œ ๊ฒฐ๊ณผ

์ •๋ฆฌ ์งˆ๋ฌธ

  • ๋‚ด ์•ฑ์—์„œ ํ”„๋ ˆ์ž„/๋ฐฐํ„ฐ๋ฆฌ/๋ฉ”๋ชจ๋ฆฌ ๋ฌธ์ œ๋Š” ์–ด๋””์—์„œ ์ฃผ๋กœ ์ƒ๊ธฐ๋Š”๊ฐ€?
  • CPU, ๋ฉ”๋ชจ๋ฆฌ, IO ์ค‘ ๋ฌด์—‡์ด ์ฃผ๋ฒ”์ธ ์ƒํ™ฉ์ด ๋งŽ์€๊ฐ€?

๋ชจ๋ฐ”์ผ ๋™์ž‘

๋ชจ๋ฐ”์ผ์—์„œ ํ™”๋ฉด์ด ์ „ํ™˜๋˜๊ฑฐ๋‚˜ ๋ฒ„ํŠผ์„ ๋ˆŒ๋Ÿฌ ๋ฌด์–ธ๊ฐ€๊ฐ€ ๋™์ž‘ํ•˜๊ธฐ๋ฅผ ๊ธฐ๋Œ€ํ•  ๋•Œ, ๋‚ด๋ถ€์—์„œ๋Š” ์•„๋ž˜์™€ ๊ฐ™์€ ๊ตฌ์„ฑ ์š”์†Œ๋“ค์ด ๊ฐ์ž ์—ญํ• ์„ ์ˆ˜ํ–‰ํ•œ๋‹ค.

  • CPU ↔ Memory ↔ OS ↔ UI Frame

์šฐ์„ , ์œ„์— ๋‚˜์—ด๋œ ๊ฒƒ๋“ค์ด ์–ด๋–ค ์—ญํ• ์„ ํ•˜๋Š”์ง€ ํ•˜๋‚˜์”ฉ ๊ฐ„๋‹จํ•˜๊ฒŒ ์ดํ•ดํ•ด๋ณด์ž.

CPU

CPU๋Š” ์ž‘์€ ๊ณ„์‚ฐ๊ธฐ๋ผ๊ณ  ์ƒ๊ฐํ•˜๋ฉด ๋˜๊ณ , ์šฐ๋ฆฌ๊ฐ€ ์›ํ•˜๋Š” ๊ฒฐ๊ณผ๋ฅผ ๋น ๋ฅด๊ฒŒ ๊ณ„์‚ฐํ•ด์ฃผ๋Š” ์—ญํ• ์„ ํ•œ๋‹ค.

  • CPU ๋‚ด๋ถ€์—๋Š” ๋ ˆ์ง€์Šคํ„ฐ์™€ ์บ์‹œ(L1, L2, L3)๊ฐ€ ์žˆ๋‹ค.
  • ๊ณ„์‚ฐ์— ํ•„์š”ํ•œ ๋ฐ์ดํ„ฐ๊ฐ€ ๋ ˆ์ง€์Šคํ„ฐ/์บ์‹œ์— ์žˆ๋‹ค๋ฉด ๋น ๋ฅด๊ฒŒ ๊ณ„์‚ฐ์ด ๋๋‚œ๋‹ค.
  • ๋ฐ์ดํ„ฐ๊ฐ€ ์—†์œผ๋ฉด(์บ์‹œ ๋ฏธ์Šค) ๋” ํ•˜์œ„ ์บ์‹œ๋‚˜ DRAM(RAM)๊นŒ์ง€ ๋‚ด๋ ค๊ฐ€ ๋ฐ์ดํ„ฐ๋ฅผ ๊ฐ€์ ธ์™€์•ผ ํ•˜๋ฏ€๋กœ ์‹œ๊ฐ„์ด ๋Š˜์–ด๋‚œ๋‹ค.
  • ์ฆ‰, “๊ณ„์‚ฐ์ด ๋А๋ฆฌ๋‹ค”๋Š” ๋ง์€ ์ข…์ข… “๊ณ„์‚ฐ ์ž์ฒด”๊ฐ€ ์•„๋‹ˆ๋ผ “๋ฐ์ดํ„ฐ๊ฐ€ ์˜ฌ ๋•Œ๊นŒ์ง€ ๊ธฐ๋‹ค๋ฆฌ๋Š” ์‹œ๊ฐ„(๋ฉ”๋ชจ๋ฆฌ ๋Œ€๊ธฐ)”์ด ์ปค์กŒ๋‹ค๋Š” ๋œป์ผ ์ˆ˜ ์žˆ๋‹ค.

Memory

“๋ฉ”๋ชจ๋ฆฌ”๋Š” ๋ฌธ๋งฅ์— ๋”ฐ๋ผ ๋‹ค๋ฅด๊ฒŒ ์“ฐ์ด์ง€๋งŒ, ์ด ๊ธ€์—์„œ๋Š” ์ฃผ๋กœ ์„ฑ๋Šฅ ์ด์Šˆ์™€ ์—ฐ๊ฒฐ๋˜๋Š” ์˜๋ฏธ๋กœ ์ •๋ฆฌํ•œ๋‹ค.

  • ๊ฐœ๋ฐœ์ž๋“ค์ด ์ผ์ƒ์ ์œผ๋กœ ๋งํ•˜๋Š” “๋ฉ”๋ชจ๋ฆฌ”๋Š” ๋ณดํ†ต RAM(DRAM; RAM์˜ ํ•œ ์ข…๋ฅ˜)์„ ์˜๋ฏธํ•œ๋‹ค.
  • SSD๋Š” ๋ณดํ†ต “๋ฉ”๋ชจ๋ฆฌ”๋ผ๊ธฐ๋ณด๋‹ค ์Šคํ† ๋ฆฌ์ง€(์ €์žฅ์žฅ์น˜)๋กœ ๊ตฌ๋ถ„ํ•ด์„œ ๋งํ•˜๋Š” ๊ฒƒ์ด ์•ˆ์ „ํ•˜๋‹ค.
  • RAM์€ ํœ˜๋ฐœ์„ฑ, SSD๋Š” ์˜๊ตฌ ์ €์žฅ์ด๋ผ๋Š” ํŠน์„ฑ์ด ์žˆ๋‹ค.
  • ์‹ค๋ฌด์—์„œ “๋ฉ”๋ชจ๋ฆฌ ์••๋ฐ•”์€ ๋Œ€๊ฐœ RAM ์—ฌ์œ ๊ฐ€ ์ค„์–ด๋“œ๋Š” ์ƒํ™ฉ์„ ์˜๋ฏธํ•˜๋ฉฐ, ์ด๋•Œ ์„ฑ๋Šฅ/์•ˆ์ •์„ฑ์— ์˜ํ–ฅ์ด ์ปค์ง„๋‹ค.

OS(Operating System)

์šด์˜์ฒด์ œ๋Š” ๊นŠ๊ฒŒ ๋“ค์–ด๊ฐ€๋ฉด ๋์ด ์—†์ง€๋งŒ, ์ด ๊ธ€์—์„œ OS๋Š” ์•„๋ž˜ ์—ญํ• ์„ ๋งก๋Š”๋‹ค๊ณ  ๋ณด๋ฉด ๋œ๋‹ค.

  • ์•ฑ์„ ์‹คํ–‰์‹œํ‚ค๊ธฐ ์œ„ํ•ด process๋ฅผ ๋งŒ๋“ค๊ณ , ์‹คํ–‰ ํ๋ฆ„์ธ thread๋ฅผ ๋งŒ๋“ ๋‹ค.
  • ์—ฌ๋Ÿฌ ์Šค๋ ˆ๋“œ/ํ”„๋กœ์„ธ์Šค์— CPU ์‹œ๊ฐ„์„ ๋‚˜๋ˆ ์ฃผ๋Š” ์Šค์ผ€์ค„๋ง์„ ๋‹ด๋‹นํ•œ๋‹ค.
  • ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ์•ˆ์ „ํ•˜๊ณ  ์œ ์—ฐํ•˜๊ฒŒ ์“ฐ๊ฒŒ ํ•˜๋Š” ๊ฐ€์ƒ ๋ฉ”๋ชจ๋ฆฌ(virtual memory) ์ฒด๊ณ„๋ฅผ ๊ด€๋ฆฌํ•œ๋‹ค.
  • ํŒŒ์ผ/๋„คํŠธ์›Œํฌ ๊ฐ™์€ I/O๋„ OS๋ฅผ ํ†ตํ•ด ์ˆ˜ํ–‰๋œ๋‹ค.

UI Frame

์‚ฌ์šฉ์ž๋Š” CPU๋‚˜ Memory, OS๋ฅผ ์ง์ ‘ ๋ณผ ์ผ์€ ์—†๊ณ , ํ™”๋ฉด(UI Frame)๋งŒ ๋ณธ๋‹ค.

  • ํ™”๋ฉด์€ ์ฃผ์‚ฌ์œจ์— ๋”ฐ๋ผ ๊ฐฑ์‹  ๊ธฐํšŒ๊ฐ€ ๋‹ฌ๋ผ์ง„๋‹ค.
    • 60Hz: 1์ดˆ์— 60๋ฒˆ → ํ”„๋ ˆ์ž„ ์˜ˆ์‚ฐ ์•ฝ 16.7ms(1000/60)
    • 120Hz: 1์ดˆ์— 120๋ฒˆ → ํ”„๋ ˆ์ž„ ์˜ˆ์‚ฐ ์•ฝ 8.3ms(1000/120)
  • ์ด ์˜ˆ์‚ฐ ์•ˆ์— “๋‹ค์Œ ํ™”๋ฉด์„ ์œ„ํ•œ ์ค€๋น„”๊ฐ€ ๋๋‚˜์ง€ ๋ชปํ•˜๋ฉด ๋Š๊น€์ด ๋ฐœ์ƒํ•œ๋‹ค.

App ์‹คํ–‰ Flow

์œ„ ์š”์†Œ๋ฅผ ๋ดค์œผ๋‹ˆ, ์‚ฌ์šฉ์ž๊ฐ€ ์•ฑ์„ ์‹คํ–‰์‹œํ‚ค๋ฉด ๊ธฐ๊ธฐ์—์„œ ์–ด๋–ค ํ๋ฆ„์œผ๋กœ ๋™์ž‘ํ•˜๋Š”์ง€ ์ตœ์†Œ ํ๋ฆ„๋งŒ ์žก์•„๋ณด์ž.

  • ์‚ฌ์šฉ์ž๊ฐ€ ์•ฑ์„ ์‹คํ–‰ํ•˜๋ฉด OS๋Š” ์•ฑ ์‹คํ–‰์„ ์œ„ํ•œ ๋ฆฌ์†Œ์Šค(๋ฐ”์ด๋„ˆ๋ฆฌ/ํ•„์š” ํŒŒ์ผ)๋ฅผ ๋ฐ”ํƒ•์œผ๋กœ ์‹คํ–‰ ํ™˜๊ฒฝ์„ ์ค€๋น„ํ•œ๋‹ค.
  • OS๋Š” ํ•ด๋‹น ์•ฑ์„ ์œ„ํ•œ Process๋ฅผ ๋งŒ๋“ค๊ณ , ์‹คํ–‰์— ํ•„์š”ํ•œ ์ฝ”๋“œ/๋ฐ์ดํ„ฐ๋ฅผ ๋ฉ”๋ชจ๋ฆฌ์— ๋งคํ•‘ํ•œ๋‹ค.
  • ๋˜ํ•œ UI ์ด๋ฒคํŠธ๋ฅผ ์ฒ˜๋ฆฌํ•˜๊ธฐ ์œ„ํ•œ Main Thread๋ฅผ ์ค€๋น„ํ•˜๊ณ , ๋ฉ”์ธ ์Šค๋ ˆ๋“œ๋Š” RunLoop๋ฅผ ๋Œ๋ฉฐ ์ด๋ฒคํŠธ๋ฅผ ์ฒ˜๋ฆฌํ•œ๋‹ค.
  • Thread๋Š” “์ฝ”๋“œ”๋ผ๊ธฐ๋ณด๋‹ค ์‹คํ–‰์„ ์œ„ํ•œ ์ปจํ…์ŠคํŠธ๋ผ๊ณ  ์ƒ๊ฐํ•˜๋ฉด ๋œ๋‹ค.
    • ์˜ˆ: Stack, ๋ ˆ์ง€์Šคํ„ฐ ์ƒํƒœ(์Šคํƒ ํฌ์ธํ„ฐ ๋“ฑ), ์Šค์ผ€์ค„๋ง ๊ด€๋ จ ๋ฉ”ํƒ€ ๋ฐ์ดํ„ฐ

๋‚˜์ค‘ ์ฐธ๊ณ : Run loops

 

(+) ๊ฐ€์ƒ ๋ฉ”๋ชจ๋ฆฌ(VM)์™€ ์ฃผ์†Œ ๋ณ€ํ™˜

Process๋Š” ๋ฌผ๋ฆฌ ์ฃผ์†Œ(Physical Address, PA)๋ฅผ ์ง์ ‘ ์“ฐ๋Š” ๊ฒƒ์ด ์•„๋‹ˆ๋ผ, ๊ฐ€์ƒ ์ฃผ์†Œ(Virtual Address, VA)๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค.

  • ํ”„๋กœ์„ธ์Šค๊ฐ€ ์‚ฌ์šฉํ•˜๋Š” ์ฃผ์†Œ๋Š” VA
  • CPU๊ฐ€ ๋ฉ”๋ชจ๋ฆฌ์— ์ ‘๊ทผํ•  ๋•Œ๋Š” MMU(Memory Management Unit)๊ฐ€
    • ํŽ˜์ด์ง€ ํ…Œ์ด๋ธ”(๋งคํ•‘ ์ •๋ณด)์„ ์ฐธ๊ณ ํ•ด VA → PA ๋ณ€ํ™˜์„ ์ˆ˜ํ–‰ํ•œ๋‹ค.
  • ์ด ๊ตฌ์กฐ ๋•๋ถ„์— OS๋Š” ๋ฌผ๋ฆฌ ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ์œ ์—ฐํ•˜๊ฒŒ ์žฌ๋ฐฐ์น˜/๊ณต์œ /ํšŒ์ˆ˜ํ•  ์ˆ˜ ์žˆ๋‹ค.

Virtual Address๋ฅผ ์“ฐ๋Š” ์ด์œ 
“๊ทธ๋ƒฅ PA๋ฅผ ํ”„๋กœ์„ธ์Šค์— ๋ฐ”๋กœ ์ฃผ๋ฉด ๋˜๋Š” ๊ฑฐ ์•„๋‹Œ๊ฐ€?”๋ผ๋Š” ์˜๋ฌธ์ด ๋“ค์—ˆ๋‹ค.
๊ทธ๋Ÿฐ๋ฐ ์•ฑ์€ ์‹คํ–‰ํ•˜๋ฉด์„œ ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ๋” ์“ฐ๊ณ , ์ค„์ด๊ณ , ๊ณต์œ ํ•˜๊ณ , ๋ฐ˜ํ™˜ํ•˜๊ณ , ์—ฌ๋Ÿฌ ์•ฑ์ด ๋™์‹œ์— ์™”๋‹ค ๊ฐ”๋‹ค ํ•œ๋‹ค.
OS๋Š” RAM์„ ๊ณ ์ • ์นธ๋ง‰์ด์ฒ˜๋Ÿผ ๋‚˜๋ˆ  ์šด์˜ํ•˜๊ธฐ ์–ด๋ ต๊ณ , RAM์€ ํผ์ฆ์ฒ˜๋Ÿผ ์กฐ๊ฐ๋‚˜๊ธฐ ์‰ฝ๋‹ค.
PA๋งŒ ์“ฐ๋Š” ์„ธ๊ณ„์—์„œ ํ”„๋กœ์„ธ์Šค๋ฅผ ๋‹ค๋ฅธ RAM ์œ„์น˜๋กœ ์˜ฎ๊ธฐ๋ ค๋ฉด, ํ”„๋กœ์„ธ์Šค ๋‚ด๋ถ€์˜ ์ˆ˜๋งŽ์€ “ํฌ์ธํ„ฐ(์ฃผ์†Œ ๊ฐ’)”๋“ค์„ ์ฐพ์•„์„œ ์ „๋ถ€ ์ƒˆ ์ฃผ์†Œ๋กœ ์ˆ˜์ •ํ•ด์•ผ ํ•œ๋‹ค. ํฌ์ธํ„ฐ๋Š” ์•„๋ž˜์ฒ˜๋Ÿผ ๋งค์šฐ ๋งŽ๋‹ค.

  • ํž™ ๊ฐ์ฒด ํฌ์ธํ„ฐ
  • ๋ฐฐ์—ด/๋ฒ„ํผ ํฌ์ธํ„ฐ
  • ๋งํฌ๋“œ ๋ฆฌ์ŠคํŠธ next ํฌ์ธํ„ฐ
  • ๋”•์…”๋„ˆ๋ฆฌ ๋‚ด๋ถ€ ํฌ์ธํ„ฐ
  • ๋Ÿฐํƒ€์ž„ ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ ํฌ์ธํ„ฐ
  • ์Šคํƒ์— ์ €์žฅ๋œ ๋ฆฌํ„ด ์ฃผ์†Œ/์ฐธ์กฐ ๋“ฑ

    ๋ฐ˜๋ฉด VA๋ฅผ ์“ฐ๋ฉด OS๋Š” “VA๊ฐ€ ์‹ค์ œ๋กœ ๊ฐ€๋ฆฌํ‚ค๋Š” PA”๋งŒ ํŽ˜์ด์ง€ ํ…Œ์ด๋ธ”์—์„œ ๋ฐ”๊พธ๋ฉด ๋œ๋‹ค. ํ”„๋กœ์„ธ์Šค๋Š” VA๋ฅผ ๊ทธ๋Œ€๋กœ ์“ฐ๋ฉด์„œ๋„, OS๋Š” ๋ฌผ๋ฆฌ ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ์œ ์—ฐํ•˜๊ฒŒ ๊ด€๋ฆฌํ•  ์ˆ˜ ์žˆ๋‹ค.

์ด๋ ‡๊ฒŒ ํ”„๋กœ์„ธ์Šค๊ฐ€ ๋งŒ๋“ค์–ด์ง€๋ฉด ์•ฑ์€ ๋™์ž‘ํ•œ๋‹ค. ์‚ฌ์šฉ์ž๊ฐ€ ๋ฒ„ํŠผ์„ ๋ˆ„๋ฅด๊ฑฐ๋‚˜ ํŠน์ • ๋™์ž‘์œผ๋กœ ๊ณ„์‚ฐ์ด ํ•„์š”ํ•ด์ง€๋ฉด,
ํ•ด๋‹น ์‹คํ–‰ ํ๋ฆ„(์Šค๋ ˆ๋“œ)์ด CPU ์‹œ๊ฐ„์„ ๋ฐ›์•„ ๋กœ์ง์„ ์ˆ˜ํ–‰ํ•œ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ๊ทธ ๊ฒฐ๊ณผ๋กœ ์ƒํƒœ๊ฐ€ ๋ฐ”๋€Œ๋ฉด, ํ™”๋ฉด์ด ๊ฐฑ์‹ ๋œ๋‹ค.

 

๋‚˜์ค‘ ์ฐธ๊ณ :
About the Virtual Memory System

Investigating memory access crashes


Problem

์•ฑ์„ ์‚ฌ์šฉํ•  ๋•Œ ํ™”๋ฉด์ด ๋ฒ„๋ฒ…์ด๊ฑฐ๋‚˜ ๋ฉˆ์ถ”๋Š” ํ˜„์ƒ์„ ํ•œ ๋ฒˆ์ฏค์€ ๊ฒฝํ—˜ํ•ด๋ดค์„ ๊ฒƒ์ด๋‹ค. ๋ชจ๋“  ๊ฒƒ์ด ์ตœ์ ์˜ ์ƒํƒœ๋กœ ๋™์ž‘ํ•˜๋ฉด ์ด๋Ÿฐ ์ผ์€ ์ ๊ฒ ์ง€๋งŒ, ํ˜„์‹ค์—์„œ๋Š” ๋‹ค์–‘ํ•œ ์ด์œ ๋กœ ๋Š๊น€์ด ๋ฐœ์ƒํ•œ๋‹ค.

- Frame Drop

  • 60Hz ๊ธฐ์ค€ ํ”„๋ ˆ์ž„ ์˜ˆ์‚ฐ์€ ์•ฝ 16.7ms๋‹ค.
  • ๋งŒ์•ฝ UI ๊ฐฑ์‹ ์— ํ•„์š”ํ•œ ์ž‘์—…์ด ์ด ์‹œ๊ฐ„๋ณด๋‹ค ์˜ค๋ž˜ ๊ฑธ๋ฆฌ๋ฉด, ์ƒˆ ํ”„๋ ˆ์ž„์„ ์ œ๋•Œ ์ค€๋น„ํ•˜์ง€ ๋ชปํ•œ๋‹ค.
  • ๊ทธ ๊ฒฐ๊ณผ “์ด์ „ ํ”„๋ ˆ์ž„์ด ํ•œ ๋ฒˆ ๋” ๋ณด์ด๋Š”” ํ˜„์ƒ์ด ๋ฐœ์ƒํ•˜๋ฉฐ ์ด๋ฅผ Frame Drop์ด๋ผ๊ณ  ๋ถ€๋ฅธ๋‹ค.

- Hitch

  • ์Šคํฌ๋กค ์ค‘ “ํˆญ ๋Š๊ธฐ๋Š”” ์ฒด๊ฐ ์‚ฌ๊ฑด์„ ํ”ํžˆ Hitch๋ผ๊ณ  ๋ถ€๋ฅธ๋‹ค. (๋ฏธ์„ธํ•œ ๋Š๊น€)
  • Hitch๋Š” ๋Œ€๋ถ€๋ถ„ “ํ”„๋ ˆ์ž„ ์˜ˆ์‚ฐ ์ดˆ๊ณผ”๊ฐ€ ์›์ธ์ด๋ฉฐ, ๊ฒฐ๊ณผ์ ์œผ๋กœ dropped frame์„ ๋™๋ฐ˜ํ•˜๋Š” ๊ฒฝ์šฐ๊ฐ€ ๋งŽ๋‹ค.

๋‚˜์ค‘ ์ฐธ๊ณ : Hitch


์›์ธ ๊ณ„์ธต: ์™œ ๋ฐ๋“œ๋ผ์ธ์„ ๋ชป ์ง€ํ‚ค๋Š”๊ฐ€

์•„๋ž˜๋Š” ํ”„๋ ˆ์ž„ ๋“œ๋ž/ํžˆ์น˜๊ฐ€ ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ๋Š” ๋Œ€ํ‘œ์ ์ธ ์›์ธ๋“ค์ด๋‹ค.

  1. CPU ๊ณผ๋ถ€ํ•˜
    • ๊ณ„์‚ฐ๋Ÿ‰์ด ๋„ˆ๋ฌด ํฌ๋ฉด ํ”„๋ ˆ์ž„ ์˜ˆ์‚ฐ ์•ˆ์— ๋๋‚ด์ง€ ๋ชปํ•œ๋‹ค.
    • ์˜ˆ: ๋งค์šฐ ํฐ JSON ๋””์ฝ”๋”ฉ, ๋Œ€๋Ÿ‰ ๋ฐ์ดํ„ฐ ์ฒ˜๋ฆฌ, ๋ณต์žกํ•œ ๋ ˆ์ด์•„์›ƒ ๊ณ„์‚ฐ ๋“ฑ
  2. I/O ๋ธ”๋กœํ‚น
    • ํŒŒ์ผ/๋„คํŠธ์›Œํฌ/DB ๋“ฑ “๊ธฐ๋‹ค๋ฆผ์ด ๋ณธ์งˆ”์ธ ์ž‘์—…์„ UI ํ๋ฆ„์—์„œ ๋™๊ธฐ๋กœ ์ˆ˜ํ–‰ํ•˜๋ฉด ๋Š๊น€์ด ๋ฐœ์ƒํ•˜๊ธฐ ์‰ฝ๋‹ค.
    • ์˜ˆ: ํฐ ํŒŒ์ผ ์ฝ๊ธฐ + ํŒŒ์‹ฑ์„ ๋ฉ”์ธ ์Šค๋ ˆ๋“œ์—์„œ ์ฒ˜๋ฆฌ
  3. ๋ฉ”๋ชจ๋ฆฌ ๊ณ„์ธต ๋ณ‘๋ชฉ(์บ์‹œ ๋ฏธ์Šค/๋ฉ”๋ชจ๋ฆฌ ๋Œ€๊ธฐ)
    • ๋ฐ์ดํ„ฐ๊ฐ€ ์บ์‹œ์— ์—†์œผ๋ฉด DRAM๊นŒ์ง€ ๋‚ด๋ ค๊ฐ€๋ฉฐ ์ง€์—ฐ์ด ์ปค์ง„๋‹ค.
    • ์ด๋•Œ CPU๋Š” “๊ณ„์‚ฐ”๋ณด๋‹ค “๋ฐ์ดํ„ฐ ๋„์ฐฉ”์„ ๊ธฐ๋‹ค๋ฆฌ๋А๋ผ ๋А๋ ค์งˆ ์ˆ˜ ์žˆ๋‹ค.
  4. ๋™๊ธฐํ™” ๊ฒฝํ•ฉ
    • ๋ณ‘๋ ฌ ์ž‘์—…์—์„œ ๊ฐ™์€ ๋ฐ์ดํ„ฐ๋ฅผ ๋™์‹œ์— ์ ‘๊ทผํ•˜๋ฉด ๋ ˆ์ด์Šค๋ฅผ ๋ง‰๊ธฐ ์œ„ํ•ด ๋ฝ/์„ธ๋งˆํฌ์–ด ๋“ฑ์ด ํ•„์š”ํ•ด์ง„๋‹ค.
    • ๋ฝ ๊ฒฝํ•ฉ์ด ํฌ๋ฉด ์Šค๋ ˆ๋“œ๊ฐ€ ๋Œ€๊ธฐ(block) ์ƒํƒœ๋กœ ์ง€์—ฐ๋˜๊ณ , ๊ฒฐ๊ณผ์ ์œผ๋กœ ๋ฐ๋“œ๋ผ์ธ์„ ๋†“์น  ์ˆ˜ ์žˆ๋‹ค.
    • (๋ฝ์˜ ์ข…๋ฅ˜์— ๋”ฐ๋ผ CPU๋ฅผ ์†Œ๋ชจํ•˜๋ฉฐ ๋Œ€๊ธฐํ•˜๋Š” ๊ฒฝ์šฐ๋„ ์žˆ์–ด ์ƒํ™ฉ์— ๋”ฐ๋ผ ์˜ํ–ฅ์ด ๋‹ค๋ฅด๋‹ค.)

์ •๋ฆฌ ์งˆ๋ฌธ์— ๋Œ€ํ•œ ๋‚ด ๋‹ต

- ๋‚ด ์•ฑ์—์„œ ํ”„๋ ˆ์ž„/๋ฐฐํ„ฐ๋ฆฌ/๋ฉ”๋ชจ๋ฆฌ ๋ฌธ์ œ๋Š” ์–ด๋””์—์„œ ์ฃผ๋กœ ์ƒ๊ธฐ๋Š”๊ฐ€?

  • ํ”„๋ ˆ์ž„ ๋ฌธ์ œ
    • UI ๊ฐฑ์‹ ์— ํ•„์š”ํ•œ ์ž‘์—…์ด ํ”„๋ ˆ์ž„ ์˜ˆ์‚ฐ ์•ˆ์— ๋๋‚˜์ง€ ์•Š์„ ๋•Œ
    • ์›์ธ: ๋ฉ”์ธ ์Šค๋ ˆ๋“œ ๊ณผ๋ถ€ํ•˜, ๋™๊ธฐ I/O, ๋Œ€๋Ÿ‰ UI ๋ฐ˜์˜ ๋“ฑ
  • ๋ฐฐํ„ฐ๋ฆฌ ๋ฌธ์ œ
    • ๋ถˆํ•„์š”ํ•œ CPU ์›จ์ดํฌ์—…/๊ณผ๋„ํ•œ ๋ฐ˜๋ณต ์ž‘์—…์ด ๋งŽ์„ ๋•Œ
    • ์˜ˆ: ํด๋ง, ์งง์€ ์ฃผ๊ธฐ ํƒ€์ด๋จธ, ๊ณผ๋„ํ•œ ๋ฐฑ๊ทธ๋ผ์šด๋“œ ๋ฃจํ”„
  • ๋ฉ”๋ชจ๋ฆฌ ๋ฌธ์ œ
    • ํฐ ๊ฐ์ฒด ์œ ์ง€, ๊ณผ๋„ํ•œ ํ• ๋‹น/ํ•ด์ œ ๋ฐ˜๋ณต, ์บ์‹œ ์ •์ฑ… ์‹คํŒจ๋กœ RAM ์••๋ฐ•์ด ์ปค์งˆ ๋•Œ
    • ๋ฉ”๋ชจ๋ฆฌ ์••๋ฐ•์ด ์‹ฌํ•ด์ง€๋ฉด ์‹œ์Šคํ…œ์ด ์ •๋ฆฌ(๊ฐ•ํ•œ ๋ฉ”๋ชจ๋ฆฌ ํšŒ์ˆ˜/์•ฑ ์ข…๋ฃŒ)๋กœ ๋Œ€์‘ํ•  ์ˆ˜ ์žˆ๋‹ค

- CPU, ๋ฉ”๋ชจ๋ฆฌ, I/O ์ค‘ ๋ฌด์—‡์ด ์ฃผ๋ฒ”์ธ ์ƒํ™ฉ์ด ๋งŽ์€๊ฐ€?

  • ์ฒด๊ฐ ๋ฌธ์ œ๋Š” ์ข…์ข… “CPU”์ฒ˜๋Ÿผ ๋ณด์ด์ง€๋งŒ ์‹ค์ œ๋กœ๋Š” I/O ๋Œ€๊ธฐ๋‚˜ ๋ฉ”๋ชจ๋ฆฌ ๊ณ„์ธต ๋ณ‘๋ชฉ(์บ์‹œ ๋ฏธ์Šค), ๋™๊ธฐํ™” ๋Œ€๊ธฐ๊ฐ€ ์›์ธ์ธ ๊ฒฝ์šฐ๋„ ๋งŽ๋‹ค.
  • ๋‹ค๋งŒ ์‹ค๋ฌด์ ์œผ๋กœ๋Š” ์•„๋ž˜์ฒ˜๋Ÿผ ์ƒ๊ฐํ•˜๋ฉด ์ง„๋‹จ์ด ์‰ฌ์›Œ์ง„๋‹ค.
    • ๊ณ„์‚ฐ์ด ๋งŽ์œผ๋ฉด CPU ์˜์‹ฌ
    • ๊ธฐ๋‹ค๋ฆผ์ด ๋ณธ์งˆ์ด๋ฉด I/O ์˜์‹ฌ
    • ๋žœ๋ค ์ ‘๊ทผ/๋Œ€์šฉ๋Ÿ‰ ๋ฐ์ดํ„ฐ/์บ์‹œ ๋ถ•๊ดด๋ฉด ๋ฉ”๋ชจ๋ฆฌ ๊ณ„์ธต ๋ณ‘๋ชฉ ์˜์‹ฌ
    • ๋ฝ/๊ณต์œ  ์ž์› ๊ฒฝ์Ÿ์ด๋ฉด ๋™๊ธฐํ™” ๊ฒฝํ•ฉ ์˜์‹ฌ
  • UI์™€ ๊ด€๋ จ๋œ ๋ฉ”์ธ ์Šค๋ ˆ๋“œ๋Š” ๊ฐ€๋Šฅํ•œ ๊ฐ€๋ณ๊ฒŒ ์œ ์ง€ํ•˜๊ณ , ๋ฌด๊ฑฐ์šด ์ž‘์—…์€ ๋ถ„๋ฆฌํ•˜๋˜ ๋™๊ธฐํ™” ๋น„์šฉ๊นŒ์ง€ ํ•จ๊ป˜ ๊ณ ๋ คํ•ด์•ผ ํ•œ๋‹ค.

๊ฒฐ๋ก 

์šฐ๋ฆฌ๋Š” CPU/๋ฉ”๋ชจ๋ฆฌ/I/O ๋ฌธ์ œ๋ฅผ ํ•ญ์ƒ ์™„๋ฒฝํ•˜๊ฒŒ ์˜ˆ๋ฐฉํ•  ์ˆ˜๋Š” ์—†๋‹ค. ๊ทธ๋ž˜์„œ ์ค‘์š”ํ•œ ๊ฑด “๊ฐ”์ด ์•„๋‹ˆ๋ผ, ์–ด๋–ค ๊ณ„์ธต์ด ์›์ธ์ธ์ง€ ๊ฐ€์„ค์„ ์„ธ์šฐ๊ณ  ์ธก์ •ํ•˜๋Š” ๊ฒƒ์ด๋‹ค. ๊ฒฐ๊ตญ์—” Instruments ๊ฐ™์€ ๋„๊ตฌ๋กœ ํ™•์ธํ•ด์•ผ ํ•œ๋‹ค. ์ ์–ด๋„ ์ด ๊ธ€์˜ ๊ฒฐ๋ก ์€ ํ•˜๋‚˜๋‹ค.

  • ํ”„๋ ˆ์ž„ ๋“œ๋ž์€ ๋ฐ๋“œ๋ผ์ธ ์‹คํŒจ๋‹ค.
  • ๊ทธ๋ž˜์„œ ์„ฑ๋Šฅ ๋ฌธ์ œ๋Š” “์–ด๋А ๊ณ„์ธต์ด ์‹œ๊ฐ„์„ ์žก์•„๋จน์—ˆ๋Š”๊ฐ€”๋กœ ๋ถ„ํ•ดํ•ด์„œ ๋ด์•ผ ํ•œ๋‹ค.

๋‚˜์ค‘ ์ฐธ๊ณ :
Measure Energy Impact with Instruments

Improving your app’s performance

Improving app responsiveness

 

 


์•„๋ž˜๋Š” ๋‚ด๊ฐ€ ํ•ด๋‹น ๋‚ด์šฉ์„ ํ•™์Šตํ•˜๊ธฐ ์œ„ํ•ด GPT์™€ ์—ด์‹ฌํžˆ ์”จ๋ฆ„ํ•œ ๋‚ด์šฉ์ด๋‹ค. 

Chat GPT