Skip to content

Commit

Permalink
client/app interface: pass priority-related user preferences
Browse files Browse the repository at this point in the history
The user can specify 3 priority-related prefs in cc_config.h:
bool no_priority_change
int process_priority
int process_priority_special

Wrappers should honor these prefs,
but currently they don't have access to them.
Pass them in the APP_INIT_DATA structure.

Modify wrapper.cpp to use these prefs if they exist;
this overrides the priority specified in the job file, if any.
  • Loading branch information
davidpanderson committed Jun 11, 2020
1 parent bed2cd4 commit f257fbc
Show file tree
Hide file tree
Showing 3 changed files with 41 additions and 5 deletions.
19 changes: 17 additions & 2 deletions lib/app_ipc.cpp
Expand Up @@ -115,6 +115,9 @@ void APP_INIT_DATA::copy(const APP_INIT_DATA& a) {
project_preferences = NULL;
}
vbox_window = a.vbox_window;
no_priority_change = a.no_priority_change;
process_priority = a.process_priority;
process_priority_special = a.process_priority_special;
app_files = a.app_files;
}

Expand Down Expand Up @@ -204,7 +207,10 @@ int write_init_data_file(FILE* f, APP_INIT_DATA& ai) {
"<rsc_memory_bound>%f</rsc_memory_bound>\n"
"<rsc_disk_bound>%f</rsc_disk_bound>\n"
"<computation_deadline>%f</computation_deadline>\n"
"<vbox_window>%d</vbox_window>\n",
"<vbox_window>%d</vbox_window>\n"
"<no_priority_change>%d</no_priority_change>\n"
"<process_priority>%d</process_priority>\n"
"<process_priority_special>%d</process_priority_special>\n",
ai.slot,
ai.client_pid,
ai.wu_cpu_time,
Expand All @@ -229,7 +235,10 @@ int write_init_data_file(FILE* f, APP_INIT_DATA& ai) {
ai.rsc_memory_bound,
ai.rsc_disk_bound,
ai.computation_deadline,
ai.vbox_window
ai.vbox_window,
ai.no_priority_change?1:0,
ai.process_priority,
ai.process_priority_special
);
MIOFILE mf;
mf.init_file(f);
Expand Down Expand Up @@ -297,6 +306,9 @@ void APP_INIT_DATA::clear() {
memset(&shmem_seg_name, 0, sizeof(shmem_seg_name));
wu_cpu_time = 0;
vbox_window = false;
no_priority_change = false;
process_priority = -1;
process_priority_special = -1;
}

int parse_init_data_file(FILE* f, APP_INIT_DATA& ai) {
Expand Down Expand Up @@ -403,6 +415,9 @@ int parse_init_data_file(FILE* f, APP_INIT_DATA& ai) {
if (xp.parse_double("fraction_done_start", ai.fraction_done_start)) continue;
if (xp.parse_double("fraction_done_end", ai.fraction_done_end)) continue;
if (xp.parse_bool("vbox_window", ai.vbox_window)) continue;
if (xp.parse_bool("no_priority_change", ai.no_priority_change)) continue;
if (xp.parse_int("process_priority", ai.process_priority)) continue;
if (xp.parse_int("process_priority_special", ai.process_priority_special)) continue;
xp.skip_unexpected(false, "parse_init_data_file");
}
fprintf(stderr, "%s: parse_init_data_file: no end tag\n",
Expand Down
8 changes: 7 additions & 1 deletion lib/app_ipc.h
Expand Up @@ -199,10 +199,16 @@ struct APP_INIT_DATA {
//
double ncpus;

// client configuration info
// client configuration info, from cc_config.h
//
bool vbox_window; // whether to open a console window for VM apps

// the following for wrappers
//
bool no_priority_change;
int process_priority;
int process_priority_special;

// list of files in the app version (for wrappers)
//
std::vector<std::string> app_files;
Expand Down
19 changes: 17 additions & 2 deletions samples/wrapper/wrapper.cpp
Expand Up @@ -740,6 +740,19 @@ int TASK::run(int argct, char** argvt) {
boinc_msg_prefix(buf, sizeof(buf)), app_path, command_line.c_str()
);

// decide on subprocess priority. User prefs trump job.xml
//
int priority_val = 0;
if (aid.no_priority_change) {
priority_val = 0;
} else {
if (aid.process_priority > 0) {
priority_val = process_priority_value(aid.process_priority);
} else {
priority_val = process_priority_value(priority);
}
}

#ifdef _WIN32
PROCESS_INFORMATION process_info;
STARTUPINFO startup_info;
Expand Down Expand Up @@ -800,7 +813,7 @@ int TASK::run(int argct, char** argvt) {
NULL,
NULL,
TRUE, // bInheritHandles
CREATE_NO_WINDOW|process_priority_value(priority),
CREATE_NO_WINDOW|priority_val,
(LPVOID) env_vars,
exec_dir.empty()?NULL:exec_dir.c_str(),
&startup_info,
Expand Down Expand Up @@ -875,7 +888,9 @@ int TASK::run(int argct, char** argvt) {
argv[0] = app_path;
strlcpy(arglist, command_line.c_str(), sizeof(arglist));
parse_command_line(arglist, argv+1);
setpriority(PRIO_PROCESS, 0, process_priority_value(priority));
if (priority_val) {
setpriority(PRIO_PROCESS, 0, priority_val);
}
if (!exec_dir.empty()) {
retval = chdir(exec_dir.c_str());
if (retval) {
Expand Down

0 comments on commit f257fbc

Please sign in to comment.