마이크로소프트

CPU 취약성 문제의 근본원인 「투기적 실행」과 격투는 Xbox 360 시대부터 존재한다

나나시노 2018. 1. 9. 23:12
반응형




CPU 취약성 문제의 근본원인 「투기적 실행」과 격투는 Xbox 360 시대부터 존재한다



「Intel제 CPU내에 구조적인 취약성이 있다」라고 하는 보도로부터 대문제가 된 「Meltdown(멜트다운)」이나 「Spectre(스펙터)」라고 불리는 취약성에 대응이 각소프트웨어에서 진행되고 있어, 성능 저하가 염려되고 있습니다. 이 CPU 취약성 문제 원인으로 여겨지고 있는 기술 「투기적 실행」에 관해서, 게임기 Xbox  360 시대부터 투기적 실행에 근거하는 버그가 있었던 것을 게임 개발자가 밝혔습니다.


Finding a CPU Design Bug in the Xbox 360 | Random ASCII



Google에서 일하는 소프트웨어 엔지니어의 블루스 도슨씨가, 자신의 블로그 「Random ASCII」에서 그전의 Xbox 360로 고생한 CPU 버그에 대해서 술회하고 있습니다. 이 버그는 지금 화제가 된 멜트다운이나 스펙터와 기본적으로는 같은 구조를 가진다고 도슨씨는 진술하고 있습니다.


Xbox 360로 채용되고 있었던 IBM제 CPU 「PowerPC」는 CPU코어 3개와 L2 캐쉬메모리 1개를 가지고 있었습니다. 3코어+1MB의 L2 캐쉬라고 하는 독특한 구조의 PowerPC에는, L2 캐쉬를 바이패스해서 L1 캐쉬에 직접 데이터를 프리패치할 수 있는 「xDCBT」 명령이 옵션으로 추가되었습니다. 데이터 프리패치가 퍼포먼스에 큰 영향을 주는 것부터, 적극적으로 xDCBT 명령 옵션을 이용하려고 한 게임 개발자는 많았다고 합니다만, heap 크래쉬를 빈번하게 일으켜버릴 것이 있어, 도슨씨는 게임내 코드로, xDCBT 명령을 걷어 치웠다고 합니다.




그러나, xDCBT 명령을 사용하지 않는 코드라도 심각한 크래쉬 현상에 고민된 도슨씨는, IBM에 전자 메일로 CPU내부 구조에 대해서 설명을 요구한 결과, PowerPC는 대단히 긴 CPU 파이프라인을 채용하고 있는 것을 알았다고 합니다.


아래 모식도가 PowerPC의 CPU 파이프라인. 도슨씨는 명령을 순서대로 실행하는 인 오더 실행형 CPU라고는 해도 지나치게 긴 파이프라인이라고 진술하고 있습니다.




이 모식도의 「Branch Predictor」에서는 「예측」이 실행이되어, 그 예측은 페치되어, 디코딩되어, 실행됩니다. 그러나, 예측은 맞은 것이 확인될 때까지 파기되지 않고 보유됩니다. 이것은 멜트다운이나 스펙터에 있어서의 투기적 실행과 대부분 같은 구조입니다. 도슨씨에 의하면, Branch Predictor와 xDCBT 명령의 궁합은 지극히 안 좋다고 합니다.


도슨씨는 동료와 함께, 게임내 xDCBT 관련 코드를 모두 breakpoint에 바꿔 놓는 실험을 한 결과, 「breakpoint는 실행되지 않는다」 「크래쉬가 없어진다」라고 하는 현상이 2개 확인되었습니다. 즉, Branch Predictor가 게임 코드 안정성에 악영향을 주고 있는 것이 밝혀졌다고 하는 것입니다.



반응형