x86エミュレーションを遅くしている本当の犯人は、メモリモデルだった
x86アプリをARM上で動かすとき、命令の互換性だけでなく「メモリがどう見えるか」まで合わせないといけない。FEX-Emuは、その中でも見落とされがちな x86-TSO の扱いが、実は性能を大きく左右していると説明している。この記事は、単なるエミュレータの実装話ではない。ARM側の世代差や拡張機能の違いが、同じx86アプリでも体感を変えてしまう現実を、かなり具体的に示している。 FEX-Emuは、Linux上でx86/x86-64アプリを動かすユーザーモードエミュレータだ。その開発チームが今回取り上げたのは、x86エミュレーション全体にのしかかる「x86 Total Store Ordering memory model(x86-TSO)」の問題だった。メモリモデルとは、読み書きの順序や見え方をどう保証するかというルールのことだが、x86はかなり厳格で、書き込みが他のCPUにもすぐ見える前提をプログラマが置きやすい。一方でARMは弱い整合性を前提にしていて、ハードウェアがより効率よく動ける代わりに、順序の保証は薄い。 FEXは最初、ARMv8.0-a環境ではx86のloadをARMのl
papoo.work