2011-07-04 1 views
1

은 교수는 우리에게 다음과 같은 질문을 제기 : 제한이나 그들이 될 수 있습니다 이유장치를 처리 할 때 캐시에 제한이 있습니까? 내 컴퓨터 아키텍처 클래스에서

"Caches can have serious limitations when dealing with devices. Why is this?" 

나는 아무 생각이 없습니다. Google에서 검색 한 후 이에 대한 정확한 답변을 찾을 수 없습니다. 어떤 사람이 왜 제한이 있고 그 한계가 무엇인지 설명 할 수 있습니까? 아니면 질문에 답할 때 도움이 될 수있는 방향으로 나를 가리키게 할 수 있습니까?

답변

2

즉, 장치에 실제로 보내지는 내용/시간을 제어 할 수 없습니다.

0

기본적으로 데이터가 캐시에서 플러시되고 통화하는 장치에 정확히 알려지는 방법을 찾아야합니다. RAM은 다른 장치와 마찬가지로 장치이며 위치에 기록 된 마지막 데이터를 기억합니다. RAM에 저장되지 않으면 장치에서도 쓰기를 볼 수 없습니다. Linux는 아키텍처에 따라 읽기/쓰기 장벽이라는 기능을 사용합니다.

How Linux deals with it

2

캐시 및 장치와 두 가지 문제가 있습니다. 첫 번째 문제는 기본적인 기능적 정확성 중 하나입니다. 즉, 시스템은 일반적으로 캐시를 완전히 우회하는 주소 범위에 장치의 메모리 매핑 레지스터를 배치해야합니다. 이것이 일어나지 않았고 캐시가 "도중에"있다고 상상해보십시오. 이 경우 장치에서 상태 레지스터를 읽으려고하는 소프트웨어가 캐시에서 제공 한 부실 값을 읽습니다! 장치 드라이버를 작동시키는 것이 좋습니다. 일부 CPU는 캐시 할 수없는 액세스에 대한 특별한 지침을 제공하지만 캐시는 아무런 이점도 제공하지 않으며 장치 메모리를 처리 할 때 문제가 복잡해 지므로 기본 결과는 동일합니다.

두 번째 문제는 메모리와 직접 메모리 액세스 (DMA) 트랜잭션을 수행 할 수있는 스마트 장치의 성능 문제입니다. 디바이스가 DMA 쓰기를 수행하면 시스템의 하드웨어 버스 로직은 MESI 프로토콜에 따라 CPU에서 캐시 라인을 완전히 스누핑 (snoop)합니다. 코어는 효율성을 위해 데이터를 긴밀한 캐시에 보관하는 데 크게 의존합니다. 이제는 장치가 모든 캐시 라인을 제거하여 다음 소프트웨어 액세스시 코어가 대기 시간을 길게 다시로드하게 만듭니다. 동일한 스누핑은 대개 CPU가 데이터 라인에 공유 상태를 피하기 때문에 DMA 읽기에서도 발생합니다.

CPU 자체에 통합 된 장치는 CPU의 마지막 레벨 캐시에 상주하는 캐시 라인을 남겨 둘 수 있습니다. 이는 CPU 패키지 외부의 장치에 비해 성능이 크게 향상 될 수 있습니다.

관련 문제