我们运行了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 All
,bdcedit /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.
参考: