AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / server / 问题 / 132441
Accepted
nedm
nedm
Asked: 2010-04-15 11:45:39 +0800 CST2010-04-15 11:45:39 +0800 CST 2010-04-15 11:45:39 +0800 CST

虚拟化 CPU 内核与线程

  • 772

我们在 Ubuntu 9.10 上有一个 KVM 主机系统,它带有一个更新的四核 Xeon CPU 和超线程。正如英特尔产品页面所详述的那样,该处理器有 4 个内核,但有 8 个线程。/proc/cpuinfo 和 htop 都列出了 8 个处理器,尽管每个处理器都在 cpuinfo 中声明了 4 个内核。KVM/QEMU 还报告 8 个 VCPU 可分配给来宾。

我的问题是当我为 VM 来宾分配 VCPU 时,我应该按内核还是按线程分配?由于 KVM/QEMU 报告服务器有 8 个 VCPU 要分配,我是否应该继续设置来宾使用 4 个 CPU,而我之前将它设置为使用 2 个(假设总共有 4 个 VCPU 可用)?我想在不过度分配的情况下充分利用主机硬件。

更新: Chopper3 的回答无疑是正确的做法。但是,我仍然很想听听任何硬件专家的意见,他们可以阐明线程与内核的性能方面......有人吗?

central-processing-unit kvm-virtualization threads vcpu multi-core
  • 4 4 个回答
  • 27890 Views

4 个回答

  • Voted
  1. Best Answer
    Chopper3
    2010-04-15T11:55:32+08:002010-04-15T11:55:32+08:00

    设置您的服务器执行其功能所需的最低 vCPU 数量,不要过度分配它们,否则您很容易减慢虚拟机的速度。

    • 9
  2. techieb0y
    2010-04-25T19:17:25+08:002010-04-25T19:17:25+08:00

    通常,HT 在 IO 上较重的工作负载上运行良好——当第一个虚拟 CPU 等待 IO 时,CPU 可以从另一个虚拟 CPU 的队列中调度更多处理任务。真正为您提供的所有 HT 子系统都是硬件加速的上下文切换——这也是在 VM 之间切换时使用的工作负载模式。因此,如果每个 VM 都有一个虚拟内核,那么当您拥有的 VM 数量多于内核数量时,HT(通常)会稍微降低速度。

    如果 VM 中的应用程序是为线程编写的,那么将多个 vCPU 分配给 VM 可以提高性能,但也会使管理程序的工作更加困难;它必须一次在 2 或 4 个 CPU 上分配时间——因此,如果您有一个四核 CPU 和一个四 vCPU 虚拟机,那么在该时间片内只能调度一个虚拟机(而它可以运行 4 个不同的单 vCPU 虚拟机立刻)。

    • 5
  3. dyasny
    2012-07-17T12:10:11+08:002012-07-17T12:10:11+08:00

    这是相当棘手的。根据负载,HT 可以将性能提高约 30% 或降低。通常我建议不要为单个 VM 分配比物理内核更多的 vCPU,但如果 VM 相当空闲(当然,这样的 VM 并不需要太多 CPU),它可以放弃为许多 vCPU,因为你有线程。您真的不想为单个 VM 提供比您拥有的可调度内核更多的 vCPU,这就是我的意思。无论如何,@Chopper3 的建议是正确的——不要给虚拟机提供比它绝对需要的更多的 v-CPU。

    因此,根据您的虚拟机的负载和关键程度,您要么根本不过度分配,要么坚持物理核心数,要么与每个虚拟机的线程数一样高。

    现在,进入 HT 的问题,拥有它通常是一件好事,尤其是当您向 VM 提交的 vCPU 数量超过物理内核甚至线程时,因为它使 Linux 调度程序更容易调度这些 vCPU。

    最后一件事,使用 kvm,分配给 VM 的 vCPU 只是主机上的一个进程,由 Linux 调度程序调度,因此您可以在此处进行的所有正常优化都可以轻松应用。此外,cores/sockets 设置只是为 VM 的来宾操作系统显示此进程的方式,在主机上它仍然只是一个进程,无论 VM 如何看待它。

    • 5
  4. Nakarti
    2012-07-17T11:46:48+08:002012-07-17T11:46:48+08:00

    我想详细说明 Chopper3 的答案:如果系统大多是 cpu-idle,请不要分配一堆 vcpu,如果它们是 cpu-intense,请非常小心不要过度分配。您应该能够分配总共 8 个 vCPU 而不会发生争用。您可以过度分配,但如果这样做,请确保没有单个来宾(尤其是 CPU 密集型来宾)拥有 8 个 vcpu,否则您将发生争用。我不知道 KVM 调度程序机制比这更具体。

    以上是基于以下对 vCPU 与固定 CPU 的理解,以及假设 KVM 将允许单个客户机(或多个客户机)从其他客户机(/它们)分配足够的线程来占用所有实际 CPU。vCPU ~ 主机线程,客户 CPU CPU = 主机核心,客户 CPU(没有在同一个客户上使用混合 vCPU 和固定 CPU,因为我没有超线程。)

    • 2

相关问题

  • 哪些 939 插槽芯片支持 AMD-V?

  • DDR II 667 与 DDR 400

  • 两个双核与一个四核

  • 奔腾电脑的寿命

  • 有没有办法给一个带有 Windows 的 xen vm 提供多个虚拟 cpu?

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    新安装后 postgres 的默认超级用户用户名/密码是什么?

    • 5 个回答
  • Marko Smith

    SFTP 使用什么端口?

    • 6 个回答
  • Marko Smith

    从 IP 地址解析主机名

    • 8 个回答
  • Marko Smith

    如何按大小对 du -h 输出进行排序

    • 30 个回答
  • Marko Smith

    命令行列出 Windows Active Directory 组中的用户?

    • 9 个回答
  • Marko Smith

    什么是 Pem 文件,它与其他 OpenSSL 生成的密钥文件格式有何不同?

    • 3 个回答
  • Marko Smith

    如何确定bash变量是否为空?

    • 15 个回答
  • Martin Hope
    MikeN 在 Nginx 中,如何在维护子域的同时将所有 http 请求重写为 https? 2009-09-22 06:04:43 +0800 CST
  • Martin Hope
    Tom Feiner 如何按大小对 du -h 输出进行排序 2009-02-26 05:42:42 +0800 CST
  • Martin Hope
    0x89 bash中的双方括号和单方括号有什么区别? 2009-08-10 13:11:51 +0800 CST
  • Martin Hope
    Kyle Brandt IPv4 子网如何工作? 2009-08-05 06:05:31 +0800 CST
  • Martin Hope
    Noah Goodrich 什么是 Pem 文件,它与其他 OpenSSL 生成的密钥文件格式有何不同? 2009-05-19 18:24:42 +0800 CST
  • Martin Hope
    Brent 如何确定bash变量是否为空? 2009-05-13 09:54:48 +0800 CST
  • Martin Hope
    cletus 您如何找到在 Windows 中打开文件的进程? 2009-05-01 16:47:16 +0800 CST

热门标签

linux nginx windows networking ubuntu domain-name-system amazon-web-services active-directory apache-2.4 ssh

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve