EC2、Windows 10、一半虚拟处理器

EC2、Windows 10、一半虚拟处理器

我们运行了t3.large两个m5.large实例,它们有 2 个 vCPU(如 EC2 管理控制台中所示)。我试图理解为什么 Windows 2019(我的 IT 提供的 AMI)只能看到一半数量的逻辑 CPU。

  • 任务管理器、msinfo32 和 Coreinfo 中报告了一半的数字。我们还看到较大实例(xlarge:2 而不是 4)的数量也只有一半。
  • 如果我while($true){}在 PowerShell 中运行,任务管理器将报告 100% 的使用率,但 Cloudwatch 将报告 50%。
  • 在 msconfig 中,我只能选择 1 个 CPU(对于大型实例)。
  • 当我在 EC2 向导中创建实例时,我使用了默认的 vCPUS 数量。
  • 如果我使用市场上的 Windows 2019 AMI,我会得到正确数量的逻辑处理器。在这两种情况下,都是相同的版本/内部版本(Windows Server 2019 Datacenter)。

您是否知道 Windows 10 中任何会影响检测到的逻辑处理器数量的配置?或者我是否可以激活任何日志来查看如何检测 CPU(如dmesg在 Linux 中)。我的 IT 同事告诉我,他们没有更改任何有关 CPU 数量或超线程的内容,但他们的 AMI 似乎有些特别。

更新:在事件查看器中的“Microsoft / Windows / Kernel-PnP”中,我可以看到:

设备 ACPI\GenuineIntel_-Intel64_系列_6_型号_79英特尔(R) 至强(R)CPU_E5-2686_v4@_2.30GHz_1 已配置。

设备 ACPI\GenuineIntel_-Intel64_系列_6_型号_79英特尔(R) 至强(R)CPU_E5-2686_v4@_2.30GHz_0 已配置。

我不知道是否有任何其他日志可以说明何时将任何 CPU/核心/线程初始化为逻辑处理器。

更新 2:我比较了有问题的机器和正常工作的机器的内容bcdedit /enum Allbdcedit /v发现它们相同(UUID 除外)。我尝试明确设置bcdedit /set NUMPROC 2并重新启动,但没有结果。bcdedit /v

Windows Boot Manager
--------------------
identifier              {9dea862c-5cdd-4e70-acc1-f32b344d4795}
device                  partition=C:
description             Windows Boot Manager
locale                  en-US
inherit                 {7ea2e1ac-2e61-4728-aaa3-896d9d0a9f0e}
bootshutdowndisabled    Yes
default                 {61a8a653-e7da-11e8-a960-0e221fdbf186}
resumeobject            {61a8a652-e7da-11e8-a960-0e221fdbf186}
displayorder            {61a8a653-e7da-11e8-a960-0e221fdbf186}
toolsdisplayorder       {b2721d73-1db4-4c62-bf78-c548a880142d}
timeout                 30

Windows Boot Loader
-------------------
identifier              {61a8a653-e7da-11e8-a960-0e221fdbf186}
device                  partition=C:
path                    \Windows\system32\winload.exe
description             Windows Server
locale                  en-US
inherit                 {6efb52bf-1766-41db-a6b3-0ee5eff72bd7}
recoverysequence        {74e13b1d-b199-11ea-827a-0af4c9a8ea6d}
displaymessageoverride  Recovery
recoveryenabled         Yes
allowedinmemorysettings 0x15000075
osdevice                partition=C:
systemroot              \Windows
resumeobject            {61a8a652-e7da-11e8-a960-0e221fdbf186}
nx                      OptOut
bootstatuspolicy        IgnoreAllFailures

答案1

此问题发生在操作系统级别禁用超线程时。这可能是根据 Microsoft 的建议执行的,旨在防止已知漏洞(称为推测执行侧信道)[1]。

根据“Windows 指南:防范推测执行侧信道漏洞”[2],已启用 Windows 更新并应用 2019 年 7 月 9 日发布的安全更新的客户将自动受到保护。无需进一步配置。

为了解决此问题,我建议按照以下步骤启用超线程:

1. Confirm that Hyper-Threading is disabled by querying the registry using below command:

    •   reg query "HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\Memory Management" /v FeatureSettingsOverride 

    The Hyper-Threading will be disabled if the output is:

    •   HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\Memory Management
    •   FeatureSettingsOverride    REG_DWORD    0x2048

2. Once confirmed, proceed with enabling the Hyper-Threading using the below command:

    •   reg add "HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\Memory Management" /v FeatureSettingsOverride /t REG_DWORD /d 0 /f

3. Restart the instance and check the number of vCPU reported in the OS, which should show the correct number.

参考:

相关内容