From 73474ac408ff2a8cc87f8b15bd96bd87d9b9c75e Mon Sep 17 00:00:00 2001 From: David Anderson Date: Thu, 15 Mar 2012 19:50:10 +0000 Subject: [PATCH] - scheduler: when HR is being used, make per-HR slot allocation an option rather than the default. Kevin reported that slot allocation wasn't working for WCG. The default is now no slot allocation, and use the regular result enumeration function rather than the once that scans the entire table. The config flag for enabling slot allocation is . svn path=/trunk/boinc/; revision=25432 --- checkin_notes | 17 +++++++++++++- sched/feeder.cpp | 50 +++++++++++++++++++++++------------------- sched/hr_info.cpp | 2 +- sched/sched_config.cpp | 1 + sched/sched_config.h | 1 + 5 files changed, 46 insertions(+), 25 deletions(-) diff --git a/checkin_notes b/checkin_notes index c6fb7dfcc1..f5bb869052 100644 --- a/checkin_notes +++ b/checkin_notes @@ -2681,8 +2681,23 @@ David 14 Mar 2012 David 15 Mar 2012 - client: when killing a task, don't delete its shmem or change its state. - These mess up the logic for dealing with exited processes. + These mess up the logic for dealing with exited processes, + resulting in incorrect log messages. client/ app.cpp app_control.cpp + +David 15 Mar 2012 + - scheduler: when HR is being used, + make per-HR slot allocation an option rather than the default. + Kevin reported that slot allocation wasn't working for WCG. + The default is now no slot allocation, + and use the regular result enumeration function + rather than the once that scans the entire table. + The config flag for enabling slot allocation is . + + sched/ + sched_config.cpp,h + feeder.cpp + hr_info.cpp diff --git a/sched/feeder.cpp b/sched/feeder.cpp index 7e3c141105..61bdbec906 100644 --- a/sched/feeder.cpp +++ b/sched/feeder.cpp @@ -252,7 +252,7 @@ static bool get_job_from_db( int hrt = ssp->apps[app_index].homogeneous_redundancy; while (1) { - if (hrt) { + if (hrt && config.hr_allocate_slots) { retval = wi.enumerate_all(enum_size, select_clause); } else { retval = wi.enumerate(enum_size, select_clause, order_clause); @@ -326,7 +326,7 @@ static bool get_job_from_db( // if using HR, check whether we've exceeded quota for this class // - if (hrt) { + if (hrt && config.hr_allocate_slots) { if (!hr_info.accept(hrt, wi.wu.hr_class)) { log_messages.printf(MSG_DEBUG, "rejecting [RESULT#%u] because HR class %d/%d over quota\n", @@ -420,7 +420,7 @@ static bool scan_work_array(vector &work_items) { } } - if (using_hr) { + if (using_hr && config.hr_allocate_slots) { hr_count_slots(); } @@ -616,34 +616,38 @@ void hr_init() { } } using_hr = true; - hr_info.init(); - retval = hr_info.read_file(); - if (retval) { - log_messages.printf(MSG_CRITICAL, - "Can't read HR info file: %s\n", boincerror(retval) - ); - exit(1); - } + if (config.hr_allocate_slots) { + hr_info.init(); + retval = hr_info.read_file(); + if (retval) { + log_messages.printf(MSG_CRITICAL, + "Can't read HR info file: %s\n", boincerror(retval) + ); + exit(1); + } - // find the weight for each HR type - // - for (i=0; inapps; i++) { - hrt = ssp->apps[i].homogeneous_redundancy; - hr_info.type_weights[hrt] += ssp->apps[i].weight; - hr_info.type_being_used[hrt] = true; - } + // find the weight for each HR type + // + for (i=0; inapps; i++) { + hrt = ssp->apps[i].homogeneous_redundancy; + hr_info.type_weights[hrt] += ssp->apps[i].weight; + hr_info.type_being_used[hrt] = true; + } - // compute the slot allocations for HR classes - // - hr_info.allocate(ssp->max_wu_results); - hr_info.show(stderr); + // compute the slot allocations for HR classes + // + hr_info.allocate(ssp->max_wu_results); + hr_info.show(stderr); + } } // write a summary of feeder state to stderr // void show_state(int) { ssp->show(stderr); - hr_info.show(stderr); + if (config.hr_allocate_slots) { + hr_info.show(stderr); + } } void show_version() { diff --git a/sched/hr_info.cpp b/sched/hr_info.cpp index a286f54696..8c27cebafb 100644 --- a/sched/hr_info.cpp +++ b/sched/hr_info.cpp @@ -175,7 +175,7 @@ void HR_INFO::allocate(int total_slots) { } // Decide if job of the given HR type and class should be added to array, -// and if to update counts +// and if so update counts // bool HR_INFO::accept(int hrt, int hrc) { if (cur_slots[hrt][hrc] >= max_slots[hrt][hrc]) { diff --git a/sched/sched_config.cpp b/sched/sched_config.cpp index b719ac0632..8ea03eac44 100644 --- a/sched/sched_config.cpp +++ b/sched/sched_config.cpp @@ -141,6 +141,7 @@ int SCHED_CONFIG::parse(FILE* f) { if (xp.parse_bool("non_cpu_intensive", non_cpu_intensive)) continue; if (xp.parse_bool("verify_files_on_app_start", verify_files_on_app_start)) continue; if (xp.parse_int("homogeneous_redundancy", homogeneous_redundancy)) continue; + if (xp.parse_bool("hr_allocate_slots", hr_allocate_slots)) continue; if (xp.parse_bool("msg_to_host", msg_to_host)) continue; if (xp.parse_bool("ignore_upload_certificates", ignore_upload_certificates)) continue; if (xp.parse_bool("dont_generate_upload_certificates", dont_generate_upload_certificates)) continue; diff --git a/sched/sched_config.h b/sched/sched_config.h index 3812683d95..0c70661ad8 100644 --- a/sched/sched_config.h +++ b/sched/sched_config.h @@ -66,6 +66,7 @@ struct SCHED_CONFIG { bool non_cpu_intensive; bool verify_files_on_app_start; int homogeneous_redundancy; + bool hr_allocate_slots; bool ignore_upload_certificates; bool dont_generate_upload_certificates; int uldl_dir_fanout; // fanout of ul/dl dirs; 0 if none