Commit Graph

447 Commits

Author SHA1 Message Date
David Anderson 35f489d36f Client: debug sub-second CPU throttling 2013-09-20 23:18:33 -07:00
David Anderson ebde7809ce client: preliminary implementation (commented out) of sub-second throttling 2013-09-20 14:30:04 -07:00
David Anderson 59ba61b323 client (Android): don't use network preferences
Many Android users had existing preferences with settings like
"don't compute when idle" that make sense for PCs but not mobile devices.
When this pref is enforced on Android, no computing happens
and user confusion results.
We're addressing this by using only local prefs on Android.
We considered other approaches - e.g. having a "mobile" venue -
but they're too complex.
2013-08-04 15:13:26 -07:00
David Anderson ba6fbc8071 client: if suspend for battery reasons, show parameters in event log
E.g., if suspend because battery temperature,
show current temperature and temperature limit.
Could do this for other things too, e.g. exclusive apps.
2013-07-13 16:31:25 -07:00
David Anderson 519a0bcbef API: add test harness for the runtime system
- If you run the client with --run_test_app,
  runs "test_app" in the current directory and interacts with it
  (and does nothing else).
  It can suspend/resume it with arbitrary timing;
  this is controlled in run_test_app() (app_start.cpp).
- example app: add --critical_section option.
  This lets you test the runtime system for apps that do
  most of their work in a critical section (like GPU apps).
- Add some logging messages (conditioned by DEBUG_BOINC_API)
  to the runtime system.
- boinc_finish() waits for the timer thread to write final messages;
  make sure it doesn't do anything else
  (like suspend the worker thread) during this period
2013-07-04 16:00:10 -07:00
David Anderson 1a6a7128a1 client: get product name in Android
We want to track the product name (e.g. "HTC One X") of Android devices.
On Android, the API to get this is Java,
so we need to do it in the GUI rather than the client.
- Add product_name field to HOST_INFO
- Add a GUI RPC for passing this info from the GUI to the client.
- Store it in client_state.xml, so that the client knows it initially.

The product name is included in scheduler RPC requests, as part of <host_info>.
TODO: add server-side support for parsing it and storing in DB.

Also: move DEVICE_STATUS out of HOST_INFO; it didn't belong there.
2013-05-21 13:20:56 -07:00
David Anderson 61913b181f client (Android): GUI reports battery and wifi status to client
Previously the client had (C++) code to
- check whether on AC or USB power
- get battery status and temperature
- check whether on wifi
These functions looked in various places under /sys.
Problem: the paths are system-dependent,
so whatever we do won't work on all devices.

The Android APIs for getting this info are in Java,
so we can't call them from the client.

Solution: have the GUI periodically get this info
and report it to the client via a GUI RPC.
The GUI must make this RPC periodically:
if the client doesn't get one within some period of time
(currently 30 sec) it suspends computing and network.

Also: if suspending jobs because of battery charge level
or temperature, leave them in memory.
2013-05-14 12:28:09 -07:00
David Anderson b93e80c6f5 - client: code cleanup. Some variable/function/constant names
contained "debt" when they actually refer to REC.
    Change these names to use "rec".
2013-03-24 11:22:01 -07:00
David Anderson 9481e04e7b - client: there were many places in the code where we keep track
(usually in a static variable called "last_time")
    of the last time we did something,
    and we only do it again when now - last_time exceeds some interval.
    Example: sending heartbeat messages to apps.
    Problem: if the system clock is decreased by X,
    we won't do any of these actions are time X,
    making it appear that the client is frozen.
    Solution: when we detect that the system clock has decreased,
    set a global var "clock_change" for 1 iteration of the polling loop,
    and disable these time checks if clock_change is set.
2013-03-22 10:28:20 +01:00
David Anderson 88b905668f - client and boinccmd: update usage text
- update Unix command completion script
- update XML man pages for client, manager, boinccmd
2013-03-15 13:38:45 +01:00
David Anderson 5c7f583e42 - client: suspend_reason is not a bitmap; fix code that acted like it is. 2013-03-05 16:39:36 +01:00
David Anderson c17d20ccd9 - client: show sysmon messages correctly.
This was supposed to be in my 507cd79 commit, but it got botched somehow.
- client: the <task> debug flag enables suspend/resume messages
    for both CPU and GPU.
    Previously CPU messages were always shown,
    and GPU messages were shown if <cpu_sched_debug> was set.
- client: fix bug where reschedule wasn't being done on GPU suspend or resume.
2013-03-05 14:05:04 +01:00
David Anderson 6c5522d9c5 Win compile fix 2013-03-05 13:42:01 +01:00
David Anderson c141e7bdc9 - client (Win): don't call msg_printf() from sysmon thread.
Instead, put msg into a buffer and let main thread print it.
    This may fix crashes on system suspend/resume.
2013-03-05 13:42:01 +01:00
David Anderson aa31777003 - client: if a project has 64 or more ready-to-report tasks,
report them.
    64 is chosen a bit arbitrarily, but the idea is to
    limit the number of tasks reported per RPC,
    and to accelerate the reporting of small tasks.
2013-03-04 15:04:51 +01:00
David Anderson 9cf10b400a - GUI RPC: expose TIME_STATS info (e.g. on_frac) in
the binding of the get_state() RPC
- client: move client_start_time and previous_uptime
    from CLIENT_STATE to TIME_STATS,
    so that these are also visible in GUI RPC
- scheduler RPC: move uptime and previous_uptime
    into <time_stats>
- client: condition an RR simulation message on <rrsim_detail>
- boinccmd: show TIME_STATS info in --get_state
2013-03-01 16:08:52 +01:00
David Anderson 36c304e7d3 - client: maintain current and previous uptime, and include them in scheduler RPC request. - scheduler: parse them Note: this is to support a future feature where the scheduler will send non-checkpointing jobs only clients likely to be able to complete them. 2013-02-26 16:53:20 +01:00
David Anderson e79d3ea4c8 - client: change the way project disk share is computed.
- Allow projects to report "desired disk usage" (DDU).
        If the client learns that a project wants disk space,
        it can shrink the allocation to other projects.
    - Base share computation on DDU rather than disk usage.
    - Introduce the notion of "disk resource share".
        This is defined (somewhat arbitrarily) as resource share
        plus 1/10 of the largest resource share.
        This is intended to ensure that even zero-share projects
        get enough disk space to store app versions and data files;
        otherwise they wouldn't be able to compute.
- server: use host.d_boinc_max (which wasn't being used)
    to start d_project_share reported by client.
- volunteer storage: change the way hosts are allocated to chunks.
    Allow hosts to store several chunks of the same file, if needed


svn path=/trunk/boinc/; revision=26052
2012-08-22 04:02:52 +00:00
David Anderson f8c1665722 - client: keep track of the fraction of time that
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
2012-06-26 20:30:56 +00:00
David Anderson 331114d961 - client: minor code shuffle
svn path=/trunk/boinc/; revision=25627
2012-04-30 21:12:35 +00:00
David Anderson ad232b2869 - client: report completed results if a time-of-day network suspend is
scheduled within the next 30 minutes


svn path=/trunk/boinc/; revision=25465
2012-03-20 19:37:04 +00:00
David Anderson bba4ce24ce - client: compute projects' disk share (based on resource share).
Report it (along with disk usage) in scheduler request messages.
    This will allow the scheduler to send file-delete commands
    if the project is using more than its share.
- client: add <disk_usage_debug> log flag
- create_work: add --help, show --command_line option


svn path=/trunk/boinc/; revision=24968
2012-01-02 05:53:42 +00:00
David Anderson fc6d530a6c - client: shuffle disk usage code in preparation for disk accounting
- use new XML parser in some GUI RPC code


svn path=/trunk/boinc/; revision=24925
2011-12-28 14:52:03 +00:00
David Anderson 5c02170d5a - storage simulator: add stats for network load and fault tolerance.
- client: msg tweak
- client: minimum work buffer lower bound is 180 sec
- scheduler: in computing HOST_USAGE::project_flops for a job,
    if we don't have sufficient elapsed_time statistics
    for either the (host, app_version) or the app_version,
    use a conservative estimate (p_fpops*(#cpus+#ngpus))
    rather than the number returned by app_plan().
    This avoids "time limit exceeded" errors when the latter is way off.


svn path=/trunk/boinc/; revision=24820
2011-12-16 19:45:31 +00:00
David Anderson c317f4b721 - client: attempt to fix bug reported by John McLeod,
where the client crashes after giving up (90 day timeout) on an upload.
    I'm guessing this was caused by [24391],
    which changed the order in the poll loop from
        garbage_collect
        file_xfers->poll
        pers_file_xfers->poll
        handle_pers_file_xfers
    to
        garbage_collect
        handle_pers_file_xfers
        file_xfers->poll
        pers_file_xfers->poll
    I don't understand why this would have caused a crash,
    but so be it.
    I restored the original order, but with handle_pers_file_xfers
    not inside the if (!network_suspended).
- client renamed handle_pers_file_xfers() to
    create_and_delete_pers_file_xfers()
- client simulator: show simulator CPU time


svn path=/trunk/boinc/; revision=24531
2011-11-04 20:25:30 +00:00
David Anderson 9667ff52a8 - client simulator: fixes
- client: message tweaks


svn path=/trunk/boinc/; revision=24297
2011-09-26 23:34:40 +00:00
David Anderson f81cb82b8e - client: make RR simulation more accurate
by simulating time-slicing explicitly.
    Also simulate changes in project REC
    and hence in scheduling priority.
- client: add a log flag "rrsim_detail" that prints
    time-slice-level info.


svn path=/trunk/boinc/; revision=24161
2011-09-12 17:01:54 +00:00
David Anderson 3fe4507e37 - client: make exit_before_start a cc_config.xml option
(as well as a cmdline option)
- wrapper: print error messages if stdin/out/err files don't exist


svn path=/trunk/boinc/; revision=24143
2011-09-07 22:45:00 +00:00
David Anderson cceea7f6d4 - client: rename MODE to RUN_MODE, and rename vars accordingly
svn path=/trunk/boinc/; revision=23974
2011-08-09 20:41:15 +00:00
David Anderson ce215299e6 - client (Win) add some bulletproofing in case Windows sends us a
"suspending" event but not a resume event.


svn path=/trunk/boinc/; revision=23786
2011-07-01 00:25:11 +00:00
David Anderson 2177a6bd95 - server: restore fpops/intops_cumulative to RESULT
(structure, not table) for AQUA
- client, Windows: when wake up from hibernation,
    get the time before printing log msg


svn path=/trunk/boinc/; revision=23784
2011-06-29 23:00:39 +00:00
David Anderson d27c3448fc - client: don't check memory usage immediately after hibernation
svn path=/trunk/boinc/; revision=23519
2011-05-10 15:55:47 +00:00
David Anderson 17c2dd9ae6 - client: don't use the Snooze mechanism to handle
OS-requested suspension
    (especially with a 1-hour snooze period).
    Instead, handle them directly.


svn path=/trunk/boinc/; revision=23420
2011-04-23 19:02:17 +00:00
David Anderson 6b0eba4641 - create_work and other tools: verify that the current dir,
parent dir, or BOINC_PROJECT_DIR actually is a project dir.
- client simulator: improvements


svn path=/trunk/boinc/; revision=23415
2011-04-21 17:04:42 +00:00
David Anderson 654f2468f6 - client: replace % with %% in messages from scheduler
(else they're interpreted as format strings)


svn path=/trunk/boinc/; revision=23379
2011-04-19 05:07:08 +00:00
David Anderson 3b906a191c - client: generalize the GPU framework so that
- new GPU types can be added easily
		- users can specify GPUs in cc_config.xml,
			referred to by app_info.xml,
			and they will be scheduled by BOINC
			and passed --device N options
			Note: the parsing of cc_config.xml is not done yet.
		- RPC protocols (account manager and scheduler)
			can now specify GPU types in separate elements
			rather than embedding them in tag names
			e.g. <no_rsc>NVIDIA</no_rsc> rather than <no_cuda/>
	- client: in account manager replies, parse elements of the form
		<no_rsc>NAME</no_rsc>
		indicating the GPUs of type NAME should not be used.
		This allows account managers to control GPU types
		not hardwired into the client.
		Note: <no_cuda/> and <no_ati/> will continue to be supported.
	- scheduler RPC reply: add
		<no_rsc_apps>NAME</no_rsc_apps>
		(NAME = GPU name)
		to indicate that the project has no jobs for the indicated GPU type.
		<no_cuda_apps> etc. are still supported 
	- client/lib: remove set_debts() GUI RPC
	- client/scheduler RPC
		remove <cuda_backoff> etc. (superceded by no_app)
		Exception: <ip_result> elements in sched request
		still have <ncudas> and <natis>.
		Fix this later.

	Implementation notes:
	- client/lib: change "CUDA" to "NVIDIA" in type/variable names, and in XML
		Continue to recognize "CUDA" for compatibility
	- host_info.coprocs no longer used within the client;
		use a global var (COPROCS coprocs) instead.
		COPROCS now has an array of COPROCs;
		GPUs types are identified by the array index.
		Index zero means CPU.
	- a bunch of other resource-specific structs (like RSC_WORK_FETCH)
		are now stored in arrays, with same indices as COPROCS
		(i.e. index 0 is CPU)
	- COPROCS still has COPROC_NVIDIA and COPROC_ATI structs to hold vendor-specific info
	- APP_VERSION now has a struct GPU_USAGE to describe its GPU usage

svn path=/trunk/boinc/; revision=23253
2011-03-25 03:44:09 +00:00
David Anderson 4f7ceb2334 - client: remove auto update stuff from makefiles.
This feature is mothballed.


svn path=/trunk/boinc/; revision=23103
2011-02-24 22:18:14 +00:00
David Anderson 6e21bd3633 - client: in the loop that starts up apps,
check if we've been in the loop for 10 sec.
    If so, break out of it and reschedule.
    Avoid starving GUI RPCs and heartbeats.

svn path=/trunk/boinc/; revision=23094
2011-02-23 05:03:33 +00:00
David Anderson c558b15f37 - client: wait 15 seconds (instead of 5) for an app to exit
before killing it.
    Apparently some apps take ~10 sec on slow computers.


svn path=/trunk/boinc/; revision=23093
2011-02-23 04:48:09 +00:00
David Anderson 28bad727c1 - client: when exclusive app mechanism is used (CPU or GPU)
wait for 30 secs after excl app exits
    before restarting computation


svn path=/trunk/boinc/; revision=23048
2011-02-16 20:41:19 +00:00
David Anderson c4ee1bdd89 - client: code cleanup in CPU scheduling;
eliminate global variable


svn path=/trunk/boinc/; revision=22908
2011-01-16 07:40:09 +00:00
David Anderson f903c7cfc4 - client: tweak [22842] so that system clock changes
of < 60 seconds are ignored

svn path=/trunk/boinc/; revision=22897
2011-01-12 18:14:15 +00:00
David Anderson f3169fb77a - client: initial, partial checkin for hysteresis work-fetch
svn path=/trunk/boinc/; revision=22853
2010-12-23 23:39:30 +00:00
David Anderson 3a9549979e - client: tweak to ATI CPU recognition
from [P3D] Crashtest

svn path=/trunk/boinc/; revision=22845
2010-12-18 17:09:57 +00:00
David Anderson 4f3d628e29 - client: if detect that system clock has been set backwards
(either at startup or during execution)
    reset a number of "wait until X" variables;
    otherwise we might wait years to contact a project, restart a file xfer, etc.
    Notes:
    - there is no problem setting clocks forward; things just happen prematurely
    - some variables (e.g. task deadlines) are not reset,
        because it's not clear what to set them to
- sched: remove ati_opencl plan class until we understand what it is


svn path=/trunk/boinc/; revision=22842
2010-12-17 01:30:01 +00:00
David Anderson 18f2e90929 - client: work fetch: if the chosen project is currently uploading a file,
and an upload started in the last 5 min, don't fetch work from it.
    The goal is to merge the 2 scheduler RPCs
    (fetch work, report completed taskS) into a single RPC.
    Note: this may result in idleness in some cases.
- scheduler: if client doesn't handle plan class (pre-5.10),
    check plan-class app versions anyway,
    but only use if it's a single-CPU app.
    This allows single-CPU app versions with specific requirements
    (like SSE) to be issued to old clients.
    From Bernd Machenschalk


svn path=/trunk/boinc/; revision=22841
2010-12-13 22:58:15 +00:00
David Anderson 2b67ec4ad9 - client: fix major bug in job scheduling
Old: scheduling has 2 phases:
        1) computing a list of jobs to run (a vector of RESULT*);
            this is done infrequently
        2) enforcing the schedule; this is done more frequently
    Problem:
        when we enforce the schedule,
        the RESULTs in the jobs-to-run list may not still be runnable,
        and in fact they may not still exist (dangling pointer).
    New: combine the 2 phases


svn path=/trunk/boinc/; revision=22792
2010-12-01 21:49:35 +00:00
David Anderson a129c0d8cd - client: do exponential backoff (from 10 min to 24 hours)
on account manager RPC failures,
    rather than always waiting 24 hours

svn path=/trunk/boinc/; revision=22747
2010-11-25 04:35:50 +00:00
David Anderson dd2d5bd63f - client: on startup, generate a message and notice
about new client version if needed

svn path=/trunk/boinc/; revision=22549
2010-10-18 20:31:27 +00:00
David Anderson c9be64765c - client: use project STD, rather than arrival time,
as the major criterion in choosing non-EDF GPU jobs.
    GPU scheduling now respects resource share,
    and as a result STD should no longer diverge.
- client simulator: various improvements, most notably
    that we now generate gnuplot graphs of all debt types

NOTE: the client problem was found and fixed using the simulator!


svn path=/trunk/boinc/; revision=22536
2010-10-15 20:16:00 +00:00