문제

IA-32는 CPU가 전체 TLB를 무효화 할 수있는 다양한 경우를 정의합니다. AMD가 Opteron Rev-F 프로세서 (Barcelona?)에서 발표 한 ASID 확장으로 시작하여 특정 ASID의 TLB 항목 만 무효화되는 경우가 있습니다.

문제는 ASID 자체가 유효하지 않습니까? 하이퍼 바이저는 ASID가 사용하기 전에 유효한지 확인해야합니까?

도움이 되었습니까?

해결책

생각한다 대답은 '직접적으로 아님'입니다 - AMD 시스템 프로그래밍을보고 있습니다. 사양, VM 제어 블록의 ASID 필드는 단순히 하이퍼 바이저가 VM의 각 인스턴스에 대해 고유 한 값으로 설정하는 (최대) 32 비트 ID이며 TLB 조회에서 추가 태그로 사용됩니다.

X86의 TLB 컨텐츠를 직접 제어 할 수 없으므로 TLB에서 어떤 항목이 무엇인지 제어 할 수 없습니다. 프로세서가 TLB에 항목을 추가하기로 결정하면 항목은 현재 ASID로 태그됩니다. 추가하면 정의가 유효합니다.

이것은 섹션의 다소 로터리 방식으로 설명됩니다. 15.15.1 앞서 언급 한 시스템 프로그래밍 사양 :

단일 지정된 ASID의 모든 번역을 선택적으로 플러시하는 방법을 제공하지 않는 구현에서 소프트웨어는 손님에 대한 새로운 ASID를 할당하여 손님의 TLB 항목을 효과적으로 플러시하고 전체 TLB가 최소한 플러시 될 때까지 이전 ASID를 재사용하지 않을 수 있습니다. 한 번.

이는 프로세서가 유효하거나 유효하지 않은 ASID의 개념이 없음을 의미합니다.이 값은 TLB가 TLB 항목과 일치 해야하는 숫자 일뿐입니다. 따라서 하이퍼 바이저가 ASID를 재사용하기 전에 ASID를 올바르게 플러시하지 않으면 오래된 TLB hits가됩니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top