在许多高性能处理器中,还提出了一些新的概念,以加速外设到存储器的DMA写过程。如Freescale的I/O Stashing和Intel的IOAT技术。

如图3?8所示,当设备进行存储器写时,如果可以对Cache直接进行写操作时,即便这个存储器写命中了一个状态为M的Cache行,可以不将该Cache行的数据回写到存储器中,而是直接将数据写入Cache,之后该Cache行的状态依然为M。采用这种方法可以有效提高设备对存储器进行写操作的效率。采用直接向Cache行写的方法,PCI设备对存储器写命中一个状态为M的Cache行时,将执行以下操作。

(1)      HOST主桥将对存储器的写请求发送到FSB总线上。

(2)      CPU通过对FSB监听,发现该写请求在某个Cache行中命中,而且该Cache行的状态为M。

(3)      HOST主桥将数据直接写入到Cache行中,并保持Cache行的状态为M。注意此时设备不需要将数据写入存储器中。

从原理上看,这种方法并没有奇特之处,仅需Cache能够提供一个接口,使外部设备能够直接写入即可。但是从具体实现上看,设备直接将数据写入Cache中,还是有相当大的难度。特别是考虑在一个处理器中,可能存在多级Cache,当CPU进行总线监听时,可能是在L1、L2或者L3 Cache中命中,此时的情况较为复杂,多级Cache间的协议状态机远比FSB总线协议复杂的多。

在一个处理器系统中,如果FSB总线事务在“与FSB直接相连的Cache”中命中时,这种情况相对容易处理;但是在与BSB(Back-Side Bus)直接相连的Cache命中时,这种情况较难处理。下文分别对这两种情况进行讨论,在一个处理器中,采用FSB和BSB连接Cache的拓扑如图3?9所示。


当采用FSB总线连接L2 Cache时,L2 Cache直接连接到FSB总线上,设备通过FSB总线向L2 Cache进行写操作并不难实现,MPC8548处理器就是采用了这种结构将L2 Cache直接连接到FSB总线上。

但是由于FSB总线的频率远低于BSB总线频率,因此采用这种结构将影响L2 Cache的访问速度,为此高端处理器多采用BSB总线连接L2 Cache,x86处理器在Pentium Pro之后的高性能处理器都使用BSB总线连接L2 Cache,Freescale的G4系列处理器和最新的P4080处理器也使用BSB总线连接L2 Cache。

当L2 Cache没有直接连接到FSB上时,来自外部设备的数据并不容易到达BSB总线。除了需要考虑Cache连接在BSB总线的情况外,在外部设备进行DMA操作时,还需要考虑多处理器系统的Cache共享一致性协议。设计一个专用通道,将数据从外部设备直接写入到处理器的Cache中并不容易实现。Intel的IOAT和Freescale的I/O Stashing可能使用了这种专用通道技术,直接对L1和L2 Cache进行写操作,并在极大增加了设计复杂度的前提下,提高了处理器系统的整体效率。

以上对Cache进行直接写操作,仅是Intel的IOAT和Freescale的I/O Stashing技术的一个子集。目前Intel和Freescale没有公开这些技术的具体实现细节。在一个处理器系统中,可能存在多级Cache,这些Cache的层次组成结构和状态机模型异常复杂,本章对这些内容不做进一步说明。

3.3.5 DMA写时发生Cache命中的优化的更多相关文章

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

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

  2. 执行 $Gulp 时发生了什么 —— 基于 Gulp 的前端集成解决方案(二)

    前言 文章 在windows下安装gulp —— 基于 Gulp 的前端集成解决方案(一) 中,已经完成对 gulp 的安装,由于是window环境,文中特意提到了可以通过安装 gitbash 来代替 ...

  3. 【已解决】Https请求——基础连接已经关闭 发送时发生错误

    本人在做商用项目的推送消息功能时,借助第三方推送服务.这里避免有打广告的嫌疑,就不报名字了.由于是通过调用API接口,所以Post方法是自己写的,但是在开发环境是可以正常推送的,但是一上线就出各种问题 ...

  4. 问题解决_WCF_WCF 接收我服务的 HTTP 响应时发生错误

    原文地址:http://www.cnblogs.com/tianma3798/p/5470974.html 错误内容: System.ServiceModel.CommunicationExcepti ...

  5. Linux写时拷贝技术(copy-on-write)

    COW技术初窥: 在Linux程序中,fork()会产生一个和父进程完全相同的子进程,但子进程在此后多会exec系统调用,出于效率考虑,linux中引入了“写时复制“技术,也就是只有进程空间的各段的内 ...

  6. 问题解决——使用CriticalSection后 0xXXXXXXXX处最可能的异常: 0xC0000005: 写入位置 0x00000014 时发生访问冲突

    ================声明===================== 本文原创,转载请保持文章的完整性(含本声明),并显要的著名作者和出处. 本文链接:http://blog.csdn.ne ...

  7. 写时复制技术(Copy-on-write)

    COW技术初窥:        在Linux程序中,fork()会产生一个和父进程完全相同的子进程,但子进程在此后多会exec系统调用,出于效率考虑,linux中引入了"写时复制" ...

  8. 启动MFC程序的时候报错:0xC0000005: 读取位置 0x00000000 时发生访问冲突

    此程序的结构是 MouseCap.h #pragma once #include <afxwin.h> class MouseCapApp : public CWinApp { publi ...

  9. 【转】Linux写时拷贝技术(copy-on-write)

    http://www.cnblogs.com/biyeymyhjob/archive/2012/07/20/2601655.html 源于网上资料 COW技术初窥: 在Linux程序中,fork()会 ...

随机推荐

  1. 数据库备份shell脚本

    法一: #!/bin/bash [ ! -d /server/backup ] && mkdir /server/backup mysqldump -u root -A -B > ...

  2. javascript中的Date对象和Math对象

    1.Date对象 1.创建Date对象 var time1=new Date() 方法1:不指定参数 var time1=new Date(); alert(time1.toLocaleString( ...

  3. Python之Suds库调用WCF时复杂参数序列化

    今天主要做自动化测技术支持工作,最近一直在做接口自动化这块,前些天在研究将web页面模拟http进行接口自动化,这周杭州那边想测试WCF服务,所以这两天一直在探索.遇到的第一个问题就是服务参数传参序列 ...

  4. System.nanoTime

    System.currentTimeMillis()返回的毫秒,这个毫秒其实就是自1970年1月1日0时起的毫秒数. System.nanoTime()返回的是纳秒,nanoTime而返回的可能是任意 ...

  5. 洛谷4月月赛R2

    洛谷4月月赛R2 打酱油... A.koishi的数学题  线性筛约数和就可以\(O(N)\)了... #include <iostream> #include <cstdio> ...

  6. Codeforces Round #402 (Div. 2)

    Codeforces Round #402 (Div. 2) A. 日常沙比提 #include<iostream> #include<cstdio> #include< ...

  7. POJ2318 TOYS[叉积 二分]

    TOYS Time Limit: 2000MS   Memory Limit: 65536K Total Submissions: 14433   Accepted: 6998 Description ...

  8. git 添加远程仓

    1.新建远程项目 2.提交代码 $ makdir ~/hello-world    //创建一个项目hello-world    $ cd ~/hello-world       //打开这个项目   ...

  9. 优雅使用 illuminate/database 包中的 Collection

    优雅使用 illuminate/database 包中的 Collection 或许你很抵抗使用 Laravel , 但是你没有理由不喜欢使用 illuminate/database.这是一个 ORM ...

  10. Vue站点的搭建之旅

      背景       很久没写博客了,这次博客分享一下最近上班空闲时间做的两个业余Demo.分别是V电影App的移动端站点[一直很喜欢用这个APP可是他们没有出对应的mobile端,所以自己开发一个, ...