问题标签 [cpuset]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
0 回答
15 浏览

docker - 如果我的程序将线程绑定到 docker 容器中受限的内核会发生什么?

如果我的程序在以参数docker run --cpuset-cpus="0"启动的容器中运行,并且它调用pthread_setaffinity_np将一个线程绑定到cpu#1,会发生什么?它会打破 docker 容器 cpuset 限制并同时使用cpu#0cpu#1吗?

0 投票
1 回答
37 浏览

kubernetes - 固定 Kubernetes pods/deployments/replica sets/daemon sets 以仅在特定 cpu 上运行

我需要将应用程序/部署限制为仅在特定 cpus 上运行(例如 0-3 或仅 1 或 2 等)。我发现了 CPU Manager 并尝试使用static策略实现它,但无法实现我想要的。

到目前为止,我尝试了以下方法:

  1. 在 kubelet 上启用 cpu managerstatic策略并验证它是否已启用
  2. --reserved-cpus=0-3在 kubelet 中保留带有选项的 cpu
  3. 运行一个示例 nginx 部署,其限制等于请求和整数值的 cpu,即保证的 QoS 得到保证,并且能够验证 cpu 亲和性taskset -c -p $(pidof nginx)

因此,这使我的 nginx 应用程序被限制在保留 cpus (0-3) 以外的所有 cpus 上运行,即如果我的机器有 32 个 cpus,则该应用程序可以在 4-31 个 cpus 上运行。任何其他将运行的应用程序/部署也可以。据我了解,保留的 cpus 0-3 将保留给系统守护进程、操作系统守护进程等。

我的问题-

  1. 使用 Kubernetes CPU 管理器功能,是否可以将某些 cpu 固定到应用程序/pod(在本例中为我的 nginx 应用程序)以仅在特定 cpu 上运行(例如 2 或 3 或 4-5)?如果是,如何?
  2. 如果点 1 是可能的,我们是否也可以在容器级别执行固定,即说 Pod A 有两个容器 Container B 和 Container D。是否可以将 cpu 0-3 固定到 Container B 并将 cpu 4 固定到 Container B?
  3. 如果使用 Kubernetes CPU 管理器都无法实现这一切,那么目前有哪些可用的替代方案(如果有的话)?