AMD๋ Zen 3 ์๋ฆฌ์ฆ ํ๋ก์ธ์์ ๊ตฌํ๋ PSF(Predictive Store Forwarding) ์ต์ ํ ๊ธฐ์ ์ ๋ณด์์ฑ์ ๋ถ์ํ ๋ณด๊ณ ์๋ฅผ ๋ฐํํ์ต๋๋ค. ์ด ์ฐ๊ตฌ๋ 4๋ 2018์ ๋ฐ๊ฒฌ๋ Spectre-STL(Spectre-vXNUMX) ๊ณต๊ฒฉ ๊ธฐ๋ฒ์ด PSF ๊ธฐ์ ์ ์ ์ฉ ๊ฐ๋ฅํจ์ ์ด๋ก ์ ์ผ๋ก ํ์ธํ์ง๋ง, ์ค์ ๋ก ๊ณต๊ฒฉ์ผ๋ก ์ด์ด์ง ์ ์๋ ์ฝ๋ ํจํด์ ์์ง ๋ฐ๊ฒฌ๋์ง ์์์ผ๋ฉฐ, ์ ๋ฐ์ ์ธ ์ํ์ ๋ฏธ๋ฏธํ ๊ฒ์ผ๋ก ํ๊ฐ๋ฉ๋๋ค.
Spectre-v4(์ถ์ธก ์ ์ฅ ์ฐํ) ๊ณต๊ฒฉ์ ๊ฐ์ ์ฃผ์ ์ง์ ์ ์ฌ์ฉํ์ฌ ์ฐ๊ธฐ ๋ฐ ์ฝ๊ธฐ ์์ ์ ๋ฒ๊ฐ์ ์ํํ ๋, ์ถ์ธก ์คํ ๊ฒฐ๊ณผ๋ฅผ ์ญ์ ํ ํ ํ๋ก์ธ์ ์บ์์ ์ ์ฅ๋ ๋ฐ์ดํฐ๋ฅผ ๋ณต์ํ๋ ๋ฐฉ์์ ๊ธฐ๋ฐ์ผ๋ก ํฉ๋๋ค. ์ฐ๊ธฐ ์์ ๋ค์์ ์ฝ๊ธฐ ์์ ์ด ์ด์ด์ง๋ ๊ฒฝ์ฐ(์: mov [rbx + rcx], 0x0; mov rax, [rdx + rsi]), ์ ์ฌํ ์์ ์ด ์ด๋ฏธ ์คํ๋์๊ธฐ ๋๋ฌธ์ ์ฝ๊ธฐ ์์ ์ฃผ์์ ์คํ์ ์ด ์ด๋ฏธ ์๋ ค์ ธ ์์ ์ ์์ต๋๋ค(์ฝ๊ธฐ ์์ ์ ํจ์ฌ ๋ ์์ฃผ ์ํ๋๊ณ ์ฝ๊ธฐ๋ ์บ์์์ ์ํ๋ ์ ์์). ํ๋ก์ธ์๋ ์ฐ๊ธฐ ์์ ์ ๊ฐ์ ์ฃผ์ ์ง์ ์คํ์ ์ด ๊ณ์ฐ๋ ๋๊น์ง ๊ธฐ๋ค๋ฆฌ์ง ์๊ณ ์ฐ๊ธฐ ์์ ์ ์ ์ถ์ธก์ ์ผ๋ก ์ฝ๊ธฐ ์์ ์ ์ํํ ์ ์์ต๋๋ค.
์ด ๊ธฐ๋ฅ์ ์ฌ์ฉํ๋ฉด ์ ์ฅ ์์ ์ด ๋ณด๋ฅ ์ค์ธ ๋์์๋ ์ฝ๊ธฐ ๋ช ๋ น์ด ํน์ ์ฃผ์์ ์ด์ ๊ฐ์ ์ก์ธ์คํ ์ ์์ต๋๋ค. ์์ธก์ด ์คํจํ๋ฉด ์คํจํ ์ถ์ธก ์ฐ์ฐ์ ์ญ์ ๋์ง๋ง ์คํ ํ์ ์ ํ๋ก์ธ์ ์บ์์ ๋จ์ ์บ์๋ ๋ฐ์ดํฐ์ ์บ์๋์ง ์์ ๋ฐ์ดํฐ์ ๋ํ ์ก์ธ์ค ์๊ฐ ๋ณ๊ฒฝ์ ๋ถ์ํ์ฌ ์บ์ ๋ด์ฉ์ ํ์ธํ๋ ๋ฐฉ๋ฒ ์ค ํ๋๋ฅผ ํตํด ์ถ์ถํ ์ ์์ต๋๋ค.
AMD Zen 3 ํ๋ก์ธ์์ ์ถ๊ฐ๋ PSF ๊ธฐ์ ์ STLF(Store-To-Load-Forwarding) ๋ฐฉ์์ ์ต์ ํํฉ๋๋ค. ์ด ๋ฐฉ์์ ์ฝ๊ธฐ ์์ ๊ณผ ์ฐ๊ธฐ ์์ ๊ฐ์ ๊ด๊ณ๋ฅผ ์์ธกํ์ฌ ์ฝ๊ธฐ ์์ ์ ์ถ์ธก์ ์ผ๋ก ์ํํฉ๋๋ค. ๊ธฐ์กด STLF ๋ฐฉ์์์๋ ํ๋ก์ธ์๊ฐ ์ด์ "store" ๋ช ๋ น์์ ์ง์ ์ ๋ฌ๋ ๋ฐ์ดํฐ๋ฅผ ์ฌ์ฉํ์ฌ "load" ์์ ์ ์ํํฉ๋๋ค. ์ด๋ ๊ฒฐ๊ณผ๊ฐ ์ค์ ๋ก ๋ฉ๋ชจ๋ฆฌ์ ๊ธฐ๋ก๋ ๋๊น์ง ๊ธฐ๋ค๋ฆฌ์ง ์๊ณ "load" ๋ฐ "store" ๋ช ๋ น์ ์ฌ์ฉ๋ ์ฃผ์๊ฐ ์ผ์นํ๋์ง ํ์ธํฉ๋๋ค. PSF ์ต์ ํ๋ ์ฃผ์ ๊ฒ์ฌ๋ฅผ ์ถ์ธก์ ์ผ๋ก ์ํํ๊ณ , ๋์ผํ ์ฃผ์๋ฅผ ์กฐ์ํ๋ store/load ์์ด ์ด์ ์ ์ํ๋ ๊ฒฝ์ฐ ์ฃผ์ ์ ๋ณด๋ฅผ ๊ณ์ฐํ๊ธฐ ์ ์ "load" ์์ ์ ์ํํฉ๋๋ค. ์์ธก์ด ์ ํํ์ง ์์ผ๋ฉด ์ํ๋ ๋กค๋ฐฑ๋์ง๋ง ๋ฐ์ดํฐ๋ ์บ์์ ์ ์ง๋ฉ๋๋ค.
PSF์ ๋ํ ๊ณต๊ฒฉ์ ๋จ์ผ ๊ถํ ๋ ๋ฒจ ๋ด์์๋ง ๊ฐ๋ฅํ๋ฉฐ, ํ์ฌ ํ๋ก์ธ์ค ์ปจํ ์คํธ์๋ง ์ ์ฉ๋๊ณ ์ฃผ์ ๊ณต๊ฐ ๊ฒฉ๋ฆฌ ๋ฐฉ์์ด๋ ํ๋์จ์ด ์๋๋ฐ์ฑ ๋ฉ์ปค๋์ฆ์ ์ํด ์ฐจ๋จ๋ฉ๋๋ค. ๊ทธ๋ฌ๋ ํ๋ก์ธ์ค์ ์ํํธ์จ์ด ์๋๋ฐ์ฑ ๋ฐฉ์์ ์ ์ฌ์ ์ผ๋ก ์ํฅ์ ๋ฐ์ ์ ์์ต๋๋ค. ์ด ๊ณต๊ฒฉ์ ๋ธ๋ผ์ฐ์ , ์ฝ๋ ์คํ์ ์ํ ๊ฐ์ ๋จธ์ , ๊ทธ๋ฆฌ๊ณ ๋จ์ผ ํ๋ก์ธ์ค ๋ด์์ ํ์ฌ ์ฝ๋๋ฅผ ์คํํ๋ JIT์ ๊ฐ์ ์์คํ ์ ์ํ์ ์ด๋ํฉ๋๋ค. (๊ณต๊ฒฉ์ผ๋ก ์ธํด ์ ๋ขฐํ ์ ์๋ ์๋๋ฐ์ฑ ์ฝ๋๊ฐ ๋ค๋ฅธ ํ๋ก์ธ์ค ๋ฐ์ดํฐ์ ์ ๊ทผํ ์ ์์ต๋๋ค.)
AMD๋ PSF๋ฅผ ์์ ํ ๋๋ ์ ํ์ ์ผ๋ก ๋นํ์ฑํํ๋ ์ฌ๋ฌ ๊ฐ์ง ๋ฐฉ๋ฒ์ ์ ๊ณตํ์ง๋ง, ๋๋ถ๋ถ์ ์ ํ๋ฆฌ์ผ์ด์
์์ ์ํ๋๊ฐ ๋ฎ๋ค๋ ์ ์ ๊ณ ๋ คํ์ฌ ๊ธฐ๋ณธ์ ์ผ๋ก ์ด ์ต์ ํ๋ฅผ ๋นํ์ฑํํ์ง ์๋ ๊ฒ์ ๊ถ์ฅํ์ต๋๋ค. ์ ๋ขฐํ ์ ์๋ ์ฝ๋ ์คํ์ผ๋ก๋ถํฐ ๊ฒฉ๋ฆฌ๋ ํ๋ก์ธ์ค๋ฅผ ์ ํ์ ์ผ๋ก ๋ณดํธํ๊ธฐ ์ํด ๊ฐ๋ณ ์ค๋ ๋๋ฅผ ํฌํจํ์ฌ "SSBD" ๋ฐ "PSFD" MSR ๋นํธ๋ฅผ ์ค์ ํ์ฌ PSF๋ฅผ ๋นํ์ฑํํ๋ ๋ฐฉ์์ด ์ ์๋์์ต๋๋ค. ์ปค๋์ ๊ฒฝ์ฐ, Linux PSF ํ์ฑํ ๋ฐ ๋นํ์ฑํ๋ฅผ ์ ์ดํ๋ โโ๋ช
๋ น์ค ์ต์
"psfd" ๋ฐ "nopsfd"๋ฅผ ๊ตฌํํ๋ ํจ์น๊ฐ ์ค๋น๋์์ต๋๋ค.
์ถ์ฒ : opennet.ru
