Page 1 of 1

"No NX" - Win10(32) Guest on Intel Atom D525 (no VTx/d)

Posted: 14. Feb 2016, 08:09
by p14nd4
For all of you who came in here hoping to yell at me to search the forums because this has been asked a thousand times: I've read the forums. I've run VBoxManage setextradata global VBoxInternal/CPUM/IsaExts/CMPXCHG16B 1. I've run sysinternals coreinfo. PAE is enabled in the VM settings. I think this particular situation hasn't been addressed.

Synopsis:
The host is Debian amd64, 4.3.0 kernel at the moment, running on an Intel Atom D525[1] CPU (no VT-x/d, but does run 64-bit and has NX). I'm running Virtualbox 5.0.14 from the Virtualbox-issued apt repository.

I have Windows 7 (32-bit) installed in a VM currently, and am trying to either upgrade it to Win10 or do a fresh install of Win10. I have Win10_1511_SingleLang_English_x32.iso , which I've tried to boot the VM from (hangs at the blue Win10 logo--waited over 24 hours) and upgrade from within the Windows VM. When attempting to upgrade inside Windows, I get the standard message that everyone's gotten: "This PC's processor doesn't support a critical feature (NX)."

I've read that the CPU must support NX, CMPXCHG16b, PrefetchW and LAHF/SAHF, and according to Sysinternals Coreinfo[2] run inside the VM, all of these things are present. Windows advanced system properties also reports "Your computer's hardware supports DEP" (Data Execution Prevention), which relies on NX[3].

I'm a bit confused by some of the messages I'm seeing in the VBox.log file regarding the decoded CPUID flags. Under the 'Ext Features' for 'Raw Hypervisor CPUID Leaves' there's an entry:
Mnemonic - Description                                  = guest (host)
NX - No-Execute/Execute-Disable                         = 0 (1)
(The only instances of 'NX' in the file are the one above and "PGM: Host paging mode: AMD64+PGE+NX".) I went so far as to try to override the CPUID string for the appropriate leaf:
vboxmanage modifyvm win7 --cpuidset 80000001 00000000 00000000 00000001 00100000
This did show up in the VBox.log as follow, but made no change to the later table of 'Ext Features' noted above, nor the failure to upgrade.
[/CPUM/HostCPUID/80000001/] (level 3)
  eax <integer> = 0x0000000000000000 (0)
  ebx <integer> = 0x0000000000000000 (0)
  ecx <integer> = 0x0000000000000001 (1)
  edx <integer> = 0x0000000000100000 (1 048 576)
...
Raw Extended CPUID Leaves
     Leaf/sub-leaf  eax      ebx      ecx      edx
Gst: 80000001/0000  00000000 00000000 00000001 00000000
Hst:                00000000 00000000 00000001 20100800
So, am I missing something? What else can I try? Am I doing something that isn't actually possible due to hardware limitations? (e.g. I understand that I can't run a 64-bit guest because the CPU lacks VT-x, but it seems like this should work.) In what I consider to be the least likely option, have I discovered a bug?

Thanks! (VBox.log and showvminfo should be attached. Screenshot is here[4], if you care.)

Fake-edit: I'm not allowed to post URLs yet, so I'm doing Wikipedia-style references with oh-so-cleverly disguised links. Replace the space with a period.
[1] ark.intel com/products/49490/Intel-Atom-Processor-D525-1M-Cache-1_80-GHz
[2] technet.microsoft com/en-us/sysinternals/cc835722.aspx
[3] en.wikipedia org/wiki/Data_Execution_Prevention#Mode_of_enforcement
[4] imgur com/OCQYslG

Re: "No NX" - Win10(32) Guest on Intel Atom D525 (no VTx/d)

Posted: 14. Feb 2016, 17:20
by loukingjr
FWIW, Windows 8.1 and Windows 10 require VT-x, even the 32bit versions.

Re: "No NX" - Win10(32) Guest on Intel Atom D525 (no VTx/d)

Posted: 14. Feb 2016, 22:15
by michaln
p14nd4 wrote: In what I consider to be the least likely option, have I discovered a bug?
No. This is known behavior of VirtualBox. As loukingjr says, Windows 8.1 and 10 guests require hardware virtualization in VirtualBox, regardless of bitness.

Without going into too much detail, the number of systems that can run Windows 10 but do not have VT-x is far too small to justify the effort of supporting them without hardware virtualization. Effectively it's a mix of hardware and software limitations.

Re: "No NX" - Win10(32) Guest on Intel Atom D525 (no VTx/d)

Posted: 14. Feb 2016, 22:16
by p14nd4
loukingjr wrote:FWIW, Windows 8.1 and Windows 10 require VT-x, even the 32bit versions.
Do you have a source for that? (And are you saying that's a requirement for the host running VirtualBox, or for the guest?)

I can't find anything to support the claim that Windows 8.1/10 require VT-x even in 64-bit versions, let alone 32-bit versions. Here's[1] info on Windows 8 requiring SSE2, PAE, and NX, and here's[2] further technical detail of the same info, even going so far as to suggest the use of CoreInfo to verify the features. (The only implicit/transitive reference I see to VT-x is the requirement for second-level address translation (SLAT) to use Hyper-V[3]; SLAT doesn't exist without hardware virtualization instructions.)

I'm a little curious about the statistics upon machine shutdown, where I see something like:
02:18:49.717901 ************************* Statistics *************************
02:18:49.759850 /CPUM/MSR-Totals/Reads                828 times
02:18:49.801266 /CPUM/MSR-Totals/ReadsRaisingGP         0 times
02:18:49.842886 /CPUM/MSR-Totals/ReadsUnknown         150 times
02:18:49.884704 /CPUM/MSR-Totals/Writes               324 times
02:18:49.926325 /CPUM/MSR-Totals/WritesRaisingGP        0 times
02:18:49.968128 /CPUM/MSR-Totals/WritesToIgnoredBits    2 times
02:18:50.009772 /CPUM/MSR-Totals/WritesUnknown          0 times
I wonder if this is indicative of attempts by the Windows 10 Upgrade app (/compatibility assessment) to use MSRs (Intel CPU model-specific registers) to evaluate the presence/functionality of NX, in such a manner that isn't supported by VBox paravirtualization.

[1] windows.microsoft com/en-us/windows-8/what-is-pae-nx-sse2
[2] technet.microsoft com/en-us/library/dn482072.aspx
[3] microsoft com/en-us/windows/windows-10-specifications#reqs

Re: "No NX" - Win10(32) Guest on Intel Atom D525 (no VTx/d)

Posted: 14. Feb 2016, 22:21
by p14nd4
michaln wrote:This is known behavior of VirtualBox. [...] Windows 8.1 and 10 guests require hardware virtualization in VirtualBox, regardless of bitness.

Without going into too much detail, the number of systems that can run Windows 10 but do not have VT-x is far too small to justify the effort of supporting them without hardware virtualization. Effectively it's a mix of hardware and software limitations.
Gotcha; thanks for the clarification!

Perhaps I can try to do something productive with the rest of my weekend rather than beating my head against what I now know is an effectively futile effort (since I'm not going to learn enough about the VBox internals and IA32/Intel 64 instruction sets to try to implement it myself). :)

P.S. Sorry if this double-posts; I swore I hit submit, but I don't see the post showing up.

Re: "No NX" - Win10(32) Guest on Intel Atom D525 (no VTx/d)

Posted: 14. Feb 2016, 22:23
by Martin
http://www.virtualbox.org/manual/ch03.h ... tossupport
Windows 2000 / XP / Server 2003 / Vista / Server 2008 / Windows 7 / Windows 8 / Windows 8.1 / Windows 10 RTM 10240 / Server 2012
All versions, editions and service packs are fully supported (including 64-bit versions, under the preconditions listed below). Guest Additions are available. Windows 8 and later requires hardware virtualization to be enabled.