在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总线传送事务[1]进行存储器写操作,从而数据在发向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寄存器[2]的RTT字段和WTT字段预知PCI设备访问的存储器空间是否为可Cache空间。当HOST主桥访问“不可Cache空间时”,可以使用FSB总线的“不进行Cache一致性”的总线事务。

此时PowerPC处理器不会在FSB总线中进行Cache一致性操作,即忽略FSB总线事务的Snoop Phase。PCI设备进行DMA写时,数据将直接进入主存储器,而PCI设备进行DMA读所读取的数据将直接从主存储器获得。与x86处理器相比,PowerPC处理器可以忽略CPU进行总线监听的动作,从而提高了FSB传送效率。




[1] FSB总线定义了许多总线事务,有的FSB总线提供了一个Snoop信号,该信号为1时表示当前FSB的总线事务需要进行Cache共享一致性,为0时不需要进行Cache共享一致性。

[2] 该寄存器在Inbound寄存器组中,详见第2.2.3节。

3.3.2 PCI设备对不可Cache的存储器空间进行DMA读写的更多相关文章

  1. 3.3.3 PCI设备对可Cache的存储器空间进行DMA读写

    PCI设备向"可Cache的存储器空间"进行读操作的过程相对简单.对于x86处理器或者PowerPC处理器,如果访问的数据在Cache中命中,CPU会通知FSB总线,PCI设备所访 ...

  2. 2.3 PCI桥与PCI设备的配置空间

    PCI设备都有独立的配置空间,HOST主桥通过配置读写总线事务访问这段空间.PCI总线规定了三种类型的PCI配置空间,分别是PCI Agent设备使用的配置空间,PCI桥使用的配置空间和Cardbus ...

  3. 3.2 PCI设备的数据传递

    PCI设备的数据传递使用地址译码方式,当一个存储器读写总线事务到达PCI总线时,在这条总线上的所有PCI设备将进行地址译码,如果当前总线事务使用的地址在某个PCI设备的BAR空间中时,该PCI设备将使 ...

  4. lspci - 列出所有PCI设备

    总览 SYNOPSIS lspci [options] 描述 DESCRIPTION lspci 是一个用来显示系统中所有PCI总线设备或连接到该总线上的所有设备的工具. 为了能使用这个命令所有功能, ...

  5. 3.3.4 PCI设备进行DMA写时发生Cache命中

    如果PCI设备访问的地址在某个CPU的Cache行中命中时,可能会出现三种情况. 第一种情况是命中的Cache行其状态为E,即Cache行中的数据与存储器中的数据一致:而第二种情况是命中的Cache行 ...

  6. 系统虚拟化学习笔记——PCI设备

    内容摘自<系统虚拟化:原理与实现> PCI 总线架构 PCI总线是典型的树结构.把北桥中host-PCI桥看做根,总线中其他PCI-PCI桥,PCI-ISA桥(ISA总线转PCI总线桥)等 ...

  7. linux PCI设备初始化过程

    linux PCI设备初始化过程 start_kernel->rest_init 这个函数会启动一个核心线程0, 核心线程然后调用init -> do_basic_setup. 然后我们开 ...

  8. 利用WinDriver开发PCI设备驱动程序

    摘要 WinDriver是Jungo公司出版的一个设备驱动程序开发组件,它可以大大加速PCI设备驱动程序的开发.作者在实际的项目中采用了WinDriver来开发设备驱动程序,取得了相当好的运行效果.从 ...

  9. 3.1 PCI设备BAR空间的初始化

    在PCI Agent设备进行数据传送之前,系统软件需要初始化PCI Agent设备的BAR0~5寄存器和PCI桥的Base.Limit寄存器.系统软件使用DFS算法对PCI总线进行遍历时,完成这些寄存 ...

随机推荐

  1. Win10图片打开方式没有“Windows照片查看器”,如何找回?

    如果你是全新安装的Win10正式版,那么就会发现当在图片上点击右键时,"打开方式"菜单里熟悉的"Windows照片查看器"不见了,换成了Win10全新的&quo ...

  2. Chocolatey 和 Redis windows安装记录

    前言 最近研究redis,发现Redis没有官方的windows版本,但MsOpenTech有一直维护对应的Redis版本,其下载地址如下: https://github.com/MSOpenTech ...

  3. FAILED: Execution Error, return code 1 from org.apache.hadoop.hive.ql.exec.DDLTask. MetaException(message:javax.jdo.JDODataStoreException: An exception was thrown while adding/validating class(es) :

    在hive命令行创建表时报错: FAILED: Execution Error, return code 1 from org.apache.hadoop.hive.ql.exec.DDLTask. ...

  4. javase学习小结三

    格式标识符: System.out.printf("%d,%f,%5d,%-9.4f,%%,%13e",67,78.9,89,78.9,567.345); 输出结果为:67,78. ...

  5. POJ 2154 Color [Polya 数论]

    和上题一样,只考虑旋转等价,只不过颜色和珠子$1e9$ 一样的式子 $\sum\limits_{i=1}^n m^{gcd(i,n)}$ 然后按$gcd$分类,枚举$n$的约数 如果这个也化不出来我莫 ...

  6. linux常用命令(不断更新)

    睡眠命令(第一步可省去): 1.查看你的系统支持什么模式:cat /sys/power/state(我的系统为:freeze mem disk) 2.切换到管理员模式下,执行命令:echo " ...

  7. nodejs express搭建一个网站整理

    先前用安卓完成了一个优惠券搜索的app,发现在app上操作比较麻烦,于是决定弄个网页版的.做网站是自己的擅长的,毕竟毕业之后咱一直用asp.net mvc做网站也好几个年头了. 可是这次我又想换个方式 ...

  8. IDEA的导包优化问题

    一.现象 文件初始导包状态 package co.x.dw.function; import java.text.SimpleDateFormat; import java.util.ArrayLis ...

  9. 03-PHP-memcached

    [安装memcached] [安装 libevent] $ tar zxvf libevent-2.0.20-stable.tar.gz $ cd libevent-2.0.20-stable/ $ ...

  10. Mac 系统安装 oh my zsh

    先来张图感受一下: 安装oh my zsh: 1.克隆这个项目到本地(前提是你得有装git) git clone git://github.com/robbyrussell/oh-my-zsh.git ...