- VBOX: For hosts who do not have processors with VM extensions try

and disable the use of them at VM creation time.  Certain actions
        within VirtualBox will force enabling them at runtime and cause
        an error (like SMP support) but it should reduce confusion between
        volunteers and projects when a VM configuration change now causes
        a class of machine that used to work suddenly stop working.
    - VBOX: Add some more helpful text notes for error conditions that
        the volunteer might be able to address.  For instance other
        hypervisors locking the VM CPU features for exclusive use.
    - VBOX: If we have to dump out the VM execution log on Windows, remove
        excess carriage returns from the spew.
        
    samples/vboxwrapper/
        vbox.cpp
        vboxwrapper.cpp

svn path=/trunk/boinc/; revision=24907
This commit is contained in:
Rom Walton 2011-12-26 16:27:24 +00:00
parent 73eebc69fc
commit d2de5056eb
3 changed files with 53 additions and 6 deletions

View File

@ -9582,3 +9582,20 @@ David 26 Dec 2011
sched/
sched_result.cpp
Rom 26 Dec 2011
- VBOX: For hosts who do not have processors with VM extensions try
and disable the use of them at VM creation time. Certain actions
within VirtualBox will force enabling them at runtime and cause
an error (like SMP support) but it should reduce confusion between
volunteers and projects when a VM configuration change now causes
a class of machine that used to work suddenly stop working.
- VBOX: Add some more helpful text notes for error conditions that
the volunteer might be able to address. For instance other
hypervisors locking the VM CPU features for exclusive use.
- VBOX: If we have to dump out the VM execution log on Windows, remove
excess carriage returns from the spew.
samples/vboxwrapper/
vbox.cpp
vboxwrapper.cpp

View File

@ -1257,6 +1257,15 @@ int VBOX_VM::get_vm_log(string& log) {
retval = vbm_popen(command, output, "get vm log");
if (retval) return retval;
#ifdef _WIN32
// Remove \r from the log spew
for (string::iterator iter = output.begin(); iter != output.end(); ++iter) {
if (*iter == '\r') {
output.erase(iter);
}
}
#endif
log = output;
return 0;

View File

@ -390,13 +390,17 @@ int main(int argc, char** argv) {
write_checkpoint(checkpoint_cpu_time);
if (vm.crashed || (elapsed_time < vm.job_duration)) {
if (vm_log.find("VERR_VMX_MSR_LOCKED_OR_DISABLED") != std::string::npos) {
fprintf(
stderr,
"%s VM Premature Shutdown Detected!!!\n",
boinc_msg_prefix(buf, sizeof(buf))
);
if ((vm_log.find("VERR_VMX_MSR_LOCKED_OR_DISABLED") != std::string::npos) || (vm_log.find("VERR_SVM_DISABLED") != std::string::npos)) {
fprintf(
stderr,
"%s VM Premature Shutdown Detected!!!\n"
"%s NOTE: BOINC has detected that your processor supports hardware acceleration for virtual machines\n"
"%s but the hypervisor failed to successfully launch with this feature enabled. This means that the\n"
"%s hardware acceleration feature has been disabled in the computers BIOS. Please enable this\n"
"%s but the hypervisor failed to successfully launch with this feature enabled. This means that the\n"
"%s hardware acceleration feature has been disabled in the computers BIOS. Please enable this\n"
"%s feature in your BIOS.\n"
"%s Intel Processors call it 'VT-x'\n"
"%s AMD Processors call it 'AMD-V'\n"
@ -407,13 +411,31 @@ int main(int argc, char** argv) {
boinc_msg_prefix(buf, sizeof(buf)),
boinc_msg_prefix(buf, sizeof(buf)),
boinc_msg_prefix(buf, sizeof(buf)),
boinc_msg_prefix(buf, sizeof(buf))
);
} else if ((vm_log.find("VERR_VMX_IN_VMX_ROOT_MODE") != std::string::npos) || (vm_log.find("VERR_SVM_IN_USE") != std::string::npos)) {
fprintf(
stderr,
"%s NOTE: VirtualBox hypervisor reports that another hypervisor has locked the hardware acceleration\n"
"%s for virtual machines feature in exclusive mode. You'll either need to reconfigure the other hypervisor\n"
"%s to not use the feature exclusively or just shut it down while running BOINC with this project.\n",
boinc_msg_prefix(buf, sizeof(buf)),
boinc_msg_prefix(buf, sizeof(buf)),
boinc_msg_prefix(buf, sizeof(buf))
);
} else if ((vm_log.find("VERR_VMX_NO_VMX") != std::string::npos) || (vm_log.find("VERR_SVM_NO_SVM") != std::string::npos)) {
fprintf(
stderr,
"%s NOTE: VirtualBox has reported an improperly configured virtual machine. It was configured to require\n"
"%s hardware acceleration for virtual machines, but your processor does not support the required feature.\n"
"%s Please report this issue to the project so that it can be addresssed.",
boinc_msg_prefix(buf, sizeof(buf)),
boinc_msg_prefix(buf, sizeof(buf)),
boinc_msg_prefix(buf, sizeof(buf))
);
} else {
fprintf(
stderr,
"%s VM Premature Shutdown Detected!!!\n"
"%s NOTE: This could be like a blue-screen event in Windows, the rest of the information in this file\n"
"%s is diagnostic information generated by the hypervisor.\n"
"%s VM Execution Log:\n\n"
@ -421,7 +443,6 @@ int main(int argc, char** argv) {
boinc_msg_prefix(buf, sizeof(buf)),
boinc_msg_prefix(buf, sizeof(buf)),
boinc_msg_prefix(buf, sizeof(buf)),
boinc_msg_prefix(buf, sizeof(buf)),
vm_log.c_str()
);
}