컨텍스트 스위치의 캐시 내용은 어떻게됩니까?


50

멀티 코어 프로세서에서 컨텍스트 전환이 해당 캐시에서 발생할 때 코어 캐시의 내용 (예 : L1)은 어떻게됩니까?

동작이 아키텍처에 종속적입니까? 아니면 모든 칩 제조업체가 따르는 일반적인 동작입니까?

답변:


42

프로세서 (프로세서 시리즈뿐만 아니라 모델마다 다를 수 있음)와 운영 체제에 따라 다르지만 일반적인 원칙이 있습니다. 프로세서가 멀티 코어인지 여부는이 측면에 직접적인 영향을 미치지 않습니다. 동일한 프로세스가 여러 코어에서 동시에 실행될 수 있으며 (멀티 스레드 인 경우) 프로세스간에 메모리를 공유 할 수 있으므로 컨텍스트 스위치에서 발생하는 상황에 관계없이 캐시 동기화를 피할 수 없습니다.

프로세서가 캐시에서 메모리 위치를 검색 할 때 MMU 가있는 경우 해당 위치의 실제 주소 또는 가상 주소를 사용할 수 있습니다 (때로는 둘 다의 조합도 가능하지만 실제로는 관련이 없습니다).

실제 주소를 사용하면 어떤 프로세스가 주소에 액세스하는지는 중요하지 않으며 내용을 공유 할 수 있습니다. 따라서 컨텍스트 전환 중에 캐시 컨텐츠를 무효화 할 필요가 없습니다. 두 프로세스가 다른 속성과 같은 물리적 페이지를 매핑하는 경우이의 (a 역할을하는 MMU에 의해 처리됩니다 MPU (메모리 보호 장치)). 물리적으로 처리 된 캐시의 단점은 MMU가 프로세서와 캐시 사이에 있어야하므로 캐시 조회 속도가 느리다는 것입니다. L1 캐시는 물리적 주소가 거의 없습니다. 더 높은 수준의 캐시가있을 수 있습니다.

동일한 가상 주소는 다른 프로세스에서 다른 메모리 위치를 나타낼 수 있습니다. 따라서 가상 주소가 지정된 캐시를 사용하면 프로세서와 운영 체제가 협력하여 프로세스가 올바른 메모리를 찾도록해야합니다. 몇 가지 일반적인 기술이 있습니다. 운영 체제에서 제공하는 컨텍스트 전환 코드는 전체 캐시를 무효화 할 수 있습니다. 이것은 정확하지만 비용이 많이 듭니다. 일부 CPU 아키텍처에는 캐시 라인에 ASMU (주소 공간 식별자)를위한 프로세스 버전의 하드웨어 버전 인 MMU에서도 사용할 수있는 공간이 있습니다. 이렇게하면 캐시 항목을 다른 프로세스와 효과적으로 분리 할 수 ​​있으며 같은 페이지를 매핑하는 두 프로세스가 동일한 실제 페이지에 대해 일관되지 않은보기를 갖게됩니다 (일반적으로 공유 페이지를 나타내는 특수한 ASID 값이 있음) 그러나 매핑 된 모든 프로세스에서 동일한 주소에 매핑되지 않은 경우 플러시해야합니다. 운영 체제가 서로 다른 프로세스가 겹치지 않는 주소 공간을 사용하도록 관리하는 경우 (가상 메모리 사용의 일부 목적을 상실하지만 때때로 수행 될 수 있음) 캐시 라인은 계속 유효합니다.

MMU가있는 대부분의 프로세서에도 TLB가 있습니다. TLB는 가상 주소에서 실제 주소로의 매핑 캐시입니다. 가능한 경우 물리적 주소를 신속하게 결정하기 위해 물리적 주소 캐시에서 조회하기 전에 TLB에 문의합니다. 프로세서는 캐시 라인에서의 오프셋을 결정하는 비트들과 페이지를 결정하는 비트들 사이에서, 어드레스의 중간 비트들로부터 후보 캐시 라인들이 종종 식별 될 수 있기 때문에, TLB 룩업이 완료되기 전에 캐시 룩업을 시작할 수있다. 캐시 적중이있는 경우 가상 주소가 지정된 캐시는 TLB를 우회하지만, 프로세서가 누락 된 경우 캐시를 쿼리하는 동안 TLB 조회를 시작할 수 있습니다.

TLB 자체는 컨텍스트 전환 중에 관리되어야합니다. TLB 항목에 ASID가 포함되어 있으면 그대로 유지할 수 있습니다. 운영 체제는 ASID의 의미가 변경된 경우 (예 : 프로세스가 종료 된 경우)에만 TLB 항목을 플러시하면됩니다. TLB 항목이 전역 인 경우 다른 컨텍스트로 전환 할 때 무효화되어야합니다.


2
매우 유익합니다. 이것이 실제 아키텍처에서 어떻게 수행되는지에 대한 몇 가지 예를 추가 할 수 있다면 더 좋습니다.
JohnTortugo

2
@JohnTortugo 내가 작성한 것은 ARMv7에서 수행 할 수있는 작업 (예 : 스마트 폰의 CPU) (MMU 처리 코드를 작성한 유일한 아키텍처)과 상당히 유사합니다. 나는 x86과 같은 다른 플랫폼이 상당히 비슷할 것으로 기대하지만 그것에 대해 쓸 수는 없습니다. 실제 플랫폼에 대한 구체적인 정보를 찾고 있다면 Computer Science 는 올바른 사이트가 아닙니다. 스택 오버플로 또는 전기 공학 또는 임베디드 (제안)에 요청할 수 있습니다.
Gilles 'SO- 악마 그만해'

10

캐시는 일반적으로 컨텍스트 전환을 잊어 버립니다. 액세스되는 일련의 메모리 주소 만 대체 할 캐시 라인을 결정합니다.

대체 정책은 일반적으로 제조업체 및 특정 마이크로 아키텍처에 따라 발견 적 방법입니다. 문제는 휴리스틱이 미래를 예측할 수 없으므로 다음에 캐시 주소에 액세스 할 주소를 결정합니다.

휴리스틱은 LRU (최근에 사용)처럼 단순 할 수 있습니다. 그러나 최신 CPU에서는 휴리스틱이 더 복잡합니다.

상기 봐 인텔 ® 64 및 IA-32 아키텍처 소프트웨어 개발자 설명서 제 3 권 제 11 장하면 메모리 캐시와 캐시 제어 메커니즘을 설명합니다. AMD는 AMD64 아키텍처 프로그래머 매뉴얼 제 2 권 : 시스템 프로그래밍의 7 장에 있습니다. ARM 기반 CPU의 경우 PDF는 등록 된 고객 만 사용할 수있는 것 같습니다.


첫 번째 단락에 대한 참조를 줄 수 있습니까? 또는 링크 된 문서가이 문제를 참조합니까?
Raphael

캐시의 물리적 또는 가상 주소 지정 여부에 따라 동작이 크게 달라집니다. 교체 정책은 여기서 관련이 없습니다. ARM의 경우 프로세서 기술 매뉴얼에 공개 된 정보가 있습니다 (예 : Cortex-A9의 L1 (최신 세대 휴대 전화에서 제공되는 내용)) . 비공개 아키텍처 참조 매뉴얼 없이는 이해하기 어려울 수 있습니다 .
Gilles 'SO- 악마 중지'

1
@Raphael은“전형적으로”썼다. 왜냐하면 프로세서를 사용할 때 캐시 자체에는 스레드, 프로세스, 컨텍스트 등에 대한 지식이 없기 때문이다. 메모리 액세스에만 반응한다. 데이터 캐시가 비워지고 명령 캐시가 컨텍스트 스위치에서 무효화 된 경우 캐시가 아닌이 작업을 트리거하는 것이 OS입니다. 다른 OS를 설치하면이 동작이 변경 될 수 있습니다.
uli

@Gilles 일단 짧은 대답을하려고 시도했지만 가상 메모리에 대해 쓰지 않기로 결정했습니다. 이것은 즉시 OS와 관련이 있기 때문입니다. 그리고 고려해야 할 시간도 있습니다. 캐시 내용이 무효화 될 수 있지만 전혀 변경되지 않기 때문에 컨텍스트 변경과 다음 메모리 액세스 사이의 시간 동안“아무것도 변경되지 않음”이 답이 될 수 있습니다.
uli
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.