Intel_TCC_数据流优化器DSO_视频内容整理

Real-Time Fine Tuning with Intel® Time Coordinated Computing Tools:Data Streams Optimizer

整理对象:Intel 官方视频 Real-Time Fine Tuning with Intel® --- Time Coordinated Computing Tools Data Streams Optimizer

视频页:https://www.intel.cn/content/www/cn/zh/developer/videos/time-coordinated-computing-data-streams-optimizer.html

发布日期:2022-06-29

说明:Intel 视频页仅提供简介、未提供字幕/讲稿。本文以官方简介为纲("是什么 / 为什么用、何时用 / 工作原理 / 走一遍示例"),内容依据 Intel® TCC Tools Developer Guide 中与该视频同源的 MMIO Reads 示例与 DSO 章节补全,文末附来源。


一、视频主线(官方简介原文要点)

  • 讲清 Data Streams Optimizer(DSO,数据流优化器)是什么;
  • 讲清为什么用、什么时候用;
  • 实际演示它是怎么工作的;
  • 走一遍随软件包一起提供的 MMIO Reads 示例。

官方对该特性的定位一句话概括:通过迭代式自动调优,在优化实时系统数据传输时延的同时,平衡系统功耗或其他要求。citation:2


二、DSO 是什么

DSO 是 Intel® TCC Tools 中的命令行调优工具,聚焦调优 I/O 互连结构(I/O fabric),提升两个处理器子系统之间的数据传输效率。

  • 本版本中"处理器子系统"指三类:内存(Memory)、处理器核(Core)、PCIe 端点(PCIe endpoint)。
  • 你只需给出需求(如时延 latency、每次传输字节数 bytes per transfer),工具负责找出并配置满足需求的方案。
  • 典型用例:数据包需要在接在 PCIe 口的以太网控制器与系统内存之间搬运时,DSO 优化这条路径上的时延。citation:11citation:26
  • 它同时会改变系统电源管理行为:要求严苛时削减电源管理以换时延;要求宽松时反向增加电源管理以省电。citation:19

三、为什么用 / 什么时候用

3.1 实时调优分四层,DSO 在最底层

Intel 的调优策略由高到低分为四类,越靠右越复杂、对并发负载的副作用越大,但能解锁更好的实时性能:

调优类别 开箱即用(BSP + TCC Mode) 进阶(DSO)
系统软件调优 ✅ ❌(DSO 不管,见 Real-Time Tuning Guide)
电源管理调优 ✅ ✅
Intel TCC 特性调优 ✅ ✅
Fabric(互连结构)调优 ❌ ✅ 唯一入口

使用顺序:先做影响最大的(系统软件),逐层向下,直到满足需求为止。

也就是说,正确的入场时机是:你已经用了带实时优化的 BSP + BIOS 里开了 Intel® TCC Mode 这套开箱配置,软件抖动已压到很小,但负载仍然违反时序要求------这时才上 DSO。citation:19

3.2 收益量级(决定值不值得做)

对于周期时间 < 250 µs、在 PCIe 端点与处理器核或内存之间做单次数据搬运的负载,数据搬运性能的改善幅度大约在 20 µs → 2 µs 这个区间。

关键前提:只有当你的软件已经高度调优、软件抖动小于 DSO 能带来的这 20 µs 量级改善时,这个收益才看得见。 否则瓶颈在软件,DSO 白做。citation:19

3.3 DSO 与 TCC Mode 的关系(重要)

DSO 可能会改动 TCC Mode 已经配好的选项------为达成需求指定的功耗/性能平衡,它可能把某些"提升实时性能"的设置改回"更省电"的设置。TCC Mode 追求的是最大性能;若你有功耗与散热约束,DSO 可以只调整 TCC Mode 中的一项、几项或全部,以时延性能换取功耗。citation:19

3.4 Fabric 调优是什么

Fabric 指承载处理器内部各功能部件之间片上通信的互连技术。Fabric 调优包括对 fabric 中功能部件的微架构级优化:优先级(prioritization)、仲裁(arbitration)、流控(flow control)。

例如:DSO 可以配置 fabric 内部仲裁器的优先级权重,让一类流量优先于另一类。实施成本与性能折损高、相对收益小,但只有在完成前三层调优之后再动它,才能拿到最好的实时性能。citation:28


四、它实际是怎么工作的

  1. 识别控制点:工具根据你给的数据流与需求,找出两个子系统之间所有"可以被调的控制点"。citation:11citation:26
  2. 写寄存器:调优的本质是给这些控制点写入特定寄存器值。
  3. 交给固件 + 重启 :工具并不直接改运行时状态,而是指示启动固件在下次启动时把值写进这些寄存器,然后触发系统重启。citation:11
  4. 封装成 capsule :DSO 通过更新启动固件中特定区域(subregions )来改变系统配置,承载这个配置的二进制叫 capsule。工具对调配置签名并包成 capsule,再下发到目标机应用。citation:3citation:4
  5. 跑验证脚本 → 迭代 :应用配置后,工具运行你的 workload validation script 。脚本跑测试负载并判定是否满足性能要求,返回 0(满足)/ 1(不满足)。不满足就换下一组配置,如此自动迭代,直到满足或再无可用配置。citation:3citation:5
  6. 产出配置文件 :满足后,工具生成 tuning configuration file,用于把这套配置克隆到量产机器。

注意:工具不能给出寄存器级的配置描述(部分寄存器是专有的),而是以"消息"形式描述该配置影响了哪些功能组件,例如"禁用 C states""提升 PCIe 与内存之间流量的优先级"等。citation:3

4.1 支持的数据流(Data Streams)

数据流 含义 时延定义 / 备注
PCIe from Memory(读) PCIe 端点向内存发读请求,取回数据后返回 completion 从 PCIe 链路上发出读请求 → 到带数据的 completion 发回 PCIe 链路
PCIe to Memory(写) PCIe 端点发出带数据的 posted write 到内存 估算为 PCIe-from-Memory 时延的 1/2
Core from PCIe(MMIO 读) 核向 PCIe 端点 MMIO 地址空间发起读请求并取回数据 从核执行 MMIO load → 到收到 completion。受端点 turnaround time 影响,需把它计入预算
Core from PCIe(PCIe MSI) PCIe 端点产生 MSI,由核的 ISR 处理 从中断触发 → 到端点被告知 ISR 执行完毕(MSI 泛指 MSI 与 MSI-X)
Core to PCIe(MMIO 写) 核向 PCIe 端点 MMIO 地址空间发起 posted write 估算为 Core-from-PCIe(MMIO 读)时延的 1/2

一个 requirements 文件里可以指定一条或多条数据流。citation:25citation:29


五、四个输入:你必须准备什么

在预生产阶段,工具需要两样应用 + 两个文件:citation:3

输入 作用
Test workload(测试负载) 你的实时应用,或能验证时延/功耗等不同侧面的应用组合
Workload validation script(负载验证脚本) 跑测试负载并判定需求是否满足;返回 0 = 满足,非 0 = 不满足
Requirements file(JSON) 数据流的时延、每次传输字节数等需求,工具据此选择调优配置
Environment file(JSON) 自动化工作流所需环境信息(目标机连接、capsule 生成/下发脚本、重启命令等)

5.1 Requirements 文件结构

两大段:workload(告诉工具如何运行验证脚本)+ requirements(数据流需求列表)。

json 复制代码
{
  "workload": {
    "command": "python3 /usr/share/tcc_tools/tools/demo/workloads/bin/rtcp_validation_script.py",
    "arguments": ["--latency_us 100", "--ssh root@192.168.0.2",
                  "--pci_rtcp 0000:01:00.0", "--no-compute", "--cpuid 3"]
  },
  "requirements": [
    {
      "producer": "Memory",
      "consumer": "01:00.0",
      "traffic_class": 0,
      "latency_us": 4,
      "bytes_per_transfer": 64,
      "relative_priority": 0
    }
  ]
}

字段要点:producer / consumer(端点或核,用 BDF 或 CoreN 表示)、traffic_class、latency_us(最大可容忍时延)、bytes_per_transfer、relative_priority(多流时的相对优先级)。JSON 中的双引号、反斜杠需转义。citation:6

一个 requirements 文件只能有一个 workload 段,即一次运行只能调用一个验证脚本。

若 BSP 与工具同时使用,不建议把 Core 0 用作实时核(BSP 会把内核调度任务、低优先级中断等非实时服务卸载到 Core 0);若 producer/consumer 是 Core 0,性能可能反而更差。citation:6

5.2 需求值不知道怎么定?两条路

  • Option A(推荐起步):猜---测迭代法 。直接用 Intel 预置的时延/字节数取值作为起点(示例 requirements 文件里都有)。跑验证脚本,若失败,工具会自动逐级尝试对应更低时延 的配置,直到验证成功或无配置可用。bytes_per_transfer 可按 PCIe 规格对齐取值(4096/2048/1024/512/256/128/64 字节),也可以是 500、28000 等任意值。
  • Option B:拆解自己的负载,实测并计算每条流的时延需求(更准,但复杂耗时)。citation:9citation:16

若 DSO 已穷尽所有配置仍未达标,就别再指望硬件调优了,转向:用 Cache Allocation Library 优化计算开销、优化网络开销与软件开销、做隔离以限制干扰负载的影响。citation:9

5.3 Environment 文件

json 复制代码
{
  "targets": {
    "target_name_1": {
      "target_info": "...",
      "capsule_settings": {
        "capsule_generate_script": "bash ./host_scripts/capsule_create_uefi.sh",
        "capsule_apply_script":    "bash ./host_scripts/capsule_upload_apply_uefi.sh",
        "target_capsules_path":    "/tmp/"
      },
      "scripts": {
        "register_verification": "bash ./host_scripts/target_runner.sh python3 .../registers_checker.py",
        "bdf": "bash ./host_scripts/target_runner.sh python3 .../bdf_converter.py",
        "processor_checker": "bash ./host_scripts/target_runner.sh python3 .../processor_checker.py",
        "rtct_reader": "bash ./host_scripts/target_runner.sh python3 .../rtct_reader.py",
        "reboot_command": "bash ./host_scripts/target_reboot.sh"
      }
    }
  }
}

参考实现用脚本支持 UEFI BIOS 与 Slim Bootloader;用其他 bootloader(如 coreboot*)可复制并改写这两个 capsule 脚本。citation:10


六、两阶段工作流

6.1 预生产阶段(Preproduction)

前提:目标机是一台"与量产环境硬件、软件、应用完全一致"的非生产性机器(只是不接真实机械、接口用模拟)。

  1. 确认 BIOS/SBL 中 Data Streams Optimizer 选项为 Enabled(禁用时 BIOS 不会把调优配置写进寄存器,工具不可用)。citation:8citation:27
  2. 准备四个输入:test workload、workload validation script、requirements file、environment file。
  3. 在**主机(host)**上运行 DSO,后续全自动:
    • 依 requirements 找到调优配置 → 用 subregion capsule tool 签名并封装成 capsule;
    • 经 SSH 把 capsule 传到目标机;
    • 目标机用 fwupdate 应用 capsule → 重启 → 配置生效;
    • 运行验证脚本,成功则生成 tuning configuration file;失败则换配置重来,直到满足或无配置可用。citation:3citation:4
  4. 产出:tuning configuration file(用于克隆到量产)。

主要命令:citation:13

bash 复制代码
# 搜索并应用一套满足需求的调优配置(主用例)
python3 tcc_data_streams_optimizer_preprod.py search \
  -e ./demo/environment/sample_environment_uefi.json \
  -r ./demo/requirements/single_pciememrd_1.json \
  -o <output_file>

# 把已有配置应用到另一台目标机
python3 tcc_data_streams_optimizer_preprod.py set -e <env>.json --apply <cfg>.tuning_configuration.json

# 校验某套配置是否确实已应用
python3 tcc_data_streams_optimizer_preprod.py set -e <env>.json --verify <cfg>.tuning_configuration.json

# 复位:把 DSO 调优恢复到初始状态(仅在曾成功找到配置后需要)
python3 tcc_data_streams_optimizer_preprod.py reset -e <env>.json

search 会生成 .recovery 文件,支持从崩溃 / Ctrl+C / 意外重启处续跑 ;设环境变量 DSO_SILENT 可跳过 yes/no 交互。citation:13

6.2 量产阶段(Production)

  1. 确认目标机 DSO 选项 Enabled;
  2. 取预生产阶段产出的 tuning configuration file;
  3. 以该文件为输入运行 DSO,工具生成 capsule → SSH 下发 → 应用 → 重启生效。
    与预生产不同:量产阶段不需要 subregion capsule tool,也不需要跑验证脚本。citation:3citation:4

6.3 主机 / 目标机组件划分

主机(Host) 目标机(Target)
预生产 requirements file、environment file、DSO、subregion capsule tool workload validation script、fwupdate、Yocto BSP OS、Reference BIOS
量产 tuning configuration file、DSO fwupdate、Yocto BSP OS、Reference BIOS

两者通过 SSH 连接。citation:4


七、视频演示的示例:MMIO Reads(MRL)

7.1 场景

高速运动控制应用:控制环的第一步是从 PCIe 工业以太网控制器(如 Intel® Ethernet Controller I225 或集成 TSN 控制器)读传感器数据,预算约 9 µs 让核开始控制环(含静态软件开销)。

你已经开了 BIOS 里的 Intel® TCC Mode ------它关掉了 BIOS 菜单中可见的电源管理特性,但 MMIO 读时延仍然超过 9 µs 。DSO 可以关掉额外的电源管理特性来改善 I/O 时延,于是你决定用它去够这 9 µs。citation:5

7.2 MRL 示例负载

MRL(MMIO Read Latency)模拟一个工业控制环的片段(输入 Rx / 计算 / 输出 Tx),专门测量"核多快能开始 Rx 段、从网卡读到传感器数据"。它跑的就是 core-from-PCIe(MMIO 读) 这条流。

  • 被测 PCIe 设备:集成 TSN 以太网控制器,或 Intel® Ethernet Controller I225(lspci 找 Ethernet controller: Intel Corporation Device 15f2)。
  • 运行前需允许用户态读 PMC:echo 2 > /sys/devices/cpu/rdpmc。
  • 二进制默认路径:/usr/share/tcc_tools/tools/demo/workloads/bin/mrl_userspace_app。citation:17citation:18

7.3 验证脚本做什么

  1. 按命令行参数在目标机上运行 MRL;
  2. 把 MRL 得到的最大时延 与 --latency_us 指定的需求值比较;
  3. 最大时延 ≤ 需求 → 返回 0(成功);否则返回非 0。citation:5

7.4 Requirements 文件示例(MMIO 读,9 µs)

json 复制代码
{
  "workload": {
    "command": "bash ./host_scripts/target_runner.sh python3 /usr/share/tcc_tools/tools/demo/workloads/bin/mrl_validation_script.py",
    "arguments": ["--device TSN", "--iterations 10000000", "--latency_us 9", "--core 3"]
  },
  "requirements": [
    {
      "producer": "00:1e.4",
      "traffic_class": 0,
      "consumer": "Core3",
      "latency_us": 9,
      "bytes_per_transfer": 4,
      "relative_priority": 0
    }
  ]
}

(--device 需与实际 PCIe 设备匹配,如 TSN 或 I225;可用 lspci | grep -E 'Ethernet controller: Intel Corporation' 确认。)citation:5citation:7

7.5 演示四步

步骤 内容
Step 1 MRL Setup:接好硬件,确认目标机跑的是实时内核
Step 2 Run MRL on Untuned System :在未调优系统上运行 MRL,拿到基线时延
Step 3 Preproduction: Generate a Tuning Config :用 DSO 预生产流程生成满足 9 µs 的配置(示例文件:single_corepcierd_1.json 等)
Step 4 Production: Apply Tuning Configuration:把配置应用到量产目标机

该演示不测功耗;功耗需用 TCC Tools 之外的工具测,例如 Intel® SoC Watch(随 VTune™ Profiler 提供)。citation:5


八、落地前必须知道的坑

  1. 先看软件:DSO 的收益量级在 µs 级,软件抖动必须先压到这个量级以下才看得见效果。citation:19
  2. DSO 会覆盖 TCC Mode:两者重叠的设置以 DSO 为准;它会为平衡功耗把 TCC Mode 的某些设置改回去。citation:19
  3. 与 Software SRAM 并用时 :必须在 requirements file 中启用 SoftwareSRAM 兼容性选项,否则 DSO 可能应用与 RTCM/SSRAM 不兼容的电源管理配置。citation:3citation:9
  4. 与 Cache Allocation 并用前:先查阅两者兼容性说明,避免技术与性能问题。citation:3
  5. 安全 :DSO subregion capsule 必须签名以保证 subregion 数据完整性;若签名方与生产方不同,须建立可信关系以防供应链攻击。预生产实验期可用安装时生成的测试密钥。生产环境应启用 Intel® TCC Authentication(即便 BIOS 里禁用认证,capsule 仍需签名)。citation:4citation:10
  6. SSH 加固:禁用弱算法与弱套件(SHA1/SHA224/MD5、DES 系列、非 AES 对称算法),RSA ≥ 3k、AES ≥ 256 bit,保持 SSH 服务为最新。citation:4
  7. 版本生命周期 :2022.2 是最后一个支持 DSO 与 Cache Configurator 的版本,此后不再新增功能或新平台支持,仅按需发布维护性更新。新项目选型需留意。citation:12

九、来源

相关推荐
Logic10118 小时前
如何分辨Intel CPU的好坏?
cpu·intel·电脑配置·i5·i7·i9·i3
阿源-1 个月前
PCI 总线协议解析
嵌入式·x86·固件
Felven2 个月前
Intel Core Ultra X9 388H全面性能对比分析报告
cpu·gpu·intel·性能对比·amd
Summer-Bright2 个月前
深度 | Hot Chips 2026 英特尔三响炮:256 核 Xeon、480GB 推理 GPU,赌 agentic 让 CPU 回归
人工智能·数据挖掘·回归·intel·hotchip
Cerman2 个月前
Intel TCC模式下TSC与ART确定性线性关系设计原理
x86·intel·时钟同步·tsc·tcc·art
liulilittle3 个月前
[OPENPPP2] ssea 算法详解(中文)
算法·x86·x64·simd·openppp2·ssea·base94
秉承初心3 个月前
CPU架构深度对比:x86 vs ARM 异同、优劣与全场景市场分析
arm·x86·cpu架构
南部余额4 个月前
Seata分布式事务解决方案
seata·at·xa·saga·tcc
shanql5 个月前
计组笔记:x86、ARM、RISC-V体系结构下对字的位数规定
x86