2016-09-07 2 views
0

ArmV7-A의 캐싱에 대한 또 다른 질문. 이 경우 해당 SoC는 Allwinner A20, Dual-Core Cortex-A7입니다.공유 할 수없는 속성을 가진 PoU

내가 읽은 바에 따르면, 코어에 대한 PoU의 정의는 코어의 명령어 및 데이터 캐시가 메모리 위치의 동일한 사본을 보도록 보장되는 지점입니다.

문제의 SoC와 관련하여 두 코어가 모두 L2 (Unified) 캐시에서 PoU를 공유하기 때문에 L1에 넣어 진 내용이 L2에서 볼 수 있음을 의미합니다. 그게 맞습니까?

메모리 영역의 속성을 비 공유 가능으로 변경하더라도 L2는 어느 한 코어의 L1 내부를 확인할 수 있습니다.. 그게 사실이야? 내가 그 무슨 뜻인지 자세히 설명하려면

, 나는 약간의 실험을 수행 한 : 나는 내부에 메모리 주소에 쓴

공유 불가, 쓰기로 돌아 가기 핵심 # 0에서 지역. 그런 다음 캐시 유지 관리 작업을 수행하지 않고 코어 # 1에서 동일한 메모리 주소를 읽으려고하면 코어 # 0에서 작성된 올바른 값을 읽습니다.

나는이 행동이 L2가 PoU라는 결과라고 추측했다. 따라서 코어 # 0에서 썼을 때, L2는 플러시되지 않은 경우에도 복사본을 저장한다. 그런 다음 코어 # 1에서 읽었을 때, 읽기 실패 후 코어 # 1의 L1이 L2에서 메모리 값을 가져옵니다.

+0

두 CPU가 모두 _data_ 액세스이기 때문에 PoU와는 아무런 관련이 없습니다. – Notlikethat

+0

@ Notlikethat 다른 질문에 대해서도 감사드립니다. 당신은 정교 할 수 있습니까? PoU는 데이터 액세스와 관련이 없습니까? 나는 아직도 다른 cpu가 첫번째 cpu에 쓴 내용에 왜 접근 할 수 있는지 모른다. 지역 설정이 비공유, Writeback –

답변

1

... 두 코어가 모두 L2 (통합) 캐시에서 PoU를 공유하기 때문에 L1에있는 모든 내용이 L2에서 볼 수 있음을 의미합니다. 그게 맞습니까?

아니요. 하나의 CPU 데이터 액세스는 동일한 공유 도메인에서 다른 하나의 데이터 캐시를 스누핑 할 수 있지만 명령 액세스를위한 PoU와는 아무런 관련이 없습니다. 그것은 단지 일관성 프로토콜 일뿐입니다.

메모리 영역의 속성을 비 공유 가능으로 변경하더라도 L2는 양쪽 코어 중 L1의 내부를 볼 수 있습니다. 그게 사실이야?

아니요. 공유 할 수없는 메모리는 일관된 것으로 보장되지 않습니다. 물론, 일 수도 있습니다. 아마도 Cortex-A7이 공유 할 수없는 캐시 라인을 스누핑하는 경우가 발생할 수 있습니다. 아니면 다른 CPU가 L2에서 충돌하는 등 자연스럽게 L1D에서 데이터가 제거되었을 수 있습니다. 의지해서는 안된다. 어느 쪽이든, 여러 개의 CPU가 같은 비공유 위치에 액세스하는 것은 실제로는 완전히 뒤로하는 일입니다. 당신은 그것을 공유하고 싶지 않다고 고의적으로 말했습니다!

+0

고맙습니다! Non-Shareable 메모리 영역에 대한 ReadNoSnoop이 Cortex-A7에 실제로 정의되어 있거나 구현되어 있는지 확인하지 않았습니다. 내가하고있는 일은 실제로 비공유 지역에 대한 나의 가정을 점검하고 나의 가정은 그것이 오직 CPU에만 배타적이어야한다는 것이었다. 귀하의 답변은 의심의 일부에 대한 답변을했지만, 나는이 질문을 당분간 대답하지 않은 상태로 남겨 둘 것입니다. –

+0

공유 할 수없는로드가 누락 된 경우 L2가 ReadNoSnoop 트랜잭션을 ACE 인터페이스로 보내면 다중 클러스터 시스템의 클러스터간에 '우발적 인'일관성이 기대되지 않을 것입니다. 단일 클러스터 내에서 하지만 일들은 좀 더 밀접하게 결합되어 있습니다. SCU의 구현 세부 사항을 본질적으로 살펴보아야합니다. – Notlikethat

+0

여기 내가 Cortex-A53 TRM에 나열된 인코딩을 사용하여 내부 메모리 액세스에서 본 내용입니다. cpu0에서 쓴 후 L1D cpu0의 캐시 라인은 '수정 됨'입니다. 그런 다음 cpu1, L1D cpu1 캐시 라인은 'Owned'가되고, L1D cpu0는 'Shared'가됩니다. –

관련 문제