2016-09-07 64 views
0

有關ArmV7-A中緩存的另一個問題。 在這種情況下,所討論的SoC是Allwinner A20,雙核Cortex-A7。具有非共享屬性的PoU

從我讀到的內容來看,PoU的定義是核心的指令和數據緩存保證能夠看到同一個內存位置的副本。

關於所討論的SoC,由於兩個內核共享L2(統一)緩存的PoU,這意味着無論放在L1中,L2都可以看到。是對的嗎?

即使我將內存區域的屬性更改爲Non-Shareable,L2將能夠看到內核中L1 內部的內容。真的嗎?

要闡述我的意思通過,我做了一個小實驗:

當我寫到內存地址內不可共享,寫回從核心0#區域。然後,在沒有執行任何Cache維護操作的情況下,當我嘗試從內核#1讀取相同的內存地址時,發生它讀取從內核#0寫入的正確值。

我推測這種行爲是L2是PoU的結果,因此,當我從核心#0寫入時,L2也存儲它的一個副本(即使它沒有被刷新)。然後當我從核心#1讀取時,在讀取未命中後,核心#1的L1從L2讀取存儲器值。

+0

從一個CPU寫入並從另一個CPU中讀取與PoU無關,因爲兩者都是_data_訪問。 – Notlikethat

+0

@Notlikethat也感謝其他問題。你能詳細說明一下嗎? PoU與數據訪問無關嗎?我仍然不知道爲什麼其他CPU可以訪問我在第一個cpu上編寫的內容。如果區域settin是不可共享的,Writeback –

回答

1

...因爲兩個核心在L2(統一)緩存共享PoU,這意味着無論放在L1中,L2都可以看到。是對的嗎?

第一個CPU的數據訪問可能監聽同一個可共享域中另一個CPU的數據緩存,但這與指針訪問的PoU無關;它只是一致性協議。

即使我將內存區域的屬性更改爲Non-Shareable,L2也將能夠看到任何內核中的L1內部。真的嗎?

不可共享內存不保證一致性。當然,你可能可能看到它的工作 - 也許Cortex-A7恰好仍然監聽不可共享的緩存行,或者你的數據剛剛從L1D自然驅逐,同時另一個CPU在L2 - - 但它絕對不應該依賴。無論哪種方式,讓多個CPU訪問相同的不可共享位置在實踐中是完全倒退的事情;你故意說你不想分享它!

+0

謝謝!我還沒有檢查用於非共享內存區域的ReadNoSnoop實際上是否定義了實現,或者是否需要Cortex-A7。我所做的實際上是檢查我對非共享區域的假設,我的假設是它應該只對cpu獨佔。你的回答確實回答了我的一些疑問,但是,我暫時不會回答這個問題。 –

+0

我想象一下,如果一個不可共享的負載在那裏丟失,那麼L2會將ReadNoSnoop事務發送到ACE接口,所以我不希望多集羣系統中的集羣之間出現這種「偶然」的一致性 - 在一個集羣內但是,事情更加緊密地聯繫在一起,而且您基本上正在查看SCU的實現細節。 – Notlikethat

+0

這裏是我從內部存儲器訪問中看到的,使用Cortex-A53 TRM列出的編碼:在我從cpu0寫入後,L1D cpu0中的緩存行是'Modified',那麼只有在我從cpu1讀取L1D cpu1緩存行變成了「擁有」,並且L1D cpu0變成了「共享」。 –