【微知】Intel芯片中的DDIO技术是什么?(Intel Data Direct I/O I/O 设备能够访问 CPU 的最后一级缓存)

关键信息

  • DDIO: Intel Data Direct I/O 数据直接传输IO
  • 仅在Xeon 处理器中可用
  • 主要技术点: 它使 I/O 设备(如网卡)能够访问 CPU 的最后一级缓存 (LLC)。由于延迟、CPU 利用率和带宽较高,直接访问 LLC 可以显著提高性能。
  • DDIO 功能对软件是透明的
  • 第四代五代之后的志强处理器才支持
  • 如何观测? 英特尔性能监控 (PerfMon) 事件和指标集来确定英特尔 DDIO 技术的使用是否以及使用效率如何
  • 第 4 代之后英至强可扩展处理器实施了平铺布局,所谓平铺布局就是各种块被分组到平铺上,然后并放置在网格顶点中。然后网格顶点连接到网格互连,允许块通过公共网格结构互连
放置网格顶点
网格互联
放置网格顶点
网格互联
块1
分组1
网格1
公共网格结构
块2
块5
分组2
网格2
块6

可见多个网格,每个网格下面有公共网格互联。 比如PCIe通过M2IOSF互联
在这里插入图片描述

  • 通过网格与其他代理和块通信
  • CPU core,包含本地 1 级 (L1) 和 2 级 (L2) 缓存。每个CPU的core都通过 mesh 同 非core以及LLC 通信。
  • CHA/LLC是缓存控制器,可处理非内核中的所有连贯内存请求,并保持整个系统的内存一致性。
  • 每个 CHA 都包含一个最后一级高速缓存 (LLC) “切片”。
  • 内存地址在可用的 CHA 之间进行哈希处理,因此来自内核或 I/O 设备的请求将根据物理地址定向到相应的 CHA 单元。这意味着来自内核的 memory 请求没有固有的亲和性,以转到其共存的 CHA 或 LLC slice。CHA 是 I/O 分析和英特尔 DDIO 有效性的关键 PerfMon 观察点,这里计算 I/O 请求并观察套接字的 LLC 命中和未命中。
  • M2IOSF:Mesh to I/O Scalable Fabric 连接到网格,是 CPU 和 I/O 设备之间的接口,通过 PCI Express 插槽连接或集成在芯片上。M2IOSF 是一个观察点,我们可以在其中计算每个 M2IOSF 块或 PCIE 设备的 I/O 请求类型。M2IOSF 包含多个带有性能监控单元 (PMU) 的子块。M2IOSF 为 Compute Express Link (CXL) 设备提供相同的桥接功能
  • IIO:集成的 I/O 单元,由用于排队请求的入站和出站流量控制器组成;它负责遵循 PCI Express 排序规则,并将 PCI Express 请求转换为 IRP 的内部命令,反之亦然。IIO PMU 提供每个器件的分辨率(高达 x4 分叉)。“inbound” 是指发送到 CPU(也称为上游)的 I/O 设备发起的请求,而“outbound”是指 CPU 发起发送到 I/O 设备(也称为下游)的请求。
  • 在具有多级内存层次结构的系统中,对驻留在较高缓存层中的数据的访问比对 DRAM 的访问具有更低的延迟。在没有 Intel® DDIO 的系统中(Intel Xeon® 处理器 E5 系列和 Intel® Xeon® 处理器 E7 v2 系列之前®),入站 DMA 写入在系统内存中终止,从而导致数据使用者经历相对较长的延迟。使用 Intel® DDIO,入站写入在 CPU 的 LLC 中分配,使使用者能够更快地获取数据
  • 在 Intel 架构中,设备发起的入站事务通过集成的 I/O 控制器,该控制器充当 CPU 的连贯域接口。M2IOSF 与 CHA 协商事务,CHA 还包含 CPU 的 LLC 缓存的切片。在此协商期间,在某些情况下,M2IOSF 可能会请求缓存行的临时投机所有权,如果可能,在事务期间保留它。Intel DDIO 事务的最大粒度为 1 个高速缓存行(64 字节),但允许小于 64B 的数据大小,这称为部分事务。M2IOSF 的任务是将较大的事务分解为缓存行粒度。
  • CHA 检查缓存命中或未命中,并执行必要的一致性作,
入站事务
设备
IIO
M2IOSF
  • A high-level的入站 I/O 事务流
    • I/O 设备启动入站读取请求或入站写入事务。
    • M2IOSF 将交易分成 64B 块(不一定),并将交易转发给 CHA。
    • CHA 检查缓存命中或未命中,并执行必要的一致性作,例如 snoops。在数据读取情况下,CHA 还负责从其当前位置(例如缓存代理、另一个套接字或内存)获取数据。
    • 在数据读取情况下,CHA 将数据发送回集成 I/O 控制器。
      在这里插入图片描述
  • 入站事务可分为读取或写入、LLC 命中或未命中以及完整或部分事务。写入可以进一步分为分配 (BIOS 默认) 和非分配。

Inbound Writes 入站写入概述

从 M2IOSF 的角度来看,入站写入包括两个阶段:所有权和数据回写。在所有权阶段,M2IOSF 使用 ITOM 或 ITOMCacheNear作码向 CHA 发送所有权请求,CHA 通过将目标缓存行的所有权交给 M2IOSF 并相应地更新 snoop 过滤器来做出响应。与非 IO作一样,将缓存行的所有权授予 M2IOSF 需要通过 snoops 通知缓存行的其他所有者,以遵循 MESIF 一致性协议使其副本无效。所有权阶段结束后,M2IOSF 将数据消息 MTOI 发送到同一个 CHA。CHA 在 LLC 中查找数据并确定是否需要维修 LLC 命中或 LLC 未命中。以下部分介绍了 CHA 如何处理 LLC 命中和 LLC 未命中情况。

在这里插入图片描述

入站写入 LLC 命中

LLC 命中是入站写入最理想的结果,因为它通常会导致 CPU 为写入提供服务所产生的最低开销。如果 LLC 命中,CHA 只需更新 LLC 中的缓存行。对于完整的 cache line 事务,整个 cache 行将被新数据覆盖;对于部分缓存行事务,缓存行在 CHA 内合并。
虽然 LLC 命中是入站写入的最简单结果,但如果在其他缓存代理(例如内核或其他 CPU 插槽中的缓存)中也找到了数据的副本,则需要侦听作来使来自这些缓存代理的数据失效,以保持一致性。

还有Non-Allocating Inbound Writes非分配入站写入和IO LLC 方式写入

Inbound Reads入站读取

入站 I/O 读取事务也受益于 Intel® DDIO,因为它允许设备从系统缓存而不是系统内存中读取数据,从而减少延迟并节省内存需求。入站 I/O 读取请求本质上不会导致 LLC 分配。但是,他们必须遵循平台的一致性协议,该平台可能需要在窥探后将数据分配到 LLC 中。与入站写入请求一样,读取请求可能会命中或错过 LLC。

Inbound Reads LLC Hit 入站读取 LLC 命中

入站读取请求由 M2IOSF 发起,并针对由目标地址的哈希确定的特定 CHA。CHA 在 LLC 中查找数据,如果存在数据,则将完整的缓存行返回给请求者 M2IOSF。M2IOSF 不保留 cache 行的副本,因此不需要更新 snoop 过滤器。

Inbound Read LLC Miss 入站读取 LLC 未命中

如果 CHA 在 LLC 中找不到请求的数据,则必须在系统中的其他位置找到这些数据。这可以是内核的本地缓存,也可以是另一个套接字中的缓存,或者是系统内存。CHA 查找 snoop 过滤器以确定数据是否在另一个内核的缓存中可用,并读取内存以确定它是否存在于另一个套接字中。默认情况下,如果数据是从内存中读取的,则不会将其缓存在 LLC 中。

事件

当 CHA 单元收到来自代理(如核心或 I/O 设备)的请求时,它会将该请求放入其请求队列中,称为“请求表”(TOR)。与此 TOR 关联的一组事件提供有关该请求的信息,例如请求来自哪种类型的代理、请求类型以及缓存是否满足请求(缓存命中)或未满足(缓存未命中)。这些事件是 UNC_TOR_INSERTS 事件。

术语

  • TOR: “table of requests” (TOR)

  • LLC:last-level cache (LLC) : CPU的最后一级缓存

  • CHA:Caching and Home Agent: 缓存主代理

  • M2IOSF:Mesh to I/O Scalable Fabric: mesh到io的可扩展网络。 核心是F是网络,M2IO表明方向。 这里的Mesh指的是网卡互联的这个mesh

  • MESIF 是一种一致性协议。在 Intel 架构中,当涉及到缓存一致性操作时会用到该协议。
    在这里插入图片描述

  • inbound和outbound: 是指入队和出队。“inbound” 是指发送到 CPU(也称为上游)的 I/O 设备发起的请求,而“outbound”是指 CPU 发起发送到 I/O 设备(也称为下游)的请求。为什么叫bound?表示“界限”或“边界”。在计算机领域,尤其是与I/O(输入/输出)操作相关的语境中,“bound”通常用来描述数据传输的方向,强调数据是从一个“边界”(如CPU)流向另一个“边界”(如I/O设备)。这个请求就像是被绑定了方向一样,是从 I/O 设备这个方向朝着 CPU 这个方向去的,就好像被一种方向的界限给束缚住了,所以用 “bound” 来形容它这种有明确方向性(从外向内,即从 I/O 设备向 CPU)的特点。

  • IIO:Integrated I/O unit:集成IO单元。由多个inbound and outbound traffic 控制器组成,主要用于queueing requests,缓存request。是把PCIe的请求转为IRP请求互转的。

  • IRP:IO to Ring Port unit: IO到ring port单元。有时称为缓存跟踪器,负责将 IIO 请求(来自 PCIe/CXL 或集成加速器代理)转换为网格请求,反之亦然。IRP 包含用于加速入站写入请求的本地写入缓存。此缓存不应与处理器 L1、L2 缓存或 CHA LLC 混淆,并且可以将其视为临时写入缓冲区。IRP PMU 提供每个 M2IOSF 分辨率,而不是像 IIO 那样按设备提供。

  • M2PCIE:Mesh 到 PCI Express 单元,桥接 Mesh 和 IRP。

CPU
last-level cache (LLC)
CPU的最后一级缓存
CHA Caching and Home Agent:
缓存和主代理
IIO:Integrated I/O unit:集成IO单元
多个inbound and outbound traffic 控制器

入栈栈方式:

其他关键信息

  • intel 志强系列
英特尔至强(Xeon®)处理器从1998年发展至今,经历了多个世代
2017 年推出第一代英特尔至强可扩展处理器(代号为 Skylake - SP),采用全新的 Mesh 网格式架构设计。
2018 年推出的第二代智能英特尔至强处理器(代号为 Cascade Lake),是在 Skylake - SP 基础上增强,新增支持傲腾 DC 一致性内存等。
2021 年推出的第三代英特尔至强处理器(代号为 Ice Lake - SP 或 Copper Lake),支持下一代机器学习加速、BFloat16 指令等。
2023 年推出第四代英特尔至强可扩展处理器(代号为 Sapphire Rapids,简称 SPR),采用全新架构,每路配备多达 60 个内核,内置加速器提升性能。
20231214 日发布第五代英特尔至强处理器(代号为 Emerald Rapids),引入全新的能效核(E - core)架构。
202464 日:在台北国际电脑展上,英特尔推出了至强 6 处理器的能效核(E - core)版本,代号为 “Sierra Forest”。该版本采用了新的制程工艺,具有更高的机架密度、更多的内核数量,碳排放量大幅减少,能源效率得到提升。

参考:
https://www.intel.com/content/www/us/en/developer/articles/technical/ddio-analysis-performance-monitoring.html

<think>嗯,用户遇到了Keil编译时的L210 I/O错误,提示找不到RTX51.LIB文件。我需要先理解这个错误的常见原因。根据提供的引用信息,类似的问题通常是由于缺少必要的库文件,比如c51fps.lib或者RTX51.LIB,或者文件路径不正确导致的。 首先,我应该检查文件是否真的存在于指定的路径。用户提到的路径是C:\KEIL\C51\LIB\RTX51.LIB,可能Keil安装不完整,或者库文件被误删。这时候需要确认文件是否存在,如果不存在,可能需要重新安装Keil或者单独下载缺失的库文件。 然后,引用中提到的解决方法包括下载缺失的库文件并放到正确的目录下。比如c51fps.lib的问题,用户需要找到该文件并复制到LIB文件夹。同样,RTX51.LIB的问题可能类似,需要确保库文件存在。另外,还要检查库文件的名称是否正确,是否有拼写错误,比如大小写或者后缀名的问题。 接下来,考虑项目配置是否正确。用户可能在项目设置中错误地引用了不存在的库文件,或者选择了不正确的目标设备。比如,如果项目需要使用RTX51实时操作系统,但安装的Keil版本没有包含这个库,或者许可证问题导致某些组件未安装。这时候需要检查目标设备的选项,确认是否需要使用RTX51,或者是否有其他配置错误。 另外,路径权限的问题也可能导致这个错误。如果Keil的安装目录在系统保护区域(如Program Files),可能需要以管理员权限运行Keil,或者将项目移到其他目录下。还有,环境变量或者Keil的路径设置是否有误,需要检查IDE中的路径配置是否正确。 用户可能已经尝试过重新编译,但问题依旧。所以需要逐步排查:确认库文件存在,检查项目配置,确保路径正确,权限足够。如果这些步骤都做了还是不行,可能需要重新安装Keil或者联系技术支持。 最后,生成相关问题时要覆盖常见可能,比如如何安装库文件、配置项目、路径权限等,帮助用户全面解决问题。</think>针对Keil编译时出现的`L210 I/O error: PATH OR FILE NOT FOUND`问题,以下是分步解决方案: --- ### **问题原因** 该错误表示编译器在链接阶段找不到指定文件(如`RTX51.LIB`或`c51fps.lib`),可能由以下原因导致: 1. **文件缺失**:目标库文件未正确安装或被删除[^2][^3][^4]。 2. **路径配置错误**:编译器未配置正确的库文件路径[^1]。 3. **项目设置问题**:目标设备选择错误或未启用相关库支持[^4]。 --- ### **解决步骤** #### 1. **确认库文件是否存在** - 检查`C:\KEIL\C51\LIB\`目录下是否包含所需文件(如`RTX51.LIB`或`c51fps.lib`)。 - 若文件缺失: 1. 从Keil官网下载对应库文件(如[c51fps.lib下载](https://www.keil.com/ddio/))。 2. 手动复制文件到`C:\KEIL\C51\LIB\`目录[^3]。 #### 2. **验证项目配置** - 打开Keil项目后,依次点击: ``` Project > Options for Target > Device ``` 确认选择的芯片型号与目标设备匹配。 - 在`Target > Code Generation`中检查是否勾选了`Use MicroLIB`(若依赖浮点运算需取消勾选)[^4]。 #### 3. **检查文件路径权限** - 若Keil安装在系统目录(如`C:\Program Files`),需以管理员权限运行Keil。 - 尝试将项目移动到非系统目录(如`D:\Projects`)[^4]。 #### 4. **重新安装Keil(终极方案)** 若上述步骤无效: 1. 卸载Keil并删除残留文件。 2. 重新安装时选择完整组件(包含`C51 Compiler`和`RTX51`库)[^1]。 --- ### **示例操作** ```plaintext 步骤示例:修复c51fps.lib缺失问题 1. 下载c51fps.lib文件。 2. 复制到C:\KEIL\C51\LIB\。 3. 重启Keil并重新编译项目。 ``` ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值