【问题标题】:Hyper-threading - By which test can I check if it is enabled or disabled?超线程 - 我可以通过哪个测试检查它是启用还是禁用?
【发布时间】:2013-09-18 04:04:37
【问题描述】:

是否有任何简单的性能测试来检测是否启用了 HT? 例如,当最大 CPU 数量受 linux 内核(NR_CPUS)限制且无法访问 BIOS 时,我需要它。

那么您能否建议任何代码来检测是否启用了 HT?

我看了herehere ,但这不是答案。 谢谢。

【问题讨论】:

  • 更精确:如何在不读取标志的情况下检测 HT 的存在?

标签: c++ c linux hyperthreading


【解决方案1】:

还有另一种方式 - /sys/ 文件系统,它应该比 /proc 更有序。 /proc/cpuinfo 因内核版本而异;

cat /sys/devices/system/cpu/cpu0/topology/thread_siblings

为您提供与核心 cpu0 一起运行的硬件线程列表。

https://www.kernel.org/doc/Documentation/cputopology.txt

4) /sys/devices/system/cpu/cpuX/topology/thread_siblings:

    internal kernel map of cpuX's hardware threads within the same
    core as cpuX

【讨论】:

    【解决方案2】:

    在 Linux 上,我认为您可以阅读 /proc/cpuinfo,但之后您必须考虑一下我们是否有多核 cpu 或启用 HT 的 cpu 等。

    首先,flags 将为您提供支持的功能,ht 那里将指示超线程支持。

    然后你必须检查 sibling count 是否与每个 CPU 上的 core count 匹配,因此查找 cpu id,并从那里扣除。 (因此,如果兄弟计数与核心计数匹配 -> 没有 HT) 更多信息可以在这里找到:http://richweb.com/cpu_info

    【讨论】:

    • 好的。我thanx的答案。但我对任何标志都不感兴趣。我需要测试哪个测试可以显示启用 HT 和禁用的系统之间的差异。不是任何读取标志的程序,而是执行矩阵乘法或类似操作的程序。
    【解决方案3】:

    检查标志会给你一个明确的答案,而性能测试(特别是如果以编程方式检查结果)会有一些不确定性。我们将测试的超线程 (HT) 签名的性能特征是什么?当线程执行不同的工作时,HT 提供更好的性能,其中不同是基于微架构定义的。相比之下,由于代码在每个内核上执行(某些因素仍然存在,例如内存带宽或共享缓存),单独的内核几乎没有性能相关性。

    您可以测试多种组合;我将在这里勾勒出一种可能的解决方案。假设系统至少有两个内核也可能启用了 HT。这提供了可以在其上调度线程的 4 个逻辑处理器 (LP)。制作一个可以对一个内核资源施加压力的单线程程序。现在,复制该工作,这样我们将拥有两个可以独立运行的线程。然后为了测试性能,将线程的调度亲和性设置为系统中不同的 LP 对。然后测量在不同对上运行的性能。 HT 对将提供与单独内核配对不同的性能。

    在编写性能测试时,您通常会担心衡量性能。测量机制是否具有必要的粒度?您正在测试的变量(HT 与核心)是否发生变化,但其他变量没有变化?例如,每次测试前缓存是否处于相同状态?或者,某些内核是否共享缓存,因此在测试中将它们配对会提供与其他配对不同的性能?现在,如果您执行所有这些操作,那么您应该观察到不同的性能结果,具体取决于您安排了哪对 LP。

    【讨论】:

    • 所以我的问题的答案是找到最大的共享块,找到块的操作并启动几个循环执行操作的线程。线程应附加到检查核对。如果 HT 启用与否,操作的性能应该会有所不同。我说的对吗?
    猜你喜欢
    • 2020-06-05
    • 1970-01-01
    • 2012-11-06
    • 1970-01-01
    • 2014-08-16
    • 1970-01-01
    • 2011-08-02
    • 1970-01-01
    • 2011-12-29
    相关资源
    最近更新 更多