雖然對Maui的手冊撰寫跟功能上頗有微詞,但它是免費的,就還說的過去。
最近由於裝了新的機器,但在排程控制上怎麼也無法搞定,狀況大概是這樣:
有8個計算節點,順序是前7台各有192GB的記憶體,最後一台是384GB。
理所當然的把這兩種機器所用的queue分開,假設192GB的機器是A,384GB的是B。
按照正常的程序設定好PBS跟Maui,然後丟個計算試試。要求使用A的機器時沒有問題,但在要求使用B的機器時,它卻不是丟到第8台384GB的機器,而是丟到第1台192GB的機器。
反複檢查所有設定都沒問題,原因在哪?
當在Maui設定 queue時,用的是CFGCLASS這個參數,從Maui的原始碼可以看到這一段:
for (cindex = 1;cindex < MMAX_CLASS;cindex++)
{
if (MAList[meClass][cindex][0] == '\0')
break;
if (CNL != NULL)
{
if ((CNL[cindex].count > 0) ||
(ANL[cindex].count > 0))
{
/* NOTE: DString is ignored */
MUSNPrintF(&BPtr,&BSpace,"[%s %d:%d]",
MAList[meClass][cindex],
ANL[cindex].count,
CNL[cindex].count);
}
}
else
{
if (ANL[cindex].count > 0)
{
if (DString != NULL)
{
/* NOTE: do not display class count */
if (Head[0] != '\0')
MUStrNCat(&BPtr,&BSpace,DString);
MUStrNCat(&BPtr,&BSpace,MAList[meClass][cindex]);
}
else
{
MUSNPrintF(&BPtr,&BSpace,"[%s %d]",
MAList[meClass][cindex],
ANL[cindex].count);
}
}
}
} /* END for (cindex) */
{
if (MAList[meClass][cindex][0] == '\0')
break;
if (CNL != NULL)
{
if ((CNL[cindex].count > 0) ||
(ANL[cindex].count > 0))
{
/* NOTE: DString is ignored */
MUSNPrintF(&BPtr,&BSpace,"[%s %d:%d]",
MAList[meClass][cindex],
ANL[cindex].count,
CNL[cindex].count);
}
}
else
{
if (ANL[cindex].count > 0)
{
if (DString != NULL)
{
/* NOTE: do not display class count */
if (Head[0] != '\0')
MUStrNCat(&BPtr,&BSpace,DString);
MUStrNCat(&BPtr,&BSpace,MAList[meClass][cindex]);
}
else
{
MUSNPrintF(&BPtr,&BSpace,"[%s %d]",
MAList[meClass][cindex],
ANL[cindex].count);
}
}
}
} /* END for (cindex) */
而在Maui的Head file (msched-common.h)裡:
#define MMAX_CLASS 16
所以Maui只允許設定最多15個queue。
在新增A跟B兩個queue之前,Cluster上已經有15個queue在運行了,所以A跟B並不會被Maui所控制,於是就只會從第一個節點開始排。
解決的方法是修改Maui的Head file,並且重新編譯安裝。但仔細看其它的Code,會發現影響的變數並不是只有這一個,實際上有三個變數都要改。
假設今天要讓它可以支援到23個queue (注意:Maui的記憶體使用量跟這個值呈倍數關係,所以不要一開始就改太大,夠用就好)
先修改如下:
include/msched-common.h
#define MAX_MCLASS 24
#define MMAX_CLASS 24
include/msched.h
#define MAX_MRCLASS 24 /* maximum resource classes */
接著在include/moab.h中,自行增加一行:
#define MMAX_CLASS 24
如果是全新安裝,那麼這樣就可以了。
假設是已經有在運行的PBS Server,要增加的話,除了以上的修改,在已安裝maui的路徑下的include/moab.h也要新增一行。
然後就是重新make && make install。
在make install之前,記得暫時先停止Maui, make install結束後再啟動就可以了。
沒有留言:
張貼留言