2017年12月6日 星期三

Maui 工作排程限制

在HPC (High Performance Computing)的領域,除了一些主流的付費排程軟體外,最大的免費排程軟體主流大概就是OpenPBS + Maui了吧。
雖然對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) */

而在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結束後再啟動就可以了。






沒有留言:

張貼留言