리눅스는 알다시피 게임용으로 쓰이기가 어렵습니다. 현존하는 대다수 PC게임들이 Windows용으로 나오고 있기 때문이지요. 하지만 SteamOS가 발표된 이후 메이저 게임업체에서는 자신들의 게임을 Linux용으로 포팅하기 시작했습니다.


그런데 과연 리눅스는 게임용으로 좋은OS일까요? 사회적인 이유는 집어치고 기술적인 이야기만 조금 하려고 합니다. 따라서 이번에도 글만 주루룩 나오겠군요.


1. Linux Gaming의 발목을 잡는 문제아. VGA Driver


PC게임에서 제일 중요한 부품은 무엇일까요? 대부분 사람들은 여기서 그래픽카드(VGA)를 생각하실 것이라고 생각합니다. 실제로 게임용 PC에서 제일 중요하게 여기는 것은 GPU의 성능입니다. CPU의 성능도 상당히 중요하지만 현대에서는 그래픽옵션을 어디까지 올릴 수 있느냐를 제일 먼저 보는 것이 당연시 되었습니다.


2017년 현재 그래픽카드 칩셋을 설계하는 업체는 Nvidia, AMD, Intel 셋이라고 봐도 과언은 아닙니다. 이 중에서 Intel칩셋은 언제나 게임성능이 별로 좋지 않기로 정평이 나있지요. Nvidia는 Geforce시리즈로 AMD는 Radeon시리즈가 있으니 이쪽은 아무리 싸구려를 써도 기본은 하는 편이고요.


그런데 리눅스용 드라이버 지원문제는 이래저래 문제가 참 많습니다. Intel의 그래픽칩셋을 게임용으로 쓰는 경우는 드물테니 넘어가고 Nvidia나 AMD 둘 다 리눅스에 관해서는 참 뭐같지요.


Nvidia의 경우 리눅스 지원이 그래도 좋습니다.

"좋은데 뭐가 문제야?"라고 하실지도 모르겠지만 문제는 오로지 바이너리 형태로만 지원을 합니다. 사실 리눅스커널에 드라이버 지원을 넣고 싶어도 바이너리 형태이기 때문에 Nvidia의 드라이버는 내장할 수가 없습니다. 우분투도 설치후에 따로 Nvidia의 드라이버를 다운로드 받아 설치를 하게 되어있습니다.


이는 Nvidia의 정책 때문인 것으로 보입니다. 아직까지는 Nvidia가 리눅스 지원을 잘 해주고 있지만 만약 Nvidia가 갑자기 지원을 끊어 버리면 어떻게 될까요? 그동안 Nvidia칩을 쓰던 리눅스 유저들은 낙동강 오리알 신세가 되는 겁니다. 실제로 Adobe가 그러한 일을 했었지요.



이는 토발즈 형님께서도 달갑지 않게 생각하고 계시며 Nvidia가 욕을 먹는 계기가 되었습니다. 하지만 회사차원에서 지원을 해준덕에 상당히 드라이버 성능이 좋다는 것이 일장일단이 있는 것이겠지요.


AMD의 경우에는 까탈리스트(Catalyst)라 불리는 문제의 드라이버가 말썽을 참 많이 일으켰습니다. 하지만 Catalyst는 이제 우분투에서 지원을 하지 않습니다. 왜냐하면 오픈소스 드라이버의 성능이 상당히 좋아져서 굳이 버그많고 시스템을 자주 사살하는 까탈스러운 녀석을 쓸 이유가 없어졌거든요. 대신 Catalyst가 지원되던 시절의 성능은 나오고 있지 않습니다. 대략적으로 약 80%정도 나온다고 하네요.


하지만 1프레임에 목숨을 거는 하드코어 게이머라면 20%성능조차도 끌어올리고 싶을 겁니다. 하지만 우분투 16.04이후 Catalyst는 정식 지원이 되지 않으므로 이를 설치했을 때 이전보다 더 큰 문제가 일어날 가능성이 높습니다. 아니, 정식지원 시절에도 문제가 많아서 열받았던 사람이 한 둘이 아닙니다! (대표적으로 제가 있습니다.)


AMD의 Radeon은 사실 Ati시절부터 자신들의 드라이버가 문제가 많았다는 것을 알았기에 이런저런 정책을 폈는데 그 중 하나가 자신들의 칩셋에 관한 문서를 오픈소스 커뮤니티에 제공을 하는 것이었습니다. 사실 지금의 오픈소스 드라이버 성능을 낼 수 있게 된 것이 바로 이 문서들 덕분이라고 해도 과언은 아닙니다. 그리고 KMS(Kernel Mode Setting - 커널이 VGA세팅을 직접 할 수 있게 한 기능)의 초창기 시절 Intel보다 Radeon을 먼저 KMS지원을 할 수 있게 도와주었습니다. 덕분에 이미지는 많이 좋아졌습니다. 하지만 예전에 당했던 상처가 아물기까지 아직도 세월이 많이 흘러야겠다는 생각이 듭니다.


표로 정리하면 이렇게 되겠네요.


리눅스에서의 게이밍용 GPU 비교


 

 Nvidia (Geforce)

AMD (Radeon)

Intel

드라이버 지원

 바이너리의 성능이 훨씬 더 좋음

오픈소스 추천

오픈소스 뿐

 추천 여부

 귀찮은것 싫어하면 추천

 약간의 삽질을 즐긴다면 추천

 Windows에서도 추천 안 함


뭐... 그냥 제 마음대로 정리 한 것이니 넘어갑시다.


2. CPU의 지원?


요즘에 나오는 CPU는 전부 멀티 코어로 구성되어 있습니다. 따라서 요즘에 나오는 게임은 멀티스레드를 기본적으로 어느정도 만들어서 굴리게 되어있습니다. 그런데 멀티코어 프로그래밍이라는 것이 그렇게 쉽게 만들어지는 것이 아닙니다. 아무리 숙련된 프로그래머라고 해도 만약 시스템에서 이를 받아주질 못하면 말짱 꽝이라는 의미입니다.


Windows가 멀티스레드를 제대로 지원한 운영체제가 아마 WindowsXP SP1부터라고 기억하고 있습니다. 물론 서버용인 Windows 2000도 가능은 했다고 하지만 일반인이 서버용을 썼을리는 만무합니다. 하지만 WindowsXP SP3를 쓰더라도 현재 Windows7 이후의 멀티코어 성능보다 훨씬 더 효율이 떨어집니다. 왜냐하면 코어에 프로세스를 할당하는 알고리즘 자체가 최적화가 덜 되었거든요.


그럼 리눅스는 어떨까요? 사실 리눅스는 애초에 서버용으로 쓰였기에 멀티코어에 대한 준비는 어느정도 되어있었습니다. 다만, 이쪽도 완벽하지는 않았기 때문에 커널 2.6 시절에는 멀티코어 시스템에서 일부 싱글코어 프로그램을 돌리면 커널이 프로세스를 한 코어에 할당하는 것이 아니라 이 코어에 넣었다가 저 코어에 넣었다가 하는 삽질을 동원했었습니다. 그러니까 멀티코어를 쓰려고 하다보니 도리어 효율이 이상해지는 효과를 보았던 것이지요. (일종의 버그였습니다.)


엄밀히 말하면 리눅스에서 준비했던 것은 서버에서 쓰이는 멀티CPU (그러니까 한 보드에 CPU가 2~4개 정도 박히는 물건)를 고려했던 것이지 현재의 한 CPU에 여러 코어가 올라간 것을 생각한 것은 아니었기에 있었던 일입니다.


현재는 커널에서 CPU에 대한 대응을 했기에 그런 일이 일어나지는 않지만 언제 다시 그런 버그가 벌어질지는 아무도 모릅니다. 실제로 AMD의 Ryzen의 경우 커널에서 바로 대응을 못해서 한 달 뒤에나 제대로 쓸 수 있게 되었습니다. 멀티코어 프로그램에서 이상 작동이 많았다고 합니다. 이 멀티코어 프로그램에는 커널도 포함합니다. 즉, 커널 패닉을 불러왔다는 것이지요.


리눅스용 게임의 경우 이러한 시스템적 이해가 없으면 문제를 일으키기 십상입니다. 효율이 떨어지는 발적화가 나오기도 하고 일부 시스템에서는 구동 자체가 안 되기도 합니다. 하지만 아직도 개발사들은 리눅스에 대한 이해도가 그렇게 좋지는 않은 것으로 보입니다. 대형 개발사의 게임은 상당한 최적화를 보이지만 개발환경이 열악한 인디게임에서는 상당한 발적화가 보입니다. 



3. 비표준 ACPI 전원관리자


ACPI는 PC의 전원을 관리하기 위해 만들어진 일종의 규격입니다. 우리가 소프트적으로 전원을 차단하고 절전모드에 들어갔다가 배터리의 양을 체크해서 최대절전모드로 들어가고 하는 등의 모든 전원관련 프로세스는 이 녀석이 담당합니다.


사실 이 ACPI는 하드웨어 업체에서 어느정도 표준에 맞추어서 만들어냅니다. 그러니까 몇번 핀에 어떤 신호를 주면 전원이 차단된다던지 하는 것들 말이지요. 이를 OS가 읽어내서 하드웨어에 그렇게 작동되게끔 하는 것입니다. (말이 조금 어렵지요? 그러니까 OS가 부팅 될 때 메인보드에서 OS에 자신의 사용설명서를 제공한다고 생각해보세요)


그런데 Windows는 워낙 괴랄한 하드웨어 지원을 하기 때문에 ACPI이전의 APM이라 불리는 전원 관리자부터 각 회사마다 제멋대로 만들었던 전원관리방식까지 다 지원합니다. 그래서 몇몇 하드웨어 업체는(특히 중국산 노트북이 대표적) ACPI를 대충 만들어서 넣어도 Windows가 알아서 잘 해주니까 그냥 파는 경우가 있습니다.


이런 하드웨어에 리눅스를 설치하면 OS가 ACPI를 제대로 이해하지 못해서 엉뚱한 전원제어를 할 수도 있습니다. 예를 들면 멀쩡히 작업을 하고 있는데 온도가 조금 높아졌다고 바로 시스템을 종료한다던지 배터리가 50%남았는데 배터리가 없다고 판단해서 꺼버린다던지 하는 것들을 말합니다.


이런 시스템에서 게임을 한다면 어떻게 될까요? 자칫 잘못하면 시스템이 과열되었는데도 팬이 돌지않아서 죽어버릴 수도 있고 데이터오염으로 세이브가 날아갈 수도 있습니다. 제일 큰 문제는 그냥 고장나버리는 것이겠지요.


현재 우리나라에서 팔리는 대부분 컴퓨터는 정상적인 ACPI를 가지고 있다고 생각합니다. 특히 유명업체를 쓴다면 신경 쓸 이유는 더더욱 없겠지요. 하지만 해외에서 직접 구매해서 쓰는 경우도 있을 수 있고 일부 메인보드가 문제가 있을 수도 있습니다. 이런 것이라면 SteamOS를 설치를 한다고 해도 제대로 된 SteamBox로 쓸 수는 없을 것입니다.




===

지금까지 리눅스에서 게임을 하는 것에 대한 하드웨어 이야기를 했는데 사실 이런 저런 이야기를 했지만 사실 하드웨어적으로 큰 문제는 없습니다.

GPU의 경우에는 드라이버 지원이 결국에는 잘 되고 있는 것이고(Nvidia는 바이너리로 AMD는 오픈소스로)

CPU지원은 나온지 얼마 안 된 모델이 아닌 검증된 모델을 사용하면 그만이니까요.

ACPI문제는 이상한 업체의 부품이 아닌 유명업체를 쓰면 되는 것입니다. (보통 게임용 PC를 맞추시는 분들은 좋은 부품을 쓰려고 하니까 큰 문제는 없는 셈이지요.)


하지만 소프트웨어는? 음...


이건 다음에 이야기해보도록 하지요.

,