CANN Runtime 中 mstx 打点与 domain 过滤实践:基于 3_mstx_with_domain 样例的默认/自定义 domain 与 msprof 采集控制
CANNAscend人工智能任务调度【免费下载链接】runtime本项目提供CANN运行时组件和维测功能组件。项目地址https://gitcode.com/cann/runtime点击查看免费下载本篇文章围绕 CANN runtime 开源仓库中的example/5_performance/profiling/3_mstx_with_domain样例展开系统讲解如何在算子执行流程中使用 MindStudio Tools Extension LibrarymsTX接口在默认 domain 与自定义 domain 中分别完成瞬时事件Mark与范围事件Range打点并通过 msprof 的--mstx-domain-include/--mstx-domain-exclude参数按 domain 精确控制采集范围。读完本文后你将掌握 mstx domain 的创建、打点、销毁的完整生命周期管理方法以及 domain 级采集过滤的实战命令从而在性能分析中把自定义业务阶段精确映射到 Profiling 时间线。样例概述mstx 在默认 domain 与自定义 domain 中的打点3_mstx_with_domain是 Profiling 性能分析方向的进阶样例其核心目的是演示 msTX 接口在默认 domain与自定义 domain两种场景下的打点方式。样例以aclnnAdd向量加法算子为计算载体在执行流程的各个关键节点插入 mstx 打点运行完成后可用 msprof 按 domain 有选择地采集这些打点数据。样例整体结构如下example/5_performance/profiling/3_mstx_with_domain/ ├── common/ │ ├── util_acl.h # aclInit/Context/Stream 初始化与释放的通用封装 │ └── util_mstx.h # ACL_CALL / CHECK_RET / LOG_PRINT 辅助宏 ├── CMakeLists.txt # 工程构建脚本链接 ascendcl、nnopbase、msprofiler、opapi 等库 ├── README.md # 样例使用说明本文讲解对象 ├── README_en.md # 英文版使用说明 ├── mstx_with_domain.cpp # 样例主程序源码 └── run.sh # 一键编译并运行脚本从源码结构看样例的运行链路为main→Init初始化 acl 资源→MstxDomainInit创建自定义 domain→TestMstxWithDomain默认 domain 打点 执行算子→DoAclAdd自定义 domain 打点 算子执行→MstxDomainDeInit销毁自定义 domain→DeInit释放 acl 资源。产品支持情况本样例支持以下产品README 声明产品是否支持Ascend 950PR/Ascend 950DT√Atlas A3 训练系列产品/Atlas A3 推理系列产品√Atlas A2 训练系列产品/Atlas A2 推理系列产品√需要说明的是样例 README 中的产品支持表仅列出当前样例已完成验证或已明确声明支持的产品参见 example/README.md 中的产品支持表说明未在表格中列出的产品不代表不支持若某产品明确不支持会以×标识。因此在实际使用前建议结合自身硬件型号与 CANN 版本确认 mstx 组件的可用性。环境准备与 msTX 依赖检查设置 CANN 环境变量编译运行样例前需要将样例代码放到已安装 CANN 软件的环境中并加载环境变量# ${install_root} 替换为 CANN 安装根目录默认安装在 /usr/local/Ascend 目录 source ${install_root}/cann/set_env.sh在example/README.md的环境准备章节中还额外要求设置ASCEND_INSTALL_PATHexport ASCEND_INSTALL_PATH${install_root}/cann此外本样例的run.sh脚本会直接读取ASCEND_HOME_PATH环境变量来定位 CANN 安装路径与 msTX 头文件因此建议一并设置export ASCEND_HOME_PATH${install_root}/cann这一点在 Profiling 系列的 1_msproftx 样例中也有明确说明run.sh还会读取ASCEND_HOME_PATH请一并设置为同一路径。检查 msTX 组件本样例依赖 CANN Toolkit 中的 MindStudio Tools Extension LibrarymsTX组件。执行以下命令检查当前环境是否存在样例所需的 msTX 头文件ls -l ${ASCEND_HOME_PATH}/include/mstx/ms_tools_ext.h若命令正常显示该文件信息表示当前环境已包含样例所需的 msTX 头文件可以继续编译运行。若命令提示文件不存在请按以下方式处理确认ASCEND_HOME_PATH指向 CANN Toolkit 的实际安装目录若当前环境未安装 msTX请选择与当前 CANN 软件版本配套的 msTX 版本并参见《msTX 安装指南》中的在线安装或离线安装章节完成安装若需要升级 msTX请参见《msTX 安装指南》中的升级章节。安装或升级完成后重新执行source ${install_root}/cann/set_env.sh加载 CANN 环境变量并再次执行上述检查确认头文件可通过${ASCEND_HOME_PATH}/include/mstx/ms_tools_ext.h访问。切换到样例目录并运行cd ${git_clone_path}/example/5_performance/profiling/3_mstx_with_domain bash run.shrun.sh内部完成的工作包括校验ASCEND_HOME_PATH是否设置、加载${ASCEND_HOME_PATH}/bin/setenv.bash、创建build目录并用 CMake 编译、最终运行可执行文件并将输出通过tee同时打印到终端和output_msg.txt文件源码见 run.sh。从 CMakeLists.txt 可以看到编译期的关键配置最低 CMake 版本要求为3.16.0通过ASCEND_HOME_PATH定位 CANN 头文件目录与lib64链接目录可执行文件mstx_with_domain链接了libascendcl.so、libnnopbase.so、libmsprofiler.so、libopapi.so、libc_sec.so以及dl其中libmsprofiler.so承载 msprof 采集能力。源码解析domain 生命周期与两类打点方式自定义 domain 的创建与销毁样例在程序启动后、执行主流程前创建自定义 domain程序结束时销毁。相关代码位于 mstx_with_domain.cppnamespace { aclrtContext context; aclrtStream stream; mstxDomainHandle_t domainRange; std::string g_domainRangeName DoAclAdd_Inner; ... void MstxDomainInit() { domainRange mstxDomainCreateA(g_domainRangeName.c_str()); } void MstxDomainDeInit() { mstxDomainDestroy(domainRange); } } // namespace int main(int argc, const char** argv) { int32_t deviceId 0; int ret Init(deviceId, context, stream); if (ret ! ACL_SUCCESS) { return ret; } MstxDomainInit(); ret TestMstxWithDomain(); MstxDomainDeInit(); auto deinitRet DeInit(deviceId, context, stream); return ret ! ACL_SUCCESS ? ret : deinitRet; }这里自定义 domain 的名称被定义为DoAclAdd_InnermstxDomainCreateA返回mstxDomainHandle_t类型句柄之后所有自定义 domain 打点接口都要以该句柄作为第一个入参。main中的执行顺序为先Init初始化 acl 资源再MstxDomainInit创建 domain执行TestMstxWithDomain最后MstxDomainDeInit销毁 domain 并DeInit释放资源体现了domain 句柄先创建、后使用、最后销毁的标准生命周期管理。Init/DeInit的 acl 资源初始化流程封装在 common/util_acl.h 中aclInit初始化系统资源、aclrtSetDevice设置 Device、aclrtCreateContext创建 Context、aclrtSetCurrentContext设为当前 Context、aclrtCreateStream创建 Stream释放时按相反顺序调用aclrtDestroyStream、aclrtDestroyContext、aclrtResetDevice、aclFinalize。默认 domain 打点mstxMarkA / mstxRangeStartA / mstxRangeEndTestMstxWithDomain演示了默认 domain 下的打点方式——不需要 domain 句柄直接调用以mstx为前缀的接口static int TestMstxWithDomain() { // range with default domain start uint64_t id mstxRangeStartA(TestMstxWithDomain, stream); ACL_CALL(aclrtSetCurrentContext(context)); // mark with default domain end mstxMarkA(DoAclAdd Start, stream); ACL_CALL(DoAclAdd(context, stream)); // range with default domain end mstxRangeEnd(id); return ACL_SUCCESS; }其中mstxRangeStartA(TestMstxWithDomain, stream)开启一个默认 domain 下的范围事件Range入参为描述字符串和关联 Stream返回uint64_t类型的范围 idmstxMarkA(DoAclAdd Start, stream)记录默认 domain 下的瞬时事件Mark用于标记某个时刻发生的业务动作mstxRangeEnd(id)用起始接口返回的 id 关闭对应的范围事件。整个TestMstxWithDomain函数体被一对 Range 包裹恰好覆盖切换 Context 触发算子执行这段业务逻辑可在时间线上直观看到该阶段的整体耗时。自定义 domain 打点mstxDomainMarkA / mstxDomainRangeStartA / mstxDomainRangeEndDoAclAdd内部演示了自定义 domain即DoAclAdd_Inner下的打点所有接口均以mstxDomain为前缀且第一个入参是mstxDomainCreateA返回的句柄int DoAclAdd(aclrtContext context, aclrtStream stream) { ... ACL_CALL(CreateAclTensor(selfHostData, selfShape, selfDeviceAddr, aclDataType::ACL_FLOAT, self)); ACL_CALL(CreateAclTensor(otherHostData, otherShape, otherDeviceAddr, aclDataType::ACL_FLOAT, other)); // mark with DoAclAdd_Inner domain mstxDomainMarkA(domainRange, Create alpha aclScalar, stream); alpha aclCreateScalar(alphaValue, aclDataType::ACL_FLOAT); ... ACL_CALL(aclnnAddGetWorkspaceSize(self, other, alpha, out, workspaceSize, executor)); ... ACL_CALL(aclnnAdd(workspaceAddr, workspaceSize, executor, stream)); // range with DoAclAdd_Inner domain start uint64_t id mstxDomainRangeStartA(domainRange, After aclnnAdd, stream); ACL_CALL(aclrtSynchronizeStream(stream)); ... // 拷贝结果并打印 // range with DoAclAdd_Inner domain end mstxDomainRangeEnd(domainRange, id); return ret; }自定义 domain 打点与默认 domain 的关键区别在于多一个 domain 句柄参数mstxDomainMarkA(domainRange, message, stream)记录瞬时事件mstxDomainRangeStartA(domainRange, message, stream)返回范围 idmstxDomainRangeEnd(domainRange, id)结束范围。由于这些打点归属于名为DoAclAdd_Inner的独立 domain后续采集时就可以通过 domain 过滤机制把它们与其他打点区分开。msprof 采集按 domain 精确控制采集范围样例运行本身不依赖 msprof但若要采集 mstx 打点数据需在运行命令前叠加 msprof 采集前缀。README 提供了三种典型场景# 采集所有打点数据包括默认 domain 和自定义 domain msprof --msproftxon bash run.sh # 只采集 default domain 的打点数据 msprof --msproftxon --mstx-domain-includedefault bash run.sh # 采集 default domain 之外的打点数据 msprof --msproftxon --mstx-domain-excludedefault bash run.sh参数使用要点--msproftxon开启 msproftx/mstx 打点数据的采集是采集 mstx 数据的前置开关--mstx-domain-include只采集指定 domain 的打点数据未被列出的 domain 不采集--mstx-domain-exclude采集除指定 domain 之外的打点数据--mstx-domain-include与--mstx-domain-exclude互斥不可同时配置如需指定多个 domain使用逗号隔开例如--mstx-domain-includedefault,DoAclAdd_Inner。对照本样例的打点分布可以直观理解过滤效果过滤参数采集到的内容不加 domain 参数默认 domain 的mstxRangeStartA/mstxMarkA/mstxRangeEnd与自定义 domainDoAclAdd_Inner的全部打点--mstx-domain-includedefault仅TestMstxWithDomain中的mstxMarkA(DoAclAdd Start)、mstxRangeStartA(TestMstxWithDomain)及其 Range 范围--mstx-domain-excludedefault仅DoAclAdd中DoAclAdd_Inner域下的mstxDomainMarkA(Create alpha aclScalar)、mstxDomainRangeStartA(After aclnnAdd)及其 Range 范围这种按 domain 过滤的能力非常适合将框架侧打点与业务侧打点分离采集业务代码可以把自身逻辑放在独立 domain 中分析时通过 include/exclude 只关注自己关心的那部分时间线避免被其他 domain 的标记干扰。采集产物的解析与字段解读msprof 采集完成后会生成 Profiling 原始数据目录。根据 profiling_artifact_analysis.md 的说明结果目录由采集方式和路径配置优先级决定使用msprof命令时--output指定存放目录未指定--output且设置了ASCEND_WORK_PATH时结果目录为ASCEND_WORK_PATH/profiling_data通过msprof [msprof arguments] app [app arguments]启动应用且均未配置时结果保存在当前目录。解析与导出命令如下# 解析原始采集数据 msprof --parseon --outputprofiling_result_dir # 导出文本csv/json summary msprof --exporton --outputprofiling_result_dir --summary-formatcsv --typetext msprof --exporton --outputprofiling_result_dir --summary-formatjson --typetext # 导出数据库文件 msprof --exporton --outputprofiling_result_dir --typedb与本样例强相关的导出字段有两个msproftx messageaclprofMark、aclprofPush、aclprofRangeStart或mstx 标记携带的描述用于把应用自定义阶段映射到性能时间线Domainmstx domain 名称用于按 domain 过滤或归类应用自定义打点。也就是说样例中传入 mstx 接口的字符串描述如DoAclAdd Start、After aclnnAdd最终会以msproftx message形式出现在导出结果中而default与DoAclAdd_Inner会作为Domain字段值出现。分析时建议先确认打点消息是否出现在导出结果中再按消息对应的业务阶段分析耗时参见 profiling_artifact_analysis.md 的分析建议章节。示例输出与结果验证编译运行成功后终端以及output_msg.txt文件会输出类似如下的内容[INFO]: AscendHome is set to ... ... result[0] is: 1.200000 result[1] is: 2.200000 result[2] is: 3.200000 result[3] is: 5.400000 result[4] is: 6.400000 result[5] is: 7.400000 result[6] is: 9.600000 result[7] is: 10.600000这些result[i]对应selfHostData {0,1,2,3,4,5,6,7}与otherHostData {1,1,1,2,2,2,3,3}按alpha 1.2f执行alpha * self other的计算结果例如1.2 * 1 1 2.2、1.2 * 5 3 9.0附近的数值符合预期实际输出以运行环境为准说明算子执行与打点流程均正常结束。随后即可按上文 msprof 命令叠加采集并在导出产物中检索Domain与msproftx message字段验证默认 domain 与自定义 domain 的打点是否按预期分别采集。小结3_mstx_with_domain样例完整覆盖了 msTX 组件在 CANN Runtime 场景中的核心用法domain 生命周期mstxDomainCreateA创建自定义 domain 句柄mstxDomainDestroy销毁两者严格包住打点区间两种打点范式默认 domain 使用mstxMarkA/mstxRangeStartA/mstxRangeEnd自定义 domain 使用mstxDomainMarkA/mstxDomainRangeStartA/mstxDomainRangeEnd需携带 domain 句柄分别记录瞬时事件与范围事件domain 级采集过滤通过msprof --msproftxon叠加--mstx-domain-include/--mstx-domain-exclude互斥、逗号分隔多值实现按 domain 精确采集。掌握这些能力后你可以在自己的算子或训练推理程序中以最小侵入方式埋入业务阶段标记再结合 domain 过滤与 Profiling 产物解读 中的解析导出流程将性能瓶颈定位到具体的业务阶段为性能调优提供精确的时间线依据。赞分享CANNAscend人工智能任务调度【免费下载链接】runtime本项目提供CANN运行时组件和维测功能组件。项目地址https://gitcode.com/cann/runtime点击查看免费下载相关推荐CANN oam-tools 中 mstx API 使用示例为应用添加自定义耗时打点并借助 msprof 采集CANN oam tools 中 mstx API 使用示例为应用添加自定义耗时打点并借助 msprof 采集 导读 mstx API 是 CANN 提供给开运维性能剖析根因分析人工智能AscendFirecracker 中的 Seccomp默认过滤器的加载机制与自定义过滤器实战Firecracker 中的 Seccomp默认过滤器的加载机制与自定义过滤器实战 Seccompsecure computing mode是 Firec虚拟化云原生librealsense 与 PCL 集成实战基于 rs-pcl 示例实现 RealSense 深度点云采集与 PassThrough 过滤librealsense 与 PCL 集成实战基于 rs pcl 示例实现 RealSense 深度点云采集与 PassThrough 过滤 导读 本文以 l智能硬件音视频计算机视觉创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

相关新闻

CC-Switch 接入 Kimi For Coding 配置指南:从环境对齐到多供应商切换

CC-Switch 接入 Kimi For Coding 配置指南:从环境对齐到多供应商切换

1. 为什么要在 CC-Switch 里接 Kimi For Coding先把场景说清楚。CC-Switch 本质上是一个模型供应商切换器,它把 Claude Code 这类命令行编程助手的请求转发到不同的后端模型服务上。默认情况下,Claude Code 走的是官方通道,但很多人手里有 Ki…

2026/9/19 22:45:15 阅读更多 →
App测试规范化:从经验驱动到可执行决策树

App测试规范化:从经验驱动到可执行决策树

简介:本资源是一份面向移动测试工程师、质量保障从业者及App开发初学者的《APP测试规范化》实操指南,聚焦互联网行业App质量保障核心场景,系统梳理测试全流程标准化方法。文档涵盖App测试定义与价值、主流黑盒/白盒/灰盒等测试方法、15个工作…

2026/9/21 0:50:18 阅读更多 →
用Python+Excel自动化生成IT部门月报PPT的实战指南

用Python+Excel自动化生成IT部门月报PPT的实战指南

简介:这是一份面向IT运维工程师及IT部门员工的个人月度工作报告PPT模板,帮助用户解决月报结构混乱、重点不突出的问题。资源包含1个pptx文件,整体约6.82MB,页面设计完整,可直接编辑使用。模板内设工作总结、技术挑战与…

2026/9/21 0:48:42 阅读更多 →

最新新闻

RV1126平台JD9366触摸屏驱动移植实战指南

RV1126平台JD9366触摸屏驱动移植实战指南

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/9/21 2:03:06 阅读更多 →
ESP32-C3+MPU6050 DIY无线空中鼠标:BLE HID姿态解算实战

ESP32-C3+MPU6050 DIY无线空中鼠标:BLE HID姿态解算实战

1. 项目概述与核心思路拆解1.1 这个项目到底在做什么把一块 MPU6050 六轴传感器绑在手指或者手背上,通过 ESP32-C3 读取姿态数据,再用 BLE 把数据发给电脑或手机,让设备把姿态变化识别成鼠标移动和点击——这就是这个 DIY 无线鼠标项目的全部…

2026/9/21 2:03:06 阅读更多 →
CGMA管理会计能力框架:财务人职业成长与数字化转型的导航图

CGMA管理会计能力框架:财务人职业成长与数字化转型的导航图

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/9/21 2:03:06 阅读更多 →
小米游戏鼠标驱动下载与安装深度指南

小米游戏鼠标驱动下载与安装深度指南

1. 项目概述:为什么一个“驱动软件下载”值得单独写一篇深度指南?小米游戏鼠标——驱动软件下载,这八个字看起来平平无奇,甚至有点像搜索引擎里随手点进来的广告跳转页。但作为连续三年深度参与小米生态链外设产品测试、亲手拆解过…

2026/9/21 2:03:06 阅读更多 →
GaussView5入门实战:从分子建模到红外光谱计算全攻略

GaussView5入门实战:从分子建模到红外光谱计算全攻略

简介:《GaussView5基础教程》PDF文档面向量子化学计算新手与分子模拟初学者,定位为GaussView5与Gaussian联用的入门操作指南。教程先介绍软件界面:选择窗口、绘图窗口、菜单栏各项功能,以及快速工具栏中元素周期表、环工具、R基团…

2026/9/21 2:03:06 阅读更多 →
逆向必学:PE文件结构核心字段与加壳脱壳实战解析

逆向必学:PE文件结构核心字段与加壳脱壳实战解析

简介:这份PE文件结构详解PDF对照《加密与破解》第十章,系统梳理Windows下exe、dll、sys等可执行文件的格式规范,适合逆向工程、软件安全、病毒分析初学者,也适合备考事业单位计算机岗位的读者夯实底层基础,还可作为高校…

2026/9/21 2:02:05 阅读更多 →

日新闻

agents-generator 决策矩阵全解析:从项目检测到 AGENTS.md 规则生成的 16 步判定流程

agents-generator 决策矩阵全解析:从项目检测到 AGENTS.md 规则生成的 16 步判定流程

agents-generator 决策矩阵全解析:从项目检测到 AGENTS.md 规则生成的 16 步判定流程 【免费下载链接】agentic-awesome-skills AAS Core is the local, agent-first control plane for complete catalog discovery, agent-owned selection, stack validation, and …

2026/9/21 0:00:01 阅读更多 →
gin-vue-admin 前端工具函数全景指南:src/utils 复用规范与源码级解析

gin-vue-admin 前端工具函数全景指南:src/utils 复用规范与源码级解析

gin-vue-admin 前端工具函数全景指南:src/utils 复用规范与源码级解析 【免费下载链接】gin-vue-admin 🚀ViteVue3Gin拥有AI辅助的基础开发平台,企业级业务AI开发解决方案,内置mcp辅助服务,内置skills管理,…

2026/9/21 0:00:01 阅读更多 →
Wox 全功能插件开发实战指南:基于 Python / Node.js 宿主与 WebSocket 的持久化插件体系

Wox 全功能插件开发实战指南:基于 Python / Node.js 宿主与 WebSocket 的持久化插件体系

桌面应用AI 应用插件系统 【免费下载链接】Wox A cross-platform launcher that simply works 项目地址: https://gitcode.com/gh_mirrors/wo/Wox 点击查看 免费下载 全功能插件(Full-featured Plugin)是 Wox 三类插件实现方式中能力最完整的…

2026/9/21 0:00:01 阅读更多 →

周新闻

Flutter for OpenHarmony游戏卡片渐变背景实战:从原理到性能优化

Flutter for OpenHarmony游戏卡片渐变背景实战:从原理到性能优化

直接铺开项目本身吧。这几个月我一直在折腾一件事:用Flutter给OpenHarmony做一款游戏集合类的App,说白了就是把若干小游戏塞进一个壳里,用统一入口分发。这个方向本身不算新鲜,真正让我花了不少心思的,是首页那堆游戏卡…

2026/9/20 0:00:46 阅读更多 →
Word表格编号全攻略:从列表编号到题注交叉引用

Word表格编号全攻略:从列表编号到题注交叉引用

写Word文档,最让人头疼的往往是那些“看起来不起眼”的小问题。比如表格编号这事:今天在表后面多加了两个空白行,明天给客户交稿前发现整个章节的编号全部错位,光是挨个改序号就能耗掉大半个下午。我前阵子帮人整理一份上百页的技…

2026/9/20 0:00:46 阅读更多 →
从第一个站到第二个站:独立开发者的静态网站选型与落地实践

从第一个站到第二个站:独立开发者的静态网站选型与落地实践

1. 项目概述1.1 核心需求解析做独立开发者这几年,说实话,第一个网站上线的那天晚上我兴奋得没睡着。但等它跑了半年,流量惨淡、功能臃肿、代码自己都懒得看第二遍之后,我才慢慢琢磨明白一个道理:第一个网站是练手&…

2026/9/20 0:00:46 阅读更多 →

月新闻

持续集成 流水线自动化与 声明式交付 实践:原型怎样变成可用功能

持续集成 流水线自动化与 声明式交付 实践:原型怎样变成可用功能

持续集成 流水线自动化与 声明式交付 实践:原型怎样变成可用功能分类:[AI/大模型]细分主题:AI 增强型 CI/CD 流水线自动化与 GitOps 实践:Agent 工作流、工具调用与任务拆解:从原型到生产的验收清单很多团队在尝试用大…

2026/9/19 23:01:36 阅读更多 →
容器编排 生产环境运维与排障实战:复盘记录怎样真正派上用场

容器编排 生产环境运维与排障实战:复盘记录怎样真正派上用场

容器编排 生产环境运维与排障实战:复盘记录怎样真正派上用场分类:[工程技术]细分主题:Kubernetes 生产环境运维与排障实战:可复制的项目复盘模板与决策记录大部分团队的事故复盘报告,最后都变成了躺在 Confluence 或钉…

2026/9/19 17:50:38 阅读更多 →
容器 容器化技术与镜像安全管理:核心链路应该先拆哪一步

容器 容器化技术与镜像安全管理:核心链路应该先拆哪一步

容器 容器化技术与镜像安全管理:核心链路应该先拆哪一步分类:[工程技术]细分主题:Docker 容器化技术与镜像安全管理:核心链路的逐步实现与关键代码取舍面对一个积累了五六年历史包袱的单体架构应用(包含 Web 接口、后台…

2026/9/19 23:35:34 阅读更多 →