๐Ÿš€ ๋ฆฌ๋ˆ…์Šค ๋ฉ”๋ชจ๋ฆฌ ๊ด€๋ฆฌ, ํ•œ๋ฒˆ ์ œ๋Œ€๋กœ ๋“ค์—ฌ๋‹ค๋ณด๊ธฐ~

GoldenDuskยท2025๋…„ 4์›” 7์ผ
0

Linux

๋ชฉ๋ก ๋ณด๊ธฐ
3/4
post-thumbnail

์ปดํ“จํ„ฐ๋ฅผ ์‚ฌ์šฉํ•˜๋‹ค ๋ณด๋ฉด ๊ฐ‘์ž๊ธฐ ํ”„๋กœ๊ทธ๋žจ์ด ๋А๋ ค์ง€๊ฑฐ๋‚˜ ์ข…๋ฃŒ๋˜๋Š” ๋‹ต๋‹ตํ•œ ๊ฒฝํ—˜์„ ํ•œ ์  ์žˆ์œผ์‹ ๊ฐ€์š”?

์ด๋Ÿฐ ๋ฌธ์ œ๋“ค์€ ๋Œ€๋ถ€๋ถ„ '๋ฉ”๋ชจ๋ฆฌ ๋ถ€์กฑ' ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค.

ํ˜น์‹œ ์ปดํ“จํ„ฐ๊ฐ€ ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ์–ด๋–ป๊ฒŒ ๊ด€๋ฆฌํ•˜๋Š”์ง€ ๊ถ๊ธˆํ–ˆ๋˜ ์  ์žˆ๋‚˜์š”? ์‚ฌ์‹ค ์šฐ๋ฆฌ ์ปดํ“จํ„ฐ๋Š” ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ๋งค์šฐ ๊ผผ๊ผผํ•˜๊ณ  ์˜๋ฆฌํ•˜๊ฒŒ ๊ด€๋ฆฌํ•˜๊ณ  ์žˆ๋‹ต๋‹ˆ๋‹ค. ํŠนํžˆ ๋ฆฌ๋ˆ…์Šค๋ผ๋Š” ์šด์˜์ฒด์ œ๋Š” "๋ชจ๋“  ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ์ง์ ‘ ๊ด€๋ฆฌํ•œ๋‹ค!" ๋ผ๋Š” ์ฒ ํ•™์„ ๊ฐ€์ง€๊ณ  ์žˆ์–ด์š”. ์˜ค๋Š˜์€ ์ด ๋ณต์žกํ•œ ๋ฉ”๋ชจ๋ฆฌ ๊ด€๋ฆฌ ๊ณผ์ •์„ ์นœ์ ˆํ•˜๊ณ  ์žฌ๋ฏธ์žˆ๊ฒŒ ํ’€์–ด ๋“œ๋ฆด๊ฒŒ์š”~

๐Ÿšฆ 1์žฅ: ๋ฆฌ๋ˆ…์Šค๋Š” ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ์–ด๋–ป๊ฒŒ ๊ด€๋ฆฌํ• ๊นŒ์š”?

๐ŸŒŸ ๋ฉ”๋ชจ๋ฆฌ ์ „์ฒด๋ฅผ ๋ฆฌ๋ˆ…์Šค๊ฐ€ ๊ด€๋ฆฌํ•œ๋‹ค๊ณ ์š”?

๋„ค, ๋งž์Šต๋‹ˆ๋‹ค! ๋ฆฌ๋ˆ…์Šค๋Š” ์‹œ์Šคํ…œ์— ์„ค์น˜๋œ ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ํ˜ผ์ž์„œ ๊น”๋”ํ•˜๊ฒŒ ๊ด€๋ฆฌํ•ฉ๋‹ˆ๋‹ค.

๊ทธ ๋ง์€ ์ปค๋„(๋ฆฌ๋ˆ…์Šค์˜ ํ•ต์‹ฌ!)์ด ํ”„๋กœ์„ธ์Šค์™€ ์ž์‹ ์ด ์‚ฌ์šฉํ•  ๋ฉ”๋ชจ๋ฆฌ๊นŒ์ง€ ๋ชจ๋‘ ๊ด€๋ฆฌํ•œ๋‹ค๋Š” ๋œป์ด์—์š”.

์ปค๋„์€ ๋งˆ์น˜ ์—„๋งˆ์ฒ˜๋Ÿผ ์ง‘์•ˆ์˜ ๋ชจ๋“  ๋ฐฉ์„ ๊ผผ๊ผผํžˆ ๊ด€๋ฆฌํ•˜๋Š” ์—ญํ• ์„ ํ•˜๋Š”๋ฐ์š”. ํ”„๋กœ์„ธ์Šค๋“ค์ด ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ์š”๊ตฌํ•  ๋•Œ๋งˆ๋‹ค ์ด๋ฅผ ์ ์ ˆํžˆ ํ• ๋‹นํ•ด์ฃผ๋Š” ์—ญํ• ์„ ํ•ฉ๋‹ˆ๋‹ค.

์ด๋ ‡๊ฒŒ ํ•˜๋ฉด ํ”„๋กœ์„ธ์Šค๋“ค์€ ํ•„์š”ํ•œ ๋งŒํผ ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ์–ป์„ ์ˆ˜ ์žˆ๊ณ , ๋ถˆํ•„์š”ํ•œ ๋ฉ”๋ชจ๋ฆฌ๋Š” ๋น ๋ฅด๊ฒŒ ๋ฐ˜ํ™˜๋ฉ
๋‹ˆ๋‹ค.
๊นจ๋—ํ•œ ๋ฐฉ์„ ์œ ์ง€ํ•˜๋ ค๋ฉด ์—„๋งˆ๊ฐ€ ์ง์ ‘ ์ฒญ์†Œํ•ด์•ผ ํ•˜๋“ฏ์ด, ๋ฆฌ๋ˆ…์Šค๋„ ์ปค๋„์ด ๋‚˜์„œ์„œ ๋ฉ”๋ชจ๋ฆฌ ์ •๋ฆฌ๋ฅผ ํ•˜๋Š” ๊ฑฐ์ฃ ~

์˜ˆ๋ฅผ ๋“ค์–ด, ์ง‘์— ์—ฌ๋Ÿฌ ๊ฐœ์˜ ๋ฐฉ์ด ์žˆ๋‹ค๋ฉด ์ปค๋„์€ ๊ฐ๊ฐ์˜ ๋ฐฉ์— ๋ˆ„๊ฐ€ ๋“ค์–ด๊ฐ€ ์žˆ๊ณ , ์–ด๋””๊ฐ€ ๋น„์–ด ์žˆ๋Š”์ง€ ํ•ญ์ƒ ์ฒดํฌํ•˜๋Š” ๋˜‘๋˜‘ํ•œ ์ง‘์ฃผ์ธ์ด์—์š”.

$ free

์ด ๋ช…๋ น์–ด๋ฅผ ํ†ตํ•ด ํ˜„์žฌ ๋ฉ”๋ชจ๋ฆฌ ์ƒํƒœ๋ฅผ ๊ฐ„ํŽธํ•˜๊ฒŒ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋‹ต๋‹ˆ๋‹ค.

์ด ๋ช…๋ น์–ด๋ฅผ ์‹คํ–‰ํ•˜๋ฉด ์ „์ฒด ๋ฉ”๋ชจ๋ฆฌ ํฌ๊ธฐ(total), ์‚ฌ์šฉ ์ค‘์ธ ๋ฉ”๋ชจ๋ฆฌ(used), ๋‚จ์•„ ์žˆ๋Š” ๋ฉ”๋ชจ๋ฆฌ(free), ์บ์‹œ๋กœ ์‚ฌ์šฉํ•˜๋Š” ๋ฉ”๋ชจ๋ฆฌ(buff/cache), ์‹ค์ œ๋กœ ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•œ ๋ฉ”๋ชจ๋ฆฌ(available)๊นŒ์ง€ ๋ณด์—ฌ์ค๋‹ˆ๋‹ค. (์นœ์ ˆํ•˜์ฃ ?)

๐Ÿ“š ํ•„๋“œ๋ณ„๋กœ ์‰ฝ๊ฒŒ ์ดํ•ดํ•˜๊ธฐ

์‚ฌ์ง„์œผ๋กœ ์‰ฝ๊ฒŒ ์ดํ•ดํ•˜๊ธฐ

  1. total
  • ์‹œ์Šคํ…œ ์ „์ฒด์— ์„ค์น˜๋œ ๋ฌผ๋ฆฌ ๋ฉ”๋ชจ๋ฆฌ์˜ ์ด๋Ÿ‰์ž…๋‹ˆ๋‹ค.
  • ๊ทธ๋ฆผ์˜ ์ „์ฒด ๋„ˆ๋น„๊ฐ€ ๋ฐ”๋กœ total ์˜์—ญ์ด์—์š”.
  1. used = total - free - buff/cache
  • ์‹ค์ œ๋กœ ์‚ฌ์šฉ ์ค‘์ธ ๋ฉ”๋ชจ๋ฆฌ์ž…๋‹ˆ๋‹ค.
  • ์—ฌ๊ธฐ์—๋Š” ํ”„๋กœ์„ธ์Šค๊ฐ€ ์ง์ ‘ ์‚ฌ์šฉํ•˜๋Š” ๋ฉ”๋ชจ๋ฆฌ๋ฟ๋งŒ ์•„๋‹ˆ๋ผ ์ปค๋„์ด ์‚ฌ์šฉํ•˜๋Š” ๋ฉ”๋ชจ๋ฆฌ๋„ ํฌํ•จ๋ฉ๋‹ˆ๋‹ค.
  1. free
  • ์•„์ง ์•„๋ฌด๋„ ์‚ฌ์šฉํ•˜์ง€ ์•Š์€, ๋ช…๋ชฉ์ƒ '๋น„์–ด ์žˆ๋Š” ๋ฉ”๋ชจ๋ฆฌ'์ž…๋‹ˆ๋‹ค.
  • ํ•˜์ง€๋งŒ ์‹ค์ œ๋กœ๋Š” available ํ•ญ๋ชฉ์ด ๋” ์ •ํ™•ํ•œ โ€˜์‚ฌ์šฉ ๊ฐ€๋Šฅํ•œ ๋ฉ”๋ชจ๋ฆฌโ€™๋ฅผ ๋‚˜ํƒ€๋ƒ…๋‹ˆ๋‹ค.
  • free ํ•ญ๋ชฉ์€ ํ”„๋กœ์„ธ์Šค๊ฐ€ ๋ฐ”๋กœ ์ ‘๊ทผ ๊ฐ€๋Šฅํ•œ ์˜์—ญ๋งŒ ํฌํ•จํ•ฉ๋‹ˆ๋‹ค.
  1. buff/cache
  • ์ปค๋„์ด ๋””์Šคํฌ I/O ์„ฑ๋Šฅ ํ–ฅ์ƒ์„ ์œ„ํ•ด ์‚ฌ์šฉ ์ค‘์ธ ์บ์‹œ ๋ฉ”๋ชจ๋ฆฌ์ž…๋‹ˆ๋‹ค.
  • buffer: ๋””์Šคํฌ ๋ธ”๋ก์„ ์ž„์‹œ๋กœ ์ €์žฅํ•ด๋‘๋Š” ๊ณต๊ฐ„
  • cache: ํŒŒ์ผ ๋‚ด์šฉ์„ ์ €์žฅํ•ด๋‘๋Š” ๊ณต๊ฐ„
  • ์ด ์˜์—ญ์€ ํ•„์š” ์‹œ ํ•ด์ œ ๊ฐ€๋Šฅํ•œ ๋ถ€๋ถ„(๋…ธ๋ž€์ƒ‰)๊ณผ ํ•ด์ œ ๋ถˆ๊ฐ€๋Šฅํ•œ ๋ถ€๋ถ„(๊ฐˆ์ƒ‰)์œผ๋กœ ๋‚˜๋‰ฉ๋‹ˆ๋‹ค.
  1. available
  • ์‹ค์ œ๋กœ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์ด ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ๋ฉ”๋ชจ๋ฆฌ ์–‘์ž…๋‹ˆ๋‹ค.
  • free + buff/cache ์ค‘์—์„œ ์ปค๋„์ด ํ•ด์ œ ๊ฐ€๋Šฅํ•œ ๋ถ€๋ถ„์„ ํ•ฉ์นœ ๊ฐ’์ด์—์š”.
  • ๊ทธ๋ฆผ์—์„œ๋Š” โ€˜ํ•ด์ œ ๊ฐ€๋Šฅโ€™ ๋ถ€๋ถ„๊ณผ โ€˜freeโ€™๋ฅผ ํ•ฉ์ณ์„œ available๋กœ ํ‘œ์‹œํ•˜๊ณ  ์žˆ์ฃ .
  1. ํ”„๋กœ์„ธ์Šค๊ฐ€ ์‚ฌ์šฉ ์ค‘
  • ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์ด๋‚˜ ์‚ฌ์šฉ์ž ํ”„๋กœ๊ทธ๋žจ์ด ํ˜„์žฌ ์ ์œ  ์ค‘์ธ ๋ฉ”๋ชจ๋ฆฌ์ž…๋‹ˆ๋‹ค.
  • ์ด ์˜์—ญ์€ ์ปค๋„์ด ์•Œ์•„์„œ ํšŒ์ˆ˜ํ•˜์ง€ ์•Š์œผ๋ฉฐ, ํ•ด๋‹น ํ”„๋กœ์„ธ์Šค๊ฐ€ ์ข…๋ฃŒ๋˜์–ด์•ผ ํ•ด์ œ๋ฉ๋‹ˆ๋‹ค.

โœ… ์š”์•ฝ

ํ•ญ๋ชฉ์˜๋ฏธ ์š”์•ฝ
total์‹œ์Šคํ…œ์— ์„ค์น˜๋œ ๋ฉ”๋ชจ๋ฆฌ ์ด๋Ÿ‰
free๋ฐ”๋กœ ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•œ ๋ฉ”๋ชจ๋ฆฌ (์ž‘์Œ)
available์‹ค์ œ๋กœ ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•œ ๋ฉ”๋ชจ๋ฆฌ. free ํ•„๋“œ๊ฐ’๊ณผ ๋น„์–ด ์žˆ๋Š” ๋ฉ”๋ชจ๋ฆฌ๊ฐ€ ์ค„์–ด ๋“ค์—ˆ์„ ๋•Œ ํ•ด์ œ ๊ฐ€๋Šฅํ•œ ์ปค๋„ ๋‚ด๋ถ€ ๋ฉ”๋ชจ๋ฆฌ ์˜์—ญ(์˜ˆ๋ฅผ ๋“ค์–ด ํŽ˜์ด์ง€ ์บ์‹œ) ํฌ๊ธฐ๋ฅผ ๋”ํ•œ ๊ฐ’ (ํฐ ๊ฐ’)
buff/cache์ปค๋„์ด ์บ์‹œ๋กœ ์ ์œ ํ•œ ๋ฉ”๋ชจ๋ฆฌ์ด์ž, ๋ฐ์ดํ„ฐ๋ฅผ ๋น ๋ฅด๊ฒŒ ์ ‘๊ทผํ•˜๊ธฐ ์œ„ํ•ด ์ €์žฅํ•œ ์ž„์‹œ ๊ณต๊ฐ„
usedํ”„๋กœ์„ธ์Šค + ์ปค๋„์ด ์‚ฌ์šฉ ์ค‘์ธ ๋ฉ”๋ชจ๋ฆฌ

์ด ๊ทธ๋ฆผ์„ ์ดํ•ดํ•˜๋ฉด free ๋ช…๋ น์–ด ๊ฒฐ๊ณผ๋ฅผ ํ•ด์„ํ•  ๋•Œ ์ˆซ์ž์— ๋„ˆ๋ฌด ์–ฝ๋งค์ด์ง€ ์•Š๊ณ , ์ปค๋„์ด ์–ผ๋งˆ๋‚˜ ์œ ๋™์ ์œผ๋กœ ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ๊ด€๋ฆฌํ•˜๋Š”์ง€ ๊ฐ์„ ์žก์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค!

๐Ÿšง 2์žฅ: used์™€ buff/cache์˜ ๋น„๋ฐ€์„ ํ’€์–ด๋ณด์ž!

๐Ÿ—ƒ used ๋ฉ”๋ชจ๋ฆฌ์˜ ์ง„์งœ ๋ชจ์Šต

๊ฐ„๋‹จํ•˜๊ฒŒ ์ด์•ผ๊ธฐํ•˜๋ฉด used๋Š” ํ”„๋กœ์„ธ์Šค๊ฐ€ ์“ฐ๊ณ  ์žˆ๋Š” ๋ฉ”๋ชจ๋ฆฌ, ๊ทธ๋ฆฌ๊ณ  ์ปค๋„ ์ž์‹ ์ด ์“ฐ๊ณ  ์žˆ๋Š” ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ๋ชจ๋‘ ํฌํ•จํ•œ ๊ฐ’์ด์—์š”.

'used' ๋ฉ”๋ชจ๋ฆฌ๋Š” ์‹ค์ œ๋กœ ํ”„๋กœ์„ธ์Šค๊ฐ€ ์ ์œ ํ•˜๊ณ  ์žˆ๋Š” ๊ณต๊ฐ„๊ณผ, ์ปค๋„์ด ์Šค์Šค๋กœ ์‚ฌ์šฉํ•˜๋Š” ๊ณต๊ฐ„์„ ๋ชจ๋‘ ํฌํ•จํ•œ ๊ฐ’์ด๋ผ๋Š” ๊ฑฐ์ฃ . ํ”„๋กœ๊ทธ๋žจ์ด ์ž‘๋™ํ•  ๋•Œ๋งˆ๋‹ค ์ ์  ์˜ฌ๋ผ๊ฐ€๊ณ , ํ”„๋กœ๊ทธ๋žจ์ด ์ข…๋ฃŒ๋˜๋ฉด ๋‹ค์‹œ ๋‚ด๋ ค๊ฐ‘๋‹ˆ๋‹ค. ๋งˆ์น˜ ๋„์„œ๊ด€์—์„œ ์ฑ…์„ ๋นŒ๋ ธ๋‹ค๊ฐ€ ๋ฐ˜๋‚ฉํ•˜๋ฉด ๋นˆ์ž๋ฆฌ๊ฐ€ ๋‹ค์‹œ ์ƒ๊ธฐ๋Š” ๊ฒƒ๊ณผ ๊ฐ™์€ ์›๋ฆฌ์ฃ .

๋งŒ์•ฝ ์–ด๋–ค ํ”„๋กœ์„ธ์Šค๊ฐ€ ์ข…๋ฃŒ๋˜๋ฉด, ์ปค๋„์ด ์•Œ์•„์„œ ๊ทธ ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ๊นจ๋—ํ•˜๊ฒŒ ๋น„์›Œ์ฃผ๋Š” ๊ฑฐ์ฃ .

์‹ค์ œ๋กœ ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ๋งŽ์ด ์“ฐ๋Š” ํ”„๋กœ๊ทธ๋žจ์„ ์‹คํ–‰ํ•œ ๋’ค ์ข…๋ฃŒํ•˜๋ฉด, used ๊ฐ’์ด ๋‹ค์‹œ ์›๋ž˜๋Œ€๋กœ ๋Œ์•„๊ฐ€๋Š” ๊ฑธ ๋ˆˆ์œผ๋กœ ํ™•์ธํ•  ์ˆ˜ ์žˆ์–ด์š”. (์‹ ๊ธฐํ•˜์ฃ ?)

memuse.py ์‹คํ—˜

โœ… memuse.py ์ „์ฒด ์ฝ”๋“œ (ํ•ด์„ค ์ฃผ์„ ์ถ”๊ฐ€)

#!/usr/bin/python3
import subprocess

# ์‚ฌ์šฉํ•  ๋ฆฌ์ŠคํŠธ ํฌ๊ธฐ ์„ค์ • (๋ฐ์ดํ„ฐ ์ˆ˜: 1์ฒœ๋งŒ ๊ฐœ)
# ๋„ˆ๋ฌด ํฌ๋ฉด ๋ฉ”๋ชจ๋ฆฌ ๋ถ€์กฑ์œผ๋กœ ์‹คํ–‰ ์‹คํŒจํ•  ์ˆ˜ ์žˆ์Œ
size = 10000000

# ํ˜„์žฌ ์‹œ์Šคํ…œ ๋ฉ”๋ชจ๋ฆฌ ์ƒํƒœ๋ฅผ ์ถœ๋ ฅ (์‹คํ—˜ ์ „ ์ƒํƒœ)
print("๋ฉ”๋ชจ๋ฆฌ ์‚ฌ์šฉ ์ „์˜ ์ „์ฒด ์‹œ์Šคํ…œ ๋ฉ”๋ชจ๋ฆฌ ์‚ฌ์šฉ๋Ÿ‰์„ ํ‘œ์‹œํ•ฉ๋‹ˆ๋‹ค.")
subprocess.run(["free"])

# ๋ฆฌ์ŠคํŠธ์— 0์„ 1์ฒœ๋งŒ ๊ฐœ ์ƒ์„ฑ (๋ฉ”๋ชจ๋ฆฌ๋ฅผ ์‹ค์ œ๋กœ ํ• ๋‹นํ•จ)
array = [0] * size

# ๋ฉ”๋ชจ๋ฆฌ ์‚ฌ์šฉ ํ›„์˜ ์‹œ์Šคํ…œ ์ƒํƒœ ์ถœ๋ ฅ
print("๋ฉ”๋ชจ๋ฆฌ ์‚ฌ์šฉ ํ›„์˜ ์ „์ฒด ์‹œ์Šคํ…œ ๋ฉ”๋ชจ๋ฆฌ ๋‚จ์€ ์šฉ๋Ÿ‰์„ ํ‘œ์‹œํ•ฉ๋‹ˆ๋‹ค.")
subprocess.run(["free"])

๐Ÿ“Œ ์‹คํ–‰ ์ˆœ์„œ๋ณ„ ์š”์•ฝ:

  1. ํ”„๋กœ๊ทธ๋žจ ์‹คํ–‰ ์ „ free ์ถœ๋ ฅ
  2. ๋ฆฌ์ŠคํŠธ๋ฅผ ์ƒ์„ฑํ•˜๋ฉฐ ๋ฉ”๋ชจ๋ฆฌ ์‚ฌ์šฉ (array = [0] * 10000000)
  3. ํ”„๋กœ๊ทธ๋žจ ๋‚ด๋ถ€์—์„œ ๋‹ค์‹œ free ์ถœ๋ ฅ
  4. ํ”„๋กœ๊ทธ๋žจ ์ข…๋ฃŒ ํ›„, ์‚ฌ์šฉ์ž๊ฐ€ ํ„ฐ๋ฏธ๋„์—์„œ free ์žฌ์‹คํ–‰

๐Ÿ” ๊ฐ ๋‹จ๊ณ„ ๋ถ„์„

โœ… 1. ํ”„๋กœ๊ทธ๋žจ ์‹คํ–‰ ์ „

Mem:  16257384  513144   15338352  3572  405888  15474572
  • total: 16.2GiB (16257384 KiB)
  • used: 513144 KiB
  • free: 15.3GiB
  • buff/cache: 405888 KiB
  • available: 15474572 KiB

๐Ÿ”Ž ์ƒํƒœ:
โ†’ ์ „์ฒด ์‹œ์Šคํ…œ ๋ฉ”๋ชจ๋ฆฌ ์ค‘ ๋Œ€๋ถ€๋ถ„์ด ์•„์ง ์‚ฌ์šฉ๋˜์ง€ ์•Š์Œ (์ •์ƒ์ ์ธ idle ์ƒํƒœ)

โœ… 2. ํ”„๋กœ๊ทธ๋žจ ์‹คํ–‰ ํ›„ (array ์ƒ์„ฑ ์งํ›„)

Mem:  16257384  593596  15257900  3572  405888  15394120
  • used๊ฐ€ +80MiB ์ฆ๊ฐ€
    โ†’ 593596 - 513144 = 80452 KiB โ‰ˆ 78.5MiB

๐Ÿ”Ž ํ•ด์„:
โ†’ Python ๋ฆฌ์ŠคํŠธ ์ƒ์„ฑ์œผ๋กœ ์•ฝ 80MiB ๋ฉ”๋ชจ๋ฆฌ๊ฐ€ ์‚ฌ์šฉ๋จ
โ†’ available ๊ฐ’๋„ ํ•จ๊ป˜ ๊ฐ์†Œํ•จ

โœ… 3. ํ”„๋กœ๊ทธ๋žจ ์ข…๋ฃŒ ํ›„ (ํ„ฐ๋ฏธ๋„์—์„œ free ์žฌ์‹คํ–‰)

Mem:  16257384  523968  15546368  3576  187048  15474436
  • used: 523968 (๋‹ค์‹œ ๊ฑฐ์˜ ์›๋ž˜๋Œ€๋กœ ๋Œ์•„์˜ด)
  • buff/cache: ๊ฐ์†Œ (405888 โ†’ 187048)
  • available: ๋‹ค์‹œ ์›๋ž˜ ์ˆ˜์ค€์ธ 15474436

๐Ÿ”Ž ํ•ด์„:

  • ํ”„๋กœ๊ทธ๋žจ์ด ์ข…๋ฃŒ๋˜์ž array์— ํ• ๋‹น๋๋˜ ๋ฉ”๋ชจ๋ฆฌ๊ฐ€ ์ปค๋„์— ์˜ํ•ด ํ•ด์ œ๋จ
  • used ์ˆ˜์น˜๊ฐ€ ๋‹ค์‹œ ์ค„๊ณ , available๋„ ํšŒ๋ณต
  • ์ •ํ™•ํžˆ ์ข…๋ฃŒ ์ „๊ณผ ์ผ์น˜ํ•˜์ง„ ์•Š์ง€๋งŒ ๊ฑฐ์˜ ๊ฐ™์€ ์ˆ˜์ค€ (์ด๋Š” ๋‹ค๋ฅธ ๋ฐฑ๊ทธ๋ผ์šด๋“œ ํ™œ๋™ ๋•Œ๋ฌธ์ผ ์ˆ˜ ์žˆ์Œ)

๐Ÿ“Š ํ•ต์‹ฌ ์ •๋ฆฌ

๊ตฌ๋ถ„used (KiB)available (KiB)์„ค๋ช…
์‹คํ–‰ ์ „513,14415,474,572๋Œ€๋ถ€๋ถ„ ์—ฌ์œ  ์ƒํƒœ
array ์ƒ์„ฑ ํ›„593,59615,394,120์•ฝ 80MiB ์‚ฌ์šฉ ์ฆ๊ฐ€
์ข…๋ฃŒ ํ›„523,96815,474,436์‚ฌ์šฉ๋Ÿ‰ ๊ฑฐ์˜ ๋ณต๊ท€๋จ

โœ… ๊ฒฐ๋ก 

  • memuse.py ์‹คํ–‰ ํ›„ ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ์‚ฌ์šฉํ•œ ํ”์ ์ด used ์ˆ˜์น˜์˜ ์ฆ๊ฐ€๋กœ ๋ณด์˜€๊ณ ,
  • ํ”„๋กœ์„ธ์Šค๊ฐ€ ์ข…๋ฃŒ๋˜์ž ๋ฉ”๋ชจ๋ฆฌ๊ฐ€ ์ž๋™์œผ๋กœ ํ•ด์ œ๋˜์–ด ๋‹ค์‹œ ์ค„์–ด๋“  ๊ฒƒ์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  • ์ด๊ฒƒ์ด ๋ฆฌ๋ˆ…์Šค ๋ฉ”๋ชจ๋ฆฌ ๊ด€๋ฆฌ ์‹œ์Šคํ…œ์˜ ํŠน์ง•์ด๋ฉฐ, ์šฐ๋ฆฌ๊ฐ€ ํ”„๋กœ๊ทธ๋žจ ์ข…๋ฃŒ ์‹œ ์ง์ ‘ free()ํ•˜์ง€ ์•Š์•„๋„ ๋˜๋Š” ์ด์œ ์˜ˆ์š”.

๐Ÿ’ก ์ฐธ๊ณ  ํŒ

  • Python์€ ๊ฐ€๋น„์ง€ ์ปฌ๋ ‰ํ„ฐ๊ฐ€ ์žˆ์–ด๋„, ํ”„๋กœ์„ธ์Šค๊ฐ€ ์ข…๋ฃŒ๋˜๊ธฐ ์ „๊นŒ์ง€๋Š” ๋ฉ”๋ชจ๋ฆฌ๊ฐ€ ์œ ์ง€๋ฉ๋‹ˆ๋‹ค.
  • ์ด ์‹คํ—˜์€ ๋ฉ”๋ชจ๋ฆฌ ์‚ฌ์šฉ ์ถ”์„ธ ๋ถ„์„์ด๋‚˜ OOM ์ƒํ™ฉ ๋””๋ฒ„๊น… ์‹œ ์œ ์šฉํ•ฉ๋‹ˆ๋‹ค.
  • ๊ฐ™์€ ๋ฐฉ์‹์œผ๋กœ free๋‚˜ top, sar ๋ช…๋ น์–ด์™€ ํ•จ๊ป˜ ๋ฉ”๋ชจ๋ฆฌ ๋ณ€ํ™” ํŒจํ„ด์„ ํŒŒ์•…ํ•ด๋ณด๋Š” ๊ฒƒ๋„ ์ข‹์•„์š”.

"ํ”„๋กœ๊ทธ๋žจ์ด ์ข…๋ฃŒ๋˜๋ฉด ํ•ด๋‹น ๋ฉ”๋ชจ๋ฆฌ๋Š” ์šด์˜์ฒด์ œ(๋ฆฌ๋ˆ…์Šค ์ปค๋„)์— ์˜ํ•ด ํšŒ์ˆ˜๋œ๋‹ค"
๋Š” ์‚ฌ์‹ค์„ ์ฆ๋ช…ํ•˜๋Š” ๊ทผ๊ฑฐ์ž…๋‹ˆ๋‹ค.

โœจ buff/cache์˜ ๋งˆ๋ฒ•

buff/cache๋Š” ๋ฐ์ดํ„ฐ๋ฅผ ๋ฏธ๋ฆฌ ๋ฉ”๋ชจ๋ฆฌ์— ์˜ฌ๋ ค๋†“์•„ ๋‹ค์Œ ๋ฒˆ ์ ‘๊ทผํ•  ๋•Œ ์†๋„๋ฅผ ๋†’์ด๋Š” ์บ์‹œ ๋ฉ”๋ชจ๋ฆฌ์ž…๋‹ˆ๋‹ค. ๋นˆ๋ฒˆํžˆ ์ฝ๋Š” ๋ฐ์ดํ„ฐ๋ฅผ ๊ณ„์†ํ•ด์„œ ํ•˜๋“œ๋””์Šคํฌ์—์„œ ์ฝ์œผ๋ฉด ์‹œ๊ฐ„์ด ์˜ค๋ž˜ ๊ฑธ๋ฆฌ๋‹ˆ๊นŒ, ์ž์ฃผ ์“ฐ๋Š” ์ฑ…์„ ์ฑ…์ƒ ์œ„์— ์˜ฌ๋ ค๋†“๋Š” ๊ฒƒ๊ณผ ๊ฐ™์•„์š”.

โœ… ์‹คํ—˜ํ•˜๊ธฐ

#!/bin/bash
# 1. ํŒŒ์ผ ์ž‘์„ฑ ์ „ ์‹œ์Šคํ…œ ๋ฉ”๋ชจ๋ฆฌ ์ƒํƒœ ์ถœ๋ ฅ
echo "ํŒŒ์ผ ์ž‘์„ฑ ์ „์˜ ์‹œ์Šคํ…œ ์ „์ฒด ๋ฉ”๋ชจ๋ฆฌ ์‚ฌ์šฉ๋Ÿ‰์„ ํ‘œ์‹œํ•ฉ๋‹ˆ๋‹ค."
free

# 2. 1GiB ํฌ๊ธฐ์˜ ํŒŒ์ผ์„ ์ƒ์„ฑํ•˜์—ฌ ํŽ˜์ด์ง€ ์บ์‹œ ์‚ฌ์šฉ ์œ ๋„
echo "1GB ํŒŒ์ผ์„ ์ƒˆ๋กœ ์ž‘์„ฑํ•ฉ๋‹ˆ๋‹ค. ์ปค๋„์€ ๋ฉ”๋ชจ๋ฆฌ์— 1GB ํŽ˜์ด์ง€ ์บ์‹œ ์˜์—ญ์„ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค."
dd if=/dev/zero of=testfile bs=1M count=1024

# 3. ํŒŒ์ผ ์ƒ์„ฑ ํ›„ ๋ฉ”๋ชจ๋ฆฌ ์ƒํƒœ ์ถœ๋ ฅ โ†’ ํŽ˜์ด์ง€ ์บ์‹œ ์ฆ๊ฐ€ ํ™•์ธ
echo "ํŽ˜์ด์ง€ ์บ์‹œ ์‚ฌ์šฉ ํ›„์˜ ์‹œ์Šคํ…œ ์ „์ฒด ๋ฉ”๋ชจ๋ฆฌ ์‚ฌ์šฉ๋Ÿ‰์„ ํ‘œ์‹œํ•ฉ๋‹ˆ๋‹ค."
free

# 4. ํŒŒ์ผ ์‚ญ์ œ โ†’ ํŽ˜์ด์ง€ ์บ์‹œ ์ œ๊ฑฐ
echo "ํŒŒ์ผ ์‚ญ์ œ ํ›„, ์ฆ‰ ํŽ˜์ด์ง€ ์บ์‹œ ์‚ญ์ œ ํ›„์˜ ์‹œ์Šคํ…œ ์ „์ฒด ๋ฉ”๋ชจ๋ฆฌ ์‚ฌ์šฉ๋Ÿ‰์„ ํ‘œ์‹œํ•ฉ๋‹ˆ๋‹ค."
rm testfile

# 5. ํŒŒ์ผ ์‚ญ์ œ ํ›„ ๋ฉ”๋ชจ๋ฆฌ ์ƒํƒœ ์ถœ๋ ฅ โ†’ buff/cache ๊ฐ์†Œ ํ™•์ธ
free

๐Ÿ“Š ์‹คํ—˜ ๊ฒฐ๊ณผ ์ •๋ฆฌ

๋‹จ๊ณ„used (KiB)buff/cache (KiB)free (KiB)available (KiB)
ํŒŒ์ผ ์ž‘์„ฑ ์ „5230041924761554186415472644
ํŒŒ์ผ ์ž‘์„ฑ ํ›„52207212691601446615215451568
ํŒŒ์ผ ์‚ญ์ œ ํ›„5217481941281554150815473096

๐Ÿ“Œ ํ•ต์‹ฌ ๋ณ€ํ™” ์š”์•ฝ

  1. ํŒŒ์ผ ์ž‘์„ฑ ์ „ (baseline)

    • buff/cache: ์•ฝ 192MiB
    • ์‹œ์Šคํ…œ์ด ์•ˆ์ •๋œ ์ƒํƒœ, ํŽ˜์ด์ง€ ์บ์‹œ๋„ ์ ๋‹นํ•œ ์ˆ˜์ค€
  2. ํŒŒ์ผ ์ž‘์„ฑ ํ›„

    • buff/cache: ์•ฝ 1.2GiB๋กœ ๊ธ‰์ฆ
      โ†’ ์ด๋Š” dd ๋ช…๋ น์œผ๋กœ 1GiB ํŒŒ์ผ์„ ์ƒ์„ฑํ•˜๋ฉด์„œ, ์ปค๋„์ด ํ•ด๋‹น ๋ฐ์ดํ„ฐ๋ฅผ ํŽ˜์ด์ง€ ์บ์‹œ๋กœ ๋ฉ”๋ชจ๋ฆฌ์— ์ €์žฅํ–ˆ๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค.
  3. ํŒŒ์ผ ์‚ญ์ œ ํ›„

    • buff/cache: ๋‹ค์‹œ ์•ฝ 194MiB๋กœ ๊ฐ์†Œ
      โ†’ ์ปค๋„์ด ์‚ฌ์šฉํ•˜์ง€ ์•Š๋Š” ํŽ˜์ด์ง€ ์บ์‹œ๋ฅผ ์ž๋™์œผ๋กœ ํ•ด์ œํ–ˆ์Œ์„ ๋ณด์—ฌ์ค๋‹ˆ๋‹ค.

๐Ÿ“ˆ ์‹œ๊ฐ์  ๋ณ€ํ™” ํ๋ฆ„

    buff/cache (KiB)

1.4M |                        
     |                     
1.2M |                โ— ํŒŒ์ผ ์ž‘์„ฑ ํ›„
     |                     
 200K | โ— ํŒŒ์ผ ์ž‘์„ฑ ์ „    โ— ํŒŒ์ผ ์‚ญ์ œ ํ›„
     |
     +----------------------------โ†’ ์‹œ๊ฐ„ ํ๋ฆ„
        ์ž‘์„ฑ ์ „     ์ƒ์„ฑ ํ›„      ์‚ญ์ œ ํ›„

๐Ÿง  ํ•ด์„ ๋ฐ ๊ฒฐ๋ก 

  • dd ๋ช…๋ น์œผ๋กœ ์ƒ์„ฑํ•œ 1GiB ํŒŒ์ผ์˜ ๋‚ด์šฉ์€ ๋””์Šคํฌ์—๋งŒ ์ €์žฅ๋˜์ง€ ์•Š๊ณ , ๋™์‹œ์— ๋ฉ”๋ชจ๋ฆฌ์˜ ํŽ˜์ด์ง€ ์บ์‹œ์— ์˜ฌ๋ผ๊ฐ‘๋‹ˆ๋‹ค.
  • ์ด๋กœ ์ธํ•ด buff/cache ๊ฐ’์ด ๊ธ‰๊ฒฉํžˆ ์ฆ๊ฐ€ํ•ฉ๋‹ˆ๋‹ค.
  • ํ•˜์ง€๋งŒ, ํŒŒ์ผ์„ rm ๋ช…๋ น์–ด๋กœ ์‚ญ์ œํ•˜๋ฉด ์ปค๋„์€ ์ด ๋ฐ์ดํ„ฐ๊ฐ€ ๋” ์ด์ƒ ํ•„์š”ํ•˜์ง€ ์•Š์Œ์„ ์ธ์ง€ํ•˜๊ณ  ํŽ˜์ด์ง€ ์บ์‹œ๋ฅผ ํ•ด์ œํ•ฉ๋‹ˆ๋‹ค.
  • ์ด ๊ณผ์ •์„ ํ†ตํ•ด ๋ฉ”๋ชจ๋ฆฌ์˜ buff/cache ์˜์—ญ์ด ์ž๋™์œผ๋กœ ์ค„์–ด๋“œ๋Š” ๊ฒƒ์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

โœ… ์ •๋ฆฌํ•˜์ž๋ฉด

๊ฐœ๋…์„ค๋ช…
ํŽ˜์ด์ง€ ์บ์‹œ๋””์Šคํฌ ๋ฐ์ดํ„ฐ๋ฅผ ๋น ๋ฅด๊ฒŒ ์ ‘๊ทผํ•˜๊ธฐ ์œ„ํ•ด ๋ฉ”๋ชจ๋ฆฌ์— ์ž„์‹œ๋กœ ์ €์žฅํ•˜๋Š” ์˜์—ญ
buff/cacheํŽ˜์ด์ง€ ์บ์‹œ + ๋ฒ„ํผ ์บ์‹œ ์˜์—ญ์„ ๋‚˜ํƒ€๋ƒ„
์ž๋™ ํ•ด์ œ์‹œ์Šคํ…œ์ด ํ•„์š”ํ•˜๋ฉด ํ•ด๋‹น ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ์ž๋™์œผ๋กœ ๋ฐ˜ํ™˜ (์ปค๋„์ด ๋˜‘๋˜‘ํ•จ!)

๐Ÿ” ์‹ค๋ฌด์—์„œ์˜ ํŒ

free ๋ช…๋ น์–ด๋กœ ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ๋ณผ ๋•Œ used๋‚˜ free๋งŒ ๋ณด๊ณ  โ€œ๋ฉ”๋ชจ๋ฆฌ๊ฐ€ ๋ถ€์กฑํ•˜๋‹คโ€๊ณ  ์˜คํ•ดํ•˜์ง€ ๋งˆ์„ธ์š”!
์ง„์งœ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ๋ฉ”๋ชจ๋ฆฌ๋Š” available์ด๊ณ , buff/cache๋Š” ํ•„์š” ์‹œ ์ปค๋„์ด ๋ฐ˜๋‚ฉ ๊ฐ€๋Šฅํ•œ ๋ฉ”๋ชจ๋ฆฌ์ž…๋‹ˆ๋‹ค.

free์™€ available ์˜๋ฏธ ์ฐจ์ด

free์™€ available์€ ๋ชจ๋‘ "์“ธ ์ˆ˜ ์žˆ๋Š” ๋ฉ”๋ชจ๋ฆฌ"์ฒ˜๋Ÿผ ๋ณด์ด์ง€๋งŒ, ์‹ค์ œ๋กœ๋Š” ์™„์ „ํžˆ ๋‹ค๋ฅธ ์˜๋ฏธ๋ฅผ ๋‹ด๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.

ํ•ญ๋ชฉ์˜๋ฏธ์™œ ํ—ท๊ฐˆ๋ฆด๊นŒ?์ง„์งœ๋กœ ์“ธ ์ˆ˜ ์žˆ๋‚˜?
free์ง€๊ธˆ ์•„๋ฌด๋„ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ์ง€ ์•Š์€ ๋ฉ”๋ชจ๋ฆฌ ๊ณต๊ฐ„์ˆซ์ž๊ฐ€ ์ž‘์œผ๋ฉด โ€œ๋ฉ”๋ชจ๋ฆฌ ๋ถ€์กฑํ•˜์ž–์•„?!โ€๋ผ๊ณ  ์ƒ๊ฐํ•˜๊ธฐ ์‰ฌ์›€์“ธ ์ˆ˜ ์žˆ์ง€๋งŒ, ์‹œ์Šคํ…œ์€ ์ผ๋ถ€๋ฅผ ์บ์‹œ๋กœ ํ™œ์šฉ ์ค‘
availableํ•„์š”ํ•  ๊ฒฝ์šฐ ์ปค๋„์ด ์ฆ‰์‹œ ํšŒ์ˆ˜ํ•ด์„œ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ์ „์ฒด ๋ฉ”๋ชจ๋ฆฌ์บ์‹œ ํฌํ•จ์ด๋ผ free๋ณด๋‹ค ํ›จ์”ฌ ํผ์ง„์งœ๋กœ ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•œ ๋ฉ”๋ชจ๋ฆฌ! ๊ฐ€์žฅ ์‹ ๋ขฐํ•ด์•ผ ํ•  ๊ฐ’

๐Ÿ” ์˜ˆ์‹œ๋กœ ์ดํ•ดํ•ด๋ณด์ž

$ free
               total        used        free      shared  buff/cache   available
Mem:        16257384      523004     15541864        3576      192476     15472644
  • free: 15,541,864 KiB โ†’ ์ง„์งœ๋กœ ์•„๋ฌด๋„ ์•ˆ ์“ฐ๋Š” ๊ณต๊ฐ„
  • available: 15,472,644 KiB โ†’ ์บ์‹œ๊นŒ์ง€ ํฌํ•จํ•œ ์‹ค์ œ๋กœ ์“ธ ์ˆ˜ ์žˆ๋Š” ๊ณต๊ฐ„

๊ทธ๋Ÿฐ๋ฐ ์™œ available์ด free๋ณด๋‹ค ๋” ์ž‘์„ ์ˆ˜๋„ ์žˆ๊ณ , ๋” ํด ์ˆ˜๋„ ์žˆ๋ƒ๋ฉดโ€ฆ

๐Ÿ”Ž ์™œ available์ด free๋ณด๋‹ค ํด ์ˆ˜๋„ ์žˆ์„๊นŒ?

๋ฐ”๋กœ buff/cache ์˜์—ญ์ด ํฌํ•จ๋˜๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค.

๋ฆฌ๋ˆ…์Šค๋Š” ์„ฑ๋Šฅ์„ ๋†’์ด๊ธฐ ์œ„ํ•ด ๊ฐ€๋Šฅํ•œ ๋งŽ์€ ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ์บ์‹œ(์ž„์‹œ ์ €์žฅ)๋กœ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.
ํ•˜์ง€๋งŒ ์ด ์บ์‹œ ๋ฉ”๋ชจ๋ฆฌ๋Š” ์ปค๋„์ด ํ•„์š”ํ•˜๋ฉด ์–ธ์ œ๋“  ํšŒ์ˆ˜ํ•ด์„œ ๋‹ค๋ฅธ ๋ฐ ์“ธ ์ˆ˜ ์žˆ์–ด์š”.

๊ทธ๋ž˜์„œ available์—๋Š” ๋‹ค์Œ์ด ํฌํ•จ๋ผ์š”:

  • free: ์•„๋ฌด๋„ ์•ˆ ์“ฐ๋Š” ๋ฉ”๋ชจ๋ฆฌ
    • buff/cache: ์บ์‹œ๋กœ ์“ฐ์ด์ง€๋งŒ ๊ณง ํšŒ์ˆ˜ ๊ฐ€๋Šฅ
    • ๊ธฐํƒ€ reclaimable ์˜์—ญ ๋“ฑ

๐Ÿ‘‰ ์ฆ‰, available = free + reclaim ๊ฐ€๋Šฅํ•œ ๋ฉ”๋ชจ๋ฆฌ

์˜ˆ์‹œ๋กœ ๋ณด๋ฉด ๋” ๋ช…ํ™•ํ•ด์š”

              total        used        free      shared  buff/cache   available
Mem:        16257384      523004     15541864      3572     192476     15472644
  • free: 15,541,864 KiB (15GB) โ†’ ์ง€๊ธˆ ์•ˆ ์“ฐ๊ณ  ์žˆ๋Š” ๊ณต๊ฐ„
  • available: 15,472,644 KiB โ†’ ์ง€๊ธˆ ์“ธ ์ˆ˜ ์žˆ๋Š” ์ „์ฒด ๊ณต๊ฐ„
    โ†’ ์บ์‹œ ์ผ๋ถ€๋„ ํฌํ•จํ•˜๋‹ˆ, ์•ฝ๊ฐ„ ์ž‘๊ฑฐ๋‚˜ ํด ์ˆ˜๋„ ์žˆ์–ด์š”.

๐Ÿง ๊ทธ๋Ÿฐ๋ฐ ์™œ available์ด free๋ณด๋‹ค ์ž‘์„ ๋•Œ๋„ ์žˆ์„๊นŒ?

๊ทธ ์ด์œ ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์•„์š”:

  • ์‹œ์Šคํ…œ์— ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ๋งŽ์ด ์“ด ํ”„๋กœ์„ธ์Šค๊ฐ€ ๋–  ์žˆ์Œ
  • buff/cache ์˜์—ญ๋„ ๋งŽ์ด ์‚ฌ์šฉ ์ค‘์ธ๋ฐ ๋‹น์žฅ ํšŒ์ˆ˜ํ•  ์ˆ˜ ์—†๋Š” ์ƒํƒœ
  • ์ฆ‰, ์ปค๋„์ด ์•ˆ์ „ํ•˜๊ฒŒ ํšŒ์ˆ˜ํ•  ์ˆ˜ ์žˆ๋Š” ๋ฉ”๋ชจ๋ฆฌ ์–‘์ด ์ ๋‹ค๊ณ  ํŒ๋‹จํ•˜๋ฉด
    โ†’ available์€ free๋ณด๋‹ค ์ž‘์„ ์ˆ˜๋„ ์žˆ์–ด์š”.
์ƒํ™ฉavailable vs free์ด์œ 
์ผ๋ฐ˜์ ์ธ ์ƒํ™ฉavailable > free์บ์‹œ ๋ฉ”๋ชจ๋ฆฌ ํฌํ•จ
๋ฉ”๋ชจ๋ฆฌ ๋นก๋นกํ•œ ์ƒํ™ฉavailable < freeํšŒ์ˆ˜ ๊ฐ€๋Šฅํ•œ ์บ์‹œ๊ฐ€ ๊ฑฐ์˜ ์—†์Œ
ํŒŒ์ผ ์บ์‹œ, ๋ฒ„ํผ ๋งŽ์„ ๋•Œavailable > freeํ•„์š” ์‹œ ํšŒ์ˆ˜ ๊ฐ€๋Šฅํ•˜๋ฏ€๋กœ ๋” ํผ

๐Ÿ’ฌ ํ•œ ์ค„ ์š”์•ฝ

free๋Š” ์ง€๊ธˆ ์™„์ „ํžˆ ๋†€๊ณ  ์žˆ๋Š” ๋ฉ”๋ชจ๋ฆฌ,
available์€ ๋‹น์žฅ ํšŒ์ˆ˜ํ•ด์„œ ์“ธ ์ˆ˜ ์žˆ๋Š” "์ž ์žฌ์  ์—ฌ์œ  ๋ฉ”๋ชจ๋ฆฌ"์˜ˆ์š”.

๐ŸŽ“ ํ•ต์‹ฌ ์ฐจ์ด ์š”์•ฝ

๊ตฌ๋ถ„freeavailable
์˜๋ฏธ์•„๋ฌด๋„ ์•ˆ ์“ฐ๋Š” ๋ฉ”๋ชจ๋ฆฌ์ง€๊ธˆ ๋‹น์žฅ์€ ์“ฐ์ด๊ณ  ์žˆ์ง€๋งŒ, ์‹œ์Šคํ…œ์ด ํ•„์š”ํ•˜๋ฉด ํšŒ์ˆ˜ ๊ฐ€๋Šฅํ•œ ๋ฉ”๋ชจ๋ฆฌ ํฌํ•จ
ํฌํ•จ ๋‚ด์šฉ์ง„์งœ๋กœ ๋†€๊ณ  ์žˆ๋Š” ๋ฉ”๋ชจ๋ฆฌ๋งŒfree + ์ผ๋ถ€ ์บ์‹œ + ๋ฒ„ํผ ์บ์‹œ
์‹œ์Šคํ…œ ์‹ ๋ขฐ๋„๋‚ฎ์Œ (ํ—ท๊ฐˆ๋ฆฌ๊ธฐ ์‰ฌ์›€)๋†’์Œ (ํ˜„์‹ค ๋ฐ˜์˜๋œ ๊ฐ’)
๋ณด๊ธฐ ์ข‹์€ ํ•ญ๋ชฉโŒโœ… ์‹ค์ œ ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•œ ๊ณต๊ฐ„์œผ๋กœ ํŒ๋‹จํ•ด์•ผ ํ•  ์ง€ํ‘œ

๐Ÿง  ๋น„์œ ๋กœ ์‰ฝ๊ฒŒ ์ดํ•ดํ•˜๊ธฐ

  • free: ์ฑ…์ƒ์— ์•„๋ฌด๊ฒƒ๋„ ์•ˆ ์˜ฌ๋ ค๋‘” ๊ณต๊ฐ„
  • available: ์ฑ…์ƒ ์œ„์— ์ฑ…์ด ์žˆ์ง€๋งŒ, ๋‹น์žฅ ์“ฐ์ง€ ์•Š์œผ๋ฉด ์˜†์œผ๋กœ ๋ฐ€์–ด๋ฒ„๋ฆด ์ˆ˜ ์žˆ๋Š” ๊ณต๊ฐ„๊นŒ์ง€ ํฌํ•จ

์ฆ‰, ๋‹น์žฅ ๋น„์–ด ์žˆ๋Š”๊ฐ€? vs. ํ•„์š”ํ•˜๋ฉด ๋น„์šธ ์ˆ˜ ์žˆ๋Š”๊ฐ€?์˜ ์ฐจ์ด์˜ˆ์š”.

๐Ÿ“ ์ •๋ฆฌ

  • free๋Š” ํ˜„์žฌ ์‚ฌ์šฉ๋˜์ง€ ์•Š๋Š” ๊ณต๊ฐ„
  • available์€ ์‚ฌ์šฉ ์ค‘์ด์ง€๋งŒ, ์–ธ์ œ๋“  ํšŒ์ˆ˜ ๊ฐ€๋Šฅํ•œ ๊ณต๊ฐ„๊นŒ์ง€ ํฌํ•จ
  • ๋ฉ”๋ชจ๋ฆฌ ๋ถ€์กฑ ํŒ๋‹จ ์‹œ ๋ฌด์กฐ๊ฑด available์„ ๊ธฐ์ค€์œผ๋กœ ํŒ๋‹จํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค!

sar ๋ช…๋ น์–ด๋ฅผ ์‚ฌ์šฉํ•ด์„œ ๋ฉ”๋ชจ๋ฆฌ ๊ด€๋ จ ์ •๋ณด๋ฅผ ์ˆ˜์ง‘ํ•˜๊ธฐ

sar -r ๋ช…๋ น์–ด๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ๋‘ ๋ฒˆ์งธ ์ธ์ˆ˜๋กœ ์ง€์ •ํ•œ ๊ฐ„๊ฒฉ(์˜ˆ์ œ๋Š” 1์ดˆ)์œผ๋กœ ๋ฉ”๋ชจ๋ฆฌ ๊ด€๋ จ ํ†ต๊ณ„ ์ •
๋ณด๋ฅผ ์–ป์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๐Ÿšจ 3์žฅ: ๋ฉ”๋ชจ๋ฆฌ๊ฐ€ ๋ถ€์กฑํ•  ๋•Œ์˜ ํžˆ์–ด๋กœ, OOM Killer

๐Ÿ“‰ ๋ฉ”๋ชจ๋ฆฌ๊ฐ€ ๋ถ€์กฑํ•˜๋ฉด ์–ด๋–กํ•ด์š”? (OOM Killer ๋“ฑ์žฅ!)

๋ฉ”๋ชจ๋ฆฌ ๊ด€๋ฆฌ๊ฐ€ ์ž˜๋˜๋‹ค๊ฐ€๋„ ์‹œ์Šคํ…œ์ด ๋„ˆ๋ฌด ๋ฐ”์˜๊ณ  ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ์‹ฌํ•˜๊ฒŒ ์“ฐ๋ฉด ๊ฐ‘์ž๊ธฐ ๋ถ€์กฑํ•ด์งˆ ์ˆ˜ ์žˆ์–ด์š”. ์ด๊ฑธ 'Out Of Memory'(OOM) ์ƒํƒœ๋ผ๊ณ  ๋ถ€๋ฆ…๋‹ˆ๋‹ค. ์ด๋Ÿฐ ์ƒํ™ฉ์—์„œ๋Š” ๋ฆฌ๋ˆ…์Šค๊ฐ€ ๊ณผ๊ฐํ•˜๊ฒŒ ํ•˜๋‚˜์˜ ํ”„๋กœ์„ธ์Šค๋ฅผ ๊ฐ•์ œ๋กœ ์ข…๋ฃŒ์‹œ์ผœ์š”! ๋„ค, ์กฐ๊ธˆ ๋ฌด์„ญ์ง€๋งŒ... ์ƒ์กด์„ ์œ„ํ•œ ์–ด์ฉ” ์ˆ˜ ์—†๋Š” ์„ ํƒ์ด์ฃ . ์ด๊ฑธ OOM Killer๋ผ๊ณ  ๋ถˆ๋Ÿฌ์š”.

๋งŒ์•ฝ ์—ฌ๋Ÿฌ๋ถ„์ด ๋Œ๋ฆฌ๋˜ ํ”„๋กœ๊ทธ๋žจ์ด ๊ฐ‘์ž๊ธฐ ์‚ฌ๋ผ์กŒ๋‹ค๋ฉด, OOM Killer ๋•Œ๋ฌธ์ผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๐Ÿ’ก ๋จผ์ € ์ดํ•ดํ•  ๊ฐœ๋…: available๊ณผ free

๋ฆฌ๋ˆ…์Šค์—์„œ ๋ฉ”๋ชจ๋ฆฌ ์ƒํƒœ๋ฅผ ๋‚˜ํƒ€๋‚ผ ๋•Œ๋Š” free, used, available, buff/cache ๋“ฑ์˜ ๊ฐ’์ด ๋‚˜์˜ค์ฃ .

  • free: ๋ง ๊ทธ๋Œ€๋กœ ์ง€๊ธˆ ์•„๋ฌด๋„ ์•ˆ ์“ฐ๊ณ  ์žˆ๋Š” ๋ฉ”๋ชจ๋ฆฌ
  • available: ํ•„์š”ํ•˜๋ฉด ๋ฐ”๋กœ ํšŒ์ˆ˜ํ•ด์„œ ์“ธ ์ˆ˜ ์žˆ๋Š” ์žฌํ™œ์šฉ ๊ฐ€๋Šฅํ•œ ๋ฉ”๋ชจ๋ฆฌ
    • buff/cache ์˜์—ญ๋„ ํฌํ•จ๋จ
    • ์ฆ‰, free๋ณด๋‹ค ํ•ญ์ƒ ํฌ๊ฑฐ๋‚˜ ์ž‘์„ ์ˆ˜ ์žˆ์Œ!

โ— ๊ทธ๋Ÿผ์—๋„ ๋ฉ”๋ชจ๋ฆฌ๊ฐ€ ๋ถ€์กฑํ•ด์ง„๋‹ค๋ฉด?

์ผ๋ฐ˜์ ์œผ๋กœ๋Š” buff/cache ์˜์—ญ์„ ์ค„์ด๊ฑฐ๋‚˜ ๋‹ค๋ฅธ ํ”„๋กœ์„ธ์Šค๊ฐ€ ์ข…๋ฃŒ๋˜๋ฉด์„œ ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ํšŒ์ˆ˜ํ•  ์ˆ˜ ์žˆ์–ด์š”.

์‹œ์Šคํ…œ ๋ถ€ํ•˜๊ฐ€ ๋†’์•„์ง€๋ฉด free ๋ฉ”๋ชจ๋ฆฌ๊ฐ€ ์ค„์–ด๋“ญ๋‹ˆ๋‹ค.

์ด๋Ÿด๋•Œ, ์ปค๋„์˜ ๋ฉ”๋ชจ๋ฆฌ ๊ด€๋ฆฌ ์‹œ์Šคํ…œ์€ ์žฌํ™œ์šฉ ๊ฐ€๋Šฅํ•œ ๋ฉ”๋ชจ๋ฆฌ ์˜์—ญ์„ ํ•ด์ œํ•ด free ๊ฐ’์„ ๋Š˜๋ฆฝ๋‹ˆ๋‹ค.

์˜ˆ๋ฅผ ๋“ค์–ด ์žฌํ™œ์šฉ ๊ฐ€๋Šฅํ•œ ๋ฉ”๋ชจ๋ฆฌ์—๋Š” ๋””์Šคํฌ์—์„œ ๋ฐ์ดํ„ฐ๋ฅผ ์ฝ์–ด์„œ ์•„์ง ๋ณ€๊ฒฝ๋˜์ง€ ์•Š์€ ํŽ˜์ด์ง€
์บ์‹œ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค.
์ด๋Ÿฐ ํŽ˜์ด์ง€ ์บ์‹œ๋Š” ๋™์ผํ•œ ๋ฐ์ดํ„ฐ๊ฐ€ ๋””์Šคํฌ์— ์กด์žฌํ•˜๋ฏ€๋กœ ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ํ•ด์ œํ•ด
๋„ ๋ฌธ์ œ๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค.

๋งŒ์•ฝ ํšŒ์ˆ˜ํ•  ์ˆ˜ ์žˆ๋Š” ์žฌํ™œ์šฉ ๋ฉ”๋ชจ๋ฆฌ(available)๋„ ๋ชจ๋‘ ์จ๋ฒ„๋ฆฌ๊ณ 
๋”๋Š” ์ค„์ผ ์ˆ˜ ์—†๋Š”๋ฐ ์ƒˆ๋กœ์šด ๋ฉ”๋ชจ๋ฆฌ ์š”์ฒญ์ด ์˜จ๋‹ค๋ฉด?

์‹œ์Šคํ…œ์€ ์ด์ œ ์„ ํƒ์„ ํ•ด์•ผ ํ•ด์š”. ์ด๋•Œ ๋™์ž‘ํ•˜๋Š” ๋ฌด์„œ์šด ์นœ๊ตฌ๊ฐ€ ๋“ฑ์žฅํ•ฉ๋‹ˆ๋‹ค:
๋งˆ์น˜ ์ดˆ๊ณผ ํƒ‘์Šนํ•œ ๋น„ํ–‰๊ธฐ์—์„œ ์Šน๊ฐ ๋ช‡ ๋ช…์„ ์–ด์ฉ” ์ˆ˜ ์—†์ด ๋‚ด๋ ค์•ผ ํ•˜๋Š” ์ƒํ™ฉ๊ณผ ๊ฐ™์ฃ .

๐Ÿ’€ OOM Killer: ๋ฉ”๋ชจ๋ฆฌ ๋ถ€์กฑ ์‹œ ๋ฐœ๋™๋˜๋Š” "ํ”„๋กœ์„ธ์Šค ์ œ๊ฑฐ์ž"

OOM์€ Out Of Memory์˜ ์ค„์ž„๋ง์ด๊ณ ,
OOM Killer๋Š” ๋ฆฌ๋ˆ…์Šค ์ปค๋„์ด ๊ฐ•์ œ๋กœ ํ”„๋กœ์„ธ์Šค๋ฅผ ์ข…๋ฃŒ์‹œ์ผœ
๋ฉ”๋ชจ๋ฆฌ๋ฅผ ํ™•๋ณดํ•˜๋ ค๋Š” ์ž๋™ ๋ฐฉ์–ด ์‹œ์Šคํ…œ์ด์—์š”.

๐Ÿง  OOM Killer์˜ ์ž‘๋™ ๋ฐฉ์‹

  1. ์‹œ์Šคํ…œ์ด ๋ฉ”๋ชจ๋ฆฌ ๋ถ€์กฑ ์ƒํ™ฉ์— ๋น ์ง
  2. available ๋ฉ”๋ชจ๋ฆฌ์กฐ์ฐจ ๋ถ€์กฑํ•ด์„œ ๋” ์ด์ƒ ์“ธ ์ˆ˜ ์—†์Œ
  3. ์ปค๋„์ด "์ด ์ค‘ ๋ˆ„๊ตฌ๋ฅผ ์ฃฝ์ด๋ฉด ๊ฐ€์žฅ ์ด๋“์ผ๊นŒ?" ๊ณ„์‚ฐํ•จ
  4. ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ๋งŽ์ด ์“ฐ๋ฉด์„œ ์ค‘์š”๋„๊ฐ€ ๋‚ฎ์€ ํ”„๋กœ์„ธ์Šค๋ฅผ "์ œ๋ฌผ"๋กœ ์‚ผ์Œ
  5. ๊ทธ ํ”„๋กœ์„ธ์Šค๋ฅผ ๊ฐ•์ œ๋กœ ์ข…๋ฃŒํ•˜๊ณ  ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ํšŒ์ˆ˜ํ•จ

๐Ÿ“‰ ์˜ˆ์‹œ ์ƒํ™ฉ (๊ทธ๋ฆผ ์„ค๋ช…)

Out Of Memory ์ƒํƒœ

์ƒํƒœ์„ค๋ช…
total์ „์ฒด ๋ฉ”๋ชจ๋ฆฌ
free์ง€๊ธˆ ๋‹น์žฅ ์•„๋ฌด๋„ ์•ˆ ์“ฐ๋Š” ๋ฉ”๋ชจ๋ฆฌ
buff/cacheํŽ˜์ด์ง€ ์บ์‹œ๋‚˜ ๋ฒ„ํผ ์บ์‹œ๋กœ ์“ฐ์ด๋Š” ๋ฉ”๋ชจ๋ฆฌ
usedtotal - free - buff/cache
available์‹ค์ œ๋กœ ํ•„์š”ํ•˜๋ฉด ํšŒ์ˆ˜ ๊ฐ€๋Šฅํ•œ ๋ฉ”๋ชจ๋ฆฌ (buff/cache ํฌํ•จ)

โ†’ ๊ทธ๋Ÿฐ๋ฐ used ์˜์—ญ์ด ๋„ˆ๋ฌด ์ปค์„œ ๋” ์ด์ƒ available๋„ ํ™•๋ณด ๋ชป ํ•˜๋ฉด OOM ๋ฐœ์ƒ!

OOM Killer ๋™์ž‘ ์ „ํ›„

  • ๋™์ž‘ ์ „: ์ปค๋„๋„ ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ์“ฐ๊ณ , ๊ฐ์ข… ํ”„๋กœ์„ธ์Šค๋„ ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ์ฐจ์ง€ ์ค‘
  • ๋™์ž‘ ํ›„: OOM Killer๊ฐ€ ๋ถˆํ•„์š”ํ•œ ํ”„๋กœ์„ธ์Šค๋ฅผ ๊ฐ•์ œ ์ข…๋ฃŒ
    โ†’ ๋‚จ์€ ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ํ™•๋ณดํ•˜๊ณ  ์‹œ์Šคํ…œ์„ ์ •์ƒ์œผ๋กœ ๋ณต๊ท€์‹œํ‚ด

๐Ÿงช OOM ๋ฐœ์ƒ ํ™•์ธ ๋ฐฉ๋ฒ•

$ dmesg | grep -i oom
  • ์œ„ ๋ช…๋ น์–ด๋กœ ์ปค๋„ ๋กœ๊ทธ์—์„œ OOM Killer๊ฐ€ ์ž‘๋™ํ•œ ํ”์ ์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ์–ด์š”. ๋‹ค์Œ๊ณผ ๊ฐ™์ด ์ถœ๋ ฅ๋ผ์š”.
[XXX] oom-kill:constraint=CONSTRAINT_NONE,nodemask=(null),...

๐Ÿงน ๋ฉ”๋ชจ๋ฆฌ ๋ˆ„์ˆ˜๋‚˜ OOM ์˜ˆ๋ฐฉ ํŒ

  1. ps ๋ช…๋ น์–ด๋กœ ํ”„๋กœ์„ธ์Šค ๋ฉ”๋ชจ๋ฆฌ ๊ฐ์‹œ
$ ps aux

โ†’ ์ด ์ค‘ RSS ํ•„๋“œ๋ฅผ ๋ณด๋ฉด ๊ฐ ํ”„๋กœ์„ธ์Šค์˜ ์‹ค์ œ ๋ฉ”๋ชจ๋ฆฌ ์‚ฌ์šฉ๋Ÿ‰์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ์–ด์š”.

  1. ์ˆ˜์ƒํ•œ ํ”„๋กœ์„ธ์Šค ๋ชจ๋‹ˆํ„ฐ๋ง
  • ์‹œ๊ฐ„์ด ์ง€๋‚ ์ˆ˜๋ก RSS๊ฐ€ ๊ณ„์† ์ฆ๊ฐ€ํ•œ๋‹ค๋ฉด ๋ฉ”๋ชจ๋ฆฌ ๋ˆ„์ˆ˜์ผ ๊ฐ€๋Šฅ์„ฑ
  • ์›์ธ์„ ๋ชป ์ฐพ์œผ๋ฉด ์ •๊ธฐ ์žฌ์‹œ์ž‘(cron ๋“ฑ)์œผ๋กœ ์ž„์‹œ ํ•ด๊ฒฐ ๊ฐ€๋Šฅ

OOM Killer๊ฐ€ ๋™์ž‘ํ•˜๋Š” ์‹œ์Šคํ…œ์ด๋ผ๋ฉด
๋ฉ”๋ชจ๋ฆฌ๊ฐ€ ์ถฉ๋ถ„ํ•˜์ง€ ์•Š์€ ๊ฒฝ์šฐ๊ฐ€ ๋งŽ์Šต๋‹ˆ๋‹ค. ๋™์‹œ ์‹คํ–‰ ์ค‘์ธ ํ”„๋กœ์„ธ์Šค ๊ฐœ์ˆ˜๋ฅผ ์ค„์—ฌ์„œ ๋ฉ”๋ชจ๋ฆฌ ์‚ฌ์šฉ
๋Ÿ‰์„ ์ค„์ด๊ฑฐ๋‚˜ ๋˜๋Š” ์ถ”๊ฐ€๋กœ ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ์„ค์น˜ํ•˜๋Š”๊ฒŒ ์ข‹์Šต๋‹ˆ๋‹ค.

โœ… ์š”์•ฝ ์ •๋ฆฌ

๊ฐœ๋…์„ค๋ช…
available์ปค๋„์ด ์žฌํ™œ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ๋ฉ”๋ชจ๋ฆฌ (free๋ณด๋‹ค ์ •ํ™•ํ•œ ์ง€ํ‘œ)
OOM ์ƒํƒœ์ „์ฒด ๋ฉ”๋ชจ๋ฆฌ ์ค‘ ์žฌํ™œ์šฉ ๊ฐ€๋Šฅํ•œ ๋ถ€๋ถ„๋„ ๋‹ค ์จ๋ฒ„๋ฆฐ ์ƒํ™ฉ
OOM Killer๋ฉ”๋ชจ๋ฆฌ ๋ถ€์กฑ ์‹œ, ๋ถˆํ•„์š”ํ•œ ํ”„๋กœ์„ธ์Šค๋ฅผ ์ข…๋ฃŒํ•ด์„œ ์‹œ์Šคํ…œ์„ ์‚ด๋ฆฌ๋Š” ๊ธฐ๋Šฅ
ํ™•์ธ ๋ช…๋ น์–ดdmesg, ps aux, top, free ๋“ฑ์œผ๋กœ ์ƒํƒœ ํ™•์ธ ๊ฐ€๋Šฅ
์˜ˆ๋ฐฉ ๋ฐฉ๋ฒ•์ˆ˜์ƒํ•œ ํ”„๋กœ์„ธ์Šค ๊ฐ์‹œ, ํ•„์š”์‹œ ์žฌ์‹œ์ž‘ ์ž๋™ํ™”, ๋ฉ”๋ชจ๋ฆฌ ์ฆ์„ค ๋“ฑ

โ€œ์–ด๋А ๋‚  ๊ฐ‘์ž๊ธฐ ํ”„๋กœ๊ทธ๋žจ์ด ํŠ•๊ฒผ๋‹ค?โ€ โ†’ OOM Killer์˜ ์†Œํ–‰์ผ ์ˆ˜ ์žˆ์–ด์š”.
dmesg ๋กœ๊ทธ ํ™•์ธ์€ ํ•„์ˆ˜์ž…๋‹ˆ๋‹ค!

์ถ”๊ฐ€ ์ •๋ฆฌ : ๐ŸŽฏ OOM Killer๋Š” ์–ด๋–ค ๊ธฐ์ค€์œผ๋กœ ํ”„๋กœ์„ธ์Šค๋ฅผ ์ฃฝ์ผ๊นŒ?

๋ฆฌ๋ˆ…์Šค ์ปค๋„์ด OOM(Out Of Memory) ์ƒํ™ฉ์—์„œ ์–ด๋–ค ํ”„๋กœ์„ธ์Šค๋ฅผ ์ฃฝ์ผ์ง€ ๊ฒฐ์ •ํ•˜๋Š” ๊ธฐ์ค€์€ ์‚ฌ์‹ค ๊ฝค ๋˜‘๋˜‘ํ•˜๊ณ  ๊ณ„์‚ฐ์ ์ธ ๋ฐฉ์‹์œผ๋กœ ์ง„ํ–‰๋ฉ๋‹ˆ๋‹ค. ๋ฐ”๋กœ "OOM Score (OOM ์ ์ˆ˜)"๋ผ๋Š” ๊ธฐ์ค€์ด ์žˆ์–ด์š”.

์ปค๋„์€ ๋ฉ”๋ชจ๋ฆฌ๊ฐ€ ๋ถ€์กฑํ•  ๋•Œ, ๋‹ค์Œ๊ณผ ๊ฐ™์€ ๊ธฐ์ค€์„ ์ข…ํ•ฉ์ ์œผ๋กœ ๊ณ ๋ คํ•ด "๋ˆ„๊ตด ์ฃฝ์ด๋Š” ๊ฒŒ ๊ฐ€์žฅ ์ด๋“์ผ๊นŒ?"๋ฅผ ๊ณ„์‚ฐํ•ฉ๋‹ˆ๋‹ค:

1. ๋ฉ”๋ชจ๋ฆฌ ์‚ฌ์šฉ๋Ÿ‰์ด ๋งŽ์€ ํ”„๋กœ์„ธ์Šค

  • ๊ธฐ๋ณธ์ ์œผ๋กœ RSS(Resident Set Size), ์ฆ‰ ์‹ค์ œ ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ๋งŽ์ด ์ฐจ์ง€ํ•˜๋Š” ํ”„๋กœ์„ธ์Šค๋Š” ์ข‹์€ ํ›„๋ณด๊ฐ€ ๋ฉ๋‹ˆ๋‹ค.
  • ์™œ๋ƒํ•˜๋ฉด, ์ด ํ”„๋กœ์„ธ์Šค๋ฅผ ์ฃฝ์ด๋ฉด ๋งŽ์€ ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ํ•œ๊บผ๋ฒˆ์— ํšŒ์ˆ˜ํ•  ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์ด์ฃ .

2. oom_score ๊ฐ’์ด ๋†’์€ ํ”„๋กœ์„ธ์Šค

  • ๋ฆฌ๋ˆ…์Šค๋Š” ๊ฐ ํ”„๋กœ์„ธ์Šค๋งˆ๋‹ค oom_score๋ผ๋Š” ์ ์ˆ˜๋ฅผ ๊ด€๋ฆฌํ•ด์š”.
  • ์ ์ˆ˜๊ฐ€ ๋†’์„์ˆ˜๋ก ์ฃฝ์„ ํ™•๋ฅ ์ด ๋†’์Œ
    โ†’ ์ด ์ ์ˆ˜๋Š” /proc/[PID]/oom_score ํŒŒ์ผ๋กœ ํ™•์ธํ•  ์ˆ˜ ์žˆ์–ด์š”.
$ cat /proc/1234/oom_score

3. ํ”„๋กœ์„ธ์Šค์˜ ์ค‘์š”๋„ (oom_score_adj)

  • ์‚ฌ์šฉ์ž๋Š” ํ”„๋กœ์„ธ์Šค์— ์ค‘์š”๋„ ๊ฐ€์ค‘์น˜๋„ ๋ถ€์—ฌํ•  ์ˆ˜ ์žˆ์–ด์š”.
  • ์ด ๊ฐ’์€ -1000์—์„œ +1000๊นŒ์ง€ ์„ค์ • ๊ฐ€๋Šฅ:
    • -1000: ์ ˆ๋Œ€ ์ฃฝ์ด๋ฉด ์•ˆ ๋˜๋Š” ํ”„๋กœ์„ธ์Šค (์˜ˆ: ์‹œ์Šคํ…œ ๋ฐ๋ชฌ, SSH ๋“ฑ)
    • 0: ๊ธฐ๋ณธ๊ฐ’
    • +1000: ์•„์ฃผ ์ฃฝ์ด๊ธฐ ์‰ฌ์šด ํ”„๋กœ์„ธ์Šค
$ echo -1000 > /proc/1234/oom_score_adj

โ†’ ์ด๊ฑธ๋กœ OOM Killer๊ฐ€ ์–ด๋–ค ํ”„๋กœ์„ธ์Šค๋ฅผ ํ”ผํ•˜๊ฑฐ๋‚˜ ์šฐ์„ ์ ์œผ๋กœ ์ข…๋ฃŒํ•˜๋„๋ก ์ •์ฑ…์„ ์กฐ์ •ํ•  ์ˆ˜ ์žˆ์–ด์š”.

4. ํ”„๋กœ์„ธ์Šค์˜ ์œ ํšจ ์‚ฌ์šฉ์ž ID(uid)

  • ์‹œ์Šคํ…œ์€ ์ผ๋ฐ˜์ ์œผ๋กœ ๋ฃจํŠธ ํ”„๋กœ์„ธ์Šค๋ณด๋‹ค๋Š” ์ผ๋ฐ˜ ์‚ฌ์šฉ์ž ํ”„๋กœ์„ธ์Šค๋ฅผ ๋จผ์ € ์ข…๋ฃŒํ•˜๋ ค๊ณ  ํ•ด์š”.

5. ๋ฐฑ๊ทธ๋ผ์šด๋“œ vs ํฌ๊ทธ๋ผ์šด๋“œ

  • ๋ฐ์Šคํฌํƒ‘ ํ™˜๊ฒฝ์—์„œ๋Š” ์‚ฌ์šฉ์ž๊ฐ€ ์ง์ ‘ ์‚ฌ์šฉํ•˜๋Š” ์•ฑ๋ณด๋‹ค ๋ฐฑ๊ทธ๋ผ์šด๋“œ์—์„œ ์กฐ์šฉํžˆ ๋Œ์•„๊ฐ€๋Š” ์•ฑ์„ ๋จผ์ € ์ข…๋ฃŒํ•˜๋ ค๊ณ  ํ•˜๊ธฐ๋„ ํ•ด์š”.

๐Ÿ” ์˜ˆ์‹œ ์‹œ๋‚˜๋ฆฌ์˜ค

PIDํ”„๋กœ์„ธ์Šค๋ฉ”๋ชจ๋ฆฌ ์‚ฌ์šฉ๋Ÿ‰oom_score_adj์ตœ์ข… ์ข…๋ฃŒ ๊ฐ€๋Šฅ์„ฑ
100SSH ๋ฐ๋ชฌ์ ์Œ-1000๋งค์šฐ ๋‚ฎ์Œ โŒ
200Python ์„œ๋ฒ„๋งŽ์Œ0๋†’์Œ ๐Ÿ”ฅ
300DB ๋ฐฑ์—… ํˆด์ค‘๊ฐ„+500๊ฝค ๋†’์Œ ๐Ÿ”ฅ
400ํฌ๋กฌ ๋ธŒ๋ผ์šฐ์ €๋งŽ์Œ0์‚ฌ์šฉ์ž ํฌ์ปค์Šค๋ฉด ๋‚ฎ์Œ

๐Ÿ›  ์ •๋ฆฌํ•˜์ž๋ฉด

๊ธฐ์ค€ ํ•ญ๋ชฉ์„ค๋ช…
oom_scoreํ˜„์žฌ ๋ฉ”๋ชจ๋ฆฌ ๋ถ€์กฑ ์ƒํ™ฉ์—์„œ ๊ฐ ํ”„๋กœ์„ธ์Šค์˜ "์ฃฝ์„ ํ™•๋ฅ " ์ ์ˆ˜
oom_score_adj์‚ฌ์šฉ์ž๊ฐ€ ์ง์ ‘ ์กฐ์ •ํ•  ์ˆ˜ ์žˆ๋Š” ๊ฐ€์ค‘์น˜ (์ค‘์š”๋„ ์„ค์ •)
๋ฉ”๋ชจ๋ฆฌ ์‚ฌ์šฉ๋Ÿ‰๋งŽ์ด ์“ฐ๋Š” ๋†ˆ์ด ์ฃฝ์œผ๋ฉด ํšจ์œจ์ !
ํ”„๋กœ์„ธ์Šค UID๋ฃจํŠธ๋ณด๋‹ค ์ผ๋ฐ˜ ์‚ฌ์šฉ์ž ํ”„๋กœ์„ธ์Šค๊ฐ€ ๋” ์ฃฝ๊ธฐ ์‰ฌ์›€
์ค‘์š” ๋ฐ๋ชฌ ์—ฌ๋ถ€SSH, ์‹œ์Šคํ…œ ํ•„์ˆ˜ ํ”„๋กœ์„ธ์Šค๋Š” ๋ณดํ˜ธ๋จ

โœ… ํ™•์ธ ๋ฐฉ๋ฒ• ์ •๋ฆฌ

# ํŠน์ • PID์˜ oom_score ํ™•์ธ
cat /proc/1234/oom_score

# oom_score_adj ์กฐ์ •
echo -1000 > /proc/1234/oom_score_adj

์š”์•ฝ: "๊ฐ€์žฅ ๋งŽ์€ ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ์ฐจ์ง€ํ•˜๋ฉด์„œ๋„, ๋œ ์ค‘์š”ํ•œ ํ”„๋กœ์„ธ์Šค"๊ฐ€ OOM Killer์˜ 1์ˆœ์œ„์ž…๋‹ˆ๋‹ค.
์„œ๋ฒ„ ์šด์˜ ์ค‘์ด๋ผ๋ฉด, ์ค‘์š”ํ•œ ํ”„๋กœ์„ธ์Šค๋Š” oom_score_adj = -1000์œผ๋กœ ๊ผญ ๋ณดํ˜ธํ•ด ์ฃผ์„ธ์š”!


๐ŸŒˆ 4์žฅ: ๊ฐ€์ƒ ๋ฉ”๋ชจ๋ฆฌ์˜ ์‹ ๋น„๋กœ์šด ์„ธ๊ณ„

๊ฐ€์ƒ ๋ฉ”๋ชจ๋ฆฌ๋Š” ์‹ค์ œ ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ๊ฐ€์ƒ ๊ณต๊ฐ„์œผ๋กœ ๋‚˜๋ˆ„์–ด ๊ด€๋ฆฌํ•ฉ๋‹ˆ๋‹ค. ์ด๋ฅผ ํ†ตํ•ด ์—ฌ๋Ÿฌ ๊ฐ€์ง€ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด ๊ฐ€์ƒ ๋ฉ”๋ชจ๋ฆฌ๋Š” ๋งˆ์น˜ ๋ชจ๋“  ํ”„๋กœ์„ธ์Šค์— ๋…๋ฆฝ๋œ ๋ฐฉ์„ ์ œ๊ณตํ•˜๋Š” ํ˜ธํ…”๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

๐ŸŒŒ ๊ฐ€์ƒ ๋ฉ”๋ชจ๋ฆฌ์˜ ๋งˆ๋ฒ•!

๋ฉ”๋ชจ๋ฆฌ ๊ด€๋ฆฌ์˜ ํ•ต์‹ฌ ์ค‘ ํ•˜๋‚˜๊ฐ€ ๋ฐ”๋กœ ๊ฐ€์ƒ ๋ฉ”๋ชจ๋ฆฌ์˜ˆ์š”. ๊ฐ€์ƒ ๋ฉ”๋ชจ๋ฆฌ๋Š” ์‹ค์ œ ๋ฉ”๋ชจ๋ฆฌ(๋ฌผ๋ฆฌ ๋ฉ”๋ชจ๋ฆฌ)๋ฅผ ๊ฐ€์ƒ์ ์œผ๋กœ ๊ด€๋ฆฌํ•ด์„œ ํ”„๋กœ์„ธ์Šค๊ฐ€ ์ง์ ‘ ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ๋‹ค๋ฃจ์ง€ ๋ชปํ•˜๊ฒŒ ํ•ฉ๋‹ˆ๋‹ค. ์ด๋ ‡๊ฒŒ ํ•˜๋ฉด ์—ฌ๋Ÿฌ ๊ฐ€์ง€ ๋ฌธ์ œ๊ฐ€ ํ•ด๊ฒฐ๋ฉ๋‹ˆ๋‹ค.

๐Ÿงฉ ๋ฉ”๋ชจ๋ฆฌ ๋‹จํŽธํ™” ํ•ด๊ฒฐ: ํฉ์–ด์ง„ ๊ณต๊ฐ„๋„ ์ด์–ด ๋ถ™์ธ๋‹ค!

  • ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ํ• ๋‹นํ•˜๊ณ  ํ•ด์ œํ•˜๋Š” ์ž‘์—…์ด ๋ฐ˜๋ณต๋˜๋ฉด ์กฐ๊ฐ์กฐ๊ฐ ๋‚˜์„œ ๋‹จํŽธํ™”๊ฐ€ ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค.
  • ํ•˜์ง€๋งŒ ๊ฐ€์ƒ ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด, ๋ฌผ๋ฆฌ ๋ฉ”๋ชจ๋ฆฌ๊ฐ€ ์กฐ๊ฐ๋‚˜ ์žˆ์–ด๋„ ํ”„๋กœ์„ธ์Šค ์ž…์žฅ์—์„œ๋Š” ์—ฐ์†๋œ ๊ณต๊ฐ„์ฒ˜๋Ÿผ ๋ณด์ด๊ฒŒ ๋งŒ๋“ค ์ˆ˜ ์žˆ์–ด์š”.
  • ํผ์ฆ์ฒ˜๋Ÿผ ํฉ์–ด์ง„ ๋ฌผ๋ฆฌ ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ๋…ผ๋ฆฌ์ ์œผ๋กœ ์ด์–ด ๋ถ™์—ฌ์ฃผ๋Š” ์—ญํ• ์ด์ฃ !

๐Ÿงโ€โ™€๏ธ๐Ÿงโ€โ™‚๏ธ ๋ฉ€ํ‹ฐ ํ”„๋กœ์„ธ์Šค๋„ OK: ๋ชจ๋“  ํ”„๋กœ์„ธ์Šค์— ๋…๋ฆฝ๋œ ๋ฐฉ

  • ์—ฌ๋Ÿฌ ํ”„๋กœ๊ทธ๋žจ์ด ๋™์‹œ์— ๋Œ์•„๊ฐ€๋„ ๊ฐ๊ฐ์˜ ํ”„๋กœ์„ธ์Šค์—๊ฒŒ ์„œ๋กœ ์™„์ „ํžˆ ๋…๋ฆฝ์ ์ธ ๊ฐ€์ƒ ์ฃผ์†Œ ๊ณต๊ฐ„์„ ์ œ๊ณตํ•ด ์ค๋‹ˆ๋‹ค.
  • ๊ฐ™์€ ํ”„๋กœ๊ทธ๋žจ์„ ๋‘ ๋ฒˆ ์‹คํ–‰ํ•ด๋„ ๋ฌธ์ œ์—†์ด ๋Œ์•„๊ฐ€๋Š” ์ด์œ ๋Š”, ์‹ค์ œ ๋ฌผ๋ฆฌ ๋ฉ”๋ชจ๋ฆฌ ์ฃผ์†Œ๊ฐ€ ๋‹ฌ๋ผ๋„ ๊ฐ€์ƒ ์ฃผ์†Œ๋กœ๋Š” ๊ฐ์ž ๋™์ผํ•œ ์ฃผ์†Œ์—์„œ ์‹œ์ž‘ํ•˜๋Š” ๋“ฏ์ด ๋ณด์ด๊ธฐ ๋•Œ๋ฌธ์ด์—์š”.
  • ๊ฐ์ž ๋‹ค๋ฅธ ๋ฐฉ์—์„œ ๊ฐ™์€ ์ธํ…Œ๋ฆฌ์–ด๋ฅผ ํ•œ ์…ˆ์ด์ฃ !

๐Ÿ›ก ๋‹ค๋ฅธ ๋ฐฉ์€ ์—ด ์ˆ˜ ์—†๋‹ค! ๋ณด์•ˆ ๋ณด์žฅ

  • ๊ฐ€์ƒ ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ํ†ตํ•ด ์ž๊ธฐ ๋ฐฉ(ํ”„๋กœ์„ธ์Šค ๋ฉ”๋ชจ๋ฆฌ)๋งŒ ๋ณด์ด๊ณ , ๋‹ค๋ฅธ ๋ฐฉ์€ ๋ณด์ด์ง€ ์•Š์•„์š”.
  • ์ฆ‰, ๋‹ค๋ฅธ ํ”„๋กœ์„ธ์Šค๋‚˜ ์ปค๋„ ๋ฉ”๋ชจ๋ฆฌ์— ๋งˆ์Œ๋Œ€๋กœ ์ ‘๊ทผํ•˜๋Š” ์ผ์ด ์›์ฒœ ์ฐจ๋‹จ๋ฉ๋‹ˆ๋‹ค.
  • ๋ณด์•ˆ๊ณผ ์•ˆ์ •์„ฑ๊นŒ์ง€ ์ฑ™๊ฒจ์ฃผ๋Š” 1์„ 3์กฐ ๊ธฐ๋Šฅ์ด์—์š”.

๐Ÿ—๏ธ ๊ฐ€์ƒ ๋ฉ”๋ชจ๋ฆฌ๊ฐ€ ์—†๋‹ค๋ฉด ์–ด๋–ค ๋ฌธ์ œ๊ฐ€ ์ƒ๊ธธ๊นŒ?

๐Ÿšจ ๋ฌธ์ œ 1: ๋ฉ”๋ชจ๋ฆฌ ๋‹จํŽธํ™”

๋ฉ”๋ชจ๋ฆฌ๋ฅผ ๊ณ„์† ํ• ๋‹นํ•˜๊ณ  ๋ฐ˜๋‚ฉํ•˜๋‹ค ๋ณด๋ฉด, ๋น„์–ด ์žˆ๋Š” ๊ณต๊ฐ„์ด ์—ฌ๋Ÿฌ ์กฐ๊ฐ์œผ๋กœ ํฉ์–ด์ง€๊ฒŒ ๋ฉ๋‹ˆ๋‹ค.
์ด๋Ÿฐ ์ƒํƒœ์—์„œ ์—ฐ์†๋œ ํฐ ๊ณต๊ฐ„์ด ํ•„์š”ํ•˜๋ฉด, ์ „์ฒด ๋นˆ ๊ณต๊ฐ„์€ ์ถฉ๋ถ„ํ•ด๋„ ํ• ๋‹น์— ์‹คํŒจํ•  ์ˆ˜ ์žˆ์–ด์š”.

"์กฐ๊ฐ์กฐ๊ฐ ๋นˆ ๋ฐฉ์€ ๋งŽ์ง€๋งŒ, ์ปค๋‹ค๋ž€ ์ง ํ•˜๋‚˜๋ฅผ ๋‘˜ ์—ฐ์†๋œ ๊ณต๊ฐ„์€ ์—†๋Š” ์…ˆ์ด์ฃ ."

๐Ÿšง ๋ฌธ์ œ 2: ์—ฌ๋Ÿฌ ํ”„๋กœ์„ธ์Šค๊ฐ€ ๋™์‹œ์— ์‹คํ–‰๋˜๊ธฐ ์–ด๋ ค์›€

๊ฐ€์ƒ ๋ฉ”๋ชจ๋ฆฌ๊ฐ€ ์—†๋‹ค๋ฉด, ์‹ค์ œ ๋ฉ”๋ชจ๋ฆฌ ์ฃผ์†Œ์— ๋งž์ถฐ ํ”„๋กœ๊ทธ๋žจ์ด ์‹คํ–‰๋˜์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.
๊ทธ๋Ÿฌ๋ฉด ๊ฐ™์€ ํ”„๋กœ๊ทธ๋žจ์„ ๋‘ ๋ฒˆ ์‹คํ–‰ํ•˜๋ฉด ์ฃผ์†Œ๊ฐ€ ๊ฒน์ณ์„œ ์˜ค๋ฅ˜๊ฐ€ ๋‚ฉ๋‹ˆ๋‹ค.

  • ํ”„๋กœ๊ทธ๋žจ A: 300~500 ์‚ฌ์šฉ ์ค‘์ด๋ฉด,
  • ํ”„๋กœ๊ทธ๋žจ B๋Š” ๊ฐ™์€ ์ฃผ์†Œ์— ๋ฐฐ์น˜ ๋ชปํ•ด์„œ ์‹คํ–‰ ๋ถˆ๊ฐ€!

"๋ชจ๋“  ์†๋‹˜์—๊ฒŒ 301ํ˜ธ๋งŒ ์ฃผ๋Š” ํ˜ธํ…”์ด๋ฉด ๋™์‹œ์— ๋‘˜์€ ๋ชป ๋“ค์–ด๊ฐ€์š”."

๐Ÿ”“ ๋ฌธ์ œ 3: ๋‹ค๋ฅธ ๋ฉ”๋ชจ๋ฆฌ์— ๋งˆ์Œ๋Œ€๋กœ ์ ‘๊ทผ ๊ฐ€๋Šฅ

ํ”„๋กœ์„ธ์Šค๊ฐ€ ๋‹ค๋ฅธ ํ”„๋กœ์„ธ์Šค๋‚˜ ์ปค๋„ ๋ฉ”๋ชจ๋ฆฌ ์ฃผ์†Œ๋ฅผ ์ง€์ •ํ•˜๋ฉด ์‹ค์ œ๋กœ ์ ‘๊ทผ์ด ๊ฐ€๋Šฅํ•ด์ง‘๋‹ˆ๋‹ค.
์ฆ‰, ๋ฐ์ดํ„ฐ ์†์ƒ์ด๋‚˜ ๋ณด์•ˆ ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ์–ด์š”!

"์˜†๋ฐฉ ๋ฌธ์ด ์—ด๋ ค ์žˆ๋‹ค๋ฉด, ๊ทธ ๋ฐฉ ์ง๋„ ํ•จ๋ถ€๋กœ ๋งŒ์งˆ ์ˆ˜ ์žˆ๋‹ค๋Š” ๊ฑฐ์ฃ ."

๐Ÿง  ๊ฐ€์ƒ ๋ฉ”๋ชจ๋ฆฌ์˜ ๋™์ž‘ ๋ฐฉ์‹

๐ŸŽฏ ๊ธฐ๋ณธ ๊ฐœ๋…

์ถœ์ฒ˜ ๏ผš https://velog.io/@hyun0310woo/11-%EC%9A%B4%EC%98%81%EC%B2%B4%EC%A0%9C-%EA%B0%80%EC%83%81-%EB%A9%94%EB%AA%A8%EB%A6%AC

๊ฐ€์ƒ ๋ฉ”๋ชจ๋ฆฌ์˜ ์›๋ฆฌ๋Š” ์ƒ๊ฐ๋ณด๋‹ค ๊ฐ„๋‹จํ•ฉ๋‹ˆ๋‹ค. ํ”„๋กœ์„ธ์Šค๊ฐ€ 4Gb์˜ ํฌ๊ธฐ๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ๋‹ค๊ณ ๋Š” ํ•˜์ง€๋งŒ CPU๊ฐ€ ํ•œ๋ฒˆ์— 4Gb์˜ ์ฝ”๋“œ๋ฅผ ์ฝ์„ ์ˆ˜๋Š” ์—†์Šต๋‹ˆ๋‹ค. ํ•œ๋ฒˆ์— ์ฝ์„ ์ˆ˜ ์žˆ๋Š” ์ฝ”๋“œ, ๋‹ค์‹œ ๋งํ•ด ๋ฉ”๋ชจ๋ฆฌ ํฌ๊ธฐ๋Š” ์ œํ•œ์ ์ด๋ผ๋Š” ๋ง์ž…๋‹ˆ๋‹ค.

์ด๋Š” CPU๊ฐ€ ํ”„๋กœ์„ธ์Šค๋ฅผ ์‹คํ–‰ํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” ๋ชจ๋“  ์ฝ”๋“œ์— ๋Œ€ํ•œ ์ฃผ์†Œ๊ฐ€ ํ•„์š”ํ•˜์ง€ ์•Š๊ณ  ํ˜„์žฌ ์‹คํ–‰ ์ค‘์ธ ์ฝ”๋“œ์— ๋Œ€ํ•œ ๋ฌผ๋ฆฌ ๋ฉ”๋ชจ๋ฆฌ ์ •๋ณด๋งŒ ์•Œ๊ณ  ์žˆ์œผ๋ฉด ๋œ๋‹ค๋Š” ๋ง์ž…๋‹ˆ๋‹ค.

๊ทธ๋ฆฌ๊ณ  ๋‹ค์Œ ์ฝ”๋“œ๋กœ ๋„˜์–ด๊ฐ„๋‹ค๋ฉด ์ด๋ฏธ ์ฝ์—ˆ๋˜ ์ฝ”๋“œ์— ๋Œ€ํ•œ ์ •๋ณด๋Š” ๋ฌผ๋ฆฌ ๋ฉ”๋ชจ๋ฆฌ์—์„œ ์ง€์›Œ๋ฒ„๋ฆฌ๊ณ  ๋‹ค์‹œ ์ฝ์–ด์•ผ ํ•˜๋Š” ์ฝ”๋“œ ์ฃผ์†Œ์— ๋Œ€ํ•œ ์ •๋ณด๋งŒ ์‹ค์ œ ๋ฉ”๋ชจ๋ฆฌ์— ์˜ฌ๋ ค์„œ ์‹คํ–‰ํ•˜๋ฉด ๋˜๋Š”๊ฒ๋‹ˆ๋‹ค.

์œ„์™€ ๊ฐ™์€ ์›๋ฆฌ๋กœ ๋™์ž‘์„ ํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” ๋‘ ๊ฐœ์˜ ์ฃผ์†Œ๊ฐ€ ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค. 0 ~ 4Gb์˜ ์ฃผ์†Œ๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ๋Š” ํ”„๋กœ์„ธ์Šค๊ฐ€ ์ฐธ์กฐํ•˜๋Š” ๊ฐ€์ƒ ์ฃผ์†Œ(Vitual address)์™€ ์ด๋Ÿฌํ•œ ๊ฐ€์ƒ ์ฃผ์†Œ ์ค‘์—์„œ ์‹ค์ œ๋กœ ๋ฉ”๋ชจ๋ฆฌ์— ์˜ฌ๋ผ๊ฐ€์•ผ ํ•˜๋Š” ์ฃผ์†Œ์ธ ๋ฌผ๋ฆฌ ์ฃผ์†Œ(Physical address)๊ฐ€ ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค.

  • ๊ฐ€์ƒ ์ฃผ์†Œ (virtual address): ํ”„๋กœ์„ธ์Šค๊ฐ€ ์ฐธ์กฐํ•˜๋Š” ์ฃผ์†Œ | 0 ~ 4Gb
  • ๋ฌผ๋ฆฌ ์ฃผ์†Œ (physical address): ์‹ค์ œ ๋ฉ”๋ชจ๋ฆฌ ์ฃผ์†Œ

CPU๋Š” ํ”„๋กœ์„ธ์Šค๋ฅผ ์‹คํ–‰ํ•˜๊ธฐ ์œ„ํ•ด์„œ ๋จผ์ € ๊ฐ€์ƒ ์ฃผ์†Œ์— ๋Œ€ํ•œ ์ •๋ณด๋ฅผ ์ฐพ์Šต๋‹ˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ํ•ด๋‹น ๊ฐ€์ƒ ์ฃผ์†Œ๋ฅผ ๊ฐ€์ง€๊ณ  ํ”„๋กœ์„ธ์Šค๋ฅผ ์‹คํ–‰ํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” ๊ฐ€์ƒ ์ฃผ์†Œ๊ฐ€ ์‹ค์ œ๋กœ ์–ด๋–ค ๋ฌผ๋ฆฌ ์ฃผ์†Œ์— ์œ„์น˜ํ•ด ์žˆ๋Š”์ง€ ์•Œ์•„์•ผํ•ฉ๋‹ˆ๋‹ค. : mmu๋กœ

๊ฐ€์ƒ ๋ฉ”๋ชจ๋ฆฌ๋Š” "๊ฐ€์ƒ ์ฃผ์†Œ(Virtual Address)"๋ฅผ ์‚ฌ์šฉํ•ด์„œ, ๋ฌผ๋ฆฌ ์ฃผ์†Œ(Physical Address)๋กœ ๊ฐ„์ ‘ ์ ‘๊ทผํ•˜๊ฒŒ ๋งŒ๋“œ๋Š” ๊ธฐ์ˆ ์ž…๋‹ˆ๋‹ค.

๊ฐ€์ƒ ์ฃผ์†Œ์— ๋Œ€๋น„๋˜๋Š” ์‹œ์Šคํ…œ์— ์„ค์น˜๋œ ๋ฉ”๋ชจ๋ฆฌ์˜ ์‹ค์ œ ์ฃผ์†Œ๋ฅผ ๋ฌผ๋ฆฌ ์ฃผ์†Œ๋ผ๊ณ  ํ•˜๋ฉฐ, ์ด๋Ÿฐ ์ฃผ์†Œ๋ฅผ ์‚ฌ์šฉํ•ด์„œ ์ ‘๊ทผ ๊ฐ€๋Šฅํ•œ ๋ฒ”์œ„๋ฅผ ์ฃผ์†Œ ๊ณต๊ฐ„์ด๋ผ๊ณ  ํ•ฉ๋‹ˆ๋‹คใ€‚

  • ํ”„๋กœ์„ธ์Šค๋Š” ์˜ค์ง ๊ฐ€์ƒ ์ฃผ์†Œ๋งŒ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.
  • ๊ฐ€์ƒ ์ฃผ์†Œ๋Š” ์‹ค์ œ ๋ฉ”๋ชจ๋ฆฌ ์ฃผ์†Œ๊ฐ€ ์•„๋‹ˆ๋ผ, ์ค‘๊ฐ„์—์„œ ์ปค๋„์ด ๋ฒˆ์—ญํ•ด์ฃผ๋Š” ์ฃผ์†Œ์˜ˆ์š”.
  • ๋ฒˆ์—ญ ์ž‘์—…์€ ํŽ˜์ด์ง€ ํ…Œ์ด๋ธ”(Page Table)์„ ํ†ตํ•ด ์ด๋ฃจ์–ด์ง‘๋‹ˆ๋‹ค.

โœ… ํ”„๋กœ์„ธ์Šค๊ฐ€ ์‹คํ–‰๋˜๋Š” ๊ตฌ์กฐ

ํ”„๋กœ์„ธ์Šค ํ•˜๋‚˜๋Š” ์ตœ๋Œ€ 4GiB์˜ ๊ฐ€์ƒ ์ฃผ์†Œ ๊ณต๊ฐ„์„ ํ• ๋‹น๋ฐ›์•„์š”.

์‹ค์ œ ๋ฉ”๋ชจ๋ฆฌ(RAM)๋Š” ์ œํ•œ๋˜์–ด ์žˆ์ง€๋งŒ, ๋ชจ๋“  ์ฝ”๋“œ๋ฅผ ํ•œ ๋ฒˆ์— ์‹คํ–‰ํ•˜๋Š” ๊ฑด ์•„๋‹ˆ๊ธฐ ๋•Œ๋ฌธ์— ํ•„์š”ํ•œ ๋ถ€๋ถ„๋งŒ ์˜ฌ๋ ค์„œ ์‹คํ–‰ํ•ด์š”.

์ด๋ฅผ ๊ฐ€๋Šฅํ•˜๊ฒŒ ํ•˜๋Š” ํ•˜๋“œ์›จ์–ด๊ฐ€ MMU(Memory Management Unit)์ž…๋‹ˆ๋‹ค.

๐Ÿงฑ MMU์˜ ์—ญํ• 

MMU๋Š” CPU์—์„œ ์ฝ”๋“œ๋ฅผ ์‹คํ–‰ํ• ์‹œ์— ๊ฐ€์ƒ ์ฃผ์†Œ๋ฅผ ์‹ค์ œ ๋ฌผ๋ฆฌ ์ฃผ์†Œ๋กœ ๋ณ€ํ™˜ํ•ด์ฃผ๋Š” ํ•˜๋“œ์›จ์–ด ์นฉ์ž…๋‹ˆ๋‹ค.

CPU๊ฐ€ ๊ฐ€์ƒ ์ฃผ์†Œ๋กœ ์š”์ฒญํ•˜๋ฉด MMU๊ฐ€ ํŽ˜์ด์ง€ ํ…Œ์ด๋ธ”์„ ์ฐธ์กฐํ•ด ๋ฌผ๋ฆฌ ์ฃผ์†Œ๋กœ ๋ณ€ํ™˜ํ•ฉ๋‹ˆ๋‹ค.
CR3 ๋ ˆ์ง€์Šคํ„ฐ: ํ˜„์žฌ ํ”„๋กœ์„ธ์Šค์˜ ํŽ˜์ด์ง€ ํ…Œ์ด๋ธ” ์‹œ์ž‘ ์ฃผ์†Œ๋ฅผ ์ €์žฅํ•˜๋Š” CPU ๋ ˆ์ง€์Šคํ„ฐ์ž…๋‹ˆ๋‹ค.

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

์ด๋ ‡๊ฒŒ ์‹ค์ œ ๋ฉ”๋ชจ๋ฆฌ ์šฉ๋Ÿ‰๋ณด๋‹ค ๋” ๋งŽ์€ ํ”„๋กœ์„ธ์Šค๋ฅผ ์‹คํ–‰ํ•˜๊ธฐ ์œ„ํ•ด์„œ ํ”„๋กœ์„ธ์Šค๋ฅผ ์ผ์ • ๋ถ€๋ถ„๋งŒ ๋ฉ”๋ชจ๋ฆฌ์— ์˜ฌ๋ ค์„œ ์‹คํ–‰ํ•˜๋Š”๊ฒƒ๊ณผ ๊ทธ๊ฒƒ์„ ๋„์™€์ฃผ๋Š” ํ•˜๋“œ์›จ์–ด์— ๋Œ€ํ•ด์„œ ์•Œ๊ฒŒ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.

์–ด๋–ค ๊ทœ์น™์œผ๋กœ ํ”„๋กœ์„ธ์Šค๋ฅผ ๋‚˜๋ˆ„๋ƒ๋Š” ๊ฒƒ?์ด๋ƒ๊ฐ€ ์•„๋ž˜์ž…๋‹ˆ๋‹ค.

๐Ÿ“– ํŽ˜์ด์ง€ ํ…Œ์ด๋ธ”๊ณผ ํŽ˜์ด์ง€

๋ฉ”๋ชจ๋ฆฌ๋Š” ํŽ˜์ด์ง€(Page) ๋‹จ์œ„(๋ณดํ†ต 4KiB)๋กœ ๋‚˜๋‰˜์–ด ๊ด€๋ฆฌ๋ผ์š”.

  • ์ปค๋„์€ ๊ฐ ํ”„๋กœ์„ธ์Šค๋งˆ๋‹ค ํŽ˜์ด์ง€ ํ…Œ์ด๋ธ”์„ ๋งŒ๋“ค์–ด์„œ, ๊ฐ€์ƒ ์ฃผ์†Œ โ†’ ๋ฌผ๋ฆฌ ์ฃผ์†Œ๋กœ ์—ฐ๊ฒฐํ•ด์ค๋‹ˆ๋‹ค.
  • CPU๋Š” ๋ฉ”๋ชจ๋ฆฌ์— ์ ‘๊ทผํ•  ๋•Œ ํŽ˜์ด์ง€ ๋‹จ์œ„๋กœ ๋งคํ•‘๋œ ์ฃผ์†Œ๋ฅผ ์ฐธ์กฐํ•ฉ๋‹ˆ๋‹ค.

ํŽ˜์ด์ง€ ํ…Œ์ด๋ธ” = ๊ฐ€์ƒ์˜ ๋ฃธ ๋„˜๋ฒ„ โ†’ ์‹ค์ œ ๋ฐฉ ์œ„์น˜ ์•ˆ๋‚ด๋„

โšก TLB (Translation Lookaside Buffer)

MMU๊ฐ€ ๋งค๋ฒˆ ํŽ˜์ด์ง€ ํ…Œ์ด๋ธ”์— ์ ‘๊ทผํ•˜๋ฉด ๋А๋ฆฌ๊ธฐ ๋•Œ๋ฌธ์— ์ž์ฃผ ์“ฐ๋Š” ์ฃผ์†Œ๋Š” TLB๋ผ๋Š” ๊ณ ์† ์บ์‹œ์— ์ €์žฅํ•ด ์†๋„๋ฅผ ๋†’์ž…๋‹ˆ๋‹ค..

๐Ÿง  ๊ฐ€์ƒ ๋ฉ”๋ชจ๋ฆฌ๊ฐ€ ์–ด๋–ป๊ฒŒ ์ž‘๋™ํ•˜๋Š”๊ฐ€?

โœ… ํ”„๋กœ์„ธ์Šค๊ฐ€ ์‹คํ–‰๋˜๋Š” ๊ตฌ์กฐ

  • ํ”„๋กœ์„ธ์Šค ํ•˜๋‚˜๋Š” ์ตœ๋Œ€ 4GiB์˜ ๊ฐ€์ƒ ์ฃผ์†Œ ๊ณต๊ฐ„์„ ํ• ๋‹น๋ฐ›์•„์š”.
  • ์‹ค์ œ ๋ฉ”๋ชจ๋ฆฌ(RAM)๋Š” ์ œํ•œ๋˜์–ด ์žˆ์ง€๋งŒ, ๋ชจ๋“  ์ฝ”๋“œ๋ฅผ ํ•œ ๋ฒˆ์— ์‹คํ–‰ํ•˜๋Š” ๊ฑด ์•„๋‹ˆ๊ธฐ ๋•Œ๋ฌธ์— ํ•„์š”ํ•œ ๋ถ€๋ถ„๋งŒ ์˜ฌ๋ ค์„œ ์‹คํ–‰ํ•ด์š”.
  • ์ด๋ฅผ ๊ฐ€๋Šฅํ•˜๊ฒŒ ํ•˜๋Š” ํ•˜๋“œ์›จ์–ด๊ฐ€ MMU(Memory Management Unit)์ž…๋‹ˆ๋‹ค.

๐Ÿงฑ MMU์˜ ์—ญํ• 

  • ๊ฐ€์ƒ ์ฃผ์†Œ โ†’ ๋ฌผ๋ฆฌ ์ฃผ์†Œ ๋ณ€ํ™˜์„ ๋‹ด๋‹นํ•˜๋Š” ํ•˜๋“œ์›จ์–ด ์žฅ์น˜
  • CPU๊ฐ€ ๊ฐ€์ƒ ์ฃผ์†Œ๋กœ ์š”์ฒญํ•˜๋ฉด MMU๊ฐ€ ํŽ˜์ด์ง€ ํ…Œ์ด๋ธ”์„ ์ฐธ์กฐํ•ด ๋ฌผ๋ฆฌ ์ฃผ์†Œ๋กœ ๋ณ€ํ™˜ํ•ฉ๋‹ˆ๋‹ค.
  • CR3 ๋ ˆ์ง€์Šคํ„ฐ: ํ˜„์žฌ ํ”„๋กœ์„ธ์Šค์˜ ํŽ˜์ด์ง€ ํ…Œ์ด๋ธ” ์‹œ์ž‘ ์ฃผ์†Œ๋ฅผ ์ €์žฅํ•˜๋Š” CPU ๋ ˆ์ง€์Šคํ„ฐ์ž…๋‹ˆ๋‹ค.

๐Ÿ—บ๏ธ ํŽ˜์ด์ง€ ํ…Œ์ด๋ธ”๊ณผ TLB

๐Ÿ“– ํŽ˜์ด์ง€ ํ…Œ์ด๋ธ”๊ณผ ํŽ˜์ด์ง€

ํŽ˜์ด์ง€ ํ…Œ์ด๋ธ”์ด๋ž€?

"๊ฐ€์ƒ ์ฃผ์†Œ๋ฅผ ๋ฌผ๋ฆฌ ์ฃผ์†Œ๋กœ ๋ฐ”๊ฟ”์ฃผ๋Š” ๋น„์„œ!"

๐ŸŽ’ ๋น„์œ : ์ฃผ์†Œ ๋ณ€ํ™˜์ด ํ•„์š”ํ•œ ๋ฐฐ๋‹ฌ์›
์šฐ๋ฆฌ๊ฐ€ ํ”„๋กœ๊ทธ๋žจ์„ ์‹คํ–‰ํ•˜๋ฉด, ์šด์˜์ฒด์ œ๋Š” ๊ฐ ํ”„๋กœ๊ทธ๋žจ(ํ”„๋กœ์„ธ์Šค)๋งˆ๋‹ค ๊ฐ€์ƒ ์ฃผ์†Œ ๊ณต๊ฐ„์„ ์ค˜์š”.
ํ•˜์ง€๋งŒ ์ปดํ“จํ„ฐ๋Š” ์ง„์งœ ๋ฌผ๋ฆฌ ๋ฉ”๋ชจ๋ฆฌ(RAM) ์ฃผ์†Œ๋ฅผ ์•Œ์•„์•ผ ๋ฐ์ดํ„ฐ๋ฅผ ์ฝ๊ณ  ์“ธ ์ˆ˜ ์žˆ๊ฒ ์ฃ ?

๊ทธ๋ž˜์„œ ํ•„์š”ํ•œ ๊ฒŒ ๋ฐ”๋กœโ€ฆ

๐Ÿ“ฌ "์ฃผ์†Œ ๋ณ€ํ™˜ํ‘œ" ์—ญํ• ์„ ํ•˜๋Š” ํŽ˜์ด์ง€ ํ…Œ์ด๋ธ” (Page Table)์ž…๋‹ˆ๋‹ค!

๐Ÿงญ ํŽ˜์ด์ง€ ํ…Œ์ด๋ธ”์˜ ์—ญํ• ์€?

๊ธฐ๋Šฅ์„ค๋ช…
์ฃผ์†Œ ๋ณ€ํ™˜CPU๊ฐ€ ์‚ฌ์šฉํ•˜๋Š” ๊ฐ€์ƒ ์ฃผ์†Œ๋ฅผ ๋ฌผ๋ฆฌ ์ฃผ์†Œ๋กœ ๋ณ€ํ™˜ํ•ด์ค˜์š”.
์ ‘๊ทผ ๋ณดํ˜ธ์ด ์ฃผ์†Œ๊ฐ€ ์œ ํšจํ•œ์ง€? ์ฝ๊ธฐ๋งŒ ๊ฐ€๋Šฅํ•œ์ง€? ์‹คํ–‰ ๊ฐ€๋Šฅํ•œ์ง€? ๋“ฑ ์ ‘๊ทผ ๊ถŒํ•œ ํ™•์ธ๋„ ํ•ด์ค˜์š”.
๋ฉ”๋ชจ๋ฆฌ ํ• ๋‹น ์—ฌ๋ถ€๋ฌผ๋ฆฌ ๋ฉ”๋ชจ๋ฆฌ๊ฐ€ ์•„์ง ์•ˆ ํ• ๋‹น๋์œผ๋ฉด ํŽ˜์ด์ง€ ํดํŠธ๋ฅผ ๋ฐœ์ƒ์‹œ์ผœ์š”.

๐Ÿงฉ ์–ด๋–ป๊ฒŒ ๊ตฌ์„ฑ๋ผ ์žˆ์„๊นŒ?

์šด์˜์ฒด์ œ๋Š” ๊ฐ€์ƒ ์ฃผ์†Œ๋ฅผ "ํŽ˜์ด์ง€ ๋‹จ์œ„(๋ณดํ†ต 4KiB)"๋กœ ๋‚˜๋ˆ ์„œ ๊ด€๋ฆฌํ•˜๊ณ  ์žˆ์–ด์š”.
์˜ˆ: 4KB ๋‹จ์œ„๋กœ ์ชผ๊ฐœ์„œ ๊ฐ€์ƒ ์ฃผ์†Œ 0๋ฒˆ ํŽ˜์ด์ง€, 1๋ฒˆ ํŽ˜์ด์ง€, 2๋ฒˆ ํŽ˜์ด์ง€โ€ฆ ์‹์œผ๋กœ์š”.

๐Ÿ“Œ ํŽ˜์ด์ง€ ํ…Œ์ด๋ธ”์€ ์ด ๊ฐ๊ฐ์˜ ๊ฐ€์ƒ ํŽ˜์ด์ง€ ๋ฒˆํ˜ธ๊ฐ€ ์–ด๋”” ๋ฌผ๋ฆฌ ์ฃผ์†Œ์— ์žˆ๋Š”์ง€๋ฅผ ์ €์žฅํ•ด๋‘๋Š” ํ‘œ์˜ˆ์š”.

๊ฐ€์ƒ ํŽ˜์ด์ง€ ๋ฒˆํ˜ธ โ†’ ๋ฌผ๋ฆฌ ํŽ˜์ด์ง€ ๋ฒˆํ˜ธ
        0       โ†’       3
        1       โ†’       7
        2       โ†’     ์—†์Œ (ํŽ˜์ด์ง€ ํดํŠธ!)

๐Ÿ“ฆ ํŽ˜์ด์ง€ ํ…Œ์ด๋ธ”์€ ์–ด๋””์— ์žˆ์„๊นŒ?

  • ๊ฐ ํ”„๋กœ์„ธ์Šค๋งˆ๋‹ค ๊ณ ์œ ํ•œ ํŽ˜์ด์ง€ ํ…Œ์ด๋ธ”์„ ๊ฐ–๊ณ  ์žˆ์–ด์š”!
  • ํŽ˜์ด์ง€ ํ…Œ์ด๋ธ” ์ž์ฒด๋„ ๋ฌผ๋ฆฌ ๋ฉ”๋ชจ๋ฆฌ์— ์ €์žฅ๋˜๊ณ ,
  • CPU๋Š” CR3 ๋ ˆ์ง€์Šคํ„ฐ๋ฅผ ํ†ตํ•ด ํ˜„์žฌ ์‚ฌ์šฉ ์ค‘์ธ ํŽ˜์ด์ง€ ํ…Œ์ด๋ธ”์„ ์ฐธ์กฐํ•ด์š”.

๐ŸŒ‰ ๊ณ„์ธตํ˜• ํŽ˜์ด์ง€ ํ…Œ์ด๋ธ”์ด ํ•„์š”ํ•œ ์ด์œ 

x86_64 ์‹œ์Šคํ…œ์—์„  ๊ฐ€์ƒ ์ฃผ์†Œ ๊ณต๊ฐ„์ด 128TB๋‚˜ ๋˜๋‹ˆ๊นŒ,
๋ชจ๋“  ์ฃผ์†Œ๋ฅผ ๋‹ค ํ‰๋ฉด(1์ฐจ์› ๋ฐฐ์—ด)์œผ๋กœ ์ €์žฅํ•˜๋ฉด ๋„ˆ๋ฌด ์ปค์š”! (256GB ๋„˜๊ฒŒ ๋จน์Œ ๐Ÿ˜ฑ)

๊ทธ๋ž˜์„œ ๋ฉ”๋ชจ๋ฆฌ ๋‚ญ๋น„๋ฅผ ์ค„์ด๊ธฐ ์œ„ํ•ด ํŠธ๋ฆฌ ๊ตฌ์กฐ์ฒ˜๋Ÿผ ๊ณ„์ธต์ ์œผ๋กœ ๊ด€๋ฆฌํ•ฉ๋‹ˆ๋‹ค.

๐Ÿ“š ์ฑ…์„ ๋ชฉ์ฐจ โ†’ ์ฑ•ํ„ฐ โ†’ ํŽ˜์ด์ง€ ์ˆœ์œผ๋กœ ์ฐพ๋“ฏ,
ํŽ˜์ด์ง€ ํ…Œ์ด๋ธ”๋„ 4๋‹จ๊ณ„ ๊ณ„์ธต ๊ตฌ์กฐ๋กœ ์ญ‰์ญ‰ ๋”ฐ๋ผ ๋‚ด๋ ค๊ฐ€์š”.

๐Ÿ’ก ์š”์•ฝ ์ •๋ฆฌ

ํ•ญ๋ชฉ์„ค๋ช…
๐Ÿ“Œ ์ •์˜๊ฐ€์ƒ ์ฃผ์†Œ๋ฅผ ๋ฌผ๋ฆฌ ์ฃผ์†Œ๋กœ ๋ฐ”๊ฟ”์ฃผ๋Š” ์ฃผ์†Œ ๋ณ€ํ™˜ํ‘œ
๐Ÿง  ์กด์žฌ ์ด์œ ์ฃผ์†Œ ๋ณดํ˜ธ, ์ ‘๊ทผ ๊ถŒํ•œ, ๋ฉ”๋ชจ๋ฆฌ ํ• ๋‹น ๊ด€๋ฆฌ
๐Ÿงฑ ๊ตฌ์กฐํŽ˜์ด์ง€ ๋‹จ์œ„ ๋งคํ•‘ (4KB ๊ธฐ์ค€), ๊ณ„์ธตํ˜• ํ…Œ์ด๋ธ” ๊ตฌ์กฐ
๐Ÿ’ฅ ํดํŠธ๋งคํ•‘์ด ์—†์œผ๋ฉด ํŽ˜์ด์ง€ ํดํŠธ ๋ฐœ์ƒ โ†’ OSไป‹์ž…
๐Ÿข ๊ฐ์ž ๋ณด์œ ๋ชจ๋“  ํ”„๋กœ์„ธ์Šค๋Š” ๊ฐ์ž ์ž๊ธฐ๋งŒ์˜ ํŽ˜์ด์ง€ ํ…Œ์ด๋ธ”์„ ๊ฐ€์ง

โ€œํŽ˜์ด์ง€ ํ…Œ์ด๋ธ”์€ ๋ชจ๋“  ๊ฐ€์ƒ ๋ฉ”๋ชจ๋ฆฌ ์ ‘๊ทผ์„ ์ฑ…์ž„์ง€๋Š” ๋“ ๋“ ํ•œ ์•ˆ๋‚ด๋„๋‹ค!โ€

ํŽ˜์ด์ง€ ํ…Œ์ด๋ธ” = ๊ฐ€์ƒ์˜ ๋ฃธ ๋„˜๋ฒ„ โ†’ ์‹ค์ œ ๋ฐฉ ์œ„์น˜ ์•ˆ๋‚ด๋„

์‚ฌ์‹ค์€ ๊ฐ€์ƒ ์ฃผ์†Œ ๊ณต๊ฐ„ ํฌ๊ธฐ๋Š” ๊ณ ์ •๋œ ๊ฐ’์ด๊ณ , ํŽ˜์ด์ง€ ํ…Œ์ด๋ธ” ์—”ํŠธ๋ฆฌ์— ํŽ˜์ด์ง€์™€ ๋Œ€์‘ํ•˜๋Š” ๋ฌผ๋ฆฌ
๋ฉ”๋ชจ๋ฆฌ์˜ ์กด์žฌ ์—ฌ๋ถ€๋ฅผ ๊ด€๋ฆฌํ•˜๋Š” ๋ฐ์ดํ„ฐ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค.

์ฐธ๊ณ ๋กœ "๊ฐ€์ƒ ์ฃผ์†Œ๋ฅผ ๋ฌผ๋ฆฌ ์ฃผ์†Œ๋กœ ๋ฐ”๊ฟ”์ฃผ๋Š” ์‹ค์งˆ์ ์ธ ํ•˜๋“œ์›จ์–ด"๋Š” MMU (Memory Management Unit)์ž…๋‹ˆ๋‹ค.

๐Ÿง  ์ •๋ฆฌํ•ด๋ณด๋ฉด ์ด๋ ‡๊ฒŒ ๋‚˜๋ˆŒ ์ˆ˜ ์žˆ์–ด์š”:

์—ญํ• ์ฃผ์ฒด์„ค๋ช…
๐Ÿ“‹ ๋ณ€ํ™˜ ์ •๋ณด ์ €์žฅํŽ˜์ด์ง€ ํ…Œ์ด๋ธ” (Page Table)๊ฐ€์ƒ ํŽ˜์ด์ง€๊ฐ€ ๋ฌผ๋ฆฌ ๋ฉ”๋ชจ๋ฆฌ ์–ด๋””์— ์žˆ๋Š”์ง€ ์ €์žฅ๋œ ํ‘œ
โš™๏ธ ์ฃผ์†Œ ๋ณ€ํ™˜ ์‹คํ–‰MMU (๋ฉ”๋ชจ๋ฆฌ ๊ด€๋ฆฌ ์œ ๋‹›)CPU ์•ˆ์— ์žˆ๋Š” ํ•˜๋“œ์›จ์–ด. ํŽ˜์ด์ง€ ํ…Œ์ด๋ธ”์„ ์ฐธ๊ณ ํ•ด ์ฃผ์†Œ๋ฅผ ๋ณ€ํ™˜ํ•จ
๐Ÿ’ก ์˜์‚ฌ ๊ฒฐ์ • ์ฃผ์ฒด์šด์˜์ฒด์ œ (์ปค๋„)ํŽ˜์ด์ง€ ํ…Œ์ด๋ธ” ์ƒ์„ฑ/๊ด€๋ฆฌ, ํŽ˜์ด์ง€ ํดํŠธ ์ฒ˜๋ฆฌ, ๊ถŒํ•œ ๋ถ€์—ฌ ๋“ฑ

์ฆ‰, MMU๋Š” ๋ณ€ํ™˜์„ โ€˜์‹คํ–‰โ€™ํ•˜๋Š” ์‚ฌ๋žŒ,
ํŽ˜์ด์ง€ ํ…Œ์ด๋ธ”์€ ๊ทธ โ€˜์ง€๋„โ€™,
์šด์˜์ฒด์ œ๋Š” ๊ทธ๊ฑธ โ€˜์ž‘์„ฑํ•˜๊ณ  ๊ฐ๋…โ€™ํ•˜๋Š” ๊ด€๋ฆฌ์ž์ž…๋‹ˆ๋‹ค.

โšก TLB (Translation Lookaside Buffer)

  • MMU๊ฐ€ ๋งค๋ฒˆ ํŽ˜์ด์ง€ ํ…Œ์ด๋ธ”์— ์ ‘๊ทผํ•˜๋ฉด ๋А๋ฆฌ๊ธฐ ๋•Œ๋ฌธ์— ์ž์ฃผ ์“ฐ๋Š” ์ฃผ์†Œ๋Š” TLB๋ผ๋Š” ๊ณ ์† ์บ์‹œ์— ์ €์žฅํ•ด ์†๋„๋ฅผ ๋†’์ž…๋‹ˆ๋‹ค.

๐Ÿ” ํŽ˜์ด์ง€ ํดํŠธ ์™„์ „ ์ •๋ณต: ์ปดํ“จํ„ฐ๊ฐ€ โ€˜๋ฐฉ์„ ์ฐพ์ง€ ๋ชปํ–ˆ์„ ๋•Œโ€™ ์ƒ๊ธฐ๋Š” ์ผ

๐Ÿšช ํŽ˜์ด์ง€ ํดํŠธ๋ž€? "๊ทธ ๋ฐฉ์€ ์•„์ง ์ค€๋น„๋˜์ง€ ์•Š์•˜์–ด์š”"

๊ฐ€์ƒ ๋ฉ”๋ชจ๋ฆฌ๋Š” ๋งˆ์น˜ ํ˜ธํ…”์ฒ˜๋Ÿผ ์ƒ๊ฒผ์Šต๋‹ˆ๋‹ค.

  • ์˜ˆ์•ฝ์€ ๋˜์–ด ์žˆ์ง€๋งŒ, ์•„์ง ์‹ค์ œ ๋ฐฉ์ด ๋งŒ๋“ค์–ด์ง€์ง€ ์•Š์€ ๊ฒฝ์šฐ๋„ ์žˆ์ฃ !
  • ์ด๋•Œ ์†๋‹˜(ํ”„๋กœ์„ธ์Šค)์ด ๋ฐฉ(๋ฉ”๋ชจ๋ฆฌ)์— ๋“ค์–ด๊ฐ€๋ ค ํ•˜๋ฉด, ํ”„๋ŸฐํŠธ(์ปค๋„)๊ฐ€ ๊ฐ€์„œ ๊ธ‰ํžˆ ๋ฐฉ์„ ๋งŒ๋“œ๋Š” ๊ณผ์ •์ด ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค.

์ด๊ฒŒ ๋ฐ”๋กœ ํŽ˜์ด์ง€ ํดํŠธ(Page Fault)์ž…๋‹ˆ๋‹ค.

์ด๋Ÿฐ ํŽ˜์ด์ง€ ํดํŠธ ์˜ˆ์™ธ๊ฐ€ ๋ฐœ์ƒํ•˜๋ฉด CPU์—์„œ ์‹คํ–‰ ์ค‘์ธ ๋ช…๋ น์ด ์ค‘๋‹จ๋˜๊ณ , ์ปค๋„ ๋ฉ”๋ชจ๋ฆฌ์— ๋ฐฐ์น˜๋œ ํŽ˜์ด์ง€ํดํŠธ ํ•ธ๋“ค๋Ÿฌ page fault handler ์ฒ˜๋ฆฌ๊ฐ€ ์‹คํ–‰๋ฉ๋‹ˆ๋‹ค.

๐Ÿง  ๊ธฐ๋ณธ ์ •์˜

  • ํ”„๋กœ์„ธ์Šค๊ฐ€ ๊ฐ€์ƒ ์ฃผ์†Œ๋ฅผ ์ฐธ์กฐํ–ˆ๋Š”๋ฐ, TLB๋„ ๋ชจ๋ฅด๊ณ , ํŽ˜์ด์ง€ ํ…Œ์ด๋ธ”์—๋„ ๋ฌผ๋ฆฌ ์ฃผ์†Œ๊ฐ€ ์—†์„ ๋•Œ ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค.
  • CPU๋Š” ์‹คํ–‰์„ ๋ฉˆ์ถ”๊ณ  ์ปค๋„์—๊ฒŒ ํŽ˜์ด์ง€ ํดํŠธ ์˜ˆ์™ธ(Page Fault Exception)๋ฅผ ๋ฐœ์ƒ์‹œํ‚ต๋‹ˆ๋‹ค.
  • ์ปค๋„์€ ์ด ์˜ˆ์™ธ๋ฅผ ์ฒ˜๋ฆฌํ•˜๊ณ , ํ•ด๋‹น ํŽ˜์ด์ง€๋ฅผ ๋””์Šคํฌ์—์„œ RAM์œผ๋กœ ๋ถˆ๋Ÿฌ์˜ต๋‹ˆ๋‹ค.

๐Ÿงฉ ํŽ˜์ด์ง€ ํดํŠธ์˜ ์ข…๋ฅ˜: ๋‹ค ๊ฐ™์€ ํดํŠธ๊ฐ€ ์•„๋‹ˆ๋‹ค!

1) ๐Ÿ“ฆ Minor Page Fault (๋งˆ์ด๋„ˆ ํดํŠธ)

๐Ÿ“Œ "์ฃผ์†Œ์— ๋Œ€์‘๋˜๋Š” ๋ฌผ๋ฆฌ ํŽ˜์ด์ง€๋Š” ์ด๋ฏธ ๋ฉ”๋ชจ๋ฆฌ์— ์žˆ์–ด์š”. ๊ทผ๋ฐ ํŽ˜์ด์ง€ ํ…Œ์ด๋ธ”์—๋งŒ ์•„์ง ์—†์—ˆ๋„ค์š”!"

  • ์˜ˆ: ๊ฐ™์€ ํ”„๋กœ๊ทธ๋žจ์ด ์ด๋ฏธ ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ๊ณต์œ ํ•˜๊ณ  ์žˆ๋Š” ๊ฒฝ์šฐ ๋“ฑ
  • ๋˜๋Š” fork() ์ดํ›„์— ๋ถ€๋ชจ์™€ ์ž์‹์ด ๊ฐ™์€ ํŽ˜์ด์ง€๋ฅผ ๊ณต์œ ํ•˜๋Š” ์ƒํƒœ์ผ ์ˆ˜๋„ ์žˆ์–ด์š”

์ด๋Ÿด ๋•Œ๋Š” ๋””์Šคํฌ ์ ‘๊ทผ ์—†์ด, ํŽ˜์ด์ง€ ํ…Œ์ด๋ธ”๋งŒ ์—…๋ฐ์ดํŠธํ•˜๋ฉด ๋!

โœ… ๋น ๋ฅด๊ณ  ๋ถ€๋‹ด ์—†์Œ

๐Ÿง  ๋น„์œ ํ•˜์ž๋ฉด?
์ด๋ฏธ ์ฑ…์€ ์ฑ…์žฅ์— ๊ฝ‚ํ˜€ ์žˆ๋Š”๋ฐ, ๋„์„œ ๋ชฉ๋ก(ํŽ˜์ด์ง€ ํ…Œ์ด๋ธ”)์—๋งŒ ๋ˆ„๋ฝ๋œ ์ƒํƒœ์˜ˆ์š”.

"์•„! ๋ชฉ๋ก์—๋งŒ ์ถ”๊ฐ€ํ•˜๋ฉด ๋˜๋Š”๊ตฌ๋‚˜~" ๐Ÿ‘“

๐Ÿง  ๋ฉ”๋ชจ๋ฆฌ๋Š” ์žˆ๋Š”๋ฐ, ์ฃผ์†Œํ‘œ(ํŽ˜์ด์ง€ ํ…Œ์ด๋ธ”)๊ฐ€ ๋น ์ ธ ์žˆ์–ด์„œ ์ƒ๊ธด ์ผ

2) ๐Ÿ› ๏ธ Major Page Fault (๋ฉ”์ด์ € ํดํŠธ)

๐Ÿ“Œ "์ด๊ฑด ํฐ์ผ์ด์—์š”! ๊ทธ ์ฃผ์†Œ์˜ ๋ฐ์ดํ„ฐ๊ฐ€ ๋ฉ”๋ชจ๋ฆฌ์— ์—†๊ณ  ๋””์Šคํฌ์— ์žˆ์–ด์š”!"

  • ๋””์Šคํฌ์— ์žˆ๋˜ ๋ฐ์ดํ„ฐ๋ฅผ RAM์œผ๋กœ ๋กœ๋”ฉํ•ด์•ผ๋งŒ ํ•  ๊ฒฝ์šฐ

  • ๋ณดํ†ต์€ swap ์˜์—ญ์ด๋‚˜ mmap๋œ ํŒŒ์ผ์—์„œ ๋ฐ์ดํ„ฐ๋ฅผ ๋””์Šคํฌ์—์„œ ์ฝ์–ด์™€์•ผ ํ•ด์š”

  • ๋””์Šคํฌ I/O๋Š” ์—„์ฒญ ๋А๋ ค์„œ โžก CPU๊ฐ€ ํ•œ์ฐธ ๊ธฐ๋‹ค๋ ค์•ผ ํ•จ

    ์ฆ‰, ๋””์Šคํฌ I/O๊ฐ€ ๋ฐœ์ƒํ•จ

  • ๋ฉ”์ด์ € ํดํŠธ๊ฐ€ ์ž์ฃผ ์ผ์–ด๋‚˜๋ฉด ์„ฑ๋Šฅ์ด ๋š ๋–จ์–ด์ง‘๋‹ˆ๋‹ค

  • ์†๋„๋„ ํ›จ์”ฌ ๋А๋ฆผ (ํ•˜๋“œ๋””์Šคํฌ โ†’ ๋ฉ”๋ชจ๋ฆฌ ๋ณต์‚ฌ)

๐Ÿง  ๋น„์œ ํ•˜์ž๋ฉด?
์ฑ…์žฅ์—๋„ ์ฑ…์ด ์—†๊ณ , ์ฐฝ๊ณ (๋””์Šคํฌ)๊นŒ์ง€ ๊ฐ€์„œ ์ฐพ์•„์™€์•ผ ํ•ด์š”.

"์•„์ด๊ณ  ์ด๊ฑธ ์ง€๊ธˆ ๊ฐ€์ง€๋Ÿฌ ๊ฐ€์•ผ ํ•ด?" ๐Ÿงณ

๐Ÿง  ๋ฐฉ์ด ์•„์˜ˆ ์—†์–ด์„œ, ์ƒˆ๋กœ ์‹œํŠธ๋ฅผ ๊น”๊ณ  TV๋ฅผ ๋†“๊ณ  ๋ฐฉ์„ ๊พธ๋ฏธ๋Š” ์ž‘์—…์ด ํ•„์š”ํ•œ ์ƒํ™ฉ

๐Ÿงช ์‹ค์ „์—์„œ ์ด๊ฑธ ์–ด๋–ป๊ฒŒ ํ™•์ธํ•ด?

ps -o min_flt,maj_flt -p <PID>
  • min_flt: ๋งˆ์ด๋„ˆ ํดํŠธ ํšŸ์ˆ˜
  • maj_flt: ๋ฉ”์ด์ € ํดํŠธ ํšŸ์ˆ˜

demand-paging.py์—์„œ๋„ ํŽ˜์ด์ง€์— ์ ‘๊ทผํ•˜๋ฉด ๋‘˜ ์ค‘ ํ•˜๋‚˜๊ฐ€ ์˜ฌ๋ผ๊ฐ€์š”!

โœจ ๊ทธ๋ฆฌ๊ณ  ์ด๊ฑธ ์™„์„ฑ์‹œํ‚ค๋Š” ๊ธฐ์ˆ , COW (Copy-On-Write)

๐Ÿค” ์–ธ์ œ ์“ฐ๋ƒ๋ฉด?

fork()๋กœ ๋ถ€๋ชจ ํ”„๋กœ์„ธ์Šค๋ฅผ ๋ณต์‚ฌํ•  ๋•Œ์š”.
์ž์‹ ํ”„๋กœ์„ธ์Šค๋ฅผ ๋งŒ๋“ค๊ธฐ ์œ„ํ•ด ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ์ „๋ถ€ ๋ณต์‚ฌํ•ด์•ผ ํ•œ๋‹ค๋ฉด? ๐Ÿ’ฅ ๋น„ํšจ์œจ์ ์ด์ฃ .

๐Ÿ’ก ํ•ด๊ฒฐ์ฑ…: "๋ณต์‚ฌ ์•ˆ ํ•˜๊ณ  ์ผ๋‹จ ๊ฐ™์ด ์จ!"

  • ๋ถ€๋ชจ์™€ ์ž์‹์€ ๊ฐ™์€ ๋ฉ”๋ชจ๋ฆฌ ํŽ˜์ด์ง€๋ฅผ ์ฝ๊ธฐ ์ „์šฉ์œผ๋กœ ๊ณต์œ 

๋‘˜ ์ค‘ ๋ˆ„๊ฐ€ ์“ฐ๊ธฐ ์‹œ๋„๋ฅผ ํ•˜๋ฉด?

-ํŽ˜์ด์ง€ ํดํŠธ ๋ฐœ์ƒ!

  • ๊ทธ๋•Œ ๋น„๋กœ์†Œ ํ•ด๋‹น ํŽ˜์ด์ง€๋ฅผ ์ง„์งœ ๋ณต์‚ฌํ•ด์„œ ๋ถ„๋ฆฌ

๐Ÿง  ๋งˆ์น˜ ๋ฌธ์„œ๋ฅผ ๋ณต์‚ฌํ•ด๋‹ฌ๋ผ๊ณ  ํ•ด์„œ ๊ฐ™์ด ๋ณด๊ณ  ์žˆ๋‹ค๊ฐ€, ํ•œ ๋ช…์ด ๋‚™์„œ๋ฅผ ํ•˜๋ ค๊ณ  ํ•˜๋ฉด ๊ทธ๋•Œ์„œ์•ผ ๋ณต์‚ฌํ•ด์ฃผ๋Š” ๋А๋‚Œ์ด์—์š”

๐Ÿ“Œ ๊ทธ๋ž˜์„œ ์–ป๋Š” ์ด์ ์€?
๋ฉ”๋ชจ๋ฆฌ ์ ˆ์•ฝ

  • fork() ์„ฑ๋Šฅ ํ–ฅ์ƒ (ํŠนํžˆ exec()๋กœ ๊ธˆ๋ฐฉ ๋ฎ์–ด์“ธ ๊ฒฝ์šฐ)

โ€œํŽ˜์ด์ง€ ํดํŠธ๊ฐ€ ๋‹ค ๊ฐ™์€ ๊ฒŒ ์•„๋‹ˆ๋‹ค.
๋ฌธ์ œ๋Š” ๋ฉ”์ด์ € ํดํŠธ!
๋˜‘๋˜‘ํ•˜๊ฒŒ ์•„๋ผ๋Š” ๊ธฐ์ˆ ์€ COW!โ€

๐Ÿƒ ํŽ˜์ด์ง€ ํดํŠธ๊ฐ€ ๋ฐœ์ƒํ•˜๋ฉด ์–ด๋–ค ์ผ์ด ๋ฒŒ์–ด์งˆ๊นŒ?

์•„๋ž˜๋Š” ํŽ˜์ด์ง€ ํดํŠธ๊ฐ€ ๋ฐœ์ƒํ•˜๊ณ  ์ฒ˜๋ฆฌ๋˜๋Š” ์ „์ฒด ํ๋ฆ„์ž…๋‹ˆ๋‹ค:

โœ… ์ „์ฒด ํ๋ฆ„ ์š”์•ฝ

1. ํ”„๋กœ์„ธ์Šค๊ฐ€ ๊ฐ€์ƒ ์ฃผ์†Œ์— ์ ‘๊ทผํ•จ
2. TLB์—์„œ ํ™•์ธ โ€“ ์‹คํŒจ!
3. ํŽ˜์ด์ง€ ํ…Œ์ด๋ธ”์—์„œ ํ™•์ธ โ€“ ์‹คํŒจ!
4. ํŽ˜์ด์ง€ ํดํŠธ ์˜ˆ์™ธ ๋ฐœ์ƒ (์ธํ„ฐ๋ŸฝํŠธ)
5. ์šด์˜์ฒด์ œ๊ฐ€ ๋””์Šคํฌ์—์„œ ํ•ด๋‹น ํŽ˜์ด์ง€๋ฅผ ๋ฌผ๋ฆฌ ๋ฉ”๋ชจ๋ฆฌ์— ๋กœ๋“œ
6. ํŽ˜์ด์ง€ ํ…Œ์ด๋ธ” ์—…๋ฐ์ดํŠธ
7. ํ”„๋กœ์„ธ์Šค ์žฌ์‹คํ–‰

๐ŸŽจ ๊ทธ๋ฆผ์œผ๋กœ ๋ณด๋ฉด ๋” ์‰ฌ์›Œ์š”!

๐Ÿ’ฅ ํŽ˜์ด์ง€ ํดํŠธ ์‹ค์ „ ์˜ˆ์‹œ: ๊ณ ์˜๋กœ ํ„ฐํŠธ๋ ค๋ณด์ž

  • ๊ฐ€์ƒ ์ฃผ์†Œ์—๋Š” ์žˆ์ง€๋งŒ ๋ฌผ๋ฆฌ ๋ฉ”๋ชจ๋ฆฌ์— ์—†๋Š” ๊ฒฝ์šฐ, CPU๋Š” ํŽ˜์ด์ง€ ํดํŠธ ์˜ˆ์™ธ๋ฅผ ๋ฐœ์ƒ์‹œ์ผœ์š”.
  • ์ปค๋„์€ ์ด๊ฑธ ๊ฐ์ง€ํ•˜๊ณ  ํ•„์š”ํ•œ ํŽ˜์ด์ง€๋ฅผ ๋””์Šคํฌ์—์„œ RAM์œผ๋กœ ๋ถˆ๋Ÿฌ์˜ค๊ณ  ๋‹ค์‹œ ์‹คํ–‰์‹œํ‚ต๋‹ˆ๋‹ค.
// segv.go
package main

import "fmt"

func main() {
    var p *int = nil
    fmt.Println("๋น„์ •์ƒ ๋ฉ”๋ชจ๋ฆฌ ์ ‘๊ทผ ์ „")
    *p = 8 // ๐Ÿ’ฃ ํ„ฐ์ง„๋‹ค!
    fmt.Println("๋น„์ •์ƒ ๋ฉ”๋ชจ๋ฆฌ ์ ‘๊ทผ ํ›„")
}
  • ์ด ์ฝ”๋“œ๋ฅผ ์‹คํ–‰ํ•˜๋ฉด ๋‹ค์Œ๊ณผ ๊ฐ™์€ ๋ฉ”์‹œ์ง€๊ฐ€ ๋œน๋‹ˆ๋‹ค:
panic: runtime error: invalid memory address or nil pointer dereference
SIGSEGV: segmentation violation

๐Ÿ’ก ์‹ค์ œ ๋ฌผ๋ฆฌ ๋ฉ”๋ชจ๋ฆฌ์—๋„ ์กด์žฌํ•˜์ง€ ์•Š๋Š” ์ฃผ์†Œ์— ์ ‘๊ทผํ–ˆ๊ธฐ ๋•Œ๋ฌธ์ด์—์š”!

์ด ํ”„๋กœ๊ทธ๋žจ์„ ์‹คํ–‰ํ•˜๋ฉด ๋‹ค์Œ๊ณผ ๊ฐ™์ด panic: invalid memory address ๋ฉ”์‹œ์ง€์™€ ํ•จ๊ป˜ ํ”„๋กœ์„ธ์Šค๊ฐ€ ์ข…๋ฃŒ๋ฉ๋‹ˆ๋‹ค.
์ด๊ฒƒ์ด ๋ฐ”๋กœ ๊ฐ€์ƒ ๋ฉ”๋ชจ๋ฆฌ ๋ณดํ˜ธ๊ธฐ๋Šฅ์ด ์ œ๋Œ€๋กœ ์ž‘๋™ํ–ˆ๋‹ค๋Š” ์ฆ๊ฑฐ์ž…๋‹ˆ๋‹ค.

์‹คํ–‰ํ•˜๋ฉด SIGSEGV(์„ธ๊ทธ๋ฉ˜ํ…Œ์ด์…˜ ํดํŠธ)๊ฐ€ ๋ฐœ์ƒํ•˜๋ฉฐ ํ”„๋กœ๊ทธ๋žจ์ด ์ข…๋ฃŒ๋ฉ๋‹ˆ๋‹ค.

๐Ÿ“Š ํŽ˜์ด์ง€ ํดํŠธ ์‹ค์Šต์—์„œ ๋ณธ ๋ณ€ํ™”

์•ž์„œ ์‚ฌ์šฉํ•œ demand-paging.py ์˜ˆ์‹œ์ฒ˜๋Ÿผโ€ฆ

  • mmap()์œผ๋กœ ๋ฉ”๋ชจ๋ฆฌ ํ™•๋ณดํ•œ ๋’ค์—๋„
  • ์‹ค์ œ ์ ‘๊ทผํ•˜๊ธฐ ์ „๊นŒ์ง€๋Š” ๋ฌผ๋ฆฌ ๋ฉ”๋ชจ๋ฆฌ ์‚ฌ์šฉ๋Ÿ‰์ด ๋ณ€ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค
  • ์ ‘๊ทผ ์‹œ์ ๋งˆ๋‹ค ํŽ˜์ด์ง€ ํดํŠธ๊ฐ€ ๋ฐœ์ƒํ•˜๊ณ , ๊ทธ๋•Œ์„œ์•ผ ๋ฉ”๋ชจ๋ฆฌ์— ๋กœ๋”ฉ๋ฉ๋‹ˆ๋‹ค

๐Ÿ’ก ์ด๊ฒŒ ๋ฐ”๋กœ Demand Paging์ด์—์š”! ์‹ค์ œ ํ•„์š”ํ•  ๋•Œ๋งŒ ๋ฌผ๋ฆฌ ๋ฉ”๋ชจ๋ฆฌ ํ• ๋‹น

  • ๋ชจ๋“  ํŽ˜์ด์ง€๋ฅผ ๋ฏธ๋ฆฌ ๋ฉ”๋ชจ๋ฆฌ์— ์˜ฌ๋ ค๋†“๋Š” ์„ ํ–‰ ํŽ˜์ด์ง•๊ณผ ๋‹ฌ๋ฆฌ, ํ•„์š”ํ•œ ์ˆœ๊ฐ„์— ๋ฉ”๋ชจ๋ฆฌ์— ์˜ฌ๋ฆฌ๋Š” ๋ฐฉ์‹์ž…๋‹ˆ๋‹ค.
  • ํ”„๋กœ์„ธ์Šค๊ฐ€ ์ ‘๊ทผํ•˜๋ ค๋Š” ํŽ˜์ด์ง€๊ฐ€ ์—†์œผ๋ฉด ํŽ˜์ด์ง€ ํดํŠธ โ†’ ๋ฉ”๋ชจ๋ฆฌ์— ๋กœ๋“œ โ†’ ํ…Œ์ด๋ธ” ๊ฐฑ์‹  โ†’ ์žฌ์‹œ์ž‘ ํ๋ฆ„์ด ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค.

๐Ÿง  ๋ฆฌ๋ˆ…์Šค์—์„œ์˜ ํŽ˜์ด์ง€ ํดํŠธ ๊ด€๋ฆฌ

๋ฆฌ๋ˆ…์Šค๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์€ ๋ฐฉ์‹์œผ๋กœ ํŽ˜์ด์ง€ ํดํŠธ๋ฅผ ์ฒ˜๋ฆฌํ•ฉ๋‹ˆ๋‹ค:

๋‹จ๊ณ„์„ค๋ช…
1ํŽ˜์ด์ง€ ํดํŠธ ์˜ˆ์™ธ ๋ฐœ์ƒ
2์ปค๋„์˜ page_fault_handler() ๋™์ž‘
3ํ•ด๋‹น ์ฃผ์†Œ๊ฐ€ ์œ ํšจํ•œ ๋ฒ”์œ„์ธ์ง€ ๊ฒ€์‚ฌ
4๋ฉ”๋ชจ๋ฆฌ ํ• ๋‹น์ด ๊ฐ€๋Šฅํ•˜๋ฉด ํŽ˜์ด์ง€ ํ…Œ์ด๋ธ”์„ ์—…๋ฐ์ดํŠธ
5๊ฐ€๋Šฅํ•˜์ง€ ์•Š์œผ๋ฉด SIGSEGV ์‹œ๊ทธ๋„ ์ „์†ก

๐Ÿ” ๋ถ„์„ ๋„๊ตฌ๋กœ ํ™•์ธํ•˜๊ธฐ

ps -o min_flt,maj_flt -p <PID>

  • ํ”„๋กœ์„ธ์Šค์˜ ๋งˆ์ด๋„ˆ/๋ฉ”์ด์ € ํŽ˜์ด์ง€ ํดํŠธ ํšŸ์ˆ˜ ํ™•์ธ

vmstat

  • ์‹œ์Šคํ…œ ์ „์ฒด์˜ ํŽ˜์ด์ง€ ํดํŠธ ํ๋ฆ„ ํŒŒ์•… ๊ฐ€๋Šฅ

โš ๏ธ ํŽ˜์ด์ง€ ํดํŠธ๋Š” ๋งŽ์œผ๋ฉด ์•ˆ ์ข‹์€๊ฐ€?

๊ทธ๋ ‡์Šต๋‹ˆ๋‹ค!

  • ์ดˆ๋ฐ˜์—๋Š” ํ•„์š”ํ•˜์ง€๋งŒ, ์ง€์†์ ์œผ๋กœ ๋ฐœ์ƒํ•œ๋‹ค๋ฉด?
  • โ†’ ๋ฉ”๋ชจ๋ฆฌ ๋ถ€์กฑ, ๋ฉ”๋ชจ๋ฆฌ ์„ค๊ณ„ ๋ฏธ์ˆ™, ์บ์‹œ ๋ฏธ์Šค ๋“ฑ์˜ ๋ฌธ์ œ๊ฐ€ ์žˆ์„ ์ˆ˜ ์žˆ์–ด์š”

๐Ÿ“Œ ์˜ˆ๋ฅผ ๋“ค์–ด, Major Page Fault๊ฐ€ ๊ณ„์† ๋ฐœ์ƒํ•˜๋ฉด ๋””์Šคํฌ I/O๊ฐ€ ๋นˆ๋ฒˆํ•ด์ง€๊ณ  ์„ฑ๋Šฅ์ด ํฌ๊ฒŒ ์ €ํ•˜๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

ํŽ˜์ด์ง€ ํดํŠธ๊ฐ€ ์ž์ฃผ ์ผ์–ด๋‚œ๋‹ค๋ฉด ์–ด๋–ป๊ฒŒ ๋ ๊นŒ์—ฌ
โ†’ ์ฒ˜๋ฆฌ ์‹œ๊ฐ„์ด ์˜ค๋ž˜ ๊ฑธ๋ฆฐ๋‹ค.ย 

ํŽ˜์ด์ง€ ํดํŠธ๋ฅผ ๋ฐฉ์ง€ํ•˜๋ ค๋ฉด ์–ด๋–ป๊ฒŒ ํ•ด์•ผํ• ๊นŒ?
โ†’ ์•ž์œผ๋กœ ์‹คํ–‰๋  ์ฝ”๋“œ๋‚˜ ์š”์ฒญ๋  ๋ฐ์ดํ„ฐ๋ฅผ ํฌํ•จํ•œ ํŽ˜์ด์ง€๋ฅผ ๋ฏธ๋ฆฌ๋ฏธ๋ฆฌ ๋ฉ”๋ชจ๋ฆฌ์— ์˜ฌ๋ฆฝ๋‹ˆ๋‹ค.
โ†’ ์™„๋ฒฝํ•œ ๋ฏธ๋ž˜์˜ˆ์ธก = ์‹ ์˜ ์˜์—ญย 

  • ์ด๋Ÿฌํ•œ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•ด์„œ ๋‹ค์–‘ํ•œ ํŽ˜์ด์ง€ ๊ต์ฒด ์•Œ๊ณ ๋ฆฌ์ฆ˜์ด ์žˆ๋‹ค.ย 

    ์ถœ์ฒ˜: https://devraphy.tistory.com/246 [๊ฐœ๋ฐœ์ž๋ฅผ ํ–ฅํ•˜์—ฌ:ํ‹ฐ์Šคํ† ๋ฆฌ]

โœจ ์ •๋ฆฌ: ํŽ˜์ด์ง€ ํดํŠธ, ๊ผญ ๋‚˜์œ ๊ฒƒ๋งŒ์€ ์•„๋‹ˆ์ง€๋งŒโ€ฆ

ํ•ญ๋ชฉ์„ค๋ช…
Minor Page Fault๋ฉ”๋ชจ๋ฆฌ๋Š” ์žˆ์Œ, ์ฃผ์†Œ ์ •๋ณด๋งŒ ์—†์Œ
Major Page Fault๋””์Šคํฌ์—์„œ ์ฝ์–ด์•ผ ํ•จ
๋ฐœ์ƒ ์‹œ ์ฒ˜๋ฆฌ์ปค๋„์˜ page fault handler๊ฐ€ ๋ฌผ๋ฆฌ ๋ฉ”๋ชจ๋ฆฌ์— ์˜ฌ๋ฆฌ๊ณ  ํŽ˜์ด์ง€ ํ…Œ์ด๋ธ” ๊ฐฑ์‹ 
SIGSEGV๋ฉ”๋ชจ๋ฆฌ ๊ณต๊ฐ„์ด ์•„์˜ˆ ์—†์œผ๋ฉด ๋ฐœ์ƒํ•˜๋Š” ์‹œ๊ทธ๋„

ํŽ˜์ด์ง€ ํดํŠธ ํ•ธ๋“ค๋Ÿฌ์˜ ํŽ˜์ด์ง€ ํ…Œ์ด๋ธ” ์—”ํŠธ๋ฆฌ ์กด์žฌ ์—ฌ๋ถ€์— ๋”ฐ๋ฅธ ๋ถ„๊ธฐ ์ฒ˜๋ฆฌ (์Šคํ„ฐ๋”” ํ›„ ๋ณด๊ฐ•)

ํŽ˜์ด์ง€ ํดํŠธ๊ฐ€ ๋ฐœ์ƒํ•œ ํ›„ ์ฒ˜๋ฆฌ

์šด์˜์ฒด์ œ๋Š” ์ด๋Ÿฌํ•œ ํŽ˜์ด์ง€ ํดํŠธ๊ฐ€ ๋ฐœ์ƒํ•˜๋ฉด ํ•ด๋‹น ํŽ˜์ด์ง€๋ฅผ ๋ฌผ๋ฆฌ ๋ฉ”๋ชจ๋ฆฌ์— ์˜ฌ๋ ค์ฃผ๊ณ  ์žฌ์‹คํ–‰์„ ํ•˜๊ฒŒํ•ฉ๋‹ˆ๋‹ค.

์ด๋Ÿฌํ•œ ๊ณผ์ •์„ ๊ทธ๋ฆผ์œผ๋กœ ์‚ดํŽด๋ณด๋ฉด ์•„๋ž˜์™€ ๊ฐ™์Šต๋‹ˆ๋‹ค.

์ถœ์ฒ˜ : https://velog.io/@hyun0310woo/11-%EC%9A%B4%EC%98%81%EC%B2%B4%EC%A0%9C-%EA%B0%80%EC%83%81-%EB%A9%94%EB%AA%A8%EB%A6%AC

1. TLB์— ๋ฌผ๋ฆฌ ์ฃผ์†Œ๊ฐ€ ์žˆ์„ ๊ฒฝ์šฐ

TLB์— ๋ฌผ๋ฆฌ ์ฃผ์†Œ๊ฐ€ ์žˆ๋‹ค๋ฉด ๋ฉ”๋ชจ๋ฆฌ์— ์žˆ๋Š” ํŽ˜์ด์ง€ ํ…Œ์ด๋ธ”์— ๊ฐ€์ง€ ์•Š๊ณ  ๋ฐ”๋กœ ๋ฌผ๋ฆฌ ์ฃผ์†Œ์— ํ•ด๋‹นํ•˜๋Š” ๋ฐ์ดํ„ฐ๋ฅผ ํ™•์ธ ํ›„์— ์ „๋‹ฌํ•˜๋ฉด ๋ฉ๋‹ˆ๋‹ค.

2. TLB์— ๋ฌผ๋ฆฌ ์ฃผ์†Œ๊ฐ€ ์—†์„ ๊ฒฝ์šฐ

์—†์„ ๊ฒฝ์šฐ์—๋Š” CR3 ๋ ˆ์ง€์Šคํ„ฐ ๊ฐ’์„ ํ†ตํ•ด์„œ ํŽ˜์ด์ง€ ํ…Œ์ด๋ธ”์— ์ ‘๊ทผํ•˜๋ฉฐ ์ด๋•Œ ํŽ˜์ด์ง€ ํ…Œ์ด๋ธ”์˜ ์ •๋ณด(valid - invalid bit๊ฐ’)์„ ํ™•์ธํ•ด์„œ ๋ฌผ๋ฆฌ ์ฃผ์†Œ์— ๋Œ€ํ•œ ๋ฐ์ดํ„ฐ๊ฐ€ ์žˆ์„ ๊ฒฝ์šฐ ์ „๋‹ฌํ•ด์ฃผ๋ฉด ๋ฉ๋‹ˆ๋‹ค.

3. ํŽ˜์ด์ง€ ํ…Œ์ด๋ธ”์— ๋ฌผ๋ฆฌ ๋ฉ”๋ชจ๋ฆฌ ๋ฐ์ดํ„ฐ๊ฐ€ ์—†์„ ๊ฒฝ์šฐ

ํŽ˜์ด์ง€ ํ…Œ์ด๋ธ”์—๋„ ๋ฌผ๋ฆฌ ๋ฉ”๋ชจ๋ฆฌ ๋ฐ์ดํ„ฐ๊ฐ€ ์—†๋‹ค๋ฉด ํŽ˜์ด์ง€ ํดํŠธ ์ธํ„ฐ๋ŸฝํŠธ๋ฅผ ํ†ตํ•ด์„œ ์šด์˜์ฒด์ œ์—๊ฒŒ ์•Œ๋ ค์ค๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋ฉด ์šด์˜์ฒด์ œ๋Š” ํ•ด๋‹น ์ธํ„ฐ๋ŸฝํŠธ๋ฅผ ์ฒ˜๋ฆฌํ•˜๊ธฐ ์œ„ํ•ด์„œ ํ”„๋กœ์„ธ์Šค์˜ ๊ณต๊ฐ„์—์„œ ํŽ˜์ด์ง€๋ฅผ ๊ฐ€์ ธ์™€ ๋ฌผ๋ฆฌ ๋ฉ”๋ชจ๋ฆฌ์— ์˜ฌ๋ ค์ฃผ๊ฒŒ ๋˜๊ณ  ํŽ˜์ด์ง€ ํ…Œ์ด๋ธ”์„ ์—…๋ฐ์ดํŠธํ•˜๊ฒŒ ๋ฉ๋‹ˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ๋‹ค์‹œ CPU์—๊ฒŒ ๊ฐ€์ƒ ์ฃผ์†Œ ์š”์ฒญ์„ ํ•˜๋„๋ก ํ•ฉ๋‹ˆ๋‹ค.

๋ฌผ๋ก  ์ด๋Ÿฌํ•œ ํŽ˜์ด์ง€ ํด๋“œ๊ฐ€ ๋นˆ๋ฒˆํ•˜๊ฒŒ ๋ฐœ์ƒํ•˜๋ฉด ์‹คํ–‰ ์‹œ๊ฐ„์ด ์˜ค๋ž˜ ๊ฑธ๋ฆฝ๋‹ˆ๋‹ค.

๐Ÿ” ํŽ˜์ด์ง€ ๊ต์ฒด ์ •์ฑ… (Page Replacement)

โœ… ๋ฌผ๋ฆฌ ๋ฉ”๋ชจ๋ฆฌ๊ฐ€ ๊ฝ‰ ์ฐผ๋‹ค๋ฉด?

  • ์ƒˆ ํŽ˜์ด์ง€๋ฅผ ์˜ฌ๋ ค์•ผ ํ•˜๋Š”๋ฐ ๊ณต๊ฐ„์ด ์—†๋‹ค๋ฉด ๊ธฐ์กด ํŽ˜์ด์ง€๋ฅผ ํ•˜๋‚˜ ์ œ๊ฑฐํ•ด์•ผ ํ•ด์š”.
  • ์–ด๋–ค ํŽ˜์ด์ง€๋ฅผ ์ œ๊ฑฐํ• ์ง€๋Š” ๊ต์ฒด ์•Œ๊ณ ๋ฆฌ์ฆ˜์— ๋”ฐ๋ผ ๊ฒฐ์ •๋ฉ๋‹ˆ๋‹ค:
์•Œ๊ณ ๋ฆฌ์ฆ˜์„ค๋ช…
FIFO๊ฐ€์žฅ ๋จผ์ € ๋“ค์–ด์˜จ ํŽ˜์ด์ง€ ์ œ๊ฑฐ
OPT์•ž์œผ๋กœ ๊ฐ€์žฅ ์˜ค๋ž˜ ์•ˆ ์“ธ ํŽ˜์ด์ง€ ์ œ๊ฑฐ (์ด๋ก ์ƒ ์ตœ์ ์ด์ง€๋งŒ ๊ตฌํ˜„ ์–ด๋ ค์›€)
LRU๊ฐ€์žฅ ์˜ค๋ž˜์ „์— ์‚ฌ์šฉํ•œ ํŽ˜์ด์ง€ ์ œ๊ฑฐ
LFU๊ฐ€์žฅ ์ ๊ฒŒ ์‚ฌ์šฉ๋œ ํŽ˜์ด์ง€ ์ œ๊ฑฐ
NUR์ตœ๊ทผ ์‚ฌ์šฉ๋˜์ง€ ์•Š์€ ํŽ˜์ด์ง€ ์šฐ์„  ์ œ๊ฑฐ (R/M ๋น„ํŠธ ์‚ฌ์šฉ)

โšก Thrashing (์Šค๋ ˆ์‹ฑ)

  • ๋„ˆ๋ฌด ๋งŽ์€ ํŽ˜์ด์ง€ ํดํŠธ์™€ ๊ต์ฒด ์ž‘์—…์ด ๋ฐ˜๋ณต๋˜๋ฉด CPU๋Š” ์ผ๋งŒ ํ•˜๊ณ  ์‹ค์ œ ์ผ์€ ๋ชป ํ•˜๊ฒŒ ๋ฉ๋‹ˆ๋‹ค.
  • ์‹œ์Šคํ…œ ์„ฑ๋Šฅ์ด ๊ธ‰๊ฒฉํžˆ ๋–จ์–ด์ง€๋Š” ํ˜„์ƒ์œผ๋กœ, ์Šค๋ ˆ์‹ฑ ๋ฐฉ์ง€๋ฅผ ์œ„ํ•ด ํŽ˜์ด์ง€ ์ˆ˜ ์กฐ์ ˆ์ด ํ•„์š”ํ•ด์š”.

๐Ÿ“š Segmentation (์„ธ๊ทธ๋ฉ˜ํ…Œ์ด์…˜)

  • ํŽ˜์ด์ง•๊ณผ ๋‹ฌ๋ฆฌ, ๋…ผ๋ฆฌ์ ์ธ ์˜๋ฏธ ๋‹จ์œ„๋กœ ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ๋‚˜๋ˆ„๋Š” ๊ธฐ๋ฒ•์ด์—์š”.
  • ์ฝ”๋“œ, ๋ฐ์ดํ„ฐ, ์Šคํƒ ๋“ฑ์œผ๋กœ ๋‚˜๋ˆ” (ํฌ๊ธฐ ๋ถˆ๊ท ํ˜• ํ—ˆ์šฉ)

๋ณดํ†ต ํŽ˜์ด์ง•๊ณผ ํ˜ผํ•ฉํ•ด์„œ ์‚ฌ์šฉ๋˜๊ธฐ๋„ ํ•ฉ๋‹ˆ๋‹ค.

๐Ÿงพ ๋งˆ๋ฌด๋ฆฌ ํ•œ ์ค„ ์š”์•ฝ

๊ฐ€์ƒ ๋ฉ”๋ชจ๋ฆฌ๋Š” ๋ฆฌ๋ˆ…์Šค ๋ฉ”๋ชจ๋ฆฌ ์‹œ์Šคํ…œ์˜ ๋งˆ๋ฒ• ๊ฐ™์€ ๊ธฐ๋Šฅ์ž…๋‹ˆ๋‹ค.
๊ฐ ํ”„๋กœ์„ธ์Šค๊ฐ€ ๋…๋ฆฝ๋œ ์„ธ๊ณ„์— ์‚ด๊ฒŒ ํ•˜์—ฌ, ์ถฉ๋Œ๊ณผ ์นจ๋ฒ”์„ ๋ง‰๊ณ  ํšจ์œจ์ ์œผ๋กœ ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•ด์ค˜์š”!

๐Ÿ”„ ๋ฆฌ๋ˆ…์Šค์—์„œ์˜ ๋ฉ”๋ชจ๋ฆฌ ์ ‘๊ทผ ํ๋ฆ„ ์š”์•ฝ

  1. CPU๋Š” TLB(Translation Lookaside Buffer)๋ฅผ ๋จผ์ € ํ™•์ธํ•ฉ๋‹ˆ๋‹ค.
    โ†’ TLB์— ๋งคํ•‘์ด ์žˆ์œผ๋ฉด ์ฆ‰์‹œ ๋ฌผ๋ฆฌ ์ฃผ์†Œ๋กœ ์ ‘๊ทผ ๊ฐ€๋Šฅ! โœ…

  2. TLB์— ์—†๋‹ค๋ฉด? โ†’ ํŽ˜์ด์ง€ ํ…Œ์ด๋ธ”์„ ์กฐํšŒํ•ฉ๋‹ˆ๋‹ค. ์ด๋•Œ CR3 ๋ ˆ์ง€์Šคํ„ฐ(x86์—์„œ๋Š” ํŽ˜์ด์ง€ ํ…Œ์ด๋ธ”์˜ ๋ฃจํŠธ ์ฃผ์†Œ๋ฅผ ๋‹ด๊ณ  ์žˆ์Œ)๋ฅผ ํ†ตํ•ด ์‹œ์ž‘ํ•ฉ๋‹ˆ๋‹ค.

  3. ํŽ˜์ด์ง€ ํ…Œ์ด๋ธ”์—์„œ ํ•ด๋‹น ์—”ํŠธ๋ฆฌ๋ฅผ ์ฐพ์Šต๋‹ˆ๋‹ค.
    โ†’ Valid bit(์œ ํšจ ์—ฌ๋ถ€)๋ฅผ ํ™•์ธํ•˜์—ฌ, ๋ฌผ๋ฆฌ ์ฃผ์†Œ๊ฐ€ ์œ ํšจํ•œ์ง€ ํŒ๋‹จํ•ฉ๋‹ˆ๋‹ค.

  4. ๋งŒ์•ฝ ํ•ด๋‹น ๊ฐ€์ƒ ์ฃผ์†Œ์— ์œ ํšจํ•œ ๋ฌผ๋ฆฌ ์ฃผ์†Œ๊ฐ€ ์—†๋‹ค๋ฉด?
    โ†’ ํŽ˜์ด์ง€ ํดํŠธ ์˜ˆ์™ธ(Page Fault Exception)๊ฐ€ ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค. ๐Ÿšจ

  5. ์ปค๋„์˜ ํŽ˜์ด์ง€ ํดํŠธ ํ•ธ๋“ค๋Ÿฌ๊ฐ€ ๋™์ž‘ํ•˜์—ฌ ๋””์Šคํฌ(์Šค์™‘ or ํŒŒ์ผ)์—์„œ ๋ฐ์ดํ„ฐ๋ฅผ ๋ฌผ๋ฆฌ ๋ฉ”๋ชจ๋ฆฌ์— ๋กœ๋“œํ•˜๊ณ , ํŽ˜์ด์ง€ ํ…Œ์ด๋ธ”์„ ์—…๋ฐ์ดํŠธํ•ฉ๋‹ˆ๋‹ค.

๐Ÿ›  5์žฅ: ๋ฉ”๋ชจ๋ฆฌ ํ• ๋‹น์˜ ๋†€๋ผ์šด ๋ฐฉ๋ฒ•, mmap๊ณผ Demand Paging

๐Ÿ“š ์ด์•ผ๊ธฐ๋กœ ํ’€์–ด๋ณด๋Š” ๋ฉ”๋ชจ๋ฆฌ ํ• ๋‹น

์šฐ๋ฆฌ๊ฐ€ ํ”ํžˆ ์ƒ๊ฐํ•˜๋Š” ๋ฉ”๋ชจ๋ฆฌ ํ• ๋‹น ๋ฐฉ์‹์€ ์ด๋ž˜์š”:

  1. ํ”„๋กœ๊ทธ๋žจ์ด โ€œXX ๋ฐ”์ดํŠธ ์ฃผ์„ธ์š”!โ€๋ผ๊ณ  ์š”์ฒญ
  2. ์ปค๋„์ด ์‹ค์ œ ๋ฌผ๋ฆฌ ๋ฉ”๋ชจ๋ฆฌ์—์„œ ๊ทธ๋งŒํผ์„ ๊บผ๋‚ด์„œ ์คŒ
  3. ํ™•๋ณดํ•œ ๋ฉ”๋ชจ๋ฆฌ ์˜์—ญ์„ ํ”„๋กœ์„ธ์Šค์˜ ๊ฐ€์ƒ ์ฃผ์†Œ ๊ณต๊ฐ„์— ๋งคํ•‘
  4. ๊ฐ€์ƒ ์ฃผ์†Œ ๊ณต๊ฐ„์˜ ์‹œ์ž‘ ์œ„์น˜ ์ฃผ์†Œ๋ฅผ ํ”„๋กœ์„ธ์Šค์— ๋Œ๋ ค์คŒ

ํ•˜์ง€๋งŒ ๋ฆฌ๋ˆ…์Šค๋Š” ์ด๋ ‡๊ฒŒ ๋‹จ์ˆœํ•˜๊ฒŒ ๋™์ž‘ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

๋ฉ”๋ชจ๋ฆฌ๋Š” ํ™•๋ณดํ•œ ์ˆœ๊ฐ„ ๋‹น์žฅ ์‚ฌ์šฉํ•˜๊ธฐ๋ณด๋‹ค๋Š” ์กฐ๊ธˆ ์‹œ๊ฐ„์ด ์ง€๋‚œ ํ›„์— ์‚ฌ์šฉํ•˜๋Š” ์ผ์ด ๋งŽ์•„์„œ ๋ฆฌ๋ˆ…์Šค๋Š” ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ํ™•๋ณดํ•˜๋Š” ์ ˆ์ฐจ๋ฅผ ๋‘ ๋‹จ๊ณ„๋กœ ๋‚˜๋ˆ•๋‹ˆ๋‹ค.

1. ๋ฉ”๋ชจ๋ฆฌ ์˜์—ญ ํ• ๋‹น: ๊ฐ€์ƒ ์ฃผ์†Œ ๊ณต๊ฐ„์— ์ƒˆ๋กญ๊ฒŒ ์ ‘๊ทผ ๊ฐ€๋Šฅํ•œ ๋ฉ”๋ชจ๋ฆฌ ์˜์—ญ์„ ๋งคํ•‘ํ•ฉ๋‹ˆ๋‹ค.
2. ๋ฉ”๋ชจ๋ฆฌ ํ• ๋‹น: ํ™•๋ณดํ•œ ๋ฉ”๋ชจ๋ฆฌ ์˜์—ญ์— ๋ฌผ๋ฆฌ ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ํ• ๋‹นํ•ฉ๋‹ˆ๋‹ค.

๋ฆฌ๋ˆ…์Šค๋Š” ๋Œ€์‹ , โ€œ์ผ๋‹จ ์ฑ…์žฅ์€ ๋งŒ๋“ค์–ด ์ค„๊ฒŒ. ์ง„์งœ ์ฑ…์€ ๋‚˜์ค‘์— ๋„ฃ์ž!โ€๋ผ๋Š” ์ฒ ํ•™์„ ๊ฐ€์ง‘๋‹ˆ๋‹ค.
์ด๊ฑธ ๊ฐ€๋Šฅํ•˜๊ฒŒ ํ•ด์ฃผ๋Š” ๊ฒƒ์ด ๋ฐ”๋กœโ€ฆ

๐Ÿ’พ mmap(): ์ฑ…์žฅ์„ ๋งŒ๋“œ๋Š” ์‹œ์Šคํ…œ ์ฝœ(ํŒŒ์ผ์ฒ˜๋ฆฌ ์„ฑ๋Šฅ ๊ฐœ์„  ๊ธฐ๋ฒ•์ด๊ธฐ๋„ ํ•œ)

์ถœ์ฒ˜ : https://bannavi.tistory.com/80

mmap()์€ ํ”„๋กœ์„ธ์Šค๊ฐ€ ์ƒˆ๋กœ์šด ๋ฉ”๋ชจ๋ฆฌ ๊ณต๊ฐ„์ด ํ•„์š”ํ•  ๋•Œ ์‚ฌ์šฉํ•˜๋Š” ์‹œ์Šคํ…œ ์ฝœ์ž…๋‹ˆ๋‹ค.

์ถ”๊ฐ€๋กœ ์„ค๋ช…ํ•˜์ž๋ฉด mmap() ์‹œ์Šคํ…œ ์ฝœ๊ณผ Go ์–ธ์–ด์˜ map() ํ•จ์ˆ˜ ์ธ์ˆ˜๋Š” ์กฐ๊ธˆ ๋‹ค๋ฆ…๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด ์‹œ์Šคํ…œ ์ฝœ์€ ์š”์ฒญํ•˜๋Š” ๋ฉ”๋ชจ๋ฆฌ ํฌ๊ธฐ๋ฅผ ๋‘ ๋ฒˆ์งธ ์ธ์ˆ˜๋กœ ์ง€์ •ํ•˜์ง€๋งŒ, Go ์–ธ์–ด ํ•จ์ˆ˜๋Š” ์„ธ๋ฒˆ์งธ ์ธ์ˆ˜๋กœ ์ง€์ •ํ•ฉ๋‹ˆ๋‹ค.

์ด ํ•จ์ˆ˜๋Š” ์‹ค์ œ ๋ฌผ๋ฆฌ ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ๋ฐ”๋กœ ํ• ๋‹นํ•ด์ฃผ์ง€ ์•Š๊ณ , ๊ฐ€์ƒ ์ฃผ์†Œ ๊ณต๊ฐ„์— โ€œ๋น„์–ด ์žˆ๋Š” ์˜์—ญโ€์„ ๋งคํ•‘ํ•ด์ฃผ๋Š” ์—ญํ• ์„ ํ•ด์š”.

๐Ÿ“Œ ์ฆ‰, ๋ฌผ๋ฆฌ ๋ฉ”๋ชจ๋ฆฌ๋Š” ์•„์ง ์—†์ง€๋งŒ, โ€œ์—ฌ๊ธฐ๋ถ€ํ„ฐ ์—ฌ๊ธฐ๊นŒ์ง€๋Š” ๋„ค ๊ฑฐ์•ผ!โ€ ํ•˜๊ณ  ํ‘œ์‹๋งŒ ํ•ด๋‘๋Š” ๊ฒ๋‹ˆ๋‹ค.

์ด๋ ‡๊ฒŒ ํ™•๋ณด๋œ ๊ฐ€์ƒ ๋ฉ”๋ชจ๋ฆฌ ๊ณต๊ฐ„์€ /proc/<pid>/maps ํŒŒ์ผ์„ ํ†ตํ•ด ํ™•์ธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
์•„์ง ๋ฌผ๋ฆฌ ๋ฉ”๋ชจ๋ฆฌ๋Š” 0๋ฐ”์ดํŠธ๋„ ํ• ๋‹น๋˜์ง€ ์•Š์•˜์ง€๋งŒ, mmap() ํ˜ธ์ถœ ์ดํ›„ ๊ฐ€์ƒ ๋ฉ”๋ชจ๋ฆฌ ๊ณต๊ฐ„์€ ์ฆ๊ฐ€ํ•œ ๊ฒƒ์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ์–ด์š”.

์–‘์ชฝ ๋ชจ๋‘ ์ˆ˜๋งŽ์€ ์ธ์ˆ˜๊ฐ€ ์žˆ์ง€๋งŒ ์—ฌ๊ธฐ์„œ๋Š” ๋ฉ”๋ชจ๋ฆฌ ์˜์—ญ ํฌ๊ธฐ๋ฅผ ์ง€์ •ํ•˜๋Š” ์ธ์ˆ˜์—๋งŒ ์ฃผ์˜ํ•˜๋ฉด ๋ฉ๋‹ˆ๋‹ค.

mmap์˜ 3๊ฐ€์ง€ ํ•ต์‹ฌ ์†์„ฑ ์ •๋ฆฌ

์ถœ์ฒ˜ : https://keepat-it.tistory.com/39

1๏ธโƒฃ ๊ถŒํ•œ: "์ฝ๊ธฐ/์“ฐ๊ธฐ/์‹คํ–‰"์€ protection์œผ๋กœ ์„ค์ •ํ•œ๋‹ค!

mmap()์€ ๋ฉ”๋ชจ๋ฆฌ์™€ ํŒŒ์ผ์„ ๋งตํ•‘ํ•˜๋Š” ํ•จ์ˆ˜์ž…๋‹ˆ๋‹ค.
ํ•˜์ง€๋งŒ ๋‹จ์ˆœํ•œ ํŒŒ์ผ ์ž…์ถœ๋ ฅ์ด ์•„๋‹ˆ๋ผ ๋ฉ”๋ชจ๋ฆฌ ํŽ˜์ด์ง€ ๋‹จ์œ„๋กœ ์ž‘๋™ํ•˜๋ฏ€๋กœ, "์ ‘๊ทผ ๊ถŒํ•œ"๋„ ๋ฉ”๋ชจ๋ฆฌ ๋ฐฉ์‹์œผ๋กœ ์„ค์ •ํ•ฉ๋‹ˆ๋‹ค.

๐Ÿงท mmap์˜ ์ ‘๊ทผ ๊ถŒํ•œ = Protection

๊ถŒํ•œ ์•ฝ์–ด์˜๋ฏธ์„ค๋ช…
PROT_READ์ฝ๊ธฐํ•ด๋‹น ๋ฉ”๋ชจ๋ฆฌ ์˜์—ญ์„ ์ฝ์„ ์ˆ˜ ์žˆ์Œ
PROT_WRITE์“ฐ๊ธฐํ•ด๋‹น ๋ฉ”๋ชจ๋ฆฌ ์˜์—ญ์— ์“ธ ์ˆ˜ ์žˆ์Œ
PROT_EXEC์‹คํ–‰์ฝ”๋“œ์ฒ˜๋Ÿผ ์‹คํ–‰ ๊ฐ€๋Šฅ (์ฝ”๋“œ ์˜์—ญ ๋งคํ•‘์— ์‚ฌ์šฉ)
PROT_NONE์ ‘๊ทผ ๊ธˆ์ง€๋ณดํ˜ธ ๋ชฉ์ , ์•„๋ฌด ์ž‘์—…๋„ ๋ชปํ•จ

ํŒŒ์ผ์˜ rwx์ฒ˜๋Ÿผ ๋ณด์ด์ง€๋งŒ, mmap์—์„œ๋Š” PROT_*์œผ๋กœ ์„ค์ •ํ•œ๋‹ค๋Š” ์ ์ด ๋‹ค๋ฆ…๋‹ˆ๋‹ค!

2๏ธโƒฃ ๊ฐ€์ƒ ๋ฉ”๋ชจ๋ฆฌ: "์Šค์™‘๊ณผ ํŽ˜์ด์ง€ ์ธ/์•„์›ƒ์˜ ๊ด€๊ณ„"

๋ฆฌ๋ˆ…์Šค๋Š” ๊ฐ€์ƒ ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ ์ž‘๋™ํ•˜๊ธฐ ๋•Œ๋ฌธ์—, mmap์œผ๋กœ ํ™•๋ณด๋œ ๋ฉ”๋ชจ๋ฆฌ๋„ ๋ฌผ๋ฆฌ ๋ฉ”๋ชจ๋ฆฌ๊ฐ€ ์•„๋‹Œ ๋””์Šคํฌ(์Šค์™‘ ๊ณต๊ฐ„)์œผ๋กœ ์ด๋™๋  ์ˆ˜ ์žˆ์–ด์š”.

๐ŸŒ€ ์Šค์™‘ ๋™์ž‘ ์š”์•ฝ

์šฉ์–ด์„ค๋ช…
Page Out / Swap Out๋ฉ”๋ชจ๋ฆฌ ๋ถ€์กฑ ์‹œ, ์‚ฌ์šฉ ์ค‘์ธ ํŽ˜์ด์ง€๋ฅผ ๋””์Šคํฌ๋กœ ๋‚ด๋ณด๋‚ด๊ธฐ
Page In / Swap In๋‹ค์‹œ ํ•„์š”ํ•ด์ง„ ํŽ˜์ด์ง€๋ฅผ ๋””์Šคํฌ์—์„œ ๋ฉ”๋ชจ๋ฆฌ๋กœ ๋ถˆ๋Ÿฌ์˜ค๊ธฐ

์ด๊ฒŒ ์ค‘์š”ํ•œ ์ด์œ ๋Š”:

  • mmap๋œ ๋ฉ”๋ชจ๋ฆฌ๊ฐ€ ์‹ค์ œ๋กœ ๋ฌผ๋ฆฌ ๋ฉ”๋ชจ๋ฆฌ์—์„œ ์‚ฌ๋ผ์งˆ ์ˆ˜๋„ ์žˆ๋‹ค
  • ๋‹ค์‹œ ์ ‘๊ทผ ์‹œ ํŽ˜์ด์ง€ ํดํŠธ ๋ฐœ์ƒ โ†’ ํŽ˜์ด์ง€ ์ธ ํ•„์š”

์ฆ‰, mmap๋„ ์Šค์™‘์˜ ๋Œ€์ƒ์ด ๋  ์ˆ˜ ์žˆ๋‹ค๋Š” ๊ฒƒ, ๋‹จ, ๊ณต์œ  mmap์€ ์˜ˆ์™ธ์ผ ์ˆ˜ ์žˆ์Œ!

3๏ธโƒฃ ๊ณต์œ  ๋ฐฉ์‹: Shared vs Private

mmap()์€ ๋ฉ”๋ชจ๋ฆฌ ๋งคํ•‘ ๋ฐฉ์‹์„ ๊ณต์œ (shared) ๋˜๋Š” ์‚ฌ์„ค(private) ์ค‘์—์„œ ์„ ํƒํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๐Ÿ“ค Shared (๊ณต์œ ) mmap

  • MAP_SHARED ์˜ต์…˜
  • mmap๊ณผ ์›๋ณธ ํŒŒ์ผ์ด ์–‘๋ฐฉํ–ฅ ๋™๊ธฐํ™”๋จ
  • ์—ฌ๋Ÿฌ ํ”„๋กœ์„ธ์Šค๊ฐ€ ๋™์ผํ•œ mmap ์˜์—ญ์„ ๊ณต์œ  ๊ฐ€๋Šฅ
  • ์Šค์™‘ ์•„์›ƒ ๋Œ€์ƒ์ด ์•„๋‹˜ (์›๋ณธ ํŒŒ์ผ์ด ํ•ญ์ƒ ๋””์Šคํฌ์— ์กด์žฌํ•˜๋ฏ€๋กœ)

์˜ˆ์‹œ:

mmap(..., MAP_SHARED)

ํ”„๋กœ์„ธ์Šค A์—์„œ ์ˆ˜์ •ํ•œ ๋‚ด์šฉ์ด ํ”„๋กœ์„ธ์Šค B์—๋„ ๊ทธ๋Œ€๋กœ ๋ฐ˜์˜๋จ
(๋‹จ, ํŒŒ์ผ๊ณผ์˜ ์‹ฑํฌ์—๋Š” ์•ฝ๊ฐ„์˜ ์‹œ๊ฐ„์ฐจ๊ฐ€ ์žˆ์„ ์ˆ˜ ์žˆ์Œ)

๐Ÿง Private (์‚ฌ์„ค) mmap

  • MAP_PRIVATE ์˜ต์…˜
  • ์ฒ˜์Œ์—๋Š” ์›๋ณธ ํŒŒ์ผ ๋‚ด์šฉ ๋ณต์‚ฌ, ์ดํ›„๋Š” ๋…์ž์  ๋ฉ”๋ชจ๋ฆฌ ์‚ฌ์šฉ
  • ํŒŒ์ผ๊ณผ ๋™๊ธฐํ™” โŒ โ†’ ์ˆ˜์ •ํ•ด๋„ ํŒŒ์ผ์— ๋ฐ˜์˜๋˜์ง€ ์•Š์Œ
  • ๋ณ€๊ฒฝ๋œ ํŽ˜์ด์ง€๋Š” ํ”„๋กœ์„ธ์Šค ๊ณ ์œ  ๋ฉ”๋ชจ๋ฆฌ๋กœ ์ „ํ™˜๋˜๋ฉฐ, ์Šค์™‘ ์•„์›ƒ ๋Œ€์ƒ์ด ๋จ

์˜ˆ์‹œ:

mmap(..., MAP_PRIVATE)

์ฝ๊ธฐ ์ „์šฉ ์ฐธ๊ณ ์šฉ์œผ๋กœ๋Š” ์ข‹์ง€๋งŒ, ์“ฐ๊ธฐ ์„ฑ๋Šฅ์ด๋‚˜ ์Šค์™‘ ๊ด€๋ฆฌ์—๋Š” ์ฃผ์˜ ํ•„์š”

๐Ÿ’ก Tip: ์‚ฌ์„ค mmap์„ ์Šค์™‘์—์„œ ์ œ์™ธํ•˜๊ณ  ์‹ถ๋‹ค๋ฉด?

mlock(addr, length)

ํŠน์ • ๋ฉ”๋ชจ๋ฆฌ ์˜์—ญ์„ ๊ณ ์ •์‹œ์ผœ ํŽ˜์ด์ง• ์•„์›ƒ(์Šค์™‘ ์•„์›ƒ)์„ ๋ฐฉ์ง€ํ•  ์ˆ˜ ์žˆ์Œ

โœ… ์ •๋ฆฌ ํ‘œ

ํ•ญ๋ชฉShared mmapPrivate mmap
๋™๊ธฐํ™” ์—ฌ๋ถ€O (ํŒŒ์ผ๊ณผ ๊ณต์œ )X (ํ•œ ๋ฒˆ๋งŒ ๋ณต์‚ฌ)
๋‹ค๋ฅธ ํ”„๋กœ์„ธ์Šค์™€ ๊ณต์œ OX
ํŒŒ์ผ ์ˆ˜์ • ๋ฐ˜์˜OX
์Šค์™‘ ์•„์›ƒ ๋Œ€์ƒโŒ (๋””์Šคํฌ์— ์žˆ์Œ)โœ… (RAM์— ์žˆ์–ด์•ผ ํ•จ)
์“ฐ๊ธฐ ์‹œ ๋™์ž‘๋ฐ”๋กœ ๋ฐ˜์˜COW (๋ณต์‚ฌ ํ›„ ์ˆ˜์ •)

๐Ÿ“Œ ์š”์•ฝ ์ •๋ฆฌ

๊ตฌ๋ถ„์„ค๋ช…
ProtectionPROT_READ, PROT_WRITE, PROT_EXEC ๋“ฑ์œผ๋กœ ์ ‘๊ทผ ๊ถŒํ•œ ์„ค์ •
๊ฐ€์ƒ ๋ฉ”๋ชจ๋ฆฌ ๊ด€๊ณ„ํ•„์š” ์‹œ ์Šค์™‘ ์•„์›ƒ/์ธ ๋ฐœ์ƒ, ํŠนํžˆ Private mmap์€ ์Šค์™‘ ๋Œ€์ƒ์ด ๋จ
๊ณต์œ  ๋ฐฉ์‹MAP_SHARED๋Š” ํŒŒ์ผ๊ณผ ๊ณต์œ , MAP_PRIVATE๋Š” ๋ณต์‚ฌ ํ›„ ๋…๋ฆฝ ์‚ฌ์šฉ

๐Ÿ’ค Demand Paging: ์‹ค์ œ๋กœ ์ ‘๊ทผํ•ด์•ผ๋งŒ ์ฃผ๋Š” ๋ฉ”๋ชจ๋ฆฌ

mmap() ์‹œ์Šคํ…œ ์ฝœ์„ ํ˜ธ์ถœํ•œ ์งํ›„๋ผ๋ฉด ์ƒˆ๋กœ์šด ๋ฉ”๋ชจ๋ฆฌ ์˜์—ญ์— ๋Œ€์‘ํ•˜๋Š” ๋ฌผ๋ฆฌ ๋ฉ”๋ชจ๋ฆฌ๋Š” ์•„์ง ์กด์žฌํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

๋ฆฌ๋ˆ…์Šค๋Š” ๋ฉ”๋ชจ๋ฆฌ ๋‚ญ๋น„๋ฅผ ๋ง‰๊ธฐ ์œ„ํ•ด ์ง„์งœ ๋ฉ”๋ชจ๋ฆฌ ํ• ๋‹น์„ โ€œํ•„์š”ํ•  ๋•Œ๋งŒโ€ ํ•ฉ๋‹ˆ๋‹ค.
์ด๋Ÿฐ ๋ฐฉ์‹์ด ๋ฐ”๋กœ Demand Paging์ž…๋‹ˆ๋‹ค.

๐ŸŽฏ Demand Paging์ด๋ž€?

ํŽ˜์ด์ง€ ์ ‘๊ทผ ํ›„ ๋ฉ”๋ชจ๋ฆฌ ํ™•๋ณด ์ ˆ์ฐจ

  1. ํ”„๋กœ์„ธ์Šค๊ฐ€ mmap()์œผ๋กœ ๋ฉ”๋ชจ๋ฆฌ ๊ณต๊ฐ„์„ ์š”์ฒญํ•˜๋ฉด
    โ†’ ๊ฐ€์ƒ ์ฃผ์†Œ๋งŒ ํ™•๋ณด๋จ (๋ฌผ๋ฆฌ ๋ฉ”๋ชจ๋ฆฌ๋Š” ์—†์Œ)

  2. ์ด ์ฃผ์†Œ์— ์‹ค์ œ๋กœ ์ ‘๊ทผํ•˜๋ ค๊ณ  ํ•˜๋ฉด
    โ†’ ํŽ˜์ด์ง€ ํดํŠธ ์˜ˆ์™ธ(Page Fault Exception) ๋ฐœ์ƒ

  3. ์ปค๋„์ด ๋ฌผ๋ฆฌ ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ํ• ๋‹นํ•˜๊ณ 
    โ†’ ํŽ˜์ด์ง€ ํ…Œ์ด๋ธ”์„ ๊ฐฑ์‹ 

  • ์ดํ›„ ๋ฉ”๋ชจ๋ฆฌ ์ ‘๊ทผ ์ •์ƒ ์ฒ˜๋ฆฌ!

๐Ÿ“– ๋น„์œ ํ•˜์ž๋ฉด?
โ€œ๋นˆ ์ฑ…์žฅ์„ ๋งŒ๋“ค์–ด๋‘๊ณ , ๋…์ž๊ฐ€ ์‹ค์ œ๋กœ ์ฑ…์„ ๊บผ๋‚ด๋ ค ํ•  ๋•Œ ๊ทธ ์ฑ…์„ ๊ฝ‚๋Š” ๊ฒƒโ€

Demand Paging ์ข€ ๋” ์ž์„ธํžˆ ์•Œ์•„๋ณด๊ธฐ

ํŽ˜์ด์ง€ ํดํŠธ ํ•ธ๋“ค๋Ÿฌ๋Š” ํŽ˜์ด์ง€ ํ…Œ์ด๋ธ” ์—”ํŠธ๋ฆฌ๊ฐ€ ์กด์žฌํ•˜์ง€ ์•Š์„ ์‹œ, ํ”„๋กœ์„ธ์Šค์— SIGSEGV ์‹œ๊ทธ๋„์„ ๋ณด๋‚ด์ง€๋งŒ, ํŽ˜์ด์ง€ ํ…Œ์ด๋ธ” ์—”ํŠธ๋ฆฌ๋Š” ์กด์žฌํ•˜๋˜ ๋ฌผ๋ฆฌ ๋ฉ”๋ชจ๋ฆฌ๊ฐ€ ํ• ๋‹น๋˜์ง€ ์•Š์€ ๊ฒฝ์šฐ์—๋Š” ์ƒˆ๋กœ์šด ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ํ• ๋‹นํ•˜๋Š” ์ฒ˜๋ฆฌ๋กœ ๋ถ„๊ธฐํ•ฉ๋‹ˆ๋‹ค.

๋ฆฌ๋ˆ…์Šค์—์„œ ํŽ˜์ด์ง€ ํดํŠธ๊ฐ€ ๋ฐœ์ƒํ–ˆ์„ ๋•Œ, ์ปค๋„์˜ ํŽ˜์ด์ง€ ํดํŠธ ํ•ธ๋“ค๋Ÿฌ(page_fault_handler)๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์€ ๋ถ„๊ธฐ ์ฒ˜๋ฆฌ๋ฅผ ํ•ฉ๋‹ˆ๋‹ค:

1) ํŽ˜์ด์ง€ ํ…Œ์ด๋ธ”์— ์—”ํŠธ๋ฆฌ๊ฐ€ ์—†์œผ๋ฉด?

  • ์ด ๊ฐ€์ƒ ์ฃผ์†Œ๊ฐ€ ์ •์ƒ์ ์ธ ์ฃผ์†Œ ๋ฒ”์œ„๊ฐ€ ์•„๋‹ˆ๊ฑฐ๋‚˜,
    ํ•ด๋‹น ์ฃผ์†Œ์— ๋Œ€ํ•ด ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ํ• ๋‹นํ•  ์ด์œ ๊ฐ€ ์—†๋‹ค๋ฉด
    ๐Ÿ‘‰ ์šด์˜์ฒด์ œ๋Š” SIGSEGV (Segmentation Fault) ์‹œ๊ทธ๋„์„ ํ•ด๋‹น ํ”„๋กœ์„ธ์Šค์— ๋ณด๋ƒ…๋‹ˆ๋‹ค.
  • ์ด๋Š” ํ”„๋กœ๊ทธ๋žจ์ด ํ—ˆ์šฉ๋˜์ง€ ์•Š์€ ์ฃผ์†Œ๋ฅผ ์ ‘๊ทผํ•œ ๊ฒƒ์ด๋ฏ€๋กœ,
    ๋Œ€๋ถ€๋ถ„์˜ ๊ฒฝ์šฐ ํ”„๋กœ๊ทธ๋žจ์€ ๊ฐ•์ œ ์ข…๋ฃŒ๋ฉ๋‹ˆ๋‹ค.

์˜ˆ: nil ํฌ์ธํ„ฐ ์—ญ์ฐธ์กฐ, ํ•ด์ œ๋œ ๋ฉ”๋ชจ๋ฆฌ ์ ‘๊ทผ, ์Šคํƒ/ํž™ ์˜์—ญ์„ ๋„˜์€ ์ ‘๊ทผ ๋“ฑ

2) ํŽ˜์ด์ง€ ํ…Œ์ด๋ธ” ์—”ํŠธ๋ฆฌ๋Š” ์žˆ์œผ๋‚˜, ๋ฌผ๋ฆฌ ๋ฉ”๋ชจ๋ฆฌ๊ฐ€ ํ• ๋‹น๋˜์ง€ ์•Š์€ ๊ฒฝ์šฐ?

  • ์ด๋Š” mmap() ๋“ฑ์œผ๋กœ ๊ฐ€์ƒ ๋ฉ”๋ชจ๋ฆฌ ๊ณต๊ฐ„์„ ํ™•๋ณดํ•ด๋‘์—ˆ์ง€๋งŒ, ์•„์ง ์‹ค์ œ ๋ฉ”๋ชจ๋ฆฌ์— ๋Œ€์‘๋œ ํŽ˜์ด์ง€๊ฐ€ ์—†๋Š” ์ƒํƒœ์ž…๋‹ˆ๋‹ค.
  • ์ด ๊ฒฝ์šฐ ์ปค๋„์€ โ€œ์•„, ์ ‘๊ทผํ–ˆ์œผ๋‹ˆ ์ด์ œ ๋ฌผ๋ฆฌ ๋ฉ”๋ชจ๋ฆฌ ํ• ๋‹นํ•ด์ค˜์•ผ๊ฒ ๋‹ค!โ€ ํ•˜๊ณ 
    ๐Ÿ‘‰ Demand Paging ์ฒ˜๋ฆฌ๋ฅผ ํ•ฉ๋‹ˆ๋‹ค.
  • ๋ฌผ๋ฆฌ ๋ฉ”๋ชจ๋ฆฌ์—์„œ ํŽ˜์ด์ง€๋ฅผ ํ• ๋‹นํ•˜๊ณ , ํ•ด๋‹น ๊ฐ€์ƒ ์ฃผ์†Œ์™€ ์—ฐ๊ฒฐํ•ด์ฃผ๋Š” ํŽ˜์ด์ง€ ํ…Œ์ด๋ธ”์„ ์—…๋ฐ์ดํŠธํ•ฉ๋‹ˆ๋‹ค.
  • ์ดํ›„, ์ธํ„ฐ๋ŸฝํŠธ๊ฐ€ ๋ฐœ์ƒํ–ˆ๋˜ ๋ช…๋ น์–ด๋ฅผ ๋‹ค์‹œ ์‹คํ–‰์‹œํ‚ต๋‹ˆ๋‹ค.

โœ… ์ด๊ฑด ์˜ค๋ฅ˜๊ฐ€ ์•„๋‹ˆ๋ผ ์ •์ƒ์ ์ธ ๋ฉ”๋ชจ๋ฆฌ ์š”์ฒญ ํ๋ฆ„์˜ ์ผ๋ถ€์ž…๋‹ˆ๋‹ค!

โœ… ์š”์•ฝ ์ •๋ฆฌ

์ƒํ™ฉ์ฒ˜๋ฆฌ ๋ฐฉ์‹๊ฒฐ๊ณผ
ํŽ˜์ด์ง€ ํ…Œ์ด๋ธ” ์—”ํŠธ๋ฆฌ ์—†์ŒSIGSEGV ์‹œ๊ทธ๋„ ์ „์†กํ”„๋กœ์„ธ์Šค ๊ฐ•์ œ ์ข…๋ฃŒ
ํŽ˜์ด์ง€ ํ…Œ์ด๋ธ”์€ ์žˆ์ง€๋งŒ ๋ฌผ๋ฆฌ ๋ฉ”๋ชจ๋ฆฌ ์—†์ŒDemand Paging ์ˆ˜ํ–‰๋ฌผ๋ฆฌ ๋ฉ”๋ชจ๋ฆฌ ํ• ๋‹น ํ›„ ์žฌ์‹คํ–‰

๐Ÿ“Œ ๊ด€๋ จ ํ‚ค์›Œ๋“œ ์ •๋ฆฌ

์šฉ์–ด์„ค๋ช…
SIGSEGV์ž˜๋ชป๋œ ๋ฉ”๋ชจ๋ฆฌ ์ ‘๊ทผ ์‹œ ์šด์˜์ฒด์ œ๊ฐ€ ํ”„๋กœ์„ธ์Šค์— ๋ณด๋‚ด๋Š” ์‹œ๊ทธ๋„
Demand Paging๋ฉ”๋ชจ๋ฆฌ ์ ‘๊ทผ ์‹œ์ ์— ์‹ค์ œ ๋ฌผ๋ฆฌ ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ๋™์ ์œผ๋กœ ํ• ๋‹นํ•˜๋Š” ๊ธฐ๋ฒ•
ํŽ˜์ด์ง€ ํ…Œ์ด๋ธ”๊ฐ€์ƒ ์ฃผ์†Œ์™€ ๋ฌผ๋ฆฌ ์ฃผ์†Œ์˜ ๋งคํ•‘ ์ •๋ณด๋ฅผ ๋‹ด๋Š” ๊ตฌ์กฐ
ํŽ˜์ด์ง€ ํดํŠธ ํ•ธ๋“ค๋ŸฌํŽ˜์ด์ง€ ํดํŠธ๊ฐ€ ๋ฐœ์ƒํ–ˆ์„ ๋•Œ ์ปค๋„์—์„œ ์‹คํ–‰๋˜๋Š” ์ฒ˜๋ฆฌ ๋ฃจํ‹ด
  • "์ ‘๊ทผ ์‹œ โ†’ TLB ๋ฏธ์Šค โ†’ ํŽ˜์ด์ง€ ํ…Œ์ด๋ธ” ์ฒดํฌ โ†’ ์กด์žฌ ์—ฌ๋ถ€ ํŒ๋‹จ โ†’ Demand Paging or SIGSEGV"

๐Ÿงช ์‹คํ—˜์œผ๋กœ ๋ณด๋Š” mmap๊ณผ Demand Paging

โœ”๏ธ Go๋กœ ๋ณด๋Š” ์˜ˆ์‹œ (mmap.go)


์ฝ”๋“œ ํ”„๋กœ์„ธ์Šค
1. ํ”„๋กœ์„ธ์Šค์˜ ๋ฉ”๋ชจ๋ฆฌ ๋งคํ•‘ ์ •๋ณด(/proc/<pid>/maps ์ถœ๋ ฅ)๋ฅผ ํ‘œ์‹œํ•ฉ๋‹ˆ๋‹ค.
2. mmap() ์‹œ์Šคํ…œ ์ฝœ๋กœ 1GiB ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ์š”์ฒญํ•ฉ๋‹ˆ๋‹ค.
3. ๋‹ค์‹œ ๋ฉ”๋ชจ๋ฆฌ ๋งคํ•‘ ์ •๋ณด๋ฅผ ํ‘œ์‹œํ•ฉ๋‹ˆ๋‹ค.

๊ฒฐ๊ณผ
1. mmap() ํ˜ธ์ถœ โ†’ 0x7fd00aa94000 - 0x7fcfcaa94000 = 1GiB ๋ฉ”๋ชจ๋ฆฌ ๊ณต๊ฐ„ ํ™•๋ณด
2. /proc/<pid>/maps๋กœ ํ™•์ธํ•˜๋ฉด, ๊ฐ€์ƒ ๋ฉ”๋ชจ๋ฆฌ ๊ณต๊ฐ„์€ ๋Š˜์—ˆ์ง€๋งŒ
๋ฌผ๋ฆฌ ๋ฉ”๋ชจ๋ฆฌ๋Š” ์•„์ง ํ• ๋‹น๋˜์ง€ ์•Š์Œ!

์ฃผ์†Œ๋ฅผ ๋บ€ ๊ฐ’์ด 1GiB๋ผ๋Š” ์ ์ด ์ค‘์š”ํ•ฉ๋‹ˆ๋‹ค.

โœ”๏ธ Python์œผ๋กœ ๋ณด๋Š” ์˜ˆ์‹œ (demand-paging.py)

  1. mmap()์œผ๋กœ 100MiB ํ™•๋ณด
  2. ํ•œ ํŽ˜์ด์ง€์”ฉ ๋ฉ”๋ชจ๋ฆฌ์— ์ ‘๊ทผ โ†’ ํŽ˜์ด์ง€ ํดํŠธ ๋ฐœ์ƒ
  3. ๊ทธ๋•Œ๋งˆ๋‹ค ๋ฌผ๋ฆฌ ๋ฉ”๋ชจ๋ฆฌ ํ•˜๋‚˜์”ฉ ํ• ๋‹น
  4. ps, sar -r, sar -B ๋“ฑ์œผ๋กœ
    ๋ฉ”๋ชจ๋ฆฌ ์‚ฌ์šฉ๋Ÿ‰, ํŽ˜์ด์ง€ ํดํŠธ ํšŸ์ˆ˜ ํ™•์ธ ๊ฐ€๋Šฅ!

๐Ÿ“Š ์‹คํ—˜ ๊ฒฐ๊ณผ ํ•œ๋ˆˆ์— ๋ณด๊ธฐ

์‹œ์ ๊ฐ€์ƒ ๋ฉ”๋ชจ๋ฆฌ๋ฌผ๋ฆฌ ๋ฉ”๋ชจ๋ฆฌํŽ˜์ด์ง€ ํดํŠธ
mmap() ์งํ›„์ฆ๊ฐ€ํ•จ๊ทธ๋Œ€๋กœ์—†์Œ
๋ฉ”๋ชจ๋ฆฌ ์ ‘๊ทผ ์ค‘๊ทธ๋Œ€๋กœ์ ์  ์ฆ๊ฐ€์ดˆ๋‹น ์ˆ˜์ฒœ ํšŒ
์ ‘๊ทผ ์™„๋ฃŒ ํ›„๊ทธ๋Œ€๋กœ100MiB ์ฆ๊ฐ€๊ณ ์ •๋จ
ํ”„๋กœ์„ธ์Šค ์ข…๋ฃŒ์‚ฌ๋ผ์งํšŒ์ˆ˜๋จ0

โœ… ์ฆ‰, ์‹ค์ œ๋กœ ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ์‚ฌ์šฉํ•  ๋•Œ๋งŒ ํ• ๋‹น๋˜๊ณ ,
ํŽ˜์ด์ง€ ํดํŠธ๋ฅผ ํ†ตํ•ด ์ปค๋„์ด ์ฆ‰์„์—์„œ ์ฒ˜๋ฆฌํ•ด์ฃผ๋Š” ๋ฐฉ์‹์ž…๋‹ˆ๋‹ค.

๐Ÿ“ฆ ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์–ธ์–ด๋Š” ์–ด๋–ป๊ฒŒ ์‚ฌ์šฉํ• ๊นŒ?

ํŒŒ์ด์ฌ, Go, C ๊ฐ™์€ ์–ธ์–ด๋“ค๋„ ๋‚ด๋ถ€์ ์œผ๋กœ ๋น„์Šทํ•œ ์ „๋žต์„ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.

  • ๋งค๋ฒˆ mmap()์„ ํ˜ธ์ถœํ•˜์ง€ ์•Š๊ณ ,
  • ์ฒ˜์Œ ์‹คํ–‰ ์‹œ ํฐ ๋ฉ”๋ชจ๋ฆฌ ๊ณต๊ฐ„์„ ํ™•๋ณดํ•œ ๋’ค
  • ๊ทธ ๊ณต๊ฐ„์—์„œ ํ•„์š”ํ•œ ๋งŒํผ ์ž˜๋ผ ์”๋‹ˆ๋‹ค

๐Ÿ“Œ ์ด๊ฑด malloc(), new, ๋ฆฌ์ŠคํŠธ ์ƒ์„ฑ ๋“ฑ์—์„œ๋„ ํ™•์ธํ•  ์ˆ˜ ์žˆ์–ด์š”.

โœจ ์š”์•ฝ ์ •๋ฆฌ

๊ฐœ๋…์„ค๋ช…
mmap()๊ฐ€์ƒ ์ฃผ์†Œ ๊ณต๊ฐ„๋งŒ ํ™•๋ณดํ•˜๋Š” ์‹œ์Šคํ…œ ์ฝœ
Demand Paging๋ฉ”๋ชจ๋ฆฌ์— ์‹ค์ œ ์ ‘๊ทผํ•  ๋•Œ ๋ฌผ๋ฆฌ ๋ฉ”๋ชจ๋ฆฌ ํ• ๋‹น
ํŽ˜์ด์ง€ ํดํŠธ์ ‘๊ทผ ์‹œ ๋ฌผ๋ฆฌ ๋ฉ”๋ชจ๋ฆฌ๊ฐ€ ์—†์œผ๋ฉด ๋ฐœ์ƒํ•˜๋Š” ์˜ˆ์™ธ
๋ฌผ๋ฆฌ ๋ฉ”๋ชจ๋ฆฌ ํ• ๋‹น ์‹œ์ ํŽ˜์ด์ง€ ํดํŠธ ๋ฐœ์ƒ ํ›„
์ด์ ๋ฉ”๋ชจ๋ฆฌ ๋‚ญ๋น„ ๋ฐฉ์ง€, ์„ฑ๋Šฅ ์ตœ์ ํ™”

๐Ÿง  โ€œํŽ˜์ด์ง€ ํดํŠธ๊ฐ€ ์–ธ์ œ, ์–ด๋–ป๊ฒŒ ์ผ์–ด๋‚˜๋Š”์ง€ ์ง์ ‘ ํ™•์ธํ•ด๋ณด์ž!โ€

์šฐ๋ฆฌ๊ฐ€ ์ง€๊ธˆ ์•Œ์•„๋ณด๊ณ  ์‹ถ์€ ๊ฑด ํ•œ ๊ฐ€์ง€์˜ˆ์š”.

โ€œ๊ฐ€์ƒ ๋ฉ”๋ชจ๋ฆฌ๋Š” ์ฒ˜์Œ์— ๊ทธ๋ƒฅ ์ฃผ์†Œ๋งŒ ํ• ๋‹นํ•ด์ฃผ๊ณ , ์‹ค์ œ ๋ฌผ๋ฆฌ ๋ฉ”๋ชจ๋ฆฌ๋Š” ์–ธ์ œ ์ฃผ๋Š” ๊ฑธ๊นŒ?โ€

๋‹ต์€ ๋ฐ”๋กœ ์ ‘๊ทผํ•  ๋•Œ! ์ž…๋‹ˆ๋‹ค. ์ด๊ฑธ "Demand Paging"์ด๋ผ๊ณ  ํ•˜์ฃ .
์ด๋ฒˆ ์‹คํ—˜์€ ๋ฐ”๋กœ ๊ทธ Demand Paging์ด ์‹ค์ œ๋กœ ์–ด๋–ป๊ฒŒ ๋™์ž‘ํ•˜๋Š”์ง€๋ฅผ ๋ชธ์†Œ ํ™•์ธํ•˜๋Š” ์‹คํ—˜์ด์—์š”.

๐Ÿงช Step 1. ์ƒˆ๋กœ์šด ๋ฉ”๋ชจ๋ฆฌ ์˜์—ญ ํ™•๋ณด (ํ•˜์ง€๋งŒ ์•„์ง์€ ๋น„์–ด ์žˆ์Œ)

์‹คํ—˜์€ Python ์ฝ”๋“œ(demand-paging.py)๋กœ ์ง„ํ–‰๋ฉ๋‹ˆ๋‹ค.

memregion = mmap.mmap(-1, ALLOC_SIZE, flags=mmap.MAP_PRIVATE)
  • mmap() ์‹œ์Šคํ…œ ์ฝœ๋กœ 100MiB์˜ ๊ฐ€์ƒ ๋ฉ”๋ชจ๋ฆฌ ์˜์—ญ์„ ํ™•๋ณดํ•ฉ๋‹ˆ๋‹ค.
  • ์ด๋•Œ! ์‹ค์ œ ๋ฌผ๋ฆฌ ๋ฉ”๋ชจ๋ฆฌ๋Š” ์•„์ง ์•„๋ฌด๊ฒƒ๋„ ํ• ๋‹น๋˜์ง€ ์•Š์•˜์–ด์š”.
  • ๊ทธ์ € โ€œ์ด ์ฃผ์†Œ๋ถ€ํ„ฐ ์ด๋งŒํผ ์“ธ ์ˆ˜ ์žˆ๊ฒŒ๋งŒ ํ•ด์ค˜~โ€ ํ•œ ๊ฒƒ๋ฟ์ž…๋‹ˆ๋‹ค.

๐Ÿ“ฆ ์•„์ง ์ฑ…์žฅ์„ ์กฐ๋ฆฝํ•ด๋†“๊ธฐ๋งŒ ํ–ˆ๊ณ , ์ฑ…์€ ํ•œ ๊ถŒ๋„ ์•ˆ ๊ฝ‚ํ˜€ ์žˆ๋Š” ์ƒํƒœ์ฃ .

๐Ÿงช Step 2. ์ ‘๊ทผ์„ ์‹œ์ž‘ํ•˜์ž! โ†’ ํŽ˜์ด์ง€ ํดํŠธ ๋ฐœ์ƒ

for i in range(0, ALLOC_SIZE, PAGE_SIZE):
    memregion[i] = 8  # ๊ฐ ํŽ˜์ด์ง€์— ์ฒซ ๋ฐ”์ดํŠธ ์ ‘๊ทผ

์ด์ œ ๋ฉ”๋ชจ๋ฆฌ ์˜์—ญ์˜ ๊ฐ ํŽ˜์ด์ง€์— 1๋ฐ”์ดํŠธ์”ฉ ์ ‘๊ทผํ•ฉ๋‹ˆ๋‹ค.
์ด ์ˆœ๊ฐ„! Demand Paging์ด ์‹œ์ž‘๋ผ์š”.

  • ํŽ˜์ด์ง€์— ์ฒ˜์Œ ์ ‘๊ทผํ•˜๋ฉด ์šด์˜์ฒด์ œ๊ฐ€ โ€œ์ด ์ฃผ์†Œ์—” ์•„์ง ๋ฌผ๋ฆฌ ๋ฉ”๋ชจ๋ฆฌ๊ฐ€ ์—†์–ด!โ€๋ฅผ ๊ฐ์ง€ํ•˜๊ณ ,
  • โžก ํŽ˜์ด์ง€ ํดํŠธ๊ฐ€ ๋ฐœ์ƒ!
  • โžก ์šด์˜์ฒด์ œ๊ฐ€ ์‹ค์ œ ๋ฌผ๋ฆฌ ๋ฉ”๋ชจ๋ฆฌ ํŽ˜์ด์ง€๋ฅผ ํ• ๋‹นํ•ด์ค๋‹ˆ๋‹ค.
  • โžก ํŽ˜์ด์ง€ ํ…Œ์ด๋ธ”์„ ์—…๋ฐ์ดํŠธํ•˜๊ณ , ๋ฐฉ๊ธˆ ์ค‘๋‹จ๋๋˜ ๋ช…๋ น์–ด๋ฅผ ๋‹ค์‹œ ์‹คํ–‰ํ•ฉ๋‹ˆ๋‹ค.

โœจ โ€œํ•„์š”ํ•  ๋•Œ๋งŒ ์ฑ…์„ ๊บผ๋‚ด ๊ฝ‚๋Š” ๋ฐฉ์‹โ€ โ€” ์ด๊ฒŒ ๋ฐ”๋กœ Demand Paging์ž…๋‹ˆ๋‹ค!

๐Ÿงช Step 3. sar ๋ช…๋ น์–ด๋กœ ์‹œ์Šคํ…œ ์ƒํƒœ๋ฅผ ๊ด€์ฐฐํ•ด๋ณด์ž

์‹คํ–‰ ์ค‘ sar -r 1, sar -B 1 ๋ช…๋ น์–ด๋ฅผ ๋ณ‘๋ ฌ๋กœ ์‹คํ–‰ํ•˜๋ฉด ๋‹ค์Œ์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ์–ด์š”:

๐Ÿ–ฅ๏ธ ๋ฉ”๋ชจ๋ฆฌ ์‚ฌ์šฉ๋Ÿ‰ (sar -r 1)

  • ๋ฉ”๋ชจ๋ฆฌ ์˜์—ญ๋งŒ ํ™•๋ณดํ•œ ์งํ›„์—” ๋ฉ”๋ชจ๋ฆฌ ์‚ฌ์šฉ๋Ÿ‰ ๊ฑฐ์˜ ๋ณ€ํ™” ์—†์Œ
  • ์‹ค์ œ๋กœ ์ ‘๊ทผ์„ ์‹œ์ž‘ํ•œ ์ดํ›„๋ถ€ํ„ฐ ์ดˆ๋‹น ์•ฝ 10MiB์”ฉ ๋ฌผ๋ฆฌ ๋ฉ”๋ชจ๋ฆฌ ์‚ฌ์šฉ๋Ÿ‰์ด ์ฆ๊ฐ€
  • ํ”„๋กœ๊ทธ๋žจ์ด ์ข…๋ฃŒ๋˜๋ฉด ๋ฉ”๋ชจ๋ฆฌ ์‚ฌ์šฉ๋Ÿ‰๋„ ์›๋ž˜๋Œ€๋กœ ๋Œ์•„๊ฐ

๐Ÿ” ํŽ˜์ด์ง€ ํดํŠธ ๋ฐœ์ƒ (sar -B 1)

  • ์ ‘๊ทผ์ด ์‹œ์ž‘๋œ ์ˆœ๊ฐ„๋ถ€ํ„ฐ fault/s(์ดˆ๋‹น ํŽ˜์ด์ง€ ํดํŠธ ์ˆ˜) ์ˆ˜์ฒœ ๋‹จ์œ„๋กœ ๊ธ‰์ฆ
  • ํŽ˜์ด์ง€ ํดํŠธ๋Š” ์ ‘๊ทผํ•œ ๋งŒํผ๋งŒ ๋ฐœ์ƒ (100MiB โ†’ ์•ฝ 25,000๊ฐœ ํŽ˜์ด์ง€ ์ ‘๊ทผ = ๊ทธ๋งŒํผ ํดํŠธ ๋ฐœ์ƒ)

์ด๊ฑด ๋ฐ”๋กœ ๋ฌผ๋ฆฌ ๋ฉ”๋ชจ๋ฆฌ๊ฐ€ ํ•„์š”ํ•œ ์ˆœ๊ฐ„์—๋งŒ ํ• ๋‹น๋˜๊ธฐ ๋•Œ๋ฌธ์ด์—์š”!

๐Ÿ“Š capture.sh๋กœ ํ”„๋กœ์„ธ์Šค ์ƒํƒœ ์‹ค์‹œ๊ฐ„ ๋ชจ๋‹ˆํ„ฐ๋ง

์ด์ œ ํŠน์ • ํ”„๋กœ์„ธ์Šค(demand-paging.py)์˜ ์ƒํƒœ๋ฅผ 1์ดˆ ๊ฐ„๊ฒฉ์œผ๋กœ ์‚ดํŽด๋ณด๋Š” ์Šคํฌ๋ฆฝํŠธ๋ฅผ ์‹คํ–‰ํ•ด๋ณผ ์ˆ˜ ์žˆ์–ด์š”:

./capture.sh

์ถœ๋ ฅ๋˜๋Š” ์ฃผ์š” ์ง€ํ‘œ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์•„์š”:

ํ•ญ๋ชฉ์˜๋ฏธ
VSZ๊ฐ€์ƒ ๋ฉ”๋ชจ๋ฆฌ ํฌ๊ธฐ
RSS์‹ค์ œ๋กœ ํ• ๋‹น๋œ ๋ฌผ๋ฆฌ ๋ฉ”๋ชจ๋ฆฌ ํฌ๊ธฐ
maj_flt๋ฉ”์ด์ € ํŽ˜์ด์ง€ ํดํŠธ ํšŸ์ˆ˜
min_flt๋งˆ์ด๋„ˆ ํŽ˜์ด์ง€ ํดํŠธ ํšŸ์ˆ˜

๐Ÿ“ˆ ์‹คํ–‰ ์ค‘ ํ™•์ธ๋œ ๋ณ€ํ™”

  • ๊ฐ€์ƒ ๋ฉ”๋ชจ๋ฆฌ(VSZ)๋Š” ๋ฏธ๋ฆฌ ํ• ๋‹น๋˜์—ˆ๊ธฐ ๋•Œ๋ฌธ์— ์ฒ˜์Œ๋ถ€ํ„ฐ 100MiB ์ˆ˜์ค€
  • ํ•˜์ง€๋งŒ ์‹ค์ œ ๋ฌผ๋ฆฌ ๋ฉ”๋ชจ๋ฆฌ(RSS)๋Š” ํŽ˜์ด์ง€์— ์ ‘๊ทผํ•  ๋•Œ๋งˆ๋‹ค ์ ์  ์ฆ๊ฐ€
  • ํŽ˜์ด์ง€ ํดํŠธ(min_flt)๋Š” ๊ฐ ํŽ˜์ด์ง€๋งˆ๋‹ค ๋ฐœ์ƒํ•˜๋ฉฐ ์ ์  ๋ˆ„์ ๋จ

๋งˆ์น˜, ์ฑ…์žฅ์— ๋งค๋ฒˆ ์ฑ… ํ•œ ๊ถŒ์”ฉ ๊ฝ‚์„ ๋•Œ๋งˆ๋‹ค ์•Œ๋žŒ์ด ์šธ๋ฆฌ๋Š” ๊ฑฐ์˜ˆ์š”. "์ฑ… ์™”๋‹ค!" ๐Ÿ“ฆ

๐Ÿง  ์ •๋ฆฌ ์š”์•ฝ

๋‹จ๊ณ„์„ค๋ช…๋ฉ”๋ชจ๋ฆฌ ๋ณ€ํ™”
mmap() ํ˜ธ์ถœ๊ฐ€์ƒ ์ฃผ์†Œ ๊ณต๊ฐ„๋งŒ ํ™•๋ณด (๋ฌผ๋ฆฌ ๋ฉ”๋ชจ๋ฆฌ ์—†์Œ)VSZ ์ฆ๊ฐ€, RSS ๋ณ€ํ™” ์—†์Œ
๊ฐ ํŽ˜์ด์ง€ ์ ‘๊ทผ ์‹œ์ž‘ํŽ˜์ด์ง€ ํดํŠธ ๋ฐœ์ƒ โ†’ ๋ฌผ๋ฆฌ ๋ฉ”๋ชจ๋ฆฌ ๋™์  ํ• ๋‹นRSS ์ฆ๊ฐ€, fault/s ์ฆ๊ฐ€
์ ‘๊ทผ ์™„๋ฃŒ๋ชจ๋“  ํŽ˜์ด์ง€์— ๋ฌผ๋ฆฌ ๋ฉ”๋ชจ๋ฆฌ ํ• ๋‹น ์™„๋ฃŒRSS = VSZ
ํ”„๋กœ๊ทธ๋žจ ์ข…๋ฃŒ๋ชจ๋“  ๋ฉ”๋ชจ๋ฆฌ ํ•ด์ œVSZ, RSS ๋ชจ๋‘ ๊ฐ์†Œ

๐Ÿ’ก ๋งˆ๋ฌด๋ฆฌ ํ•œ ์ค„ ์š”์•ฝ

โ€œDemand Paging์€ ๋ฏธ๋ฆฌ ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ์ฃผ์ง€ ์•Š์ง€๋งŒ, ํ•„์š”ํ•œ ์ˆœ๊ฐ„์—” ์ •ํ™•ํžˆ ํ•„์š”ํ•œ ๋งŒํผ๋งŒ, ์Šค๋งˆํŠธํ•˜๊ฒŒ ์ค€๋‹ค!โ€

๐Ÿ“Œ ์šด์˜์ฒด์ œ์˜ ๋ฉ”๋ชจ๋ฆฌ ํšจ์œจ ์ „๋žต์ด๋ž€ ์ด๋Ÿฐ ๊ฒƒ์ด๋‹ค!

๐Ÿ“— "ํŽ˜์ด์ง€ ํ…Œ์ด๋ธ”์€ ์–ผ๋งˆ๋‚˜ ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ์“ธ๊นŒ?"์™€ ๊ณ„์ธตํ˜• ํ…Œ์ด๋ธ” ๊ตฌ์กฐ

๐Ÿง  "ํŽ˜์ด์ง€ ํ…Œ์ด๋ธ”์€ ์–ผ๋งˆ๋‚˜ ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ์“ธ๊นŒ?"

๊ฐ€์ƒ ์ฃผ์†Œ ๊ณต๊ฐ„์ด ์–ด๋งˆ์–ด๋งˆํ•˜๊ฒŒ ๋„“์€๋ฐ, ๊ทธ๊ฑธ ์ „๋ถ€ ๊ด€๋ฆฌํ•˜๋ ค๋ฉด ํŽ˜์ด์ง€ ํ…Œ์ด๋ธ”๋„ ์—„์ฒญ ์ปค์•ผ ํ•˜์ง€ ์•Š์„๊นŒ?

๐Ÿ“˜ ํŽ˜์ด์ง€ ํ…Œ์ด๋ธ”์€ ๋ญ๋ƒ๋ฉด์š”...

"์ปดํ“จํ„ฐ์˜ ์ฃผ์†Œ๋ก"์ด์—์š”!
์šฐ๋ฆฌ ์ง‘ ์ฃผ์†Œ๋Š” โ€œ์„œ์šธ์‹œ 00๊ตฌ 123-45๋ฒˆ์ง€โ€ ๊ฐ™์€ ๊ฐ€์ƒ ์ฃผ์†Œ์ž–์•„์š”? ๊ทธ๋Ÿฐ๋ฐ ์‹ค์ œ๋กœ ๋ฌผ๊ฑด์€ ์ฐฝ๊ณ  ์•ˆ ์นธ์นธ๋งˆ๋‹ค ๋“ค์–ด ์žˆ์–ด์š”.
์ด๋•Œ "๊ฐ€์ƒ ์ฃผ์†Œ โ†’ ์‹ค์ œ ์ฃผ์†Œ(์ฐฝ๊ณ ์นธ)"์„ ์•Œ๋ ค์ฃผ๋Š” ๊ฒŒ ๋ฐ”๋กœ ํŽ˜์ด์ง€ ํ…Œ์ด๋ธ”์ด์—์š”!

โœ… ์ฆ‰, ํŽ˜์ด์ง€ ํ…Œ์ด๋ธ” = ์ฃผ์†Œ ๋ณ€ํ™˜ ํ‘œ

1๏ธโƒฃ ๋‹จ์ˆœ ๊ณ„์‚ฐ: ์ง„์งœ ๊ทธ๋ ‡๊ฒŒ ํฐ๊ฐ€?

๐Ÿ“Š ๊ทธ๋Ÿฐ๋ฐ ํŽ˜์ด์ง€ ํ…Œ์ด๋ธ”์ด ์™œ ์ด๋ ‡๊ฒŒ ํฌ๋‹ค๊ณ  ํ•˜๋Š” ๊ฑธ๊นŒ์š”?

๐Ÿ” ๊ฐ€์ •: x86_64 ์•„ํ‚คํ…์ฒ˜

  • ๊ฐ€์ƒ ์ฃผ์†Œ ๊ณต๊ฐ„: 128TB
  • ํŽ˜์ด์ง€ ํฌ๊ธฐ: 4KB (4,096๋ฐ”์ดํŠธ)
  • ํ•œ ํŽ˜์ด์ง€๋ฅผ ์ฐพ๊ธฐ ์œ„ํ•ด ํ•„์š”ํ•œ ์ •๋ณด(์—”ํŠธ๋ฆฌ): 8๋ฐ”์ดํŠธ

๊ทธ๋Ÿผ ์–ผ๋งˆ๋‚˜ ๋งŽ์€ ํŽ˜์ด์ง€๊ฐ€ ํ•„์š”ํ•˜๋ƒ๋ฉด...

128TB รท 4KB = ์•ฝ 34,359,738,368๊ฐœ! (์•ฝ 340์–ต ๊ฐœ ํŽ˜์ด์ง€)
๊ฑฐ๊ธฐ๋‹ค ๊ฐ ํŽ˜์ด์ง€๋งˆ๋‹ค 8๋ฐ”์ดํŠธ ์ •๋ณด๊ฐ€ ํ•„์š”ํ•˜๋‹ˆ...

340์–ต ๊ฐœ ร— 8๋ฐ”์ดํŠธ = 256GB

๐Ÿ˜ฑ ํŽ˜์ด์ง€ ํ…Œ์ด๋ธ”๋งŒ 256GB๋‚˜ ํ•„์š”ํ•˜๋‹ค๋Š” ๋ง์ด ๋˜๋Š” ๊ฑฐ์˜ˆ์š”!
๊ทผ๋ฐ... ๋‚ด ์ปดํ“จํ„ฐ RAM์€ 16GB๋ฐ–์— ์•ˆ ๋˜๋Š”๋ฐ?!?

๐Ÿค” โ€œํ—‰, ๊ทธ๋Ÿผ ์šฐ๋ฆฌ ์ปดํ“จํ„ฐ๋Š” ๋ฉ€์ฉกํžˆ ๋Œ์•„๊ฐ€๋Š” ๊ฑฐ ๋งž์•„?โ€
๋งž์•„์š”. ์™œ๋ƒํ•˜๋ฉด...

2๏ธโƒฃ ์ง„์งœ ํ•ต์‹ฌ! โ€œ๊ณ„์ธตํ˜• ๊ตฌ์กฐ๋ผ์„œ ๊ดœ์ฐฎ์•„์š”โ€

์—ฌ๊ธฐ์„œ ๋น„๋ฐ€ ๋ฌด๊ธฐ ๋“ฑ์žฅ! ๋ฐ”๋กœ ๊ณ„์ธตํ˜• ํŽ˜์ด์ง€ ํ…Œ์ด๋ธ” ๊ตฌ์กฐ์˜ˆ์š”.
์ด๊ฑด โ€œํ•„์š”ํ•œ ๊ฒƒ๋งŒ ๊บผ๋‚ด ์“ฐ๋Š”โ€ ๋ฐฉ์‹์ด์—์š”.

๐ŸŒฒ ๊ณ„์ธตํ˜• ํŽ˜์ด์ง€ ํ…Œ์ด๋ธ”์€ ์ด๋ ‡๊ฒŒ ๋™์ž‘ํ•ด์š”:

  1. ๐Ÿ“š 1๋‹จ๊ณ„: "์ฑ…์žฅ ํฐ ๋ถ„๋ฅ˜" (์˜ˆ: ์˜์–ด์ฑ…, ๊ณผํ•™์ฑ…, ๋งŒํ™”์ฑ…...)
  2. ๐Ÿ“˜ 2๋‹จ๊ณ„: "ํ•ด๋‹น ๋ถ„๋ฅ˜์˜ ์‹ค์ œ ์ฑ… ๋ชฉ๋ก"
  3. ๐Ÿ“„ 3๋‹จ๊ณ„: "์ฑ…์˜ ์‹ค์ œ ๋‚ด์šฉ ํŽ˜์ด์ง€"

๋งŒ์•ฝ ๋งŒํ™”์ฑ…๋งŒ ๋ณธ๋‹ค๋ฉด, ๊ณผํ•™์ฑ… ๋ชฉ๋ก์ด๋‚˜ ๋‚ด์šฉ์€ ์•„์˜ˆ ๋งŒ๋“ค์ง€๋„ ์•Š์•„์š”!

์ฆ‰,

  • ์šฐ๋ฆฌ๊ฐ€ ์‹ค์ œ ์‚ฌ์šฉํ•˜๋Š” ๊ฐ€์ƒ ์ฃผ์†Œ ๋ฒ”์œ„๋งŒํผ๋งŒ!
  • ํ•„์š”ํ•œ ํ…Œ์ด๋ธ” ์ผ๋ถ€๋งŒ ๋ฉ”๋ชจ๋ฆฌ์— ์ƒ์„ฑํ•ด์š”!

๊ทธ๋ž˜์„œ ์‹ค์ œ๋กœ๋Š” ์ „์ฒด 256GB๊ฐ€ ํ•„์š”ํ•˜์ง€ ์•Š์•„์š”.

ํŽ˜์ด์ง€ ํ…Œ์ด๋ธ”์€ ์‹ค์ œ๋กœ ๋‚˜๋ฌด์ฒ˜๋Ÿผ ๊ณ„์ธต ๊ตฌ์กฐ(Tree-like structure)๋กœ ๋˜์–ด ์žˆ์–ด์š”.

โœ… ๋‹จ์ผ ๊ตฌ์กฐ vs ๊ณ„์ธต ๊ตฌ์กฐ ๋น„๊ต

  • ํ‰ํƒ„ํ•œ ํ…Œ์ด๋ธ”(flat): ์ „์ฒด ๊ณต๊ฐ„์„ ํ•œ๋ˆˆ์— ๋‹ค ๊ด€๋ฆฌ
    • ๊ณต๊ฐ„ ๋‚ญ๋น„ ์‹ฌํ•ด์š”.
  • ๊ณ„์ธต ๊ตฌ์กฐ(hierarchical): ํ•„์š”ํ•œ ๋ถ€๋ถ„๋งŒ ๋งŒ๋“ค๊ณ  ๊ด€๋ฆฌ
    • ๊ณต๊ฐ„ ์•„๊ปด์„œ ํ˜„์‹ค์ ์œผ๋กœ ์šด์˜ ๊ฐ€๋Šฅํ•ด์š”.

๐Ÿงฉ ์˜ˆ์‹œ (ํŽ˜์ด์ง€ ํฌ๊ธฐ 100๋ฐ”์ดํŠธ, ๊ฐ€์ƒ ์ฃผ์†Œ ๊ณต๊ฐ„ 1600๋ฐ”์ดํŠธ):

  • ํ‰ํƒ„ํ•œ ๊ตฌ์กฐ: ์ „์ฒด ํŽ˜์ด์ง€ ์—”ํŠธ๋ฆฌ 16๊ฐœ ํ•„์š”
  • 2๋‹จ ๊ณ„์ธตํ˜•: ์‹ค์ œ ์‚ฌ์šฉํ•˜๋Š” ํŽ˜์ด์ง€๋งŒ ํ…Œ์ด๋ธ”์— ํฌํ•จ โ†’ ์—”ํŠธ๋ฆฌ ์ˆ˜ 8๊ฐœ๋กœ ๊ฐ์†Œ!
๊ตฌ์กฐ์„ค๋ช…๋ฉ”๋ชจ๋ฆฌ ๋‚ญ๋น„ ์—ฌ๋ถ€
ํ‰ํƒ„ํ˜• (1์ฐจ์›)๋ชจ๋“  ํŽ˜์ด์ง€์— ๋Œ€ํ•ด ๋ฌด์กฐ๊ฑด ์—”ํŠธ๋ฆฌ ์ƒ์„ฑ์žˆ์Œ ๐Ÿ˜ญ
๊ณ„์ธตํ˜• (ํŠธ๋ฆฌ ๊ตฌ์กฐ)ํ•„์š”ํ•œ ํŽ˜์ด์ง€๋งŒ ์ ์ฐจ ๊ตฌ์กฐ ์ƒ์„ฑ์—†์Œ ๐Ÿ˜Š

3๏ธโƒฃ ํ˜„์‹ค: x86_64๋Š” 4๋‹จ๊ณ„ ๊ณ„์ธตํ˜• ํŽ˜์ด์ง€ ํ…Œ์ด๋ธ” ๐Ÿชœ

  • ์‹œ์Šคํ…œ์— ๋”ฐ๋ผ ๋‹ค๋ฅด์ง€๋งŒ, ๋ฆฌ๋ˆ…์Šค x86_64๋Š” ์ผ๋ฐ˜์ ์œผ๋กœ 4๋‹จ๊ณ„ ๊ตฌ์กฐ๋ฅผ ์‚ฌ์šฉํ•ด์š”:
    • PML4 โ†’ PDPT โ†’ PD โ†’ PT โ†’ ์‹ค์ œ ํŽ˜์ด์ง€

๐Ÿ‘‰ ๊ทธ๋ž˜์„œ ํ”„๋กœ์„ธ์Šค ํ•˜๋‚˜๊ฐ€ 256GB๋ฅผ ์ฐจ์ง€ํ•˜์ง€ ์•Š๊ณ ๋„, ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ํšจ์œจ์ ์œผ๋กœ ๊ด€๋ฆฌํ•  ์ˆ˜ ์žˆ๋Š” ๊ฑฐ์˜ˆ์š”!

sar - ALL ๋ช…๋ น

์‹œ์Šคํ…œ์ด ์‚ฌ์šฉํ•˜๋Š” ๋ฌผ๋ฆฌ ๋ฉ”๋ชจ๋ฆฌ ์ค‘์—์„œ ํŽ˜์ด์ง€ ํ…Œ์ด๋ธ”์ด ์‚ฌ์šฉํ•˜๋Š” ๋ฉ”๋ชจ๋ฆฌ๋Š” sar - ALL ๋ช…๋ น์–ด๋กœ kbpgtbl ํ•„๋“œ์—์„œ ํ™•์ธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค

๐Ÿ ์ •๋ฆฌ ํ•œ์ค„ ์š”์•ฝ!

โ€œํŽ˜์ด์ง€ ํ…Œ์ด๋ธ”์€ ์ฒ˜์Œ ๋ณด๋ฉด ๋„ˆ๋ฌด ์ปค ๋ณด์—ฌ๋„, ์‹ค์ œ๋กœ๋Š” โ€˜ํ•„์š”ํ•œ ๋งŒํผ๋งŒโ€™ ๋งŒ๋“ค์–ด์„œ ๋˜‘๋˜‘ํ•˜๊ฒŒ ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ์•„๊ปด์š”!โ€

๐Ÿงฑ Huge Page์™€ Transparent Huge Page (THP)

๋ฉ”๋ชจ๋ฆฌ ๊ด€๋ฆฌ ํšจ์œจ์„ ํ•œ ๋‹จ๊ณ„ ๋” ๋Œ์–ด์˜ฌ๋ฆฌ๊ธฐ ์œ„ํ•œ ๊ธฐ์ˆ ์ด์—์š”.

์ด๊ฑธ 1ํŽ˜์ด์ง€๋‹น ํฌ๊ธฐ๊ฐ€ 400๋ฐ”์ดํŠธ์ธ Huge Page๋กœ ๋ฐ”๊พธ๋ฉด ํŽ˜์ด์ง€ ํ…Œ์ด๋ธ” ๊ณ„์ธต์„ 1๋‹จ์€ ๊ฑด๋„ˆ๋›ฐ๊ณ  [๊ทธ๋ฆผ 04-24]์ฒ˜๋Ÿผ ๋ฉ๋‹ˆ๋‹ค.

4๏ธโƒฃ Huge Page: "ํŽ˜์ด์ง€๋ฅผ ํฌ๊ฒŒ ์จ์„œ ์—”ํŠธ๋ฆฌ ์ค„์ด์ž!"

๊ธฐ๋ณธ ํŽ˜์ด์ง€๋Š” 4KiB์ง€๋งŒ, Huge Page๋Š” ๋ณดํ†ต 2MiB~1GiB

โœ… ์žฅ์ 

  • ํŽ˜์ด์ง€ ํ…Œ์ด๋ธ”์˜ ์—”ํŠธ๋ฆฌ ์ˆ˜๊ฐ€ ํ™• ์ค„์–ด๋“ฆ
  • ํŽ˜์ด์ง€ ํ…Œ์ด๋ธ” ๋ณต์‚ฌ ๋น„์šฉ๋„ ์ค„์–ด์„œ fork() ์†๋„ ํ–ฅ์ƒ!

๐Ÿ’ป ์‚ฌ์šฉ ๋ฐฉ๋ฒ•

mmap(..., MAP_HUGETLB);  // ๋ช…์‹œ์ ์œผ๋กœ Huge Page ์š”์ฒญ

๋Œ€์šฉ๋Ÿ‰ ๋ฐ์ดํ„ฐ ์ฒ˜๋ฆฌํ•˜๋Š” DB, ๊ฐ€์ƒ๋จธ์‹  ๋“ฑ์— ์ข‹์Œ

5๏ธโƒฃ Transparent Huge Page (THP): โ€œ์ž๋™์œผ๋กœ ์•Œ์•„์„œ ์จ์ค„๊ฒŒ!โ€

ํ”„๋กœ๊ทธ๋ž˜๋จธ๊ฐ€ ๋ช…์‹œํ•˜์ง€ ์•Š์•„๋„, OS๊ฐ€ ์•Œ์•„์„œ 4KiB ํŽ˜์ด์ง€๋“ค์„ ๋ฌถ์–ด์„œ Huge Page๋กœ ๋งŒ๋“ค์–ด์ค๋‹ˆ๋‹ค.

โœ… ์žฅ์ 

  • ์„ฑ๋Šฅ ํ–ฅ์ƒ ๊ธฐ๋Œ€
  • ํ”„๋กœ๊ทธ๋ž˜๋จธ๊ฐ€ ์ง์ ‘ Huge Page ์„ค์ • ์•ˆ ํ•ด๋„ ๋จ

โš ๏ธ ์ฃผ์˜์ 

  • ์กฐ๊ฑด์ด ๋งž์•„์•ผ ํ•ฉ์ณ์ง
  • ๋‹ค์‹œ 4KiB๋กœ ์ชผ๊ฐœ๋Š” ๋น„์šฉ๋„ ์žˆ์–ด์„œ ์„ฑ๋Šฅ์ด ์˜คํžˆ๋ ค ๋‚ฎ์•„์งˆ ์ˆ˜๋„ ์žˆ์Œ

๐Ÿ›  ์„ค์ • ํ™•์ธ ๋ฐ ๋ณ€๊ฒฝ

cat /sys/kernel/mm/transparent_hugepage/enabled
# ์ถœ๋ ฅ ์˜ˆ์‹œ: always [madvise] never
  • always : ํ•ญ์ƒ THP ์‚ฌ์šฉ
  • madvise : madvise() ์‹œ์Šคํ…œ์ฝœ๋กœ ์š”์ฒญํ•œ ๊ฒฝ์šฐ๋งŒ ์‚ฌ์šฉ (Ubuntu 20.04 ๊ธฐ๋ณธ๊ฐ’)
  • never : THP ๋น„ํ™œ์„ฑํ™”

๐Ÿง  ์ •๋ฆฌ ์š”์•ฝ

๊ฐœ๋…์„ค๋ช…์žฅ์ ์ฃผ์˜์ 
ํ‰ํƒ„ํ•œ ํŽ˜์ด์ง€ ํ…Œ์ด๋ธ”์ „ ๋ฒ”์œ„๋ฅผ ์ผ๊ด„ ๊ด€๋ฆฌ๊ตฌ์กฐ ๊ฐ„๋‹จ๋ฉ”๋ชจ๋ฆฌ ๋‚ญ๋น„ ํผ
๊ณ„์ธตํ˜• ํŽ˜์ด์ง€ ํ…Œ์ด๋ธ”ํ•„์š”ํ•œ ๋ฒ”์œ„๋งŒ ๊ณ„์ธต์ ์œผ๋กœ ๊ตฌ์„ฑ๋ฉ”๋ชจ๋ฆฌ ํšจ์œจ์ ๊ตฌ์กฐ ๋ณต์žก
Huge PageํŽ˜์ด์ง€ ๋‹จ์œ„ ์ž์ฒด๋ฅผ ํ‚ค์›€ (ex. 2MiB)ํŽ˜์ด์ง€ ํ…Œ์ด๋ธ” ์ž‘์•„์ง๋ช…์‹œ์  ์„ค์ • ํ•„์š”
Transparent Huge Page์—ฐ์†๋œ ํŽ˜์ด์ง€๋ฅผ OS๊ฐ€ ์ž๋™์œผ๋กœ ๋ฌถ์Œ์ž๋™ ์ตœ์ ํ™”์˜คํžˆ๋ ค ๋А๋ ค์งˆ ์ˆ˜๋„ ์žˆ์Œ

๋ณด์ถฉ ์ •๋ฆฌ : ์ƒˆ๋กœ์šด ๋ฉ”๋ชจ๋ฆฌ ๊ณ„์ธต๊ณผ ์šด์˜์ฒด์ œ์˜ ์—ญํ• 

์ถœ์ฒ˜ : https://medium.com/rate-labs/%EC%83%88%EB%A1%9C%EC%9A%B4-%EB%A9%94%EB%AA%A8%EB%A6%AC-%EA%B3%84%EC%B8%B5%EA%B3%BC-%EC%9A%B4%EC%98%81%EC%B2%B4%EC%A0%9C%EC%9D%98-%EC%97%AD%ED%95%A0-92109ebea01a

๐Ÿ“š "DRAM์ด ๋ถ€์กฑํ•œ ์„ธ์ƒ, ๊ณ„์ธตํ˜• ๋ฉ”๋ชจ๋ฆฌ๊ฐ€ ๋‚˜ํƒ€๋‚ฌ๋‹ค!"

1๏ธโƒฃ DRAM์˜ ์„ฑ์žฅ ๋‘”ํ™”์™€ ์ƒˆ๋กœ์šด ์‹œ๋Œ€์˜ ๋„๋ž˜

์˜›๋‚ ์—๋Š” DRAM์ด ๋ฌด์„œ์šด ์†๋„๋กœ ์„ฑ์žฅํ–ˆ์–ด์š”.

  • ์ดˆ์ฐฝ๊ธฐ์—” 3๋…„์— 4๋ฐฐ์”ฉ! ๐Ÿš€
  • ๊ทธ๋‹ค์Œ์—” 2๋…„์— 2๋ฐฐ์”ฉ!
  • ๊ทธ๋Ÿฐ๋ฐ ์ตœ๊ทผ์—”... 4๋…„์— ๊ฒจ์šฐ 2๋ฐฐ.

ํ•œ๋งˆ๋””๋กœ "DRAM ์„ฑ์žฅ์ด ์˜ˆ์ „ ๊ฐ™์ง€ ์•Š๋‹ค..."๋Š” ๊ฑฐ์ฃ .
ํ•˜์ง€๋งŒ ์„ธ์ƒ์€ ์ ์  ๋” ๋งŽ์€ ๋ฐ์ดํ„ฐ๋ฅผ ์›ํ•ด์š”.

  • ๊ธ€์—์„œ โ†’ ์‚ฌ์ง„์—์„œ โ†’ ์˜์ƒ์œผ๋กœ
  • ๊ทธ๋ฆฌ๊ณ  ์š”์ฆ˜์€ AI๊ฐ€ ๋ฐ์ดํ„ฐ๋ฅผ ํญ์‹ ์ค‘์ด์—์š”.

โ€œDRAM๋งŒ์œผ๋กœ๋Š” ๋„์ €ํžˆ ๊ฐ๋‹นํ•  ์ˆ˜ ์—†๋‹ค!โ€

๊ทธ๋ž˜์„œ ์—ฐ๊ตฌ์ž๋“ค์€ ๋Œ€์•ˆ์„ ์ฐพ์•„ ๋‚˜์„ฐ์Šต๋‹ˆ๋‹ค.

2๏ธโƒฃ ๋Œ€์•ˆ: ์ƒˆ๋กœ์šด ๋ฉ”๋ชจ๋ฆฌ ๊ธฐ์ˆ ์˜ ๋“ฑ์žฅ!

DRAM์„ ๋ณด์™„ํ•˜๊ฑฐ๋‚˜ ๋Œ€์ฒดํ•  ๋ฐฉ๋ฒ•๋“ค, ๋ฐ”๋กœ ์ด๊ฒƒ๋“ค์ด์—์š”:

  • ๐Ÿ” Persistent Memory (PM)
  • ๐Ÿ”Œ Non-volatile Memory (NVM)
  • ๐ŸŒช๏ธ Storage Class Memory (SCM)

๊ทธ๋ฆฌ๊ณ  ๊ทธ ์•ˆ์—๋Š” ๋˜ ๋ฉ‹์ง„ ๊ธฐ์ˆ ๋“ค์ด ์ˆจ์–ด ์žˆ์–ด์š”:

  • PCM, FeRAM, STT-RAM ๊ฐ™์€ ์‹ ์†Œ์žฌ ๊ธฐ๋ฐ˜ ๋ฉ”๋ชจ๋ฆฌ๋“ค
  • ๊ทธ๋ฆฌ๊ณ  ์ธํ…”์˜ Optane ๊ฐ™์€ ์‹ค์ œ ์ƒ์šฉ ์ œํ’ˆ๋„ ๋‚˜์™”์ฃ .

๋˜ ํ•˜๋‚˜, Disaggregated Memory๋ž€ ๊ฐœ๋…๋„ ๋‚˜์™”์–ด์š”.
โ†’ ์—ฌ๋Ÿฌ ์„œ๋ฒ„์˜ DRAM์„ ํ•ฉ์ณ ํ•˜๋‚˜์˜ ๊ฑฐ๋Œ€ํ•œ ๋ฉ”๋ชจ๋ฆฌ์ฒ˜๋Ÿผ ์“ฐ๋Š” ๊ฑฐ์˜ˆ์š”!

๐Ÿš ์ตœ๊ทผ์—” CXL(Compute Express Link)์ด๋ผ๋Š” ๊ณ ์† ํ†ต์‹  ๊ธฐ์ˆ  ๋•๋ถ„์—,
CPU๊ฐ€ ์›๊ฒฉ ๋ฉ”๋ชจ๋ฆฌ์— ๋งˆ์น˜ ๋‚ด ๊ฒƒ์ฒ˜๋Ÿผ ๋น ๋ฅด๊ฒŒ ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ๊ฒŒ ๋์Šต๋‹ˆ๋‹ค.

3๏ธโƒฃ ํ˜„์‹ค์ ์ธ ์ „๋žต: ๊ณ„์ธตํ˜• ๋ฉ”๋ชจ๋ฆฌ ์‹œ์Šคํ…œ ๋“ฑ์žฅ!

๊ทธ๋ ‡๋‹ค๊ณ  "DRAM์ด ์—†์–ด๋„ ๋œ๋‹ค"๋Š” ๊ฑด ์•„๋‹ˆ์—์š”.
์˜คํžˆ๋ ค DRAM์„ ์บ์‹œ์ฒ˜๋Ÿผ ์‚ฌ์šฉํ•ด์„œ
์†๋„์™€ ์šฉ๋Ÿ‰ ์‚ฌ์ด์—์„œ ์ ˆ๋ฌ˜ํ•œ ๊ท ํ˜•์„ ์ฐพ์ž! ์ด๊ฒŒ ํ•ต์‹ฌ์ž…๋‹ˆ๋‹ค.

๊ทธ๋ž˜์„œ ๋งŒ๋“ค์–ด์ง„ ๊ตฌ์กฐ๊ฐ€ ๋ฐ”๋กœ ์ด๊ฑฐ์˜ˆ์š”:

CPU ๊ฐ€๊นŒ์ด: ๋น ๋ฅด์ง€๋งŒ ๋น„์‹ผ ๋ฉ”๋ชจ๋ฆฌ (L1/L2 ์บ์‹œ, DRAM)
CPU ๋ฉ€๋ฆฌ: ๋А๋ฆฌ์ง€๋งŒ ํฐ ๋ฉ”๋ชจ๋ฆฌ (SCM, SSD ๋“ฑ)

๐ŸŽฏ ๋ชฉํ‘œ๋Š” ๋‹จ ํ•˜๋‚˜!
"ํ•ซํ•œ ๋ฐ์ดํ„ฐ๋Š” ์œ„์ชฝ์—์„œ, ์ฝœ๋“œํ•œ ๋ฐ์ดํ„ฐ๋Š” ์•„๋ž˜์ชฝ์—์„œ ์ฒ˜๋ฆฌํ•˜์ž!"

4๏ธโƒฃ ๋ฌธ์ œ 1: โ€œ์–ด๋–ค ๋ฐ์ดํ„ฐ๋ฅผ ๋‚จ๊ธฐ๊ณ , ์–ด๋–ค ๊ฑธ ๋ฒ„๋ฆด๊นŒ?โ€ (ํŽ˜์ด์ง€ ๊ต์ฒด ์•Œ๊ณ ๋ฆฌ์ฆ˜)

๊ณ„์ธต ๊ตฌ์กฐ์—์„œ ๊ฐ€์žฅ ์ค‘์š”ํ•œ ๊ฑด
โžก ๋ฌด์Šจ ๋ฐ์ดํ„ฐ๋ฅผ DRAM์— ๋‘๊ณ , SCM์œผ๋กœ ๋‚ด๋ฆด์ง€ ๊ฒฐ์ •ํ•˜๋Š” ๊ฒƒ์ด์—์š”.

๐Ÿ” ํŒ๋‹จ ๊ธฐ์ค€์€ ๋‘ ๊ฐ€์ง€:
1. ์–ผ๋งˆ๋‚˜ ์ž์ฃผ ์ ‘๊ทผํ–ˆ๋Š”๊ฐ€ (๋นˆ๋„) โ†’ LFU
2. ๋งˆ์ง€๋ง‰ ์ ‘๊ทผ์ด ์–ผ๋งˆ๋‚˜ ์ตœ๊ทผ์ธ๊ฐ€ (์ตœ์‹ ์„ฑ) โ†’ LRU

ํ˜„์‹ค์—์„  ์ด ๋‘˜์„ ์ ์ ˆํžˆ ์„ž์–ด์„œ ํŒ๋‹จํ•ด์š”.

๊ทธ๋Ÿฐ๋ฐ! ์šด์˜์ฒด์ œ๋Š” ๋ชจ๋“  ๋ฐ์ดํ„ฐ ์ ‘๊ทผ์„ ์™„๋ฒฝํžˆ ์•Œ ์ˆ˜๊ฐ€ ์—†์–ด์š”.

๐Ÿ›‘ ๊ธฐ์กด ๋ฐฉ์‹์˜ ํ•œ๊ณ„:

  • PTE ์ ‘๊ทผ ๋น„ํŠธ๋Š” ์ •ํ™•ํ•˜์ง€ ์•Š์Œ (TLB ๋•๋ถ„์— ์ƒ๋žต๋˜๊ธฐ๋„ ํ•จ)
  • ์˜๋„์  ํŽ˜์ด์ง€ ํดํŠธ๋Š” ์„ฑ๋Šฅ์— ์•…์˜ํ–ฅ ๐Ÿ˜ญ

โœ… ์ตœ๊ทผ ํ•ด๊ฒฐ์ฑ…: Intel์˜ PEBS ํ™œ์šฉ!

  • CPU ๋‚ด๋ถ€ ์ด๋ฒคํŠธ๋ฅผ ์ƒ˜ํ”Œ๋งํ•ด์„œ
  • ์–ด๋–ค ์ฃผ์†Œ๊ฐ€ ์‹ค์ œ๋กœ ์ ‘๊ทผ๋๋Š”์ง€ ํ™•์ธ ๊ฐ€๋Šฅ!
  • ์„ฑ๋Šฅ ๋ถ€๋‹ด๋„ ์ ๊ณ , TLB ์ ‘๊ทผ๋„ ๋น ์ง์—†์ด ๊ธฐ๋ก๋จ!

5๏ธโƒฃ ๋ฌธ์ œ 2: โ€œ๊ณต๊ฐ„์„ ๋„ˆ๋ฌด ๋‚ญ๋น„ํ•˜๊ณ  ์žˆ์ง„ ์•Š์„๊นŒ?โ€ (๊ณต๊ฐ„ ํšจ์œจ์„ฑ ๋ฌธ์ œ)

Huge page ๋กœ ์ธํ•œ ๋น„ํšจ์œจ์ ์ธ ๊ณต๊ฐ„ ํ™œ์šฉ

๐Ÿงฑ Huge Page๊ฐ€ ์™œ ์“ฐ์ผ๊นŒ?

  • 4KB ํŽ˜์ด์ง€ 512๊ฐœ โ†’ 2MB Huge Page
  • TLB ์ปค๋ฒ„๋ฆฌ์ง€๊ฐ€ ์ปค์ง€๊ณ , ํŽ˜์ด์ง€ ํ…Œ์ด๋ธ”๋„ ์ค„์–ด์š”!

๐Ÿ˜จ ๊ทธ๋Ÿฐ๋ฐ ๋ฌธ์ œ๊ฐ€...

  • 2MB ์ค‘์— ๋”ฑ 4KB๋งŒ ์“ฐ๋ฉด?
  • ๋‚˜๋จธ์ง€ 1.996MB๋Š” ๋‚ญ๋น„! โ†’ ๋ฉ”๋ชจ๋ฆฌ ๋ถ€ํ’€๋ฆผ(bloat) ๋ฐœ์ƒ!

๐Ÿ”„ ํ•ด๊ฒฐ์ฑ…: ํ•„์š”ํ•˜๋ฉด ๋‹ค์‹œ ์ชผ๊ฐœ๊ธฐ!

  • Huge Page๋ฅผ 4KB base page๋กœ ๋ถ„ํ•ดํ•ด์„œ,
    ์ง„์งœ โ€˜ํ•ซํ•œโ€™ ํŽ˜์ด์ง€๋งŒ DRAM์— ๋„ฃ์ž!

ํ•˜์ง€๋งŒ ์ด๊ฒƒ๋„ ์‰ฝ์ง€ ์•Š์•„์š”:

  • ๋‹ค์‹œ huge๋กœ ํ•ฉ์ณ์•ผ ํ•  ์ˆ˜๋„ ์žˆ์Œ
  • ์ชผ๊ฐœ๊ณ  ํ•ฉ์น˜๋Š” ๋ฐ ์‹œ๊ฐ„๊ณผ ๋น„์šฉ ๋ฐœ์ƒ

๊ทธ๋ž˜์„œ ์—ฐ๊ตฌ์ž๋“ค์€ ์ ๋‹นํ•œ ํƒ€์ด๋ฐ๊ณผ ๊ธฐ์ค€์„ ์ฐพ์•„๋‚ด๋ ค๋Š” ์•Œ๊ณ ๋ฆฌ์ฆ˜๋„ ์—ฐ๊ตฌ ์ค‘์ด์—์š”.
์˜ˆ: Memtis(2023)์€ ๋‚ด๋ถ€ ๋‹จํŽธํ™” ์ˆ˜์ค€์„ ๋ณด๊ณ  ์ชผ๊ฐœ๋Š” ๊ธฐ์ค€์„ ์ œ์•ˆํ–ˆ์–ด์š”!

๐Ÿ”š ๊ฒฐ๋ก : ๊ณ„์ธต ๋ฉ”๋ชจ๋ฆฌ ์‹œ์Šคํ…œ, ์•„์ง ๊ฐˆ ๊ธธ์ด ๋ฉ€์ง€๋งŒ ๊ฐ€๋Šฅ์„ฑ์€ ํฌ๋‹ค!

  • DRAM์€ ๋” ์ด์ƒ ๋ฌดํ•œํžˆ ์ปค์ง€์ง€ ์•Š์•„์š”.
  • ๊ทธ๋ž˜์„œ ์ƒˆ๋กœ์šด ๋ฉ”๋ชจ๋ฆฌ ๊ณ„์ธต, ํŽ˜์ด์ง€ ๊ต์ฒด, ๊ณต๊ฐ„ ๊ด€๋ฆฌ ๋“ฑ์ด ํ•„์š”ํ•ด์กŒ๊ณ 
  • ์ด๋ฅผ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•œ ๊ธฐ์ˆ ๊ณผ ์•„์ด๋””์–ด๋“ค์ด ์Ÿ์•„์ง€๊ณ  ์žˆ์–ด์š”.

โ€œ10๋…„ ํ›„์—๋Š”, ์šฐ๋ฆฌ๊ฐ€ ์“ฐ๋Š” ๋ฉ”๋ชจ๋ฆฌ ๊ตฌ์กฐ๊ฐ€ ์ง€๊ธˆ๊ณผ ์™„์ „ํžˆ ๋‹ฌ๋ผ์งˆ์ง€๋„ ๋ชฐ๋ผ์š”!โ€

๐ŸŽ‰ ์ž, ์ด์ œ ์ •๋ฆฌํ•ด๋ณผ๊นŒ์š”?

์ด๋ ‡๊ฒŒ ๋ฆฌ๋ˆ…์Šค๊ฐ€ ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ์–ด๋–ป๊ฒŒ ๋˜‘๋˜‘ํ•˜๊ฒŒ ๊ด€๋ฆฌํ•˜๊ณ , ๋ฉ”๋ชจ๋ฆฌ๊ฐ€ ๋ถ€์กฑํ•  ๋•Œ ์–ด๋–ค ํ–‰๋™์„ ํ•˜๋Š”์ง€ ์•Œ์•„๋ดค์–ด์š”. ์‹ค์ œ๋กœ ์ปดํ“จํ„ฐ๋ฅผ ์“ฐ๋ฉด์„œ ๊ฐ€๋” free ๋ช…๋ น์–ด๋‚˜ sar ๋ช…๋ น์–ด๋กœ ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ๊ด€์ฐฐํ•ด๋ณด์„ธ์š”. ๋ฆฌ๋ˆ…์Šค์˜ ๋˜‘๋˜‘ํ•œ ๋ฉ”๋ชจ๋ฆฌ ๊ด€๋ฆฌ ์‹œ์Šคํ…œ์„ ์ง์ ‘ ๋А๋‚„ ์ˆ˜ ์žˆ์„ ๊ฑฐ์˜ˆ์š”~

๋…ผ์˜ ๋‚˜๋ˆˆ ๋ถ€๋ถ„

  • THP ๋‚ด์šฉ

  • ๋ธ”๋ฃจ์Šคํฌ๋ฆฐ๋„ page fault์˜ ์ผ์ข… > os๋‹จ์—์„œ ํŽ˜์ด์ง€ํดํŠธ๋‚˜๋ฉด ๋ธ”๋ฃจ์Šคํฌ๋ฆฐ

  • OOM ์ ์ˆ˜ ๋ณด๊ธฐ : cat /proc/[PID]/oom_score_adj

  • DB๊ฐ€ ํ”„๋กœ์„ธ์Šค๋‹ˆ ๋ฆฌ๋ˆ…์Šค๋ฅผ ๋”ฐ๋ผ๊ฐ„๋‹ค.
    ๐Ÿง  โ€œDB๊ฐ€ ํ”„๋กœ์„ธ์Šค๋‹ˆ ๋ฆฌ๋ˆ…์Šค๋ฅผ ๋”ฐ๋ผ๊ฐ„๋‹คโ€๋Š” ๋œป์€?

    1) ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค(DB)๋Š” ๊ฒฐ๊ตญ ํ”„๋กœ์„ธ์Šค์ด๋‹ค

  • ์šฐ๋ฆฌ๊ฐ€ ์‚ฌ์šฉํ•˜๋Š” MySQL, PostgreSQL, Oracle ๊ฐ™์€ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋Š” ๋…๋ฆฝ ์‹คํ–‰๋˜๋Š” ํ”„๋กœ๊ทธ๋žจ, ์ฆ‰ ํ”„๋กœ์„ธ์Šค์˜ˆ์š”.

  • ์ด DB ํ”„๋กœ๊ทธ๋žจ๋„ ์šด์˜์ฒด์ œ์—์„œ ๊ด€๋ฆฌํ•˜๋Š” ํ•˜๋‚˜์˜ ์‚ฌ์šฉ์ž ํ”„๋กœ์„ธ์Šค๋กœ ์‹คํ–‰๋ฉ๋‹ˆ๋‹ค.

์˜ˆ: ps -ef | grep postgres
postgres  10123     1  0 10:00 ?        00:00:00 /usr/lib/postgresql/...

๐Ÿ”ง 2) ๋ฆฌ๋ˆ…์Šค๊ฐ€ ๊ด€๋ฆฌํ•˜๋Š” ๊ฒƒ๋“ค์„ DB๋„ ๋˜‘๊ฐ™์ด ๊ฒช๋Š”๋‹ค

์šด์˜์ฒด์ œ๋Š” ๋ชจ๋“  ํ”„๋กœ์„ธ์Šค๋ฅผ ๊ด€๋ฆฌํ•˜์ฃ . ๊ทธ๋Ÿฌ๋‹ˆ๊นŒ DB๋„ ๋‹ค์Œ๊ณผ ๊ฐ™์€ ๋ฆฌ๋ˆ…์Šค์˜ ์ œ์•ฝ๊ณผ ๊ทœ์น™์„ ๊ทธ๋Œ€๋กœ ๋”ฐ๋ฆ…๋‹ˆ๋‹ค.

1) ํŽ˜์ด์ง€ ํดํŠธ๊ฐ€ ๋‚˜๋ฉด ์ปค๋„์ดไป‹ๅ…ฅํ•ด์„œ ๋ฉ”๋ชจ๋ฆฌ ์˜ฌ๋ ค์ฃผ๊ธฐ
2) ๊ฐ€์ƒ ์ฃผ์†Œ ๊ณต๊ฐ„ ์‚ฌ์šฉ (DB๋„ mmap์„ ์จ์„œ ํŒŒ์ผ ๋งคํ•‘ํ•จ)
3) ์Šค์ผ€์ค„๋ง ๋Œ€์ƒ (CPU ์‹œ๊ฐ„ ๋ถ„๋ฐฐ๋ฐ›์•„์•ผ ํ•จ)
4) I/O ์š”์ฒญ ์‹œ ์ปค๋„์„ ํ†ตํ•ด ๋””์Šคํฌ์— ์ ‘๊ทผ
5) SIGKILL, SIGTERM ๋“ฑ ์‹œ๊ทธ๋„๋„ DB์— ์ ์šฉ๋จ

โ†’ ์š”์•ฝํ•˜๋ฉด, DB๋„ ์ผ๋ฐ˜์ ์ธ ๋ฆฌ๋ˆ…์Šค ํ”„๋กœ์„ธ์Šค์ฒ˜๋Ÿผ ๊ฐ€์ƒ ๋ฉ”๋ชจ๋ฆฌ, ํŽ˜์ด์ง€ ํดํŠธ, TLB ๋ฏธ์Šค ๋“ฑ ๋‹ค ๊ฒช๋Š”๋‹ค๋Š” ๋ง์ž…๋‹ˆ๋‹ค.

๐ŸŸข PostgreSQL์—์„œ์˜ ๋ฉ”๋ชจ๋ฆฌ ์ ‘๊ทผ ์˜ˆ์‹œ

1) ์‚ฌ์šฉ์ž๊ฐ€ SELECT * FROM users WHERE id=1 ๊ฐ™์€ ์ฟผ๋ฆฌ๋ฅผ ๋‚ ๋ฆผ
2) PostgreSQL์ด users ํ…Œ์ด๋ธ” ํŒŒ์ผ์„ ์—ด๊ณ  mmap์œผ๋กœ ๋งคํ•‘
3) ๋งŒ์•ฝ ์•„์ง ๊ทธ ํŒŒ์ผ์ด ๋ฌผ๋ฆฌ ๋ฉ”๋ชจ๋ฆฌ์— ์—†์œผ๋ฉด?
โ†’ ํŽ˜์ด์ง€ ํดํŠธ ๋ฐœ์ƒ!
4) ๋ฆฌ๋ˆ…์Šค ์ปค๋„์ด ํ•ด๋‹น ํŽ˜์ด์ง€๋ฅผ ๋””์Šคํฌ์—์„œ ์ฝ์–ด์™€์„œ ๋ฉ”๋ชจ๋ฆฌ์— ์ ์žฌ
5) ์ดํ›„ ์‚ฌ์šฉ์ž ์š”์ฒญ์— ๋”ฐ๋ผ ๊ฒฐ๊ณผ๋ฅผ ๋ฐ˜ํ™˜

์ฆ‰, PostgreSQL์ด ์ง์ ‘ ๋””์Šคํฌ์—์„œ ์ฝ๋Š” ๊ฒŒ ์•„๋‹ˆ๋ผ, ์ปค๋„์˜ ํŽ˜์ด์ง€ ํดํŠธ ํ•ธ๋“ค๋ง์— ์˜์กดํ•˜๋Š” ๊ตฌ์กฐ์ž…๋‹ˆ๋‹ค.

๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋„ ๊ฒฐ๊ตญ ๋ฆฌ๋ˆ…์Šค ํ”„๋กœ์„ธ์Šค์ด๋ฏ€๋กœ, ๊ฐ€์ƒ ๋ฉ”๋ชจ๋ฆฌ์™€ ํŽ˜์ด์ง€ ํดํŠธ, TLB, ์‹œ๊ทธ๋„ ๋“ฑ ๋ฆฌ๋ˆ…์Šค ์ปค๋„์˜ ๋ชจ๋“  ๋ฉ”์ปค๋‹ˆ์ฆ˜์„ ๊ทธ๋Œ€๋กœ ๋”ฐ๋ฆ…๋‹ˆ๋‹ค.

๐Ÿ“š ๋ง๋ถ™์—ฌ์„œ ์ฝ์œผ๋ฉด ์ข‹์€ ๋‚ด์šฉ

  • mmap์„ ์ด์šฉํ•œ ํŒŒ์ผ ๋งคํ•‘ (PostgreSQL์—์„œ ๋งŽ์ด ์”๋‹ˆ๋‹ค)
  • Demand Paging + Page Fault ํ•ธ๋“ค๋ง
  • DB๊ฐ€ ์ง์ ‘ ๋ฒ„ํผ๋ฅผ ๊ด€๋ฆฌํ•˜๋Š” ์ด์œ  (OS ์บ์‹œ๋งŒ ๋ฏฟ์„ ์ˆ˜ ์—†๊ธฐ ๋•Œ๋ฌธ์—)

์ฝ์–ด๋ณด๋ฉด ์ข‹์„ ์ž๋ฃŒ(์Šคํ„ฐ๋”” ํ›„ ๋ณด๊ฐ•)

profile
๋‚ด ์ง€์‹์„ ๊ธฐ๋กํ•˜์—ฌ, ๋‹ค๋ฅธ ์‚ฌ๋žŒ๋“ค๊ณผ ๊ณต์œ ํ•˜์—ฌ ํ•จ๊ป˜ ๋ฐœ์ „ํ•˜๋Š” ์‚ฌ๋žŒ์ด ๋˜๊ณ  ์‹ถ๋‹ค. gitbook์—๋„ ์ •๋ฆฌ์ค‘ ~

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