Commit Graph

67 Commits

Author SHA1 Message Date
David Anderson 88a4482894 - client: consider fetching work from overworked projects
if resource is saturated for < work_buf_min()
    (rather than saturated for 0).
    So now the only significance of "overworked" is that we
    won't ask overworked projects for work if resource is saturated
    more than work_buf_min() but less than work_buf_total()

svn path=/trunk/boinc/; revision=17620
2009-03-18 15:53:02 +00:00
David Anderson ce62c8ace5 - client: fix message: "idle instance" => "starved"
svn path=/trunk/boinc/; revision=17451
2009-03-03 17:45:03 +00:00
David Anderson ebbf9d5636 - client: if we're going to do a scheduler RPC for reasons
other than work fetch (e.g., user request, project request)
    temporarily clear resource backoffs while deciding
    whether to request work.
    The backoffs are there only to delay RPCs,
    and we're going an RPC anyway.

svn path=/trunk/boinc/; revision=17416
2009-03-01 18:11:18 +00:00
David Anderson 346ac348b3 - client: RR sim FLOPS estimate for GPU jobs should reflect
fraction of time BOINC is running.


svn path=/trunk/boinc/; revision=17412
2009-02-27 21:44:39 +00:00
David Anderson fd5fc4a24b - client: fix bug that could cause scheduler RPC
to ask for work inappropriately,
    and tell user that it wasn't asking for work.
    Here's what was going on:
    There are two different structures with work request fields
    (req_secs, req_instances, estimated_delay):
    COPROC_CUDA *coproc_cuda
    and
    RSC_WORK_FETCH cuda_work_fetch.
    WORK_FETCH::choose_project() copied from cuda_work_fetch to coproc_cuda,
    but only if a project was selected.
    WORK_FETCH::clear_request() clears cuda_work_fetch but not coproc_cuda.

    Scenario:
    - a scheduler op is made to project A requesting X>0 secs of CUDA
    - later, a scheduler op is made to project B for reason
        other than work fetch (e.g., user request)
    - choose_project() doesn't choose anything,
        so the value of coproc_cuda->req_secs remains X
    - clear_request() is called but that doesn't change *coproc_cuda

    Solution: work-fetch code no longer knows about internals of
        COPROC_CUDA and is not responsible for settings its request fields.
        The copying of request fields from RSC_WORK_FETCH to COPROC
        is done at a higher level,
        in CLIENT_STATE::make_scheduler_request()

    Additional bug fix: estimated_delay wasn't being cleared in some cases.


svn path=/trunk/boinc/; revision=17411
2009-02-27 18:46:00 +00:00
David Anderson 41fe3e40bf - client: tag messages with project where possible; fixes #852
- client: show fetch share rather than run share in wfd message

svn path=/trunk/boinc/; revision=17398
2009-02-26 17:12:55 +00:00
David Anderson 125c90d1da - client: work-fetch bug fix: if we're fetching work for a starved
project, it most have no runnable jobs for ANY resource.
- client: work-fetch bug fix: when setting requests in the
    shortfall case, don't request anything if project is backed off
    or overworked for the resource.

svn path=/trunk/boinc/; revision=17338
2009-02-23 21:34:13 +00:00
David Anderson f257101d36 - client: fix work-fetch bug that caused infinite fetch;
cleanup/reorganization of work fetch logic

svn path=/trunk/boinc/; revision=17337
2009-02-23 20:35:52 +00:00
David Anderson 7001c6f7c5 - client: tweak the LTD calculation so that the largest debt
always tends towards zero

svn path=/trunk/boinc/; revision=17333
2009-02-22 15:40:44 +00:00
David Anderson 3b31a9d803 - client: remove the "debt repair" mechanism added earlier today.
There are situations where multiple projects can legitimately
    have large negative LTD on a uniprocessor.
    Instead...
- client: add <zero_debts> option to cc_config.xml

svn path=/trunk/boinc/; revision=17328
2009-02-20 22:16:03 +00:00
David Anderson 6241fff21f - client: new work-fetch policy:
1) if an instance is idle, get work from highest-debt project,
        even if it's overworked.
    2) if resource has a shortfall, get work from highest-debt
        non-overworked project
    3) if there's a fetchable non-overworked project with no runnable jobs,
        get from from the highest-debt one.
    (each step is done first for GPU, then CPU)
    Clause 3) is new.
    It will cause the client to get jobs for as many projects as possible,
    even if there is no shortfall.
    This is necessary to make the notion of "overworked" meaningful
    (otherwise, any project with long jobs can become overworked).
    It also maintains as much variety as possible (like pre-6.6 clients).

    Also (small bug fix) if a project is overworked for resource R,
    request work for R only in case 1).


svn path=/trunk/boinc/; revision=17327
2009-02-20 21:44:39 +00:00
David Anderson f7f2f85b79 - client: if a project is at max backoff for a resource,
stop accumulating debt if it's at or around zero.
        This prevents other projects from being driven unboundedly negative.
    - client: if the number of overworked projects exceeds the number
        of device instances, clear debts; this indicates that an earlier
        client was buggy and produced bad debt values.

svn path=/trunk/boinc/; revision=17325
2009-02-20 18:37:27 +00:00
David Anderson ddb3d902c6 - client: message tweak
svn path=/trunk/boinc/; revision=17313
2009-02-19 21:51:13 +00:00
David Anderson 9e9a0effeb svn path=/trunk/boinc/; revision=17312 2009-02-19 21:45:33 +00:00
David Anderson bcefac3667 - client: message tweak
svn path=/trunk/boinc/; revision=17311
2009-02-19 21:42:43 +00:00
David Anderson 72c57735eb - client: add more info to <work_fetch_debug> messages
svn path=/trunk/boinc/; revision=17309
2009-02-19 21:32:54 +00:00
David Anderson 3e98909ab6 - client: adjust debts at least every minute.
This fixes a bug that can cause debts to NEVER get updated.
- client: added "abort_jobs_on_exit" feature
    (available by --abort_jobs_on_exit cmdline
    or <abort_jobs_on_exit> in cc_config.xml).
    If set, when the client is exited by user request
    (this includes signals on Unix)
    it marks all pending jobs as aborted,
    and does a scheduler RPC to all projects with jobs.
    When these are completed the client exits.
    This is useful when BOINC is being used on grids
    where it is wiped clean after each run.

svn path=/trunk/boinc/; revision=17300
2009-02-18 19:47:02 +00:00
David Anderson b4bac32d75 - client: if "no more work" checked, don't request more work (duh!)
svn path=/trunk/boinc/; revision=17290
2009-02-18 16:21:30 +00:00
David Anderson 15e9a87315 - client: add a debug flag <dcf_debug> for seeing changes in DCF
- scheduler: add a limit on NVIDIA driver version for CUDA apps
    (default 17500)

svn path=/trunk/boinc/; revision=17277
2009-02-17 03:16:25 +00:00
David Anderson 57bf393544 - client: debt_eligible() was returning false if the backoff was max.
This can lead to a situation where a project never gets work.
    Remove that clause.

svn path=/trunk/boinc/; revision=17226
2009-02-12 16:28:28 +00:00
David Anderson cc81331dd4 - client: change the formula for debt update
so that largest debt among eligible projects tends towards zero
    - client: change definition of "overworked"; debt must be < 1 day

svn path=/trunk/boinc/; revision=17206
2009-02-11 19:07:34 +00:00
David Anderson 872ed1a65c - client: if master file doesn't have URLs, clear RPC request
svn path=/trunk/boinc/; revision=17196
2009-02-10 19:33:46 +00:00
David Anderson 864864ab76 - client: all scheduler RPCs except user request are subject to backoff.
- client: if a project-requested RPC doesn't return work,
    don't do resource backoff.
- client: if a user-requested scheduler RPC errors out, clear the request

svn path=/trunk/boinc/; revision=17191
2009-02-09 22:00:31 +00:00
David Anderson af86d4326f - client: when accounting job elapsed time,
ignore intervals longer than 10 secs;
    that could only happen if the client or host was suspended/hibernated.
- client: in adjust_debts(), ignore intervals longer than
    2*work fetch period, not 2*CPU sched period.
    adjust_debts() is called from work fetch.

svn path=/trunk/boinc/; revision=17154
2009-02-05 20:16:28 +00:00
David Anderson 3ad73d70ba - client: redefine "overworked" as
debt < -1.5 * work_buf * cpu_sched_period
- web: on team page, link to cross-project team stats sites

svn path=/trunk/boinc/; revision=17152
2009-02-05 19:40:01 +00:00
David Anderson a4a2a68f7d - fix tabs
svn path=/trunk/boinc/; revision=17101
2009-02-02 18:47:34 +00:00
David Anderson 9f170696a4 - client: code cleanup
svn path=/trunk/boinc/; revision=17100
2009-02-02 18:45:00 +00:00
David Anderson 6120b02306 - client: code cleanup
svn path=/trunk/boinc/; revision=17098
2009-02-02 05:15:12 +00:00
David Anderson 89188fca84 - client: there was a problem with how the round simulator
worked in the presence of coprocessors.
    The simulator maintained per-project queues of pending jobs.
    When a job finished (in the simulation) it would get
    one or more jobs from that project's pending queue.

    The problem: this could cause "holes" in the scheduling of GPUs,
    and produce an erroneous nonzero shortfall for GPUs,
    leading to infinite work fetch.

    The solution: maintain a separate (per-resource, not per--project)
    queue of pending coprocessor jobs.
    When a coprocessor job finishes,
    start pending jobs from the queue for that resource.

    Another change: the simulator did strict reservation of coprocessors.
    If there are 2 instances of CUDA,
    and a 1-instance job is running in the simulation,
    it wouldn't start an additional 2-instance job.
    This also can cause erroneous nonzero shortfalls.

    So instead, schedule coprocessors like CPUs, i.e. saturate them.
    This can cause distorted completion time estimates,
    but it's better than infinite work fetch.

svn path=/trunk/boinc/; revision=17093
2009-02-01 04:37:19 +00:00
David Anderson be31245c82 - client: work fetch fixes
svn path=/trunk/boinc/; revision=17090
2009-01-31 00:20:13 +00:00
David Anderson 8de66223fd - client: tweak work fetch messages
- client: buffer 2000 messages instead of 1000

svn path=/trunk/boinc/; revision=17089
2009-01-30 22:33:45 +00:00
David Anderson b7a2c227ca - Work fetch / scheduler:
There are two mechanisms to prevent the scheduler from
    sending jobs that won't finish by their deadline.
    Simple mechanism:
        The client sends the interval x for which CPUs are projected
        to be saturated.
        Given a job with estimated duration y,
        the scheduler doesn't send it if x + y exceeds the delay bound.
        If it does send it, x is incremented by y.
    Complex mechanism:
        Client sends workload description.
        Scheduler does EDF simulation, sees if deadlines are missed.
        The only project using this AFAIK is BOINC alpha test.
    Neither of these mechanisms takes coprocessors into account,
    and as a result jobs could be sent that are doomed to
    miss their deadline.
    This checkin adds coprocessor awareness to the Simple mechanism.

    Changes:
    Client:
        compute estimated delay (i.e. time until non-saturation)
        for coprocessors as well as CPU.
        Send them in scheduler request as part of coproc descriptor.
    Scheduler:
        Keep track of estimated delays separately for different resources
- client: fixed bug that computed CPU estimated delay incorrectly
- client: the work request (req_secs) for a resource is the min
    of the project's share and the shortfall.

svn path=/trunk/boinc/; revision=17086
2009-01-30 21:25:24 +00:00
David Anderson ca7b1cd8e4 - client: update LTD correctly
svn path=/trunk/boinc/; revision=17074
2009-01-29 22:00:55 +00:00
David Anderson 604a83aa96 - client: if user requests RPC, do it even if project is backed off
- manager: show backoff interval correctly

svn path=/trunk/boinc/; revision=17070
2009-01-29 20:07:48 +00:00
David Anderson 195c0403b7 - scheduler: don't count host as reliable if avg_turnaround is zero
- client: restore notion of overworked;
    if a project is overworked for a resource R,
    don't fetch work for R unless there are idle instances

svn path=/trunk/boinc/; revision=17057
2009-01-28 04:58:01 +00:00
David Anderson 51b468dfc8 - client: remove the "deadlines_missed" and "overworked"
clauses from RSC_WORK_FETCH::choose_project()


svn path=/trunk/boinc/; revision=17056
2009-01-27 23:40:42 +00:00
David Anderson 8952fbe60e - client: if we're making an RPC to a project because of user request,
clear the resource backoff times so that we potentially
        can ask the project for work.

svn path=/trunk/boinc/; revision=17052
2009-01-27 22:25:32 +00:00
David Anderson 3eee24d83a svn path=/trunk/boinc/; revision=17032 2009-01-27 19:02:32 +00:00
David Anderson d23d481c63 - client: change the LTD policy so that
1) net adjustment for eligible projects is zero;
    2) max LTD is zero
- scheduler: fix msgs so disk size is shown in GB

svn path=/trunk/boinc/; revision=17031
2009-01-27 18:57:27 +00:00
David Anderson 1312f3fac9 - client: if we're doing an RPC (for whatever reason)
to a non-CPU-intensive project without a job, ask for one.

svn path=/trunk/boinc/; revision=17024
2009-01-27 00:16:31 +00:00
David Anderson 0b7aaa0303 client: improve backoff message
svn path=/trunk/boinc/; revision=17021
2009-01-26 18:01:30 +00:00
David Anderson 574d1fe087 - client: don't request work for a resource if it has no shortfall.
- client and server: get rid of coproc_cuda global.

svn path=/trunk/boinc/; revision=17019
2009-01-26 05:00:49 +00:00
David Anderson be177ee7a4 - client: clear debts when reset project
- client: respect work-fetch backoff for non-CPU-intensive projects
	- client: for non-CPU-intensive project, fetch new job
		if no currently running jobs
	- client: skip non-CPU-intensive projects in debt calculations
	- manager: show resource backoff times correctly

svn path=/trunk/boinc/; revision=16998
2009-01-23 18:29:28 +00:00
David Anderson 7cbce5f2ec - client: compile fix
svn path=/trunk/boinc/; revision=16970
2009-01-21 20:51:33 +00:00
David Anderson 28bc319055 - client: fetch work from non-CPU-intensive projects
svn path=/trunk/boinc/; revision=16969
2009-01-21 20:28:00 +00:00
David Anderson f33631cbbc - client: fix messages
svn path=/trunk/boinc/; revision=16960
2009-01-20 18:06:49 +00:00
David Anderson d3aa55c9b4 - client: remove limits on LTD.
svn path=/trunk/boinc/; revision=16942
2009-01-16 18:37:13 +00:00
David Anderson f90dddc9a6 - client: clamp long term debts tp +- 1 week
- client: fix CUDA debt calculation
- client: don't accumulate debt if project->dont_request_more_work
- client: improves messages

svn path=/trunk/boinc/; revision=16909
2009-01-14 23:56:07 +00:00
David Anderson 2170b45d41 - client: work_req_seconds is CPU req, not max(CPU req, CUDA req).
In order to work with the 6.7 client,
	projects with both CUDA and CPU jobs must use the newest scheduler code.

svn path=/trunk/boinc/; revision=16868
2009-01-11 05:14:47 +00:00
David Anderson 132cc6bba3 - client: debugging CUDA-related stuff
- client: if reset a project, clear its overall and per-resource backoffs

svn path=/trunk/boinc/; revision=16862
2009-01-10 00:48:22 +00:00