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 / 问题 / 767730
Accepted
Tassadar
Tassadar
Asked: 2016-04-03 04:58:45 +0800 CST2016-04-03 04:58:45 +0800 CST 2016-04-03 04:58:45 +0800 CST

超线程应该使用多少 CPU?

  • 772

假设我有一个 18 核的服务器 cpu,开启了超线程,这意味着我可以在 htop 中看到 36 个 cpu。

为了充分利用 CPU 并且不影响单线程性能,我是否应该将所有 36 个“核心”的目标设为 100% 运行,而 HT 核心将只做更少的工作并且仍然报告 100%,或者这意味着“完整”内核已经被其“HT 内核”上的任务打断,从而减少了单线程工作?

我知道有很多变量会影响 HT 性能,我只是想知道处理 HT 时 cpu 计量表的含义。

hyperthreading
  • 4 4 个回答
  • 2532 Views

4 个回答

  • Voted
  1. sysadmin1138
    2016-04-03T05:44:32+08:002016-04-03T05:44:32+08:00

    CPU 计量器无法告诉您可以从超线程 CPU 中挤出多少性能。为此,您应该以各种物理内核超额订阅率运行自己的基准测试。有一些工作负载在完全关闭 HT 的情况下效果最好,所以在你的测试中也包括这种情况。可能是 1:2(36 个并行工作器),或者 1:1.5,甚至是 1:2.5!这取决于你的工作量。

    更详细地说,在需要切换上下文或分支预测失败时,以减少处理器空闲时间的方式在芯片上实现 HT。这使得达到 100% 的执行单元使用率比使用纯操作系统技巧更容易。HT 自推出以来一直在发展,现代芯片上的并行性比我们 10 年前使用的更多。

    有两个执行配置文件会影响您的最佳超额订阅点的位置:

    • 执行时间长。如果您的工作人员在回收之前运行几分钟或几小时,例如大型渲染作业或环境建模,您将获得每个工作人员更高效的单核性能。这会降低你的比例。
    • 执行时间短。如果您的工作人员在几秒钟或几分钟内循环,例如 web 应用程序线程,则打开新进程所涉及的开销意味着您的比率会更高。
    • 23
  2. Best Answer
    JDługosz
    2016-04-03T21:49:48+08:002016-04-03T21:49:48+08:00

    如果允许第二个虚拟核心在第一个虚拟核心被卡住时做出贡献,那总比没有好,因此您(至少)完成了一些额外的工作。

    问题变成了:什么时候有两个不同的线程会导致一个运行得更糟?指令之间的分支预测和依赖关系不会改变。现在等待内存访问......两个线程在缓存利用率和带宽方面竞争内存访问。

    如果您有一些 CPU 使用 HT 运行而其他 CPU 没有,这是否也意味着您会将特定线程分配给一种类型或另一种类型?我认为不会:您的程序将在随机虚拟内核上运行它们的线程。那么拆分配置有什么帮助呢?由于每个 CPU 都有自己的缓存,唯一的影响是由于内存带宽和缓存一致性的负担。

    一般来说,你会达到这样的程度,即拥有更多你可以做的事情比让一些 CPU 执行单元闲置更昂贵。这并不直接取决于线程的数量,而是取决于线程在做什么,以及各种组件的详细内存架构和性能细微差别。

    没有简单的答案。即使考虑到特定的程序,机器也可能与那些讲述自己经历的人不同。

    您必须自己尝试并测量什么是最快的,在这台确切的机器上进行特定的工作。即便如此,它也可能随着软件更新和随着时间的推移而改变使用情况而改变。

    看看Anger 的代表作第 3卷。如果您仔细查看某些特定的处理器,您会发现在执行代码所需的许多步骤的深层管道中资源有限。您需要找到过度承诺导致其执行速度较慢的情况,而不是不承担更多工作。一般来说,这意味着某种缓存;以及资源在线程之间共享的位置。


    CPU 计量器是什么意思:它报告所有未花费在运行空闲线程上的时间。即使在其中一个上完成的实际工作可能很小,分配给核心的两个逻辑线程也不会空闲。管道卡住几个周期直到结果准备好,内存被提取,原子操作被隔离等所花费的时间。同样不会导致线程被搁置为“未准备好”,因此它不会空闲,并且时间仍然显示为正在使用。等待 RAM 不会显示为空闲。只有像 I/O 这样的东西才会使线程阻塞并停止向它收费。操作系统互斥锁通常会这样做,但随着多核系统的兴起,这不再是确定的事情,因为“自旋锁”不会让线程重新回到货架上。

    因此,如果 CPU 经常卡在等待内存,那么 100% 的 CPU 计量表并不意味着一切顺利。显示 90% 的较少数量的逻辑核心很可能会完成更多工作,因为它完成了数字运算,现在正在磁盘上等待。

    所以不用担心 CPU 仪表。看看实际取得的进展,只有.

    • 15
  3. TomTom
    2016-04-03T05:18:17+08:002016-04-03T05:18:17+08:00

    您应该看到所有 36 个内核都以 100% 运行 - 假设软件可以做到这一点(这不是微不足道的 - 这么多内核的调度可能很棘手,因此低于 100% 的下降是可以接受的)。

    显然,当您使用超线程“拆分”矿石时,那些 200% 的含义不是“2x100% - 在已完成的工作中。但这对于所采取的任何测量都是不可见的(来自 CPU 利用率并且没有完成工作的概念)。完成多少工作取决于工作是什么——在大多数情况下,预计在没有超线程的情况下工作量高于 1.5 倍。

    • 4
  4. shodanshok
    2016-04-19T13:34:43+08:002016-04-19T13:34:43+08:00

    超线程的实现方式因特定的 CPU uarch 而异。从 Nehalem 到 Skylake,英特尔显着减少了管道的固定比率(即:50/50)共享部分,转向动态共享结构。

    无论如何,一般而言,启用 HT 会导致单线程执行速度稍慢,但由于 Linux 调度程序的工作原理,这仅在线程数或运行线程数高于物理内核数时才会发生。在这种情况下(当线程 > 内核时),您通常会重视最大重要性的总吞吐量,超线程仍然是一个净赢家。

    这怎么可能?要理解的关键点是 CPU 不会将物理内核和虚拟内核呈现为相等的内核,而是以一种方式公开后者,如果任何其他物理内核可用,Linux 调度程序可以避免在它们上进行调度。换句话说,它首先使用所有物理内核,然后开始使用虚拟内核。

    这意味着通常来说,超线程是一项非常有价值的功能(其他处理器,如 Power8,使用更深层次的 SMT 技术),为了最大限度地提高吞吐量,您应该启用它,为每个虚拟或物理核心加载至少一个线程的 CPU。举一个实际的例子,要从 18 核 CPU 中提取全部性能,您应该使用至少 36 个线程。

    存在两个例外:

    1. 如果您想要的只是最小化有限线程集的延迟(其中线程 < 物理内核),您可以禁用 HT
    2. 非常旧的 CPU(Pentium4 和小得多的 Nehalem)具有不灵活的分区规则,这迫使 CPU 以 50/50 的比例分割许多关键资源,独立于第二个线程的状态/负载。在这种情况下,您必须对用例进行基准测试,以确保增加的吞吐量值得显着降低的单线程性能。
    • 3

相关问题

  • Hyper-V 和超线程:开还是关?

  • VMWare ESXi 和超线程

  • 当前对 SQL Server 和超线程的看法?

Sidebar

Stats

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

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

    • 5 个回答
  • Marko Smith

    SFTP 使用什么端口?

    • 6 个回答
  • Marko Smith

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

    • 9 个回答
  • Marko Smith

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

    • 3 个回答
  • Marko Smith

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

    • 15 个回答
  • Martin Hope
    Tom Feiner 如何按大小对 du -h 输出进行排序 2009-02-26 05:42:42 +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