跨多个内存口使用选择性复制降低内存访问延迟的系统及方法

文档序号:6497397阅读:231来源:国知局
跨多个内存口使用选择性复制降低内存访问延迟的系统及方法
【专利摘要】在一个实施例中,一种系统包括多个内存口(608A-608D)。这些内存口分布于多个子集中,其中每一个子集由一个子集索引标识并且这些内存口各自具有一个基于对应工作负载的单独等待时间。该系统进一步包括一个第一地址散列单元(602B),该第一地址散列单元被配置成用于接收一个包括一个虚拟内存地址的读取请求。该虚拟内存地址与一个复制因子相关联,并且该虚拟内存地址指的是图形数据。该第一地址散列单元将该复制因子转化成一个基于该虚拟内存地址的相应子集索引,并且将该虚拟内存地址转换成一个基于硬件的内存地址。该基于硬件的地址指的是该相应子集索引所指示的一个子集内的这些内存口中的图形数据。该系统进一步包括一个内存复制控制器(604),该内存复制控制器被配置成用于将对于该基于硬件的地址的读取请求指向该相应子集索引所指示的该子集内这些内存口中具有最低单独等待时间的一个。
【专利说明】跨多个内存口使用选择性复制降低内存访问延迟的系统及方法
[0001]相关串请
[0002]本申请是于2011年10月25日提交的美国13/280,738号申请的继续申请。上述一个或多个申请的整体教导通过引用结合于此。
【背景技术】
[0003]对于许多计算机系统,内存延迟是访问内存地址时的一个重要障碍。计算机系统执行一个特定算法功能所要求的时间可能有超过90%会由于内存延迟而耗费在等待接收对于一个读取请求的响应上。当计算机系统的算法访问内存时,系统调度对内存的读取请求,等待内存口返回所请求的数据,并且然后算法申请所返回的数据。算法可能频繁地向一个基于所返回的数据的后续内存地址请求数据。与等待内存口返回所请求的数据花费的时间相比,申请所返回的数据并且发出一个后续内存读取请求花费的时间可能更少。因此,在严重依赖内存访问的系统中(如以上描述的系统),减少内存延迟可以改善系统性能。当算法的多个实例并列单独运行而不进行任何交互时,对于这些内存口的若干读取请求可能会在任何给定时间挂起。一个算法体验到的延迟则依赖于执行相同算法的其他单元的读取请求频率,因为对于一个内存口的访问是连续的。

【发明内容】

[0004]多个内存口可以降低总的内存延迟。数据可以唯一地跨各种内存口存储。此外,使用多个内存口比使用一个单独的内存口允许更多的总的计算机系统内存,因为每一个内存口具有其能支持的最大容量。然而,在此配置中,单独发出的读取请求可能跨这些内存口是非均匀分布的,这增加了所实现的内存口读取延迟。
[0005]如此修改这些内存口以便附接在所有这些内存口的内存包含相同的数据,这降低了内存延迟,但牺牲了系统中可以存储唯一数据的存储单元的数量。在此类系统中,所有内存口上的内存包含完全相同的数据,并且一个内存复制控制器将到达的读取请求指向最不繁忙的内存口,这将多个读取请求几乎均匀地分布于这些端口间,假设所有的内存口以大致相同的延迟为读取请求服务。
[0006]在一个实施例中,一种系统包括多个内存口。这些内存口分布于多个子集中,其中每一个子集由一个子集索引标识并且这些内存口各自具有一个基于对应工作负载的单独等待时间。该系统进一步包括一个第一地址散列单元,该第一地址散列单元被配置成用于接收一个包括一个虚拟内存地址的读取请求。该虚拟内存地址与一个复制因子相关联,并且该虚拟内存地址指的是图形数据。该第一地址散列单元将该复制因子转化成一个基于该虚拟内存地址的相应子集索引,并且将该虚拟内存地址转换成一个基于硬件的内存地址。该基于硬件的地址指的是该相应子集索引所指示的一个子集内的这些内存口中的图形数据。该系统进一步包括一个内存复制控制器,该内存复制控制器被配置成用于将对于该基于硬件的地址的读取请求指向该相应子集索引所指示的该子集内这些内存口中具有最低单独等待时间的一个。
[0007]在一个实施例中,一个第二地址散列单元被配置成用于接收一个包括对于至少一个虚拟内存地址的数据的写入请求,并且将每一个虚拟内存地址转换成一个基于硬件的内存地址,每一个基于硬件的内存地址指的是这些内存口中的单独一个。该第一及第二地址散列单元被配置成用于修改请求跨这些端口分布的顺序。该第一及第二地址散列单元被配置成用于将任何给定虚拟内存地址转换成一个预先确定的基于硬件的内存地址。
[0008]一种方法包括将多个内存口分布到多个子集中,每一个子集由一个子集索引标识,这些内存口各自具有一个基于对应工作负载的单独等待时间。该方法进一步包括在一个第一地址散列单元处接收一个具有一个虚拟内存地址的读取请求,该虚拟内存地址与一个复制因子相关联,该虚拟内存地址指的是图形数据。该方法进一步包括在该第一地址散列单元处基于该虚拟内存地址将该复制因子转化成一个相应子集索引。该方法进一步包括在该第一地址散列单元处将该虚拟内存地址转换成一个基于硬件的内存地址,该基于硬件的地址指的是该相应子集索引所指示的一个子集内的这些内存口中的单独一个。该方法进一步包括在一个内存复制控制器中将对于该基于硬件的地址的读取请求指向这些内存口中具有最低单独等待时间的一个。
[0009]在一个实施例中,该方法可进一步包括在一个第二地址散列单元处接收一个对于包括至少一个虚拟内存地址的图形数据的写入请求,并且在该第二地址散列单元处将每一个虚拟内存地址转换成一个基于硬件的内存地址,每一个基于硬件的内存地址指的是该多个内存口中的单独一个。
[0010]该第一地址散列单元偶联到多个检查引擎及一个内存复制控制器,其中每一个检查引擎被配置成用于通过该第一地址散列单元向该内存复制控制器发出读取请求。该第二地址散列单元偶联到该高速缓存控制器,其中该高速缓存控制器被配置成用于通过该第二地址散列单元向该多个内存口发布读取和写入请求。该第一及第二地址散列单元被配置成用于将任何给定虚拟内存地址转换成一个预先确定的基于硬件的内存地址。该第一及第二地址散列单元修改虚拟内存地址请求跨该多个内存口分布的顺序。
[0011]这些内存口被配置成用于在一个基于硬件的内存地址中存储数据。这些基于硬件的地址中的每一个指的是一个子集内的这些内存口中的单独一个并且在这些内存口中的每一个内具有一个相同的相对地址。
[0012]该复制因子表明这些内存口中一个数据结构的多次复制。复制的数量可能是二的指数幂。在一个给定图形内,具有相同复制因子的图形数据节点存储在一组地址中的虚拟内存中。根据其复制因子以升序及降序中的至少一种顺序为这些图形数据节点分配了虚拟内存地址。一个给定图形数据的复制因子由对该给定图形数据将被读取的频率的预测确定。
[0013]一个主机或软件可以为多个图形数据的每次复制保留连续虚拟内存地址。该子集索引包括或者该虚拟内存地址的位数或者所修改的虚拟内存地址的位数,以访问这些内存口中的图形数据。
【专利附图】

【附图说明】
[0014]上述将在下面如附图中所展示的对示例实施例的更具体的描述中变得清楚,在附图中类似参考符号指代所有不同视图中的相同组件。这些图不必是按比例的,相反,下文讨论的重点放在展示本发明的实施例上。
[0015]图1是一个网络服务处理器的框图。
[0016]图2是一个跨处理器可访问的多个内存口的内存复制的框级图。
[0017]图3A是虚拟内存空间中的一个图形的表示。该虚拟内存空间存储了多个复制的图形数据。
[0018]图3B是虚拟内存空间中的一个图形的表示。该虚拟内存空间存储了多个复制的图形数据。
[0019]图4是硬件内存空间中的多个图形的表示。
[0020]图5A是一个表格,展示了一个用于将图形存储在软件中的线性地址空间方案。
[0021]图5B是一个表格,展示了虚拟内存地址向内存口的转换。
[0022]图6是跨多个内存口具有内存复制的一个处理器的框图。
[0023]图7是一个HFA单元的框图,包括多个检查引擎、一个第一地址散列单元、及一个内存复制控制器。
[0024]图8A是一个表格,展示了 一个附接了四个内存口的地址散列单元。
[0025]图SB是一个表格,展示了 一个附接了两个内存口的地址散列单元。
【具体实施方式】
[0026]下面是对示例实施例的说明。
[0027]在详细说明本发明的示例实施例之前,下面紧接着描述了一种可以在其中执行这些实施例的示例网络安全处理器,以帮助读者理解本发明的创造性特征。
[0028]图1是一个网络服务处理器100的框图。该网络服务处理器100使用至少一个处理器内核120提供高应用性能。
[0029]该网络服务处理器100处理在所接收的数据包中封装的开放系统互联网络L2-L7层协议。如本领域技术人员所熟知的,开放系统互联(OSI)参考模型定义了七层网络协议层(L1-L7)。物理层(LI)表示将一台设备连接到一个传输媒介的实际接口,包括电气接口及物理接口。数据链路层(L2)执行数据组帧。网络层(L3)将数据格式化为数据包。传输层(L4)处理端到端的传输。会话层(L5)管理设备之间的通信,例如,无论通信是半双工的还是全双工的。表现层(L6)管理数据格式化及表现,例如,语法、控制代码、特殊图形及字符集。应用层(L7)允许用户之间的通信,例如,文件传送及电子邮件。
[0030]该网络服务处理器100可以为上层网络协议(例如,L4-L7)调度和排列工作(数据包处理操作),并且允许在接收到的待执行的数据包中进行上层网络协议的处理,以便以线速转发数据包。线速是在传输和接收数据的网络上传送数据的速率。通过处理这些协议来以线速转发这些数据包,该网络服务处理器不会降低网络数据传送速率。
[0031]多个接口单元122a及122b接收到一个数据包以进行处理。PCIe接口 124也可以接收一个数据包。这些接口单元122a及122b通过检查所接收的数据包中包括的L2网络协议头中的各种字段来执行所接收的数据包的预处理,并且然后将该数据包转发到一个数据包输入单元126。至少一个接口单元122a可以从多个X附接单元接口(XAUI)、精简X附接单元接口(RXAUI)、或系列千兆媒体独立接口(SGMII)接收数据包。至少一个接口单元122b可以从一个茵特拉肯接口(ILK)接收连接。
[0032]该数据包输入单元126执行所接收的数据包中包括的网络协议头(例如L3及L4头)的进一步的预处理。该预处理包括对于TCP/用户数据报协议(UDP) (L3网络协议)的校验和检查。
[0033]一个空闲池分配器128维持指针池,以释放2级高速缓存内存130及外部DRAM108中的内存。该数据包输入单元126使用这些指针池中的一个来将所接收到的数据包数据存储在2级高速缓存内存130或外部DRAM108中,并且使用这些指针池中的另一个来为这些处理器内核120分配工作队列条目。
[0034]该数据包输入单元126然后将数据包数据写入2级高速缓存内存130或外部DRAM108中的缓冲区中。优选地,该数据包数据被以便于在这些处理器内核120中的至少一个中执行的高层软件的格式写入这些内存中。因此,促进了高级网络协议的进一步处理。
[0035]该网络服务处理器100还可包括一个或多个特定用途协处理器。当包括在内时,这些协处理器将一些处理从这些内核120中分流,由此使得该网络服务处理器能够实现高通量数据包处理。例如,提供了一个压缩/解压缩协处理器132,专用于执行所接收的数据包的压缩及解压缩。协处理单元的其他实施例包括RAID/De-Dup单元162,这加快了磁盘存储应用程序的数据分块及数据复制处理。
[0036]另一个协处理器是超级有限自动机(HFA)单元160,该单元包括多个专用HFA检查引擎,这些引擎被适配成用于加快防病毒、入侵检测系统及其他内容处理应用程序所必需的模式和/或特征匹配。使用一个HFA单元160,模式和/或特征匹配得到加快,例如被以超过每秒万兆比特 的倍数的速率执行。该HFA单元160在一些实施例中可包括确定型有限自动机(DFA)、非确定型有限自动机(NFA)、或HFA检查引擎中的任一个。
[0037]一个I/O接口 136管理整体协议及仲裁并且提供一致的I/O划分。该I/O接口136包括一个I/O桥138及一个获取及添加单元140。该I/O桥包括两个桥,一个I/O数据包桥(IOBP) 138a及一个I/O总线桥(IOBN) 138b。该I/O数据包桥138a被配置成用于管理整体协议及仲裁并且提供主要与数据包输入及输出提供相一致的I/O划分。该I/O总线桥138b被配置成用于管理整体协议及仲裁并且提供主要与该I/O总线相一致的I/O划分。该获取及添加单元140中的寄存器用来维持那些用于通过一个数据包输出单元146转发已处理的数据包的输出队列的长度。该I/O桥138包括多个缓冲队列,用于存储有待在一个一致内存互联(CMI) 144、一个I/O总线142、该数据包输入单元126及该数据包输出单元146之间传送的信息。
[0038]各种各样的I/O接口(100)116可包括多个辅助接口,如通用1/0(6?10)、闪存、IEEE804 二线管理接口(MDIO)、串行管理中断(SMI)、通用异步收发两用机(UART)、精简千兆比特媒体独立接口(RGMII)、媒体独立接口(MII)、二线串行接口(TWSI)及其他串行接□。
[0039]该网络服务处理器100还可包括一个支持MIPS EJTAG标准的联合测试行动组(JTAG)接口 123。根据JTAG及MIPS EJTAG标准,该网络服务处理器100内的多个内核将各自具有一个内部测试访问端口(TAP)控制器。这允许对该网络服务处理器100的多核调
试支持。
[0040]一个调度/同步及顺序(SSO)模块148为这些处理器内核120排列并调度工作。通过将一个工作队列条目加入到一个队列来排列工作。例如,该数据包输入单元126为每次数据包的到来添加一个工作队列条目。一个定时器单元150用来为这些处理器内核120
调度工作。
[0041 ] 处理器内核120从该SSO模块148请求工作。该SSO模块148为这些处理器内核120的其中一个选择(即,调度)工作,并且将一个指针返回到该工作队列条目以向该处理器内核120描述该项工作。
[0042]该处理器内核120依次包括指令高速缓存152、I级数据高速缓存154、及加密加速156。在一个实施例中,该网络服务处理器100包括32个超标量精简指令集计算机(RISC)型处理器内核120。在一些实施例中,这些超标量RISC型处理器内核120各自包括MIPS643版处理器内核的一个扩展。在一个实施例中,这些超标量RISC型处理器内核120各自包括一个cnMIPS II处理器内核。
[0043]2级高速缓存内存130及外部DRAM108被所有的处理器内核120及I/O协处理器设备共享。每个处理器内核120由该CMI144偶联到该2级高速缓存内存130。该CMI144是用于这些处理器内核120、该I/O接口 136和该2级高速缓存内存130及控制器之间的所有内存及I/O事务的通信信道。在一个实施例中,该CMI144可扩展到32个处理器内核120,通过完全写入支持完全一致的I级数据高速缓存154。优选地,该CMI144被高度缓冲了区分I/O优先级的能力。该CMI144偶联到一个轨迹控制单元164,该轨迹控制单元被配置成用于捕获总线请求,这样软件随后可以读取该请求并且在该CMI144上生成事件先后顺序的轨迹。
[0044]该2级高速缓存内存控制器130维持内存参考一致性。它针对每个填写请求返回一个内存块的最新副本,无论该块是存储在2级高速缓存内存130中、在外部DRAM108中、还是在“飞行中”。它还针对每个处理器内核120中的数据高速缓存154存储了这些标签的复制本。它将高速缓存-块-存储请求的地址与这些数据-高速缓存标签比较,并且每当一个存储指令通过该I/O接口 136来自另一个处理器内核或来自一个I/O组件时使一个数据-高速缓存标签对于一个处理器内核120无效(两个副本)。
[0045]在一些实施例中,多个DRAM控制器133支持多达128千兆字节的DRAM。在一个实施例中,该多个DRAM控制器包括四个DRAM控制器,这些DRAM控制器133各自支持32千兆字节的DRAM。优选地,每个DRAM控制器133支持到DRAM108的一个64比特接口。此外,该DRAM控制器133可以支持优选的协议,如DDR-1II协议。
[0046]在这些处理器内核120处理一个数据包后,该数据包输出单元146从该2级高速缓存内存130/DRAM108中读取该数据包数据,执行L4网络协议后处理(如生成一个TCP/UDP校验和),通过这些接口单元122a及122b或该PCIe接口 124转发该数据包并且释放该数据包使用的2级高速缓存内存130/DRAM108。
[0047]这些DRAM控制器133管理发向/来自该DRAM108的飞行中事务(负载/存储)。在一些实施例中,这些DRAM控制器133包括四个DRAM控制器,该DRAM108包括四个DRAM内存,并且每个DRAM控制器连接到一个DRAM内存。该HFA单元160在一个旁路高速缓存访问路径135上直接偶联到这些DRAM控制器133。该旁路高速缓存访问路径135允许该HFA单元不使用该2级高速缓存内存130而直接从该DRAM内存108读取,这可以提高HFA操作的效率。[0048]在一个实施例中,由美国加利福尼亚州圣何塞市的Cavium公司生产的一款0cteon68XX网络处理器产品包括该HFA单元160内的DFA/NFA/HFA深度数据包检查引擎。四十八个独立检查引擎可并行操作,各自向DRAM控制器133发出读取请求。来自这些内存口的读取响应数据包含与这些检查引擎的当前状态相结合并且与该数据包数据的当前字节相比较的图形数据,以确定对该数据包的任何所需附加处理是否必要。该HFA单元160内的每个检查引擎一次处理一个数据包。很难预测从该HFA单元160到这些DRAM控制器133的读取请求的频率及发生率。一些图形数据可能不用访问DRAM108而从该HFA单元160中的一个内部高速缓存中获得,但当访问该内部高速缓存时与其他检查引擎的冲突可能导致额外的处理延迟。此外,一个检查引擎可能在其到达该数据包的终点之前过早地终止数据包处理,进一步增加了读取请求的发生率的不可预测性。
[0049]深度数据包检查处理的性能直接与外部DRAM108内存读取延迟相关联。一旦该HFA单元160向外部内存发出一个读取请求,该HFA单元160等待直到该外部内存返回一个响应才处理一个数据包的随后字节,因为该HFA单元160内的每个检查引擎一次处理一个数据包。降低从该外部内存读取数据的延迟可以提高HFA单元160的性能。在很多外部内存口处存储图形数据允许该HFA单元160发出一个包含期望数据的读取请求,该读取请求指向具有最低延迟的内存口。
[0050]图2是一个处理器可访问的多个处理器口间的内存复制的框级图。启用了内存复制的处理器200包括与该网络服务处理器100偶联的外部DRAM108的多个内存口 202、204。每个内存口 202、204可以存储一个第一复制数据集206A-B以及一个第二复制数据集208A-B。例如,一个第一内存口 202存储了该第一复制数据集206A及该第二复制数据集208A。一个第二内存口 204存储了该第一复制数据集206B及该第二复制数据集208B。该第一复制数据集206A是与该第一复制数据集206B相同的数据,并且该第二复制数据集208A是与该第二复制数据集208B相同的数据。
[0051]图3A是一个虚拟内存空间300中的一个图形的表示。该虚拟内存空间300存储了多个复制的图形数据302A、302B...302L。每个复制的图形数据302A、302B...302L具有一个复制因子,表明其在该硬件内存中需要被复制多少次。还根据其复制因子在该虚拟内存空间300内复制了每个复制的图形数据302A、302B...302L。这些复制的图形数据302A、302B...302L在该图形304的一个基址处以图形数据302A开始,并且在该虚拟内存空间300中被线性地编址。软件通过在该虚拟内存空间300中选择性地多次创建该图形数据302A、302B...302L来根据每个图形数据的复制因子复制图形数据。可以根据每个图形数据的复制因子对每个图形数据302A、302B...302L复制不同的次数。例如,图形数据302A的复制因子是4X,因此它被复制四次。然而,图形数据302L的复制因子是IX,因此它仅被存储一次。
[0052]图3B是一个虚拟内存空间350中的一个图形的表示。该虚拟内存空间350存储了多个复制的图形数据352A、352B...3521。每个复制的图形数据352Α、352Β...3521都有一个复制因子,表明其在该硬件内存中需要复制多少次。还在该虚拟内存空间350内根据其复制因子复制了每个复制的图形数据352A、352B...3521。这些复制的图形数据352A、352B...3521在该图形354的一个基址处以图形数据352A开始,并且在该虚拟内存空间350中被线性地编址。软件通过在该虚拟内存空间350中选择性地多次创建该图形数据352A、352B...3521来根据每个图形数据的复制因子复制图形数据。
[0053]参照图3A及图3B,软件将图形数据302及图形数据352写入硬件内存。软件将每个图形数据302及图形数据352存储于虚拟内存空间300及虚拟内存空间350中,从而使得虚拟内存空间300及虚拟空间350各自分别被一次写入硬件内存中。因此,复制的虚拟副本转化成复制的硬件内存副本,其中每个副本都在单独的硬件内存口上。因此,硬件不对复制写入事务给予帮助。
[0054]图4是一个硬件内存空间400中的多个图形的表示。硬件内存空间400包括多个内存口 402A-D。每个内存口的硬件内存空间400包含图形数据302A-L及352A-1的一部分。根据每个图形数据的复制因子对图形数据302A-L、352-1进行了复制。例如,图3A表明该图形数据302A(节点A0)的复制因子是4X。相应地,图4中,图形数据302A(节点A0)被复制了四次并且存储于内存口 402A-D中。又例如,图3A表明图形数据302C(节点CO)的复制因子是2X。同样,图4中,图形数据302C(节点CO)被复制了两次并存储于内存口402A-B中。再例如,图3A表明图形数据302F(节点F0)的复制因子是IX。同样,图4中,图形数据302F(节点F0)仅被复制了一次:在内存口 402C中。
[0055]复制因子为2X或4X的图形数据302、352跨该多个内存口 402具有相同的相对寻址。例如,图形数据302A(节点A0)跨内存口 402A-D在相同的相对位置。此外,图形数据352A(节点Al)跨内存口 402A-D在相同的相对位置。即使是复制因子小于4X的图形数据(如复制因子为2X的图形数据302C)也跨这些内存口 402A-B在相同的相对位置。同样,复制因子也为2X的图形数据302D跨内存口 402C-D在相同的相对位置。
[0056]复制因子为4X的图形数据302存储于这些端口 402A-D的每一个上相同的相对地址处。复制因子为2X的图形数据302存储于或者端口 402A及402B或者402C及402D上相同的相对地址处。复制因子为IX的图形数据可以存储在这些内存口 402A-D的任一个处。复制因子为IX的图形数据跨内存口不具有相同的相对寻址,因为按照定义,它未被复制。
[0057]该虚拟存储空间在最低的地址(从基址304开始)处存储着复制因子最高的图形数据302,并且在该虚拟存储空间300内的较高的地址处存储着复制因子最低的图形数据。例如,软件在该图形的虚拟存储空间300的较低地址处存储着复制因子为4X的图形数据302A-B。然后,软件在该图形的虚拟存储空间300内的一个较高的相对位置处存储着复制因子为2X的图形数据302C-E。最后,虚拟存储空间300在该图形的虚拟存储空间300内的一个更高的相对位置处存储着复制因子为IX的图形数据302F-L。
[0058]以此种顺序存储图形数据302确保了一个复制的图形数据302跨其被复制的所有这些内存口 402总是出现在相同的相对地址。例如,复制的图形数据302可能存储在一个端口的地址0x40处及第二个端口的地址0x40处。如果该图形数据不是如以上描述的那样排列为“4X-2X-1X”,一个复制的节点可在不止一个端口的两个不同的相对地址处出现。例如,考虑到一个具有一个单独的2X节点紧跟着三个IX节点的图形。在此种场景中,这三个IX节点被分别写入端口 0、1、及2(402A-C)上的地址N中。然后,写入这一个2X节点,其中第一个副本在端口 3(402D)上的地址N处并且第二个副本在端口 0(402A)上的地址N+1处。从硬件内存中读取该2X复制的节点可能返回不正确的数据,因为这些复制的节点不在该硬件内存中的相同相对地址处。因此,以“4X-2X-1X”的顺序存储复制的图形数据302可防止此类错误。[0059]在一个实施例中,该图形基址304应该被排列为在或者端口 O或者端口 3处开始存储数据,依据地址散列功能的类型。例如,该虚拟内存空间300可以在硬件地址0x0处开始。如果该图形基址304存储在除0x0之外的一个地址处,数据的排列可使得复制的数据存储在不同的相对地址处。例如,当一个4x节点的第一复制本存储在相同相对地址上的端口 1、端口 2、及端口 3处时,复制的数据存储在不同的相对地址处,并且最后一个副本存储在端口 O上,但是在与前三个副本不同的相对地址处。本领域普通技术人员可以认识到,其他地址散列功能可以被配置成用于以内存中不同的起始排列跨相同的相对地址保存复制的数据。
[0060]在一个实施例中,以二的幂复制数据。例如,一个系统可以对数据复制四次、两次或一次。然而,一个系统还可以对数据复制八次、16次、32次、或二的任何其他幂次。本领域普通技术人员可以认识到,也可以以非二的幂的复制因子来对数据进行复制。该系统应该具有等于其最高复制因子的许多内存口。该系统还应该具有一个被配置成用于跨这些内存口散列数据的地址散列功能。如本领域中已知的,对于为二的幂的复制因子,设计散列功能可能更简单。
[0061]图5A是一个表格,展示了一个用于将图形存储在软件中的线性地址空间方案500。该线性地址空间方案500将一个图形编号502与一个虚拟内存地址504相关联。每个对应于一个图形502的虚拟内存地址504都留下了足够内存,以便整个图形线性地存储在该虚拟内存空间中,从基础虚拟内存地址504开始并在下一个存储的图形502的基础虚拟内存地址504前结束。
[0062]图5B是一个表格,展示了一个虚拟内存地址552向一个内存口 550的转换。每个地址552对应于一个单独的端口 554。一个地址散列单元(下面将更加详细地讨论)将该虚拟内存地址修改为一个基于硬件的内存地址,跨该多个内存口分布数据。软件未意识到其虚拟内存地址与主内存中真实的基于硬件的地址及端口之间的任何地址转换。
[0063]没有该散列功能,“热点”可能在该HFA单元从内存中读取该图形数据时发生。例如,该表格中的这些地址可将所有第一节点放在内存口 O处。在图形行走(graph walking)期间,该HFA单元可能仅必须访问该图形的第一节点以获得大多数数据包。在此“热点”情景中,所有图形将其第一节点存储在相同的内存口上并且该HFA单元向该相同的内存口发出不成比例数量的读取请求。要防止此类“热点”,一个地址散列单元基于该虚拟内存地址的特定地址位修改数据跨这些端口分布的顺序。例如,在从0x0到Ox FFF的地址范围中,该地址散列单元以模块化的样式将增量端口分配给增量地址。然而,在0x1000到OxlFFF的范围中,该地址散列单元以模块化的样式将减量端口分配给增量地址,如表格550所示。使用此种散列方法,如果软件为每个图形的第一节点分配一个最后两位为零的地址(如0x0、0xl00、0x200、0x300),该地址散列单元跨这些内存口对每个图形的第一节点进行负载均衡。然而,本领域普通技术人员可认识到,散列功能可阻止“热点”。
[0064]图6是跨多个内存口 608A、608B、608C及608D的具有内存复制的一种处理器布置600的框图。这些内存口 608各自包括一个主内存108及一个内存控制器133。一个第二地址散列单元602A操作性地偶联到一个2级高速缓存内存及控制器130。该2级高速缓存内存及控制器130被配置成用于通过该第二地址散列单元602A向该多个内存口 608发出读取及写入请求。软件通过该2级高速缓存内存及控制器130将图形数据写入该主内存。该第二地址散列单元602A将这些软件写入请求分布到该多个内存口 608。该第二地址散列单元602A接收一个虚拟内存地址并且产生一个仅引用一个内存口的基于硬件的内存地址和子集索引。该子集索引在最大复制因子为4X的系统中可以是2位的并在最大复制因子为2X的系统中可以是I位的。当将数据写入内存时,该子集索引指示一个将该数据写入其中的数据端口。换言之,写入时,该子集索引仅指示一个端口,并且该数据被写入那个指示的端口。在一个实施例中,写入时产生的这些子集索引与复制因子设置成IX时产生的这些子集索引类似。
[0065]软件发出写入提交以确保该2级高速缓存内存及控制器130将该图形数据复制到该多个内存口 608。在该软件未将图形数据的写入立即提交到该多个内存口 608的一个假设的系统中,未被提交的写入数据仍在该2级高速缓存内存及控制器130中。此类假设的系统是不受欢迎的,因为在一个第一地址散列单元602B直接向该多个内存口 608发出读取请求并且不通过该2级高速缓存内存及控制器130发出读取请求时,该第一地址散列单元602B可能从该多个内存口 608中读取过时的或坏的数据。
[0066]该2级高速缓存内存及控制器130可以读取内存中存储的复制的图形数据及其他类型数据,如数据包数据。该第二地址散列单元602A通常不与一个内存复制控制器604偶联,因为该2级高速缓存内存及控制器130直接向其想要读取的数据的硬件内存地址发出读取请求。该读取请求是以IX的复制因子“硬连线的”,这样使得沿着该2级高速缓存内存及控制器130路径的一个读取请求从一个特定的内存口 608中读取。当写入这些内存口608时,该第二地址散列单元602A跨这些内存口 608分布该图形数据。
[0067]不需要相对于到该相同内存口 608的这些相同地址的读取请求将到一个内存口608的多个地址的写入请求进行重新排序,以保持数据一致性。写入请求还不需要相互间重新排序。如果写入请求被重新排列或读取请求相对于写入请求被重新排列,该主内存108中存储的数据可能变得未知或者处于一个非有意的状态。
[0068]软件基于对在数据包处理过程中该HFA单元160请求访问每个图形节点的频率的预测或假设来确定图形数据节点的复制因子。软件然后通过明确地重复对该虚拟内存空间中复制的图形数据到这些内存口 608的写入,将该图形数据写入这些内存口 608。与该HFA单元160请求读取图形数据的频率相比,将图形数据写入这些内存口 608并不常见。软件应该在它更新或写入主内存108中存在的图形数据前停止或终止该HFA单元160对图形的读取。软件停止对该图形的读取,以防止该HFA单元160从软件正在更新的相同图形中读取过时的图形信息。
[0069]该HFA单元160包括多个检查引擎603、该第一地址散列单元602B及该内存复制控制器604。该HFA单元160操作性地与一条I/O总线142偶联,该I/O总线本身与一个I/O桥138偶联。该I/O桥138与一个一致内存互联(CMI) 144偶联。该CMI144与多个内核120并且与该2级高速缓存内存及控制器130偶联。
[0070]该HFA单元160被配置成用于向该第一地址散列单元602B发出图形数据的读取请求。图7详细说明了该HFA单元160是如何向该第一地址散列单元发出读取请求的。该第一地址散列单元602B及内存复制控制器604从该多个内存口 608读取所请求的数据并且将该数据返回给该HFA单元160。从这些内存口 608中读取的一个图形数据节点可包含可由该HFA单元160用来产生一个到下一个图形数据节点的指针的信息(如果适用的话),此软件在该图形的创建过程中被汇编成该图形。当该HFA单元160走过(walk)该图形时,该第一地址散列单元602B将指向下一个图形数据节点及一个复制因子的指针散列到一个指向这些内存口 608中的数据的基于硬件的内存地址。
[0071]该多个内存口 608可分布到多个子集中,每个内存口属于至少一个子集。一个子集可包含所有内存口 608的集合。这些地址散列单元602及内存复制控制器604 了解对应于每个子集的这些内存口 608。在一个实施例中,S1、S2、S3、S4、S5及S6和S7代表一个具有四个内存口 608A-D的系统中的七个子集。SI包括所有的内存口 608A-D。S2及S3都包括两个内存口,其中S2包括内存口 608A-B并且S3包括内存口 608C-D。S4、S5、S6及S7包括一个内存口,其中S4包括608A,S5包括608B,S6包括608C,并且S7包括608D。在另一个实施例中,S1、S2及S3代表仅具有两个内存口 608A-B的系统中的三个子集。SI包括所有的内存口 608A-B。S2及S3包括一个内存口,其中S2包括608A并且S3包括608B。本领域普通技术人员应该认识到内存口及子集的其他组合也是可能的。
[0072]内存口 608上存储的数据在一个内存口的子集内不一定完全相同。然而,存储在该HFA单元160可访问的地址中的每个数据节点应该在该节点所存储的子集内跨多个内存口 608完全相同。这些内存口 608内的地址中的数据在该HFA单元160未被配置成从中读取的地址范围中的一个给定子集间不一定完全相同。然而,在该HFA单元160被配置成从中读取的地址范围中,对一个子集的一个单独内存口 608的任何复制的图形数据节点写入请求也应该导向该子集内的这些内存口的相应位置,以维持跨这些子集的复制。一个特定子集内复制的节点必须完全相同并且对于该特定子集的所有内存口位于相同的硬件内存地址。
[0073]图7是该HFA单元160的框图,包括该多个检查引擎603、该第一地址散列单元602B、及该内存复制控制器604。这些检查引擎603通过传输一个虚拟内存地址702及一个复制因子706来发出一个对于图形数据的读取请求。在一个实施例中,该虚拟内存地址702是38位的而该复制因子706是两位的。该第一地址散列单元602B将该虚拟内存地址702转换成一个基于硬件的内存地址705。作为一个示意性示例,该第一地址散列单元602B可以分别为4x及2x最大复制因子使用一个模数4或模数2散列功能,以将该虚拟内存地址702转换成一个基于硬件的内存地址705。本领域普通技术人员将领会到,第一地址散列单元602B可以使用其他的散列功能来将一个虚拟内存地址702转换成一个基于硬件的内存地址705。此外,该第二地址散列单元602A可使用被本领域普通技术人员称为第一散列单元602B的相同散列功能。该第一地址散列单元602B进一步基于该复制因子706及该虚拟内存地址702的位数将该复制因子706转换成一个子集索引708。然后,该内存复制控制器604在该子集索引708所指示的子集内确定图6中最不繁忙的内存口 608,并且向在该基于硬件的内存地址705处的那个内存口发出一个读取请求。
[0074]该内存复制控制器604通过跟踪发送到一个内存口的仍未实现的读取请求的数量来确定每个内存口有多繁忙。每个内存口 608同时可具有O到16个未实现的内存读取请求。在一些实施例中,具有最少未实现内存请求的内存口 608具有最低的读取延迟。
[0075]作为一个示意性示例,该HFA单元160内的这些检查引擎603通过该第一地址散列单元602B及内存复制控制器604向这些内存口 608发出请求,并且该HFA单元160内的这些内存口 608及这些检查引擎603如下处理这些请求:[0076]首先,该HFA单元160内的这些检查引擎603以一个第一虚拟内存地址702及一个4X复制因子706发出一个读取请求(N)。然后,该第一地址散列单元602B将该第一虚拟内存地址702转换成一个基于硬件的内存地址705。该第一地址散列单元602B进一步将该第一虚拟内存地址702的位数及该复制因子706转换成子集SI。然而,当在一个四端口内存系统中该复制因子小于4X时,该第一地址散列单元602B基于该虚拟内存地址702计算该子集索引708。
[0077]接着,该内存复制控制器604用该第一基于硬件的内存地址及SI的子集索引接收该读取请求(測)。该内存复制控制器604确定内存口 608B是子集SI中的这些内存口608A-D中最不繁忙的,因为内存口 608B具有最低数量的未实现的内存读取请求。因此,该内存复制控制器604通过选择对内存口 608B的连接来发出该读取请求。
[0078]接着,该读取请求(#N)的数据被返回给该HFA单元160。这些检查引擎603向该读取请求(棚)申请该数据并且用一个第二虚拟内存地址及一个2X复制因子发出另一个读取请求(_+1)。此外,该第一地址散列单元602B将该第二虚拟内存地址702转换成一个基于硬件的内存地址705。基于该虚拟内存地址的位数及该复制因子706,该第一地址散列单元602B确定该子集索引为S3。
[0079]接着,该内存复制控制器604用该基于硬件的内存地址及S3的子集索引接收该读取请求(#N+1)。该内存复制控制器604确定内存口 608C是子集S3中这些内存口 608C-D中最不繁忙的,因为内存口 608C具有最低数量的未实现的内存读取请求。因此,该内存复制控制器604通过选择到内存口 608C的连接来发出该读取请求。此过程无限期地继续,并且该HFA单元160内的该多个检查引擎603可以并列运行。
[0080]参照图6,图8A是一个表格800,展示了该第一地址散列单元602B及该第二地址散列单元602A的散列功能,当应用到一个特定虚拟内存地址时附接了四个内存单元。该第一及第二地址散列单元602被配置成用于使用相同的散列功能。在一个实施例中,该第一及第二地址散列单元602在该虚拟内存地址的所选位数上执行一个异或操作。此类操作的一个实施例包括以下异或操作:
[0081]虚拟内存地址[8:7] XOR虚拟内存地址[19:18] XOR虚拟内存地址[13:12]
[0082]其中虚拟内存地址[8:7]代表该虚拟内存地址的第8及第7位,虚拟内存地址[19:18]代表该虚拟内存地址的第19及第18位,并且虚拟内存地址[13:12]代表该虚拟内存地址的第13及第12位。此异或操作导致一个修改后的虚拟内存地址[8:7]。可替代地,该散列功能的另一个实施例包括简单地复制虚拟内存地址[8:7]以用作修改后的地址。
[0083]如图8A中的表格所示,当该复制因子802为4X时,所修改的虚拟内存地址804的位数[8:7]是不相关的。该子集索引806总是SI,这意味着有四个合格的内存口 808。当该复制因子为2X时,仅一位所修改的虚拟内存地址804影响子集选择。两个子集可用于2X复制模式(S2及S3)下的选择。参照图6以及图8A,S2包括内存口 O和1608A-B,并且S3包括内存口 2和3608C-D。当该复制因子是IX时,所修改的虚拟内存地址804的8和7位影响子集选择。四个子集可用于IX模式下,其中S4包括内存口 0608A,S5包括内存口1608B, S6包括内存口 2608C并且S7包括内存口 3608D。
[0084]参照图6,图8B是一个表格850,展不了该第一地址散列单兀602B及该第二地址散列单元602A的散列功能,当应用到一个特定的虚拟内存地址时具有两个内存口。该第一及第二地址散列单元602被配置成用于使用相同的散列功能。在一个实施例中,该第一及第二地址散列单元602在该虚拟内存地址的一个所选位上执行异或操作。此类操作的一个实施例包括以下异或操作:
[0085]虚拟内存地址[7]X0R虚拟内存地址[18]X0R虚拟内存地址[12]
[0086]其中,虚拟内存地址[7]代表该虚拟内存地址的第7位,虚拟内存地址[18]代表该虚拟内存地址的第18位,并且虚拟内存地址[12]代表该虚拟内存地址的第12位。可替代地,该地址散列功能的另一个实施例包括将修改后的地址设置成虚拟内存地址[7]。此异或操作导致一个修改后的虚拟内存地址[7]。
[0087]当该复制因子852是2X时,修改后的虚拟内存地址854的位[7]是不相关的。当最大复制因子为2X时,有两个合格的内存口 858。参照图6以及图8B,一个子集856可用于2X复制模式(SI)下的选择。SI包括合格的内存口 O和1608A-B。当该复制因子852是IX时,所修改的虚拟内存地址854的位[7]影响子集选择856。两个子集856可用于IX模式下,其中S2包括合格的内存口 0608A,并且S3包括合格的内存口 1608B。
[0088]虽然已参照其示例实施例对本发明进行了具体地解释和说明,本领域技术人员将理解可不脱离所附权利要求书所包括的本发明的范围在其中做出形式上的各种改变及详细说明。
【权利要求】
1.一种系统,包括: 多个内存口 ,该多个内存口分布于多个子集中,每一个子集由一个子集索引标识,该多个内存口各自具有一个基于对应工作负载的单独等待时间; 一个第一地址散列单元,该第一地址散列单元被配置成用于接收一个包括一个虚拟内存地址的读取请求,该虚拟内存地址与一个复制因子相关联,该虚拟内存地址指的是图形数据,将该复制因子转化成一个基于该虚拟内存地址的相应子集索引,并且将该虚拟内存地址转换成一个基于硬件的内存地址,该基于硬件的内存地址指的是在该相应子集索引所指示的一个子集内的这些内存口的其中至少一个中的图形数据; 一个内存复制控制器,该内存复制控制器被配置成用于将对于该基于硬件的地址的读取请求指向该相应子集索引所指示的该子集内的该多个内存口中具有最低单独等待时间的一个。
2.如权利要求1所述的系统,进一步包括一个第二地址散列单元,该第二地址散列单元被配置成用于接收一个对于包括至少一个虚拟内存地址的数据的写入请求,将每一个虚拟内存地址转换成一个基于硬件的内存地址,该基于硬件的内存地址指的是该多个内存口中的单独一个。
3.如权利要求2所述的系统,其中该第一地址散列单元偶联到多个检查引擎及一个高速缓存控制器,其中每一个检查引擎被配置成用于通过该第一地址散列单元向该内存复制控制器发出多个读取请求,并且该第二地址散列单元与该高速缓存控制器偶联,其中该高速缓存控制器被配置成用于通过该第二地址散列单元向该多个内存口发出多个读取和写入请求。
4.如权利要求2所述的系统,其中该第一及第二地址散列单元被配置成用于修改虚拟内存地址请求跨该多个内存口分布的顺序。
5.如权利要求2所述的系统,其中该多个内存口被配置成用于在一个基于硬件的内存地址中存储数据。
6.如权利要求2所述的系统,其中该第二地址散列单元被配置成用于将任何给定虚拟内存地址转换成一个预先确定的基于硬件的内存地址。
7.如权利要求1所述的系统,其中该第一地址散列单元被配置成用于将任何给定虚拟存储地址转换成一个预先确定的基于硬件的内存地址。
8.如权利要求1所述的系统,其中这些基于硬件的地址中的每一个指的是一个子集内的该多个内存口中的单独一个,在该多个内存口中的每一个内具有一个相同的相对地址。
9.如权利要求1所述的系统,其中该复制因子表明该多个内存口中一个数据结构的多次复制。
10.如权利要求1所述的系统,其中复制的数量是二的指数幂。
11.如权利要求1所述的系统,其中一个给定图形数据的复制因子由对该给定图形数据将被读取的频率的预测确定。
12.如权利要求1所述的系统,其中在一个给定图形内,具有相同复制因子的图形数据节点存储在一组地址中的虚拟内存中,并且根据其复制因子以升序及降序中的至少一种顺序为这些图形数据节点分配虚拟内存地址。
13.如权利要求1所述的系统,其中一个主机或软件具有用于多个图形数据的每次复制的保留的连续虚拟内存地址。
14.如权利要求1所述的系统,其中该子集索引包括该虚拟内存地址的位数及该虚拟内存地址的修改后的位数中的至少一个以访问该多个内存口中的图形数据。
15.—种方法,包括: 将多个内存口分布到多个子集中,每一个子集由一个子集索引标识,该多个内存口各自具有一个基于对应工作负载的单独等待时间; 在一个第一地址散列单元处接收一个具有一个虚拟内存地址及一个复制因子的读取请求,该虚拟内存地址指的是图形数据; 在该第一地址散列单元处基于该虚拟内存地址将该复制因子转化成一个相应子集索引 ; 在该第一地址散列单元处将该虚拟内存地址转换成一个基于硬件的内存地址,该基于硬件的地址指的是该相应子集索引所指示的一个子集内的该多个内存口中的单独一个; 在一个内存复制控制器中将对于该基于硬件的地址的读取请求指向该多个内存口中具有最低单独等待时间的一个。
16.如权利要求1 5所述的方法,进一步包括: 在一个第二地址散列单元处接收一个对于包括至少一个虚拟内存地址的图形数据的写入请求, 在该第二地址散列单元处将该每一个虚拟内存地址转换成一个基于硬件的内存地址,该基于硬件的内存地址指的是该多个内存口中的单独一个。
17.如权利要求16所述的方法,其中该第一地址散列单元与多个检查引擎及一个内存复制控制器偶联,其中每一个检查引擎被配置成用于通过该第一地址散列单元向该内存复制控制器发出多个读取请求,并且该第二散列单元与该高速缓存控制器偶联,其中该高速缓存控制器被配置成用于通过该第二地址散列单元向该多个内存控制器发出多个读取和写入请求。
18.如权利要求16所述的方法,其中该多个内存口被配置成用于在一个基于硬件的内存地址中存储数据。
19.如权利要求16所述的方法,其中在一个给定图形内,具有相同复制因子的图形数据节点存储在一个连续地址组中的虚拟内存中,并且根据其复制因子以升序及降序中的至少一种顺序为这些图形数据节点分配虚拟内存地址。
20.如权利要求16所述的方法,其中该第一及第二地址散列单元被配置成用于修改请求跨这些端口分布的顺序。
21.如权利要求16所述的方法,其中该第二地址散列单元被配置成用于将任何给定虚拟内存地址转换成相同的基于硬件的内存地址。
22.如权利要求15所述的方法,其中该第一地址散列单元被配置成用于将任何给定虚拟内存地址转换成相同的基于硬件的内存地址。
23.如权利要求15所述的方法,其中这些基于硬件的地址中的每一个指的是一个子集内的该多个内存口中的单独一个,在该多个内存口的每一个内具有一个相同的相对地址。
24.如权利要求15所述的方法,其中该复制因子表明对该多个内存口中一个数据结构的多次复制。
25.如权利要求15所述的方法,其中该复制因子是二的指数幂。
26.如权利要求15所述的方法,其中一个给定图形数据的复制因子由对该给定图形数据将被读取的频率的预测确定。
27.如权利要求15所述的方法,其中该子集索引包括该虚拟内存地址的位数及该虚拟内存地址的修改后的位数中的至少一个以访问该多个内存口中的图形数据。
【文档编号】G06F12/02GK103959255SQ201280057867
【公开日】2014年7月30日 申请日期:2012年9月26日 优先权日:2011年10月25日
【发明者】J·潘伯恩, G·A·鲍查德, R·戈亚尔, R·E·凯斯勒 申请人:凯为公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1