guest VM is 64-bit. 64-bit guest vms require hardware virtualization
and should fail without it.
- VBOX: Implement the <copy_to_shared/> directive in the vbox_job.xml file.
if <copy_to_shared>init_data.xml</copy_to_shared> is set, the wrapper will
copy the init_data.xml file to the shared directory before the VM is launched.
svn path=/trunk/boinc/; revision=25973
the power management window proc, it was removed during one of the Win9x
code scrubs. When we see it, inform the client it is time to shutdown.
client/
sysmon_win.cpp
svn path=/trunk/boinc/; revision=25882
- allow to augment CFLAGS and CXXFLAGS
- allow to at least set DEBUG flags externally, such that
backtrace flags can be used
- minor textual fixes (whitespace error, typo in comment)
svn path=/trunk/boinc/; revision=25881
keep the RESULT record so that we can report it to the scheduler.
Otherwise we'll keep getting the same job if the project has
<resend_lost_results> set.
svn path=/trunk/boinc/; revision=25879
and change types of mem-size fields from int to double.
These fields are size_t in NVIDIA's version of this;
however, cuDeviceGetAttribute() returns them as int,
so I don't see where this makes any difference.
- client: fix bug in handling of <no_rsc_apps> element.
- scheduler: message tweaks.
Note: [foo] means that the message is enabled by <debug_foo>.
svn path=/trunk/boinc/; revision=25849
Otherwise it doesn't work for files >= 2GB
- Client: TIME_STATS::trim_stats_log() wasn't working because
it's called in the constructor of TIME_STATS,
which is called before we've done a chdir() to the data dir.
Note: for this reason, no disk access should be done in constructors
of global objects. A quick scan found no instances of this.
svn path=/trunk/boinc/; revision=25846
- Fix various #include issues.
CODING STYLE LAW (minimal inclusion principle):
If foo.cpp requires <blah.h>,
#include <blah.h> in foo.cpp, NOT foo.h
svn path=/trunk/boinc/; revision=25837
and there's a simple reason
(e.g. the project is suspended, no-new-tasks, downloads stalled, etc.)
show it in the event lot.
If the reason is more complex, don't try to explain.
svn path=/trunk/boinc/; revision=25827
- validator: add some sanity-checking for credit,
to prevent granting 1e38 credit.
max_granted_credit now defaults to the equivalent of 1 TeraFLOP-year.
Instances that exceed this are not counted in the credit
calculation, and a critical-mode log message is written
- wrapper: remove wall_cpu_time; not used anymore
svn path=/trunk/boinc/; revision=25825
- feeder: don't enumerate results for WUs with nonzero error_mask
- scheduler: in slow_check(), make sure the WU error_mask is still zero
svn path=/trunk/boinc/; revision=25822
1) a network connection is available and
2) network communication is allowed and
3) CPU computation is allowed
- If an app version is marked as needs_network,
use the above fraction in estimating its rate of progress
- replace "core client" with "client" in comments.
- scheduler: message tweaks
svn path=/trunk/boinc/; revision=25803
a given app that have different platforms and different version #s.
The client was erroneously deleting the one w/ the lower version
when it was no longer in use.
Fix: in garbage collection, consider one version to supercede another
only if they have the same platform
svn path=/trunk/boinc/; revision=25770
- added the definitions for the new Windows 7/2008r2 preSP1
and Windows 8/2012 SKUs based on the winnt.h
from the Windows 8 RC SKD (also added as proof)
- added the detection for some more Windows SKU
- Updates provided by Teamwork of Planet3Dnow.de to coproc_detect.cpp
- added CAL_TARGET_ID 21 as : AMD Radeon HD 78x0 series (Pitcairn)
(from [P3D] Crashtest)
svn path=/trunk/boinc/; revision=25760
moved app_ipc.h inclusion outside __cplusplus
since it contains important C mode prototypes
(boinc_resolve_filename() etc.)
svn path=/trunk/boinc/; revision=25752
- consistently accept both 'ati' and 'amd' for AMD/ATI plan classes
- in OpenCL plan classes always use device memory reported via OpenCL
(might be different e.g. from what's available/reported via CUDA)
- comment formatting
svn path=/trunk/boinc/; revision=25744
performed for a particular app version. It is not necessary
to tell the user to upgrade the client just to suite the needs of
a particular app version if this app version requires resources
that the host dosn't have or didn't request work for.
Actually I don't think it's good to tell the user he needs to
upgrade the client if there is only one particular app version
that requires a more recent one than he has. I think that the
purpose of the g_wreq->outdated_client flag was checking the
min_core_version in the project configuration. For this the
flag and the notice/message that it triggers is still ok. But
in the app version checks setting this flag leads to misleading
messages in most cases, so I commented that out for now.
I'm not sure, though, that both of these measurements are needed.
svn path=/trunk/boinc/; revision=25742
Both are for use by project.
- job submission file sandbox: don't delete physical file
when delete sandbox entry.
We'll have to figure out how to garbage-collect physical files.
- LAMMPS job submission:
use the 50th-percentile host,not 0th
svn path=/trunk/boinc/; revision=25734
This reruns validation for instances that are successful
but marked as invalid or inconclusive.
Use this if you changed your validator to be more permissive,
and you want to grant credit for instances that were
originally marked as invalid.
svn path=/trunk/boinc/; revision=25714
but checks for the "stop_daemons" trigger file every 1 sec.
Use this instead of sleep() in daemons.
This will speed up bin/stop.
svn path=/trunk/boinc/; revision=25708
lets an application report its network usage to BOINC,
and hence take it into account with monthly limits etc.
- API: get rid of deprecated boinc_ops_per_cpu_sec(),
boinc_ops_cumulative(), and
boinc_set_credit_claim();
- admin web: update manage_apps.php;
add the ability to set homogeneous app version
svn path=/trunk/boinc/; revision=25700
will get a bunch of work in a future commit.
clientgui/
ProjectInfoPage.cpp, .h
clientgui/res/
openclicon.xpm (deleted)
multicore.xpm (deleted)
svn path=/trunk/boinc/; revision=25696
Set it to the timezone specified by the constant TIMEZONE
(in project.inc) or "UTC" if none specified.
- web: fix bugs in submit.php
svn path=/trunk/boinc/; revision=25693
- client: Update the stock all_project_list.xml file we send out
with new client software.
clientgui/res/
openclicon.xpm
win_build/installerv2/redist/
all_projects_list.xml
svn path=/trunk/boinc/; revision=25679
new port number to work with convert it from network byte order
(big endian) to the host byte order (little endian on x86/x64 processors).
samples/vboxwrapper/
vbox.cpp
svn path=/trunk/boinc/; revision=25671
- store file sizes as double rather than int
- if we're appending to log files, initialize the
size variables to the current size
- check return value of fprintf, only increment size if it's +
- when rotate log file, reset size var to zero
svn path=/trunk/boinc/; revision=25669
being written to stderr instead.
- lib: Keep track of the rough estimate of stdout and stderr by
incrementing internal variables instead of doing a stat on
each log write. stat() on Windows is converted to a FindFirstFile()
call which in turn looks up the file size information in the
directory structure file system entry. The directory structure
information is only updated periodically. This lead to larger
than expected log file for both the manager and core client.
This has the added advantage of reducing the overall number of
file I/O operations when logging information.
lib/
diagnostics.cpp
svn path=/trunk/boinc/; revision=25666
make sure that the GPU supports it
(fix bug where sometimes, e.g. CUDA detection fails
but OpenCL succeeds, and we have a CUDA app).
svn path=/trunk/boinc/; revision=25630
- client: if acct mgr sends us an account with no authenticator,
show an error message instead of trying to attach
svn path=/trunk/boinc/; revision=25608
window messages. In effect, let Windows do the default thing. This removes
the hacks which kept the screensaver running with old versions of
Microsoft's keyboard/mouse driver software installed.
clientscr/
screensaver_win.cpp, .h
svn path=/trunk/boinc/; revision=25607
in send_work_setup(), so that they run before lost jobs are resent.
Otherwise lost jobs could get sent using an app version
that's prohibited by prefs
svn path=/trunk/boinc/; revision=25604
(whereas they didn't do this w/ older clients).
On Windows, the client uses TerminateProcess(h, 1) to kill processes;
the 1 is the exit code the process will appear to have.
So instead, add a "will_restart" bool arg to the various kill
functions, and if set use 0 (= STATUS_SUCCESS),
otherwise use EXIT_ABORTED_BY_CLIENT.
Note: in principle this shouldn't make any difference
for quitting tasks,
since handle_exited_app() checks for task state QUIT_PENDING
and ignores the exit code in that case.
The only place I can see where it would make any difference
is when we kill a process because it hasn't been handling
queued shared-memory messages for 180 seconds.
- client: add more info to the message about an exited app
- client: function return values (ERR_*) are different from
process exit codes (EXIT_*).
But in many places we were using return values as exit codes.
Fix these.
Also, break out the different types of limits a job can exceed
(time, disk, memory) into difference exit codes.
svn path=/trunk/boinc/; revision=25601
if you have
*pbuf = HeapAlloc(...)
then you need
if (*pbuf == NULL)
not
if (pbuf == NULL)
- various code cleanups from
- Makefile.am: don't include clientgui/res; nothing to make there
from Steffen Moeller
svn path=/trunk/boinc/; revision=25599
had a parse error, and it included project files.
While parsing the scheduler reply we'd add FILE_REFs to
PROJECT::project_files,
but wouldn't link them to FILE_INFOs since this is done
only if the reply parses correctly.
The next garbage_collect() would dereference these NULL pointers.
Solution: parse the FILE_REFS into SCHEDULER_REPLY::project_files.
Copy this to PROJECT::project_files only if the reply parses.
svn path=/trunk/boinc/; revision=25598
on each request.
- client: when showing how much work a scheduler request returned,
scale by availability (as is done to show the amount of the request)
- client in account manager request, <not_started_dur> and
<in_progress_dur> are in wall time, not run time
(i.e. scale them by availability)
Note: there's some confusion in the code between runtime and wall time,
where in general wall time = runtime / availability.
New convention: let's use "runtime" for the former,
and "duration" for the latter.
svn path=/trunk/boinc/; revision=25597
to add the boinc_master account to the boinc_admins group when
installing in the non-service install mode. boinc_master is only
created during service installs. This was causing a setup failure
on Windows 8. As far as I can tell it should have also been failing
on Win7 and WinVista.
win_build/installerv2/redist/Windows/src/boinccas/
boinccas.rc
CACreateBOINCGroups.cpp
win_build/installerv2/redist/Windows/Win32/
boinccas.dll
boinccas95.dll
win_build/installerv2/redist/Windows/x64/
boinccas.dll
boinccas95.dll
svn path=/trunk/boinc/; revision=25594
(or at least the last double).
This accommodates a particular application (LAMMPS)
that can only append to this file.
- CAS@home stuff
svn path=/trunk/boinc/; revision=25557
If you link your functions (init_result(), compare_results(),
cleanup_result()) with validate_test.cpp,
you'll get a program that you can run as
validate_test file1 file2
and it will compare the two files
(this works only for validators that expect 1 file per result).
I added a makefile, sched/makefile_validator_test,
that you can use for this.
- server: shuffle code so that the above doesn't need to
link MySQL libraries
- client: if we fetch a master file and it contains no scheduler URLs,
show a message of class INTERNAL_ERROR
- client/scheduler: make CUDA_DEVICE_PROP.totalGlobalMem a double,
and remove dtotalGlobalMem.
Although NVIDIA reports RAM size as a size_t,
there's no reason to store it as an integer after that.
svn path=/trunk/boinc/; revision=25542
of NVIDIA APIs. This apparently caused crashes
(in app, not client, which I don't understand) for Einstein@Home.
From Steffen Moller.
svn path=/trunk/boinc/; revision=25527
and it timed out and we killed it, we'd treat it as a job error.
(This was a major bug).
- API: remove BOINC_STATUS::suspend_request.
I meant to do this before.
svn path=/trunk/boinc/; revision=25498
not just when a result becomes ready to upload.
Fix bug where a scheduler RPC to report results is done
even though uploads are active.
- client: cpu_sched_debug enables messages about not scheduling jobs
because of insufficient RAM
svn path=/trunk/boinc/; revision=25493
compute capability 3.x.
Not sure if the parameters are right
(128 cores/proc, 2 flops/clock)
but they're better than nothing.
- web: don't allow user names that have leading or trailing white space,
or HTML tags, or are empty
svn path=/trunk/boinc/; revision=25485
the first few jobs of a new application
(in wu_estimated_pfc(), only multiply by app.min_avg_pfc
if it's nonzero).
svn path=/trunk/boinc/; revision=25484
to delete stale snapshots. Slower machines can take longer than
45 seconds to complete the deletion of old snapshots.
samples/vboxwrapper/
vbox.cpp
svn path=/trunk/boinc/; revision=25474
Reschedule the job for some time in the future when there might
be enough memory.
- VBOX: Resume the VM's execution after the creation of the snapshot
but before we attempt to delete the previous, now stale, snapshot.
- VBOX: Treat the 'livesnapshotting', 'deletingsnapshotlive', and
'deletingsnapshotlivepaused' states as online states.
samples/vboxwrapper/
vbox.cpp
vboxwrapper.cpp
svn path=/trunk/boinc/; revision=25473
This changes the snapshot type from a live snapshot to an online
snapshot. Presumably difference might make it easier to do and
prevent the VM from asserting.
samples/vboxwrapper/
vbox.cpp, .h
svn path=/trunk/boinc/; revision=25472
- VBOX: Change the snapshot naming scheme by removing the quotes and
prefixing the checkpoint time with 'boinc_'. Hopefully this will
prevent the VM from asserting during the snapshot process.
samples/vboxwrapper/
vbox.cpp, .h
svn path=/trunk/boinc/; revision=25471
(time between sending app a quit/abort message
and, if not exited yet, killing it)
- client: if app has reported an "other PID"
(e.g., vboxwrapper reports the VBoxHeadless PID)
then include it (along with descendants) in the
list of processes we kill when killing the job.
svn path=/trunk/boinc/; revision=25470
- 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
This was presumably the cause of the recent Einstein@home problem.
- client: set file ownership and permissions after an async copy.
- client: set file ownership and permissions after a
regular (non-async) copy.
The latter 2 bugs would affect a VM app that copies
its executable to slot/x/shared
svn path=/trunk/boinc/; revision=25468
in plan_class_spec by using coproc_pref() and capped_host_fpops()
(moved coproc_perf() to sched_customize.h to make it available
in plan_class_spec.cpp, and cleaned up includes)
svn path=/trunk/boinc/; revision=25467
If somebody didn't populate the reason when calling boinc_temporary_exit
the buffer contained junk.
client/
app_control.cpp
svn path=/trunk/boinc/; revision=25466
the CernVMWrapper would. This allows both wrapppers to work with
the same BOINC job generation system.
samples/vboxwrapper/
vbox.cpp
svn path=/trunk/boinc/; revision=25463
request was. Hopefully this will give us insight into whether
the core client is terminating the wrapper or something else is
going on.
- VBOX: Shorten the command execution timeout to 45 seconds.
- VBOX: Don't attempt to re-execute the close/savestate commands.
samples/vboxwrapper/
vbox.cpp
svn path=/trunk/boinc/; revision=25462
for which the anonymous-platform client doesn't have a version)
mark it as sent so the transitioner can do its thing
svn path=/trunk/boinc/; revision=25461
don't show the "no finish file" message;
not sure why this was there in the first place.
- client: if an app process exits because of a signal,
show the signal correctly
svn path=/trunk/boinc/; revision=25459
On some systems they use significant CPU time while VMs are running.
TODO: do this only if we're actually running a VBox app
svn path=/trunk/boinc/; revision=25455
- fix bug that could greatly overcommit CPUs
if there are several EDF jobs and several non-EDF GPU jobs.
- don't overcommit CPUs if any job is MT (MT means avg_ncpus > 1).
For example, on a 4-CPU machine we will run:
a 0.5-CPU GPU job and 4 1-CPU jobs
but not
a 0.5-CPU GPU job and 1 4-CPU job
svn path=/trunk/boinc/; revision=25442
and to report the platform as "arm-android".
From Carl Christensen.
- Add a script for building BOINC and library dependencies on Android
From Peter Hanappe.
svn path=/trunk/boinc/; revision=25440
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
make per-HR slot allocation an option rather than the default.
Kevin reported that slot allocation wasn't working for WCG.
The default is now no slot allocation,
and use the regular result enumeration function
rather than the once that scans the entire table.
The config flag for enabling slot allocation is <hr_allocate_slots/>.
svn path=/trunk/boinc/; revision=25432
before allowing another attempt to start the VM when the hypervisor
cannot allocate enough memory.
- VBOX: Print out a trace statement about the suspend/resume directive
from the vboxwrapper perspective. This in conjuction with the
BOINC API trace statements should provide a better idea with
what is going on.
samples/vboxwrapper
vboxwrapper.cpp
svn path=/trunk/boinc/; revision=25424
temporarily exit so BOINC can reschedule it for a later time.
If the problem doesn't go away it'll just time out eventually anyway.
samples/vboxsamples/
vboxwrapper.cpp
svn path=/trunk/boinc/; revision=25404
- VBOX: Switch to using status.suspend_request instead of status.suspend
when determining when to suspend/resume a VM. status.suspended is
now only changed when direct_process_action is set to true.
samples/vboxwrapper/
vboxwrapper.cpp
vbox.cpp
svn path=/trunk/boinc/; revision=25394
show if a GPU type is excluded by configuration
- client: don't fetch work for a resource type if all instances
of that type are excluded
- web: don't use filter_var(, FILTER_SANITIZE_STRING)
to strip HTML tags from a string.
This escapes singles quotes also.
Use strip_tags() instead.
svn path=/trunk/boinc/; revision=25375
commands if a session lock error has been detected. Cap the overall
delay to 30 seconds total for a single command.
Experiments performed by jujube(T4T) suggest changing the sleep interval
to an exponential style backoff would increase our chances of recovering in
situations where the previous lock is held by a previous instance of
vboxmanage whos instance data hasn't been cleaned up within vboxsvc yet.
client/
vbox.cpp
svn path=/trunk/boinc/; revision=25359
Previously (little known) the scheduler could be hacked to preserve
the sched_request.xml and sched_reply.xml in own directories
(you had to modify the initial value of use_files in sched_main.cpp).
This feature could now be switched on and off on the fly just by
changing the project config.
When there is an (existing) directory configured as
<debug_req_reply_dir>, each schduler instance will write three
files in there: PID_C_sched.log, PID_C_sched_request.xml and (if all
goes well) PID_C_sched_reply.xml. PID is the process id of this
scheduler instance, C is an internal counter within the process if
FCGI is used. The sched.log will contain nothing else than the
pid and the IP address of the client. This should allow for
identifying the scheduler instance responsible for a given
apache error log message ("premature end of script headers") when
a scheduler crashed. sched_request.xml (obviously) is the scheduler
request, and if the scheduler doesn't crash in between, there will
also be the reply to the client kept in sched_reply.xml
Remove the <debug_req_reply_dir> tag from the project config
to turn this feature off.
svn path=/trunk/boinc/; revision=25349
one instance together in the scheduler.log when multiple instances are
running. Currently the buffer has a fixed size of 32768 charaters.
On one hand with much debug output this buffer may turn out to be
too small. OTOH the log of this instance is completely lost in case
of a crash, which doesn't help with debugging. Thus make the
scheduler log buffer size configurable using the tag
<scheduler_log_buffer> in project config. The default value is
still the old size (32768), set it to 0 to disable buffering
completely, e.g. for debugging.
svn path=/trunk/boinc/; revision=25348
not scan the host table. This was previously hardcoded for
Einstein@home to prevent some users with many (identical) hosts
from flooding the DB with slow queries. Now add
<dont_search_host_for_userid>userid</dont_search_host_for_userid>
to the project config (in config.xml) for each such userid.
svn path=/trunk/boinc/; revision=25346
by default we skip app versions that use a resource
for which work has not been requested.
This is determined by the "check_req" arg to get_app_version().
This flag is cleared whenever we want to send a job
regardless of whether a requested resource can be used:
namely, when resending lost jobs, and when sending assigned jobs.
Fix a bug that could skip unrequested versions even
when check_req is false.
NOTES:
1) The current semantics aren't right.
When check_req is false, we selected the fastest of all app versions,
including those for which no work is requested.
Instead, we should select the fastest of the versions
for which work is requested if there are any;
otherwise, select the fastest version.
2) The mechanism isn't implemented for anonymous platform.
It should be.
3) If we've cached an answer (including NULL) for a given
value of check_req, that answer may be wrong for a different value.
svn path=/trunk/boinc/; revision=25342
file_deleter.cpp into a separate program,
since it blocks normal file deletion while it's running.
From Bernd.
- storage stuff
svn path=/trunk/boinc/; revision=25321
boinc_temporary_exit(),
explaining why the app is exiting.
Convey this to the client, and then to the Manager,
and display it there and in the log.
clientgui/
MainDocument.cpp
lib/
gui_rpc_client_ops.cpp
gui_rpc_client.h
api/
boinc_api.cpp,h
client/
client_types.cpp,h
app.h
app_control.cpp
svn path=/trunk/boinc/; revision=25315
to be sent to non-targeted hosts.
The feeder was erroneously putting targeted jobs
in the shared mem cache.
Changes:
- The feeder only enumerates jobs for which
workunit.transitioner_flags is zero.
NOTE: this field is nonzero iff the job is assigned.
- create_work: when creating an assigned jobs,
set workunit.transitioner_flags appropriately
svn path=/trunk/boinc/; revision=25314
The old policy avoided running an N-CPU job unless N CPUs were free.
This could result in idle CPUs for long periods; for example:
on a 4-CPU machine, suppose you have a long 1-CPU job in EDF mode,
and some 4-CPU jobs.
3 CPUs will be idle until the 1-CPU job finishes.
Furthermore, the work fetch mechanism won't try to get
jobs (possibly non-MT) from other projects,
because the RR simulation doesn't reflect the scheduling
policy's exclusion principle.
The change: schedule jobs until ncpus_used >= ncpus.
E.g. in the above situation run the 1- and 4-CPU jobs together.
In extreme cases we might run 3 1-CPU jobs and the 4-CPU job.
This will degrade the performance of the 4-CPU job,
but that's probably better than having idle CPUs.
svn path=/trunk/boinc/; revision=25312
we multiple projected FLOPS by a normal random var
with mean 1 and stddev 0.1.
Make the stddev configurable; in particular it can be zero.
svn path=/trunk/boinc/; revision=25311
in which the tiebreaker is MD5 of name.
That way the order is stable
(it doesn't change from one run of the client to the next)
and it doesn't grep results with similar names
(and hence for the same app).
This ordering is used for
1) the order of display in the manager
2) the job scheduler's notion of FIFO
svn path=/trunk/boinc/; revision=25300
if we're making a scheduler RPC to a project for reasons
other than work fetch,
and we're deciding whether to ask for work, ignore hysteresis;
i.e. ask for work even if we're above the min buffer
(idea from John McLeod).
svn path=/trunk/boinc/; revision=25291