HeadlinesBriefing favicon HeadlinesBriefing.com

A Praga da Emulação x86 na ARM

Hacker News •
×

Bem-vindo ao primeiro artigo de recursos do nosso site. Vamos cobrir um problema em andamento com a emulação de x86 que afeta todas as aplicações que emulamos. Isso se resume a um único termo transversal que tem repercussões de amplo alcance; emular o modelo de memória Total Store Ordering x86 (x86-TSO). Os problemas com emular este modelo de memória na versão de ordem fraca que a ARM define são multifacetados e abrangem múltiplos problemas. Vamos passar por todos os problemas que podemos encontrar e as maneiras como resolvemos (ou em alguns cases não conseguimos resolver) neste artigo.

Exatamente o que é x86-TSO? Um modelo de memória é um conjunto de regras sobre como os acessos à memória em um sistema se comportam em relação um ao outro. As regras determinam como carregamentos e armazenamentos interagem em um ambiente de thread único ou multi-threaded. Os dois que nos importam hoje são o modelo ARM de consistência relaxada (ou fraca), e a variante x86 do modelo de consistência Total Store Ordering. Esses dois modelos são basicamente os dois extremos do espectro; onde a ARM é o mais relaxado, permitindo otimizações de hardware significativas; e x86 é o mais rígido, impõendo um modelo de coerência muito forte.

Com TSO sendo muito rígido, o programador pode assumir que quando uma operação de armazenamento de memória ocorre, ela será visível de forma coerente para todos os outros processadores. O modelo de memória fraco que a ARM tem não é tão intuitivo. Por padrão, as operações normais de carregamento e armazenamento de memória não são estritamente coherentes entre processadores, permitindo que a CPU opere de maneira mais eficiente. A ARM introduziu instruções de memória load-acquire e store-release para abordar a consistência, mapeando para memory_order_acquire e memory_order_release em C++ std::atomic.