【问题标题】:Is the CPU cache line size modifiable? and how is data transmitted in cache blocks?CPU 缓存线大小是否可以修改?以及数据如何在缓存块中传输?
【发布时间】:2021-03-08 10:36:06
【问题描述】:

我有两个硬件相关的问题:

1- CPU 高速缓存行的大小是否可以由操作系统修改,还是硬连线在 CPU 中?在 Linux 上使用getconf -a 可以查看缓存行大小。

2- 假设我的数据缓存行大小是64 bytes,数据是如何从内存传输到 CPU 的? 是并行传输吗? (意思是总线上有64*8 = 512的小线可以一次移动所有位),还是它的串行传输?

3- 说到这里,我有第三个问题。 Cache placement policies 的逻辑是如何嵌入到 CPU 中的,是否有软件驱动它(如果有的话,软件存储在哪里)或者逻辑以某种方式在硬件中?

【问题讨论】:

    标签: cpu cpu-cache


    【解决方案1】:

    过去,一些系统允许在启动时配置缓存扇区大小(使用英特尔术语,其中缓存行是一致性单元,缓存扇区是地址标记单元)。例如,PowerPC 7410 支持高达 2MiB 的 L2 缓存,其中片外 SRAM 的一部分可用于直接映射的内存区域。增加缓存扇区大小允许固定大小的处理器片上标签存储器支持更大的二级缓存,但片外 SRAM 的大小是在封装/制造时设置的。例如,通过将一半容量分配给直接映射的内存,扇区大小可以减半。

    如果一个实现有足够的标签存储来覆盖使用给定缓存扇区大小的全部容量,那么更大扇区大小的好处是非常有限的。通过获取相邻扇区可以轻松地提供预取效果(在高带宽利用率和其他条件下忽略此类预取的好处)。方式预测和方式记忆的好处同样可以以适中的成本进行模拟。

    如果额外的标签存储有其他用途,缓存扇区大小的可配置性可能会很有吸引力。此类用途可能包括缓存内压缩(当数据被压缩时,数据存储可以容纳更多行/扇区)、分配标签存储或用于其他用途的数据存储(例如,如果将 L3 数据存储的一半分配给窥探)过滤器,缓存扇区大小可以减半以增加有意义的容量利用率或减少冲突未命中,如果一半的标签用于预取元数据,缓存扇区大小可以加倍以允许使用所有数据存储),或可选使用V-way 缓存机制(其中集合的数量相对于实际缓存容量翻了一番:参见 Moinuddin K. Qureshi 等人的“The V-Way Cache : Demand-Based Associativity via Global Replacement”,@987654321 @) 关闭 V-way 将使缓存扇区大小减半。

    (也可以设计一个非统一延迟缓存,其中将缓存扇区大小加倍允许统一快速的标签检查,但由于数据访问速度较慢,这将有利于标签数据分阶段缓存访问,这在 L2 和外部缓存中很常见,并且好处是适度的。部分标记方式选择/未命中检测将提供大部分好处。)

    使用 64B 高速缓存行和大约 36 位地址标记,使用 128B 高速缓存扇区的存储开销减少是适度的。 (如果数据存储使用更密集的机制,例如 DRAM,则收益会增加。如果数据存储在芯片外而标签在芯片上,那么更大的扇区可能会变得有吸引力,因为芯片上的存储受到更多限制。)

    关于传输宽度,甚至在 DDR 内存之前,其突发长度为 2 促使接口窄于缓存线(DDR4 的突发长度为 8,尽管突发斩波减半),提供“完整-width" 接口将过于昂贵。即使是针对高性能的 Alpha 21064 (Wikipedia) 也只使用了 128 位宽的数据总线和 32B 缓存线。 (请注意,在片上内存控制器之前,片外内存控制器可以使用与处理器数据总线不同的宽度。)

    关于替换策略的实施,这由专门的硬件来处理。 (学术上已经提出了软件控制的替换:Google Scholar search。)软件管理的 TLB 已经实现,但现在即使是 TLB 管理也最常在硬件中完成。

    【讨论】:

    • 感谢您提供详细信息。那么在现代 x64 芯片中,usb 和其他外围设备(如内存)之间的数据传输是串行的吗?
    • @Dan Universal Serial Bus 和 Serial ATA(两个通用接口)是“纯”串行(不完全是纯的,因为使用了差分信号每条车道需要两条“电线”)。这些通常连接到通过 PCIe 或类似接口连接到处理器芯片的支持芯片上。内存访问不是完全并行的,但也不是串行的。与 PCI/AGP 相比,PCIe 更喜欢窄宽度(同步宽接口更困难)。
    • 对不起,我想问data transfer between CPU and other peripherals like the memory is serial?。所以当你说`不是完全并行但也不是串行的`时,它到底是什么,它叫什么?
    • @Dan 具有一位宽通道的接口被认为是串行的,所有其他的都被认为是并行的。处理器芯片的接口通常(最近)是 PCIe(允许直接连接到 PCIe 设备)或类似的具有不同芯片以转换非 PCIe I/O 接口;处理器芯片上直接支持 USB 和 SATA 也很常见。像HT) 或QPI 这样的独特接口具有作为处理器间接口和芯片组接口的优势。
    猜你喜欢
    • 2011-04-09
    • 1970-01-01
    • 1970-01-01
    • 2017-08-26
    • 2015-05-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-01-18
    相关资源
    最近更新 更多