mirror of https://github.com/BOINC/boinc.git
parent
423f9f08d2
commit
5e0d0db47c
|
@ -1309,26 +1309,33 @@ bool CLIENT_STATE::enforce_run_list(vector<RESULT*>& run_list) {
|
||||||
// until it reaches deadline pressure.
|
// until it reaches deadline pressure.
|
||||||
// So we'll go with 1).
|
// So we'll go with 1).
|
||||||
|
|
||||||
// skip jobs whose working set is too large to fit in available RAM
|
// skip jobs whose 'expected working set size' (EWSS)
|
||||||
|
// is too large to fit in available RAM.
|
||||||
|
// The EWSS is the max of
|
||||||
|
// 1) the recent average WSS of the job
|
||||||
|
// 2) if it hasn't run yet,
|
||||||
|
// the max WSS of other jobs of this app version
|
||||||
|
// 3) the WU's rsc_memory_bound
|
||||||
|
// This handles the case of CPDN, where jobs run with
|
||||||
|
// small WSS for a while and then get big.
|
||||||
//
|
//
|
||||||
double wss = 0;
|
double ewss = 0;
|
||||||
if (atp) {
|
if (atp) {
|
||||||
atp->too_large = false;
|
atp->too_large = false;
|
||||||
wss = atp->procinfo.working_set_size_smoothed;
|
ewss = atp->procinfo.working_set_size_smoothed;
|
||||||
} else {
|
} else {
|
||||||
wss = rp->avp->max_working_set_size;
|
ewss = rp->avp->max_working_set_size;
|
||||||
}
|
}
|
||||||
if (wss == 0) {
|
ewss = std::max(ewss, rp->wup->rsc_memory_bound);
|
||||||
wss = rp->wup->rsc_memory_bound;
|
|
||||||
}
|
if (ewss > ram_left) {
|
||||||
if (wss > ram_left) {
|
|
||||||
if (atp) {
|
if (atp) {
|
||||||
atp->too_large = true;
|
atp->too_large = true;
|
||||||
}
|
}
|
||||||
if (log_flags.cpu_sched_debug || log_flags.mem_usage_debug) {
|
if (log_flags.cpu_sched_debug || log_flags.mem_usage_debug) {
|
||||||
msg_printf(rp->project, MSG_INFO,
|
msg_printf(rp->project, MSG_INFO,
|
||||||
"[cpu_sched_debug] can't run %s: WS too big %.2fMB > %.2fMB",
|
"[cpu_sched_debug] skipping %s: estimated WSS (%.2fMB) exceeds RAM left (%.2fMB)",
|
||||||
rp->name, wss/MEGA, ram_left/MEGA
|
rp->name, ewss/MEGA, ram_left/MEGA
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
continue;
|
continue;
|
||||||
|
@ -1357,7 +1364,7 @@ bool CLIENT_STATE::enforce_run_list(vector<RESULT*>& run_list) {
|
||||||
|
|
||||||
ncpus_used += rp->avp->avg_ncpus;
|
ncpus_used += rp->avp->avg_ncpus;
|
||||||
atp->next_scheduler_state = CPU_SCHED_SCHEDULED;
|
atp->next_scheduler_state = CPU_SCHED_SCHEDULED;
|
||||||
ram_left -= wss;
|
ram_left -= ewss;
|
||||||
if (have_max_concurrent) {
|
if (have_max_concurrent) {
|
||||||
max_concurrent_inc(rp);
|
max_concurrent_inc(rp);
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue