2013-08-23 4 views
2

나는 perf를 기본 이벤트 카운터로 사용하고 있습니다. 데이터 캐시 저장소 누락으로 고통받는 프로그램에서 일하고 있습니다. 어느 것이 % 80의 비율만큼 높습니다.cpu 캐시 성능. 상점 미스 대로드 미스

나는 캐시가 어떻게 작동하는지 안다. 다양한 미스 케이스에서 메모리에서로드하고 기꺼이 캐시에서 데이터를 제거합니다. 내가 이해하지 못하는 점은 상점로드 미스의 차이점은 무엇입니까? 로드 및 저장과 다른 점은 무엇입니까? 당신은 어떻게 놓칠 수 있습니까?

답변

1

로드 미스는 프로세서가 주 메모리에서 데이터를 가져와야하지만 캐시에 데이터가없는 경우를 나타냅니다. 따라서 프로세서가 메인 메모리의 일부 데이터를 원할 때마다 캐시를 ​​요구하고 데이터가 이미로드 된 경우로드가 발생합니다. 그렇지 않으면로드 미스가 발생합니다.

저장소 미스는 프로세서가 새로 계산 된 데이터를 주 메모리에 다시 쓰려는 경우와 관련이 있습니다. 주 메모리에 데이터를 다시 쓰려고 할 때 저장소의 내용이 캐시와 주 메모리가 서로 동기화됩니다. 다음 두 가지 정책으로 발생할 수 있습니다. Writing Policies.

그래서 어떤 정책을 선택 하든지 먼저 데이터가 캐시에 저장되어 있는지 먼저 확인하여 캐시에 저장할 수있게해야합니다 (더 빠르기 때문에). 그리고 찾고있는 데이터 블록이 캐시에서 제거되면 해당 캐시와 관련된 상점 미스가 발생합니다.

the applet here을 확인하면 다른 시나리오에서 어떤 현상이 발생하는지 더 잘 이해할 수 있습니다.

+0

위대한! 고마워요. 기본적으로 저장소가 쓰기를 의미한다는 것을 이해하지 못했습니다.로드는 메모리에서 읽는 것을 의미합니다. –

+0

이것이 잘못되었다고 생각합니다. perf가 이러한 이벤트를 정의하는 방법에 익숙하지 않지만 "저장소"와 "로드"는 일반적으로 참조하는 데 사용됩니다. 코드에서 수행하는 실제 작업 – Leeor

1

필자는 퍼포먼스를 정의하는 데 익숙하지 않지만 일반적인 정의에 따르면로드/저장소 누락은 전체 누락 율 계산을 분해하는 방법이므로 누락 된 액세스를 더 많이 알 수 있습니다. 자주. 로드는 일반적으로 (적어도 현대 x86 CPU에서는) 추측 적으로 수행되는 반면, 저장소는 커밋 시점 이후에 파이프 라인을 따라 훨씬 나중에 수행되므로로드 및 저장이 모두 동일한 영역의 코드조차도 서로 다른 누락을 가질 수 있습니다 요금.

MESI 기반 캐시 프로토콜에서로드는 캐시에 도달하거나 다른 사람이 소유하지 않은 메모리 또는 다음 캐시 레벨에서 라인을 빼고 가져옵니다. 그렇다면 공유 상태에 있습니다. 이 과정에서 캐시에 데이터를 기록합니다. 저장소는 동일한 방식으로 라인을 페치하지만 독점 소유권과 라인 수정 권한을 부여하는 RFO (소유권 판독을위한) 요청을 사용합니다. 그 라인은 여전히 ​​캐시 될 것입니다. 그러나 일단 새로운 데이터가 로컬 (보통 L1 캐시에 있음)에 쓰여지면 수정 될 것입니다. 히트/미스 프로세스는 동일하게 보일 것입니다.

Saman이 대답에서 언급 한 것은 읽기와 쓰기 간의 분류입니다. 로드 및 저장 (및 코드 읽기와 같은 다른 액세스 형식)은 모두 "읽기"부분을 형성하고 쓰기 되돌림 (또는 캐시되지 않는 특수 명령 또는 mem 유형을 사용하는 의도적 인 쓰루 스루)은 "쓰기 부분"을 구성합니다.