*** empty log message ***

svn path=/trunk/boinc/; revision=6228
This commit is contained in:
David Anderson 2005-05-24 00:33:08 +00:00
parent 75c0ab74c0
commit 4b431ad129
8 changed files with 79 additions and 71 deletions

View File

@ -6960,3 +6960,16 @@ Rom 23 May 2005
/
configure.ac
David 23 May 2005
- scheduler fixes (from John McLeod and others)
- estimate remaining CPU correctly if frac done = 0
- avoid div by zero error
- fix seconds-per-day scaling problem
client/
app.C
client_types.C
cs_apps.C
cs_scheduler.C
scheduler_op.C

View File

@ -292,11 +292,10 @@ int ACTIVE_TASK::move_trickle_file() {
// Returns the estimated CPU time to completion (in seconds) of this task,
// based on current reported CPU time and fraction done
// CALL THIS ONLY IF FRACTION_DONE > 0
//
double ACTIVE_TASK::est_cpu_time_to_completion() {
if (fraction_done <= 0 || fraction_done > 1) {
return 0;
}
if (fraction_done >= 1) return 0;
return (current_cpu_time / fraction_done) - current_cpu_time;
}

View File

@ -1370,9 +1370,8 @@ double RESULT::estimated_cpu_time_remaining() {
if (state >= RESULT_COMPUTE_ERROR) return -1;
ACTIVE_TASK* atp = gstate.lookup_active_task_by_result(this);
if (atp) {
x = atp->est_cpu_time_to_completion();
if (x >= 0) return x;
if (atp && atp->fraction_done > 0) {
return atp->est_cpu_time_to_completion();
}
return estimated_cpu_time();
}

View File

@ -366,6 +366,7 @@ bool CLIENT_STATE::schedule_earliest_deadline_result(double expected_pay_off) {
if (r->project->suspended_via_gui) continue;
if (r->project->non_cpu_intensive) continue;
if (r->already_selected) continue;
if (r->suspended_via_gui) continue;
if (first || r->report_deadline < earliest_deadline) {
first = false;
best_project = r->project;
@ -462,58 +463,60 @@ bool CLIENT_STATE::schedule_cpus(double now) {
}
}
// adjust project debts
// reset debts for projects with no runnable results
// reset temporary fields
//
first = true;
double total_long_term_debt = 0;
int count_cpu_intensive = 0;
for (i=0; i<projects.size(); i++) {
p = projects[i];
if (p->non_cpu_intensive) continue;
count_cpu_intensive++;
double debt_inc =
(p->resource_share/local_total_resource_share)
* cpu_sched_work_done_this_period
- p->work_done_this_period;
p->long_term_debt += debt_inc;
total_long_term_debt += p->long_term_debt;
if (!p->next_runnable_result) {
p->debt = 0;
p->anticipated_debt = 0;
} else {
p->debt += debt_inc;
if (first) {
first = false;
min_debt = p->debt;
} else if (p->debt < min_debt) {
min_debt = p->debt;
if (local_total_resource_share > 0) {
// adjust project debts
// reset debts for projects with no runnable results
// reset temporary fields
//
first = true;
double total_long_term_debt = 0;
int count_cpu_intensive = 0;
for (i=0; i<projects.size(); i++) {
p = projects[i];
if (p->non_cpu_intensive) continue;
count_cpu_intensive++;
double debt_inc =
(p->resource_share/local_total_resource_share)
* cpu_sched_work_done_this_period
- p->work_done_this_period;
p->long_term_debt += debt_inc;
total_long_term_debt += p->long_term_debt;
if (!p->next_runnable_result) {
p->debt = 0;
p->anticipated_debt = 0;
} else {
p->debt += debt_inc;
if (first) {
first = false;
min_debt = p->debt;
} else if (p->debt < min_debt) {
min_debt = p->debt;
}
}
scope_messages.printf(
"CLIENT_STATE::schedule_cpus(): overall project debt; project '%s', debt '%f'\n",
p->project_name, p->debt
);
}
scope_messages.printf(
"CLIENT_STATE::schedule_cpus(): overall project debt; project '%s', debt '%f'\n",
p->project_name, p->debt
);
}
double avg_long_term_debt = total_long_term_debt / count_cpu_intensive;
double avg_long_term_debt = total_long_term_debt / count_cpu_intensive;
// Normalize debts to zero
//
for (i=0; i<projects.size(); i++) {
p = projects[i];
if (p->non_cpu_intensive) continue;
if (p->next_runnable_result) {
p->debt -= min_debt;
if (p->debt > MAX_DEBT) {
p->debt = MAX_DEBT;
// Normalize debts to zero
//
for (i=0; i<projects.size(); i++) {
p = projects[i];
if (p->non_cpu_intensive) continue;
if (p->next_runnable_result) {
p->debt -= min_debt;
if (p->debt > MAX_DEBT) {
p->debt = MAX_DEBT;
}
p->anticipated_debt = p->debt;
//msg_printf(p, MSG_INFO, "debt %f", p->debt);
p->next_runnable_result = NULL;
}
p->anticipated_debt = p->debt;
//msg_printf(p, MSG_INFO, "debt %f", p->debt);
p->next_runnable_result = NULL;
p->long_term_debt -= avg_long_term_debt;
}
p->long_term_debt -= avg_long_term_debt;
}
// schedule tasks for projects in order of decreasing anticipated debt

View File

@ -434,7 +434,6 @@ double CLIENT_STATE::ettprc(PROJECT *p, int k) {
//
int CLIENT_STATE::compute_work_requests() {
int urgency = WORK_FETCH_DONT_NEED;
int highest_project_urgency = WORK_FETCH_DONT_NEED;
unsigned int i;
double work_min_period = global_prefs.work_buf_min_days * SECONDS_PER_DAY;
double now = dtime();
@ -512,8 +511,6 @@ int CLIENT_STATE::compute_work_requests() {
p->work_request = global_work_need;
}
highest_project_urgency = max(highest_project_urgency, p->work_request_urgency);
// determine work requests for each project
// NOTE: don't need to divide by active_frac etc.;
// the scheduler does that (see sched/sched_send.C)
@ -1079,18 +1076,17 @@ void CLIENT_STATE::set_cpu_scheduler_modes() {
cpu_earliest_deadline_first = use_earliest_deadline_first;
}
double CLIENT_STATE::work_needed_secs()
{
double CLIENT_STATE::work_needed_secs() {
double total_work = 0;
for( unsigned int i = 0; i < results.size(); ++i) {
if (results[i]->project->non_cpu_intensive) continue;
total_work += results[i]->estimated_cpu_time_remaining();
}
if (total_work > global_prefs.work_buf_min_days) {
double x = global_prefs.work_buf_min_days*SECONDS_PER_DAY - total_work;
if (x < 0) {
return 0;
} else {
return global_prefs.work_buf_min_days - total_work;
}
return x;
}
const char *BOINC_RCSID_d35a4a7711 = "$Id$";

View File

@ -206,7 +206,6 @@ void SCHEDULER_OP::backoff(PROJECT* p, const char *error_msg ) {
p->nrpc_failures++;
}
set_min_rpc_time(p);
p->long_term_debt -= (p->min_rpc_time - dtime()) / gstate.global_prefs.max_projects_on_client;
}
// low-level routine to initiate an RPC

View File

@ -1,6 +1,6 @@
<?php
require_once("docutil.php");
page_head("BOINC Menubar v4.37 (3)");
page_head("BOINC Menubar v4.43 (4)");
echo "
@ -138,6 +138,11 @@ echo "
<li>Adds ability to manually run benchmarks</li>
<li>Improved efficiency</li></ul>
<p>&nbsp;</p>
<p><strong>Version 4.43 (4)</strong></p>
<ul>
<li>Includes improved BOINC client</li></ul>
";
page_tail();

View File

@ -161,18 +161,12 @@ $m419 = array(
);
$m437s = array(
"num"=>"4.37 (3)",
"num"=>"4.43 (4)",
"status"=>"Development version (simple GUI)",
"file"=>"boinc_menubar_v4.37_(3)_mac.zip",
"date"=>"14 May 2005",
"file"=>"boinc_menubar_v4.43_(4)_mac.zip",
"date"=>"23 May 2005",
"type"=>mac_simple(),
"bugs"=>"<li>Includes improved BOINC client</li>
<li>Fixes a problem which prevented some users from using proxies</li>
<li>Now displays the current status in the menubar by changing the icon and indicating the amount of work completed</li>
<li>Fixes a bug on dual processor machines where the status of both processes was not always being displayed </li>
<li>Adds a preference to share data between users </li><li>Improves security by hiding and encrypting proxy password</li>
<li>Adds ability to manually run benchmarks</li>
<li>Improved efficiency</li>
</ul>
"
);