Accounting der CPUTime
Die CPUTime von Jobs die über die Globus Middleware abgegeben werden wird nicht erfasst. Das Problem taucht nur bei Globus-Jobs auf. Bei diesen Jobs sieht die Prozesskette wie folgt aus:
| PPID PID PGID SID TTY TPGID STAT UID TIME COMMAND 1 18965 18965 18965 ? -1 Ss 0 52:09 /usr/sbin/pbs_mom -p 18965 31981 31981 31981 ? -1 Ss 10724 0:00 \_ -sh 31981 32104 31981 31981 ? -1 S 10724 0:00 \_ /bin/sh/var/spool/pbs/mom_priv/jobs/75195.torqu.SC 32104 32106 31981 31981 ? -1 S 10724 0:00 \_/usr/bin/ssh gcwn51.d-grid.uni-hannover.de /bin/... 1 5083 5083 5083 ? -1 Ss 0 0:30 /usr/sbin/sshd 5083 32108 32108 32108 ? -1 Ss 0 0:00 \_ sshd: uhdt0024 [priv] 32108 32114 32108 32108 ? -1 S 10724 0:00 \_ sshd: uhdt0024@notty 32114 32115 32115 32115 ? -1 Ss 10724 0:00 \_ bash -c /bin/sh /home/uhdt0024/..... 32115 32116 32115 32115 ? -1 S 10724 0:00 \_ /bin/sh /home/uhdt0024/.globus/c19c4ce... 32116 32117 32115 32115 ? -1 S 10724 0:00 \_ /bin/sleep 120
| |
Durch die ssh-Verbindung wird der eigentliche Job vom pbs_mom entkoppelt. Richtig müsste die Prozesskette wie folgt aussehen:
| PPID PID PGID SID TTY TPGID STAT UID TIME COMMAND 1 5194 5194 5194 ? -1 Ss 0 0:16 /usr/sbin/pbs_mom 5194 6982 6982 6982 ? -1 Ss 10724 0:00 \_ -sh 6982 7105 6982 6982 ? -1 S 10724 0:00 \_ /bin/sh /var/spool/pbs/mom_priv/jobs/116313.torq.SC 7105 7107 6982 6982 ? -1 S 10724 0:00 \_ /bin/sh /var/spool/pbs/mom_priv/jobs/116313.torq.SC 7107 7108 6982 6982 ? -1 S 10724 0:00 \_ /bin/sh /home/uhdt0024/.globus/1fe7aeee-0798... 7108 7109 6982 6982 ? -1 S 10724 0:00 \_ /bin/sh /home/uhdt0024/globus_test.sh 7109 7112 6982 6982 ? -1 S 10724 0:00 \_ sleep 60
| |
Die Ursache ist im Perl-Modul pbs.pm zu suchen, das eine Art Wrapperscript um den Job erzeugt.
In der pbs.pm steht folgendes:
| [...] print JOB <<"EOF";
hosts=\`cat \$PBS_NODEFILE\`; counter=0 while test \$counter -lt $count; do for host in \$hosts; do if test \$counter -lt $count; then $remote_shell \$host "/bin/sh $cmd_script_name; echo \\\$? > $exit_prefix.\$counter" < $stdin & counter=\`expr \$counter + 1\` else break fi done done wait [...] | |
für das richtige Accounting der CPUTime muss es dann wie folgt aussehen:
| [...] print JOB <<"EOF";
if [ $count -eq 1 ]; then /bin/sh $cmd_script_name; echo \$? > $exit_prefix.0 < $stdin else hosts=\`cat \$PBS_NODEFILE\`; counter=0 while test \$counter -lt $count; do for host in \$hosts; do if test \$counter -lt $count; then $remote_shell \$host "/bin/sh $cmd_script_name; echo \\\$? > $exit_prefix.\$counter" < $stdin & counter=\`expr \$counter + 1\` else break fi done done wait fi [...] | |