在 Docker 或更广泛的 Linux 容器环境中,vCPU(Virtual CPU)通常指的是线程(Thread)的数量,而不是物理核心(Core)的数量。
一、基本概念区分:
| 概念 | 含义说明 |
|---|---|
| 物理CPU(Socket) | 实际插在主板上的物理处理器。 |
| 物理核心(Core) | 每个物理CPU内部的独立处理单元。 |
| 线程(Thread) / 逻辑核心(Logical Core) | 利用超线程技术(Hyper-Threading),一个物理核心可以表现为两个或更多逻辑核心(即线程)。 |
二、Docker 中 vCPU 的定义
当你使用 Docker 的资源限制功能时,例如:
docker run --cpus=2 ...
这表示容器最多可以使用 2 个 vCPU 的 CPU 时间。
在 Docker 中:
- vCPU = 1 个线程(逻辑核心)
- 所以如果你设置
--cpus=2,意味着该容器最多可以占用 2 个逻辑核心 的 CPU 时间。 - 这并不保证是 2 个物理核心,因为现代 CPU 大多支持超线程。
三、举例说明
假设你有一台服务器:
- 1 个物理 CPU(Socket)
- 4 核心(Cores)
- 支持超线程(每个核心 2 线程)
- 总共 8 个逻辑核心(Threads)
你可以这样限制容器:
docker run --cpus=2 my_container
这个容器最多可以使用相当于 2 个线程 的 CPU 资源。
四、Kubernetes 中的 CPU 单位也是类似的
在 Kubernetes 中:
resources:
limits:
cpu: "2"
这里的 2 CPU 也是一个抽象单位,等价于 2 个 vCPU,也就是 2 个线程的时间。
五、总结
| 术语 | 表示内容 |
|---|---|
| vCPU in Docker/Kubernetes | 代表的是 逻辑核心(线程) 的数量 |
| 1 vCPU = ? | ≈ 1 个线程(逻辑核心) |
| 不是 | 物理核心或整个物理 CPU |
如需查看主机上实际的 CPU 架构信息(核心数、线程数等),可使用如下命令:
lscpu
或者:
nproc
来查看可用的逻辑核心总数。
如有进一步关于 CPU 配额、限制或调度的问题,也欢迎继续提问!
云计算导航