Commit Graph

172 Commits

Author SHA1 Message Date
David Anderson 20d6b06f5f - client: initial checkin for "don't compute if CPU usage above X"
svn path=/trunk/boinc/; revision=20192
2010-01-19 00:03:38 +00:00
David Anderson 37aae854f3 - client: scheduling problem:
- a project overestimates job FLOP counts
    - the client starts jobs in EDF mode
    - as job progresses and fraction done increases,
        its completion time estimate decreases until
        it's no longer a deadline miss.
    - job gets preempted by other job from that project;
        you end up with lots of partly completed jobs.
    Solution (I hope): if an app version has running jobs,
        compute a "temp DCF" for the app version,
        which is the min of dynamic/static estimates for its jobs.
        Apply this scaling factor to completion time estimates
        for unstarted jobs in RR simulation
- client: the estimation of remaining time of running jobs was wrong
    (how did this bug survive so long?)

svn path=/trunk/boinc/; revision=20077
2010-01-06 06:01:23 +00:00
David Anderson 37ea627866 - Win compile fixes. Also, needed to provide a replacement
for strptime() on Win.  WTF?

svn path=/trunk/boinc/; revision=20003
2009-12-21 19:20:28 +00:00
David Anderson a3f80676b7 - API and client: add an API function boinc_temporary_exit(dt).
This exits the app with status zero and no finish file,
    so the client will restart it.
    It creates a file "temporary_exit" containing dt.
    The (new) client reads this file and will postpone
    scheduling the job again for dt seconds.
    Old clients will treat it as a premature exit,
    and potentially try to reschedule the job immediately.

    This function is intended for GPU applications that
    fail to allocate GPU RAM,
    presumably because a non-GPU application has it allocated.
    We don't want the job to fail,
    and we want to wait for a while before trying the allocation again.

svn path=/trunk/boinc/; revision=19879
2009-12-13 05:16:40 +00:00
David Anderson 8182ccd031 - client/manager: first whack at a "snooze GPU" button
svn path=/trunk/boinc/; revision=19853
2009-12-10 23:26:35 +00:00
David Anderson e057c552d8 - client: add <exclusive_gpu_app> option:
suspend GPU usage when particular apps are running

svn path=/trunk/boinc/; revision=19573
2009-11-13 17:49:18 +00:00
David Anderson 86ee2f5753 - client: fix bug that caused unstarted coproc jobs to preempt
ones already running.
    The problem: we considered a job as started if it has an ACTIVE_TASK.
    However, we were creating ACTIVE_TASKS for jobs before deciding
    to run them, because we needed a place to store the coproc reservations.
    This caused the above bug, and also had the undesirable effect
    of creating slot directories before they're needed.

    Solution: store coprocessor reservations in RESULT
    rather than ACTIVE_TASK.

svn path=/trunk/boinc/; revision=19129
2009-09-22 21:02:06 +00:00
David Anderson f1360e5971 - client: finish the implementation of fractional coproc jobs.
- different data structure for keeping track of coproc usage;
        instead of COPROC having per-instance pointers to ACTIVE_TASK,
        ACTIVE_TASK now has an array of device number indices
        for each instance that it's using.
    - in enforce_schedule(), we call a new function assign_coprocs()
        that decides what coproc instances each job will use,
        and prunes jobs for which we can't get an assignment.
        This function embodies lots of subtlety.
    - coproc_cmdline() no longer deals with reserving instances;
        it just has to generate the --device X cmdline

svn path=/trunk/boinc/; revision=18880
2009-08-19 23:21:55 +00:00
David Anderson 1dba786d7b - API: add boinc_elapsed_time() to get elapsed time since start of episode;
add APP_INIT_DATA::starting_elapsed_time to get
    elapsed time from previous episodes

svn path=/trunk/boinc/; revision=18535
2009-07-01 17:35:56 +00:00
David Anderson 575565dc22 - client: fixed nasty bug that caused GPU jobs to crash on startup
when they're preempting another GPU job.
        The problem was as follows:
        - job A is chosen to preempt job B
        - we tell job B to quit, and initialize job A but don't start it;
            however, we set if scheduler state to SCHEDULED
            (rather than UNINITIALIZED)
        - job B exits, and we start job A.
            Since its state is not UNITIALIZED, we don't set up its slot dir.
        - job A runs in an empty slot dir, doesn't find its files, and bombs out.
    - client: add <slot_debug> option (prints messages about
        allocation of slots, creating/removing files in slot dirs).

svn path=/trunk/boinc/; revision=18217
2009-05-28 19:26:27 +00:00
David Anderson af93af28f7 - client: eliminate the need to write the state file on each checkpoint.
Instead, write the info into a file in the slot directory,
		and check for these files on startup.
		This should reduce the overhead of state-file writing
		on machines with lots of cores.
		There will still be a flurry of writes each time a job finishes,
		but reducing that overhead would be a larger job.
	- client: make sure we write the state file after a failed RPC

svn path=/trunk/boinc/; revision=17814
2009-04-15 06:22:53 +00:00
David Anderson ed3e3b0063 - client: fix bug where if a GPU job is running,
and a 2nd GPU job with an earlier deadline arrives,
    neither job is executed ever.
    Reorganized things so that scheduling of GPU jobs is
    done independently of CPU jobs.
    The policy for GPU jobs:
    - always EDF
    - jobs are always removed from memory, regardless of checkpoint
    (GPU memory is not paged, so it's bad to leave an idle app in memory)

svn path=/trunk/boinc/; revision=17402
2009-02-26 21:36:41 +00:00
David Anderson feab684b3d - client: abort jobs that are unstarted and past deadline
- client: abort runaway jobs based on elapsed time instead of CPU time.
    Specifically, abort jobs for which
    elapsed time > WU.rsc_fpops_bound / app_version.flops
    This policy works for
    1) GPU jobs (which may use little CPU time)
    2) jobs that run but because of bugs use little CPU time
        (e.g., because they're sleeping)
    whereas the old policy didn't.

svn path=/trunk/boinc/; revision=17399
2009-02-26 17:51:38 +00:00
Eric J. Korpela 8f3abcc835 - Added checks for net/*.h, arpa/*.h, netinet/*.h and code to figure out
which of those files to include
    - Modified MAC address check to work on some non-Linux unixes.
      (mac_address.cpp)
    - Added suggested change to "already attached to project" checking.
      (ProjectInfoPage.cpp)
    - changed includes of standard c header files to their c++ equivalents
      (i.e. replaced <stdio.h> with <cstdio>) for namespace protection.
    - replaced "using namespace std;" with more explicit "using std::function" in
      several files.
    - Fixed bug in checking whether the os is OS/2 and added conditional OS_OS2
      to the build environment. (boinc_platform.m4,configure.ac)
    - Changed build environment to not use -nostandardlibs unless we are using
      G++ and static linkage is specified. (configure.ac)
    - Added makefiles and package building files for solaris CSW package manager.
    - Fixed bug with attempting to find login name using logname. (configure.ac)
    - Added ifdef HAVE_* protection around some include files commonly found in
      sys.
    - Added support for unified binary for x86_64/i686-pc-solaris.
      (cs_platforms.cpp)
    - generate_host_cpid() now uses MAC address on non-linux unix.
      (hostinfo_network.cpp)
    - Macro BOINC_SET_COMPILE_FLAGS now doesn't check gcc only flags on non-gcc
      compilers. (boinc_set_compile_flags.m4)
    - Library compiles no longer depend upon the library extension or require
      the library to be prefixed with lib.
    - More fixes for fcgi builds.
    - Added declaration of "struct ether_addr" and ether_ntoa().  Have not yet
      implemented ether_ntoa() for machines that don't have it, or where it is
      buggy.  (unix_util.h)
    - Added FCGI::perror() which calls FCGI_perror(). (boinc_fcgi.{h,cpp})
    - Fixed library Makefiles so that all required headers get installed.


svn path=/trunk/boinc/; revision=17388
2009-02-26 00:23:23 +00:00
David Anderson 57518b9a43 - client: when preempting a process, remove it from memory if:
1) it uses a coprocessor
    2) it has checkpointed since the client started
    3) it's being preempted because of a user action
        (suspend job, project, or all processing)
        or user preference (time of day, computer in use)
- scheduler: if shared mem seg doesn't exist,
    report it and don't crash

svn path=/trunk/boinc/; revision=16992
2009-01-23 00:02:39 +00:00
David Anderson 79fb6e969e - Remove the notion of "CPU efficiency" from both client and server.
This wasn't being measured correctly for coproc/multithread apps,
    and its effect is now subsumed in DCF.

svn path=/trunk/boinc/; revision=16610
2008-12-03 19:50:06 +00:00
David Anderson 122f61996a - client: estimate time to completion based on elapsed time, not CPU time
(improves estimates for coproc apps)

svn path=/trunk/boinc/; revision=16600
2008-12-02 17:48:29 +00:00
David Anderson 84f1193a9d - client: use FLOPs, rather than CPU time,
as the basis for estimating job completion times.
    This should improve estimates for GPU apps,
    and prevent the DCF from getting messed up.

svn path=/trunk/boinc/; revision=16598
2008-12-02 03:58:32 +00:00
David Anderson f17c0879de - changed some comments for Doxygen
svn path=/trunk/boinc/; revision=16130
2008-10-04 23:44:24 +00:00
David Anderson f0e0e8f977 - client: add "exclusive app" feature. If you put
<exclusive_app>foo.exe</exclusive_app>
    in your cc_config.xml, BOINC will suspend computing
    whenever foo.exe is running (e.g., a game).

    Eventually we might want to put the interface in preferences
    instead of cc_config.xml

svn path=/trunk/boinc/; revision=16087
2008-09-29 16:47:10 +00:00
David Anderson 9f6c4a133e - client: don't leak handles to shared-mem files
- client: don't leak process handles when abort jobs
- client: if an app exits or we kill it, always destroy the shmem segment.
- web: more HTML 4.01 Transitional conformity changes

svn path=/trunk/boinc/; revision=15865
2008-08-16 20:59:53 +00:00
David Anderson 4f66bb4c95 - added copyright and license info to .C, .cpp, .h files
- scheduler: fix bug in adaptive replication:
    if send an unreplicated job to untrusted host,
    set both wu.target_nresults and wu.min_quorum to app.target_nresults.

svn path=/trunk/boinc/; revision=15762
2008-08-06 18:36:30 +00:00
David Anderson fd6bb6e637 - client: on Windows (at least) if you kill a task (e.g. reset project)
ACTIVE_TASK::handle_exited_app() never gets called,
    so the coprocessors weren't getting freed.
    Fix this.

svn path=/trunk/boinc/; revision=15242
2008-05-16 22:52:09 +00:00
David Anderson 0e4eb7f6e7 - client: if we request that an app exit,
and it doesn't do so within 10 seconds, kill it.
        This deals with the situation where the app is ignoring messages
        (e.g. because it forgot to end a critical section).
    - client: if either the FP or int benchmark runs less than
        3 CPU seconds (out of 10 seconds of wall time) ignore the benchmark.
        This is an effort to deal with a problem where (for unknown reasons)
        the int benchmark runs for a tiny amount of CPU time,
        leading to an absurdly large result
    - Manager: don't prepend "[error]" to MSG_INTERNAL_ERROR messages;
        the client already does this.

    THESE ARE ALL BUG FIXES

svn path=/trunk/boinc/; revision=15128
2008-05-05 00:51:20 +00:00
David Anderson 13400c9516 Changes for multithread app support:
- update_versions: use __ (not :) as separator for plan class
- client: add plan_class to APP_VERSION;
    an app version is now identified by platform/version/plan_class
- client CPU scheduler: don't assume apps use 1 CPU
- client: add avg_ncpus, max_cpus, flops, cmdline to RESULT
- scheduler: implement app planning scheme

Other changes:

- client: if symlink() fails, make a XML soft link instead
    (for Unix running off a FAT32 FS)
- client: don't accept nonpositive resource share from AMS
- daemons and DB: check for error returns from enumerations,
    and exit if so.  Thus, if the MySQL server goes down,
    all the daemons will soon exit.
    The cron script will restart them every 5 min,
    so when the DB server comes back up so will the project.
- web: show empty max CPU % as ---
- API: get rid of all_threads_cpu_time option (always the case now)


svn path=/trunk/boinc/; revision=14966
2008-03-27 18:25:29 +00:00
David Anderson 2be6f8e53a - Client: add <run_apps_manually> config flag.
This is for debugging apps (currently works only in Unix).
    What it does: when running an app,
    the client does everything except actually fork/exec the app,
    i.e. it sets up the slot dir, creates shared mem segment etc.
    It then continues as if the app were actually running,
    and you can then manually run your app under a debugger
    in the slot directory.
    Note: the client won't notice the termination of your app.
- API, Unix: in situations where the timer thread wants to exit
    (e.g. it notices a missing heartbeat).
    don't directly call boinc_exit(),
    since this touches data structures that the worker thread
    may be using concurrently.
    Instead, set a flag telling the worker thread to call boinc_exit()
    (which it will do from its signal handler)
    This is an attempt to fix problems reported by Bernd;
    I haven't tested it.
- scheduler: add config flag for uploading usage data
- web: show account key and weak account key on user page
- added some code for multithread support (not finished)

api/
    boinc_api.C


svn path=/trunk/boinc/; revision=14542
2008-01-13 00:12:14 +00:00
David Anderson 74c2782624 - API: code cleanup
removed references to "graphics thread"
    removed HANDLE timer_quit_event
    removed enable_heartbeat/disable_heartbeat messages
        (not sure what the ideas was, but no longer exists)
    removed heartbeat_active flag (use options.check_heartbeat instead)
    read heartbeat-channel messages even if heartbeat disabled
        (since we use that channel for WSS messages too)
- client: remove ACTIVE_TASK::thread_handle (not used)

svn path=/trunk/boinc/; revision=14323
2007-11-29 19:48:04 +00:00
David Anderson 4525b2677b - client: clean up logic of handling DLL_INIT_FAILED exits on Win.
Shouldn't cause any functional change

svn path=/trunk/boinc/; revision=14310
2007-11-27 21:54:17 +00:00
Rom Walton ae321f631b - CC: Treat the return code 0xC0000142 as though it is a temporary
error. 0xC0000142 means STATUS_DLL_INIT_FAILED which can happen
        when an application attempts to create a new process while the OS
        is shutting down, and when the desktop heap is fully utilized.
        
        This will keep an app from erroring out during Vista's shutdown
        sequence. Only a reboot can fix the desktop heap.
        
    client/
        app.h
        app_control.C

svn path=/trunk/boinc/; revision=14080
2007-11-05 15:03:16 +00:00
Charlie Fenton c9718fb0b9 Mac client: Add 64-bit support for OS 10.5 (new platform x86_64-apple-darwin)
svn path=/trunk/boinc/; revision=13939
2007-10-24 00:44:42 +00:00
Charlie Fenton eb9cfe6b20 V6 GFX: Fix bugs in graphics compatibility with V5 applications
svn path=/trunk/boinc/; revision=13830
2007-10-11 11:02:48 +00:00
Frank Thomas 3bfc78b511 Updated the postal address of the Free Software Foundation in all license headers. See http://lists.ssl.berkeley.edu/pipermail/boinc_dev/2007-October/008939.html for reference.
svn path=/trunk/boinc/; revision=13804
2007-10-09 11:35:47 +00:00
David Anderson f1f5930579 - client: removed everything related to screensaver
(deciding which app to use, implementing blanking interval, etc.)
    This logic is all now in the screensaver itself.
- GUI RPC: removed get/set screensaver mode RPCs
- API: added a "backwards_compatible_graphics" flag to BOINC_OPTIONS.
    V6 apps should set this.
    If set, the runtime library checks for graphics messages
    from the client, and launches/kills the graphics app (if any).
    The app will then work graphically with pre-V6 clients.
- removed some old files

svn path=/trunk/boinc/; revision=13651
2007-09-25 16:04:45 +00:00
David Anderson aefd2d4c88 - client: add mechanism to abort results if they get > 100
"premature exits" (exit(0) without finish file) between checkpoints


svn path=/trunk/boinc/; revision=13207
2007-07-20 23:42:20 +00:00
Charlie Fenton 390633ff7e Back out my shared memory changes of 27 June because it might prevent compound applications from attaching to the shared memory as needed
svn path=/trunk/boinc/; revision=13046
2007-06-28 11:09:07 +00:00
David Anderson 823df51238 - client: allow up to a day (rather than work_buf_min()) to elapsed
between completing a result and reporting it.
- back end: added <httpd_user> config option:
    Web server user name (used by file deleter)
- back end: don't report unparsed XML in config.xml as an error

client/
    app.h
    work_fetch.C
lib/
    shmem.C
sched/
    file_deleter.C
    file_upload_handler.C
    sched_config.C,h
    show_shmem.C

svn path=/trunk/boinc/; revision=13039
2007-06-27 20:09:18 +00:00
Charlie Fenton fdf8973685 CC: Mark shmem segment for eventual destruction on first msg from task (*nix only)
svn path=/trunk/boinc/; revision=13034
2007-06-27 10:29:31 +00:00
Charlie Fenton 7bb1b1a0d4 CC: Add logic to scheduler, etc. for systems which limit the number of shared memory segments per process and / or system-wide.
svn path=/trunk/boinc/; revision=13015
2007-06-25 11:46:15 +00:00
David Anderson 9850a17167 - GUI RPC: add graphics_exec_path and slot_path fields to RESULT.
These let the Manager run the graphics app.
    Graphics apps have physical name *v6graphics*
- Separated ACTIVE_TASK::write() and ACTIVE_TASK::write_gui().
    These need to write largely disjoint set of items.
- code cleanup: remove a zillion "else"s in parsing code
- code cleanup: change a zillion match_tag(buf, "<foo/>"
    to parse_bool(buf, "foo")

client/
    app.C,h
    client_state.C
    client_types.C,h
lib/
    gui_rpc_client.h
    gui_rpc_client_ops.C
sched/
    server_types.C

svn path=/trunk/boinc/; revision=12938
2007-06-14 23:08:43 +00:00
David Anderson f7e650191a - client: change Win program launch to suppress hourglass cursor
- client simulator: add --cpu_sched_rr_only and --dual_dcf options

client/
    app.h
    app_start.C
    client_types.C,h
    cpu_sched.C
    cs_scheduler.C
    sim.C,h
    work_fetch.C

svn path=/trunk/boinc/; revision=12671
2007-05-15 20:29:26 +00:00
Rom Walton 67078e9e67 - Fix a build break in the manager.
client/
        app.h
    lib/
        common_defs.h

svn path=/trunk/boinc/; revision=12646
2007-05-11 03:49:25 +00:00
David Anderson 4931b54706 *** empty log message ***
svn path=/trunk/boinc/; revision=12335
2007-04-09 16:19:42 +00:00
David Anderson b8a107c995 *** empty log message ***
svn path=/trunk/boinc/; revision=12265
2007-03-23 18:48:06 +00:00
David Anderson 71afcf8c06 *** empty log message ***
svn path=/trunk/boinc/; revision=12235
2007-03-15 23:01:51 +00:00
David Anderson 6ff0977570 *** empty log message ***
svn path=/trunk/boinc/; revision=12139
2007-02-22 16:33:37 +00:00
Rom Walton b8cf48e398 *** empty log message ***
svn path=/trunk/boinc/; revision=12123
2007-02-20 18:25:04 +00:00
David Anderson ac3e809427 *** empty log message ***
svn path=/trunk/boinc/; revision=12026
2007-02-02 17:12:07 +00:00
David Anderson 71fc6345b7 *** empty log message ***
svn path=/trunk/boinc/; revision=11957
2007-01-24 21:20:57 +00:00
David Anderson c12709c7e2 *** empty log message ***
svn path=/trunk/boinc/; revision=11938
2007-01-23 17:24:43 +00:00
David Anderson 829c5b4e82 *** empty log message ***
svn path=/trunk/boinc/; revision=11886
2007-01-16 22:57:08 +00:00