学術情報処理研究 No.1 1997 pp.65-71

ワークステーションにおける大規模計算Jobの
運用管理に関する一考察(1)


武蔵 泰雄 、杉谷 賢一*


熊本大学総合情報処理センター
〒860熊本市黒髪2-39-1
TEL 096-342-3915 , *096-342-3914 , FAX 096-342-3829
musashi@gpo.kumamoto-u.ac.jp, sugitani@eecs.kumamoto-u.ac.jp


概要

 GAUSSIAN 量子化学計算パッケージなどの大規模計算jobは、NQSのqdel コマンドで削除するとしばしば異常終了することがある。我々は、 GAUSSIAN jobを調べたり、CPU時間超過のGAUSSIAN jobを削除できる より柔軟なスクリプトプログラムを注意深く作成した。このスクリプ ト使用することによってGAUSSIAN jobは正常に終了でき、実際運用 試験を行ったところ、異常終了率は8-12 %の割合で減少するという 結果になった。

キーワード

ジョブ運用管理、大規模計算ジョブ、NQS

Discussion and Foundamental Study on the Running and Managing a Huge-sized Computational Job in the Workstation (1).


Yasuo Musashi, Kenichi Sugitani*


Information Processing Centre
2-39-1 Kurokami Kumamoto 860, JAPAN.
TEL +81-96-342-3915 , *+81-96-342-3914 , FAX +81-96-342-3829
musashi@gpo.kumamoto-u.ac.jp, sugitani@eecs.kumamoto-u.ac.jp

Abstract

 The huge-sized job process such as GAUSSIAN quantum chemistry packages often does not normally terminate with use of a qdel command of the NQS. We carefully prepared more flexible script programs for checking the GAUSSIAN process and killing the CPU time-overusing that job. Using this scripts, GAUSSIAN job is normally terminated and a real use of running server at our center, the rate of abnormal job termination significantlly decreases by 8-12 %.

Keywords

Running and Managing, huge-sized computational job, NQS

1. 緒言

 最近熊本大学総合情報処理センターは並列計算機(Convex SPP1000 /XA8)をセンター内に設置し、ABAQUS(構造解析) [1]やGAUSSIAN (分子軌道計算)[2]などの大規模数値計算Jobを行える環境を構築し ている。ABAQUSやGAUSSIANのような大規模計算Jobは、メモリ及び ディスク資源を多量に消費する大規模Job系である。SPP1000は SPP-UXというUNIX系OSが動作しており、NQS(Network Queueing System)使用してJob管理を行っている。ところがSPP-UXのNQSには CPU時間超過Jobを削除する機能がない。そこで当センターでは PerlでCPU時間監視スクリプトを作り、それを時限式にしてJobを 管理している。しかしながら、Jobを削除するためにNQS付属コマ ンドのqdelを使用したところ、巨大な作業ファイルやcoreファイ ルが残る問題が多発した。このような問題はシステム運用管理者 の負荷を増大させるばかりか非生産的である。本研究はUNIX系OS を持つシステムにおいて、ABAQUSやGAUSSIANなどの大規模数値演 算Jobを安定して動作させ、システム運用管理者にできるだけ負担 を掛けない様なシステム環境を構築する方法を研究開発すること が目的である。
 今回は、大規模Jobである、GAUSSIAN Jobの運用の場合について取 り上げ、(1) 利用者専用スクリプトによるGAUSSIAN Jobの動作状 況の把握、(2) CPU時間超過Job監視スクリプトの開発とそのスク リプトを使用する事によって新たに発生した問題点、及び (3) (2)のスクリプト修正後の結果について報告する。

2. 計算方法及び使用言語

 プログラム開発は、(1)利用者スクリプトにはC-Shell [3]スクリ プト言語を、(2)CPU時間超過Job監視スクリプトにはPerl言語 (perl-4.036)[4]の使用して行った。これらのスクリプトのプロ グラムコードやアルゴリズムは結果と考察の節で詳細に述べる。

3. 結果と考察

3.1 GAUSSIAN利用者へ配布したスクリプト

 利用者に配布したスクリプトは、以下の通りに記述されている。
#!/bin/csh -f
setenv GAUSS_EXEDIR /apl/g94
#setenv GAUSS_SCRDIR /work1
#setenv GAUSS_SCRDIR /work2
#setenv GAUSS_SCRDIR /work3
setenv GAUSS_SCRDIR  /work4
#
setenv GAUSS_SCRDIR1 /work1
setenv GAUSS_SCRDIR2 /work2
setenv GAUSS_SCRDIR3 /work3
setenv GAUSS_SCRDIR4 /work4
#
set IN  = ts.mp2.6-31Gdd
set DAT = gausWork
#
set DATA = $HOME/$DAT
set IN   = $DATA/$IN
set OUT  = $IN.out
set CT   = `date`
set JID  = `getjid`
echo Gaussian JOB$JID $CT $$ started | memo
#
cd $DATA
touch $OUT
if(-e $OUT) rm -f $OUT
#
(/bin/time /bin/mpa -core 0 $GAUSS_EXEDIR/g94 < $IN )\\
 >& $OUT
#
set GPIDS=`grep PID= $OUT | cut -d= -f3 | tr -d '.'`
foreach GPID($GPIDS)
    set CHKFile=$GAUSS_SCRDIR/g94-$GPID.chk
    set INTFile=$GAUSS_SCRDIR/g94-$GPID.int
    set RWFile=$GAUSS_SCRDIR/g94-$GPID.rwf
    set D2EFile=$GAUSS_SCRDIR/g94-$GPID.d2e
    set SCRFile=$GAUSS_SCRDIR/g94-$GPID.scr
    set CHKFile1=$GAUSS_SCRDIR1/g94-$GPID.chk
    set INTFile1=$GAUSS_SCRDIR1/g94-$GPID.int
    set RWFile1=$GAUSS_SCRDIR1/g94-$GPID.rwf
    set D2EFile1=$GAUSS_SCRDIR1/g94-$GPID.d2e
    set SCRFile1=$GAUSS_SCRDIR1/g94-$GPID.scr
      .
      .
      .
    if(-e $CHKFile)  rm -f $CHKFile
    if(-e $INTFile)  rm -f $INTFile
    if(-e $RWFile)   rm -f $RWFile
    if(-e $D2EFile)  rm -f $D2EFile
    if(-e $SCRFile)  rm -f $SCRFile
    if(-e $CHKFile1) rm -f $CHKFile1
    if(-e $INTFile1) rm -f $INTFile1
    if(-e $RWFile1) rm -f $RWFile1
    if(-e $D2EFile1) rm -f $D2EFile1
    if(-e $SCRFile1) rm -f $SCRFile1
      .
      .
      .
end
set CT   = `date`
echo Gaussian JOB$JID $CT $$ terminated | memo
# END OF GAUSSIAN SCRIPT

 このスクリプトは環境変数の初期化後GAUSSIANプロセスを実行し、 GAUSSIANプロセス終了後に作業ファイルの残りを削除して終了する ようにコーディングされている。 このスクリプトにはecho文部分にgetjidとmemoという簡単な記録用 スクリプトが含ませており、NQSによって実行されたGAUSSIAN Jobの 利用状況が把握できる(利用者IDやJobの正常・異常終了の記録と取 っている)。その記録からTable 1 に示すような結果が得られた。この表 から、明らかに1995年5月から1996年7月の間に約16 %のGAUSSIAN Jobが異常終了していることが判る(GAUSSIAN Jobは正常に終了した 場合は作業ファイルを残さないが、実行中の全てのプロセスに同時 SIGKILLを発行すると、作業ファイルを残したまま終了する。この場 合をGAUSSIANが異常終了したと定義する)。GAUSSIANの異常終了時の 巨大な残留ファイルは、システム運用上さまざまな悪影響を及ぼす。 この問題を解決するために下記のようなfindコマンドで深夜に、作 成されてから一週間経過した日付を持つファイルやディレクトリを 削除するコマンドを時限式で発行するようにした。同時に多くの GAUSSIAN Jobが投入されるのでなければ、この方法は有効であると 考えたが、

0 3 * * * find /work1 -mtime +7 -name "*" -exec rm\\
 -rf {} \;
15 3 * * * find /work2 -mtime +7 -name "*" -exec rm\\
 -rf {} \;
30 3 * * * find /work3 -mtime +7 -name "*" -exec rm\\
 -rf {} \;
45 3 * * * find /work4 -mtime +7 -name "*" -exec rm\\
 -rf {} \;

 これはGAUSSIAN Jobが投入される頻度が週2,3本であれば、恐らく有 効であると考えられたが、GAUSSIAN Jobは続けて投入されている場 合が多く、期待するところの効果は得られなかった。



3.2 CPU超過Job監視スクリプト

 現在当センターで運用しているSPP1000に搭載されたNQSは、CPU利 用時間超過のJobを削除できないという欠陥があるため、なんらか の方法でこれを補う必要がある。これらの理由から、SPP-UX運用当 初から、元Convex社のSEの協力で下記に示すようなスクリプトを作 成した。
#!/usr/local/bin/perl
$dir = "/usr/adm/limit";
#  Define queue names for batch queues
   $a       = "A"; #
   $b       = "B"; # 2.6 hours
   $c       = "C"; # 24 hours
   $d       = "D"; # unlimited
   $x       = "X"; # unlimited
#  Define cpu limits for batch jobs
   $limit{$a}     =  480;   # 'A' queue
   $limit{$b}     =  9600;  # 'B' queue
   $limit{$c}     =  86400; # 'C' queue
   $limit{$d}     = 0;      # 'D' queue
   $limit{$x}     = 0;      # UNLIMITED QUEUE
# Unbuffer output
$| = 1;
#  Loop through all jobs
open(QSTAT,"/usr/convex/bin/qstat -a| /bin/grep\\ 
RUNNING | /bin/grep -v type= |");
while() {
   s/^ *//;
   #  Extract info from QSTAT output
   ($x,$req0,$reqid,$uname,$pri,$x,$x) = split;
   if ($pri eq 'RUNNING') {
 $uname = $reqid;
 $reqid = $req0;
   }
 $secs = 0;
 $qname = "NULL";
 open(QPS,"/usr/convex/bin/qps -r $reqid |\\
 /bin/grep $reqid|");
 while() {
    s/^ *//;
    #  Extract info from QPS output
    ($qname,$x,$x,$x,$time,$x,$x) = split;
    #  Convert time into seconds
    @tim = split(':', $time);
    $secs = $secs + 60 * $tim[0] + $tim[1];
 }
close(QPS);
if (($secs > 0) && ($qname ne 'NULL') &&\\
 ($limit{$qname} != 0)) {
   if ($secs > $limit{$qname}) {
           system("/usr/convex/bin/qps -r $reqid  | \\
     /bin/cat $dir/CarbonCopy $dir/nqslimit.hd.msg\\
 -  $dir/nqslimit.tl.msg | \\
     /usr/bin/mailx \\
     -s \"CPU TIME LIMIT [$limit{$qname} secs]\\
 EXCEEDED - $reqid\" \\
     $uname");
     system("/usr/convex/bin/qdel -15 $reqid");
            system("/usr/convex/bin/qps -r $reqid|grep \\
 $reqid > /dev/null 2>&1");
     if ($?>>8 == 0) {
             system("/usr/convex/bin/qdel -k $reqid");
     }
   }
 }
}
close(QSTAT);

 このスクリプトは次に述べるような構造をしている。NQSのコマンド群 の中のqstatで全JobのJobプロセスIDを取得し、次にqpsコマンドでNQS によって実行されているプロセスのCPU使用時間を取得して、超過分プ ロセスがあればqstatで取得したJobプロセス番号でqdelコマンドを発 行し、その旨を該当利用者にE-mailで通知するというものである。こ のスクリプトは時限式で運用されている。しかしながらqdelコマンド を用いているため、これが原因でGAUSSIAN Job正常に終了せず、異常 終了する可能性がある。これを確かめるために、CPU時間超過した GAUSSIAN Jobを故意に流したままにし、上述のスクリプトを手動で実 行したところ、CPU時間超過Jobプロセスは全て削除されたものの、や はり作業ファイルが残り、GAUSSIAN Jobは正常終了しないことが明ら かになった。この理由からGAUSSIAN Jobはqdelで削除するのではなく、 別の方法を採らなければならないことがわかった。
 幸いにも当大学はGAUSSIANをソースファイル形式で購入しているので、 プログラムの動作を直接追跡できる。その追跡調査の結果、一つのキ ープロセスを殺すと、GAUSSIANの最後に起動されるプロセスが作業フ ァイル削除などの後処理を行うことが判明したので、このキープロセ スだけを上述のスクリプトに優先的に削除させるようにすれば、上述 の問題が解決できると考えられる。そこでこの点に注目してCPU時間 超過監視スクリプトを修正を行い、一ヵ月間運用を続けたところ、下 記のTable 2および3のような結果が得られた(Table 2とTable 3は、それぞれ上述の スクリプトの修正前と修正後の、GAUSSIAN Jobのログの結果である)。






 修正前ではGAUSSIAN Jobの異常終了は12 %であったのに対し修正 後は4 %になったことが判る。これは明らかにスクリプトの修正の 効果を示すものである。ただし修正後あまり時間が経過しておらず、 そのデータの信頼性が高くはないと考えられるが、当センターで はこの調査結果をベースにシステム運用管理基礎技術をより高度な ものにしていけるものと考えている。

4. 結論

 GAUSSIAN利用を把握するため、専用の利用者スクリプトを作成した。 それから得られるGAUSSIAN Jobの異常終了率は、約12-16 % であることが示された。SPP-UXのNQSにはCPU時間超過Jobをkillする 機能がないため、PerlでCPU時間超過削除スクリプトを作り、更に GASSIAN Jobを差別的に扱い、そのJobから発行されたキープロセス を優先的削除することにより、異常終了が4 %までに減少する効果 が得られた。

5. 謝辞

 すべての計算およびスクリプトプログラム開発は熊本大学総合情報 処理センターにおけるHP Exemplar SPP1000/XA8 scalable parallel processorで行った。このプログラム開発に当たり、元Convex社の 稲美氏及び現HP社の松尾氏には大変お世話になったのでここで感謝 の意を表す。

6. 参考文献

[1]
ABAQUS/Standard version 5.6, Hibbitt, Karlsson and Sorensen, Inc., 1996.

[2]
M. J. Frisch, G. W. Trucks, H. B. Schlegel, P. M. W. Gill, B. G. Johnson, M. A. Robb, J. R. Cheeseman, T. A. Keith, G. A. Petersson, J. A. Montgomery, K. Raghavachari, M. A. Al-Laham, V. G. Zakrzewski, J. V. Ortiz, J. B. Foresman, J. Cioslowski, B. B. Stefanov, A. Nanayakkara, M. Challacombe, C. Y. Peng, P. Y. Ayala, W. Chen, M. W. Wong, J. L. Andres, E. S. Replogle, R. Gomperts, R. L. Martin, D. J. Fox, J. S. Binkley, D. J. Defrees, J. Baker, J. P. Stewart, M. Head-Gordon, C. Gonzalez and J. A. Pople, GAUSSIAN 94, Gaussian Inc., Pittsburg PA, 1995.

[3]
G. Aderson and P. Aderson, in : UNIX C SHELL FIELD GUIDE, Pretince-Hall Inc., 1986.

[4]
L. Wall and R. L. Schwarz, in : Programming PERL, O'Reilly and Associates, Inc., 1995.


Contents Back Next