The events that drive rr_sim:

>>>RPC complete:  We have now committed to some more work.  Is there anything
>>>that needs to start right now to complete on time.

>>Nope. No need. The request should be reasonable enough and the WUs 
>>committed to should be reasonable enough that there should be no change 
>>to the presently running work.

>There is no guarantee at all what the server is going to hand us.  It may
>NOT be reasonable.  There is no check at the server to determine if the
>tasks sent to the client are going to be trouble.

Alright. If it's not getting scheduled by reasonable scheduling until
the deadline is reached, we'll just have to return it, won't we?

As a side notice:
I too disagree on RPC complete being a trigger point:
If we get new work, we WILL have to wait for the download to finish, until then
everything is grey theory.

>>> File Download Complete:  We now have a task ready to run.  Does it need to
>>> get started right now?

>> Again, should be no change for the above reasoning.

> Same reasoning:  The server has no check for reasonable.

this is one of the points I'd call
'doScheduling' function, opposed to what Martin says
and more in the line of what Jm7 does.


>>> Task complete:  What should we run now.  We have a free processor.

>> Yep, but streamline the scheduling to be adding the work to a maintained
>> fifo linked list with a total duration accumulated for the list. Use one
>> variable that is added to and subtracted from. DON'T blindly iterate
>> through the linked list to add it up! DCF is applied to that one
>> variable. That is, the linked list WU times are raw uncorrected times.

> I have no idea what you are trying to say here.  Are you trying to say that
> we should always start the next task in FIFO order?

I think he does - but (in my opinion) missing the different DCF values for 
different projects
But certainly a triggerpoint for scheduling.


>>> Project and Task Suspend:  Do we still have the same tasks running?  Do we
>>> have an empty resource?
>> Yep.
Yep.

>>> Project and Task Resume:  Some tasks have been suspended for an unknown
>>> amount of time.  Do we need to run one of them?
>> Yep.
Yep.


In my eyes this amounts to the following

checkpointing:
if task.runtime < TSI?
        do nothing
else
        halt job
        do rescheduling (job)

task complete:
if task.complete
        do rescheduling

download complete:
        do scheduling

project/task resume/suspend
        do rescheduling

maybe (for sake of completeness):
RPC complete:
if server asks to drop WU
        halt job;
        do rescheduling (job)

The trickier part of course are the
scheduling /rescheduling calls, and I'm currently leafing through my notepad 
looking for the sketch...
for my idea we'd need

list of jobs run (wct, project)
-> containing the wall-clock times for every job run during the last 24 hours.

per resource (CPU/ GPU Type1 / GPU Type2 / Coproc) two(2) linked list of jobs 
eligible to run on that resource
-> linked list1 (CPU) (containing all jobs in order of getting them)
-> linked list2 (CPU) (short, only working'state)
-> linked list1 (GPU)
-> linked list2 (GPU)
-> linked list (...)

reschedule (job)
        if reason: task/project suspend
                mark job(s) as suspended in linkedlist1(resourcetype)
                addlast to linkedlist2(resourcetype)
        
        if reason: task/project resume
                mark job(s) as runable in linkedlist1(resourcetype)
                if job(s) contained in linkedlist2(resourcetype)
                        order runnable jobs in linkedlist2(resourcetype) by 
order in linkedlist1(resourcetype) (or EDF)
 
        if reason: drop WU
                do cleanup
                do reschedule reason 'task complete'

        if reason: task complete
                do cleanup
                check (via wct-job-list and resourceshare/project priority) 
what project shall get resource now.
                traverse linkedlist2(resourcetype) until end or eligible job 
found
                if job is found, launch it now.
                else
                traverse linkedlist1(resourcetype) until eligible job found or 
end
                if job is found, launch it now.
                else
                redo the above check and choose second/third/...-highest 
scoring project
 
        if reason: checkpointing / TSI
                addfirst (job) to linkedlist2(resourcetype)
                do reschedule reason 'task complete'

schedule(job)
        if new job has Deadline earlier than 
                now + (sum of estimatedjobruntime of jobs in 
linkedlist1(resourcetype) 
                        divided by resources available (e.g. CPUs))
                then insert job in linkedlist1(resourcetype) so that
                        deadline will be met.

sofar... my idea in pseudocode... 
the second (temporary) list could be omitted if having certain flags for the 
jobs in the first list - 
but adds some clarity for the first draft.
The 'do cleanup' thingy would also need to add the runtime for the rescheduled 
job to the list of wallclocktimes;
other than that... I hope I could outline my idea in a clear fashion;

Best
-Jonathan


_______________________________________________
boinc_dev mailing list
[email protected]
http://lists.ssl.berkeley.edu/mailman/listinfo/boinc_dev
To unsubscribe, visit the above URL and
(near bottom of page) enter your email address.

Reply via email to