Когда ASID в расширениях таблицы страниц AMD больше не действителен?

StackOverflow https://stackoverflow.com/questions/1100104

Вопрос

IA-32 определяет различные случаи, в которых центральный процессор может сделать недействительным весь TLB.Начиная с расширений ASID, которые AMD выпустила в процессорах Opteron Rev-F (Барселона?) бывают случаи, когда недействительными признаются только записи TLB определенного ASID.

Вопрос в том, перестает ли когда-нибудь быть действительным сам ASID?Должен ли гипервизор проверять, что ASID действителен, прежде чем использовать его?

Это было полезно?

Решение

Я подумай ответ "не напрямую" - посмотрим на системное программирование AMD спецификация, поле ASID в блоке управления виртуальной машиной - это просто (до) 32-битный идентификатор, которому гипервизор присваивает уникальное значение для каждого экземпляра виртуальной машины и который используется в качестве дополнительного тега при поиске TLB.

Поскольку у вас нет прямого контроля над содержимым TLB на x86, вы не можете контролировать, какие записи попадают в TLB - если процессор решит добавить запись в TLB, запись будет помечена текущим ASID, который по определению будет действительным при добавлении.

Это описано несколько окольным путем в разделе 15.15.1 из ранее упомянутой спецификации системного программирования:

В реализациях, которые не предоставляют способа выборочной очистки всех переводов одного указанного ASID, программное обеспечение может эффективно удалять записи TLB гостя, выделяя новый ASID для гостя и не используя повторно старый ASID до тех пор, пока весь TLB не будет очищен хотя бы один раз.

Это означает, что процессор не имеет понятия о допустимых или недопустимых ASID - это просто число, текущее значение которого должно соответствовать ASID записи TLB, чтобы получить доступ к TLB.Следовательно, если гипервизор неправильно очистит ASID перед его повторным использованием, вы получите устаревшие обращения к TLB.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top