mirror of https://github.com/BOINC/boinc.git
*** empty log message ***
svn path=/trunk/boinc/; revision=10445
This commit is contained in:
parent
9d12b889e0
commit
ddc76d9587
|
@ -6544,3 +6544,10 @@ David 21 June 2006
|
||||||
cs_scheduler.C
|
cs_scheduler.C
|
||||||
log_flags.C,h
|
log_flags.C,h
|
||||||
time_stats.C
|
time_stats.C
|
||||||
|
|
||||||
|
David 21 June 2006
|
||||||
|
- core client: add some logging messages to rr_simulation()
|
||||||
|
|
||||||
|
client/
|
||||||
|
cpu_sched.C
|
||||||
|
cs_scheduler.C
|
||||||
|
|
|
@ -278,7 +278,7 @@ void CLIENT_STATE::adjust_debts() {
|
||||||
p->anticipated_debt = 0;
|
p->anticipated_debt = 0;
|
||||||
}
|
}
|
||||||
scope_messages.printf(
|
scope_messages.printf(
|
||||||
"CLIENT_STATE::adjust_debts(): project %s: short-term debt %f\n",
|
"adjust_debts(): project %s: short-term debt %f\n",
|
||||||
p->project_name, p->short_term_debt
|
p->project_name, p->short_term_debt
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
@ -395,7 +395,7 @@ void CLIENT_STATE::schedule_cpus() {
|
||||||
|
|
||||||
// do round-robin simulation to find what results miss deadline,
|
// do round-robin simulation to find what results miss deadline,
|
||||||
//
|
//
|
||||||
scope_messages.printf("rr_sim: calling from cpu_scheduler");
|
scope_messages.printf("rr_simulation: calling from cpu_scheduler\n");
|
||||||
rr_simulation(avg_proc_rate()/ncpus, runnable_resource_share());
|
rr_simulation(avg_proc_rate()/ncpus, runnable_resource_share());
|
||||||
if (log_flags.cpu_sched_debug) {
|
if (log_flags.cpu_sched_debug) {
|
||||||
print_deadline_misses();
|
print_deadline_misses();
|
||||||
|
@ -735,6 +735,8 @@ bool CLIENT_STATE::rr_simulation(double per_cpu_proc_rate, double rrs) {
|
||||||
|
|
||||||
SCOPE_MSG_LOG scope_messages(log_messages, CLIENT_MSG_LOG::DEBUG_CPU_SCHED);
|
SCOPE_MSG_LOG scope_messages(log_messages, CLIENT_MSG_LOG::DEBUG_CPU_SCHED);
|
||||||
|
|
||||||
|
scope_messages.printf( "rr_simulation: start\n");
|
||||||
|
|
||||||
// Initialize the "active" and "pending" lists for each project.
|
// Initialize the "active" and "pending" lists for each project.
|
||||||
// These keep track of that project's results
|
// These keep track of that project's results
|
||||||
//
|
//
|
||||||
|
@ -791,7 +793,8 @@ bool CLIENT_STATE::rr_simulation(double per_cpu_proc_rate, double rrs) {
|
||||||
double diff = sim_now + rpbest->rrsim_finish_delay - rpbest->computation_deadline();
|
double diff = sim_now + rpbest->rrsim_finish_delay - rpbest->computation_deadline();
|
||||||
if (diff > 0) {
|
if (diff > 0) {
|
||||||
scope_messages.printf(
|
scope_messages.printf(
|
||||||
"rr_sim: result %s misses deadline by %f\n", rpbest->name, diff
|
"rr_simulation: result %s misses deadline by %f\n",
|
||||||
|
rpbest->name, diff
|
||||||
);
|
);
|
||||||
rpbest->rr_sim_misses_deadline = true;
|
rpbest->rr_sim_misses_deadline = true;
|
||||||
pbest->rr_sim_deadlines_missed++;
|
pbest->rr_sim_deadlines_missed++;
|
||||||
|
@ -867,8 +870,19 @@ bool CLIENT_STATE::rr_simulation(double per_cpu_proc_rate, double rrs) {
|
||||||
|
|
||||||
sim_now += rpbest->rrsim_finish_delay;
|
sim_now += rpbest->rrsim_finish_delay;
|
||||||
}
|
}
|
||||||
if (!rval) {
|
if (log_flags.cpu_sched_debug) {
|
||||||
scope_messages.printf( "rr_sim: deadlines met\n");
|
for (i=0; i<projects.size(); i++) {
|
||||||
|
p = projects[i];
|
||||||
|
msg_printf(NULL, MSG_INFO,
|
||||||
|
"rr_simulation: shortfall for %s is %f\n",
|
||||||
|
p->project_name, p->cpu_shortfall
|
||||||
|
);
|
||||||
|
}
|
||||||
|
msg_printf(NULL, MSG_INFO,
|
||||||
|
"rr_simulation: end; returning %s; cpu_shortfall %f\n",
|
||||||
|
rval?"true":"false",
|
||||||
|
cpu_shortfall
|
||||||
|
);
|
||||||
}
|
}
|
||||||
return rval;
|
return rval;
|
||||||
}
|
}
|
||||||
|
|
|
@ -612,13 +612,13 @@ int CLIENT_STATE::compute_work_requests() {
|
||||||
if (estimated_time_to_starvation < work_min_period) {
|
if (estimated_time_to_starvation < work_min_period) {
|
||||||
if (estimated_time_to_starvation == 0) {
|
if (estimated_time_to_starvation == 0) {
|
||||||
scope_messages.printf(
|
scope_messages.printf(
|
||||||
"CLIENT_STATE::compute_work_requests(): project '%s' is starved\n",
|
"compute_work_requests(): project '%s' is starved\n",
|
||||||
p->project_name
|
p->project_name
|
||||||
);
|
);
|
||||||
p->work_request_urgency = WORK_FETCH_NEED_IMMEDIATELY;
|
p->work_request_urgency = WORK_FETCH_NEED_IMMEDIATELY;
|
||||||
} else {
|
} else {
|
||||||
scope_messages.printf(
|
scope_messages.printf(
|
||||||
"CLIENT_STATE::compute_work_requests(): project '%s' will starve in %.2f sec\n",
|
"compute_work_requests(): project '%s' will starve in %.2f sec\n",
|
||||||
p->project_name, estimated_time_to_starvation
|
p->project_name, estimated_time_to_starvation
|
||||||
);
|
);
|
||||||
p->work_request_urgency = WORK_FETCH_NEED;
|
p->work_request_urgency = WORK_FETCH_NEED;
|
||||||
|
@ -640,13 +640,13 @@ int CLIENT_STATE::compute_work_requests() {
|
||||||
}
|
}
|
||||||
|
|
||||||
scope_messages.printf(
|
scope_messages.printf(
|
||||||
"CLIENT_STATE::compute_work_requests(): project %s work req: %f sec urgency: %d\n",
|
"compute_work_requests(): project %s work req: %f sec urgency: %d\n",
|
||||||
p->project_name, p->work_request, p->work_request_urgency
|
p->project_name, p->work_request, p->work_request_urgency
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
scope_messages.printf(
|
scope_messages.printf(
|
||||||
"CLIENT_STATE::compute_work_requests(): client work need: %f sec, urgency %d\n",
|
"compute_work_requests(): client work need: %f sec, urgency %d\n",
|
||||||
global_work_need, overall_work_fetch_urgency
|
global_work_need, overall_work_fetch_urgency
|
||||||
);
|
);
|
||||||
|
|
||||||
|
@ -1034,7 +1034,7 @@ int CLIENT_STATE::handle_scheduler_reply(
|
||||||
for (i=0; i<sr.result_acks.size(); i++) {
|
for (i=0; i<sr.result_acks.size(); i++) {
|
||||||
RESULT* rp = lookup_result(project, sr.result_acks[i].name);
|
RESULT* rp = lookup_result(project, sr.result_acks[i].name);
|
||||||
scope_messages.printf(
|
scope_messages.printf(
|
||||||
"CLIENT_STATE::handle_scheduler_reply(): got ack for result %s\n",
|
"handle_scheduler_reply(): got ack for result %s\n",
|
||||||
sr.result_acks[i].name
|
sr.result_acks[i].name
|
||||||
);
|
);
|
||||||
if (rp) {
|
if (rp) {
|
||||||
|
@ -1116,7 +1116,7 @@ int CLIENT_STATE::handle_scheduler_reply(
|
||||||
}
|
}
|
||||||
|
|
||||||
set_client_state_dirty("handle_scheduler_reply");
|
set_client_state_dirty("handle_scheduler_reply");
|
||||||
scope_messages.printf("CLIENT_STATE::handle_scheduler_reply(): State after handle_scheduler_reply():\n");
|
scope_messages.printf("handle_scheduler_reply(): State after handle_scheduler_reply():\n");
|
||||||
print_summary();
|
print_summary();
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
@ -1154,7 +1154,7 @@ void CLIENT_STATE::set_work_fetch_mode() {
|
||||||
|
|
||||||
SCOPE_MSG_LOG scope_messages(log_messages, CLIENT_MSG_LOG::DEBUG_CPU_SCHED);
|
SCOPE_MSG_LOG scope_messages(log_messages, CLIENT_MSG_LOG::DEBUG_CPU_SCHED);
|
||||||
|
|
||||||
scope_messages.printf("rr_sim: calling from work_fetch");
|
scope_messages.printf("rr_simulation: calling from work_fetch\n");
|
||||||
if (rr_simulation(per_cpu_proc_rate, rrs)) {
|
if (rr_simulation(per_cpu_proc_rate, rrs)) {
|
||||||
if (!no_work_for_a_cpu()) {
|
if (!no_work_for_a_cpu()) {
|
||||||
should_not_fetch_work = true;
|
should_not_fetch_work = true;
|
||||||
|
@ -1163,7 +1163,7 @@ void CLIENT_STATE::set_work_fetch_mode() {
|
||||||
// if fetching more work would cause round-robin to
|
// if fetching more work would cause round-robin to
|
||||||
// miss a deadline, don't fetch more work
|
// miss a deadline, don't fetch more work
|
||||||
//
|
//
|
||||||
scope_messages.printf("rr_sim: calling from work_fetch with extended rrs");
|
scope_messages.printf("rr_simulation: calling from work_fetch with extended rrs\n");
|
||||||
PROJECT* p = next_project_need_work();
|
PROJECT* p = next_project_need_work();
|
||||||
if (p && !p->runnable()) {
|
if (p && !p->runnable()) {
|
||||||
rrs += p->resource_share;
|
rrs += p->resource_share;
|
||||||
|
|
|
@ -1,6 +1,10 @@
|
||||||
<?
|
<?
|
||||||
|
|
||||||
$project_news = array(
|
$project_news = array(
|
||||||
|
array("June 21, 2006",
|
||||||
|
"BOINCstats and the BAM! account manager
|
||||||
|
are now available <a href=http://jp.boincstats.com>in Japanese</a>."
|
||||||
|
),
|
||||||
array("June 15, 2006",
|
array("June 15, 2006",
|
||||||
"BOINC's CPU scheduler has become smarter:
|
"BOINC's CPU scheduler has become smarter:
|
||||||
it now waits until an application has checkpointed
|
it now waits until an application has checkpointed
|
||||||
|
|
|
@ -9,6 +9,7 @@ This file has the following format:
|
||||||
<cc_config>
|
<cc_config>
|
||||||
[ <save_stats_days>N</save_stats_days> ]
|
[ <save_stats_days>N</save_stats_days> ]
|
||||||
[ <dont_check_file_size>0|1</dont_check_file_size> ]
|
[ <dont_check_file_size>0|1</dont_check_file_size> ]
|
||||||
|
[ <ncpus>N</ncpus> ]
|
||||||
<log_flags>
|
<log_flags>
|
||||||
[ flags ]
|
[ flags ]
|
||||||
</log_flags>
|
</log_flags>
|
||||||
|
@ -24,6 +25,9 @@ list_item_func("<save_stats_days>",
|
||||||
list_item_func("<dont_check_file_sizes>",
|
list_item_func("<dont_check_file_sizes>",
|
||||||
"If nonzero, don't check file sizes"
|
"If nonzero, don't check file sizes"
|
||||||
);
|
);
|
||||||
|
list_item_func("<ncpus>",
|
||||||
|
"Act as if there were N CPUs (for debugging)."
|
||||||
|
);
|
||||||
list_end();
|
list_end();
|
||||||
echo "
|
echo "
|
||||||
The core client generates messages:
|
The core client generates messages:
|
||||||
|
|
|
@ -270,7 +270,7 @@ Tiebreaker: least index in result array.
|
||||||
<li> Find the project P with the greatest anticipated debt,
|
<li> Find the project P with the greatest anticipated debt,
|
||||||
select one of P's runnable results
|
select one of P's runnable results
|
||||||
(picking one that is already running, if possible,
|
(picking one that is already running, if possible,
|
||||||
else the result with earliest deadline)
|
else the one received first from the project)
|
||||||
and schedule that result.
|
and schedule that result.
|
||||||
<li> Decrement P's anticipated debt by the 'expected payoff'
|
<li> Decrement P's anticipated debt by the 'expected payoff'
|
||||||
(the scheduling period divided by NCPUS).
|
(the scheduling period divided by NCPUS).
|
||||||
|
|
Loading…
Reference in New Issue