์ด ๋ฌธ์„œ์˜ ์›๋ณธ์€ ์™ธ๋ถ€ ์œ„ํ‚ค์—์„œ ๊ฐ€์ ธ์™”์Šต๋‹ˆ๋‹ค.
1. ๊ฐœ์š”
1.1. ccNUMA1.2. vs ํด๋Ÿฌ์Šคํ„ฐ
2. ์†Œํ”„ํŠธ์›จ์–ด ์ง€์›
2.1. ๋ฆฌ๋ˆ…์Šค2.2. Microsoft2.3. ๊ตฌ๊ธ€2.4. ์˜ค๋ผํด
3. ๊ด€๋ จ ํ•ญ๋ชฉ

Non-Uniformed Memory Access
๋ถˆ๊ท ์ผ ๊ธฐ์–ต์žฅ์น˜ ์ ‘๊ทผ




NUMA ๊ฐœ๋žต๋„.


์ธํ…” ๋„คํ• ๋ ˜ CPU์˜ NUMA ๊ตฌ์กฐ๋„.

1. ๊ฐœ์š”[ํŽธ์ง‘]

๋ฉ”๋ชจ๋ฆฌ์— ์ ‘๊ทผํ•˜๋Š” ์‹œ๊ฐ„์ด CPU์™€ ๋ฉ”๋ชจ๋ฆฌ์˜ ์ƒ๋Œ€์ ์ธ ์œ„์น˜์— ๋”ฐ๋ผ ๋‹ฌ๋ผ์ง€๋Š” ์ปดํ“จํ„ฐ ๋ฉ”๋ชจ๋ฆฌ ์„ค๊ณ„ ๋ฐฉ๋ฒ•. ๊ฐ CPU๋Š” ๋ฉ”๋ชจ๋ฆฌ์˜ ์ผ๋ถ€๋ฅผ ์ž์‹ ์˜ ์ง€์—ญ ๋ฉ”๋ชจ๋ฆฌ(Local Memory)๋กœ ๊ฐ€์ง€๊ณ  ์žˆ์œผ๋ฉฐ ์ด ์ง€์—ญ ๋ฉ”๋ชจ๋ฆฌ์— ์ ‘๊ทผํ•˜๋Š” ์†๋„๋Š” ์›๊ฒฉ ๋ฉ”๋ชจ๋ฆฌ(Remote Memory)์— ์ ‘๊ทผํ•˜๋Š” ์†๋„๋ณด๋‹ค ํ›จ์”ฌ ๋น ๋ฅด๋‹ค.

๊ฐ„๋‹จํžˆ ์˜ˆ๋ฅผ ๋“ค์–ด ์‹œ์Šคํ…œ์— CPU ์†Œ์ผ“์ด ๋„ค ๊ฐœ ์žˆ๊ณ , 512GB์˜ ๋ฉ”๋ชจ๋ฆฌ๊ฐ€ ์„ค์น˜๋˜์–ด ์žˆ๋‹ค๋ฉด ๋ฌผ๋ฆฌ ์ฃผ์†Œ 0~128G-1๋ฒˆ์ง€๊นŒ์ง€์˜ ๋ฉ”๋ชจ๋ฆฌ๋Š” 0๋ฒˆ ์†Œ์ผ“์˜, 128G~256G-1๋ฒˆ์ง€๊นŒ์ง€์˜ ๋ฉ”๋ชจ๋ฆฌ๋Š” 1๋ฒˆ ์†Œ์ผ“์˜ ์ง€์—ญ ๋ฉ”๋ชจ๋ฆฌ๊ฐ€ ๋˜๋Š” ๋ฐฉ์‹. ๊ฐ ์†Œ์ผ“์—์„œ ์ง€์—ญ ๋ฉ”๋ชจ๋ฆฌ์— ์ ‘๊ทผํ•  ๋•Œ์—๋Š” ์›๊ฒฉ ๋ฉ”๋ชจ๋ฆฌ์— ์ ‘๊ทผํ•  ๋•Œ๋ณด๋‹ค ํ›จ์”ฌ ๋น ๋ฅด๊ฒŒ ๋ฐ์ดํ„ฐ๋ฅผ ์ฝ๊ณ  ์“ธ ์ˆ˜ ์žˆ๋‹ค. ํ•˜๋‚˜์˜ CPU ์†Œ์ผ“์— ์ฝ”์–ด ์—ฌ๋Ÿฌ๊ฐœ๊ฐ€ ๋“ค์–ด๊ฐ€ ์žˆ์„ ์ˆ˜ ์žˆ๊ธฐ์— ๊ฐ™์€ ์ง€์—ญ ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ์‚ฌ์šฉํ•˜๋Š” CPU ์ฝ”์–ด๋“ค์„ ๋ฌถ์–ด์„œ ํ•˜๋‚˜์˜ NUMA ๋…ธ๋“œ๋กœ ์นœ๋‹ค. 8์ฝ”์–ด 4์†Œ์ผ“ CPU๋ผ๋ฉด (ํ•˜์ดํผ์Šค๋ ˆ๋”ฉ์„ ๊ฐ€์ •ํ•˜์ง€ ์•Š์„ ๋•Œ์—) 0~7๋ฒˆ ์ฝ”์–ด๋Š” NUMA ๋…ธ๋“œ 0๋ฒˆ, 8~15๋ฒˆ ์ฝ”์–ด๋Š” NUMA ๋…ธ๋“œ 1๋ฒˆ๊ณผ ๊ฐ™์€ ๋ฐฉ์‹.

RAM ํ•ญ๋ชฉ์— ์„ค๋ช…๋˜์–ด์žˆ๋“ฏ์ด ๋ณธ๋ž˜ '์ž„์˜ ์ ‘๊ทผ ๋ฉ”๋ชจ๋ฆฌ'๋Š” ๋ฉ”๋ชจ๋ฆฌ์ƒ์˜ ์–ด๋А ์œ„์น˜์—๋“  ์ œํ•œ์—†์ด ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ๋‹ค. ๊ทธ๋Ÿฐ๋ฐ ์†Œ์ผ“ ์—ฌ๋Ÿฌ๊ฐœ์— CPU๋ฅผ ๊ฝ‚๊ฑฐ๋‚˜ ์•„์˜ˆ CPU ํ•˜๋‚˜์— ์—ฐ์‚ฐ ์žฅ์น˜๋ฅผ ๋‹ค์ˆ˜ ๋ฐ•์•„ ์‚ฌ์šฉํ•˜๋ฉด์„œ ๋ชจ๋“  ๋ฉ”๋ชจ๋ฆฌ์— ๋™์ผํ•˜๊ฒŒ ์ ‘๊ทผํ•˜๊ฒŒ ๋˜๋ฉด ํ•œ ๋ฒˆ์— ํ•˜๋‚˜์˜ ํ”„๋กœ์„ธ์„œ๋งŒ์ด ๋ฉ”๋ชจ๋ฆฌ ๋ฒ„์Šค๋ฅผ ์ ์œ ํ•  ์ˆ˜ ์žˆ๊ฒŒ ๋˜์–ด ๋‹ค๋ฅธ ํ”„๋กœ์„ธ์„œ๋“ค์€ ๊ทธ ๋™์•ˆ ๋Œ€๊ธฐํ•˜์—ฌ์•ผ ํ•˜๋Š” ํ˜„์ƒ์ด ๋ฐœ์ƒํ•œ๋‹ค. ๋งŒ์ผ ์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ์ž˜ ์„ค๊ณ„ํ•ด์„œ ๊ฐ CPU๊ฐ€ ๋ฉ”๋ชจ๋ฆฌ์˜ ์„œ๋กœ ๋‹ค๋ฅธ ์œ„์น˜์— ์ ‘๊ทผํ•˜๊ฒŒ ํ•˜๊ณ  CPU๊ฐ„์— ๊ฐ„์„ญ์ด ์—†์ด ๊ฐ ๋ฉ”๋ชจ๋ฆฌ์— ์ ‘๊ทผํ•˜์—ฌ ๋ณ‘๋ ฌ๋กœ ๋ฐ์ดํ„ฐ๋ฅผ ์ฒ˜๋ฆฌํ•œ๋‹ค๋ฉด ๊ทธ๋งŒํผ์˜ ์„ฑ๋Šฅ ํ–ฅ์ƒ์„ ์–ป์„ ์ˆ˜ ์žˆ๊ฒŒ ๋œ๋‹ค.[1] ์—ฌ๊ธฐ์—์„œ ๊ฐ CPU ์ „์šฉ ๋ฉ”๋ชจ๋ฆฌ๋ผ๋Š” ๊ฐœ๋…์ด ์ƒ๊ธฐ๊ฒŒ ๋˜์—ˆ๋‹ค.

๊ทธ๋ฆฌ๊ณ  CPU์˜ ์ž‘๋™ ์†๋„๊ฐ€ ๋นจ๋ผ์ง€๋ฉด์„œ CPU์™€ ๋ฉ”๋ชจ๋ฆฌ ์‚ฌ์ด์˜ ๋ฌผ๋ฆฌ์ ์ธ ๊ฑฐ๋ฆฌ๊ฐ€ ๋ฉ”๋ชจ๋ฆฌ ์ ‘๊ทผ ์†๋„์— ์˜ํ–ฅ์„ ๋ผ์น˜๊ธฐ ์‹œ์ž‘ํ•˜์˜€๋‹ค. 2GHz๋กœ ์ž‘๋™ํ•˜๋Š” CPU๋ผ๋ฉด ๋ฐ”๋กœ ์ฝ”์•ž์— ์žˆ๋Š” ๋ฉ”๋ชจ๋ฆฌ์— ์ ‘๊ทผํ•  ๋•Œ๋ณด๋‹ค 15cm ๊ฑฐ๋ฆฌ๊ฐ€ ์žˆ๋Š” ๋ฉ”๋ชจ๋ฆฌ์— ์ ‘๊ทผํ•  ๋•Œ ํ•œ ํด๋Ÿญ์„ ๋” ๋‚ญ๋น„ํ•˜๊ฒŒ ๋œ๋‹ค.[2] ๋ฉ”์ธ๋ณด๋“œ์— CPU ์—ฌ๋Ÿฌ ๊ฐœ๋ฅผ ๊ฝ‚์„ ์ˆ˜ ์žˆ๋‹ค๋ฉด CPU์™€ ๋ฉ”๋ชจ๋ฆฌ ๋ฑ…ํฌ๊ฐ€ ๋ฒˆ๊ฐˆ์•„๊ฐ€๋ฉฐ ๋ฐฐ์น˜๋˜์–ด ์žˆ๋Š” ๊ฒƒ์„ ๋ณผ ์ˆ˜ ์žˆ๋Š”๋ฐ ์ด๊ฒƒ์ด ๊ฐ CPU ์†Œ์ผ“์— ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ์ตœ๋Œ€ํ•œ ๊ฐ€๊นŒ์ด ์„ค์น˜ํ•˜๋ ค๋Š” ์„ค๊ณ„์ด๋‹ค.

1.1. ccNUMA[ํŽธ์ง‘]

Cache-Coherent NUMA. NUMA์ด๋ฉด์„œ ์บ์‹œ ์ผ๊ด€์„ฑ์„ ๊ฐ€์ง€๋Š” ์‹œ์Šคํ…œ. ํ”„๋กœ๊ทธ๋ž˜๋จธ๊ฐ€ ์บ์‹œ๋ฅผ ์ง์ ‘ ์ œ์–ดํ•  ๋ฐฉ๋ฒ•์ด ์—†๋‹ค๋ฉด ํ•˜๋“œ์›จ์–ด๊ฐ€ ๋ฌด์กฐ๊ฑด ccNUMA์—ฌ์•ผ ํ•œ๋‹ค. ํ˜„๋Œ€์˜ NUMA ํ•˜๋“œ์›จ์–ด๋Š” ๋ชจ๋‘ ccNUMA์ด๋‹ค.

1.2. vs ํด๋Ÿฌ์Šคํ„ฐ[ํŽธ์ง‘]

์ง€์—ญ ๋ฉ”๋ชจ๋ฆฌ์™€ ์›๊ฒฉ ๋ฉ”๋ชจ๋ฆฌ์˜ ๊ตฌ๋ถ„์ด ์žˆ๋‹ค๋Š” ์ ์—์„œ ์ž‘์€ ํด๋Ÿฌ์Šคํ„ฐ๋กœ ๊ฐ„์ฃผํ•˜๊ธฐ๋„ ํ•œ๋‹ค. ๊ทธ๋Ÿฐ๋ฐ ํ•œ ์‹œ์Šคํ…œ ๋‚ด๋ถ€์—์„œ์˜ ๋ฉ”๋ชจ๋ฆฌ ์ ‘๊ทผ ์†๋„ ์ฐจ์ด(๋ณดํ†ต 3~4๋ฐฐ)๋Š” ์–ด์ง€๊ฐ„ํ•œ ์†๋„/์ตœ์ ํ™” ๋•ํ›„๊ฐ€ ์•„๋‹ˆ๋ผ๋ฉด ๋ฌด์‹œํ•˜๊ณ  ํ”„๋กœ๊ทธ๋ž˜๋ฐํ•˜๋Š” ๊ฒฝ์šฐ๋„ ๋งŽ๊ธฐ ๋•Œ๋ฌธ์— ์ˆ˜๋ฐฑ~์ˆ˜์ฒœ๋ฐฐ ์ด์ƒ์˜ ์ ‘๊ทผ ์†๋„ ์ฐจ์ด๋ฅผ ๋ณด์ด๋Š” ํด๋Ÿฌ์Šคํ„ฐ ์‹œ์Šคํ…œ๊ณผ๋Š” ๋ถ„๋ช… ์ฐจ์ด๊ฐ€ ์žˆ๋‹ค.

2. ์†Œํ”„ํŠธ์›จ์–ด ์ง€์›[ํŽธ์ง‘]

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

2.1. ๋ฆฌ๋ˆ…์Šค[ํŽธ์ง‘]

/proc/$pid/numa_maps์—์„œ ํ•ด๋‹น ํ”„๋กœ์„ธ์Šค์— ํ• ๋‹นํ•ด์ค€ ๋ฉ”๋ชจ๋ฆฌ ์ค‘ ์–ด๋А ๋…ผ๋ฆฌ ์ฃผ์†Œ๊ฐ€ ์–ด๋А NUMA ๋…ธ๋“œ์— ํ• ๋‹น๋˜์–ด ์žˆ๋Š”์ง€ ๋ชจ๋‘ ๋ณผ ์ˆ˜ ์žˆ๋‹ค. ๋ฆฌ๋ˆ…์Šค ์‹œ์Šคํ…œ ์ฝœ ์ค‘ ์ผ๋ถ€๋Š” ํŠน์ • NUMA ๋…ธ๋“œ์—์„œ ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ํ• ๋‹นํ•˜๊ฑฐ๋‚˜, ํ•œ NUMA ๋…ธ๋“œ์—์„œ ๋‹ค๋ฅธ NUMA ๋…ธ๋“œ๋กœ ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ์ด๋™์‹œํ‚ค๋Š” ๊ธฐ๋Šฅ์„ ์ œ๊ณตํ•œ๋‹ค.

2.2. Microsoft[ํŽธ์ง‘]

Windows์—์„œ NUMA API๋ฅผ ์ง€์›ํ•ด์ค€๋‹ค. API ์ž์ฒด๋Š” Windows XP SP2 ๋ถ€ํ„ฐ ์ง€์› ๋˜๊ธฐ๋Š” ํ–ˆ์œผ๋‚˜ Windows NT ์ปค๋„์˜ ์Šค์ผ€์ฅด๋Ÿฌ๊ฐ€ NUMA ํ™˜๊ฒฝ์—์„œ๋„ ํ•œ ํ”„๋กœ์„ธ์Šค์˜ ์Šค๋ ˆ๋“œ๋ฅผ ๋ฆฌ๋ชจ๋“œ ๋…ธ๋“œ์— ์Šค์ผ€์ฅด๋ง ํ•˜๋Š” ๋“ฑ UMA์™€ ๊ฐ™์€ ๋ฐฉ์‹์œผ๋กœ ์Šค์ผ€์ฅด๋งํ•ด ์„ฑ๋Šฅ์ด ๋–จ์–ด์ง€๋Š” ๋ฌธ์ œ๊ฐ€ ์žˆ์—ˆ์œผ๋‚˜ Windows 10 19H2 (1909) ์—…๋ฐ์ดํŠธ ๋ถ€ํ„ฐ ์กฐ๊ธˆ ๋‚˜์•„์กŒ๋‹ค.

MS์˜ DBMS ์ œํ’ˆ์ธ MS-SQL์—์„œ๋Š” ํ•˜๋“œ์›จ์–ด์ ์ธ NUMA ์ด์™ธ์—๋„ ์†Œํ”„ํŠธ์›จ์–ด์ ์œผ๋กœ NUMA๋ฅผ ํ‰๋‚ด๋‚ผ ์ˆ˜ ์žˆ๋„๋ก ํ•ด ์ฃผ๋Š”๋ฐ ์ผ์ • ๋ณต์žก๋„ ์ด์ƒ์˜ ์„ค์ •์€ ๋ ˆ์ง€์ŠคํŠธ๋ฆฌ๋ฅผ ํŽธ์ง‘ํ•ด์•ผ ํ•œ๋‹ค.

2.3. ๊ตฌ๊ธ€[ํŽธ์ง‘]

๊ตฌ๊ธ€์—์„œ๋Š” ์ž์ฒด์ ์œผ๋กœ tcmalloc์ด๋ผ๋Š” ๊ณ ์„ฑ๋Šฅ ๋ฉ”๋ชจ๋ฆฌ ๊ด€๋ฆฌ์ž๋ฅผ ๋งŒ๋“ค์–ด ๋ฐฐํฌํ•œ๋‹ค. ์ด๊ฒƒ์„ ๊ฐœ์กฐํ•˜์—ฌ NUMA์— ๋Œ€์‘ํ•ด ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ํ• ๋‹นํ•ด์ฃผ๋Š” ๋น„๊ณต์‹ ์—…๊ทธ๋ ˆ์ด๋“œ๊ฐ€ ์žˆ๋‹ค.

2.4. ์˜ค๋ผํด[ํŽธ์ง‘]

12 ๋ฒ„์ „์œผ๋กœ ๋„˜์–ด์˜ค๋ฉด์„œ NUMA ์ง€์›์ด ๋Œ€ํญ ๊ฐ•ํ™”๋˜์—ˆ๋‹ค. DBA๋กœ ๋กœ๊ทธ์ธํ•ด SQL ๋ช…๋ น ALTER SYSTEM SET์„ ์ด์šฉํ•ด NUMA ์ง€์›์„ ์ผ  ํ›„ DBMS๋ฅผ ์žฌ์‹œ๋™ํ•˜๋ฉด ๋œ๋‹ค.

3. ๊ด€๋ จ ํ•ญ๋ชฉ[ํŽธ์ง‘]

[1] ์„ธ์ƒ ์ผ์ด ๊ทธ๋ ‡๊ฒŒ ๊ฐ„๋‹จํ•˜์ง€๋Š” ์•Š๋‹ค. ์•”๋‹ฌ์˜ ๋ฒ•์น™ ์ฐธ๊ณ . ์‹ค์ œ๋กœ AMD์˜ ์“ฐ๋ ˆ๋“œ๋ฆฌํผ 2์„ธ๋Œ€๊ฐ€ NUMA ๋ณ‘๋ชฉ์œผ๋กœ ์ธํ•œ ์„ฑ๋Šฅ ์ €ํ•˜๊ฐ€ ์žˆ์–ด์„œ ์ „์šฉ ์ตœ์ ํ™” ํ”„๋กœ๊ทธ๋žจ์ด ๊ฐœ๋ฐœ๋˜๊ธฐ๋„ ํ–ˆ๋‹ค.
[2] ์‹ค์ œ๋กœ๋Š” ๋ฉ”๋ชจ๋ฆฌ๊ฐ€ CPU๋ณด๋‹ค ๋А๋ฆฌ๊ฒŒ ์ž‘๋™ํ•˜๊ธฐ์— ์บ์‹œ ๋ฉ”๋ชจ๋ฆฌ๊ฐ€ ์•„๋‹Œ ๋ฉ”์ธ ๋ฉ”๋ชจ๋ฆฌ์— ์ ‘๊ทผํ•  ๋•Œ์—๋Š” ๋ณดํ†ต ์ˆ˜์‹ญ ํด๋Ÿญ์„ ๋‚ญ๋น„ํ•œ๋‹ค.