EC2,Windows 10,虚拟处理器的一半。

我们运行的是 t3.large 和 m5.large 实例,它们有2个虚拟CPU(如在EC2管理控制台中显示)。我试图理解为什么 Windows 2019(由我的IT提供的AMI)只能看到一半数量的逻辑CPU。
  • 在任务管理器、msinfo32和Coreinfo中都报告了一半的数量。对于更大的实例(xlarge: 2而不是4),我们也看到了一半的数量。
  • 如果在PowerShell中运行 while($true){},任务管理器将报告100%的使用率,但Cloudwatch将报告50%。
  • 在msconfig中,我只能选择1个CPU(对于大型实例)。
  • 在EC2向导中创建实例时,我使用了默认的vCPUS数量。
  • 如果我使用市场上的 Windows 2019 AMI,我会得到正确数量的逻辑处理器。在这两种情况下,它们都是相同的版本/构建(Windows Server 2019 Datacenter)。
你知道在Windows 10中有哪些配置可能会影响检测到的逻辑处理器数量吗?或者我是否可以激活任何日志来查看CPU是如何被检测到的(类似于Linux中的dmesg命令)。我的IT同事告诉我,他们没有更改过CPU数量或超线程,但是看起来他们的AMI有一些特殊之处。 更新:在事件查看器中,在"Microsoft / Windows / Kernel-PnP"下,我可以看到: 设备 ACPI\GenuineIntel_-Intel64_Family_6_Model_79-_Intel(R)_Xeon(R)CPU_E5-2686_v4@_2.30GHz_1 已配置。 设备 ACPI\GenuineIntel_-Intel64_Family_6_Model_79-_Intel(R)_Xeon(R)CPU_E5-2686_v4@_2.30GHz_0 已配置。 我不知道是否还有其他任何日志可以显示何时将任何CPU/核心/线程初始化为逻辑处理器。 更新2:我比较了有问题和正常工作的机器上和的内容,除了UUID之外是一样的。我尝试了明确设置并重新启动,但没有结果。:
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

bcdedit的文本输出是什么? - Greg Askew
谢谢:在这两种情况下都是一样的(我已经在上面添加了)。 - fskexp
1个回答

这个问题发生在操作系统级别禁用了超线程的情况下。这可能是基于微软的建议,以保护免受已知漏洞“推测执行侧信道”[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.

参考:


1非常感谢您提供的解决方案,它确实有效。我会根据您提到的有用参考资料来检查这个变化是否可接受。 - fskexp