【问题标题】:How many threads for a kubernetes application?一个 Kubernetes 应用程序有多少个线程?
【发布时间】:2020-04-04 10:06:51
【问题描述】:

我有一个多线程应用程序,它执行我想在 Kubernetes 上运行的 CPU 密集型任务。 我正在使用的节点有 56 个核心,我为我的 pod 设置了 2 个核心的请求和限制。

由于它是 CPU 密集型的,通常线程数超过核心数是没有意义的(使用超线程,线程数可能是核心数的两倍),所以我会分配 2-4 个线程并称之为一天.

但是,AFAIK,Kubernetes 不保证核心亲和性,因此在最坏的情况下,2 个核心可以平均分配给 56 个核心,每个核心有 2/56 的时间并行工作。如果发生这种情况并且我只分配了 4 个线程,那么 56 个内核中至少有 52 个将处于空闲状态。

如果我理解正确的话,这个问题并不是 Kubernetes 独有的,它适用于任何共享硬件资源的虚拟化环境。

在处理这种潜在的最坏情况时,最佳做法是什么?你会忽略它并假设你有很高的地方性,还是你会做最坏的打算,或者介于两者之间?

【问题讨论】:

    标签: kubernetes virtualization cgroups


    【解决方案1】:

    线程调度取决于操作系统,包括亲和力,kubernetes 通常不会影响它。如果它对您的工作负载很重要 - 您可以尝试在 k8s 中使用 Static policy 为您的应用获取专属 CPU 内核。

    您可以使用 pod CPU 限制 56 并运行 56 个线程来利用所有节点内核。假设此节点上的所有其他 pod 使用正确的 CPU 请求,这不会对其他 pod 产生负面影响。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-05-22
      • 2020-12-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-10-18
      相关资源
      最近更新 更多