diff --git a/checkin_notes b/checkin_notes index fc140dbed5..b8ddffa7d0 100644 --- a/checkin_notes +++ b/checkin_notes @@ -6473,3 +6473,14 @@ Charlie 24 Sep 2011 mac_installer/ PostInstall.cpp uninstall.cpp + +David 26 Sept 2011 + - client simulator: add --existing_jobs_only option. + This simulates just the jobs in the state file, + rather than simulating an infinite stream of jobs + modeled after the ones in the state file. + + client/ + sim.cpp,h + cs_prefs.cpp + makefile_sim diff --git a/client/cs_prefs.cpp b/client/cs_prefs.cpp index 1e50021e74..7160e325d9 100644 --- a/client/cs_prefs.cpp +++ b/client/cs_prefs.cpp @@ -504,7 +504,9 @@ void CLIENT_STATE::read_global_prefs( ); request_schedule_cpus("Prefs update"); request_work_fetch("Prefs update"); +#ifndef SIM active_tasks.request_reread_app_info(); +#endif } int CLIENT_STATE::save_global_prefs( diff --git a/client/makefile_sim b/client/makefile_sim index 71409ed057..f76473934e 100644 --- a/client/makefile_sim +++ b/client/makefile_sim @@ -23,6 +23,7 @@ OBJS = \ cs_proxy.o \ cs_scheduler.o \ cs_statefile.o \ + cs_trickle.o \ current_version.o \ file_names.o \ file_xfer.o \ diff --git a/client/sim.cpp b/client/sim.cpp index 4f2ae6e7ae..4b1582bb23 100644 --- a/client/sim.cpp +++ b/client/sim.cpp @@ -17,7 +17,7 @@ // BOINC client simulator. // -// usage: sim options +// usage: directory options // // [--infile_prefix dir/] // Prefix of input filenames; default is blank. @@ -37,18 +37,13 @@ // results.txt (simulation results, human-readable) // inputs.txt (sim parameters) // summary.txt (summary of inputs; detailed outputs) -// if using REC: -// rec.png -// if not using REC: -// debt.dat -// debt_overall.png -// debt_cpu_std.png -// debt_cpu_ltd.png -// debt_nvidia_std.png -// debt_nvidia_ltd.png -// ... +// rec.png // // Simulation params: +// [--existing_jobs_only] +// If set, simulate the specific set of jobs in the state file. +// Otherwise simulate an infinite stream of jobs +// modeled after those found in the state file. // [--duration x] // simulation duration (default 86400) // [--delta x] @@ -102,7 +97,8 @@ string html_msg; double active_time = 0; double gpu_active_time = 0; bool server_uses_workload = false; -bool cpu_sched_rr_only; +bool cpu_sched_rr_only = false; +bool existing_jobs_only = false; RANDOM_PROCESS on_proc; RANDOM_PROCESS active_proc; @@ -121,6 +117,7 @@ void usage(char* prog) { "[--infile_prefix F]\n" "[--config_prefix F]\n" "[--outfile_prefix F]\n" + "[--existing_jobs_only]\n" "[--duration X]\n" "[--delta X]\n" "[--server_uses_workload]\n" @@ -687,7 +684,7 @@ double CLIENT_STATE::monotony() { // the CPU totals are there; compute the other fields // -void SIM_RESULTS::compute() { +void SIM_RESULTS::compute_figures_of_merit() { double flops_total = cpu_peak_flops()*active_time + gpu_peak_flops()*gpu_active_time; double flops_idle = flops_total - flops_used; @@ -909,7 +906,7 @@ void html_rec() { void html_end() { fprintf(html_out, "
\n"); - sim_results.compute(); + sim_results.compute_figures_of_merit(); sim_results.print(html_out); print_project_results(html_out); fprintf(html_out, "\n"); @@ -1046,7 +1043,7 @@ void simulate() { while (1) { action = false; action |= gstate.schedule_cpus(); - if (connected) { + if (connected && !existing_jobs_only) { action |= gstate.scheduler_rpc_poll(); } action |= gstate.active_tasks.poll(); @@ -1271,8 +1268,10 @@ void do_client_simulation() { } clear_backoff(); - gstate.workunits.clear(); - gstate.results.clear(); + if (!existing_jobs_only) { + gstate.workunits.clear(); + gstate.results.clear(); + } gstate.set_ncpus(); work_fetch.init(); @@ -1282,7 +1281,7 @@ void do_client_simulation() { gstate.request_work_fetch("init"); simulate(); - sim_results.compute(); + sim_results.compute_figures_of_merit(); sprintf(buf, "%s%s", outfile_prefix, RESULTS_DAT_FNAME); FILE* f = fopen(buf, "w"); @@ -1333,6 +1332,8 @@ int main(int argc, char** argv) { config_prefix = argv[i++]; } else if (!strcmp(opt, "--outfile_prefix")) { outfile_prefix = argv[i++]; + } else if (!strcmp(opt, "--existing_jobs_only")) { + existing_jobs_only = true; } else if (!strcmp(opt, "--duration")) { duration = atof(next_arg(argc, argv, i)); } else if (!strcmp(opt, "--delta")) { diff --git a/client/sim.h b/client/sim.h index 1e3e415711..bc9f6af029 100644 --- a/client/sim.h +++ b/client/sim.h @@ -34,7 +34,7 @@ struct SIM_RESULTS { double idle_frac; int nrpcs; - void compute(); + void compute_figures_of_merit(); void print(FILE* f, bool human_readable=false); void parse(FILE* f); void add(SIM_RESULTS& r);