HeadlinesBriefing favicon HeadlinesBriefing.com

Насущность эмуляции x86 на ARM

Hacker News •
×

Добро пожаловать в первую статью-фичу на нашем сайте. Мы рассмотрим текущую проблему эмуляции x86, которая затрагивает каждое приложение, которое мы эмулируем. Это сводится к единственному общему термину, который имеет масштабные последствия; эмуляция модели памяти Total Store Ordering x86 (x86-TSO). Проблемы эмуляции этой модели памяти на слабой модели памяти, определенной ARM, многофакторны и охватывают несколько проблем. Мы рассмотрим все проблемы, с которыми мы можем столкнуться, и способы их решения (или в некоторых случаях мы не можем решить) в этой статье.

Именно что такое x86-TSO? Модель памяти — это набор правил, определяющих, как операции доступа к памяти в системе взаимодействуют друг с другом. Правила определяют, как загрузки и записяи взаимодействуют в однопоточной или многопоточной среде. Две модели, которые нам сегодня важны, это ARM модель расслабленной (или слабой) согласованности, и вариант x86 модели согласованности Total Store Ordering. Эти две модели по сути являются двумя крайними точками спектра; где ARM самая расслабленная, позволяя значительные аппаратные оптимизации; а x86 самая строгая, накладывающая очень сильную модель согласованности.

Поскольку TSO очень строг, программист может предположить, что когда происходит операция записи в память, она будет согласованно видна всем другим процессорам. Слабая модель памяти, которую определяет ARM, не так интуитивна. По умолчанию обычные операции загрузки и записи в память не являются строго согласованными между процессорами, позволяя процессору работать более эффективно. ARM ввела инструкции памяти load-acquire и store-release для решения вопросов согласованности, сопоставленные с memory_order_acquire и memory_order_release в C++ std::atomic.