static uint32_t _get_priority_internal(time_t start_time, struct job_record *job_ptr) { double priority = 0.0; priority_factors_object_t pre_factors; if (job_ptr->direct_set_prio && (job_ptr->priority > 0)) return job_ptr->priority; if (!job_ptr->details) { error("_get_priority_internal: job %u does not have a " "details symbol set, can't set priority", job_ptr->job_id); return 0; } /* figure out the priority */ _get_priority_factors(start_time, job_ptr); memcpy(&pre_factors, job_ptr->prio_factors, sizeof(priority_factors_object_t)); job_ptr->prio_factors->priority_age *= (double)weight_age; job_ptr->prio_factors->priority_fs *= (double)weight_fs; job_ptr->prio_factors->priority_js *= (double)weight_js; job_ptr->prio_factors->priority_part *= (double)weight_part; job_ptr->prio_factors->priority_qos *= (double)weight_qos; priority = job_ptr->prio_factors->priority_age + job_ptr->prio_factors->priority_fs + job_ptr->prio_factors->priority_js + job_ptr->prio_factors->priority_part + job_ptr->prio_factors->priority_qos - (double)(job_ptr->prio_factors->nice - NICE_OFFSET); /* Priority 0 is reserved for held jobs */ if (priority < 1) priority = 1; if (priority_debug) { info("Weighted Age priority is %f * %u = %.2f", pre_factors.priority_age, weight_age, job_ptr->prio_factors->priority_age); info("Weighted Fairshare priority is %f * %u = %.2f", pre_factors.priority_fs, weight_fs, job_ptr->prio_factors->priority_fs); info("Weighted JobSize priority is %f * %u = %.2f", pre_factors.priority_js, weight_js, job_ptr->prio_factors->priority_js); info("Weighted Partition priority is %f * %u = %.2f", pre_factors.priority_part, weight_part, job_ptr->prio_factors->priority_part); info("Weighted QOS priority is %f * %u = %.2f", pre_factors.priority_qos, weight_qos, job_ptr->prio_factors->priority_qos); info("Job %u priority: %.2f + %.2f + %.2f + %.2f + %.2f - %d " "= %.2f", job_ptr->job_id, job_ptr->prio_factors->priority_age, job_ptr->prio_factors->priority_fs, job_ptr->prio_factors->priority_js, job_ptr->prio_factors->priority_part, job_ptr->prio_factors->priority_qos, (job_ptr->prio_factors->nice - NICE_OFFSET), priority); } return (uint32_t)priority; }
static uint32_t _get_priority_internal(time_t start_time, struct job_record *job_ptr) { double priority = 0.0; priority_factors_object_t pre_factors; if (job_ptr->direct_set_prio) return job_ptr->priority; if (!job_ptr->details) { error("_get_priority_internal: job %u does not have a " "details symbol set, can't set priority", job_ptr->job_id); return 0; } /* * This means the job is not eligible yet */ if (!job_ptr->details->begin_time || (job_ptr->details->begin_time > start_time)) return 1; /* figure out the priority */ _get_priority_factors(start_time, job_ptr); memcpy(&pre_factors, job_ptr->prio_factors, sizeof(job_ptr->prio_factors)); job_ptr->prio_factors->priority_age *= (double)weight_age; job_ptr->prio_factors->priority_fs *= (double)weight_fs; job_ptr->prio_factors->priority_js *= (double)weight_js; job_ptr->prio_factors->priority_part *= (double)weight_part; job_ptr->prio_factors->priority_qos *= (double)weight_qos; priority = job_ptr->prio_factors->priority_age + job_ptr->prio_factors->priority_fs + job_ptr->prio_factors->priority_js + job_ptr->prio_factors->priority_part + job_ptr->prio_factors->priority_qos - (double)(job_ptr->prio_factors->nice - NICE_OFFSET); /* * 0 means the job is held; 1 means system hold * so 2 is the lowest non-held priority */ if (priority < 2) priority = 2; if (priority_debug) { info("Weighted Age priority is %f * %u = %.2f", pre_factors.priority_age, weight_age, job_ptr->prio_factors->priority_age); info("Weighted Fairshare priority is %f * %u = %.2f", pre_factors.priority_fs, weight_fs, job_ptr->prio_factors->priority_fs); info("Weighted JobSize priority is %f * %u = %.2f", pre_factors.priority_js, weight_js, job_ptr->prio_factors->priority_js); info("Weighted Partition priority is %f * %u = %.2f", pre_factors.priority_part, weight_part, job_ptr->prio_factors->priority_part); info("Weighted QOS priority is %f * %u = %.2f", pre_factors.priority_qos, weight_qos, job_ptr->prio_factors->priority_qos); info("Job %u priority: %.2f + %.2f + %.2f + %.2f + %.2f - %d " "= %.2f", job_ptr->job_id, job_ptr->prio_factors->priority_age, job_ptr->prio_factors->priority_fs, job_ptr->prio_factors->priority_js, job_ptr->prio_factors->priority_part, job_ptr->prio_factors->priority_qos, (job_ptr->prio_factors->nice - NICE_OFFSET), priority); } return (uint32_t)priority; }