天天看点

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传送效率。