3.3.2 PCI設備對不可Cache的存儲器空間進行DMA讀寫
在x86處理器和PowerPC處理器中,PCI設備對“不可Cache的存儲器空間”進行DMA讀寫的過程並不相同。其中PowerPC處理器對“不可Cache的存儲器空間”進行DMA讀寫進行了專門的處理,而x86處理器在對這類空間操作時,效率相對較低。
1 x86處理器
x86處理器使用MTRR(Memory Type Range Register)寄存器設置存儲器空間的屬性,如果存儲器空間為“可Cache空間”,x86處理器還可以進一步設置這段空間為“Write Through”、“Write Combining”、“Write Protect”和“Write Back”。但是這些設置與PCI設備進行DMA操作時,是否進行Cache一致性操作並沒有直接關係。
在x86處理器係統中,一個PCI設備進行DMA寫操作,可以將數據從PCI設備寫入到主存儲器中。這個數據首先需要通過HOST主橋,然後經過FSB發送到存儲器控製器。雖然在x86處理器係統中,CPU知道這個存儲器區域是否為“可Cache的”,但是HOST主橋並不知道PCI設備訪問的存儲器地址是否為“可Cache的”,因此都需要使用“Cache一致”的FSB總線傳送事務進行存儲器寫操作,從而數據在發向FSB時,CPU必須要進行總線監聽,通知FSB總線這段空間是“不可Cache的”。
在x86處理器中,PCI設備向不可Cache的存儲器空間進行讀操作時,CPU也必須進行Cache共享一致性操作,而這種沒有必要的Cache共享一致性操作將影響PCI總線的傳送效率。當PCI設備所訪問的存儲器空間沒有在CPU的Cache命中時,CPU會通知FSB,數據沒有在Cache中命中,此時PCI設備訪問的數據將從存儲器中直接讀出。
x86處理器在前端總線上進行Cache共享一致性操作時,需要使用Snoop Phase,如果PCI設備能事先得知所訪問的存儲器是“不可Cache的”,就可以不在前端總線上進行Cache共享一致性操作,即FSB總線事務可以不包含Snoop Phase,從而可以提高前端總線的使用效率。但是x86處理器並不支持這種方式。
在x86處理器係統中,無論PCI設備訪問的存儲器空間是否為“不可Cache的”,都需要進行Cache共享一致性操作。這也是PCI總線在x86處理器使用中的一個問題。而PCIe總線通過在數據報文中設置“Snooping”位解決了這個問題,有關PCIe總線Snooping位的內容參見第6.1.3節。
2 PowerPC處理器
在MPC8548處理器中,HOST主橋可以通過PIWARn寄存器的RTT字段和WTT字段預知PCI設備訪問的存儲器空間是否為可Cache空間。當HOST主橋訪問“不可Cache空間時”,可以使用FSB總線的“不進行Cache一致性”的總線事務。
此時PowerPC處理器不會在FSB總線中進行Cache一致性操作,即忽略FSB總線事務的Snoop Phase。PCI設備進行DMA寫時,數據將直接進入主存儲器,而PCI設備進行DMA讀所讀取的數據將直接從主存儲器獲得。與x86處理器相比,PowerPC處理器可以忽略CPU進行總線監聽的動作,從而提高了FSB傳送效率。
最後更新:2017-04-03 16:48:39