Pergunta

IA-32 define vários casos em que a CPU pode invalidar toda a TLB. Começando com as extensões ASID que a AMD lançado em processadores Opteron Rev-F (Barcelona?), Há casos em que apenas as entradas TLB de um determinado ASID são invalidados.

A questão é, será que o próprio ASID nunca deixar de ser válido? Será que o Hypervisor tem que verificar que um ASID é válido antes de usá-lo?

Foi útil?

Solução

I pensar , a resposta é 'não diretamente' - olhando para a programação do sistema AMD especificação , o campo ASID no bloco de controlo de VM é simplesmente um (até) 32 bits ID do que os conjuntos de hypervisor com um valor único para cada exemplo de uma máquina virtual, e é usado como um adicional tag na pesquisa TLB.

Como você não tem controle direto sobre o conteúdo TLB em x86, você não pode controlar o que as entradas acabar na TLB - se o processador decide adicionar uma entrada no TLB, a entrada será marcado com a ASID atual , que por definição será válida quando adicionado.

Esta é descrito de uma forma um tanto rotunda na seção 15.15.1 da especificação programação do sistema mencionado anteriormente:

Em implementações que não fornecem uma maneira de limpar seletivamente todas as traduções de um único especificado ASID, software pode efetivamente liberar entradas TLB do hóspede através da atribuição de um novo ASID para o hóspede e não reutilizar a antiga ASID até que toda a TLB tem sido corada pelo menos uma vez.

Isto implica que o processador não tem noção de ASIDs válidos ou inválidos - é apenas um número cujo valor atual deve corresponder a um TLB entradas ASID para a TLB para bater. Portanto, se o hypervisor não lavar corretamente um ASID antes de reutiliza-lo, você vai ter acessos TLB obsoletos.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top