关于PCIE非透明桥 cache一致性
PCIE非透明桥提供了两种机制来从local node往remote node迁移数据,分别是基于地址映射和内嵌的

DMA。对remote节点而言,当它接受数据的时候,CPU可能是不知情的,因此需要保证cache一致性;

对local节点,当通过DMA往它自己的内存传输数据时,本地的CPU也不会被通知,因此需要考虑cache

一致性。

不同的平台实现Cache一致性的机制不一样,ARM平台需要软件参与,而IntelX86平台硬件能够自动维

护cache一致性。x86提供了不同的cache一致性的级别,一些特殊的应用可能需要定制化的cache一致

性管理策略。

1.  Intel X86  cache一致性级别
 Intel根据不同的应用需求定义了不同的一致性级别:

2. Intel X86  cache管理的三种级别

  • Intel提供了不同粒度来管理Cache一致性:处理器核内的CR0寄存器的CD/NW位:使能或禁止整个系统的cache;

  • CR3的PCD/PWT bit和页表和页目录表项的PCD/PWT属性位:分别控制所有的页表、某个具体的页/页表的cache属性;

  • MTRR ( Memory Type Rang Register): 指定某段范围的地址是cache的还是uncache的

3. cache一致性与DMA

DMA buffer 和 DMA memory

DMB Buffer: 是物理内存的一部分,存放从DMA接受到的数据,或者要发送到DMA的数据
DMA memory:物理外设上的一段存储空间,比如显卡上的独立显存,或者IO空间、PCI  memory 空间

coherence DMA  和 streaming DMA

DMA的功能是在DMA buffer和DMA memory 之间搬运数据,一致性的要求是保证:当需要读从DMA

接受到的数据时,看到的是最新的数据;而往DMA写的时,待发送给DMA的数据也一定是最新的。

coherence DMA: 如果DMA buffer对应的物理内存连续,由连续的物理页组成,只要一次DMA传输的

数据长度允许,DMA一次操作就能够往这些连续的物理页传完数据。它的好处是快,不足的是需要寻找

到连续的物理内存页块。除此之外,它好要求保证cache一致性。内核提供的dma_malloc_coherence()

函数能够做到这两点,对x86而言,由于硬件上已经保证了DMA buffer的cache一致性,只需要找到物

理地址连续的页块就好。如果硬件不能保证cache一致性,要求这些物理地址都是uncached的。

streaming DMA:  如果DMA buffer对应的虚拟地址连续,但不确定物理地址是否连续,受DMA的一个

描述符对物理地址连续的要求,需要找到虚拟地址对应的所有物理页框,逐一用DMA进行传输。它的好

处是对地址没有限制,驱动和内核屏蔽了拆分物理页框的细节,随叫随传。这种模式下对cache一致性的

保护是取决于传输方向:

从内存到DMA :要把每个页框对应的cache的东西写回到内存

从DMA到内存:要把每个页框对应的cache无效,保证后面的访问指向内存

对X86而言,硬件已经实现了管理cache一致性的机制,上面的cache写回和无效的工作不需要。

4. PCIE非透明桥cache一致性的考虑

不考虑特殊的情况下,根据上面的分析,在利用DMA进行数据传输的情况下,local DMA buffer 的

cache一致性总能得到保证,由于PCIE非透明桥非透明桥的地址转换功能,在实际的应用场景下,local

DMA memroy其实映射到了remote 节点的local DMA buffer,因此它的cache一致性也得到x86硬件

的保护。当然如果考虑到PCIE非透明桥对非易失性存储的支持,针对防止数据丢失的要求,除了保证

cache一致性外,还要求:

  1. 所有的写访问直接去往内存;

  2. 所有的读也来自内存(在考虑性能的前提下,允许读来自cache)

参考资料:
1.Intel,IA32_Dev_3A.pdf
2.陈学松,《深入Linux内核设备驱动机制》

本文转自存储之厨51CTO博客,原文链接: http://blog.51cto.com/xiamachao/1721990,如需转载请自行联系原作者

多功能PCIE交换机之三:PCIE非透明桥 cache一致性相关推荐

  1. PCIE switch 非透明桥

    非透明桥,可以把PCIE switch分为几个单独的虚拟switch部分,每一部分都有USP和0或更多的下游端口.这就可以使switch连接多个RC. 每个RC可以枚举自己PCIe域的设备. NT E ...

  2. PCIe交换机的作用和参数解读:PEX89144为例,PCIe交换机能做些什么

    引言 超微的SYS-821GE-TNHR/FTNHR服务器的PCIe扩展接口数量确实超过了第四代英特尔至强处理器所能提供的通道数.这是因为该服务器采用了一种称为PCIe交换机的硬件设备,它可以将少量P ...

  3. 2.5 非透明PCI桥

    PCI桥规范定义了透明桥的实现规则,本篇在第2.3.1节中详细介绍了这种桥片.通过透明桥,处理器系统可以以HOST主桥为根节点,建立一颗PCI总线树,在这个树上的PCI设备共享同一个PCI总线域上的地 ...

  4. pci桥 透明 非透明模式 区别

    透明桥(transparent):通常用于总线扩展.桥的二次侧的所有设备对一次侧的主系统是透明的.二次侧的所有设备只能由一次侧的主系统对其进行配置和控制.两侧的时钟必须同步,允许有固定的相位差.一次侧 ...

  5. GD25LQ32ENIGR NOR 存储器、SLB9670VQ2.0模块应用、PM8533B-F3EI PCIe 交换机 接口

    FLASH - NOR 存储器:GD25LQ32ENIGR 8-USON(明佳达电子) 存储器类型:非易失 存储器格式:闪存 技术:FLASH - NOR 存储容量:32Mb 存储器组织:4M x 8 ...

  6. 初学 PCIe System (一) - PCIe介绍及其配置空间

    第二部分在:初学 PCIe System (二) - 如何访问PCIe设备的配置空间 PCI Express 介绍 PCI Express (PCIe) 属于第三代的高效能 I/O 汇流排,PCIe ...

  7. poe交换机标准与非标准的区别介绍

    POE指的是在现有的以太网Cat.5布线基础架构不作任何改动的情况下,在为一些基于IP的终端(如IP电话机.无线局域网接入点AP.网络摄像机等)传输数据信号的同时,还能为此类设备提供直流电的技术,就是 ...

  8. AGP与PCI-E的区别 PCI-E接口与PCI接口的区别

    AGP(Accelerate Graphical Port)加速图形接口 PCI-E是PCI Express的简称,是用来代替PCI.AGP接口规范的一种新标准,由PCI或AGP的并行数据传输变为串行 ...

  9. c# 串口 多线程_Mini PCI-E转串口卡 pcie串口卡 4口9针 mini pcie串口卡 多串口

    Mini PCI-E转串口卡 pcie串口卡 4口9针 mini pcie串口卡 多串口 Mini PCI-E转串口卡 pcie串口卡 4口9针 mini pcie串口卡 多串口 Mini PCI-E ...

最新文章

  1. java struts2 excel上传_文件上传下载——通过struts的FormFile上传单个excel文件
  2. 关于JavaScript 数组 的一切
  3. 创业成功需早起?看看IT大佬们的作息时间
  4. A New Beginning
  5. 社区成员提议YFI修改默认2%管理费为动态费用
  6. Axure简易计算器
  7. Sdk4J.jar安装到本地maven仓库
  8. 整型数组——首尾相连
  9. 计算机工程系徽,教师队伍
  10. 小象学院 nlp 自然语言处理项目实战
  11. wordpress插件_2020年5个最佳WordPress电子商务插件比较
  12. 谷歌您的个人资料_如何控制其他人可以看到的有关您的Google个人资料的信息
  13. 用SNMP协议实现系统监控
  14. 第三方登录 QQ登录(一) 申请接口
  15. 【unknow ssid】两种办法获取WIFI名称99%可解决
  16. python分离arw与jpg图片
  17. 自定义Toast、程序退出时Toast也退出、Toast的用法
  18. npm 实战精讲-曾亮-专题视频课程
  19. nvidia显卡加速matlab,利用nvidia cuda加速simulink S-function
  20. LTE----024 天线基本原理

热门文章

  1. [leetcode] Recover Binary Search Tree
  2. javascript的族家族史
  3. Photoshop图层混合模式计算公式大全
  4. Android App定位和规避内存泄露方法研究
  5. Could not load file or assembly 'System.Web.Extensions
  6. MJRefresh iphonx 显示问题
  7. MyBatis框架学习 DAY_03:如何解决无法封装问题 / 一对一关联查询 / 一对多关联查询
  8. 数据包构造分析工具Hping3常用命令集合大学霸IT达人
  9. AndoridSQLite数据库开发基础教程(5)
  10. linux中yum安装splunk,Yum源搭建