采用压缩的缓存线的信息价值的多处理器计算系统以及能够在所述系统中使用的处理器的制作方法

文档序号:6655341阅读:203来源:国知局
专利名称:采用压缩的缓存线的信息价值的多处理器计算系统以及能够在所述系统中使用的处理器的制作方法
技术领域
本发明的领域一般涉及计算系统;并且更具体地,涉及采用压缩的缓存线的信息价值的多处理器计算系统以及能够在所述多处理器计算系统中使用的处理器。
背景

图1示出用于基本计算系统的体系结构的部分,所述基本计算系统包括1)处理器101;2)缓存102;3)存储器控制器103;以及4)系统存储器104。处理器101通过执行完成数据元素(element)上各个操作的指令来实现软件例程(routine)。所述指令和数据元素被储存在缓存(cache)102和/或系统存储器104中。当处理器101需要具体指令或数据元素时,在从系统存储器104请求所期望的指令或数据元素之前,处理器到缓存102寻找它们。
一般认为缓存102比系统存储器104“快”。更确切地说,相比于等待驻留在系统存储器104中的指令或数据元素,处理器101在等待驻留在缓存102中的指令或数据元素时等待更少的时间。典型地,由于用比实现系统存储器所用到的那些存储单元(例如,DRAM单元)固有地更快的存储单元(例如,SRAM单元)来实现缓存102,出现如缓存102与系统存储器104之间的这种等待时间的不等。
相比于DRAM类型的系统存储器104,SRAM类型的缓存102的储存空间的每一个位更昂贵。因此,图1的计算系统体系结构尝试通过被设计为将使用更频繁的指令和数据元素储存在缓存102中而将使用没那么频繁的指令和数据元素储存在系统存储器104中,来最优化成本和性能两者。通过将使用更频繁的指令和数据元素储存在缓存中,处理器应该承受形式为等待从系统存储器104取得指令/数据所浪费的时间的可接受的“时序损失命中(timing penalty hit)”,因为处理器需要的指令/数据的很大百分比将在缓存102中被找到。
为了提高“缓存命中”(即其中所需指令或数据元素在缓存102中被找到的实例)的百分比,“时间局部性(temporal locality)”和“空间局部性(spatial locality)”的概念开始起作用。时间局部性是指单个指令或数据元素倾向于在它已经被使用之后不久被使用的概念。空间局部性是指在存储器中位于彼此附近(即,具有相似的地址)的指令和数据元素趋向于在大约同一时间被使用的概念。通过在指令和数据元素首次从系统存储器104被传送到缓存102之后将它们在缓存102中保持至少一些时间段来考虑时间局部性。
通过将缓存102设计成用来自系统存储器102的其内容接近(例如,“围绕”)需要从系统存储器104取出的任何单个指令或数据元素的数据块(即,多个指令或数据元素)进行加载,来考虑空间局部性。例如,如果需要来自系统存储器104的在地址X处的指令,对应于与地址X相关的多个地址的内容块从系统存储器104被传送到缓存102,而不是只从系统存储器104传送所需的指令,而不是只将所需的指令从系统存储器104传送到缓存102。
图2尝试通过示出第一邻近内容“块”105(所述内容块通过多个系统存储器地址被引用)被加载到单个缓存线107内;以及的第二邻近内容“块”106(所述内容块通过不同的多个系统存储器地址的集合被引用)被加载到另一单个缓存线108内来描绘这种情形。为了简单起见,图2将缓存204示出为单级结构。但是,各种计算系统被设计为具有不同等级的缓存。例如,许多类型的计算系统具有两级缓存(一级(L1)缓存和二级(L2)缓存),其中相比于第二级缓存(L2),第一级缓存(L1)对应于更少的处理器等待时间。L1缓存被假定为储存使用最频繁的数据元素和指令,而L2缓存被假定为储存使用没有L1缓存中的那些那么频繁,但是比系统存储器中的那些更频繁的数据元素和指令。
传统上,两个缓存等级都是用比系统存储器更快的存储器类型实现的(例如,L1和L2缓存两者都是用SRAM存储单元实现的);但是,L1缓存被集成在与处理器相同的半导体管芯(die)上,而L2缓存用与处理器不同的半导体管芯来实现。因为“片上”缓存访问比“片外”缓存访问快,所以对于处理器来说,相比于对L2缓存的访问,对L1缓存的访问对应于更少的等待时间。
存储器控制器103负责从处理器101取得未被缓存满足的对数据的请求,并且管理在系统存储器104中服务那些请求的进程(process)。可以存在许多不同种类的请求,例如对缓存中没有出现的数据的加载请求,以及将需要被储存回存储器的数据从缓存逐出。典型地,存储器控制器能够流水处理(pipeline)请求,从而许多请求可以是未完成的,并且可以以短得多的平均延时(latency)并行地被服务。存储器控制器负责与特定存储技术的细节接口,并且以模块化的方式隔离系统存储器和处理器。存储器控制器可以与处理器集成(例如在同一管芯上),或者可以与处理器分离(例如在芯片组中)。
通常用具体类型的系统存储器(例如,EDO RAM,SDRAM,DDR等)来实现系统存储器。
附图本发明是以实施例而非限制性的方式来解释说明的,在附图中,同样的标号表示相似的要素,其中图1示出计算系统的体系结构的部分;图2示出来自系统存储器的内容块被加载到单个缓存线中;图3a示出改进的途径,在所述途径中对齐的系统存储器内容块可以被压缩到单个缓存线内;图3b示出在压缩的缓存线从缓存被逐出并且被储存到系统存储器之后,示例性的实质性系统存储器内容的所得到的映射;图4a示出能够使用压缩的缓存线的单处理器体系结构的部分;图4b示出可以被系统存储器控制器利用以跟踪它的系统存储器内已被压缩的那些块的压缩映射;图4c示出具有压缩映射缓存和压缩/解压缩逻辑的存储器控制器;图4d示出具有用于标识用于压缩映射的物理系统存储器分配的寄存器空间的存储器控制器;图5a示出在将缓存线写到系统存储器的期间,图4a的存储器控制器可以利用的一对方法;图5b示出在从系统存储器读取缓存线的期间,存储器控制器可以利用的三种方法;图5c示出与对压缩映射的内容的引用相关的三种方法;图6a示出存储器控制器的第一实施方案;图6b示出存储器控制器的第二实施方案;图6c示出存储器控制器的第三实施方案;图7示出能够使用压缩的缓存线的信息价值(worth of information)的多处理器计算系统;图8a到8c示出涉及压缩的各种传送,所述传送可以在能够用压缩的缓存线的信息价值工作的多处理器计算系统(例如图7的多处理器计算系统)内发生;图9示出用于压缩/解压缩中心(hub)内的数据通道的设计的实施方案;图10示出用来从缓存引用缓存线的信息价值的地址位映射的实施方案,所述缓存既能储存压缩的缓存线的信息价值又能储存未压缩的缓存线的信息价值;图11示出缓存一致性准则的第一集合的实施方案;图12示出缓存一致性准则的第二集合的实施方案;图13示出缓存一致性准则的第三集合的实施方案;图14示出缓存一致性准则的第四集合的实施方案;图15示出涉及对压缩的缓存线的信息价值的所有权的请求的方法的实施方案;图16a图示在缓存中实现的传统存储地址;图16b图示在能够压缩/解压缩缓存线的信息价值的缓存中实现的存储地址的一个实施方案;图17图示用于能够压缩/解压缩缓存线的信息价值的缓存的标志阵列项的一个实施方案;图18是图示缓存控制器的一个实施方案的框图;图19图示能够压缩/解压缩缓存线的信息价值的缓存中的集合(set)和路径(way)选择机制的一个实施方案;图20图示字节选择逻辑的一个实施方案。
详细描述缓存线的信息价值的压缩为了清楚起见,缓存线是缓存中储存空间的基本单位。例如,在许多应用中,独有的标志和集合地址(set address)被用来专门标识计算系统缓存内的单个缓存线。因此用具体电气电路元件(例如,SRAM单元)来实现缓存线。相比之下,“缓存线的信息价值”或“信息线”是可以充满缓存线的信息(例如,数据元素或指令)量。在这里,回想图2的讨论,储存在“块”105的信息量对应于缓存线的信息价值,因为块105的内容充满缓存线107。
图3a展示详述空间局部性的概念以便将通常将占据一对缓存线的一对对齐的系统存储器304块305、309压缩到单个缓存线307中(即,一对缓存线的信息价值的信息被压缩到单个缓存线内)的途径。在图3a中还观察到第二个实例,在所述实例中,通常将占据一对缓存线的另一对对齐的存储器块306、310的内容被压缩在一起以便占据第二单个缓存线308。压缩是一种减少表达信息(诸如指令或数据元素)所需的数据量而不影响消息它本身的实质内容(即,不会消除重新获取用来表示指令或数据元素的“数字”的能力)的技术。将一对对齐块压缩到单个缓存线内的能力应该导致更快的计算系统性能,因为增加了缓存的有效大小(;并且因此降低了需要招致对较慢的缓存等级或系统存储器的更长的访问延时的可能性)。此外,如下面更详细描述的,因为信息与已经被访问的其他信息被压缩而抑制对信息的访问,可以增大计算系统带宽。
在实施方案中,参考图3a和图4a,处理器的缓存控制器410安装有压缩/解压缩逻辑411,如果1)缓存线信息价值表示对齐的、邻近的存储器块;并且,2)一对缓存线信息价值的信息内容能够压缩到单个缓存线内,则所述压缩/解压缩逻辑411将两个缓存线信息价值压缩在一起。所采用的压缩类型可以为例如Lempel-Ziv,Wilson-Kaplan,X-Match或可能其他已知或专有的(proprietary)压缩类型的各种形式。
在实施方案中,说“伴体块是对齐的”意味着与伴体块相关联的最低地址是伴体块的组合大小的倍数。例如,如果每一个缓存线的信息价值是64字节,则两个邻近的缓存线的信息价值的基地址N(即,在N处的第一个被称为“较低的”缓存线信息价值,并且在N+64处的第二个被称为“较高的”或“较上的”缓存线信息价值)可以被128整除(即N/128的余数是0)。作为进一步的实施例,参考图3a,块305将可利用基地址N寻址;并且,块309将可利用地址N+64寻址。
为了方便起见,对齐的邻近缓存线的信息价值被称为彼此的“伴体(companion)”。因此,按照之前的段落,如果一对伴体缓存线的信息价值的实质内容能够压缩,则该对伴体缓存线的信息价值被压缩/解压缩逻辑411压缩。同样地,如果发生对缓存线的内容的写,导致内容不再可压缩到单个缓存线内,则压缩/解压缩逻辑411能够将压缩的缓存线信息价值解压缩为两个单独的伴体缓存线的信息价值。
一旦一对缓存线的信息价值已经被压缩在一起,则整个计算系统把它们当作单个缓存线的信息价值来处理(例如,当被储存在缓存内时通过用单个标志和集合地址来引用),直至发生对压缩信息的写,所述写操作导致它被认为不再可压缩。一旦被认为是非可压缩的,信息被分割为一对伴体缓存线。因此,如果处理器401不断从缓存402访问具体缓存线的压缩信息价值,则处理器401不断地只是读取单个缓存线,即使实际上正在读取的是等价于一对缓存线的信息。接近该详细描述的末尾的是关于一个或多个示例性压缩/解压缩逻辑实现的细节,所述压缩/解压缩逻辑实现可以例如在其缓存能够压缩/解压缩缓存线的信息价值的处理器中实例化。
一旦信息已经被压缩到单个缓存线的信息价值中,则单个缓存线的信息价值可以当作任何“正常的”未压缩的信息缓存线来处理,例如1)从缓存被读取/被写到缓存(包括特定等级的缓存);2)从系统存储器被读取/被写到系统存储器;以及,3)被设计为传输缓存线的信息价值的任何结构(例如,列举一些在处理器和控制对系统存储器的访问的存储器控制器之间传输缓存线的信息价值的前端总线或点对点链路;以及,在多处理器环境中,共享被缓存的信息的一对处理器)。
作为缓存线的压缩的信息价值的可能传送的实施例,参考图4a,考虑缓存线的信息价值从缓存402被逐出(例如,因为它已经没有被足够频繁地使用以被认为值得在缓存402中继续储存)并且被传送到系统存储器404的情形。在这里,缓存线的压缩的信息价值可以被储存在可以储存单个缓存线的信息价值的单个块的系统存储器寻址空间中。例如,图3b示出在缓存线307的压缩内容已经从缓存302、402被逐出之后,关于图3a的块305和309的实质内容利用系统存储器304的描绘。图3b示出一旦缓存线307的内容从缓存302、402被逐出并且被储存到系统存储器304、404中,缓存线307的内容被储存从而仅占据存储器块305。这与在图3a中示出的利用在压缩之前曾存在的系统存储器来储存相同信息量形成明显的对比。
注意即使两个缓存线的数据价值可以被储存在正常情况下被单个缓存线的数据价值占据的空间中,当以紧凑形式被储存在系统存储器时,这并不暗示系统物理存储容量的有效增加,而对于压缩缓存来说,所述物理存储容量的有效增加是真实的。这是因为在系统存储器中,地址空间不是紧凑的。使地址空间紧凑要求对页表的修改,并因此它要求操作系统的支持,而在这里所提出的方案能够完全避免所述要求。
即,在压缩之后,只需要块305来储存在压缩之前较早储存在块305和309中的那些信息内容。图3b还展示,一旦逐出,缓存线308的压缩内容被重新储存(restore)在系统存储器304中,从而即使在压缩之前块306和310曾被用来储存同样的信息,所述同样的信息也只占据块306。如果处理器401再次需要图3b的“压缩内容”块305、306中的一个,它被存储器控制器403a作为单个缓存线的信息价值从系统存储器304、404中读取,并且(再次作为单个缓存线的信息价值)从存储器控制器403a被传送到处理器401,并且(再次作为单个缓存线的信息价值)被写到处理器的缓存402中。
存储器控制器在单处理器环境的上下文中,存储器控制器很大程度上可以无需识别或认定正发生的压缩/解压缩活动而运作。即,例如,处理器401可以“跟踪”并且操纵那些压缩的和未压缩的缓存线信息价值;并且,相比之下,存储器控制器被设计为简单地根据由处理器401指派的标识符或标注来读和写数据块。
但是,考虑哪些系统存储器块被用来储存对应于压缩的缓存线信息价值的内容(和/或哪些系统存储器块被用来储存对应于非压缩的缓存线信息价值的内容)的更加完善的存储器控制器403a可以能够减少对系统存储器访问的需求,从而使计算系统内系统存储器的使用更加高效。例如,通过因为第二数据块的实质内容刚才已经从压缩的第一数据块被读取而拒绝读第二数据块,在系统存储器上运用的需求被有效地减少。
作为更加详细的实施例,考虑处理器能够将信息压缩到它的缓存线内的多处理器环境。在这里,第一处理器(例如,图4a中的处理器401)可以将信息压缩到缓存线内,并随后将所述信息从它的缓存402中逐出,使得所述信息被储存到系统存储器404中。如果多处理器系统中的第二处理器(在图4a中未示出)期望从系统存储器404读取储存在压缩信息的两个伴体中的信息,而所述第二处理器没有第一处理器的压缩活动的知识,则存储器控制器403a可以被设计为“足够聪明”,以响应于接收到来自第二处理器的一对读请求(即,对第一伴体的第一请求和对第二伴体的第二请求),只读取压缩的缓存线的信息价值。在这里,压缩的缓存线的信息价值将足够满足第二处理器做出的两个请求。
压缩映射图4b提供用于信息体(body of information)、被称为压缩映射412的三种实施方案412a、412b、412c,所述压缩映射可以被存储器控制器403a使用以识别它的系统存储器404内压缩信息的存在。首先,参考“基本实施方案”412a,注意压缩映射412a可以作为位图(bit map)被储存在系统存储器404中,所述位图为系统存储器404中的每一信息块标识该块的对应缓存线的信息价值当前是以压缩格式还是以非压缩格式被储存在系统存储器404中。
在典型的实现中,地址列实际上并不被包括在压缩映射中(例如,在映射覆盖整个存储器的情况中)。图4b示出实施方案412a、412b、412c的每一个中的地址列,使得读者可以容易地理解压缩映射的组织和结构。具体地,在基于图3b中示出的系统存储器和下面即将讨论的实施例的上下文中,位已经被提供为有效值(active value)“1”(而其他还未被提供为非有效值“0”)。如此,可以将压缩映射实现为数据结构,所述数据结构被构建为在对应于具体系统存储器块的位置(例如,数据字段)上具有具体值。
图4b的压缩映射实施方案412a被描绘以便应用到在图3b中观察到的系统存储器。具体地,回想图3b的系统存储器将信息储存在块305中,所述信息对应于在压缩之前曾存在于块305和309中的信息的压缩。因为图3a的块305和309的信息已经被压缩在一起,所以图4a的压缩映射412a为这些块305、309中的每一个提供指示(“1”)。同样地,因为图3a的块306和310的信息已经被压缩在一起(到块306内),所以与305、309一样,图4b的压缩映射为这些块中的每一个提供指示。参考图4a,注意压缩映射412a可以被储存在系统存储器本身404中。
图4b的“更加详尽”的压缩映射实施方案412b包括如以上关于实施方案412a所描述的位图信息,以及为下列形式的额外信息1)提供缓存线的信息价值的实质内容的信息(例如,在诸如实例414的选择情况中);2)对压缩类型的一个或多个指示415,所述压缩类型用于以压缩格式储存的每一个缓存线的信息价值。
前一种额外信息414对应于压缩的极端形式,所述压缩的极端形式可以a)被应用到具有非压缩的缓存线的信息价值的系统存储器块的内容;和/或b)在已经以压缩格式储存在系统存储器中的那些缓存线的信息价值“之上”被应用(实施方案412b指示前者的单个实例)。例如,如果被储存在特定系统存储器块中的缓存线的信息价值是“全零”;则单个“零”(例如,零414)可以被储存在压缩映射412b中的特定块的位置。相似的指示可以被用于任何类型的常数值(例如,“全1”)。在这里,将期待存储器控制器包括标识具有常数值的那些缓存线的逻辑(例如求和逻辑(例如,全零的和将是零))。
后一种形式的额外信息指示压缩的具体类型。在这里,回想不同类型的压缩可以被采用(例如,Lempel-Ziv、Wilson-Kaplan、X-Match,等)。不但仅具有单种类型的压缩可以存在于任何一个特定的计算系统内(例如,只使用Lempel-Ziv的单个系统);而且,实施方案还可以被构造为其中单个系统能够实现不同类型的压缩(例如,可以使用Lempel-Ziv、Wilson-Kaplan、X-Match和可能的其他压缩算法中的任何一些的单个系统)。
压缩映射实施方案412a、412b两者都示出为系统存储器中可以储存缓存线的信息价值的每一个对齐块提供压缩/未压缩状态的位。相比之下,实施方案412c仅使用一位来表示每一对对齐的系统存储器块的压缩/未压缩状态。在这里,值得注意可以采用除2∶1外的压缩比率(例如4∶1);而且,根据实施方案412c的途径实现的压缩映射的大小将随压缩比率增大而变小。即,对于2∶1压缩来说,用一位来表示每一对对齐的存储器块;而如果使用4∶1压缩比率,则将有一位用于每一组四个对齐的存储器块。还要注意实施方案412b的更加详尽的信息可以被添加到实施方案412c。
压缩映射的替换实施方案可以使用选择性的、分层次的方案,而不是平面位向量。平面位向量针对存储器中的每一个块必须具有一位。压缩可以被选择性地应用到存储器的仅仅某些区域,并因此可以使压缩映射仅仅覆盖存储器的面临压缩的那些区域。同样地,即使额外区域可能面临压缩,但是压缩可以实际上(迄今为止)已经发生在存储器区域的仅仅一个子集中。覆盖已经被完全地或者部分地压缩的区域的压缩映射的各个区段(section)可以被链接在一起成为链接表,或者被插进(work into)覆盖存储器的日益变小的区域和子区域的数据结构的层级中。
回想用于一对伴体的压缩的条件是,伴体的实质内容“可压缩”到单个缓存线的信息价值内,并且由于在不同压缩方案间采用的不同数学技术,特定压缩技术可能认为一对特定伴体为可压缩的,而其他压缩方案可能不会认为该同样的伴体为可压缩的(例如,一对伴体的实质内容可能在Lempel-Ziv下是可压缩的但是在Wilson-Kaplan或X-Match下却不是可压缩的)。如此,相比于仅仅“提供”单种类型的压缩的计算系统,在“提供”不同类型的压缩的计算系统中,更多的伴体可能被压缩。图4b的增强位图实施方案412b的压缩类型指示415可以在这种系统中被使用(注意它指示压缩类型“A”被用于块305、309,并且压缩类型“B”被用于块306、310)。因此,图4a的压缩/解压缩逻辑411应该被理解为能够依赖于特定实施方案完成单一或多种类型的压缩。
从图4a还注意到压缩映射可以被储存在系统存储器404中。在实施方案中,存储器控制器403a被设计为在合适的时刻从系统存储器412取得压缩映射412的部分以检查一个或更多个存储器块的压缩/解压缩状态。
为了减少与为了取得压缩映射412的部分而访问系统存储器404相关联的效率损失,还注意到存储器控制器403a被设计为包括压缩映射缓存413。压缩映射缓存413包含一个或更多个最近被取得的压缩映射的部分。与正常的缓存相似的是,压缩映射信息可以在压缩映射缓存413中被不断地更新直至被逐出到系统存储器404。如下面关于图5a到5d更详细描述的,当期望压缩映射信息时,压缩映射缓存413被引用。如果期望的信息在压缩映射缓存413中没被找到,则信息从驻留在系统存储器404中的压缩映射412中被取得。
图4c展示被配置为用压缩映射412工作的存储器控制器403b不但可以装备在具有单个处理器420的计算系统中;而且可以与不拥有压缩/解压缩它们所缓存的信息的能力的一个或更多个处理器(例如处理器420和在图4c中未示出的可能的其他处理器)一起装备。因此,图4c的存储器控制器403b能够是计算系统中的意识到任何压缩活动的主要(并且可能唯一)的组件。因此,与图4a形成对比,图4c的描绘示出存储器控制器403b它本身可以利用用于压缩和解压缩缓存线的合适的压缩/解压缩逻辑416(还注意到处理器420缺乏这种逻辑)来翻新。压缩/解压缩逻辑416可以支持一种或更多种类型的压缩/解压缩技术。
存储器控制器403b还可以包括如以上关于图4a所描述的压缩映射缓存413。在与不维持任何对压缩/解压缩活动的认定的一个或多个处理器一起工作时,存储器控制器403b将未压缩的缓存线数据价值呈递给一个或多个处理器/从一个或多个处理器接收未压缩的缓存线数据价值。下面更详细地进一步描述可以由存储器控制器403b执行的具体方法,所述存储器控制器403b工作在其中一个或多个处理器不能以压缩的缓存线工作的环境中。
图4d打算传达压缩映射412可以被储存在系统存储器404的“物理”连续寻址范围内,而不是(例如利用在软件中受管理的链接列表技术)跨过(across)无关的存储器位置以“虚拟”的方式被实现。通过跨过物理寻址空间实现压缩映射412,操作系统(OS)可以无需了解压缩/活动而操作;这又可以将OS从受阻于执行用于管理或识别系统存储器的哪些位置要被用于压缩映射412的指令的状况中解救出来。如此,避免了很大程度的开销施加(impart)到OS上。
通过配置压缩映射为跨过系统存储器的寻址空间的物理范围被实现,压缩映射还应该能够被计算系统的硬件而不是它的操作系统管理和控制。如以上所讨论的,这应该“释放”OS以便基本上卸除与压缩映射有关的开销。在实施方案中,基本输入输出系统(BIOS)430通过导致一对寄存器431、432被写入来指示系统存储器404的哪些具体的物理地址范围要被用于压缩映射412。例如,第一个地址可以被储存到定义压缩映射的起始地址的寄存器431内;并且,第二个地址可以被储存到定义压缩映射的末尾地址的寄存器432内。
可替换地,压缩映射的大小可以被储存到寄存器431、432中的一个内,而起始或末尾地址被储存到寄存器431、432中的另一个内(注意压缩映射的大小可以依赖于采用2∶1、4∶1还是另一压缩纵横比(aspect ratio)而不同)。在寄存器431和432的加载之后,硬件能够制止将非压缩映射信息储存到通过寄存器431和432标识的寻址空间内;并且,同样地,只向同一寻址空间导引压缩映射。寄存器431,432可以可替换地位于处理器中。
如果压缩映射在物理上为跨过多个局部存储器分布,或者使用不要求压缩映射的每个部分驻留在物理邻近的存储器中的压缩映射方案,则多于一对寄存器可以被用于从BIOS到压缩映射驻留所在硬件的通信。
还值得注意跨过隐藏于操作系统并且未被操作系统分页的邻近物理地址范围来储存压缩映射的操作应该准许使用物理地址引用压缩映射而不必须处理虚拟地址中的改变和页失效,当操作系统将页交换出物理存储器并且进入虚拟存储器并且再次返回时,可能发生所述页失效。这是这个方案用来避免对OS支持的需要的另一方式,并且对于软件来说是透明的。
压缩映射使用如以上所讨论的,压缩映射表示储存在主存储器中的特定缓存线的信息价值是压缩的还是未压缩的。在各个实施方案中,它利用改变这个存储器的压缩状态的每一次对存储器的写来更新。压缩映射可以被用于至少以下三种用途1)有效地改变已经以非重复性方案被压缩的较上的缓存线的信息价值的目标地址;2)决定刚才已经从系统读取的缓存线的信息价值是否应该被进行解压缩的存储器控制器来解压缩;以及,3)如果对单独伴体的请求被识别并且伴体已经被压缩,则抑制系统存储器访问。下面在对系统存储器的写操作和从系统存储器的读操作的上下文中更加完全地讨论这些用途中的每一个。
系统存储器写图5a示出用于将缓存线的信息价值写到系统存储器块中的一对存储器控制器方法551、552。图5a的方法551、552中的每一个调用压缩映射。根据第一个方法551,压缩的缓存线的信息价值被存储器控制器接收(例如,当从处理器被发送时)(501)。假设压缩的缓存线的信息价值对于存储器控制器被标识为处于压缩格式(例如,利用控制头部或激活线中被置位的位)。响应于压缩的缓存线的信息价值的接收,存储器控制器更新(502)压缩映射以反映接收到的缓存线的信息价值是压缩的。图4b的实施方案412-412c中的任何一个或者它们的变体可以被用来实现压缩映射。
为了完成更新(502),参考图4a,存储器控制器403a引用压缩映射缓存413。如果与接收到的压缩的缓存线的信息价值所关联的系统存储器块有关的压缩映射的区段驻留在压缩映射缓存413内;则只更新压缩映射缓存413(以免访问系统存储器404中的压缩映射412)。如果压缩映射的合适部分不在压缩映射缓存413内,则从系统存储器404中取得并更新(502)合适部分。
还注意到在存储器控制器403b被耦合到不使用具有压缩信息的缓存线的处理器的实施方案(例如在图4c中描绘的那个)中,过程501将被稍微地修改以便1)仅未压缩的缓存线的信息价值将在框501被接收;2)在框501与502之间存储器控制器403b将确定接收到的缓存线信息价值可与它的伴体压缩(例如,通过引用存储器控制器403b的入(inbound)队列或出(outbound)队列中的它的伴体的实质内容);并且,3)在框503的执行之前,存储器控制器403b将接收到的缓存线信息价值与它的伴体压缩。
回想两个伴体缓存线的信息价值对应于主存储器中的一对对齐的地址空间块。在这里,一对对齐块的组合可以被视为存储器空间的更大的“宏块(macro block)”;其中,当它们均未被压缩时,一个伴体占据宏块的“较低的一半”,并且另一个占据宏块的“较上的一半”。当伴体被压缩时,可以利用仅用于较小的伴体块中的一个的寻址信息(例如,用于宏块较低一半的寻址信息)来引用整个宏块的实质内容。当未压缩时,宏块较上一半和较低一半可单独寻址。
例如,暂时回头参考图3a和3b,块305和309的组合可以被视为信息的宏块,其中块305对应于宏块“较低一半”(因为使用一对块305、309的较低的寻址空间引用它),并且块309对应于宏块“较上一半”(因为使用一对块305、309的较高的寻址空间引用它)。当未被压缩时,“较低一半”305可单独寻址并且“较上一半”309可单独寻址。当被压缩时,可以通过寻址较低一半305来访问这两半的组合内容。
存储器控制器应该被设计成针对任何未压缩的缓存线的信息价值,识别它被假定为占据宏块的哪一半并且它的对应伴体被假定为占据宏块的哪一半。例如,暂时回头参考图3b和4b,存储器控制器将被设计为,识别被寻址到较上一半309的未压缩的缓存线信息价值是被寻址到较低一半305的未压缩的缓存线信息价值的伴体线。这种识别是直接基于定义哪些块彼此是伴体的对齐方案的数学。为了简单起见,宏块的较低一半将在下文中被称为较低块,并且宏块的较高一半将被称为较高块。
对于2∶1压缩比率,当宏块的实质内容为压缩的时,关于使用宏块的较上和较低块的一对实施方案是可能的。回头参考图5a,在被称为“非重复”的第一个实施方案中,无论被写到系统存储器的压缩的缓存线信息曾是被存储器控制器还是被处理器压缩的,压缩的缓存线的信息价值的写操作(503)包括对仅对应宏块的较低块的地址空间的写。图3a和3b图示“非重复”途径,因为,如最初讨论的,如果图3a的块305和309被压缩在一起,则仅图3b的较低块305被写(当然,可替换地,仅较高块可以被写)。
根据“非重复”途径,如下面关于图5b的方法555更详细描述的,存储器控制器在读操作之前引用压缩映射,因为(例如,由不了解任何压缩活动的系统组件做出)对已经被压缩到较低块内的较高块的请求只可以通过从较低块的读操作来被满足(即,在请求中指定的目标不同于系统存储器中读操作被进行以满足请求所在位置)。
在可替换的被称为“重复”的第二个实施方案中,压缩的缓存线的写操作(503)包括对可应用伴体集合之中的所有块(例如,对于2∶1压缩来说,可应用伴体集合之中的较低和较高块两者)的地址空间的写操作。例如,对于2∶1压缩途径来说,如果图3a的块305和309被压缩在一起,则图3b的块305和309被写相同的压缩信息。当接收到对较上块的信息的请求时,重复途径允许存储器控制器避免必须从较低的压缩信息块获取信息(如以上关于“非重复”实施方案所讨论的)。
如此,对于对“较上”块的信息的请求,不需要引用压缩映射。如果图3b被修改为反映重复性的途径,则较上块309将被画上阴影,并且将进一步理解,较上块309的内容是与储存在较低块305中相同的压缩内容。同样地,较上块310将被画上阴影,并且将进一步理解,较上块310的内容是与储存在较低块306中相同的压缩内容。
在图5a的第二个存储器控制器写方法552中,未压缩的缓存线从能够进行压缩的处理器处被接收(504)。如此,无论什么原因,接收到的未压缩的缓存线被认为是“不可压缩的”。压缩映射因此被更新(505)(例如,通过在压缩映射中表示未压缩的缓存线的对应块的位置写“0”),并且被写到系统存储器中(506)。
写方法552还可以稍微被修改以表示其中存储器控制器进行压缩/解压缩的系统(例如在图4c中所描述的其中处理器不支持压缩的系统)中的写过程。如此,与前面刚刚讨论的不同,接收到的未压缩的缓存线是可压缩还是不可压缩是未知的。在这种情况下,在框504与505之间,存储器控制器的压缩/解压缩逻辑416(例如,通过分析它的内容,连同在存储器控制器的输入队列或输出队列中找到的它的伴体的内容)确定接收到的缓存线不是可压缩的。如果它被认为是可压缩的,则它将与它的伴体被压缩,并且写操作(506)将是压缩信息的写操作。
系统存储器读图5b示出三种存储器控制器读方法553、554、555。第一种读方法实施方案553被涉及例如在图4c中描绘的实现,在所述实现中存储器控制器进行缓存线的压缩和解压缩,并且存储器控制器与其通信的一个或多个处理器不使用支持压缩信息的缓存线。如此,对于从系统存储器读取(507)的任何缓存线的信息价值,存储器控制器引用(508)压缩映射以察看正被读取的信息是否是压缩的(注意虽然对压缩映射的引用(508)被示为在读(507)之后,但是可替换地,可以与读(507)并行地进行和/或在读507之前进行)。
如果所读取的缓存线的信息价值是压缩的,则存储器控制器将它解压缩(509,510)。如果所读取的缓存线的信息价值是未压缩的,则存储器控制器不尝试将它解压缩(509,511)。
如果存储器控制器恰巧驻留在具有识别压缩的缓存线的信息价值的存在的组件的计算系统中;则存储器控制器可以被实现为没有压缩/解压缩逻辑(例如,图4a的环境而不是图4c的环境可应用)。如果这样的话,则存储器控制器应该被设计为(例如,通过调整被附接到缓存线的信息价值的头部内的值)简单地表明所读取的信息是压缩的还是被解压缩的,而不是实际上进行解压缩。为了表示用于这种存储器控制器的读过程,图5b的方法553的框510应该对应于(例如,在头部或激活线中)提供所读取的信息是压缩的的指示,并且框511对应于提供所读取的信息是未压缩的指示。
方法554和555可以由具有压缩/解压缩逻辑的存储器控制器或者不具有压缩/解压缩逻辑的存储器控制器完成。已经被简要地提到的第二读方法554涉及存储器控制器,所述存储器控制器被设计为“足够聪明”以避免对已读取的压缩的缓存线的信息价值的伴体做出对系统存储器的第二次读。根据这个方法,如果存储器控制器识别出存在着挂起的(pending)、对身为彼此的伴体的缓存线的信息价值的读请求,则引用(512、514)压缩映射。如果压缩映射显示伴体被压缩在一起,则存储器控制器只从系统存储器读取(518)该压缩的缓存线以满足两个请求。
如果压缩映射显示伴体没有被压缩在一起,则(针对2∶1压缩方案),存储器控制器从缓存线的信息价值对应的较低和较上信息块分开地读取(516,517)两个缓存线的信息价值,以满足请求。如果没有挂起的、对身为彼此的伴体的缓存线的信息价值的读请求,则存储器控制器表现得像正常存储器控制器一样,并且简单地完成从系统存储器的单独的读(513),以满足每个请求。
值得注意,术语“挂起的”请求意味着物理存储器组件实际上还没有响应曾发出请求的存储器控制器。但是,即使物理存储器组件已经响应了第一个请求(即,第一个请求不再“挂起”),存储器控制器仍然可能抑制第二个请求。例如,倘若用于第二个请求的数据可以从第一个请求的结果(例如从存储器控制器)被提供,则存储器控制器可以被设计为抑制任何对压缩信息的第二个请求。因此,抑制请求的能力可以被扩展到图5b的方法554描述的那些情形之外的情形。
在存储器控制器被设计为进行解压缩的情况中,存储器控制器可以以连续流一起进行读方法553和554;其中1)方法554大部分在读之前被完成,2)方法553大部分在读之后被完成,并且,3)方法554的读518、517、513中的任何一个还对应于读507,以便将方法553、554“连接”在一起。如果方法553、554以这种方式连接,则注意如果在存储器读之前曾引用压缩映射514,则引用(508)可以“被跳过”(即,不被执行)。这是因为方法553指示要在读之后执行的查询(509)的答案可以从在读之前做出的引用(514)中找到。
方法555对应于可以被用来实现以上关于图5a所讨论的“非重复”写途径的写方法。在这里,如果所请求的缓存线的信息价值的目标地址对应于用于伴体对的较上块,则引用压缩映射(519、521)。如果所请求的缓存线的信息价值已经被压缩,则该压缩的缓存线从较低块被读取(522、520)。如果所请求的缓存线的信息价值还未被压缩,则该未压缩的所请求的缓存线的信息价值从在读请求中指定的目标块被读取。如果在读请求中指定的目标块不是较上块,则存储器控制器利用对应于较低块的寻址,简单地从系统存储器读取压缩的或未压缩的缓存线信息价值(即,不需要引用压缩映射)(519,520)。
与方法554相似,可以将方法555和方法553组合在一起用于由存储器控制器进行的存储器读,所述存储器控制器还进行解压缩。在这里方法555的读523和520的任意一个可以被视为方法553的读(507),以便将两种方法553、555连接在一起。如果在存储器读(507)之前,方法555的执行流经压缩映射引用(521),则压缩映射引用(508)可以被跳过,因为查询(509)的答案可以从引用(521)中找到。如关于图5a所讨论的重复性方案的使用移除对方法555的需要,因为用对查询522的“是”答案不能实现目标地址的改变。
压缩映射缓存查找图5c提供与以上刚才关于图5b曾讨论的对压缩映射的引用(508,514,521)相关的三种方法556、557、558。具体地说,方法556示出可以被用来实现图5b的压缩映射引用(508,514,521)中的任何一个的过程的更加详细的描绘。方法556对应于基本缓存/系统存储器读过程——虽然是以具有存储器控制器的压缩映射缓存和驻留在系统存储器中的压缩映射的新颖的特征来应用。更确切地说,为了引用压缩映射(556),存储器控制器首先引用(525)它的板上压缩映射缓存413。
因为压缩映射缓存413只包含被储存在系统存储器404中的整个压缩映射412的一部分,所以如果针对缓存线的信息在压缩映射缓存中被找到(526)(即,“命中”)——对压缩映射的引用完成。如果针对特定块的信息在压缩映射缓存中未被找到(即,“未命中”),则信息从驻留在系统存储器中的完整压缩映射中被取得(526,527)(即,进行对系统存储器的读)。
压缩映射未命中对应于效率损失,因为作为结果进行系统存储器读(527)。方法557、558对应于可以由存储器控制器进行以减轻时序损失命中的方法,所述时序损失命中与针对图5b的压缩映射引用514、521中任意一个的压缩映射缓存未命中相关联,所述压缩映射引用514、521先于对应的存储器读516-518、520、523。方法557、558两者都应用到存储器控制器,所述存储器控制器进行解压缩(例如,因为它与如图4c中所描绘的不使用压缩的缓存线的处理器一起工作),并且因此针对所有系统存储器缓存线读进行图5b的方法553。
方法557示出存储器控制器可以被设计为,在与从系统存储器读(530)缓存线信息价值以满足第一个存储器读请求重叠的时间段中,进行对压缩映射缓存的引用(531),所述对压缩映射缓存的引用(531)发生在满足第二个存储器读请求的过程中的存储器读(514,521)之前。即,如果缓存查找(531)结果是未命中,则以应该帮助减轻时序损失命中的某种程度的并行性进行预存储器读缓存查找(531)和不同请求的存储器读(530)。在这里,存储器读与缓存查找之间的时间重叠的程度(例如,部分的或者其他)可以依赖于实现而不同。
在流水线式存储器控制器和系统存储器(以便能够并行地服务多个系统存储器读请求)的特定情况中,如果压缩映射查找(531)未命中,用来服务第一个请求的缓存线信息价值的读操作(530)可以与所需的压缩映射信息的读(532)并行地继续。方法557既以流程图的形式(在标注530、531、532中下标为“1”)又以甘特图(Gantt chart)的形式(在标注530、531,532中下标为“2”)示出这种情形。
方法558可应用到以上关于图5a所讨论的“非重复的”实施方案。它示出在执行引用(514、521)时缓存未命中的情况中可以使用预测(“压缩的”或“未压缩的”);并且,示出用来检查是否需要解压缩的对压缩映射的后续引用508被用来检查预测的有效性。根据方法558,如果缓存查找导致未命中(532),则所请求的缓存线的状态被预测为压缩的或未压缩的。在第一个实施方案中,状态被保守地预测为未压缩的。在另一实施方案中,压缩映射的内容的近期历史被用作用于预测压缩状态或未压缩状态的基础。然后根据预测取出缓存线。
例如,如果所请求的缓存线的信息价值对应于较上块并且被预测为处于压缩的状态,则从较低块的地址读取缓存线的信息价值(533)。相反地,如果缓存线的信息价值的预测状态是未压缩的,则从较上块的地址读取缓存线的信息价值(533)。然后从系统存储器取得压缩映射的合适部分(534)(因为未命中(532)指示压缩映射不包含针对可应用的缓存线的信息价值的信息)。然后检查所述适当的压缩映射信息以察看预测是否正确(535)。如果正确,则完成剩余的读请求过程。在进一步的实施方案中,针对另一请求的压缩映射缓存更新可以发生在查询(532)的执行之后而在框534的执行之前。如果这样,则框534可以改为对应于到压缩映射的“再查找(re-look)”;并且,如果命中发生,则到系统存储器对压缩映射信息的取可以被完全地消除。
存储器控制器实施方案图6a到6c示出各个存储器控制器实施方案603a、603b、603c;其中,每一个存储器控制器实施方案603包括压缩映射缓存613a、613b、613c。实施方案613a不包括任何压缩或解压缩逻辑电路。实施方案613b包括解压缩电路616b。实施方案613c包括压缩逻辑电路616d和解压缩逻辑电路616c。对于实施方案613a、603b、603c中的每一个,一个或多个总线/点对点链路接口601对应于存储器控制器的接口,在所述接口1)对存储器读和存储器写的请求被接收;2)对所述请求的响应被提供。因为请求可以以想象到的方式在总线(例如,前端多分支总线)上被接收和被响应;和/或可以以想象到的方式在点对点链路(例如,接收请求的第一入链路和发送响应的第二出链路)上被接收和被响应,所以接口601可以是到总线和/或点对点链路的接口。
每个实施方案603a、603b、603c的请求/响应队列602在入方向上(例如,在第一请求队列中)排队请求。每个实施方案603a、603b、603c的调度器逻辑电路623调度对这些请求的服务。每个实施方案603a、603b、603c的存储器请求队列604排队已经由调度器逻辑电路623调度的请求。每个实施方案603a、603b、603c的存储器接口605负责从存储器控制器被耦合到的特定类型的存储器读信息/将信息写到存储器控制器被耦合到的特定类型的存储器。每个实施方案603a、603b、603c的请求/响应队列602还在出方向上(例如,在第二响应队列中)排对对请求的响应。
在各个实施方案中,以上所讨论的更新或引用(502,505,514,521)可以由调度器逻辑电路(或者从某些其它合适位置)完成。对于实施方案603a、603b、603c的每一个,到压缩映射缓存613的输入612在第一个实例中可以被视为(例如,在压缩映射缓存未命中的情况中)从外部存储器向压缩映射提供压缩映射信息的输入。此外,输入612在第二个实例中可以被视为与从系统存储器进行的缓存线信息价值的读操作相关联地进行的对压缩映射信息的引用。
在这里,从以上对图5b的方法553的讨论回想,如果存储器控制器能够进行解压缩——例如,实施方案603b、603c所应用的——则压缩映射被引用(508)。如果所读取的数据是压缩的,则复用器618选择解压缩逻辑电路616b、616c的输出(注意,到解压缩逻辑电路的输入沿着存储器接口605b、605c的数据通道输出)。如果所读取的数据是未压缩的,则复用器选择从存储器接口605b、605c流出的数据通道而无需沿路经(way)调用解压缩逻辑电路。
图6c示出包括压缩逻辑电路616d以及解压缩逻辑电路616c的实施方案。压缩逻辑电路616d被示为被耦合到存储器请求队列604c。如此,在存储器请求队列604c中观察到(或者引用)的任何可压缩伴体线信息价值可以在被写到系统存储器内之前被压缩在一起。此外,线617指示等待被写到系统存储器内的任何缓存线信息价值可以与它的伴体一起被压缩,即使它的伴体位于请求队列或响应队列中(或者在请求队列或响应队列中被引用)。可附加地或可替换地,压缩逻辑电路可以被耦合到请求/响应队列602b、603c。
多处理器系统和缓存一致性准则多处理器系统图7图示适合促进多个缓存线信息价值到单个缓存线内的压缩的多处理器计算系统体系结构。能够发送/接收压缩的缓存线数据价值并且维护(例如,如以上在图4a中所讨论的)压缩映射信息的存储器控制器可以被集成到在图7中公开的特定多处理器体系结构内。根据图7的途径,压缩/解压缩逻辑7071、7072位于计算子系统7111、7112的“中心”7101、7102中,以便在计算系统内的指令/数据元素的不同类型的传送期间可以应用压缩。下面关于图8a到8c进一步解释说明采用压缩的示例性计算系统传送。
处理核心(core)(例如,处理核心7011)被视为专用于指令执行的逻辑电路;并且,处理器(例如,处理器7161)被视为包含处理核心(例如,处理核心7011)、压缩/解压缩中心(例如,中心7101)和缓存控制器(例如,缓存控制器7051)的电路。不管如何设想,处理器或中央处理单元(CPU)典型地包括处理核心和用于(在那些具有缓存的系统中)控制至少一个缓存的缓存控制器。图7的设想与这个视图一致(注意对于计算系统中存在的每一级缓存,可以添加额外的缓存控制器和缓存)。图7的设想假定压缩/解压缩中心是处理器的部分。但是,其他设想可以选择将中心或它的任何一个组成部分视为与处理器分开的组件。
图8a示出1)来自处理器核心(例如,处理器核心7011)的未压缩的缓存线的信息价值在它被传递到缓存(例如,缓存7021)时可以与它的伴体被压缩(801);2)来自处理器核心(例如,处理器核心7011)或缓存(例如,缓存7021)的未压缩的缓存线的信息价值在它被传递到系统存储器(例如,系统存储器7041)时可以被压缩(802);以及,3)来自处理器核心(例如,处理器核心7011)或缓存(例如,缓存7021)的未压缩的缓存线的信息价值在它被传递到另一计算子系统(例如,计算系统7112)时可以被压缩(803)。
作为以上第二种情况的实施例,如果未压缩的缓存线的信息价值从缓存7021被逐出,以便从缓存控制器7051传递通过压缩/解压缩中心7101并且然后被传递到系统存储器控制器7031(以便它能被写到系统存储器7041中),则在它通过压缩/解压缩中心7101的途中,如果压缩/解压缩中心7101具有对未压缩的被逐出的缓存线的信息价值的伴体的访问,并且这一对缓存线的信息价值可以被压缩到单个缓存线的信息价值,则它可以与它的伴体一起被压缩(802)。
作为以上第三种情况的实施例,如果未压缩的缓存线的信息价值从缓存7021被逐出,并且要被储存在系统存储器7042而不是系统存储器7041中,(从而从缓存控制器7051传递通过压缩/解压缩中心7101和7102并且然后被传递到系统存储器控制器7032),则发生从计算子系统7111到计算子系统7112的传送。在这里,被逐出的缓存线的信息价值可以在中心7101或7102被压缩(再次,如果中心具有对被逐出的缓存线的信息价值的伴体的访问,并且这两个可压缩)。在任意一种情况中,被逐出的缓存线的信息价值被认为是作为在计算子系统7111与7112之间的它的传送的部分而被压缩的。因此,如图8a中所描绘的,被逐出的缓存线的信息价值可以作为到它的对应计算单元的系统存储器的传送的部分而被压缩(802);或者,作为在它的计算子系统外的传送的部分被压缩(803)。
在图7中所观察的计算系统中,每个压缩/解压缩中心包括压缩/解压缩逻辑电路7071、7072和缓冲区7121、7122,所述缓冲区7121、7122暂时性地排队它近期已接收的缓存线的信息价值,希望一对未压缩并且可压缩的伴体同时留驻于同一压缩/解压缩中心,以便使伴体能被压缩。
相似地,图8b展示当曾从系统存储器读取的未压缩的缓存线的信息价值在它到驻留的计算子系统的缓存(804)或到另一计算子系统(805)的途中时,在它传递通过压缩/解压缩中心时可以与它的伴体一起被压缩。例如,从系统存储器7041读取的未压缩的缓存线的信息价值可以在到缓存7022的途中与它的伴体一起被压缩/解压缩中心7101压缩;或者作为从计算子系统7111到计算子系统7112的它的传送的部分,被压缩/解压缩中心7101、7102中的任意一个压缩。
图8c展示从I/O组件(例如,磁盘储存单元或网络接口)发送的未压缩的缓存线的信息价值在到缓存途中(806)、到系统存储器途中(807)或其他计算子系统的途中(808)可以与它的伴体一起被压缩(注意具体系统存储器块应该与来自I/O单元的信息相关联以便可以识别它的伴体)。例如,在I/O接口7081接收到的缓存线的信息价值在它到缓存7021、系统存储器7041或甚至计算子系统7112的途中可以与它的对应伴体一起被压缩/解压缩中心7101压缩。
计算子系统7111、7112还以可通信的方式被耦合在一起。在这里,用于将子系统耦合到彼此的结构709可以被实现为双向点对点链路、一对相反方向的单向点对点链路,或总线。简单地通过在每一对计算子系统之间添加另一个可通信结构,可以添加更多计算子系统。可以用被耦合到I/O组件的点对点链路或总线实现例如I/O接口7081和7082中的任何一个的I/O接口。多于一个的I/O组件可以被耦合到任何单个压缩/解压缩中心。
在系统操作的过程中,压缩的和未压缩的缓存线的信息价值通过接口被传递到能够接收两种类型的信息(即,压缩信息和未压缩信息)的那些系统组件;并且,仅未压缩的缓存线的信息价值被传递到只能接收未压缩信息的那些系统组件。例如,考虑处理核心7011、7012和I/O组件(在图7中未示出)只能接收未压缩的缓存线的信息价值(并且以未压缩的缓存线的信息价值工作)的实现。
在这种情况中,只有未压缩的缓存线的信息价值将被传递到处理核心和I/O单元。设想缓存7021,2、缓存控制器7051,2、系统存储器控制器7031,2和系统存储器7041,2各自都能接收未压缩的和压缩的缓存线的信息价值,那么未压缩和压缩的缓存线的信息价值将被传递到这些设备。在这里,对于至少被发送到能够接收压缩或未压缩信息的系统组件的每个缓存线的信息价值来说,某种类型的标识符将与它相关联,以标识它是否是压缩的。
根据基本实施方案,将标识缓存线的信息价值是“压缩的”还是“未压缩的”的头部信息(例如,头部中的位,如果是压缩的,所述位被设置为活动的,或者如果是未压缩的,所述位被设置为非活动的,或者头部信息的子集的特殊编码)附接到在系统中正运送的任何缓存线的信息价值。当缓存线的信息价值处于系统的基本组件(例如,缓存、缓存控制器、存储器控制器、压缩/解压缩中心等)内的时候,它倾向于被缓冲/排队或储存。当缓存线的信息价值被缓冲/排队或储存时,位或编码值可以被置位,以便标识缓存线信息价值是“压缩的”还是“未压缩的”。
所述位或编码值可以是当缓存线的信息价值被排队或储存时被附接到缓存线的信息价值的头部的部分;或者可以被引用到它的储存或缓冲/排队位置。在一个实施方案中,所述位或编程值位于纠错编码(ECC)字段中(所述字段通常“跟随”信息组(例如,作为头部信息的部分))。在ECC字段的另一应用中,系统存储器的ECC字段被用作对压缩映射的“备份”。在这里,在各个实施方案中,ECC信息与所有数据一起被储存在系统存储器中。
甚至可能更加有利的是,通过在(部分地或者完全地)可应用到储存在系统存储器中的特定缓存线的信息价值的ECC字段内记录该特定缓存线的信息价值是“压缩的”还是“未压缩的”,可以完全地避免对压缩某些引用(例如,诸如方法553中的引用508)。在这里,简单地从存储器读取信息和它的相关联的ECC信息,缓存线的信息价值的状态(压缩的或未压缩的)即可获得。当已经存在到对应数据读取已经完成的时刻仍旧还未被服务的、到压缩映射缓存的未命中时,这特别有利,因为回避了对服务压缩映射缓存未命中的任何进一步的延迟。
图9图示用于压缩/解压缩中心910的“数据通道”设计的实施方案。图9的实施方案可以被视为被分解为与不发送/接收压缩信息的系统组件通信的那些接口901,以及与能够发送/接收压缩信息和未压缩信息两者的系统组件通信的那些接口902。例如,与以上刚讨论的(其中处理核心7011、7012和I/O组件(在图7中未示出)只能接收未压缩的缓存线的信息价值(并且以未压缩的缓存线的信息价值工作)的实现)并且其中图9的中心设计对应于图7的中心7101的实施例一致,接口901将被用来进行到处理核心7011以及计算子系统7111被耦合到的一个或多个I/O组件的通信(例如,一条或多条链路或总线914对应于一条或多条链路或总线714,并且一条或多条链路或总线908对应于一条或多条链路或总线7081)。同样地,接口902将被用来进行到1)计算子系统7112;2)缓存控制器7051;以及,3)系统存储器控制器7031的通信(例如,一条或多条链路或总线909对应于一条或多条链路或总线709;一条或多条链路或总线913对应于一条或多条链路或总线713;一条或多条链路或总线917对应于一条或多条链路或总线717)。
根据图9的数据通道设计,从任何系统组件源发送并且要被发送到能够接收压缩的缓存线的信息价值的系统组件目标的接收到的未压缩的缓存线的信息价值进入到缓冲区912内(为了示例性的目的,所述缓冲区可以被视为对应于图7的缓冲区712)。如果在缓冲区912内的未压缩的缓存线的信息价值的挂起期间,所述未压缩的缓存线的信息价值的伴体恰巧也驻留在缓冲区912中,并且如果伴体可与彼此一起压缩,则它们被压缩逻辑电路907a压缩在一起。
如果在缓冲区912中的未压缩的缓存线的信息价值的挂起期间,在缓冲区912中没有观察到伴体,则利用数据通道920旁路(bypass)压缩逻辑电路。依赖于压缩是否发生,确定选择复用器905的哪一个通路。一旦从复用器905被转发,压缩的或未压缩的缓存线的信息价值被转发到接口902,并且被发送到合适的目标系统组件。再次注意,在以上描述的过程中,最初接收到的未压缩的缓存线的信息价值可以从发送或不发送压缩信息的源接收。在前一种情况中,数据通道922a被使用。在后一种情况中,数据通道921被使用。因为目标系统组件能够接收压缩或未压缩信息,所以接口902被用作从中心910的发射点。
同样地,根据图9的数据通道设计,从能够发送压缩的缓存线的信息价值的系统组件源发送(即,在接口902被接收)并且要被发送到不能接收压缩的缓存线的信息价值的系统组件目标(即,要从接口901被发送)的接收到的缓存线的信息价值被检查,以察看它是否是压缩的。如果它是压缩的,则沿着数据通道922b将压缩的缓存线的信息价值发送到解压缩逻辑电路907b并且将它解压缩。
如果它不是压缩的,则未压缩的缓存线的信息价值旁路解压缩逻辑电路907b而沿着数据通道922c被传递。如果解压缩发生,则从解压缩逻辑电路907b生成的未压缩的缓存线的信息价值通过接口901被转发到目标系统组件。如果解压缩没有发生,最初接收到的未压缩的缓存线的信息价值通过接口901被转发到目标系统组件。依赖于压缩是否发生,确定选择复用器906的哪一个通路(channel)。
回头参考图7,依赖于实现,缓存控制器705和/或存储器控制器703还可以或可以不包括它们自己的用于进行压缩和解压缩的逻辑电路。对于其中缓存线的信息价值所针对的目标系统组件是不包括压缩电路的缓存控制器或系统存储器控制器的那些情形,中心的压缩逻辑电路(诸如图9的压缩逻辑电路907a)可以被用来在信息被储存在缓存或系统存储器中之前分别将它压缩。
在这种情况中,为了增大将缓存线信息价值以压缩格式储存在缓存或系统存储器中的可能性,将为了被写到对应的缓存或系统存储器中的目的已经被发送到缓存控制器或系统存储器控制器的缓存线的信息价值的拷贝在缓存区912中“被持有”一段时间。如此,如果1)在缓存线的信息价值的拷贝从缓冲区912被消除之前,伴体出现在缓冲区912中;2)为了被写入同一缓存或系统存储器组件的目的,伴体正被发送到同一缓存或系统存储器组件;并且,3)伴体可与缓存线的信息价值一起压缩,则缓存线的信息价值的伴体可以与缓存线的信息价值的拷贝一起被压缩逻辑电路907a压缩,并且压缩结果被储存在缓存或系统存储器中。
此外,对于其中针对未压缩的缓存线的信息价值的源系统组件是不包括压缩电路的缓存控制器或系统存储器控制器(即,未压缩的缓存线的信息价值从其对应的控制器不包含压缩电路的缓存或系统存储器被读取)的那些情形来说,未压缩的缓存线的信息价值的伴体也可以从源缓存或系统存储器被读取,并且所读取的未压缩的缓存线的信息价值和它被读取的伴体两者都被储存在缓冲区912中。如果它们可压缩,则压缩逻辑电路907a随后将它们压缩。如果它们不可压缩,则未压缩的缓存线的信息价值旁路压缩逻辑电路907a并且伴体从缓冲区912被消除。在进一步的实施方案中,如果未压缩的缓存线的信息价值所针对的目标是不接受压缩信息的目的地,则不进行伴体的读取并且没有压缩的可能性。
即使以上刚描述的压缩方法(“缓冲区中拷贝的持有”,“伴体的读取”)可以在其一个或多个缓存控制器和/或一个或多个存储器控制器不包含压缩电路的系统中被使用,可想象这些相同的方法可以在其一个或多个缓存控制器和/或的存储器控制器包含压缩电路的系统中被使用。设想虽然通过这样做几乎不能获得性能优势,但是如果一个或多个缓存控制器和/或一个或多个存储器控制器事实上确实包含压缩电路,则这些方法可以从系统的性能“被撤销”。此外,在各个实施方案中,能够将压缩信息储存在它们对应的一个或多个缓存和/或一个或多个系统存储器组件中的一个或多个缓存控制器和/或一个或多个存储器控制器被设计成包括解压缩电路,并且支持电路以便处理其中新信息到压缩的缓存线的“写”导致压缩的缓存线不再可压缩的情形。
关于系统存储器控制器实现,在各个多处理器系统实施方案中,系统存储器控制器组件是例如以上关于图4a到6c讨论的那些实施方案的将压缩映射信息储存在系统存储器中的非传统存储器控制器。但是,实现压缩映射的方式可以呈各种形式。例如,根据第一种途径(被称为“集中式途径”),用于整个系统的压缩映射被视为单个信息体;而在第二种途径(被称为“分布式”)中,存储器映射被视为共同对应于用于整个系统的压缩映射的离散段。在多处理器、集中式压缩映射的环境中,处理器自己的缓存可以被用来储存压缩映射的“被缓存的部分”(如此,如果期望的话,则可以从一个或多个存储器控制器完全地消除压缩映射缓存)。
此外,现有技术的多处理器缓存一致性技术(例如为每个缓存线和处理器/总线间代理通信需求定义特定MESI状态的准则)可以被用来管理压缩映射被缓存的部分的内容,并通信对其做出的改变。典型地,多处理器系统中针对每个处理器有存储器控制器和它自己的相关联系统存储器资源。如此,在多处理器、集中式途径中的压缩映射信息可以跨过系统中的不同系统存储器资源被储存;并且,压缩映射信息应该从图4b的实施方案412a,412b被扩展到进一步标识系统内哪个特定系统存储器与特定系统存储器块相关联,对于所述特定系统存储器块,压缩映射标识为是压缩的或未压缩的。
在多处理器、分布式压缩映射的环境中,系统中的每个存储器控制器可以被配置以维护压缩映射的部分。在这里,每个控制器的压缩映射标识它负责控制到其的访问的系统存储器资源的各个块的压缩/解压缩状态。因此,压缩映射实施方案412a、412b适用于分布式途径。此外,如果压缩映射的被缓存的部分没有被储存在处理器的缓存中,则存储器控制器可以被设计以便包括压缩映射缓存。
图10示出用来从能够储存压缩的和未压缩的缓存线的信息价值两者的缓存中引用缓存线的信息价值的地址位的映射的实施方案。最低位1000确定缓存线内的字节(byte)偏移。次最低位1001被用来1)在压缩的缓存线项的情况中,在已经被压缩在一起的伴体中进行选择;或者,2)在非压缩的缓存线项的情况中,作为缓存标志的部分。次最高位1002是集合位(set bit),选择缓存中的集合(set)。最后,地址中的最高位1003指定标志位。
对持有压缩信息的任何结构的窥探(snoop)将确定缓存内的偏移的位1000之上的位1001作为“不关心(don’t care)”来处理,因此在压缩的宏块的高或低半部分上匹配。例如,如果线大小是74字节(因此位0-7被用于偏移1000),并且使用2∶1压缩,则位9(图10将其示为选择位1001)选择具有压缩信息的特定缓存线。期望地址与储存块之间的比较将忽略位9。如果改为使用4∶1压缩,则将忽略位9和10。
缓存一致性准则无论所采用的多处理器体系结构环境的准确类型,缓存一致性准则应该被采用。当多个处理器具有改变它们共享的数据元素的能力的时候,跟踪最“新(up-to-date)”数据是重要的——否则处理器可能偶尔以“陈旧”信息操作。通过实现缓存一致性准则,多处理器环境内的处理器协作地通知彼此计算系统内的数据元素的状态;并且,适当地对它们做出反应。图7示出与每个压缩/解压缩中心7101、7102相关联的缓存一致性准则逻辑7151、7152包括用于实现例如下面所描述的那些缓存一致性准则的逻辑电路(例如包括逻辑门的电路)。缓存一致性准则逻辑是否是压缩中心的部分随实施方案而不同。缓存一致性准则逻辑应该以某种形式被耦合到它的处理器的对应缓存控制器(如果没有,对应处理器的外部接口也可以(例如,压缩/解压缩中心))以便可应用的缓存一致性准则可以被实现。
被称为MESI(修改的、排他的、共享的、无效的)、用于支持缓存一致性的公知的状态集描述可以被应用到任何缓存线内的信息的四种可能状态。修改的状态(M)意味着缓存线的内容不同于它在系统存储器中的对应块的内容。排他状态(E)意味着缓存线的内容只可从系统中的单个缓存获得。共享状态(S)意味着缓存线的内容可以存在于系统中的其他缓存中。缓存线的内容被标注为无效(I)意味着它的内容潜在地陈旧并且应该被认为是不可用。
一般地,当多个处理器操作时,它们改变它们对应的缓存线的内容;这又导致该内容的状态改变。因此缓存一致性准则不仅包括具体状态的指派,而且定义状态转换,所述状态转换定义缓存线状态要如何依赖于关于它的内容所进行的活动而改变。图11到14回顾在包含缓存线级的压缩的多处理器计算系统中可以采用的一些缓存一致性状态转换。在这里,可以理解压缩的缓存线的信息价值可以被给定为M、E、S或I状态中的任何一个。
图11图示用于这样的情形的状态转换表实施方案,在所述情形中压缩的缓存线的信息价值用新信息写入;并且,缓存线的信息价值能够维持它的压缩状态(即,最近写入的信息不导致内容被认为不可压缩)。根据图11的状态转换表,无论压缩缓存线先前曾处于哪种状态(例如,M、E、S或I),允许内容仍然为压缩的压缩的缓存线的内容的改变导致该压缩的缓存线到达修改的状态(M)。
图12图示用于这样的情形的状态转换表实施方案,在所述情形中压缩的缓存线的信息价值用新信息写入;但是,缓存不能维持它的压缩状态(即,最近写入的信息导致内容被分割为它的组成伴体缓存线的信息价值)。根据图12的状态转换表,再次,不管最初压缩的缓存线的信息价值的状态(即,X=“不关心”),所产生的两个伴体初始被置入修改(M)状态。
图13图示在一对单个伴体线被压缩在一起以形成单个压缩的缓存线时采用的状态转换表的实施方案。在这里,设想第一和第二伴体已经存在于缓存中,并且导致一对伴体被认为可压缩的改变要被写到缓存线中的一个的内容中。在这里,如果被写的缓存线内容的伴体的状态处于M或S状态,则作为结果生成的压缩的缓存线的信息价值被置入M状态。注意,如果在写之前伴体的状态是S状态,则压缩不应该发生,除非关于S状态伴体发生成功的所有权请求(RFO)。即,任何正在使用伴体(例如,以致导致它处于S)状态的其他实体允许“放弃”它改变伴体状态的能力。
图14图示在一对单个伴体线被压缩在一起以形成单个压缩的缓存线时采用的状态转换表的另一实施方案。在这里,设想1)缓存线的信息价值从外部资源(例如,来自另一计算单元的系统存储器或缓存)被取得,所述缓存线的伴体已经驻留在缓存中,所取得的缓存线的信息价值曾被取得以用于所述缓存;并且,2)这对伴体可压缩。根据图14的状态转换表,无论在读操作之前伴体处于什么状态(即,X=“不关心”),压缩的缓存线的信息价值的状态是M。还注意到对于处于M状态的伴体来说,压缩不应该发生,除非关于它的成功RFO发生。
图15示出源于所有权请求(RFO)的缓存一致性准则。RFO是处理器对信息的具体项的请求,让其他处理器(和/或计算系统内的其它组件)知道请求处理器打算将具体项用于它自己的排他的使用。因此,在图15的方法中,第一处理器通过RFO的方式请求(1501)将压缩的缓存线的信息价值用于它自己排他的使用。响应地,如果所请求的压缩的缓存线的信息价值位于与另一(即,第二)处理器相关联的缓存内,则第二处理器将压缩的缓存线的信息价值传送到第一处理器,并且导致压缩的缓存线的信息价值在它自己的缓存内被标注处于无效状态(I)(1502)。
能够压缩/解压缩信息的缓存因为以上描述的系统实施方案可以采用能够压缩和解压缩缓存线的信息价值的缓存控制器,所以围绕图16到图20的讨论涉及能够进行压缩/解压缩活动的缓存控制器实施方案。图16A图示在传统缓存中实现的示例性存储地址。在传统缓存中,根据标志、集合和偏移分量划分地址。集合分量被用来选择线集合中的一个。相似地,被用来选择线内的字节的偏移分量是地址的最低位。图16B图示被实现为用于在能以压缩信息工作的缓存(在下文中称为“压缩缓存”)中进行查找的存储地址的一个实施方案。图16B示出用来将伴体信息线映射到相同集合内的伴体位的实现。所述伴体位在信息线未被压缩的实例中使用。因此,如果信息线不是压缩的,则伴体位指示两个压缩的伴体信息线中的哪一个要被使用。
在一个实施方案中,用于集合选择的地址位窗口向左移动一位,从而伴体位处于集合选择与字节偏移位之间。在这种方式中,因为伴体位和集合选择位不重叠,所以伴体线映射到同一缓存集合。现在已不再是集合选择位的部分的伴体位变为标志的部分,然而实际标志大小没有增加。在传统未压缩的缓存中,伴体位是地址的部分,并且在集合选择中被用来确定地址是哈希到奇数还是偶数的缓存集合。
图17图示用于压缩缓存的标志阵列项(tag array entry)的一个实施方案。标志阵列项包括伴体位(例如,作为地址标志位的部分)和压缩位。压缩位导致压缩的缓存标志比传统未压缩缓存的标志大一位。压缩位指示信息线是否是压缩的。具体地,压缩位指定如何处理伴体位。如果压缩位指示信息线是压缩的,则伴体位当作偏移的部分被处理,因为该线是压缩对。如果压缩位指示没有压缩,则伴体被认为是标志阵列的部分并且忽略它作为偏移的部分。
图18是图示缓存控制器1804的一个实施方案的框图。缓存控制器1804包括集合和路径(way)选择逻辑1810、字节选择逻辑1820和压缩逻辑1830。集合和路径选择逻辑1810被用来在压缩缓存内选择缓存线。图19图示压缩缓存中的集合和路径选择逻辑1810的一个实施方案。参考图19,集合和路径选择逻辑1810包括标志比较逻辑1910,所述标志比较逻辑1910接收来自标志阵列的输入以基于接收到的地址选择缓存线。标志比较逻辑1910考虑缓存线是否持有压缩数据。
因为缓存线可以持有可变的数据大小,所以依赖于特定线是否是压缩的,标志比较逻辑1910也是可变长度的。因此,标志匹配考虑压缩位。当为以至少2∶1可压缩时,每个线的两个扇区(sector)被储存在单个物理缓存线中(例如,以一个路径)。注意到这与传统分扇区的缓存设计不同是重要的,因为当未压缩的时候,给定逻辑线的不同逻辑扇区可以同时以不同路径被储存。
根据图18,字节选择逻辑1820在线内选择所寻址的数据。根据一个实施方案,字节选择逻辑1820依赖于压缩位。图20图示字节选择逻辑1820的一个实施方案。字节选择逻辑1820包括解压缩器2010,如果必需,所述解压缩器解压缩所选择的缓存线。依赖于压缩位,输入复用器在解压缩的缓存线的信息价值与未压缩的缓存线的信息价值之间选择。在一个实施方案中,偏移的范围依赖于该信息线是否是压缩的。
如果信息线是压缩的,则地址的伴体位被用作偏移的最高位。如果信息线是未压缩的,则解压缩器2010被旁路,并且地址的伴体位不被用于偏移。所选择的线在其大小是物理线大小的两倍的缓冲区中被持有,以容纳压缩数据。可替换的实施方案可以选择使用伴体位来选择解压缩字(word)的哪一半储存在其长度与物理线大小相同的缓冲区中。但是缓冲整个信息线对于在对缓存的写之后修改和重新压缩数据是方便的。
压缩逻辑1830还可以被用来确定什么时候信息线要被压缩。根据一个实施方案,机会性的压缩被用来确定什么时候信息线要被压缩。以上所描述的机制允许映射到同一集合并且只在它们的伴体位中不同的任何两个缓存线的信息价值被一起压缩到一个缓存线内。在一个实施方案中,所述机制修改集合映射功能并且选择伴体位,使得它允许相邻的存储信息线被压缩在一起,这利用空间局部性。
结束语还要注意到本说明书的实施方案不仅可以在半导体芯片内实现,而且可以在机器可读介质内被实现。例如,以上所讨论的设计可以利用被储存在机器可读介质上和/或被嵌入机器可读介质内,所述机器可读介质与用于设计半导体器件的设计工具相关联。实施例包括以VHSIC硬件描述语言(VHDL)语言、Verilog语言或SPICE语言来格式化的电路描述。一些电路描述实施例包括行为级描述、寄存器传送级(RTL)描述、门级网表和晶体管级网表。机器可读介质还可以包括具有例如GDS-II文件的布图(layout)信息的介质。此外,网表文件或用于半导体芯片设计的其他机器可读介质可以在仿真环境中被使用以完成以上所描述的教导的方法。
因此,还要理解本发明的实施方案可以被用作或者用于支持在某种形式的处理核心(例如计算机的中央计算单元(CPU))上执行或以其他方式在机器可读介质上或内实现或实行的软件程序。机器可读介质包括用于储存或传输以机器(例如,计算机)可读的形式的信息的任何机制。例如,机器可读介质包括只读存储器(ROM);随机访问存储器(RAM);磁盘储存介质;光储存介质;闪存存储器设备;以电、光、声或其他形式传播信号(例如,载波、红外信号、数字信号,等);等等。
在之前的说明书中,已经参考本发明的具体示例性实施方案描述了本发明。但是,明显地,可以对本发明做出各种修改和改变而不背离如在所附权利要求书中所阐述的本发明的更宽的精神和范围。因此,说明书和附图要被认为是解释说明性的而不是限制性的。
权利要求
1.一种处理器,所述处理器包括缓存一致性准则逻辑电路,所述缓存一致性准则逻辑电路根据从由以下准则组成的组中选择的至少一个缓存一致性准则来标注缓存线的信息价值,所述以下准则包括a)在所述缓存线的信息价值是曾以新信息写入的压缩的缓存线的信息价值,所述新信息允许所述压缩的缓存线的信息价值维持为压缩的情况下,保持所述压缩的缓存线的信息价值处于在被写入之前它曾处于的相同状态;b)在所述缓存线的信息价值是曾从压缩的缓存线的信息价值派生的未压缩的缓存线的信息价值,所述压缩的缓存线的信息价值在以新信息写入后不能维持为压缩的情况下,将所述未压缩的缓存线的信息价值标注为处于修改的状态;以及c)在所述缓存线的信息价值是通过将未压缩的缓存线的信息价值和所述未压缩的缓存线的信息价值的伴体压缩而生成的压缩的缓存线的信息价值的情况下,将所述压缩的缓存线的信息价值标注为处于修改的状态。
2.一种处理器,所述处理器包括中心,所述中心支持所述处理器参与使用压缩的缓存线的信息价值的多处理器计算系统,所述中心包括a)第一总线或链路接口,所述第一总线或链路接口耦合到不能发送和接收压缩的缓存线的信息价值的所述系统的组件;b)第二总线或链路接口,所述第二总线或链路接口耦合到能够发送和接收压缩的缓存线的信息价值的所述系统的组件;c)从b)到a)的第一数据通道,所述从b)到a)的第一数据通道包括解压缩逻辑电路;d)从b)到a)的第二数据通道,所述从b)到a)的第二数据通道旁路所述解压缩逻辑电路;e)从a)到b)的第一数据通道,所述从a)到b)的第一数据通道包括缓冲区和压缩逻辑电路;以及f)从a)到b)的第二数据通道,所述从a)到b)的第二数据通道包括所述缓冲区,并且所述从a)到b)的第二数据通道旁路所述压缩逻辑电路。
3.一种方法,包括在多处理器计算系统内将第一缓存线的信息价值和第二缓存线的信息价值压缩到压缩的缓存线的信息价值,所述第一缓存线的信息价值和所述第二缓存线的信息价值是彼此的伴体。
全文摘要
描述了用于能够用压缩的缓存线的信息价值工作的多处理器计算系统的缓存一致性准则。还描述了能够用压缩的缓存线的信息价值工作的多处理器计算系统。所述多处理器计算系统包括多个中心,所述中心用于与各个计算系统组件通信以及压缩/解压缩缓存线的信息价值。描述了能够根据缓存一致性准则标注缓存线的信息价值的处理器。还描述了包括如以上所描述的中心的处理器。
文档编号G06F12/08GK1934541SQ200580008358
公开日2007年3月21日 申请日期2005年1月10日 优先权日2004年1月15日
发明者克里斯·纽本, 拉姆·哈格哈尔利, 赫伯特·汉姆, 阿里-热扎·阿德尔-塔巴塔拜, 安沃·胡洛姆 申请人:英特尔公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1