Valve๋Š” Linux์—์„œ Windows ๊ฒŒ์ž„์„ ์‹คํ–‰ํ•˜๊ธฐ ์œ„ํ•œ ์ œํ’ˆ๊ตฐ์ธ Proton 4.11์„ ์ถœ์‹œํ•ฉ๋‹ˆ๋‹ค.

๋ฐธ๋ธŒ ํšŒ์‚ฌ ะพะฟัƒะฑะปะธะบะพะฒะฐะปะฐ ์ƒˆ ํ”„๋กœ์ ํŠธ ๋ธŒ๋žœ์น˜ ์–‘์„ฑ์ž 4.11, Wine ํ”„๋กœ์ ํŠธ์˜ ๊ฐœ๋ฐœ์„ ๊ธฐ๋ฐ˜์œผ๋กœ ํ•˜๋ฉฐ Windows์šฉ์œผ๋กœ ์ œ์ž‘๋˜๊ณ  Linux์˜ Steam ์นดํƒˆ๋กœ๊ทธ์— ํ‘œ์‹œ๋˜๋Š” ๊ฒŒ์ž„ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ์ถœ์‹œ๋ฅผ ๋ณด์žฅํ•˜๋Š” ๊ฒƒ์„ ๋ชฉํ‘œ๋กœ ํ•ฉ๋‹ˆ๋‹ค. ํ”„๋กœ์ ํŠธ ๊ฐœ๋ฐœ ํ™•์‚ฐ BSD ๋ผ์ด์„ผ์Šค์— ๋”ฐ๋ผ. ์ค€๋น„๊ฐ€ ์™„๋ฃŒ๋˜๋ฉด Proton์—์„œ ๊ฐœ๋ฐœ๋œ ๋ณ€๊ฒฝ ์‚ฌํ•ญ์ด ์›๋ณธ Wine ๋ฐ DXVK ๋ฐ vkd3d์™€ ๊ฐ™์€ ๊ด€๋ จ ํ”„๋กœ์ ํŠธ๋กœ ์ „์†ก๋ฉ๋‹ˆ๋‹ค.

Proton์„ ์‚ฌ์šฉํ•˜๋ฉด Steam Linux ํด๋ผ์ด์–ธํŠธ์—์„œ Windows ์ „์šฉ ๊ฒŒ์ž„ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ์ง์ ‘ ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ํŒจํ‚ค์ง€์—๋Š” DirectX 10/11 ๊ตฌํ˜„์ด ํฌํ•จ๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค. DXVK) ๋ฐ 12(๊ธฐ์ค€: vkd3d)๋Š” Vulkan API์— ๋Œ€ํ•œ DirectX ํ˜ธ์ถœ์„ ํ†ตํ•ด ์ž‘๋™ํ•˜๋ฉฐ ๊ฒŒ์ž„ ์ปจํŠธ๋กค๋Ÿฌ์— ๋Œ€ํ•œ ํ–ฅ์ƒ๋œ ์ง€์›์„ ์ œ๊ณตํ•˜๊ณ  ๊ฒŒ์ž„์—์„œ ์ง€์›๋˜๋Š” ํ™”๋ฉด ํ•ด์ƒ๋„์— ๊ด€๊ณ„์—†์ด ์ „์ฒด ํ™”๋ฉด ๋ชจ๋“œ๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ๊ธฐ๋Šฅ์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค. ํŒจ์น˜๋ฅผ ์ ์šฉํ•œ ๋•๋ถ„์— ์˜ค๋ฆฌ์ง€๋„ Wine์— ๋น„ํ•ด ๋ฉ€ํ‹ฐ์Šค๋ ˆ๋“œ ๊ฒŒ์ž„์˜ ์„ฑ๋Šฅ์ด ํฌ๊ฒŒ ํ–ฅ์ƒ๋˜์—ˆ์Šต๋‹ˆ๋‹ค."๋™๊ธฐํ™”"(Eventfd ๋™๊ธฐํ™”) ๋˜๋Š” "futex/fsync".

์ฃผ์š” Proton 4.11์˜ ๋ณ€๊ฒฝ ์‚ฌํ•ญ:

  • Wine 4.11 ์ฝ”๋“œ๋ฒ ์ด์Šค์™€์˜ ๋™๊ธฐํ™”๊ฐ€ ์ˆ˜ํ–‰๋˜์–ด 3300๊ฐœ ์ด์ƒ์˜ ๋ณ€๊ฒฝ ์‚ฌํ•ญ์ด ์ „์†ก๋˜์—ˆ์Šต๋‹ˆ๋‹ค(์ด์ „ ๋ถ„๊ธฐ๋Š” Wine 4.2๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ ํ•จ). Proton 154์˜ 4.2๊ฐœ ํŒจ์น˜๊ฐ€ ์—…์ŠคํŠธ๋ฆผ์œผ๋กœ ์ด๋™๋˜์–ด ์ด์ œ ๊ธฐ๋ณธ Wine ํŒจํ‚ค์ง€์— ํฌํ•จ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.
  • esync์— ๋น„ํ•ด CPU ๋ถ€ํ•˜๋ฅผ ์ค„์ด๋Š” futex() ์‹œ์Šคํ…œ ํ˜ธ์ถœ์„ ๊ธฐ๋ฐ˜์œผ๋กœ ๋™๊ธฐํ™” ํ”„๋ฆฌ๋ฏธํ‹ฐ๋ธŒ์— ๋Œ€ํ•œ ์‹คํ—˜์  ์ง€์›์„ ์ถ”๊ฐ€ํ–ˆ์Šต๋‹ˆ๋‹ค. ๋˜ํ•œ ์ƒˆ๋กœ์šด ๊ตฌํ˜„์€ ๋‹ค์Œ์„ ์‚ฌ์šฉํ•ด์•ผ ํ•˜๋Š” ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•ฉ๋‹ˆ๋‹ค. ํŠน๋ณ„ํ•œ ์„ค์ • esync ๋ฐ ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•œ ํŒŒ์ผ ์„ค๋ช…์ž๊ฐ€ ๊ณ ๊ฐˆ๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

    ์ˆ˜ํ–‰๋˜๋Š” ์ž‘์—…์˜ ํ•ต์‹ฌ์€ ์Šค๋ ˆ๋“œ ํ’€์˜ ์ตœ์  ๋™๊ธฐํ™”์— ํ•„์š”ํ•œ ๊ธฐ๋Šฅ์„ ์‚ฌ์šฉํ•˜์—ฌ Linux ์ปค๋„์˜ ํ‘œ์ค€ futex() ์‹œ์Šคํ…œ ํ˜ธ์ถœ ๊ธฐ๋Šฅ์„ ํ™•์žฅํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. Proton์— ํ•„์š”ํ•œ FUTEX_WAIT_MULTIPLE ํ”Œ๋ž˜๊ทธ๋ฅผ ์ง€์›ํ•˜๋Š” ํŒจ์น˜๋Š” ์ด๋ฏธ ์–‘๋„ ๊ธฐ๋ณธ Linux ์ปค๋„์— ํฌํ•จํ•˜๊ธฐ ์œ„ํ•ด ๊ธ€๋ฆฌ๋น…. ์ค€๋น„๋œ ๋ณ€๊ฒฝ ์‚ฌํ•ญ์€ ์•„์ง ๋ฉ”์ธ ์ปค๋„์— ํฌํ•จ๋˜์ง€ ์•Š์•˜์œผ๋ฏ€๋กœ ์ง€๊ธˆ์€ ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค. ํ™•๋ฆฝํ•˜๋‹ค ์ด๋Ÿฌํ•œ ๊ธฐ๋ณธ ์š”์†Œ๋ฅผ ์ง€์›ํ•˜๋Š” ํŠน์ˆ˜ ์ปค๋„;

    Valve๋Š” Linux์—์„œ Windows ๊ฒŒ์ž„์„ ์‹คํ–‰ํ•˜๊ธฐ ์œ„ํ•œ ์ œํ’ˆ๊ตฐ์ธ Proton 4.11์„ ์ถœ์‹œํ•ฉ๋‹ˆ๋‹ค.

  • ์ค‘๊ฐ„์ธต DXVK (Vulkan API ์œ„์— DXGI, Direct3D 10 ๋ฐ Direct3D 11 ๊ตฌํ˜„) ๋ฒ„์ „์œผ๋กœ ์—…๋ฐ์ดํŠธ๋˜์—ˆ์Šต๋‹ˆ๋‹ค. 1.3๊ณผ D9VK (Vulkan ์œ„์— Direct3D 9๋ฅผ ์‹คํ—˜์ ์œผ๋กœ ๊ตฌํ˜„ํ•œ ๊ฒƒ) ๋ฒ„์ „ 0.13f๊นŒ์ง€. Proton์—์„œ D9VK ์ง€์›์„ ํ™œ์„ฑํ™”ํ•˜๋ ค๋ฉด PROTON_USE_D9VK ํ”Œ๋ž˜๊ทธ๋ฅผ ์‚ฌ์šฉํ•˜์„ธ์š”.
  • ํ˜„์žฌ ๋ชจ๋‹ˆํ„ฐ ์ƒˆ๋กœ ๊ณ ์นจ ๋นˆ๋„๊ฐ€ ๊ฒŒ์ž„์œผ๋กœ ์ „์†ก๋ฉ๋‹ˆ๋‹ค.
  • ๋งˆ์šฐ์Šค ํฌ์ปค์Šค ๋ฐ ์ฐฝ ๊ด€๋ฆฌ๋ฅผ ์ฒ˜๋ฆฌํ•˜๋„๋ก ์ˆ˜์ •๋˜์—ˆ์Šต๋‹ˆ๋‹ค.
  • ์ผ๋ถ€ ๊ฒŒ์ž„, ํŠนํžˆ Unity ์—”์ง„ ๊ธฐ๋ฐ˜ ๊ฒŒ์ž„์—์„œ ๋ฐœ์ƒํ•˜๋Š” ์กฐ์ด์Šคํ‹ฑ์˜ ์ž…๋ ฅ ์ง€์—ฐ ๋ฐ ์ง„๋™ ์ง€์› ๋ฌธ์ œ๋ฅผ ์ˆ˜์ •ํ–ˆ์Šต๋‹ˆ๋‹ค.
  • ์ตœ์‹  ๋ฒ„์ „์˜ OpenVR SDK์— ๋Œ€ํ•œ ์ง€์›์ด ์ถ”๊ฐ€๋˜์—ˆ์Šต๋‹ˆ๋‹ค.
  • DirectX ์‚ฌ์šด๋“œ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ(API XAudio2, X3DAudio, XAPO ๋ฐ XACT3)๊ฐ€ ๊ตฌํ˜„๋œ FAudio ๊ตฌ์„ฑ ์š”์†Œ๊ฐ€ ๋ฆด๋ฆฌ์Šค 19.07๋กœ ์—…๋ฐ์ดํŠธ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.
  • GameMaker ๊ฒŒ์ž„์˜ ๋„คํŠธ์›Œํฌ ํ•˜์œ„ ์‹œ์Šคํ…œ ๋ฌธ์ œ๊ฐ€ ํ•ด๊ฒฐ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.
  • ์ด์ œ ๋งŽ์€ Wine ๋ชจ๋“ˆ์ด Linux ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ๋Œ€์‹  Windows PE ํŒŒ์ผ๋กœ ๋นŒ๋“œ๋ฉ๋‹ˆ๋‹ค. ์ด ๋ถ„์•ผ์˜ ์ž‘์—…์ด ์ง„ํ–‰๋จ์— ๋”ฐ๋ผ PE์˜ ์‚ฌ์šฉ์€ ์ผ๋ถ€ DRM ๋ฐ ์น˜ํŠธ ๋ฐฉ์ง€ ์‹œ์Šคํ…œ์— ๋„์›€์ด ๋  ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์‚ฌ์šฉ์ž ์ •์˜ Proton ๋นŒ๋“œ๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒฝ์šฐ PE ํŒŒ์ผ์„ ๋นŒ๋“œํ•˜๋ ค๋ฉด Vagrant ๊ฐ€์ƒ ๋จธ์‹ ์„ ๋‹ค์‹œ ์ƒ์„ฑํ•ด์•ผ ํ•  ๊ฐ€๋Šฅ์„ฑ์ด ๋†’์Šต๋‹ˆ๋‹ค.

Valve์˜ ํŒจ์น˜๊ฐ€ ๊ธฐ๋ณธ Linux ์ปค๋„์— ์ฑ„ํƒ๋˜๊ธฐ ์ „์— esync ๋Œ€์‹  futex()๋ฅผ ์‚ฌ์šฉํ•˜๋ ค๋ฉด ํŒจ์น˜ ์„ธํŠธ์— ๊ตฌํ˜„๋œ ์Šค๋ ˆ๋“œ ๋™๊ธฐํ™” ํ’€์„ ์ง€์›ํ•˜๋Š” ํŠน์ˆ˜ ์ปค๋„์„ ์„ค์น˜ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. fsync. ์ด๋ฏธ AUR์˜ Arch Linux์˜ ๊ฒฝ์šฐ ์ถœํŒ ๋œ fsync ํŒจ์น˜๋กœ ์ปดํŒŒ์ผ๋œ ๊ธฐ์„ฑ ์ปค๋„ ํŒจํ‚ค์ง€. Ubuntu 18.04 ๋ฐ 19.04์—์„œ๋Š” linux-mfutex-valve ์‹คํ—˜์šฉ ์ปค๋„ PPA(sudo add-apt-repository ppa:valve-experimental/kernel-bionic; sudo apt-get install linux-mfutex-valve)๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

fsync๋ฅผ ์ง€์›ํ•˜๋Š” ์ปค๋„์ด ์žˆ๋Š” ๊ฒฝ์šฐ Proton 4.11์„ ์‹คํ–‰ํ•˜๋ฉด ์ฝ˜์†”์— "fsync: up and running" ๋ฉ”์‹œ์ง€๊ฐ€ ํ‘œ์‹œ๋ฉ๋‹ˆ๋‹ค. PROTON_NO_FSYNC=1 ํ”Œ๋ž˜๊ทธ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ fsync๋ฅผ ๊ฐ•์ œ๋กœ ๋Œ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์ถœ์ฒ˜ : opennet.ru

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