mirror of https://github.com/docker/docs.git
Add Test on VTX Detection
Signed-off-by: Jean-Laurent de Morlhon <jeanlaurent@morlhon.net>
This commit is contained in:
parent
84a40bcc06
commit
b7745d7bc4
|
|
@ -10,15 +10,16 @@ import (
|
|||
// IsVTXDisabled checks if VT-X is disabled in the BIOS. If it is, the vm will fail to start.
|
||||
// If we can't be sure it is disabled, we carry on and will check the vm logs after it's started.
|
||||
func (d *Driver) IsVTXDisabled() bool {
|
||||
errmsg := "Couldn't check that VT-X/AMD-v is enabled. Will check that the vm is properly created: %v"
|
||||
features, err := syscall.Sysctl("machdep.cpu.features")
|
||||
if err != nil {
|
||||
log.Debugf(errmsg, err)
|
||||
log.Debugf("Couldn't check that VT-X/AMD-v is enabled. Will check that the vm is properly created: %v", err)
|
||||
return false
|
||||
}
|
||||
return isVTXDisabled(features)
|
||||
}
|
||||
|
||||
disabled := !strings.Contains(features, "VMX")
|
||||
return disabled
|
||||
func isVTXDisabled(features string) bool {
|
||||
return !strings.Contains(features, "VMX")
|
||||
}
|
||||
|
||||
func detectVBoxManageCmd() string {
|
||||
|
|
|
|||
|
|
@ -5,6 +5,12 @@ import (
|
|||
|
||||
"github.com/stretchr/testify/assert"
|
||||
)
|
||||
|
||||
const (
|
||||
featuresWithVMX = "FPU VME DE PSE TSC MSR PAE MCE CX8 APIC SEP MTRR PGE MCA CMOV PAT PSE36 VMX PBE SSE3 PCLMULQDQ DTES64 AVX1.0 RDRAND F16C"
|
||||
featuresNoVMX = "FPU VME DE PSE TSC MSR PAE MCE CX8 APIC SEP MTRR PGE MCA CMOV PAT PSE36 PBE SSE3 PCLMULQDQ DTES64 AVX1.0 RDRAND F16C"
|
||||
)
|
||||
|
||||
func TestShareName(t *testing.T) {
|
||||
name, dir := getShareDriveAndName()
|
||||
|
||||
|
|
@ -12,3 +18,8 @@ func TestShareName(t *testing.T) {
|
|||
assert.Equal(t, dir, "/Users")
|
||||
|
||||
}
|
||||
|
||||
func TestIsVTXEnabled(t *testing.T) {
|
||||
assert.False(t, isVTXDisabled(featuresWithVMX))
|
||||
assert.True(t, isVTXDisabled(featuresNoVMX))
|
||||
}
|
||||
|
|
|
|||
|
|
@ -11,20 +11,21 @@ import (
|
|||
// If we can't be sure it is disabled, we carry on and will check the vm logs after it's started.
|
||||
// We want to check that either vmx or smd flags are present in /proc/cpuinfo.
|
||||
func (d *Driver) IsVTXDisabled() bool {
|
||||
cpuinfo, err := ioutil.ReadFile("/proc/cpuinfo")
|
||||
if err != nil {
|
||||
log.Debugf("Couldn't check that VT-X/AMD-v is enabled. Will check that the vm is properly created: %v", err)
|
||||
return false
|
||||
}
|
||||
return isVTXDisabled(cpuinfo)
|
||||
}
|
||||
|
||||
func isVTXDisabled(cpuinfo []byte) bool {
|
||||
features := [2][]byte{
|
||||
{'v', 'm', 'x'},
|
||||
{'s', 'm', 'd'},
|
||||
}
|
||||
|
||||
errmsg := "Couldn't check that VT-X/AMD-v is enabled. Will check that the vm is properly created: %v"
|
||||
content, err := ioutil.ReadFile("/proc/cpuinfo")
|
||||
if err != nil {
|
||||
log.Debugf(errmsg, err)
|
||||
return false
|
||||
}
|
||||
|
||||
for _, v := range features {
|
||||
if bytes.Contains(content, v) {
|
||||
if bytes.Contains(cpuinfo, v) {
|
||||
return false
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -5,9 +5,110 @@ import (
|
|||
|
||||
"github.com/stretchr/testify/assert"
|
||||
)
|
||||
|
||||
const (
|
||||
amdCPUInfo = `
|
||||
processor : 0
|
||||
vendor_id : GenuineIntel
|
||||
cpu family : 6
|
||||
model : 70
|
||||
model name : Intel(R) Core(TM) i7-4850HQ CPU @ 2.30GHz
|
||||
stepping : 1
|
||||
microcode : 0x19
|
||||
cpu MHz : 2294.688
|
||||
cache size : 6144 KB
|
||||
physical id : 0
|
||||
siblings : 1
|
||||
core id : 0
|
||||
cpu cores : 1
|
||||
apicid : 0
|
||||
initial apicid : 0
|
||||
fpu : yes
|
||||
fpu_exception : yes
|
||||
cpuid level : 13
|
||||
wp : yes
|
||||
flags : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 smd clflush mmx fxsr sse sse2 syscall nx rdtscp lm constant_tsc rep_good nopl xtopology nonstop_tsc pni pclmulqdq monitor ssse3 cx16 sse4_1 sse4_2 movbe popcnt aes xsave avx rdrand hypervisor lahf_lm abm
|
||||
bugs :
|
||||
bogomips : 4589.37
|
||||
clflush size : 64
|
||||
cache_alignment : 64
|
||||
address sizes : 39 bits physical, 48 bits virtual
|
||||
power management:
|
||||
`
|
||||
intelCPUInfo = `
|
||||
processor : 0
|
||||
vendor_id : GenuineIntel
|
||||
cpu family : 6
|
||||
model : 70
|
||||
model name : Intel(R) Core(TM) i7-4850HQ CPU @ 2.30GHz
|
||||
stepping : 1
|
||||
microcode : 0x19
|
||||
cpu MHz : 2294.688
|
||||
cache size : 6144 KB
|
||||
physical id : 0
|
||||
siblings : 1
|
||||
core id : 0
|
||||
cpu cores : 1
|
||||
apicid : 0
|
||||
initial apicid : 0
|
||||
fpu : yes
|
||||
fpu_exception : yes
|
||||
cpuid level : 13
|
||||
wp : yes
|
||||
flags : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr vmx pge mca cmov pat pse36 clflush mmx fxsr sse sse2 syscall nx rdtscp lm constant_tsc rep_good nopl xtopology nonstop_tsc pni pclmulqdq monitor ssse3 cx16 sse4_1 sse4_2 movbe popcnt aes xsave avx rdrand hypervisor lahf_lm abm
|
||||
bugs :
|
||||
bogomips : 4589.37
|
||||
clflush size : 64
|
||||
cache_alignment : 64
|
||||
address sizes : 39 bits physical, 48 bits virtual
|
||||
power management:
|
||||
`
|
||||
|
||||
faultyCPUInfo = `
|
||||
processor : 0
|
||||
vendor_id : GenuineIntel
|
||||
cpu family : 6
|
||||
model : 70
|
||||
model name : Intel(R) Core(TM) i7-4850HQ CPU @ 2.30GHz
|
||||
stepping : 1
|
||||
microcode : 0x19
|
||||
cpu MHz : 2294.688
|
||||
cache size : 6144 KB
|
||||
physical id : 0
|
||||
siblings : 1
|
||||
core id : 0
|
||||
cpu cores : 1
|
||||
apicid : 0
|
||||
initial apicid : 0
|
||||
fpu : yes
|
||||
fpu_exception : yes
|
||||
cpuid level : 13
|
||||
wp : yes
|
||||
flags : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush mmx fxsr sse sse2 syscall nx rdtscp lm constant_tsc rep_good nopl xtopology nonstop_tsc pni pclmulqdq monitor ssse3 cx16 sse4_1 sse4_2 movbe popcnt aes xsave avx rdrand hypervisor lahf_lm abm
|
||||
bugs :
|
||||
bogomips : 4589.37
|
||||
clflush size : 64
|
||||
cache_alignment : 64
|
||||
address sizes : 39 bits physical, 48 bits virtual
|
||||
power management:
|
||||
`
|
||||
)
|
||||
|
||||
func TestShareName(t *testing.T) {
|
||||
name, dir := getShareDriveAndName()
|
||||
|
||||
assert.Equal(t, name, "hosthome")
|
||||
assert.Equal(t, dir, "/home")
|
||||
}
|
||||
|
||||
func TestCpuInfoOnAMD(t *testing.T) {
|
||||
assert.False(t, isVTXDisabled([]byte(amdCPUInfo)))
|
||||
}
|
||||
|
||||
func TestCpuInfoOnIntel(t *testing.T) {
|
||||
assert.False(t, isVTXDisabled([]byte(intelCPUInfo)))
|
||||
}
|
||||
|
||||
func TestCpuInfoOnNone(t *testing.T) {
|
||||
assert.True(t, isVTXDisabled([]byte(faultyCPUInfo)))
|
||||
}
|
||||
|
|
|
|||
Loading…
Reference in New Issue