Commit Graph

57 Commits

Author SHA1 Message Date
Rom Walton d291c59d6c VBOX: Fix version check so that it can work with RPM based distros of Linux.
VBOX: Adjust the set_cpu_usage() and set_network_usage() function prototypes to use ints and handle the preference conversion in the calling function.
VBOX: Set the minimum CPU usage value to 5%, if for some reason somebody chooses 0% (on purpose or bug) VirtualBox goes nuts.  This should give the VM at least enough time to render a few frames and eventually boot.
2013-05-01 11:27:04 -04:00
Rom Walton cfca0d215e - VBOX: Record what version of VirtualBox was used, as well as whether
anonymous platform was specified for the project.
2013-03-04 17:24:19 +01:00
Rom Walton 27557feae1 - VBOX: Perform a quick check that the wrapper can communicate with
vboxsvc via vboxmanage before attempting anything else.  If it
        fails, get BOINC to reschedule task execution in 5 minutes.
2013-03-04 17:19:40 +01:00
Rom Walton 6b7190c0eb Line ending changes 2013-03-04 17:12:12 +01:00
Rom Walton e693e2df09 - VBOX: Add the ability to read a fraction done file from the shared
directory.  Use the same semantics as the regular wrapper.
2013-03-04 15:23:38 +01:00
Rom Walton 43c55fd34b - VBOX: Add the ability to specify both the type and model of disk
controller to use.  It can be specified by adding the following
        tags to vbox_job.xml:

        <vm_disk_controller_type></vm_disk_controller_type>
        <vm_disk_controller_model></vm_disk_controller_model>

      Executing vboxmanage --help will list the available options in the
        storeagectl section.
2013-03-04 14:59:23 +01:00
Rom Walton 7621fd21fe - VBOX: Make adjustments to the clean-up procedure for Vbox 4.2. 2013-03-01 16:17:19 +01:00
Rom Walton ba7a0b5945 - VBOX: Cleanup all the snapshots before unregistering the VM. 2013-03-01 16:17:19 +01:00
Rom Walton 527cf846b8 - VBOX: Make deleting a snapshot a non-terminal event.
Deleting stale snapshots now consists of enumerating the existing
        snapshots and deleting all but the most recent snapshot.  This fixes
        the problem where, for one reason or another, a snapshot could not
        be deleted at one point in time.  The wrapper would just continue to
        create new ones and was unable to successfully deal with the older
        ones.  Disk space would eventually run out.
2013-03-01 16:08:53 +01:00
Rom Walton 243db13d3a - VBOX: Remove timeouts for creating and deleting snapshots. 2013-03-01 16:08:52 +01:00
David Anderson b2a4cd4d91 svn path=/trunk/boinc/; revision=25691 2012-05-18 17:38:16 +00:00
Rom Walton f7e7a065de - VBOX: Introduce the use of VM snapshots as a form of checkpoint.
- Perform snapshots at most once every ten minutes.
        - Client suspend/resume messages behave the same.
        - Client no heartbeat/quit messages cause the wrapper to just
          poweroff the VM.
        
        On startup check to see if the last checkpoint time is greater than 0,
        if so, start from the most recent snapshot.
    - VBOX: If we receieve the status message of no heartbeat or quit, set
        the temporary delay to 5 minutes.  If the wrapper is terminated during
        the middle of a snapshot, hopefully this will give VirtualBox enough
        time to complete the snapshot.  Restarting the BOINC job should then
        poweroff the VM and restore from the last snapshot.
    
    samples/vboxwrapper/
        vbox.cpp, .h
        vboxwrapper.cpp

svn path=/trunk/boinc/; revision=25469
2012-03-21 20:03:47 +00:00
Rom Walton 25142dda02 - VBOX: Give the VM process a short priority boost when responding
to a quit request.  On older XP machines it might speed up the memory
        dump to disk.
    - client: Increase the quit request timeout from 10 seconds to 60 seconds for
        machines running VMs and slow disk drives.  It should give the VM enough
        time to gracefully shutdown and not give boinc reason to kill the wrapper.

    client/
        app.h
    samples/vboxwrapper/
        vbox.cpp, .h
        vboxwrapper.cpp

svn path=/trunk/boinc/; revision=25433
2012-03-16 01:04:43 +00:00
Rom Walton bd1d4e5fe8 - VBOX: Demote the priority level of the VM process to try and prevent
latency issues for volunteers.
    - VBOX: If the port forwarding preferred port isn't usable, try asking
        the OS for one.
    - VBOX: On a failure, get the VM process exit code and report it with
        the rest of the stderr spew.

    samples/vboxwrapper/
        vbox.cpp, .h
        vboxwrapper.cpp

svn path=/trunk/boinc/; revision=25133
2012-01-24 04:13:00 +00:00
Rom Walton 0c33c456ec - VBOX: Fix regression where the vm_name wasn't reset back to the
current wu name after deregistering a stale VM.

    samples/vboxwrapper
        vbox.cpp, .h
        vboxwrapper.cpp,

svn path=/trunk/boinc/; revision=25067
2012-01-15 04:35:13 +00:00
Rom Walton 2c54c9735a - VBOX: Report the remote desktop connection information to the
core client.  Next commit will create an extra "VM Console"
        button in the manager when detected.  Volunteers will just have
        to click the button to see what is going on with the VM.

    api/
        boinc_api.cpp, .h
    samples/vboxwrapper
        vbox.cpp, .h
        vboxwrapper.cpp, .h

svn path=/trunk/boinc/; revision=25035
2012-01-12 20:57:23 +00:00
Rom Walton fea602b6e6 - VBOX: Enable remote desktop functionality for a VM that has
<enable_remotedesktop/> specified in its vbox_job.xml file.
        
      NOTE: It does require the VirtualBox extension pack, but that
        is freely available on the VirtualBox download page.
        
    samples/vboxwrapper
        vbox.cpp, .h
        vboxwrapper.cpp, .h

svn path=/trunk/boinc/; revision=25034
2012-01-12 15:54:28 +00:00
David Anderson 125ad03a54 - vboxwrapper: add <pf_host_port> element to config file.
Specifies host port # for port forwarding.
    If absent or zero, assign a port.


svn path=/trunk/boinc/; revision=25030
2012-01-11 23:21:17 +00:00
Rom Walton ba1169107e - VBOX: Sleep for the remainder of the polling period and not the
whole poll period.

    samples/vboxwrapper/
        vbox.cpp, .h
        vboxwrapper.cpp, .h

svn path=/trunk/boinc/; revision=25008
2012-01-07 20:36:48 +00:00
Rom Walton d2784ffc4b - VBOX: Per tester feedback, at an hourly status report to track
network usage.
    - VBOX: For errors where an error code is specified in the output,
        use that value when returning from vbm_open().  Make it easier
        to track failure rates by problem type in the ops pages.
        (Windows Only)
    - VBOX: Try making the process of extracting the hypervisor system
        log more robust, make a temp copy of it in the slot directory.
        Avoid exclusive file lock issues since VboxSvc will still be
        logging to it.
    - VBOX: Change the session lock text to make it clearer that the
        use of other VirtualBox management tools can cause a problem.

        
    samples/vboxwrapper/
        vbox.cpp, .h
        vboxwrapper.cpp

svn path=/trunk/boinc/; revision=24990
2012-01-03 19:06:39 +00:00
Rom Walton b90837d6a5 Quick Updates
svn path=/trunk/boinc/; revision=24978
2012-01-02 17:07:39 +00:00
Rom Walton 5691f06dd6 - VBOX: Fix crashing issue I introduced last night attempting to
extract the hypervisor system log.
    - VBOX: Report the hypervisor system log with any failed vboxmanage
        command that happens during the phase where we setup the VM.
        
    samples/vboxwrapper/
        vbox.cpp, .h

svn path=/trunk/boinc/; revision=24977
2012-01-02 16:58:11 +00:00
Rom Walton 945267b14e - VBOX: If VirtualBox reports an error snag both the hypervisor system
log as well as the VM execution log.  Maybe the hypervisor log
        will tell us what is up with the virtual floppy device.
    - VBOX: Don't retry commands that are expected to fail in normal use
        cases.  It slows down getting the VM up and running.
    - VBOX: After starting the VM, use a timed loop waiting for the initial
        VM state change instead of just waiting for 5 seconds.  Older
        machines can take longer than 5 seconds to switch from poweroff
        to starting.  If we hit the main poll loop in that state the wrapper
        thinks we have crashed.
    - VBOX: Strip carriage returns from all the vboxmanage output on
        Windows.
        
    samples/vboxwrapper/
        vbox.cpp, .h
        vboxwrapper.cpp

svn path=/trunk/boinc/; revision=24967
2012-01-02 04:30:42 +00:00
Rom Walton 0f17e81554 - VBOX: For projects that use vboxwrapper to control how long a VM should run,
treat premature events as failures.  Avoids false positive results.
    - VBOX: Log the VM Execution log if a premature shutdown event has happened.
    - VBOX: Rename config option max_elapsed_time to job_duration.  Choosing
        max_elapsed_time turned out to be a bad choice in that its purpose
        became intermixed with the credit issue(s).

    samples/vboxwrapper/
        vbox.cpp,.h
        vboxwrapper.cpp

svn path=/trunk/boinc/; revision=24894
2011-12-25 20:17:53 +00:00
David Anderson 7f9fc64274 - vboxwrapper: for port-forwarding feature,
allow specification of guest port only.
    Change tag to <pf_guest_port>.
    Separate getting port from registering firewall rule


svn path=/trunk/boinc/; revision=24891
2011-12-25 13:18:51 +00:00
Rom Walton b6a188c250 - VBOX: If an error occurs only log the error once if log_error is true.
samples/vboxwrapper/
        vbox.cpp, .h
    

svn path=/trunk/boinc/; revision=24889
2011-12-25 06:04:24 +00:00
Rom Walton 59f2739cc5 - VBOX: Remove attempts to remove the floppy image from the media registry.
Apparently when the VM is removed from the VirtualBox server process
        it automatically deletes the floppy image from the media registry.
    - VBOX: If a VM crashes for one reason or another, append the VM execution
        log file to the stderr.txt file.  I believe this is what is going on with
        Richard Mitnick's computer.  At the very least we should be able to give
        this to the VirtualBox guys.
    - VBOX: Introduce a way to re-execute commands when a session lock
        event is detected.  A session lock event happens when a volunteer is
        tweaking something about the VM while vboxwrapper is attempting to query
        state information.
        
    samples/vboxwrapper/
        vbox.cpp, .h
        vboxwrapper.cpp, .h

svn path=/trunk/boinc/; revision=24887
2011-12-25 03:57:56 +00:00
Rom Walton 96deec1f03 - VBOX: Rework the unique naming scheme for floppys and disk images so that the slot
id is appended after the name instead of after the extension. Avoid problems
        with the VirtualBox interface.
        
    samples/vboxwrapper/
        vbox.cpp, .h
        vboxwrapper.cpp, .h

svn path=/trunk/boinc/; revision=24880
2011-12-23 20:14:42 +00:00
Rom Walton d8efeb76c0 - VBOX: handle the case where the volunteer has not installed BOINC in the sandboxed
environment and they suspend/resume the VM by the VirtualBox application.
        
    samples/vboxwrapper/
        vbox.cpp, .h
        vboxwrapper.cpp

svn path=/trunk/boinc/; revision=24878
2011-12-23 18:21:48 +00:00
Rom Walton febac394aa - VBOX: Don't log all vbm_popen errors, we expect certain commands to fail when we
are looking at the existing state of the host.
    - VBOX: Reset the output buffer for every command execution.
    - VBOX: Remove the teleporting and snapshotting states from the list of running
        states.
    - VBOX: Remove the '--type floppy' typo when mounting the floppy disk image.
    
    samples/vboxwrapper/
        vbox.cpp, .h

svn path=/trunk/boinc/; revision=24858
2011-12-21 21:58:01 +00:00
Rom Walton 34867cc6f8 - VBOX: Implement a basic mechanism for port forwarding through to the VM.
Some more work will be required if there is ever a need for more than
        one port.  But this should work for now.  This should successfully
        handle running multiple instances of the same job, port information is
        stored in a file called "vbox_firewall.txt" which is updated for each
        execution of the wrapper.
    
    samples/vboxwrapper/
        vbox.cpp, .h
        vboxwrapper.cpp
    win_build/
        vboxwrapper.vcproj

svn path=/trunk/boinc/; revision=24843
2011-12-21 05:55:08 +00:00
Rom Walton 6c1dd9e555 - VBOX: Create a configuration item that specifies the maximum amount of
wall clock time a VM is allowed, if exceeded shutdown gracefully and tell
        BOINC that the job is finished.
        
    samples/vboxwrapper/
        vbox.cpp, .h
        vboxwrapper.cpp

svn path=/trunk/boinc/; revision=24837
2011-12-20 22:59:06 +00:00
Rom Walton 2b463218ed - VBOX: Implement CERN's FloppyIO IPC technology for the VirtualBox wrapper.
samples/vboxwrapper/
        floppyio.cpp, .h
        vbox.cpp, .h
        vboxwrapper.cpp
    win_build/
        vboxwrapper.vcproj

svn path=/trunk/boinc/; revision=24836
2011-12-20 22:12:07 +00:00
Rom Walton 36ef681e28 - VBOX: Use the same mechanism as the multi-threaded apps to determine desired CPU
count for the VM.  VM(s) can now be multi-core.

    samples/vboxwrapper/
        vboxwrapper.cpp
        vbox.cpp, .h

svn path=/trunk/boinc/; revision=24825
2011-12-19 19:10:24 +00:00
Rom Walton 17f11cc577 - VBOX: Remove unused function, I don't remember what I was going to use that
hook for.
      
    samples/vboxwrapper/
        vbox.cpp, .h
        vboxwrapper.cpp

svn path=/trunk/boinc/; revision=24761
2011-12-09 15:05:47 +00:00
Rom Walton 654a187178 - VBOX: More environment variable tweaks.
samples/vboxwrapper/
        vbox.cpp, .h

svn path=/trunk/boinc/; revision=24259
2011-09-22 15:39:08 +00:00
David Anderson d8f20bceea - vboxwrapper: report network usage to the client
- client: include the above in enforcing network quota preferences


svn path=/trunk/boinc/; revision=24227
2011-09-16 19:16:12 +00:00
David Anderson 2bd5b194b2 - vboxwrapper: code cleanup
- use double for potentially large quantities
    - factor out repetitive code, rather than copy and paste


svn path=/trunk/boinc/; revision=24226
2011-09-16 17:25:36 +00:00
Rom Walton e27ee6f152 - VBOX: Add a way to track overall network utilization of a VM.
samples/vboxwrapper/
        vbox.cpp, .h

svn path=/trunk/boinc/; revision=24223
2011-09-15 23:04:10 +00:00
Rom Walton 6c0a8d9035 - VBOX: Add a register_only command line argument to help debug VM related issues.
- VBOX: Add some suggestions to the source on how to debug VM related issues.
    - VBOX: Add a quick sanity check when the enable_shared_directory option is
        enabled.

    samples/vboxwrapper/
        vbox.cpp, .h
        vboxwrapper.cpp

svn path=/trunk/boinc/; revision=24203
2011-09-14 04:16:00 +00:00
David Anderson 4e946854c1 - client/API/vboxwrapper:
add a mechanism so that apps can report sub-processes
    that are not descendants (e.g., virtual machines)
    These processes are then counted as part of the app,
    not as "non-BOINC CPU time".
    This fixes a bug where processing was incorrectly suspended
    because CPU usage by VM apps exceeded the "CPU usage limit" pref.

    Implementation:
    - the PIDs of the processes in question
        are passed from app to client via shared-memory,
        in the app_status channel.
        A new variant of boinc_report_app_status() supports this.
    - the VBox wrapper queries the PID of the VM,
        and reports it in this way.
    - procinfo_app() includes a new argument: a list of PIDs
        that are part of the app, although not ancestrally
        related to the main process.
    - in the client, ACTIVE_TASK now includes a vector "other_pids".
        If this is nonempty, it's passed to procinfo_app().


svn path=/trunk/boinc/; revision=24123
2011-09-02 20:47:05 +00:00
Rom Walton a6de614071 - VboxWrapper: Add a way to extract the VM process id from the VM's
log file.
        
    samples/vboxwrapper/
        vbox.cpp, .h

svn path=/trunk/boinc/; revision=24112
2011-09-02 00:19:05 +00:00
David Anderson 1eed0db2ec - VirtualBox wrapper:
- change names of CPU and network-limiting functions
        to express their units (always do this).
    - wrapper monitors status.suspend_network
        and suspends/resumes network accordingly
    - wrapper sets CPU and network bandwidth limits on startup
        (Rom: should this be done before run() rather than after?)
Note: App versions using this wrapper should always have
    <dont_throttle/> in their version.xml,
    to tell the client that the app throttles itself.


svn path=/trunk/boinc/; revision=24054
2011-08-27 04:13:50 +00:00
Rom Walton 49b9c1bb64 - VboxWrapper: Add functions for enable/disable network and throttling
the CPU and network activity.

    samples/vboxwrapper/
        vbox.cpp, .h

svn path=/trunk/boinc/; revision=24051
2011-08-26 19:19:28 +00:00
David Anderson 306f42e7bc - vbox wrapper: hardwire logical name of image file to "vm_image.vdi".
- vbox wrapper: on startup, rename image file to "vm_image_SLOT.vdi",
    where SLOT is the slot number.
    Vbox requires unique names for VM image files.


svn path=/trunk/boinc/; revision=23930
2011-08-04 00:24:42 +00:00
David Anderson 241e6eaf35 - vbox wrapper: fix parsing of job file
- vbox wrapper: fix code structure
    - merge vm and vbox
    - no global vars


svn path=/trunk/boinc/; revision=23928
2011-08-03 22:36:29 +00:00
Rom Walton 9958851129 - VBOX: Implement basic cpu time accounting and checkpointing
for VMs.

    samples/vboxwrapper/
        vbox.cpp, .h
        vboxwrapper.cpp
        vm.cpp, .h

svn path=/trunk/boinc/; revision=23517
2011-05-09 21:11:37 +00:00
Rom Walton aa0dffdf05 - VBOX: Add function for a host being able to execute tasks within
guest VMs.
        
    samples/vboxwrapper/
        vbox.cpp, .h
        vm.cpp, .h

svn path=/trunk/boinc/; revision=23499
2011-05-04 16:00:12 +00:00
Rom Walton a32054a434 - VBOX: Handle both abort scenarios
samples/vboxwrapper/
        vbox.cpp, .h
        vm.cpp, .h

svn path=/trunk/boinc/; revision=23493
2011-05-03 17:52:55 +00:00
Rom Walton 602f972292 - VBOX: Checkpoint, Re-implement the registering and un-registering of the
vm using the vboxmanage app.

    samples/vboxwrapper/
        vbox.cpp, .h
        vm.cpp, .h

svn path=/trunk/boinc/; revision=23485
2011-04-30 00:26:05 +00:00