Podman `--cpuset-cpus` 选项详解:精确绑定容器 CPU 核心的执行指南
Podman--cpuset-cpus选项详解精确绑定容器 CPU 核心的执行指南【免费下载链接】podmanPodman: A tool for managing OCI containers and pods.项目地址: https://gitcode.com/gh_mirrors/po/podman导读--cpuset-cpus是 Podman 中用于将容器或 Pod的执行限制在指定 CPU 核心上的核心资源选项适用于构建、创建、运行、克隆与更新等几乎所有容器生命周期命令。本文以 Podman 官方选项文档 docs/source/markdown/options/cpuset-cpus.md 为骨架结合仓库源码CLI 标志定义、specgen 资源转换、pod 基础设施容器继承逻辑展开讲解你将掌握该选项的三种语法格式、跨命令的使用方法、底层到 OCI runtime 与 cgroup cpuset 控制器的传递链路以及 rootless 与权限场景下的已知限制与排错思路。一、选项适用范围九条命令共享同一语义该选项文档在仓库中属于多命令共享选项文件文档头部明确标注了其使用范围This option file is used in: podman build, container clone, create, farm build, pod clone, pod create, run, update也就是说--cpuset-cpus在以下命令中语义完全一致限制容器/Pod 可执行的 CPU 集合命令作用podman build/podman farm build构建镜像时约束构建容器的 CPUpodman create/podman run创建/运行普通容器podman container clone克隆已有容器时重新指定 CPU 集合podman pod create/podman pod clone创建/克隆 Pod作用于 infra 容器从而影响 Pod 内所有容器podman update对运行中的容器动态更新 CPU 集合在 CLI 层该标志统一由 cmd/podman/common/create.go 注册cpusetCpusFlagName : cpuset-cpus createFlags.StringVar( cf.CPUSetCPUs, cpusetCpusFlagName, , CPUs in which to allow execution (0-3, 0,1), ) _ cmd.RegisterFlagCompletionFunc(cpusetCpusFlagName, completion.AutocompleteNone)可见其类型为字符串、默认值为空串空串表示不限制且未注册任何 shell 补全函数AutocompleteNone因为 CPU 编号由用户按目标主机的拓扑自行填写无法静态补全。二、语法格式列表、范围与组合文档给出的取值规则非常明确——--cpuset-cpus接受 Linux 的 CPU 列表语法逗号分隔列表0,1—— 表示第 0 号和第 1 号 CPU范围0-3—— 表示第 0 到第 3 号 CPU含端点任意组合0-3,7,11-15—— 同时使用范围与单个编号。组合示例的语义CPU 0、1、2、3、7、11、12、13、14、15。编号与宿主机/sys/devices/system/cpu/下的逻辑 CPU 编号一一对应包含超线程逻辑核。实战示例# 仅在第 0、1 号 CPU 上运行容器 podman run --cpuset-cpus0,1 --name web nginx # 使用连续范围 podman run --cpuset-cpus0-3 ubi9 sleep 3600 # 范围 单核混合 podman run --cpuset-cpus0-3,7,11-15 ubi9 top # 创建 Pod 并绑定到前 4 个核心通过 infra 容器生效 podman pod create --cpuset-cpus0-3 --name mypod # 动态更新运行中容器的 CPU 集合 podman update --cpuset-cpus4-7 web三、从 CLI 标志到 cgroup 控制器的底层链路1. 标志 → specgen 资源限制--cpuset-cpus的值最终被写入entities.ContainerCreateOptions.CPUSetCPUs在 pkg/specgenutil/specgen.go 的getCPULimits函数中被转换为 OCI runtime spec 的 Linux CPU 配置if c.CPUSetCPUs ! { cpu.Cpus c.CPUSetCPUs hasLimits true }specs.LinuxCPU.Cpus正是 OCI runtime 规范runtime-spec中定义 cpuset 的字段它最终对应到 Linux cgroup 的cpuset.cpus控制文件。2. 应用到 Pod 的基础设施容器对于pod create/pod clonePod 的资源限制会写入 infra 容器的配置Pod 内所有业务容器共享 infra 容器继承下来的 cpuset 约束。相关字段定义在 libpod/define/pod_inspect.go// CPUSetCPUs contains linux specific CPU data for the pod CPUSetCPUs string json:cpuset_cpus,omitempty并在 libpod/pod_api.go 处从 Pod 的资源限制同步到 infra 容器infraConfig.CPUSetCPUs p.ResourceLim().CPU.Cpus3. 导出到 Kubernetes YAML 的注解当使用podman generate kube导出时cpuset 会被记录为 Pod 注解io.podman.annotations.cpuset该注解常量定义于 libpod/define/annotations.go// CpusetAnnotation is used to restrict execution to specific CPU cores CpusetAnnotation io.podman.annotations.cpuset写入逻辑位于 pkg/specgen/generate/kube/kube.go 与 pkg/specgenutil/specgen.go。这意味着 cpuset 约束可以通过 YAML 注解形式在 kube 工作负载与 Podman 之间往返传递。四、与相关 CPU 资源选项的关系在 cmd/podman/common/create.go 中--cpuset-cpus与一组 CPU 资源选项相邻定义建议组合使用以获得完整的 CPU 调度控制选项类型默认值作用--cpuset-cpusstring允许执行的 CPU 核心集合本文主题--cpuset-memsstring允许执行的内存 NUMA 节点集合仅在 NUMA 系统上生效--cpusfloat640.000CPU 数量上限quota/period 换算0 表示不限--cpu-shares/-cuint640相对权重cgroup cpu.shares--cpu-period/--cpu-quota调度周期与配额其中--cpuset-mems与--cpuset-cpus语法完全一致如0-3,0,1同样在getCPULimits中转换为specs.LinuxCPU.Mems。五、已知限制与排错文档明确指出该选项存在两类环境限制仓库 troubleshooting.md 给出了对应的错误现象与定位1. cgroups V1 rootless 系统不支持This option is not supported on cgroups V1 rootless systems.在 cgroups v1 且以 rootless非 root方式运行时cpuset 控制器无法正常委派--cpuset-cpus不可用。建议这类环境升级到 cgroups v2现代 systemd 发行版的默认配置。2. 非 root 用户可能无资源限制权限文档同时提醒部分基于 systemd 的系统上非 root 用户未获得资源限制的委派权限设置资源限制会直接失败。troubleshooting.md 第 26 条给出的典型报错如下$ podman run --cpuset-cpus0-3 ubi9 Error: OCI runtime error: crun: the requested cgroup controller cpuset is not available注意--cpus、--cpu-shares等选项对应的是cpu控制器报错会显示the requested cgroup controller cpu is not available而--cpuset-cpus、--cpuset-mems对应的是cpuset控制器报错即上述形式。解决办法是让管理员在 systemd 用户切片user slice中为用户委派对应的 cgroup 控制器权限或使用 rootful 模式运行。六、验证与进一步阅读运行podman run --cpuset-cpus0-3 ubi9 cat /proc/self/status | grep Cpus_allowed_list可查看容器内实际看到的 CPU 掩码在 cgroups v2 宿主机上可检查/sys/fs/cgroup/.../cpuset.cpus确认限制是否写入完整选项说明见 docs/source/markdown/options/cpuset-cpus.mdCLI 标志定义见 cmd/podman/common/create.go资源转换逻辑见 pkg/specgenutil/specgen.go权限问题排错见 troubleshooting.md。总结--cpuset-cpus通过统一的0,1/0-3/0-3,7,11-15语法让容器与 Pod 精确锁定宿主机的逻辑 CPU 集合适合对延迟敏感或需要 CPU 隔离的业务场景。使用时务必确认宿主机的 cgroup 版本与 rootless 委派配置以免落入 cpuset 控制器不可用的报错陷阱。【免费下载链接】podmanPodman: A tool for managing OCI containers and pods.项目地址: https://gitcode.com/gh_mirrors/po/podman创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

相关新闻

极小型蓝牙SoC如何重构智能传感器功耗边界

极小型蓝牙SoC如何重构智能传感器功耗边界

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

2026/9/19 6:07:46 阅读更多 →
Umi-OCR 免费离线文字识别:截图、批量、PDF 三大场景 10 分钟上手

Umi-OCR 免费离线文字识别:截图、批量、PDF 三大场景 10 分钟上手

Umi-OCR 免费离线文字识别:截图、批量、PDF 三大场景 10 分钟上手 【免费下载链接】Umi-OCR OCR software, free and offline. 开源、免费的离线OCR软件。支持截屏/批量导入图片,PDF文档识别,排除水印/页眉页脚,扫描/生成二维码。…

2026/9/19 6:07:46 阅读更多 →
Sequelize 7 的 @sequelize/mssql 方言包:从包拆分、配置体系重构到连接管理深度解析

Sequelize 7 的 @sequelize/mssql 方言包:从包拆分、配置体系重构到连接管理深度解析

Sequelize 7 的 sequelize/mssql 方言包:从包拆分、配置体系重构到连接管理深度解析 【免费下载链接】sequelize Feature-rich ORM for modern Node.js and TypeScript, it supports PostgreSQL (with JSON and JSONB support), MySQL, MariaDB, SQLite, MS SQL Ser…

2026/9/19 6:06:46 阅读更多 →

最新新闻

Google ADK Kotlin 智能体开发实战:工具、会话与多Agent编排

Google ADK Kotlin 智能体开发实战:工具、会话与多Agent编排

1. 为什么 ADK 要专门支持 Kotlin:先搞清楚这东西到底解决什么问题Kotlin 后端圈子里最近有件挺值得琢磨的事——Google 把自家的 Agent Development Kit(ADK)搬到了 JVM 生态上,而 Kotlin 因为和 Java 的无缝互操作,等…

2026/9/19 6:50:02 阅读更多 →
CANN ops-math 源码构建完全指南:自定义算子包、ops-math 包与静态库的编译、安装与验证

CANN ops-math 源码构建完全指南:自定义算子包、ops-math 包与静态库的编译、安装与验证

CANN ops-math 源码构建完全指南:自定义算子包、ops-math 包与静态库的编译、安装与验证 【免费下载链接】ops-math 本项目是CANN提供的数学类基础计算算子库,实现网络在NPU上加速计算。 项目地址: https://gitcode.com/cann/ops-math 本指南系统…

2026/9/19 6:50:02 阅读更多 →
Win11下CH340串口驱动识别失败排查与稳定性加固指南

Win11下CH340串口驱动识别失败排查与稳定性加固指南

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

2026/9/19 6:50:02 阅读更多 →
graph-autofusion V2 节点性能建模实战:基于 af-perf-modeler 的 Cast/Reduce/Compare 算子性能公式推导指南

graph-autofusion V2 节点性能建模实战:基于 af-perf-modeler 的 Cast/Reduce/Compare 算子性能公式推导指南

graph-autofusion V2 节点性能建模实战:基于 af-perf-modeler 的 Cast/Reduce/Compare 算子性能公式推导指南 【免费下载链接】graph-autofusion Graph-autofusion 是一个面向昇腾(Ascend)芯片的轻量级、解耦式组件集合,旨在通过自…

2026/9/19 6:50:02 阅读更多 →
基于YOLOv8/v10/v11/v12/26的森林火灾火焰烟雾检测系统实战

基于YOLOv8/v10/v11/v12/26的森林火灾火焰烟雾检测系统实战

森林防火监控中心的屏幕上,几十路视频画面轮流切换,值班人员要在火焰刚冒头、烟雾刚飘起的最初几分钟内发现异常并上报——这个场景我在多个项目现场见过太多次了。人工盯屏的疲劳度问题、山区复杂光照下的误报问题、不同季节植被颜色变化带来的漏检问题…

2026/9/19 6:50:02 阅读更多 →
Win11更新后音频设备消失?从驱动到服务的全面修复指南

Win11更新后音频设备消失?从驱动到服务的全面修复指南

1. 问题定位:为什么Win11一更新,音频设备就"失踪"说实话,每次Windows大版本更新或者累积更新之后,音频设备消失这事儿,几乎是我见过最多的高频问题了。无论是刚买的笔记本,还是用了两三年的老台式…

2026/9/19 6:49:02 阅读更多 →

日新闻

BP神经网络时序预测:滑窗长度与多窗口平均策略

BP神经网络时序预测:滑窗长度与多窗口平均策略

简介:面向机器学习、深度学习与数据建模学习者的一份完整研究文献,聚焦BP神经网络在农业产量预测中的应用。文档以1980—2018年全国棉花产量为样本,系统讲解数据归一化处理、激活函数原理、多层神经网络结构搭建及训练流程,展示敏…

2026/9/19 0:00:30 阅读更多 →
Transformer训练实时监控实战:基于MindSpore的损失曲线可视化方案

Transformer训练实时监控实战:基于MindSpore的损失曲线可视化方案

上个月调一个Deformable DETR模型,在单卡上要跑将近两天。第二天早上我下意识打开终端翻日志,发现loss从凌晨两点就开始往上爬,一路从0.8涨到1.35,整整六个小时没人发现。那六个小时的训练不仅白跑,还霸占着卡——等于…

2026/9/19 0:00:30 阅读更多 →
OpenCloud 中的 Go 类型安全转换库 spf13/cast:从零值回退到泛型 API 的完整实战指南

OpenCloud 中的 Go 类型安全转换库 spf13/cast:从零值回退到泛型 API 的完整实战指南

OpenCloud 中的 Go 类型安全转换库 spf13/cast:从零值回退到泛型 API 的完整实战指南 【免费下载链接】opencloud 🌤️ OpenCloud is the open source platform for file management, sharing and collaboration. Simple and sovereign. 项目地址: htt…

2026/9/19 0:00:30 阅读更多 →

周新闻

AI SDK Harness 依赖更新指南:掌握 harness 包 SDK 依赖的升级、桥接同步与一致性校验

AI SDK Harness 依赖更新指南:掌握 harness 包 SDK 依赖的升级、桥接同步与一致性校验

AI SDK Harness 依赖更新指南:掌握 harness 包 SDK 依赖的升级、桥接同步与一致性校验 【免费下载链接】ai The AI Toolkit for TypeScript. From the creators of Next.js, the AI SDK is a free open-source library for building AI-powered applications and ag…

2026/9/19 3:59:36 阅读更多 →
Refine v5 Ant Design NumberField 组件实战:基于 Intl 的本地化数字格式化

Refine v5 Ant Design NumberField 组件实战:基于 Intl 的本地化数字格式化

Refine v5 Ant Design NumberField 组件实战:基于 Intl 的本地化数字格式化 【免费下载链接】refine A React Framework for building internal tools, admin panels, dashboards & B2B apps with unmatched flexibility. 项目地址: https://gitcode.com/GitH…

2026/9/19 3:53:08 阅读更多 →
Flutter应用改名全指南:从Android到iOS的配置与工具实践

Flutter应用改名全指南:从Android到iOS的配置与工具实践

刚接一个外包项目时,甲方要求把工程里临时用的应用名改成正式产品名。我本来觉得“改名”这种小事,打开配置文件改一行不就完了?结果真动手才发现,Flutter项目里“应用名称”根本不是一处配置,而是一整套散落在 Androi…

2026/9/19 4:02:43 阅读更多 →

月新闻

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

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

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

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

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

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

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

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

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

2026/9/16 22:32:59 阅读更多 →