HugePages์˜ ์žฅ์ ๊ณผ ๋‹จ์ 

HugePages์˜ ์žฅ์ ๊ณผ ๋‹จ์ 

์ˆ˜๊ฐ•์ƒ์„ ์œ„ํ•ด ์ค€๋น„ํ•œ ๊ธฐ์‚ฌ ๋ฒˆ์—ญ "๋ฆฌ๋ˆ…์Šค ๊ด€๋ฆฌ์ž".

์ด์ „์—๋Š” Linux์—์„œ Hugepages๋ฅผ ํ…Œ์ŠคํŠธํ•˜๊ณ  ํ™œ์„ฑํ™”ํ•˜๋Š” ๋ฐฉ๋ฒ•์— ๋Œ€ํ•ด ์ด์•ผ๊ธฐํ–ˆ์Šต๋‹ˆ๋‹ค.
์ด ๊ธฐ์‚ฌ๋Š” ์‹ค์ œ๋กœ Hugepages๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ์žฅ์†Œ๊ฐ€ ์žˆ๋Š” ๊ฒฝ์šฐ์—๋งŒ ์œ ์šฉํ•ฉ๋‹ˆ๋‹ค. ๋‚˜๋Š” Hugepages๊ฐ€ ๋งˆ๋ฒ•์ฒ˜๋Ÿผ ์ƒ์‚ฐ์„ฑ์„ ํ–ฅ์ƒ์‹œํ‚ฌ ๊ฒƒ์ด๋ผ๋Š” ์ „๋ง์— ์†๋Š” ์‚ฌ๋žŒ๋“ค์„ ๋งŽ์ด ๋งŒ๋‚ฌ์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ hugepaging์€ ๋ณต์žกํ•œ ์ฃผ์ œ์ด๋ฏ€๋กœ ์ž˜๋ชป ์‚ฌ์šฉํ•˜๋ฉด ์„ฑ๋Šฅ์ด ์ €ํ•˜๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

1๋ถ€: Linux์—์„œ hugepages๊ฐ€ ํ™œ์„ฑํ™”๋˜์–ด ์žˆ๋Š”์ง€ ํ™•์ธ(์›๋ณธ ์—ฌ๊ธฐ์—)

๋ฌธ์ œ :
์‹œ์Šคํ…œ์—์„œ HugePages๊ฐ€ ํ™œ์„ฑํ™”๋˜์–ด ์žˆ๋Š”์ง€ ํ™•์ธํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

์†”๋ฃจ์…˜ :
๋งค์šฐ ๊ฐ„๋‹จํ•ฉ๋‹ˆ๋‹ค.

cat /sys/kernel/mm/transparent_hugepage/enabled

๋‹น์‹ ์€ ๋‹ค์Œ๊ณผ ๊ฐ™์€ ๊ฒƒ์„ ์–ป์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค :

always [madvise] never

์‚ฌ์šฉ ๊ฐ€๋Šฅํ•œ ์˜ต์…˜ ๋ชฉ๋ก์ด ํ‘œ์‹œ๋ฉ๋‹ˆ๋‹ค(ํ•ญ์ƒ, ๋ฏธ์น˜๊ฒŒ, ์ ˆ๋Œ€๋กœ), ํ˜„์žฌ ํ™œ์„ฑํ™”๋œ ์˜ต์…˜์€ ๊ด„ํ˜ธ ์•ˆ์— ํ‘œ์‹œ๋ฉ๋‹ˆ๋‹ค(๊ธฐ๋ณธ์ ์œผ๋กœ ๋ฏธ์น˜๊ฒŒ ํ•˜๋‹ค).

๋ฏธ์น˜๊ฒŒ ํ•˜๋‹ค ๊ทธ ์˜๋ฏธ transparent hugepages ๋‹ค์Œ์„ ์‚ฌ์šฉํ•˜์—ฌ ๋ช…์‹œ์ ์œผ๋กœ hugepage๋ฅผ ์š”์ฒญํ•˜๋Š” ๋ฉ”๋ชจ๋ฆฌ ์˜์—ญ์— ๋Œ€ํ•ด์„œ๋งŒ ํ™œ์„ฑํ™”๋ฉ๋‹ˆ๋‹ค. ๋ฏธ์น˜๊ด‘์ด(2).

ํ•ญ์ƒ ๊ทธ ์˜๋ฏธ transparent hugepages ๋ชจ๋“  ํ”„๋กœ์„ธ์Šค์— ๋Œ€ํ•ด ํ•ญ์ƒ ํ™œ์„ฑํ™”๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๋Š” ์ผ๋ฐ˜์ ์œผ๋กœ ์„ฑ๋Šฅ์„ ํ–ฅ์ƒ์‹œํ‚ค์ง€๋งŒ ๋งŽ์€ ํ”„๋กœ์„ธ์Šค๊ฐ€ ์ ์€ ์–‘์˜ ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ์†Œ๋น„ํ•˜๋Š” ์‚ฌ์šฉ ์‚ฌ๋ก€๊ฐ€ ์žˆ๋Š” ๊ฒฝ์šฐ ์ „์ฒด ๋ฉ”๋ชจ๋ฆฌ ๋กœ๋“œ๊ฐ€ ํฌ๊ฒŒ ์ฆ๊ฐ€ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๋ชป ๊ทธ ์˜๋ฏธ transparent hugepages madvise๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์š”์ฒญํ•˜๋”๋ผ๋„ ํฌํ•จ๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ์ž์„ธํ•œ ๋‚ด์šฉ์„ ์•Œ์•„๋ณด๋ ค๋ฉด ๋‹ค์Œ์œผ๋กœ ๋ฌธ์˜ํ•˜์„ธ์š”. ์„ ์  ์„œ๋ฅ˜ ๋น„์น˜ ๋ฆฌ๋ˆ…์Šค ์ปค๋„.

๊ธฐ๋ณธ๊ฐ’์„ ๋ณ€๊ฒฝํ•˜๋Š” ๋ฐฉ๋ฒ•

์˜ต์…˜ 1: ์ง์ ‘ ๋ณ€๊ฒฝ sysfs (์žฌ๋ถ€ํŒ… ํ›„ ๋งค๊ฐœ๋ณ€์ˆ˜๋Š” ๊ธฐ๋ณธ๊ฐ’์œผ๋กœ ๋Œ์•„๊ฐ‘๋‹ˆ๋‹ค):

echo always >/sys/kernel/mm/transparent_hugepage/enabled
echo madvise >/sys/kernel/mm/transparent_hugepage/enabled
echo never >/sys/kernel/mm/transparent_hugepage/enabled

์˜ต์…˜ 2: ์ˆ˜์ •๋œ ๊ตฌ์„ฑ์œผ๋กœ ์ปค๋„์„ ๋‹ค์‹œ ์ปดํŒŒ์ผํ•˜์—ฌ ์‹œ์Šคํ…œ ๊ธฐ๋ณธ๊ฐ’์„ ๋ณ€๊ฒฝํ•ฉ๋‹ˆ๋‹ค(์ด ์˜ต์…˜์€ ์‚ฌ์šฉ์ž ์ •์˜ ์ปค๋„์„ ์‚ฌ์šฉํ•˜๋Š” ๊ฒฝ์šฐ์—๋งŒ ๊ถŒ์žฅ๋ฉ๋‹ˆ๋‹ค).

  • ํ•ญ์ƒ ๊ธฐ๋ณธ์ ์œผ๋กœ ์„ค์ •ํ•˜๋ ค๋ฉด ๋‹ค์Œ์„ ์‚ฌ์šฉํ•˜์‹ญ์‹œ์˜ค.
    CONFIG_TRANSPARENT_HUGEPAGE_ALWAYS=y
    # Comment out CONFIG_TRANSPARENT_HUGEPAGE_MADVISE=y
  • madvise๋ฅผ ๊ธฐ๋ณธ๊ฐ’์œผ๋กœ ์„ค์ •ํ•˜๋ ค๋ฉด ๋‹ค์Œ์„ ์‚ฌ์šฉํ•˜์‹ญ์‹œ์˜ค.
    CONFIG_TRANSPARENT_HUGEPAGE_MADVISE=y
    # Comment out CONFIG_TRANSPARENT_HUGEPAGE_ALWAYS=y

2๋ถ€: HugePages์˜ ์žฅ์ ๊ณผ ๋‹จ์ 

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

์šฐ๋ฆฌ๋Š” Linux๋ฅผ ์‹คํ–‰ํ•˜๋Š” 64๋น„ํŠธ x86 ์‹œ์Šคํ…œ์— ๋Œ€ํ•ด ์ด์•ผ๊ธฐํ•˜๊ณ  ์žˆ์œผ๋ฉฐ ๊ฑฐ์˜ โ€‹โ€‹๋ชจ๋“  ์ตœ์‹  Linux์˜ ๊ฒฝ์šฐ์™€ ๋งˆ์ฐฌ๊ฐ€์ง€๋กœ ์‹œ์Šคํ…œ์ด ํˆฌ๋ช…ํ•œ hugepage๋ฅผ ์ง€์›ํ•œ๋‹ค๊ณ  ๊ฐ€์ •ํ•˜๊ณ  ์žˆ๋‹ค๋Š” ์ ์— ์œ ์˜ํ•˜์‹ญ์‹œ์˜ค(๊ฑฐ๋Œ€ ํŽ˜์ด์ง€๋ฅผ ๋ฎ์–ด์“ฐ์ง€ ์•Š๋Š”๋‹ค๋Š” ๊ฒƒ์€ ๋‹จ์ ์ด ์•„๋‹ˆ๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค). ํ™˜๊ฒฝ.

์ž์„ธํ•œ ๊ธฐ์ˆ  ์„ค๋ช…์€ ์•„๋ž˜ ๋งํฌ์— ์ฒจ๋ถ€ํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค.

๊ฐ€์ƒ ๋ฉ”๋ชจ๋ฆฌ

C++ ํ”„๋กœ๊ทธ๋ž˜๋จธ๋ผ๋ฉด ๋ฉ”๋ชจ๋ฆฌ์˜ ๊ฐœ์ฒด์— ํŠน์ • ์ฃผ์†Œ(ํฌ์ธํ„ฐ ๊ฐ’)๊ฐ€ ์žˆ๋‹ค๋Š” ๊ฒƒ์„ ์•Œ๊ณ  ์žˆ์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค.

๊ทธ๋Ÿฌ๋‚˜ ์ด๋Ÿฌํ•œ ์ฃผ์†Œ๊ฐ€ ๋ฐ˜๋“œ์‹œ ๋ฉ”๋ชจ๋ฆฌ์˜ ๋ฌผ๋ฆฌ์  ์ฃผ์†Œ(RAM ์ฃผ์†Œ)๋ฅผ ๋ฐ˜์˜ํ•˜๋Š” ๊ฒƒ์€ ์•„๋‹™๋‹ˆ๋‹ค. ๊ฐ€์ƒ ๋ฉ”๋ชจ๋ฆฌ์˜ ์ฃผ์†Œ๋ฅผ ๋‚˜ํƒ€๋ƒ…๋‹ˆ๋‹ค. ํ”„๋กœ์„ธ์„œ์—๋Š” ์ปค๋„์ด ๊ฐ€์ƒ ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ๋ฌผ๋ฆฌ์  ์œ„์น˜์— ๋งคํ•‘ํ•˜๋Š” ๋ฐ ๋„์›€์ด ๋˜๋Š” ํŠน์ˆ˜ MMU(๋ฉ”๋ชจ๋ฆฌ ๊ด€๋ฆฌ ์žฅ์น˜) ๋ชจ๋“ˆ์ด ์žˆ์Šต๋‹ˆ๋‹ค.

์ด ์ ‘๊ทผ ๋ฐฉ์‹์—๋Š” ๋งŽ์€ ์žฅ์ ์ด ์žˆ์ง€๋งŒ ๊ฐ€์žฅ ์ค‘์š”ํ•œ ๊ฒƒ์€ ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

  • ์„ฑ๋Šฅ(๋‹ค์–‘ํ•œ ์ด์œ ๋กœ)
  • ํ”„๋กœ๊ทธ๋žจ ๊ฒฉ๋ฆฌ, ์ฆ‰ ์–ด๋–ค ํ”„๋กœ๊ทธ๋žจ๋„ ๋‹ค๋ฅธ ํ”„๋กœ๊ทธ๋žจ์˜ ๋ฉ”๋ชจ๋ฆฌ์—์„œ ์ฝ์„ ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.

ํŽ˜์ด์ง€๋ž€ ๋ฌด์—‡์ž…๋‹ˆ๊นŒ?

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

์ฒ˜๋ฆฌํ•˜๋Š” ๋Œ€๋ถ€๋ถ„์˜ ํŽ˜์ด์ง€๋Š” RAM์„ ๊ฐ€๋ฆฌํ‚ค๊ฑฐ๋‚˜ ์Šค์™‘๋ฉ๋‹ˆ๋‹ค. ์ฆ‰, ํ•˜๋“œ ๋“œ๋ผ์ด๋ธŒ๋‚˜ SSD์— ์ €์žฅ๋ฉ๋‹ˆ๋‹ค. ์ปค๋„์€ ๊ฐ ํŽ˜์ด์ง€์˜ ๋ฌผ๋ฆฌ์  ๋ ˆ์ด์•„์›ƒ์„ ๊ด€๋ฆฌํ•ฉ๋‹ˆ๋‹ค. ์Šคํ‘ธํ•‘๋œ ํŽ˜์ด์ง€์— ์•ก์„ธ์Šคํ•˜๋ฉด ์ปค๋„์€ ๋ฉ”๋ชจ๋ฆฌ์— ์•ก์„ธ์Šคํ•˜๋ ค๋Š” ์Šค๋ ˆ๋“œ๋ฅผ ์ค‘์ง€ํ•˜๊ณ  ํ•˜๋“œ ๋“œ๋ผ์ด๋ธŒ/SSD์—์„œ ํŽ˜์ด์ง€๋ฅผ RAM์œผ๋กœ ์ฝ์€ ๋‹ค์Œ ์Šค๋ ˆ๋“œ๋ฅผ ๊ณ„์† ์‹คํ–‰ํ•ฉ๋‹ˆ๋‹ค.

์ด ํ”„๋กœ์„ธ์Šค๋Š” ์ŠคํŠธ๋ฆผ ํˆฌ๋ช…ํ•˜๋ฏ€๋กœ ๋ฐ˜๋“œ์‹œ HDD/SSD์—์„œ ์ง์ ‘ ์ฝ์„ ํ•„์š”๋Š” ์—†์Šต๋‹ˆ๋‹ค. ์ผ๋ฐ˜ ํŽ˜์ด์ง€์˜ ํฌ๊ธฐ๋Š” 4096๋ฐ”์ดํŠธ์ž…๋‹ˆ๋‹ค. Hugepages ํฌ๊ธฐ๋Š” 2MB์ž…๋‹ˆ๋‹ค.

๋ฒˆ์—ญ ์—ฐ๊ด€ ๋ฒ„ํผ(TLB)

ํ”„๋กœ๊ทธ๋žจ์ด ๋ฉ”๋ชจ๋ฆฌ ํŽ˜์ด์ง€์— ์•ก์„ธ์Šคํ•  ๋•Œ CPU๋Š” ๋ฐ์ดํ„ฐ๋ฅผ ์ฝ์„ ๋ฌผ๋ฆฌ์  ํŽ˜์ด์ง€(์ฆ‰, ๊ฐ€์ƒ ์ฃผ์†Œ ๋งต์ด ์žˆ์–ด์•ผ ํ•จ)๋ฅผ ์•Œ์•„์•ผ ํ•ฉ๋‹ˆ๋‹ค.

์ปค๋„์—๋Š” ์‚ฌ์šฉ๋˜๋Š” ํŽ˜์ด์ง€์— ๋Œ€ํ•œ ๋ชจ๋“  ์ •๋ณด๊ฐ€ ํฌํ•จ๋œ ๋ฐ์ดํ„ฐ ๊ตฌ์กฐ(ํŽ˜์ด์ง€ ํ…Œ์ด๋ธ”)๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด ๋ฐ์ดํ„ฐ ๊ตฌ์กฐ๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ๊ฐ€์ƒ ์ฃผ์†Œ๋ฅผ ์‹ค์ œ ์ฃผ์†Œ์— ๋งคํ•‘ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

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

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

๋ฌผ๋ฆฌ์  ์žฅ์น˜๋กœ ๊ตฌํ˜„๋˜๊ธฐ ๋•Œ๋ฌธ์—(์• ์ดˆ์— ์†๋„๊ฐ€ ๋นจ๋ผ์ง) ์šฉ๋Ÿ‰์ด ์ œํ•œ๋ฉ๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ ๋” ๋งŽ์€ ํŽ˜์ด์ง€์— ์•ก์„ธ์Šคํ•˜๋ ค๋Š” ๊ฒฝ์šฐ TLB๋Š” ๋ชจ๋“  ํŽ˜์ด์ง€์— ๋Œ€ํ•œ ๋งคํ•‘์„ ์ €์žฅํ•  ์ˆ˜ ์—†์œผ๋ฏ€๋กœ ํ”„๋กœ๊ทธ๋žจ ์‹คํ–‰ ์†๋„๊ฐ€ ํ›จ์”ฌ ๋Š๋ ค์ง‘๋‹ˆ๋‹ค.

๊ฑฐ๋Œ€ํ•œ ํŽ˜์ด์ง€๊ฐ€ ๊ตฌ์กฐํ•˜๋Ÿฌ ์˜ต๋‹ˆ๋‹ค

๊ทธ๋ ‡๋‹ค๋ฉด TLB ์˜ค๋ฒ„ํ”Œ๋กœ๋ฅผ ๋ฐฉ์ง€ํ•˜๋ ค๋ฉด ์–ด๋–ป๊ฒŒ ํ•ด์•ผ ํ• ๊นŒ์š”? (์šฐ๋ฆฌ๋Š” ํ”„๋กœ๊ทธ๋žจ์— ์—ฌ์ „ํžˆ ๋™์ผํ•œ ์–‘์˜ ๋ฉ”๋ชจ๋ฆฌ๊ฐ€ ํ•„์š”ํ•˜๋‹ค๊ณ  ๊ฐ€์ •ํ•ฉ๋‹ˆ๋‹ค).

์ด๊ฒƒ์ด ๋ฐ”๋กœ Hugepages๊ฐ€ ๋“ฑ์žฅํ•˜๋Š” ๊ณณ์ž…๋‹ˆ๋‹ค. ๋‹จ ํ•˜๋‚˜์˜ TLB ํ•ญ๋ชฉ์ด ํ•„์š”ํ•œ 4096๋ฐ”์ดํŠธ ๋Œ€์‹  ์ด์ œ ํ•˜๋‚˜์˜ TLB ํ•ญ๋ชฉ์ด ๋ฌด๋ ค 2MB๋ฅผ ๊ฐ€๋ฆฌํ‚ฌ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. TLB์— 512๊ฐœ์˜ ํ•ญ๋ชฉ์ด ์žˆ๋‹ค๊ณ  ๊ฐ€์ •ํ•ด ๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค. ์—ฌ๊ธฐ์„œ๋Š” Hugepages ์—†์ด ์ผ์น˜์‹œํ‚ฌ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

4096 bโ‹…512=2 MB

๊ทธ๋ ‡๋‹ค๋ฉด ์šฐ๋ฆฌ๋Š” ์–ด๋–ป๊ฒŒ ๊ทธ๋“ค๊ณผ ๋น„๊ตํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๊นŒ?

2 MBโ‹…512=1 GB

์ด๊ฒƒ์ด ๋ฐ”๋กœ Hugepages๊ฐ€ ๋ฉ‹์ง„ ์ด์œ ์ž…๋‹ˆ๋‹ค. ๋งŽ์€ ๋…ธ๋ ฅ์„ ๋“ค์ด์ง€ ์•Š๊ณ ๋„ ์ƒ์‚ฐ์„ฑ์„ ํ–ฅ์ƒ์‹œํ‚ฌ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ์—ฌ๊ธฐ์—๋Š” ์ค‘์š”ํ•œ ๊ฒฝ๊ณ ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค.

๊ฑฐ๋Œ€ํ•œ ํŽ˜์ด์ง€ ์Šคํ‘ธํ•‘

์ปค๋„์€ ๊ฐ ๋ฉ”๋ชจ๋ฆฌ ํŽ˜์ด์ง€๊ฐ€ ์‚ฌ์šฉ๋˜๋Š” ๋นˆ๋„๋ฅผ ์ž๋™์œผ๋กœ ๋ชจ๋‹ˆํ„ฐ๋งํ•ฉ๋‹ˆ๋‹ค. ๋ฌผ๋ฆฌ์  ๋ฉ”๋ชจ๋ฆฌ(RAM)๊ฐ€ ์ถฉ๋ถ„ํ•˜์ง€ ์•Š์œผ๋ฉด ์ปค๋„์€ ๋œ ์ค‘์š”ํ•œ(๋œ ์ž์ฃผ ์‚ฌ์šฉ๋˜๋Š”) ํŽ˜์ด์ง€๋ฅผ ํ•˜๋“œ ๋””์Šคํฌ๋กœ ์ด๋™ํ•˜์—ฌ ๋” ์ค‘์š”ํ•œ ํŽ˜์ด์ง€๋ฅผ ์œ„ํ•ด ์ผ๋ถ€ RAM์„ ํ™•๋ณดํ•ฉ๋‹ˆ๋‹ค.
์›์น™์ ์œผ๋กœ Hugepages์—๋„ ๋™์ผํ•˜๊ฒŒ ์ ์šฉ๋ฉ๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ์ปค๋„์€ ๊ฐœ๋ณ„ ๋ฐ”์ดํŠธ๊ฐ€ ์•„๋‹Œ ์ „์ฒด ํŽ˜์ด์ง€๋งŒ ๊ตํ™˜ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๋‹ค์Œ๊ณผ ๊ฐ™์€ ํ”„๋กœ๊ทธ๋žจ์ด ์žˆ๋‹ค๊ณ  ๊ฐ€์ •ํ•ด ๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.

char* mymemory = malloc(2*1024*1024); // ะ’ะพะทัŒะผะตะผ ัั‚ะพ ะทะฐ ะพะดะฝัƒ Hugepage!
// ะ—ะฐะฟะพะปะฝะธะผ mymemory ะบะฐะบะธะผะธ-ะปะธะฑะพ ะดะฐะฝะฝั‹ะผะธ
// ะกะดะตะปะฐะตะผ ะผะฝะพะณะพ ะดั€ัƒะณะธั… ะฒะตั‰ะตะน,
// ะบะพั‚ะพั€ั‹ะต ะฟั€ะธะฒะตะดัƒั‚ ะบ ะฟะพะดะผะตะฝะต ัั‚ั€ะฐะฝะธั†ั‹ mymemory
// ...
// ะ—ะฐะฟั€ะพัะธะผ ะดะพัั‚ัƒะฟ ั‚ะพะปัŒะบะพ ะบ ะฟะตั€ะฒะพะผัƒ ะฑะฐะนั‚ัƒ
putchar(mymemory[0]); 

์ด ๊ฒฝ์šฐ ์ปค๋„์€ ์‚ฌ์šฉ์ž๊ฐ€ 2๋ฐ”์ดํŠธ๋ฅผ ์ฝ์„ ์ˆ˜ ์žˆ๋„๋ก ํ•˜๋“œ ๋“œ๋ผ์ด๋ธŒ/SSD์—์„œ ์ตœ๋Œ€ 4096MB์˜ ์ •๋ณด๋ฅผ ๋Œ€์ฒด(์ฝ๊ธฐ)ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์ผ๋ฐ˜ ํŽ˜์ด์ง€์˜ ๊ฒฝ์šฐ ํ•˜๋“œ ๋“œ๋ผ์ด๋ธŒ/SSD์—์„œ XNUMX๋ฐ”์ดํŠธ๋งŒ ์ฝ์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

๋”ฐ๋ผ์„œ hugepage๋ฅผ ์žฌ์ •์˜ํ•˜๋ฉด ์ „์ฒด ํŽ˜์ด์ง€์— ์•ก์„ธ์Šคํ•ด์•ผ ํ•˜๋Š” ๊ฒฝ์šฐ์—๋งŒ ์ฝ๋Š” ๊ฒƒ์ด ๋” ๋น ๋ฆ…๋‹ˆ๋‹ค. ์ด๋Š” ๋ฉ”๋ชจ๋ฆฌ์˜ ๋‹ค๋ฅธ ๋ถ€๋ถ„์— ๋ฌด์ž‘์œ„๋กœ ์•ก์„ธ์Šคํ•˜๋ ค๊ณ  ์‹œ๋„ํ•˜๊ณ  ๋ช‡ ํ‚ฌ๋กœ๋ฐ”์ดํŠธ๋งŒ ์ฝ๋Š” ๊ฒฝ์šฐ ์ผ๋ฐ˜ ํŽ˜์ด์ง€๋ฅผ ์‚ฌ์šฉํ•ด์•ผ ํ•˜๋ฉฐ ๋‹ค๋ฅธ ๊ฒƒ์— ๋Œ€ํ•ด ๊ฑฑ์ •ํ•˜์ง€ ์•Š์•„์•ผ ํ•จ์„ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค.

๋ฐ˜๋ฉด์— ๋Œ€๋Ÿ‰์˜ ๋ฉ”๋ชจ๋ฆฌ์— ์ˆœ์ฐจ์ ์œผ๋กœ ์•ก์„ธ์Šคํ•ด์•ผ ํ•˜๋Š” ๊ฒฝ์šฐ hugepages๊ฐ€ ์„ฑ๋Šฅ์„ ํ–ฅ์ƒ์‹œํ‚ต๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ์ถ”์ƒ์ ์ธ ์†Œํ”„ํŠธ์›จ์–ด๊ฐ€ ์•„๋‹Œ ์ง์ ‘ ํ…Œ์ŠคํŠธํ•˜์—ฌ ๋ฌด์—‡์ด ๋” ๋นจ๋ฆฌ ์ž‘๋™ํ•˜๋Š”์ง€ ํ™•์ธํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

๋ฉ”๋ชจ๋ฆฌ ํ• ๋‹น

C๋ฅผ ์ž‘์„ฑํ•˜๋ฉด ๋‹ค์Œ์„ ์‚ฌ์šฉํ•˜์—ฌ ํž™์—์„œ ์ž„์˜๋กœ ์ž‘์€(๋˜๋Š” ๊ฑฐ์˜ ์ž„์˜๋กœ ํฐ) ๋ฉ”๋ชจ๋ฆฌ ์–‘์„ ์š”์ฒญํ•  ์ˆ˜ ์žˆ๋‹ค๋Š” ๊ฒƒ์„ ์•Œ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. malloc(). 30๋ฐ”์ดํŠธ์˜ ๋ฉ”๋ชจ๋ฆฌ๊ฐ€ ํ•„์š”ํ•˜๋‹ค๊ณ  ๊ฐ€์ •ํ•ด ๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.

char* mymemory = malloc(30);

ํ”„๋กœ๊ทธ๋ž˜๋จธ์—๊ฒŒ๋Š” ์šด์˜ ์ฒด์ œ์— 30๋ฐ”์ดํŠธ์˜ ๋ฉ”๋ชจ๋ฆฌ๋ฅผ "์š”์ฒญ"ํ•˜๊ณ  ์ผ๋ถ€ ๊ฐ€์ƒ ๋ฉ”๋ชจ๋ฆฌ์— ๋Œ€ํ•œ ํฌ์ธํ„ฐ๋ฅผ ๋ฐ˜ํ™˜ํ•˜๋Š” ๊ฒƒ์ฒ˜๋Ÿผ ๋ณด์ผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ํ•˜์ง€๋งŒ ์‹ค์ œ๋กœ๋Š” malloc () ํ•จ์ˆ˜ ๋‚ด์—์„œ ํ˜ธ์ถœํ•˜๋Š” C ํ•จ์ˆ˜์ผ ๋ฟ์ž…๋‹ˆ๋‹ค. brk ๋ฐ sbrk ์šด์˜ ์ฒด์ œ์—์„œ ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ์š”์ฒญํ•˜๊ฑฐ๋‚˜ ํ•ด์ œํ•ฉ๋‹ˆ๋‹ค.

๊ทธ๋Ÿฌ๋‚˜ ๊ฐ ํ• ๋‹น์— ๋Œ€ํ•ด ์ ์  ๋” ๋งŽ์€ ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ์š”์ฒญํ•˜๋Š” ๊ฒƒ์€ ๋น„ํšจ์œจ์ ์ž…๋‹ˆ๋‹ค. ์ผ๋ถ€ ๋ฉ”๋ชจ๋ฆฌ ์„ธ๊ทธ๋จผํŠธ๊ฐ€ ์ด๋ฏธ ํ•ด์ œ๋˜์—ˆ์„ ๊ฐ€๋Šฅ์„ฑ์ด ๋†’์Šต๋‹ˆ๋‹ค. (free()), ์žฌ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. malloc() ํ•ด์ œ๋œ ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ์žฌ์‚ฌ์šฉํ•˜๊ธฐ ์œ„ํ•ด ๋งค์šฐ ๋ณต์žกํ•œ ์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ๊ตฌํ˜„ํ•ฉ๋‹ˆ๋‹ค.

๋™์‹œ์— ๋ชจ๋“  ์ผ์ด ๋‹น์‹ ์—๊ฒŒ๋Š” ๋ˆˆ์— ๋„์ง€ ์•Š๊ฒŒ ์ผ์–ด๋‚˜๋Š”๋ฐ ์™œ ๊ฑฑ์ •ํ•ด์•ผํ•ฉ๋‹ˆ๊นŒ? ํ•˜์ง€๋งŒ ๋„์ „์ด๊ธฐ ๋•Œ๋ฌธ์— free() ๊ทธ๋Ÿฐ ๋œป์€ ์•„๋‹ˆ์•ผ ๋ฉ”๋ชจ๋ฆฌ๋Š” ๋ฐ˜๋“œ์‹œ ์šด์˜ ์ฒด์ œ๋กœ ์ฆ‰์‹œ ๋ฐ˜ํ™˜๋ฉ๋‹ˆ๋‹ค..

๋ฉ”๋ชจ๋ฆฌ ์กฐ๊ฐํ™”๋ผ๋Š” ๊ฒƒ์ด ์žˆ์Šต๋‹ˆ๋‹ค. ๊ทน๋‹จ์ ์ธ ๊ฒฝ์šฐ์—๋Š” ๋ช‡ ๋ฐ”์ดํŠธ๋งŒ ์‚ฌ์šฉ๋˜๋Š” ํž™ ์„ธ๊ทธ๋จผํŠธ๊ฐ€ ์žˆ๊ณ  ๊ทธ ์‚ฌ์ด์˜ ๋ชจ๋“  ํ•ญ๋ชฉ์€ ํ•ด์ œ๋ฉ๋‹ˆ๋‹ค. (free()).

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

hugepages์˜ ์„ ํƒ์  ์‚ฌ์šฉ

์ด ๊ธฐ์‚ฌ๋ฅผ ์ฝ์€ ํ›„, hugepages๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ํ”„๋กœ๊ทธ๋žจ์˜ ์–ด๋Š ๋ถ€๋ถ„์ด ์ด์ ์„ ์–ป์„ ์ˆ˜ ์žˆ๊ณ  ์–ด๋Š ๋ถ€๋ถ„์€ ์ด์ ์„ ์–ป์„ ์ˆ˜ ์—†๋Š”์ง€ ํŒ๋‹จํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋ ‡๋‹ค๋ฉด hugepages๋ฅผ ํ™œ์„ฑํ™”ํ•ด์•ผ ํ• ๊นŒ์š”?

๋‹คํ–‰ํžˆ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค madvise()์œ ์šฉํ•œ ๋ฉ”๋ชจ๋ฆฌ ์˜์—ญ์— ๋Œ€ํ•ด์„œ๋งŒ ๊ฑฐ๋Œ€ํ•œ ํŽ˜์ด์ง•์„ ํ™œ์„ฑํ™”ํ•ฉ๋‹ˆ๋‹ค.

๋จผ์ € ๋‹ค์Œ์„ ์‚ฌ์šฉํ•˜์—ฌ hugepages๊ฐ€ madvise() ๋ชจ๋“œ์—์„œ ์‹คํ–‰๋˜๊ณ  ์žˆ๋Š”์ง€ ํ™•์ธํ•˜์„ธ์š”. ๋ช…๋ น ๊ธฐ์‚ฌ์˜ ์‹œ์ž‘ ๋ถ€๋ถ„์—.

๊ทธ๋Ÿฐ ๋‹ค์Œ ์‚ฌ์šฉ madvise()hugepages๋ฅผ ์‚ฌ์šฉํ•  ์œ„์น˜๋ฅผ ์ปค๋„์— ์ •ํ™•ํžˆ ์•Œ๋ ค์ค๋‹ˆ๋‹ค.

#include <sys/mman.h>
// ะะปะปะพั†ะธั€ัƒะนั‚ะต ะฑะพะปัŒัˆะพะต ะบะพะปะธั‡ะตัั‚ะฒะพ ะฟะฐะผัั‚ะธ, ะบะพั‚ะพั€ัƒัŽ ะฑัƒะดะตั‚ะต ะธัะฟะพะปัŒะทะพะฒะฐั‚ัŒ
size_t size = 256*1024*1024;
char* mymemory = malloc(size);
// ะŸั€ะพัั‚ะพ ะฒะบะปัŽั‡ะธั‚ะต hugepagesโ€ฆ
madvise(mymemory, size, MADV_HUGEPAGE);
// โ€ฆ ะธ ะทะฐะดะฐะนั‚ะต ัะปะตะดัƒัŽั‰ะตะต
madvise(mymemory, size, MADV_HUGEPAGE | MADV_SEQUENTIAL)

์ด ๋ฐฉ๋ฒ•์€ ๋‹จ์ˆœํžˆ ๋ฉ”๋ชจ๋ฆฌ ๊ด€๋ฆฌ ๋ฐฉ๋ฒ•์— ๋Œ€ํ•œ ์ปค๋„์— ๋Œ€ํ•œ ์กฐ์–ธ์ผ ๋ฟ์ž…๋‹ˆ๋‹ค. ์ด๋Š” ์ปค๋„์ด ํŠน์ • ๋ฉ”๋ชจ๋ฆฌ์— ๋Œ€ํ•ด ์ž๋™์œผ๋กœ hugepages๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค๋Š” ์˜๋ฏธ๋Š” ์•„๋‹™๋‹ˆ๋‹ค.

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

๋ฌด์—‡์„ ์ฝ์„๊นŒ์š”?

์งˆ๋ฌธ์ด์žˆ๋‹ค? ๋Œ“๊ธ€์— ์ ์–ด์ฃผ์„ธ์š”!

์ถœ์ฒ˜ : habr.com

์ฝ”๋ฉ˜ํŠธ๋ฅผ ์ถ”๊ฐ€