From 04285a19df56cc0456ea52fa21f47565ee6bb29d Mon Sep 17 00:00:00 2001 From: Rom Walton <rwalton@ssl.berkeley.edu> Date: Wed, 25 Mar 2015 16:09:07 -0400 Subject: [PATCH] VBOX: Add a configuration option to turn-off automatic check-pointing. Projects may want to handle check-pointing within their own application and skip the disk intensive requirements of a VM snapshot. --- samples/vboxwrapper/vbox_mscom_impl.cpp | 4 ++++ samples/vboxwrapper/vbox_vboxmanage.cpp | 6 +++++- samples/vboxwrapper/vboxjob.cpp | 6 ++++-- samples/vboxwrapper/vboxjob.h | 3 +++ samples/vboxwrapper/vboxwrapper.cpp | 2 +- 5 files changed, 17 insertions(+), 4 deletions(-) diff --git a/samples/vboxwrapper/vbox_mscom_impl.cpp b/samples/vboxwrapper/vbox_mscom_impl.cpp index 6d5d878385..4a8c099aa5 100644 --- a/samples/vboxwrapper/vbox_mscom_impl.cpp +++ b/samples/vboxwrapper/vbox_mscom_impl.cpp @@ -1544,6 +1544,8 @@ int VBOX_VM::create_snapshot(double elapsed_time) { CComPtr<IConsole> pConsole; CComPtr<IProgress> pProgress; + if (disable_automatic_checkpoints) return BOINC_SUCCESS; + vboxlog_msg("Creating new snapshot for VM."); // Pause VM - Try and avoid the live snapshot and trigger an online @@ -1646,6 +1648,8 @@ int VBOX_VM::restore_snapshot() { CComPtr<ISnapshot> pSnapshot; CComPtr<IProgress> pProgress; + if (disable_automatic_checkpoints) return BOINC_SUCCESS; + rc = m_pPrivate->m_pVirtualBox->FindMachine(CComBSTR(vm_name.c_str()), &pMachineRO); if (SUCCEEDED(rc)) { rc = pSession.CoCreateInstance(CLSID_Session); diff --git a/samples/vboxwrapper/vbox_vboxmanage.cpp b/samples/vboxwrapper/vbox_vboxmanage.cpp index 37b0e4e093..44805be255 100644 --- a/samples/vboxwrapper/vbox_vboxmanage.cpp +++ b/samples/vboxwrapper/vbox_vboxmanage.cpp @@ -1140,7 +1140,9 @@ int VBOX_VM::create_snapshot(double elapsed_time) { string command; string output; char buf[256]; - int retval; + int retval = BOINC_SUCCESS; + + if (disable_automatic_checkpoints) return BOINC_SUCCESS; vboxlog_msg("Creating new snapshot for VM."); @@ -1253,6 +1255,8 @@ int VBOX_VM::restore_snapshot() { string output; int retval = BOINC_SUCCESS; + if (disable_automatic_checkpoints) return BOINC_SUCCESS; + vboxlog_msg("Restore from previously saved snapshot."); command = "snapshot \"" + vm_name + "\" "; diff --git a/samples/vboxwrapper/vboxjob.cpp b/samples/vboxwrapper/vboxjob.cpp index 6d86dc9bae..79b4e95ee5 100644 --- a/samples/vboxwrapper/vboxjob.cpp +++ b/samples/vboxwrapper/vboxjob.cpp @@ -112,11 +112,12 @@ void VBOX_JOB::clear() { enable_floppyio = false; enable_cache_disk = false; enable_isocontextualization = false; + enable_network = false; + network_bridged_mode = false; enable_remotedesktop = false; enable_gbac = false; enable_graphics_support = false; - enable_network = false; - network_bridged_mode = false; + disable_automatic_checkpoints = false; pf_guest_port = 0; pf_host_port = 0; port_forwards.clear(); @@ -168,6 +169,7 @@ int VBOX_JOB::parse() { else if (xp.parse_bool("enable_remotedesktop", enable_remotedesktop)) continue; else if (xp.parse_bool("enable_gbac", enable_gbac)) continue; else if (xp.parse_bool("enable_graphics_support", enable_graphics_support)) continue; + else if (xp.parse_bool("disable_automatic_checkpoints", disable_automatic_checkpoints)) continue; else if (xp.parse_int("pf_guest_port", pf_guest_port)) continue; else if (xp.parse_int("pf_host_port", pf_host_port)) continue; else if (xp.parse_string("copy_to_shared", str)) { diff --git a/samples/vboxwrapper/vboxjob.h b/samples/vboxwrapper/vboxjob.h index a8bdd7f129..c60fdfd9e6 100644 --- a/samples/vboxwrapper/vboxjob.h +++ b/samples/vboxwrapper/vboxjob.h @@ -102,6 +102,9 @@ public: // http://boinc.berkeley.edu/trac/wiki/GraphicsApi#File bool enable_graphics_support; + // whether to disable automatic checkpoint support + bool disable_automatic_checkpoints; + // maximum amount of wall-clock time this VM is allowed to run before // considering itself done. double job_duration; diff --git a/samples/vboxwrapper/vboxwrapper.cpp b/samples/vboxwrapper/vboxwrapper.cpp index 69c16adec0..5d3b7f701d 100644 --- a/samples/vboxwrapper/vboxwrapper.cpp +++ b/samples/vboxwrapper/vboxwrapper.cpp @@ -689,7 +689,7 @@ int main(int argc, char** argv) { return EXIT_TIME_LIMIT_EXCEEDED; } - retval = pVM->run((current_cpu_time > 0)); + retval = pVM->run(current_cpu_time > 0); if (retval) { // All 'failure to start' errors are unrecoverable by default bool unrecoverable_error = true; -- GitLab