๋ถ๋ฅ:๊ธฐ์ต์ฅ์น
์ด ๋ฌธ์์ ์๋ณธ์ ์ธ๋ถ ์ํค์์ ๊ฐ์ ธ์์ต๋๋ค.
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 ์์ผ์ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ์ต๋ํ ๊ฐ๊น์ด ์ค์นํ๋ ค๋ ์ค๊ณ์ด๋ค.
๊ฐ๋จํ ์๋ฅผ ๋ค์ด ์์คํ ์ 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๋ฅผ ํ๋ด๋ผ ์ ์๋๋ก ํด ์ฃผ๋๋ฐ ์ผ์ ๋ณต์ก๋ ์ด์์ ์ค์ ์ ๋ ์ง์คํธ๋ฆฌ๋ฅผ ํธ์งํด์ผ ํ๋ค.
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๋ณด๋ค ๋๋ฆฌ๊ฒ ์๋ํ๊ธฐ์ ์บ์ ๋ฉ๋ชจ๋ฆฌ๊ฐ ์๋ ๋ฉ์ธ ๋ฉ๋ชจ๋ฆฌ์ ์ ๊ทผํ ๋์๋ ๋ณดํต ์์ญ ํด๋ญ์ ๋ญ๋นํ๋ค.