【问题标题】:Can the two threads of a virtual core (hyperthreading) be running different OS processes?虚拟核心(超线程)的两个线程可以运行不同的操作系统进程吗?
【发布时间】:2017-06-11 02:04:45
【问题描述】:

我从另一个答案 (Performance difference for multi-thread and multi-process) 中找到以下引用:

接下来,您可以拥有“超线程”的 CPU,它可以运行(在 至少)一个核心上的两个线程非常快速 - 但不是进程(因为 “超线程”线程不能使用不同的地址空间) -- 又一个线程可以在性能方面取胜的例子。

这是准确的吗?一个虚拟核心(超线程)的两个线程不能运行不同的操作系统进程?

在超线程机器上,如果我的程序架构使用“主管”进程使用套接字与之通信的“工作”进程,那么通过将这些工作进程移动到主管进程中,我可能会看到性能提升:线程(保持套接字和其他所有内容相同)?

【问题讨论】:

    标签: multithreading hyperthreading


    【解决方案1】:

    问题的第一部分可以快速回答,如果相同,您可以在系统上进行测试。

    在我的带有英特尔 CPU 的旧 Windows 系统上,我可以通过任务管理器将不同程序(或进程)的关联设置到内核的 2 个 HT 中的每一个上,看看它们实际上都会在那里运行。

    关于工人和主管的第二个问题,通过让他们处于同一进程中,您可以获得小的性能提升(至少在 Linux 上)。这是因为当您进行任务切换时,您还需要设置页表(intel CR3-register),并且在任务切换期间代码看起来像这样:

    if (newProcess != oldProcess)
      CR3 = new page table
    

    设置 CR3 有效地使 TLB 无效,因为页表不同。结果是 CPU 必须执行页表遍历才能找到正确的翻译。在 64 位 cpu 上,页面遍历通常需要 5 次内存遍历,成本从 5*TLB 2 访问(每个 ~3 个周期)到 5 * 内存访问(每个 ~300 个周期)不等。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2023-03-06
      • 1970-01-01
      • 2012-04-27
      • 2017-06-10
      • 2018-03-19
      • 1970-01-01
      • 1970-01-01
      • 2011-05-24
      相关资源
      最近更新 更多