天天看點

3.3.2 PCI裝置對不可Cache的存儲器空間進行DMA讀寫

在x86處理器和powerpc處理器中,pci裝置對“不可cache的存儲器空間”進行dma讀寫的過程并不相同。其中powerpc處理器對“不可cache的存儲器空間”進行dma讀寫進行了專門的處理,而x86處理器在對這類空間操作時,效率相對較低。

x86處理器使用mtrr(memory type range register)寄存器設定存儲器空間的屬性,如果存儲器空間為“可cache空間”,x86處理器還可以進一步設定這段空間為“write through”、“write combining”、“write protect”和“write back”。但是這些設定與pci裝置進行dma操作時,是否進行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節。

此時powerpc處理器不會在fsb總線中進行cache一緻性操作,即忽略fsb總線事務的snoop phase。pci裝置進行dma寫時,資料将直接進入主存儲器,而pci裝置進行dma讀所讀取的資料将直接從主存儲器獲得。與x86處理器相比,powerpc處理器可以忽略cpu進行總線監聽的動作,進而提高了fsb傳送效率。