From 639302b96db549e0d314103ef384537eb97202a3 Mon Sep 17 00:00:00 2001 From: wightman Date: Fri, 17 Nov 2006 16:44:51 +0000 Subject: [PATCH] enable NODEALLOCMAXPS (patch from Bas van der Vlies) git-svn-id: svn://opensvn.adaptivecomputing.com/maui/trunk@71 3f5042e3-fb1d-0410-be18-d6ca2573e517 --- include/msched-common.h | 3 ++- include/msched.h | 1 + src/moab/MConfig.c | 1 + src/moab/MConst.c | 1 + src/moab/MJob.c | 11 ++++++++++- src/moab/MPolicy.c | 11 ++++++++++- src/moab/MSched.c | 6 ++++++ src/moab/MStats.c | 22 +++++++++++++++++++--- 8 files changed, 50 insertions(+), 6 deletions(-) diff --git a/include/msched-common.h b/include/msched-common.h index 6e4ef74..619ae76 100644 --- a/include/msched-common.h +++ b/include/msched-common.h @@ -765,7 +765,8 @@ enum { pOLDAFSWeight, pOLDDirectSpecWeight, pOLDBankServer, - pOLDRMServer + pOLDRMServer, + pNAMaxPS }; #endif /* __M_COMMON_H__ */ diff --git a/include/msched.h b/include/msched.h index 35238d3..66d7137 100644 --- a/include/msched.h +++ b/include/msched.h @@ -2191,6 +2191,7 @@ typedef struct { char PartitionFeatureHeader[MAX_MNAME]; int PartitionFeatureIsVisible; /* (boolean) */ int InitialLoad; + int NodeAllocMaxPS; mgcred_t *DefaultU; mgcred_t *DefaultG; diff --git a/src/moab/MConfig.c b/src/moab/MConfig.c index 80ffecc..89ad385 100644 --- a/src/moab/MConfig.c +++ b/src/moab/MConfig.c @@ -1580,6 +1580,7 @@ int MCfgSetVal( case pProcSpeedFeatureHeader: case pNodeTypeFeatureHeader: case pPartitionFeatureHeader: + case pNAMaxPS: case pNAPolicy: case pSchedMode: case pClientTimeout: diff --git a/src/moab/MConst.c b/src/moab/MConst.c index c8beead..017193c 100644 --- a/src/moab/MConst.c +++ b/src/moab/MConst.c @@ -1432,6 +1432,7 @@ const mcfg_t MCfg[] = { { "MINADMINSTIME", mcoAdminMinSTime, mdfString, mxoSched, NULL }, { "MINDISPATCHTIME", pMinDispatchTime, mdfString, mxoSched, NULL }, { "NODEACCESSPOLICY", pNAPolicy, mdfString, mxoSched, NULL }, + { "NODEALLOCMAXPS", pNAMaxPS, mdfString, mxoSched, NULL }, { "NODEALLOCATIONPOLICY", pNodeAllocationPolicy, mdfString, mxoPar, NULL }, { "NODECAP", pRNodeCap, mdfInt, mxoPar, NULL }, { "NODECPUOVERCOMMITFACTOR", pNodeCPUOverCommitFactor, mdfDouble, mxoSched, NULL }, diff --git a/src/moab/MJob.c b/src/moab/MJob.c index 4c1e3f9..3a06979 100644 --- a/src/moab/MJob.c +++ b/src/moab/MJob.c @@ -2682,7 +2682,16 @@ int MJobCheckLimits( JUsage[mptMaxProc] = MJobGetProcCount(J); JUsage[mptMaxNode] = J->Request.NC; JUsage[mptMaxWC] = J->WCLimit; - JUsage[mptMaxPS] = JUsage[mptMaxProc] * JUsage[mptMaxWC]; + + if ((J->Req[0]->NAccessPolicy == mnacSingleJob) && + (MSched.NodeAllocMaxPS == TRUE)) + { + JUsage[mptMaxPS] = J->NodesRequested * JUsage[mptMaxWC]; + } + else + { + JUsage[mptMaxPS] = JUsage[mptMaxProc] * JUsage[mptMaxWC]; + } MJobGetPE(J,&MPar[0],&PE); diff --git a/src/moab/MPolicy.c b/src/moab/MPolicy.c index d9879b5..dde7aa4 100644 --- a/src/moab/MPolicy.c +++ b/src/moab/MPolicy.c @@ -1538,7 +1538,16 @@ int MPolicyAdjustUsage( PConsumed[mptMaxJob] = 1; PConsumed[mptMaxProc] = MJobGetProcCount(J); PConsumed[mptMaxNode] = J->Request.NC; - PConsumed[mptMaxPS] = PConsumed[mptMaxProc] * PConsumed[mptMaxWC]; + + if ((J->Req[0]->NAccessPolicy == mnacSingleJob) && + (MSched.NodeAllocMaxPS == TRUE)) + { + PConsumed[mptMaxPS] = J->NodesRequested * PConsumed[mptMaxWC]; + } + else + { + PConsumed[mptMaxPS] = PConsumed[mptMaxProc] * PConsumed[mptMaxWC]; + } MJobGetPE(J,&MPar[0],&PE); diff --git a/src/moab/MSched.c b/src/moab/MSched.c index c1eb240..9521cd8 100644 --- a/src/moab/MSched.c +++ b/src/moab/MSched.c @@ -5464,6 +5464,12 @@ int MSchedProcessOConfig( break; + case pNAMaxPS: + + S->NodeAllocMaxPS = MUBoolFromString(SVal,FALSE); + + break; + case pSchedMode: S->Mode = MUGetIndex(SVal,MSchedMode,FALSE,S->Mode); diff --git a/src/moab/MStats.c b/src/moab/MStats.c index 548ae75..71dcddd 100644 --- a/src/moab/MStats.c +++ b/src/moab/MStats.c @@ -898,7 +898,15 @@ int MStatUpdateActiveJobUsage( called from: MQueueAddAJob() */ - TotalProcs = MJobGetProcCount(J); + if ((J->Req[0]->NAccessPolicy == mnacSingleJob) && + (MSched.NodeAllocMaxPS == TRUE)) + { + TotalProcs = J->NodesRequested; + } + else + { + TotalProcs = MJobGetProcCount(J); + } if (TotalProcs == 0) { @@ -914,7 +922,15 @@ int MStatUpdateActiveJobUsage( (double)MSched.Interval / 100.0, (double)MSched.Time - J->StartTime); - pesdedicated = PE * interval; + if ((RQ->NAccessPolicy == mnacSingleJob) && + (MSched.NodeAllocMaxPS == TRUE)) + { + pesdedicated = TotalProcs * interval; + } + else + { + pesdedicated = PE * interval; + } for (rqindex = 0;J->Req[rqindex] != NULL;rqindex++) { @@ -935,7 +951,7 @@ int MStatUpdateActiveJobUsage( if ((J->StartTime != MSched.Time) && (J->CTime != MSched.Time)) { - psdedicated = interval * MJobGetProcCount(J); + psdedicated = interval * TotalProcs; for (nindex = 0;nindex < MAX_MNODE_PER_JOB;nindex++) {