多功能PCIE交换机之三:数据迁移及其cache一致性

关于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内核设备驱动机制》

时间: 2024-12-15 07:09:17

多功能PCIE交换机之三:数据迁移及其cache一致性的相关文章

多功能PCIE交换机之九:单NT系统中需要注意的问题

多功能PCIE交换机之九:单NT系统中需要注意的问题 1.单NT与双NT系统差异 NTB通常用在双控或者多控的系统上,用来实现跨节点的数据传输.在由多个节点构成的系统上,通常每个节点上都有一个NTB芯片,以实现全系统地址空间划分和路由.顾名思义,单NT是指用一个PCIE非透明桥来实现节点间数据传输的方案,通常用在两个节点之间.和多NT的系统相比,这种方法实现相对比较简单,成本较低,开发周期较短,能够缩短整个系统的关键功能和性能的验证周期. 2.单NT系统的实现 单NT的实现需要结合整个系统的设计

多功能PCIE交换机之六:基于NTB夸节点的读写

多功能PCIE交换机之六:基于NTB夸节点的读写优化 1.基于NTB跨节点读写的应用的特点 NTB常常用在要求高性能和高可靠性的场合,用来实现跨节点数据的传输.比如用作虚拟网卡.跨节点数据同步通道等,这些场合都期望充分发挥NTB基于PCIE的高速传输特性,最大限度地提高系统性能. 2.基于NTB跨节点读写的两种实现方式 实现地址转换.建立NTB通道之后,有两种实现NTB跨节点传输数据的方式: 基于CPU实现数据传输 基于NTB DMA实现数据传输 前者依赖CPU去搬运数据,会占用CPU周期,但非

多功能PCIE交换机之一:概述

多功能PCIE交换机之一:概述 作为服务器或者系统升级的重要方法,横向扩展越来越时髦,越来越多的厂家利用这种方法来实现产品的升级.传统网络.InfinBand.PCIE都可以用来帮助实现横向扩展,这里着重介绍基于PCIE技术实现的横向扩展和容错设计.基于PCIE实现横向扩展和容错设计离不开PCIE多功能交换机.所谓多功能PCIE交换机,指的是一种拥有多个PCIE桥.支持多种配置.自带非透明桥甚至DMA功能的配置灵活.管理方便的芯片. 为了便于读者有更直观的认识,后面都以PLX某款多功能PCIE

多功能PCIE交换机之五: 基于NTB的DMA

如果说PCIE多功能桥中的NTB为跨节点的数据传输铺好路.架好桥的话,那么PCIE多功能桥中的DMA就是多个节点之间的高铁和航班.没有NTB打通数据通道,DMA也不可能跨越节点.但没有DMA的话,NTB还是可以依赖CPU来在多个节点之间搬运数据.因此DMA对NTB而言是如虎添翼.锦上添花. 和NTB的单NT和双NTB配置相比,DMA可配置的选项比较多,但不管是中断模式.查询模式,也无论描述符是在DMA控制器片上还是片外,亦或配置成单个还是多个DMA channel,都有现成的代码可供参考或寄存器

ESX环境打通2套SAN存储交换机实现数据迁移

因vmware集群升级,需要将旧集群存储中的数据迁移到新集群的存储中,要求热迁移,尽可能的不中断业务,或短时间中断.有多种实现方式:1.将2套SAN交换机级联,使2个平台主机能看到对方的存储.(部分SAN交换机不支持与外厂交换机互联,像浪潮5800. 支持的型号有浪潮5610,博科交换机等)2.使用一台服务器进行存储中转.3.使用SAN交换机直连对方的存储控制器. 如有其他更好的方式,欢迎留言交流. 原文地址:https://blog.51cto.com/gaodi2002/2353983

多功能PCIE交换机之八:窗口扩展和驱动加载的常见问题

结合本人在PCIE NTB/DMA最近的实际工作,总结了地址转换窗口扩展和驱动加载过程中碰到的主要问题和解决办法. 0.系统启动后看不到NTB设备 需要检查BIOS,在PCIE设置里面NTB芯片是否使能.这是因为针对不同的应用场景和客户需要,BIOS里面通常添加了Enable/Disable NTB的选项. 1.如何扩展地址转换窗口 a.确定系统要求的地址转换窗口的范围和大小: b.确保系统要求的地址转换窗口的范围和大能够被BIOS支持 c.从可用的BAR2/3和BAR4/5中选择未使用的或者可

多功能PCIE交换机之二:EEPROM恢复与故障排除

作为实现failover的重要器件,8717PCIE switch既支持virtual switch mode, 也支持basic mode,此外它的DMA.地址窗口也有不同的配置方式.而多块8717卡既可组合成单NT的Active-Passive模式,也可以组合成双NT的Active-Active模式,而这些都依赖于 8717 switch上的EEPROM的正确设置.因此,在调试阶段,工程师常常需要修改它的设置,一有不慎,就可能烧入错误的EEPROM设置,导致PCIE switch无法正常工作

Entity Framework7 入门之全功能.NET版本下使用EF7(含源码)另附数据迁移常见错误处理

Entity Framework7 入门之全功能.NET(Console, WinForms, WPF等)使用EF7 昨天,我们介绍了EF的新特性和开发计划,如果你还不了解,请移步 Entity Framework7 有哪些不同?现在开发到什么程度了? .今天,我们开学习全功能.NET(Full .NET)下使用EF7.官方已经写了关于最新的 Pre-Release版本EF7.0.0-beta7的入门教程,很详细,我就没有必要自己再重复造轮子了,只因为是英文的,为了方便不少懒人(不是看不懂英文,

Ubuntu中开启MySQL远程访问功能,并将另一个数据库服务器中的数据迁移到新的服务器中

一.开启MyS远程访问功能 1.进入服务器输入netstat -an | grep 3306确认3306是否对外开放,MySQL默认状态下是不对外开放访问功能的.输入以上命令之后如果端口没有被开放就会显示 <strong>显示结果:tcp 0 0 127.0.0.1:3306 0.0.0.0:*LISTEN</strong> 2.从上面的显示结果可以看出,mysql的3306端口只是监听本地的连接,这样就阻碍了外部ip对该数据库的访问,这样就需要修改mysql配置文件, 输入vim