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
发布日期: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
四、它实际是怎么工作的
- 识别控制点:工具根据你给的数据流与需求,找出两个子系统之间所有"可以被调的控制点"。citation:11citation:26
- 写寄存器:调优的本质是给这些控制点写入特定寄存器值。
- 交给固件 + 重启 :工具并不直接改运行时状态,而是指示启动固件在下次启动时把值写进这些寄存器,然后触发系统重启。citation:11
- 封装成 capsule :DSO 通过更新启动固件中特定区域(subregions )来改变系统配置,承载这个配置的二进制叫 capsule。工具对调配置签名并包成 capsule,再下发到目标机应用。citation:3citation:4
- 跑验证脚本 → 迭代 :应用配置后,工具运行你的 workload validation script 。脚本跑测试负载并判定是否满足性能要求,返回 0(满足)/ 1(不满足)。不满足就换下一组配置,如此自动迭代,直到满足或再无可用配置。citation:3citation:5
- 产出配置文件 :满足后,工具生成 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)
前提:目标机是一台"与量产环境硬件、软件、应用完全一致"的非生产性机器(只是不接真实机械、接口用模拟)。
- 确认 BIOS/SBL 中 Data Streams Optimizer 选项为 Enabled(禁用时 BIOS 不会把调优配置写进寄存器,工具不可用)。citation:8citation:27
- 准备四个输入:test workload、workload validation script、requirements file、environment file。
- 在**主机(host)**上运行 DSO,后续全自动:
- 依 requirements 找到调优配置 → 用 subregion capsule tool 签名并封装成 capsule;
- 经 SSH 把 capsule 传到目标机;
- 目标机用 fwupdate 应用 capsule → 重启 → 配置生效;
- 运行验证脚本,成功则生成 tuning configuration file;失败则换配置重来,直到满足或无配置可用。citation:3citation: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)
- 确认目标机 DSO 选项 Enabled;
- 取预生产阶段产出的 tuning configuration file;
- 以该文件为输入运行 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 验证脚本做什么
- 按命令行参数在目标机上运行 MRL;
- 把 MRL 得到的最大时延 与
--latency_us指定的需求值比较; - 最大时延 ≤ 需求 → 返回 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
八、落地前必须知道的坑
- 先看软件:DSO 的收益量级在 µs 级,软件抖动必须先压到这个量级以下才看得见效果。citation:19
- DSO 会覆盖 TCC Mode:两者重叠的设置以 DSO 为准;它会为平衡功耗把 TCC Mode 的某些设置改回去。citation:19
- 与 Software SRAM 并用时 :必须在 requirements file 中启用 SoftwareSRAM 兼容性选项,否则 DSO 可能应用与 RTCM/SSRAM 不兼容的电源管理配置。citation:3citation:9
- 与 Cache Allocation 并用前:先查阅两者兼容性说明,避免技术与性能问题。citation:3
- 安全 :DSO subregion capsule 必须签名以保证 subregion 数据完整性;若签名方与生产方不同,须建立可信关系以防供应链攻击。预生产实验期可用安装时生成的测试密钥。生产环境应启用 Intel® TCC Authentication(即便 BIOS 里禁用认证,capsule 仍需签名)。citation:4citation:10
- SSH 加固:禁用弱算法与弱套件(SHA1/SHA224/MD5、DES 系列、非 AES 对称算法),RSA ≥ 3k、AES ≥ 256 bit,保持 SSH 服务为最新。citation:4
- 版本生命周期 :2022.2 是最后一个支持 DSO 与 Cache Configurator 的版本,此后不再新增功能或新平台支持,仅按需发布维护性更新。新项目选型需留意。citation:12
九、来源
- 视频页(Intel 中国):https://www.intel.cn/content/www/cn/zh/developer/videos/time-coordinated-computing-data-streams-optimizer.html
- 视频页(Intel 全球,含发布日期 2022-06-29):https://www.intel.com/content/www/us/en/developer/videos/time-coordinated-computing-data-streams-optimizer.html
- Intel® TCC Tools Developer Guide:Developer Workflow Overview、Host-Target Reference Implementation、When to Use the Data Streams Optimizer、Data Streams Supported、Create a Requirements File、Create an Environment File、Generate Requirements、Run the Preproduction Tool、Sample Demo: MMIO Reads、MRL Sample Workload、Data Streams Optimizer Setting
- Intel® Xeon® W-11000E Series Processors Real-Time Tuning Guide(平台调优策略与 Fabric 调优)
- Intel® TCC Tools 2022.2.0 Release Notes(版本生命周期)