FEX가 정리한 x86-TSO 에뮬레이션 문제: load-acquire 매핑, split-lock, uncached 메모리
- FEX는 x86 메모리 로드를 ARM load-acquire, 스토어를 store-release로 변환해 x86-TSO 의미를 재현하지만, ARMv8.0-a를 기준선으로 삼으면 완전한 동등성에는 도달하지 못함.
- Apple은 6년 전 x86 에뮬레이션이 중요해지자 자사 칩에 x86 호환 메모리 오더링 모드를 추가해 이 문제를 하드웨어로 해결했고, FEX 같은 에뮬레이터는 그런 지원 없이 소프트웨어로 버팀.
- ARM의 약한 일관성 모델과 x86-TSO는 메모리 일관성 스펙트럼의 양 극단으로, ARM은 캐시라인 무효화와 snoop 비용과 전력 소모를 줄이려 완화된 순서를 허용함.
- 에뮬레이션 과정에서 split-lock이 필수로 요구되고 uncached 메모리 접근까지 동작해야 하는 등 부딪히는 문제가 한두 개가 아님.
- FEX는 Valve의 후원을 받고 Steam Frame의 x86 게임 지원과 Crossover Beta 포크에서 Rosetta2를 대체하는 데 쓰이는 x86에서 ARM으로의 번역 프레임워크임.
Hacker News opinions
FEX가 뭔지 모르는 사람 위해 설명하면 x86을 ARM으로 번역하는 프레임워크임. Apple Rosetta2나 Microsoft Prism이랑 같은 계열이고 Valve가 후원함, Steam Frame이 이걸로 x86 게임 돌리고 Crossover Beta 포크는 Rosetta2를 대체하는 중.
왜 Steam은 바이너리를 바이트코드로 컴파일해서 설치할 때 변환하지 않을까. 그러면 새로 컴파일할 때마다 에뮬레이터가 필요 없을 텐데.
글에도 나오는데 Apple은 6년 전에 x86 에뮬레이션이 중요해지자 칩에 x86 호환 메모리 오더링 모드를 그냥 추가해서 해결했음. 애플 칩이 업계를 앞서간다는 또 하나의 증거임.
그 '그냥'이라는 단어가 혼자서 엄청 일하고 있는데. 글에서도 언급되지만 그 모드가 대부분 문제를 덜어주긴 해도 에뮬레이터가 여전히 못 다루는 코너 케이스가 남아 있음.
좋은 글이다, HN 프론트에 이런 글이 올라오길 항상 바람. Apple이 수직 통합을 이렇게 잘 하려면 조직이 어떻게 돌아가는지 궁금함, 그 기능 하나에 여러 팀 사람이 붙었을 텐데.
제품 쪽 사람들이 이게 제품 성공에 필수라고 이해했고, 그래서 위에서 진짜로 밀어준 느낌임.
글 서두가 ARM이 가장 완화된 모델이라 최적화 여지가 크고 x86이 가장 엄격하다고 단정하는데, 완화된 모델이 별 이득이 없다는 반론도 봤음. Fabian Giesen이 쓴 메모리 오더링 글임.
최근 연구도 Fabian 주장을 뒷받침하는 것 같더라, 링크된 논문 보면.
FEX 자체가 대단함. ARM 핸드헬드 여러 대에 Armada OS 돌려봤는데 이제 쓸 만한 리눅스 머신임, 배터리도 훨씬 오래 감. 문제는 안티치트(EAC 같은)인데 그건 아직 우회 가능함.