diff --git a/include/moab.h b/include/moab.h index 2962954..b1c18c4 100644 --- a/include/moab.h +++ b/include/moab.h @@ -274,6 +274,7 @@ typedef struct { #define DEFAULT_MRESOURCELIMITVIOLATIONACTION mrlaRequeue #define MDEF_SPVJOBISPREEMPTIBLE TRUE +#define MDEF_MINSUSPENDTIME 10 /* node access policy */ diff --git a/include/msched-common.h b/include/msched-common.h index 41e1e62..6e4ef74 100644 --- a/include/msched-common.h +++ b/include/msched-common.h @@ -661,6 +661,7 @@ enum { pRUProcWeight, pRUJobWeight, pUConsWeight, + pUExeTimeWeight, pURemWeight, pUPerCWeight, pXFMinWCLimit, @@ -698,6 +699,7 @@ enum { pRPECap, pRWallTimeCap, pUConsCap, + pUExeTimeCap, pURemCap, pUPerCCap, pQOSName, diff --git a/include/msched.h b/include/msched.h index d9b441c..1c04bed 100644 --- a/include/msched.h +++ b/include/msched.h @@ -1271,11 +1271,12 @@ enum MPrioSubComponentEnum { mpsRUProc, mpsRUJob, mpsUCons, + mpsUExeTime, mpsURem, - mpsUPerC + mpsUPerC, }; -#define MAX_MPRIOSUBCOMPONENT 32 +#define MAX_MPRIOSUBCOMPONENT 33 /* fairshare */ diff --git a/src/moab/MConfig.c b/src/moab/MConfig.c index 6207ed1..ff5fa37 100644 --- a/src/moab/MConfig.c +++ b/src/moab/MConfig.c @@ -1752,6 +1752,7 @@ int MCfgSetVal( case pUConsWeight: case pURemWeight: case pUPerCWeight: + case pUExeTimeWeight: case pServCap: case pTargCap: case pCredCap: @@ -1785,6 +1786,7 @@ int MCfgSetVal( case pUConsCap: case pURemCap: case pUPerCCap: + case pUExeTimeCap: case pXFMinWCLimit: case pFSPolicy: case pFSInterval: diff --git a/src/moab/MConst.c b/src/moab/MConst.c index 1ff20cb..c8beead 100644 --- a/src/moab/MConst.c +++ b/src/moab/MConst.c @@ -1614,6 +1614,8 @@ const mcfg_t MCfg[] = { { "UFSWEIGHT", pOLDUFSWeight, mdfInt, mxoPar, NULL }, { "UJOBWEIGHT", pRUJobWeight, mdfInt, mxoPar, NULL }, { "UPROCWEIGHT", pRUProcWeight, mdfInt, mxoPar, NULL }, + { "USAGEEXECUTIONTIMECAP", pUExeTimeCap, mdfInt, mxoPar, NULL }, + { "USAGEEXECUTIONTIMEWEIGHT", pUExeTimeWeight, mdfInt, mxoPar, NULL }, { "USAGECAP", pUsageCap, mdfInt, mxoPar, NULL }, { "USAGEWEIGHT", pUsageWeight, mdfString, mxoPar, NULL }, { "USECPUTIME", pUseCPUTime, mdfString, mxoPar, NULL }, diff --git a/src/moab/MFS.c b/src/moab/MFS.c index cefd30b..279279f 100644 --- a/src/moab/MFS.c +++ b/src/moab/MFS.c @@ -954,9 +954,10 @@ int MFSProcessOConfig( case pUConsWeight: case pURemWeight: case pUPerCWeight: - + case pUExeTimeWeight: + F->PSW[PIndex - pSQTWeight + 1] = (long)IVal; - + break; case pServCap: @@ -997,6 +998,7 @@ int MFSProcessOConfig( case pUConsCap: case pURemCap: case pUPerCCap: + case pUExeTimeCap: F->PSC[PIndex - pSQTCap + 1] = (long)IVal; diff --git a/src/moab/MJob.c b/src/moab/MJob.c index 4caeee7..4c1e3f9 100644 --- a/src/moab/MJob.c +++ b/src/moab/MJob.c @@ -1030,7 +1030,8 @@ int MJobGetRunPriority( *Priority = MPar[0].FSC.PCW[mpcUsage] * ( MPar[0].FSC.PSW[mpsUCons] * ResourcesConsumed + MPar[0].FSC.PSW[mpsURem] * ResourcesRemaining + - MPar[0].FSC.PSW[mpsUPerC] * PercentResUsage); + MPar[0].FSC.PSW[mpsUPerC] * PercentResUsage, + MPar[0].FSC.PSW[mpsUExeTime] * (MSched.Time - J->StartTime)); *Priority += J->StartPriority; @@ -2039,12 +2040,12 @@ int MJobPreempt( MJobSetState(J,mjsSuspended); /* NOTE: to prevent thrashing, by default, suspended jobs should not * - * resume for 1 minute */ + * resume for MDEF_MINSUSPENDTIME */ { long tmpL; - tmpL = MSched.Time + 60; + tmpL = MSched.Time + MDEF_MINSUSPENDTIME; MJobSetAttr(J,mjaSysSMinTime,(void **)&tmpL,mdfLong,mSet); } /* END BLOCK */