Coerência de cache do IOMMU

1

Nas placas-mãe x86 / x64 de hoje, pode ser encontrado o IOMMU da Intel e AMD. Eles permitem que dispositivos periféricos executem operações de DMA (acesso direto à memória) na RAM do sistema usando endereços de memória virtual em vez de físicos.

Agora, vamos supor que o dispositivo periférico que executa a operação de DMA usando o IOMMU contenha alguma memória para armazenar em cache a RAM do sistema, a fim de otimizar o processamento de dados acessados com freqüência. Como a coerência de memória pode ser assegurada entre o cache do dispositivo periférico e a RAM do sistema neste caso? Sempre que o dispositivo periférico modifica alguns dados em seu cache sem gravá-los de volta na RAM do sistema, qualquer acesso à mesma memória da CPU afetaria dados obsoletos.

A única opção eficiente que posso ver é que o dispositivo periférico diz ao IOMMU para invalidar cada página que lê da RAM do sistema, já que essa página seria armazenada em cache pelo dispositivo periférico. Sempre que a CPU acessasse qualquer página previamente lida pelo dispositivo periférico, uma falha de página seria acionada. Assim, um manipulador de falhas de página se preocuparia em liberar a página do cache do dispositivo periférico e lê-la de volta na RAM do sistema.

É algo assim possível? Especialmente, o próximo modelo de programação HSA me faz acreditar, pois uma de suas principais características é um espaço de memória unificado que é compartilhado entre as CPUs e as unidades de computação periféricas. Como essas unidades de computação provavelmente terão caches, o problema de coerência de memória já deve ter sido tratado de alguma forma.

Obrigado por sua ajuda!
David

    
por David 23.09.2014 / 18:34

0 respostas