Когда ASID в расширениях таблиц страниц AMD больше не действителен? - PullRequest
1 голос
/ 08 июля 2009

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

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

1 Ответ

1 голос
/ 09 июля 2009

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

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

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

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

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

...