Prowadzący zajęcia projektowe: Rafał Petryniak (strona domowa zajęć projektowych).
Spis treści
System do zarządzania zasobami obliczeniowymi klastra TORQUE bazuje na oprogramowaniu *PBS (Portable Batch System) i jest rozwijany jako projekt Opensource, gdzie dostępność kodu źródłowego jest darmowa. Torque Resource Manager jest programem bazującym na PBS (Portable Batch System) służącym do zarządzania zasobami obliczeniowymi i pozwalającym na optymalne ich wykorzystanie . Do głównych zadań tego programu należy kontrola zasobów obliczeniowych klastra, przyjmowanie zadań od użytkowników oraz kolejkowanie ich, w razie możliwości przydział zasobów obliczeniowych i wykonywanie zadań na węzłach klastra oraz monitorowanie zleceń użytkowników wykonywanych w obrębie klastra . Torque jest systemem kolejkowym, który rezerwuje i przydziela zasoby użytkownikom zgodnie z wyznaczonymi zasadami. Po stronie użytkownika praca z takim systemem ogranicza się do napisania skryptu, w którym określa się zasoby z jakich chce się skorzystać (np. Ilość węzłów, czas pracy procesora). Następnie wprowadza się zadanie do systemu kolejkowego za pomocą komendy qsub. System kolejkowy na bieżąco sprawdza dostępne zasoby obliczeniowe całego klastra i jeśli jest możliwość rezerwuje zasoby określone przez użytkownika, a następnie przystępuje do wykonywania zadania. W momencie, gdy zadania zlecone przez użytkowników przekraczają dostępne zasoby obliczeniowe, zlecenia wykonywane są zgodnie z priorytetem wyznaczonym na podstawie podanego zapotrzebowania na zasoby (tj. pamięci operacyjnej, czasu procesora). Po zakończeniu zadania użytkownika system kolejkowy zwalnia zarezerwowane wcześniej zasoby i przystępuje do realizacji kolejnych zadań umieszczonych w kolejce
Jego główne funkcje to:
kontrola zasobów obliczeniowych w obrębie klastra
przyjmowanie i kolejkowanie zadań od użytkowników
przydział zasobów obliczeniowych (CPU) i wysyłanie zadań do maszyn w klastrze
monitorowanie i kontrola zadań użytkownika wykonywanych w obrębie klastra
Z punktu widzenia użytkownika system praktycznie nie różni się od innych odmian PBS.
Architektura:
Command - interfejs użytkownika (linia poleceń, GUI).
Job Server - przyjmuje zadania i zleca je do obliczenia.
Job Executor (Mom) - uruchamia zadanie po otrzymaniu zlecenia od Serwera.
Job Scheduler - nadzoruje przydzielanie zadań przez Serwer np polecenie qstat.
Możemy ustawić nazwę, za pomocą której nasza maszyna będzie się przedstawiała zalogowanym użytkownikom, i niektórym programom w pliku /etc/sysconfig/network
Ustawiamy: HOSTNAME=xxx.yyy.pk.edu.pl
Listing pliku /etc/sysconfig/network [root@m7-ps3a ~]# cat /etc/sysconfig/network NETWORKING=yes NETWORKING_IPV6=no HOSTNAME=xxx.yyy.pk.edu.pl
Podaną tutaj nazwę trzeba zwykle dopisać do plik /etc/hosts.
Listing pliku /etc/hosts przed zmianami:
[root@m7-ps3a ~]# cat /etc/hosts_2009_09_10 127.0.0.1 localhost.localdomain localhost 197.197.197.1 xxx.yyy.pk.edu.pl 197.197.197.101 m7ps301 197.197.197.102 m7ps302 197.197.197.103 m7ps303 197.197.197.104 m7ps304 197.197.197.105 m7ps305 197.197.197.106 m7ps306 197.197.197.107 m7ps307 197.197.197.108 m7ps308 197.197.197.109 m7ps309 197.197.197.110 m7ps310 197.197.197.111 m7ps311 197.197.197.112 m7ps312 197.197.197.113 m7ps313 197.197.197.114 m7ps314 197.197.197.115 m7ps315 197.197.197.116 m7ps316
Obecnie:127.0.0.1 localhost localhost.localdomain
Ustawiamy: 127.0.0.1 xxx.yyy.pk.edu.pl xxx.yyy.pk.edu.pl.localdomain localhost localhost.localdomain
Listing pliku /etc/hosts po zmianach:
[root@m7-ps3a ~]# cat /etc/hosts 127.0.0.1 xxx.yyy.pk.edu.pl xxx.yyy.pk.edu.pl.localdomain localhost localhost.localdomain 197.197.197.1 xxx.yyy.pk.edu.pl 197.197.197.101 m7ps301 197.197.197.102 m7ps302 197.197.197.103 m7ps303 197.197.197.104 m7ps304 197.197.197.105 m7ps305 197.197.197.106 m7ps306 197.197.197.107 m7ps307 197.197.197.108 m7ps308 197.197.197.109 m7ps309 197.197.197.110 m7ps310 197.197.197.111 m7ps311 197.197.197.112 m7ps312 197.197.197.113 m7ps313 197.197.197.114 m7ps314 197.197.197.115 m7ps315 197.197.197.116 m7ps316
Aby skrypt instalacyjny torque.setup poprawnie interpretował nazawę hosta oraz nazwę domeny należy zmienić pierwszą linia powyższego pliku konfiguracyjnego. Plik ten defacto wspólpracuje z DNS odzwierciedlając nazwy hostów na przypisane im adresy IP ( forma pliku to : IP_ADRES NAZWA_HOSTA NAZWA_DOMENY ). Podczas próby zapisu wprowadzonych zmian , system pyta użytkownika czy na pewno chce dokonać zapisu.
Poleceniem hostname -f sprawdzamy poprawność nazwy hosta, w typ wypadku hostname = xxx.yyy.pk.edu.pl
[root@m7-ps3a ~]# hostname -f xxx.yyy.pk.edu.pl
Jest to kluczowa sprawa gdyż skrypt instalacyjny domyślne korzysta z polecenia hostname jeśli nie będzie on zwracać poprawnej wartości, skrypt nie wykona sie poprwanie, a użytkownik zostanie powiadomiony o tym przez system :
UNAUTHORIZED ACCESS
Po zakończeniu wprowadzania zmian na konsoli głównej węzeł 22 ( IP: 197.197.197.1) restartujemy sieć:
polecenie: service network restart
Instalacji wymaganych pakietów dokonujemy poprzez użycie programu yum install :
Zainstalwoane pakiety:
libtorque.ppc : Run-time libs for programs which will use the torque library libtorque-devel.ppc : Development tools for programs which will use the torque : library torque.ppc : Tera-scale Open-source Resource and QUEue manager torque-client.ppc : Client part of TORQUE torque-docs.ppc : Documentation files for TORQUE torque-gui.ppc : Graphical clients for TORQUE torque-mom.ppc : Node execution daemon for TORQUE torque-pam.ppc : PAM module for TORQUE MOM nodes torque-scheduler.ppc : Simple fifo scheduler for TORQUE torque-server.ppc : The main part of TORQUE pbstop.ppc : Full-screen curses monitor for PBS
(obecnie lokalne repozytorium udostępnia wszystkie wymagane pakiety dla architerktury PPC)
polecenie: yum install torque torque-client torque-server torque-qui torque-docs libtorque torque-mom torque-devel torque-sheduler pbstop torque-pam libtoqgue-devel
Po wykonaiu powższego polecenia serwer PBS został zainstalowany na systemie oraz uruchomiony, na tym etapie należy go jednak zastopować.
polecenie: /etc/int.d/pbs_server stop
Wydajemy polecenie:
pelecenie: pbs_server -t create
(ważnej jest tutaj aby pbs_serwer i pbs_mom był stop )
polecenie: /etc/init.d/pbs_server stop /etc/init.d/pbs_mom stop
Następnie konfigurujemy bazę danych PBS (przydładowa kolejka) używamy tutaj gotowego skryptu.
polecenie: /usr/share/doc/torque-2.1.10/torgue.setup root (uruchamiane jako użytkownik root)
Listing skryptu /usr/share/doc/torque-2.1.10/torgue.setup:
[root@m7-ps3a ~]# cat /usr/share/doc/torque-2.1.10/torque.setup #!/bin/sh # torque.setup # USAGE: torque.setup USERNAME if [ "$1" = "" ] ; then echo "USAGE: torque.setup USERNAME" exit 1 fi # create default queue # enable operator privileges USER=$1@`hostname` echo "initializing TORQUE (admin: $USER)" pbs_server -t create qmgr -c "set server scheduling=true" echo set server operators += $USER | qmgr echo set server managers += $USER | qmgr qmgr -c 'create queue batch' qmgr -c 'set queue batch queue_type = execution' qmgr -c 'set queue batch started = true' qmgr -c 'set queue batch enabled = true' qmgr -c 'set queue batch resources_default.walltime = 1:00:00' qmgr -c 'set queue batch resources_default.nodes = 1' qmgr -c 'set server default_queue = batch'
Możemy skonfigurować pierwszą kolejkę na tym etapie ręcznie wydając w konsoli polecenie 'qmgr' i wprowadzając:
Qmgr: set server scheduling=true Qmgr: create queue batch Qmgr: set queue batch queue_type = execution Qmgr: set queue batch started = true Qmgr: set queue batch enabled = true Qmgr: set queue batch resources_default.nodes = 1 Qmgr: set server default_queue = batch Qmgr: exit
Jednak skrypt torque.setup robi to samo autmatycznie.
[root@m7-ps3a ~]# cat >> /var/torque/mom_priv/config $pbsserver xxx.yyy.pk.edu.pl
Listing pliku /var/torque/server_name przed zmianami :
[root@m7-ps3a ~]# cat /var/torque/server_name localhost
Zmieniamy nazwę hosta z localhost na xxx.yyy.pk.edu.pl
Listing pliku /var/torque/server_name po zmianach :
[root@m7-ps3a ~]# cat /var/torque/server_name xxx.yyy.pk.edu.pl
Domyślnie serwer pbs (torque) bedzie oczekiwał połączeń przychodząch na portach 15000:15004, firewall systemowy jest wyłączony natomiast używany jest inny zlokalizowany w plik /etc/rc.d/rc.firewall-new uruchamiany przy starcie systemu.
Listing /etc/rc.d/rc.firewall-new
[root@m7-ps3a ~]# cat /etc/rc.d/rc.firewall-new #!/bin/sh PATH="/sbin:/usr/sbin:/usr/local/sbin:$PATH" FWVER=0.07 LASTCHANGE="2009.03.20" echo -e "\nLoading rc.firewall - version $FWVER..\n" IPTABLES=/sbin/iptables MODPROBE=/sbin/modprobe EXTIF="eth0" echo " External Interface: $EXTIF" echo " ---" EXTIP="111.222.333.444" EXTIPNOMASK="111.222.333.444" echo " External IP: $EXTIP" echo " ---" INTIF="eth1" # Assign the internal TCP/IP network and IP address INTNET="197.197.197.0/24" INTIP="197.197.197.1/24" echo " LAN Interface: $INTIF" UNIVERSE="0.0.0.0/0" echo " Loading kernel modules.." echo " -ip_tables" echo " -ip_conntrack_ftp" echo " -ip_conntrack" echo " -ip_nat_ftp" echo " -iptable_nat" $MODPROBE ip_tables $MODPROBE ip_conntrack_ftp $MODPROBE ip_conntrack $MODPROBE ip_nat_ftp $MODPROBE iptable_nat echo " Enabling forwarding.." echo "1" > /proc/sys/net/ipv4/ip_forward #Load the IPTABLES filtering module - "iptable_filter" # - Loaded automatically when filter policies are activated echo " ---" echo " Clearing any existing rules and setting default policy to DROP.." $IPTABLES -P INPUT ACCEPT $IPTABLES -F INPUT $IPTABLES -P OUTPUT ACCEPT $IPTABLES -F OUTPUT $IPTABLES -P FORWARD ACCEPT $IPTABLES -F FORWARD $IPTABLES -F -t nat echo " Delete all User-specified chains.." $IPTABLES -X echo " Reset all IPTABLES counters.." $IPTABLES -Z echo " loopback interfaces are valid.." ####################################################################### echo " Access input for ports: 22, 53" $IPTABLES -A INPUT -i $EXTIF -p tcp --dport 22 -j ACCEPT $IPTABLES -A INPUT -i $EXTIF -p tcp --dport 53 -j ACCEPT $IPTABLES -A INPUT -i $EXTIF -p udp --dport 53 -j ACCEPT $IPTABLES -A INPUT -i $INTIF -p tcp -m tcp --dport 15000:15004 -j ACCEPT $IPTABLES -A INPUT -i $INTIF -p udp -m udp --dport 15000:15004 -j ACCEPT $IPTABLES -A INPUT -i $EXTIF -p ICMP -s $UNIVERSE -d $EXTIP -j ACCEPT ####################################################################### $IPTABLES -t nat -A POSTROUTING -s $INTIP -o eth0 -j SNAT --to $EXTIP $IPTABLES -t nat -A PREROUTING -p tcp -d $EXTIP --dport 7001 -j DNAT --to-destination 197.197.197.101:22 $IPTABLES -t nat -A PREROUTING -p tcp -d $EXTIP --dport 7002 -j DNAT --to-destination 197.197.197.102:22 $IPTABLES -t nat -A PREROUTING -p tcp -d $EXTIP --dport 7003 -j DNAT --to-destination 197.197.197.103:22 $IPTABLES -t nat -A PREROUTING -p tcp -d $EXTIP --dport 7004 -j DNAT --to-destination 197.197.197.104:22 $IPTABLES -t nat -A PREROUTING -p tcp -d $EXTIP --dport 7005 -j DNAT --to-destination 197.197.197.105:22 $IPTABLES -t nat -A PREROUTING -p tcp -d $EXTIP --dport 7006 -j DNAT --to-destination 197.197.197.106:22 $IPTABLES -t nat -A PREROUTING -p tcp -d $EXTIP --dport 7007 -j DNAT --to-destination 197.197.197.107:22 $IPTABLES -t nat -A PREROUTING -p tcp -d $EXTIP --dport 7008 -j DNAT --to-destination 197.197.197.108:22 $IPTABLES -t nat -A PREROUTING -p tcp -d $EXTIP --dport 7009 -j DNAT --to-destination 197.197.197.109:22 $IPTABLES -t nat -A PREROUTING -p tcp -d $EXTIP --dport 7010 -j DNAT --to-destination 197.197.197.110:22 $IPTABLES -t nat -A PREROUTING -p tcp -d $EXTIP --dport 7011 -j DNAT --to-destination 197.197.197.111:22 $IPTABLES -t nat -A PREROUTING -p tcp -d $EXTIP --dport 7012 -j DNAT --to-destination 197.197.197.112:22 $IPTABLES -t nat -A PREROUTING -p tcp -d $EXTIP --dport 7013 -j DNAT --to-destination 197.197.197.113:22 $IPTABLES -t nat -A PREROUTING -p tcp -d $EXTIP --dport 7014 -j DNAT --to-destination 197.197.197.114:22 $IPTABLES -t nat -A PREROUTING -p tcp -d $EXTIP --dport 7015 -j DNAT --to-destination 197.197.197.115:22 $IPTABLES -t nat -A PREROUTING -p tcp -d $EXTIP --dport 7016 -j DNAT --to-destination 197.197.197.116:22 ####################################################################### # Infrates RMS 320 $IPTABLES -t nat -A PREROUTING -p tcp -d $EXTIP --dport 8123 -j DNAT --to-destination 197.197.197.222:23 $IPTABLES -t nat -A PREROUTING -p tcp -d $EXTIP --dport 8180 -j DNAT --to-destination 197.197.197.222:80
Musimy powiadomić firewall o połączeniach przychodzących na portach 15000:15004, aby były dopuszczane do systemu, w tym celu w powyższym pliku wykonywalnym firewall'a dodajemy wpisy:
$IPTABLES -A INPUT -i $INTIF -p tcp -m tcp --dport 15000:15004 -j ACCEPT $IPTABLES -A INPUT -i $INTIF -p udp -m udp --dport 15000:15004 -j ACCEPT
Informują one rc.firewall o zaufaniu odnośnie usług działającyh na tych portach. Jest to kluczowa sprawa ponieważ domyślnie ruch na tak wysokich portach jest blokwany czyli komputery ( node'y ) próbujące się połączyć z serwerem głównym nie mogły by tego zrobić ich złgoszenia były by odrzucane przez rc.firewall.new który defacto tworzy nową tablice polityki odnośnie otwartości portów względem usług (iptables - polityka bezpieczeństwa dla systemu wpis w niej informują o tym co może się dostać do systemu a co nie). Zmienna systemowa $INTIF informuje firewall o tym że pakiety przychodzące na porty (w tym wypadku 15000:15004) są otwarte dla połączeń wewnętrznych analogicznie zmiena $EXTIF otwiera porty dla połączeń zewnętrznych (internet). Następnie resetuejemy firewall.
polecenie: /etc/rc.d/rc.firewall-new
Uwaga !! Jeśli uruchomimy '/etc/init.d/iptables restert' wtedy zostaną wznowione ustawienia firewall'a domyślnego co całkowicie zablokuje możliwość łączanie się z siecią po portach, ponieważ zostanie wtedy uruchomiona polityka domyślna (wpuszczania połączeń).
Najpierw oczywiście należy zainstaloawć i skonfigurwać torque na host'ach łączących się z systmem natomiast informacje dla serwera o noade'ach przechowywać bedziemy w pliku /var/torque/server_priv/nodes .
Dodajemy wpisy odpowiednio dla wszystkich maszyn (node'ow). Plik jest w formie nazwa_hosta ilość_procesorów. Dodajemy poniższe wpisy:
m7ps301 np=2 m7ps302 np=2 m7ps303 np=2 m7ps304 np=2 m7ps305 np=2 m7ps306 np=2 m7ps307 np=2 m7ps308 np=2 m7ps309 np=2 m7ps310 np=2 m7ps311 np=2 m7ps312 np=2 m7ps313 np=2 m7ps314 np=2 m7ps315 np=2 m7ps316 np=2
Identyfikacja maszyn następuje po nazwach, tłumaczenie na ip realizowane jest w pliku /etc/hosts
Listing pliku /var/torque/server_priv/nodes
[root@m7-ps3a ~]# cat /var/torque/server_priv/nodes m7ps301 np=2 m7ps301 np=2 m7ps302 np=2 m7ps303 np=2 m7ps304 np=2 m7ps305 np=2 m7ps306 np=2 m7ps307 np=2 m7ps308 np=2 m7ps309 np=2 m7ps310 np=2 m7ps311 np=2 m7ps312 np=2 m7ps313 np=2 m7ps314 np=2 m7ps315 np=2 m7ps316 np=2
Zmiana nazwy hosta wezłów od 7001 do 7016 następuje analogicznie do sytuacji przedstawionej podczasz zmiany nazwy hosta węzła głównego. Przedstawię tutaj zmiany wprowadzaone dla węzła 7001 dla przykładu:
W pliku /etc/sysconfig/network
Ustawiamy: HOSTNAME=m7ps301
Listing pliku /etc/sysconfig/network
[root@m7-ps3a ~]# cat /etc/sysconfig/network NETWORKING=yes NETWORKING_IPV6=no HOSTNAME=m7ps301
Podaną tutaj nazwę będzie trzeba dopisać do plik /etc/hosts
Listing pliku /etc/hosts przed zmianami:
[root@m7-ps3a ~]# cat /etc/hosts_2009_09_10 127.0.0.1 localhost.localdomain localhost 197.197.197.1 xxx.yyy.pk.edu.pl 197.197.197.101 m7ps301 197.197.197.102 m7ps302 197.197.197.103 m7ps303 197.197.197.104 m7ps304 197.197.197.105 m7ps305 197.197.197.106 m7ps306 197.197.197.107 m7ps307 197.197.197.108 m7ps308 197.197.197.109 m7ps309 197.197.197.110 m7ps310 197.197.197.111 m7ps311 197.197.197.112 m7ps312 197.197.197.113 m7ps313 197.197.197.114 m7ps314 197.197.197.115 m7ps315 197.197.197.116 m7ps316
Obecnie:127.0.0.1 localhost localhost.localdomain
Ustawiamy: 127.0.0.1 m7ps301 m7ps301.localdomain localhost localhost.localdomain
Listing pliku /etc/hosts po zmianach:
[root@m7-ps3a ~]# cat /etc/hosts 127.0.0.1 m7ps301 m7ps301.localdomain localhost localhost.localdomain 197.197.197.1 xxx.yyy.pk.edu.pl 197.197.197.101 m7ps301 197.197.197.102 m7ps302 197.197.197.103 m7ps303 197.197.197.104 m7ps304 197.197.197.105 m7ps305 197.197.197.106 m7ps306 197.197.197.107 m7ps307 197.197.197.108 m7ps308 197.197.197.109 m7ps309 197.197.197.110 m7ps310 197.197.197.111 m7ps311 197.197.197.112 m7ps312 197.197.197.113 m7ps313 197.197.197.114 m7ps314 197.197.197.115 m7ps315 197.197.197.116 m7ps316
Instalacji wymaganych pakietów dokonujemy poprzez użycie programu yum install (lokalne repozytorium) :
Zainstalowane pakiety:
torque-client.ppc : Client part of TORQUE torque-server.ppc : The main part of TORQUE
polecenie: yum install torque-client torque-mom
Aby hosty poprwanie komunikowały się z serwerm PBS musimy powiadomić ich o jego nazwie:
polecenia: echo "xxx.yyy.pk.edu.pl" >> /var/torque/server_name echo "\$pbsserver xxx.yyy.pk.edu.pl" >> /var/torque/mom_priv/config
Aby instalacja na pozostałych konsolach przebiegała sprawnie -- instalacja skrótowa:
0. z poziomu root, wykonanie kroków poniżej.
1. yum install torque-client torque-mom.
2. zmieniasz plik /etc/hosts ( tak jak w wzorze ).
3. edytujesz plik /var/torque/server_name wpisujesz tam xxx.yyy.pk.edu.pl .
4. edytujesz plik /var/torque/mom_priv/config i dodajesz w nim wpis $pbsserver xxx.yyy.pk.edu.pl .
5. uruchamiasz usługę /etc/init.d/pbs_mom start .
SERWER GŁÓWNYCH host: xxx.yyy.pk.edu.pl
[m7ps3@m7-ps3a ~]$ rpm -qa | grep torque torque-2.1.10-5.fc9.ppc torque-gui-2.1.10-5.fc9.ppc torque-mom-2.1.10-5.fc9.ppc libtorque-2.1.10-5.fc9.ppc libtorque-2.1.10-5.fc9.ppc64 torque-pam-2.1.10-5.fc9.ppc torque-server-2.1.10-5.fc9.ppc torque-docs-2.1.10-5.fc9.ppc torque-client-2.1.10-5.fc9.ppc torque-scheduler-2.1.10-5.fc9.ppc libtorque-devel-2.1.10-5.fc9.ppc [m7ps3@m7-ps3a ~]$ rpm -qa | grep pbs pbstop-4.16-3.fc9.ppc
KLIENT hosty: m7ps301,m7ps302,m7ps303,...,m7ps316
[m7ps3@m7-ps308 ~]$ rpm -qa | grep torque torque-2.1.10-5.fc9.ppc torque-mom-2.1.10-5.fc9.ppc libtorque-2.1.10-5.fc9.ppc torque-client-2.1.10-5.fc9.ppc
Będąc zalogowanym na węźle głównym z poziomu użytkownika root wydajemy polecenie pbsnodes -a
Listing polecania pbsnodes -a
[root@m7-ps3a server_priv]# pbsnodes -a m7ps301 state = free np = 2 ntype = cluster status = opsys=linux,uname=Linux m7ps301 2.6.25-14.fc9.ppc64 #1 SMP Thu May 1 05:49:24 EDT 2008 ppc64, sessions=20106 20130 20142 20156 20198 20664 20874 20978 21089 21217 21241 25835,nsessions=12,nusers=1, idletime=147,totmem=726392kb,availmem=614248kb,physmem=202112kb,ncpus=2,loadave=18.00,netload=2060216852, state=free,jobs=? 0,rectime=1252672168 m7ps302 state = free np = 2 ntype = cluster status = opsys=linux,uname=Linux m7ps302 2.6.25-14.fc9.ppc64 #1 SMP Thu May 1 05:49:24 EDT 2008 ppc64, sessions=20011 20206 20298 20409 20537 20561 24634,nsessions=7,nusers=1,idletime=28,totmem=726392kb, availmem=656612kb,physmem=202112kb,ncpus=2,loadave=12.01,netload=290321165,state=free,jobs=? 0,rectime=1252672197 m7ps303 state = free np = 2 ntype = cluster status = opsys=linux,uname=Linux m7ps303 2.6.25-14.fc9.ppc64 #1 SMP Thu May 1 05:49:24 EDT 2008 ppc64, sessions=19778 19932 20023 20134 20261 20285,nsessions=6,nusers=1,idletime=84678,totmem=726392kb, availmem=654592kb,physmem=202112kb,ncpus=2,loadave=12.00,netload=225412404,state=free,jobs=? 0,rectime=1252672200 m7ps304 state = free np = 2 ntype = cluster status = opsys=linux,uname=Linux m7ps304 2.6.25-14.fc9.ppc64 #1 SMP Thu May 1 05:49:24 EDT 2008 ppc64, sessions=20065 20219 20299 20410 20526 20550,nsessions=6,nusers=1,idletime=85168,totmem=726392kb,availmem=655508kb, physmem=202112kb,ncpus=2,loadave=12.00,netload=194995093,state=free,jobs=? 0,rectime=1252672199 m7ps305 state = free np = 2 ntype = cluster status = opsys=linux,uname=Linux m7ps305 2.6.25-14.fc9.ppc64 #1 SMP Thu May 1 05:49:24 EDT 2008 ppc64, sessions=12190 12344 12424 12534 12650 12674,nsessions=6,nusers=1,idletime=85297,totmem=726392kb,availmem=659092kb, physmem=202112kb,ncpus=2,loadave=12.00,netload=186070638,state=free,jobs=? 0,rectime=1252672199 m7ps306 state = free np = 2 ntype = cluster status = opsys=linux,uname=Linux m7ps306 2.6.25-14.fc9.ppc64 #1 SMP Thu May 1 05:49:24 EDT 2008 ppc64, sessions=12153 12416 12532 12556,nsessions=4,nusers=1,idletime=85990,totmem=726392kb,availmem=667200kb, physmem=202112kb,ncpus=2,loadave=8.00,netload=152866157,state=free,jobs=? 0,rectime=1252672199 m7ps307 state = free np = 2 ntype = cluster status = opsys=linux,uname=Linux m7ps307 2.6.25-14.fc9.ppc64 #1 SMP Thu May 1 05:49:24 EDT 2008 ppc64, sessions=31964 32227 32343 32367,nsessions=4,nusers=1,idletime=86007,totmem=726392kb,availmem=665824kb, physmem=202112kb,ncpus=2,loadave=8.00,netload=152898292,state=free,jobs=? 0,rectime=1252672199 m7ps308 state = free np = 2 ntype = cluster status = opsys=linux,uname=Linux m7ps308 2.6.25-14.fc9.ppc64 #1 SMP Thu May 1 05:49:24 EDT 2008 ppc64, sessions=15178 15781 15824 15870 15913 18790 18833 19309 19680 20006 20040 21756 21826 21984 22026,nsessions=15, nusers=1,idletime=87709,totmem=726392kb,availmem=618376kb,physmem=202112kb,ncpus=2,loadave=8.00,netload=3674825471, state=free,jobs=? 0,rectime=1252672199 m7ps309 state = free np = 2 ntype = cluster status = opsys=linux,uname=Linux m7ps309 2.6.25-14.fc9.ppc64 #1 SMP Thu May 1 05:49:24 EDT 2008 ppc64, sessions=12126 12365 12481 12505,nsessions=4,nusers=1,idletime=88185,totmem=726392kb,availmem=667648kb, physmem=202112kb,ncpus=2,loadave=8.00,netload=132620619,state=free,jobs=? 0,rectime=1252672198 m7ps310 state = free np = 2 ntype = cluster status = opsys=linux,uname=Linux m7ps310 2.6.25-14.fc9.ppc64 #1 SMP Thu May 1 05:49:24 EDT 2008 ppc64, sessions=12115 12352 12456 12480,nsessions=4,nusers=1,idletime=88143,totmem=726392kb,availmem=668264kb, physmem=202112kb,ncpus=2,loadave=8.00,netload=118211408,state=free,jobs=? 0,rectime=1252672199 m7ps311 state = free np = 2 ntype = cluster status = opsys=linux,uname=Linux m7ps311 2.6.25-14.fc9.ppc64 #1 SMP Thu May 1 05:49:24 EDT 2008 ppc64, sessions=12414 12728 12754,nsessions=3,nusers=1,idletime=88930,totmem=726392kb,availmem=654800kb, physmem=202112kb,ncpus=2,loadave=6.08,netload=96412175,state=free,jobs=? 0,rectime=1252672199 m7ps313 state = free np = 2 ntype = cluster status = opsys=linux,uname=Linux m7ps313 2.6.25-14.fc9.ppc64 #1 SMP Thu May 1 05:49:24 EDT 2008 ppc64, sessions=12160 12407 12431,nsessions=3,nusers=1,idletime=89716,totmem=726392kb,availmem=670224kb, physmem=202112kb,ncpus=2,loadave=6.01,netload=80806889,state=free,jobs=? 0,rectime=1252672197 m7ps314 state = free np = 2 ntype = cluster status = opsys=linux,uname=Linux m7ps314 2.6.25-14.fc9.ppc64 #1 SMP Thu May 1 05:49:24 EDT 2008 ppc64, sessions=12162 12397 12421,nsessions=3,nusers=1,idletime=90098,totmem=726392kb,availmem=670232kb, physmem=202112kb,ncpus=2,loadave=6.00,netload=77279489,state=free,jobs=? 0,rectime=1252672199 m7ps315 state = free np = 2 ntype = cluster status = opsys=linux,uname=Linux m7ps315 2.6.25-14.fc9.ppc64 #1 SMP Thu May 1 05:49:24 EDT 2008 ppc64, sessions=12105 12329 12353,nsessions=3,nusers=1,idletime=90874,totmem=726392kb,availmem=669828kb, physmem=202112kb,ncpus=2,loadave=6.00,netload=74617724,state=free,jobs=? 0,rectime=1252672199 m7ps316 state = free np = 2 ntype = cluster status = opsys=linux,uname=Linux m7ps316 2.6.25-14.fc9.ppc64 #1 SMP Thu May 1 05:49:24 EDT 2008 ppc64, sessions=12155 12332 12356,nsessions=3,nusers=1,idletime=91700,totmem=726392kb,availmem=668940kb, physmem=202112kb,ncpus=2,loadave=6.00,netload=62612343,state=free,jobs=? 0,rectime=1252672199
Polecenie pbsnodes z opcja -a informuje administratora systemu czy serwer torque poprawnie widzi podporządkowane pod swoją jurysdykcją maszyny ( czyli w kolejności konsole o nazwa odpwiednio m7ps301 do m7ps316 na których zostały zainstalowane aplikacje klienckie torque ). Generalnie polecenie wyświetla informacje o maszynach wraz z dostępnymi zasobami. Np. zasób totmem=wartość , jest informacją o ilosći dostępnej pamięci operacyjnej. Widzimy że konsola odpowiada na zaptytanie serwera , w odpowiedzi wysyła wskazane wyżej informacje w tutule podając swoją nazwę hostname.
Dostarcza informacji na temat kolejek i zadań.
qstat podaje listę wszystkich zadań oraz ich stan
qstat -n jak wyżej, dodatkowo podaje nazwy przydzielonych maszyn
qstat job_id podaje informacje o stanie zadania o podanym job_id
qstat -q wyświetla liste kolejek w systemie PBS
qstat -Q wyświetla informacje na temat kolejek w nieco innym formacie
qstat -Q -f wyświetla szczegółowe informacje na temat kolejek
qstat -f job_id podaje szczegółowe informacje o wybranym zadaniu
[root@m7-ps3a repository]# qstat -q server: xxx.yyy.pk.edu.pl Queue Memory CPU Time Walltime Node Run Que Lm State ---------------- ------ -------- -------- ---- --- --- -- ----- batch -- -- -- -- 0 0 -- E R ----- ----- 0 0 [root@m7-ps3a repository]# qstat -Q -f Queue: batch queue_type = Execution total_jobs = 0 state_count = Transit:0 Queued:0 Held:0 Waiting:0 Running:0 Exiting:0 resources_default.nodes = 1 resources_default.walltime = 01:00:00 mtime = 1252509072 enabled = True started = True [root@m7-ps3a repository]# qstat -Q Queue Max Tot Ena Str Que Run Hld Wat Trn Ext T ---------------- --- --- --- --- --- --- --- --- --- --- - batch 0 0 yes yes 0 0 0 0 0 0 E
Polecenie gstat oraz gstat -n nie podają żadnych informacji odnośnie aktywnych zadań (POLE Que=0), ponieważ takich w tej chwili nie ma w systemie.
Sprawdzenie ustawień serwera oraz kolejek
[m7ps3@m7-ps3a test]$ qmgr Max open servers: 4 Qmgr: print server # # Create queues and set their attributes. # # # Create and define queue workqueue # create queue workqueue set queue workqueue queue_type = Execution set queue workqueue acl_host_enable = False set queue workqueue acl_user_enable = False set queue workqueue acl_users = m7ps3@xxx.yyy.pk.edu.pl set queue workqueue acl_users += root@xxx.yyy.pk.edu.pl set queue workqueue resources_max.cput = 24:00:00 set queue workqueue resources_min.cput = 00:00:01 set queue workqueue enabled = True set queue workqueue started = True # # Create and define queue batch # create queue batch set queue batch queue_type = Execution set queue batch acl_host_enable = False set queue batch acl_hosts = xxx.yyy.pk.edu.pl set queue batch acl_user_enable = False set queue batch acl_users = root set queue batch resources_default.nodes = 1 set queue batch resources_default.walltime = 01:00:00 set queue batch enabled = True set queue batch started = True # # Set server attributes. # set server scheduling = True set server managers = root@xxx.yyy.pk.edu.pl set server operators = root@xxx.yyy.pk.edu.pl set server default_queue = batch set server log_events = 511 set server mail_from = adm set server scheduler_iteration = 600 set server node_check_rate = 150 set server tcp_timeout = 6 set server pbs_version = 2.1.10 set server submit_hosts = xxx.yyy.pk.edu.pl set server allow_node_submit = True Qmgr: quit
Ustawienia dla serwera:
set server scheduling = True -- ważny wpis urchomione zostaje wykonywanie zadania po dodaniu do klejki
set server submit_hosts = xxx.yyy.pk.edu.pl -- wpis informuje o tym że job'y można dodawać tylko z maszyny głównej
set server allow_node_submit = True -- każdy użytkownik systemu może wydawać polecenia dodania zadania do kolejki (wyjątek root)
Zlecanie zadań do systemu kolejkowego należy wykonywać z tzw. maszyny dostępowej (xxx.yyy.pk.edu.pl , wpis zdefiniowany set server submit_hosts = xxx.yyy.pk.edu.pl). Następnym krokiem jest utworzenie skryptu startowego i dodanie go do kolejki przy pomocy polecenia qsub. Możliwe jest także bezpośrednie dodanie programu z pominięciem skryptu. Jednak pierwsze podejście jest bardziej klarowne.
polecenie: qsub ./skrypt (Działanie: dodaje zadanie do wskazanej kolejki z zadanymi parametrami) albo polecenie: qsub skrypt
Powyższa linijka dodaje zadanie do kolejki. Parametry pobierane są ze 'skrypt.sh'. Jeżeli w skrypcie nie zdefiniowano parametrów to przyjmowane są wartości domyślne.
UWAGA --1--
Domyślnie job nie może być dodawany z poziomu superuser'a , kompilator tutaj wyrzuca bardzo subtelny i trudny w interpretacji błąd:
qsub: Bad UID for Job Execution
UWAGA --2--
Skrypt musi mieć możliwość wykonania (execute), z poziomu użytkownika root wydajemy polecenie:
polecenie: chmod 755 skrypt
4-read 2-write 1-execute
Usunięcie zadania z kolejki
Składnia polecenia: gdel JOB_ID
Uruchomienia daemona wykonywania zadań w kolejce
polecenie: /etc/init.d/pbs_sched
pbs_sched jest to domyślny natywny scheduler, jeśli nie zostanie on uruchomiony zadania w kolejce (kolumna S ) będą miały stan ustawiony na 'Q' czyli czeka na wykonanie ZAWSZE
-----qsub Error messages----- Invalid option $ qsub -h -N mylcl -J K localsched qsub: invalid option -- J usage: qsub [-a date_time] [-A account_string] [-c interval] Invalid directive, extra characters in #PBS -q infinite $ qsub cpbs.cmd qsub: directive error: -q infinite ###reset to use infinite queue Directive lines cannot contain extra characters, like comments describing the directive action Invalid server name in directive #PBS -q workq@dell26 $ qsub cpbs.cmd Unknown Host. qsub: cannot connect to server dell26 (errno=15008) Invalid queue name in directive #PBS -q workq $ qsub cpbs.cmd qsub: Unknown queue Unsupported limits in directive mem=550MB,cput=288000 $ qsub -h cpbs.cmd qsub: Job exceeds queue resource limits the invalid value is cput=288000 seconds, that sets job CPU limit to 80 hours, while the longest allowed CPU limit is 72 hours (queue infinite) Invalid user in #PBS -u new-user $ qsub sube.cmd qsub: Bad UID for job execution
Pierwsze job jaki dodany został do kolejki zadań to skrypt który został umieszczony w katalogu /home/test o nazwie 'skrypt_batch'
Listing skryptu 'skrypt_batch':
[m7ps3@m7-ps3a test]$ cat skrypt_batch #!/bin/bash #PBS -N zadanie01 #PBS -q batch #PBS -l walltime=00:01:00 echo -n "Hostname:" /bin/hostname
Jest to prosty programik wypisujący nazwę hosta maszyny za pomocą polecenia /bin/hostname
Pierwsza linia określa interpreter dla naszego skryptu, jeśli nie ma wyraźnych powodów należy używać bash'a. Ważne jest aby wybrany interpreter był dostępny na klastrze! Linie rozpoczynające się dyrektywą #PBS zawierają parametry dla qsub Pozostałe linie to treść skryptu (sekwencja poleceń do wykonania)
Linie rozpoczynające się dyrektywą #PBS zawierają parametry dla qsub. Pozostałe linie to treść skryptu (sekwencja poleceń do wykonania).
Wybrane paremetry polecenia qsub: parametr opis przykład -N określa nazwę dla naszego zadania -N zadanie01 -q definiuje kolejke do której dodajemy zadanie -q batch -l definiuje zasoby wymagane przez zadanie -l walltime=00:01:00 -o określa plik do którego przekierowane zostanie stdout -o comp01job.stdout Wybrane zasoby (dla opcji -l): resource format description cput seconds, or [HH:]MM:]SS----------------Maximum amount of CPU time used by all processes in the job nice integer between -20 and 19-------------Adjust the process’ execution priority nodes {node_count or hostname} --------------------------------------------------------------------------------- ----------------------------------------------------------------Number and/or type of nodes to be reserved for exclusive use by the job. ----------------------------------------------------------------The value is one or more node_specs joined with the ‘+’ ----------------------------------------------------------------character, “node_spec[+node_spec...]”. Each node_spec is an ----------------------------------------------------------------number of nodes required of the type declared in the ----------------------------------------------------------------node_spec and a name or one or more property or properties ----------------------------------------------------------------desired for the nodes. The number, the name, and each ----------------------------------------------------------------property in the node_spec are separated by a colon ‘:’. ----------------------------------------------------------------If no number is specified, one (1) is assumed. ----------------------------------------------------------------The name of a node is its hostname. The properties of nodes ----------------------------------------------------------------are: *ppn=# - specifying the number of processors per node ----------------------------------------------------------------requested. Defaults to 1.*features - a string assigned by ----------------------------------------------------------------the system administrator specify a node’s features. pcput seconds, or [HH:]MM:]SS----------------Maximum amount of CPU time used by any single process in the job pmem size-----------------------------------Maximum amount of physical memory used by any single process of the job pvmem size-----------------------------------Maximum amount of virtual memory used by any single process in the job vmem size-----------------------------------Maximum amount of virtual memory used by all concurrent processes in the job walltime seconds, or [HH:]MM:]SS----------------Maximum amount of real time during which the job can be in the running state
Dodanie zadania do kolejki z poziomu użytkownika (m7ps3).
[m7ps3@m7-ps3a test]$ qsub skrypt_batch 36.xxx.yyy.pk.edu.pl
Sprawdzam kolejkę
[m7ps3@m7-ps3a test]$ qstat Job id Name User Time Use S Queue ------------------- ---------------- --------------- -------- - ----- 36.m7-ps3a zadanie01 m7ps3 0 Q batch
Kolumna S zawiera informacje na temat stanu zadania:
R - Running (Uruchomione)
Q - Queued (Zakolejkowane, czeka na wykonanie)
E - Exiting
C - Completed
Faktycznie zadanie zostało dodane do kolejki batch i czeka na wykonanie (opcja Q) w skrypcie ustawiliśmy maksymalny czas wykonania zadania na 1 minute w ciągu tego czasu job się wykona. Gdybyśmy nie ustawili opcji walltime=00:01:00 w 'skrypt_batch' wtedy została by użytwa opcja domyślna kolejki i zadanie wykonane zostało by w ciągu 60 minut. Widać również że został przydzielony numer ID JOB( 36.xxx.yyy.pk.edu.pl bądź skrócona wersja 36.m7-ps3a) oraz jest poprawna informacja o nazwie zadania (zadanie01)
Porównanie dostępnych kolejek w systemie
[m7ps3@m7-ps3a test]$ qstat -Q Queue Max Tot Ena Str Que Run Hld Wat Trn Ext T ---------------- --- --- --- --- --- --- --- --- --- --- - workqueue 0 0 yes yes 0 0 0 0 0 0 E batch 0 1 yes yes 1 0 0 0 0 0 E
Do kolejki batch zostało przydzielone jedno zadanie natomaist w kolejce workqueue brak job'ów
Wyświetlenie szczegółowych informacji o zadaniu w kolejce batch.
[m7ps3@m7-ps3a test]$ qstat -f Job Id: 36.xxx.yyy.pk.edu.pl Job_Name = zadanie01 Job_Owner = m7ps3@xxx.yyy.pk.edu.pl job_state = Q queue = batch server = xxx.yyy.pk.edu.pl Checkpoint = u ctime = Fri Sep 11 23:08:25 2009 Error_Path = xxx.yyy.pk.edu.pl:/home/test/zadanie01.e36 Hold_Types = n Join_Path = n Keep_Files = n Mail_Points = a mtime = Fri Sep 11 23:08:25 2009 Output_Path = xxx.yyy.pk.edu.pl:/home/test/zadanie01.o36 Priority = 0 qtime = Fri Sep 11 23:08:25 2009 Rerunable = True Resource_List.nodect = 1 Resource_List.nodes = 1 Resource_List.walltime = 00:01:00 Variable_List = PBS_O_HOME=/home/m7ps3,PBS_O_LANG=pl_PL.UTF-8, PBS_O_LOGNAME=m7ps3, PBS_O_PATH=/usr/kerberos/bin:/usr/lib/ccache:/usr/local/bin:/bin:/usr /bin:/home/m7ps3/bin,PBS_O_MAIL=/var/spool/mail/m7ps3, PBS_O_SHELL=/bin/bash,PBS_O_HOST=xxx.yyy.pk.edu.pl, PBS_O_WORKDIR=/home/test,PBS_O_QUEUE=batch etime = Fri Sep 11 23:08:25 2009 [m7ps3@m7-ps3a test]$ qstat -f 36.xxx.yyy.pk.edu.pl Job Id: 36.xxx.yyy.pk.edu.pl Job_Name = zadanie01 Job_Owner = m7ps3@xxx.yyy.pk.edu.pl job_state = Q queue = batch server = xxx.yyy.pk.edu.pl Checkpoint = u ctime = Fri Sep 11 23:08:25 2009 Error_Path = xxx.yyy.pk.edu.pl:/home/test/zadanie01.e36 Hold_Types = n Join_Path = n Keep_Files = n Mail_Points = a mtime = Fri Sep 11 23:08:25 2009 Output_Path = xxx.yyy.pk.edu.pl:/home/test/zadanie01.o36 Priority = 0 qtime = Fri Sep 11 23:08:25 2009 Rerunable = True Resource_List.nodect = 1 Resource_List.nodes = 1 Resource_List.walltime = 00:01:00 Variable_List = PBS_O_HOME=/home/m7ps3,PBS_O_LANG=pl_PL.UTF-8, PBS_O_LOGNAME=m7ps3, PBS_O_PATH=/usr/kerberos/bin:/usr/lib/ccache:/usr/local/bin:/bin:/usr /bin:/home/m7ps3/bin,PBS_O_MAIL=/var/spool/mail/m7ps3, PBS_O_SHELL=/bin/bash,PBS_O_HOST=xxx.yyy.pk.edu.pl, PBS_O_WORKDIR=/home/test,PBS_O_QUEUE=batch etime = Fri Sep 11 23:08:25 2009
Usunięcie zadania z kolejki
Składnia polecenia: gdel JOB_ID
[m7ps3@m7-ps3a test]$ qdel 36.m7-ps3a
Do celów testowych został utworzony skrypt którego wykonanie zostanie przeprowadzone docelowo na maszynie m7ps301 zostało to zaimplemetowanie w skrypcie za pomocą polecenia node=m7ps301 dodatkowo przekierowano wynik działania skryptu w celach sprawdzenia poprawności wykonania na danej maszynie.
0. ----Listing ../dokumentacja/projekty/projekt2/torque_job/nowy [m7ps3@m7-ps3a torque_job]$ cat nowy #!/bin/bash #PBS -q workqueue #PBS -N zadanie_test #PBS -l nodes=m7ps301,walltime=00:01:00 ---- > skierowanie wykonania zadanie na konkretny węzeł echo "starting $PBS_JOBNAME" > /tmp/output.$PBS_JOBID 1. ----DODANIE skryptu do kolejki zadań do wykonania POLECENIE ( qsub ) ----- [m7ps3@m7-ps3a torque_job]$ qsub nowy 64.xxx.yyy.pk.edu.pl 2. ----SPRAWDZAM czy zadanie zostało faktycznie dodane POLECENIE ( gstat -G ) ----- [m7ps3@m7-ps3a torque_job]$ qstat -G xxx.yyy.pk.edu.pl: Req'd Req'd Elap Job ID Username Queue Jobname SessID NDS TSK Memory Time S Time -------------------- -------- -------- ---------- ------ ----- --- ------ ----- - ----- 64.xxx.yyy.pk.e m7ps3 workqueu zadanie_te -- 1 -- -- 24:00 Q -- 3. ----MONITOROWANIE na bieżąco stanu zadań w kolejce workqueue ( qstat ) ----- [m7ps3@m7-ps3a torque_job]$ qstat Job id Name User Time Use S Queue ------------------- ---------------- --------------- -------- - ----- 64.m7-ps3a zadanie_test m7ps3 0 Q workqueue [m7ps3@m7-ps3a torque_job]$ qstat Job id Name User Time Use S Queue ------------------- ---------------- --------------- -------- - ----- 64.m7-ps3a zadanie_test m7ps3 0 Q workqueue [m7ps3@m7-ps3a torque_job]$ qstat Job id Name User Time Use S Queue ------------------- ---------------- --------------- -------- - ----- 64.m7-ps3a zadanie_test m7ps3 0 Q workqueue [m7ps3@m7-ps3a torque_job]$ qstat Job id Name User Time Use S Queue ------------------- ---------------- --------------- -------- - ----- 64.m7-ps3a zadanie_test m7ps3 0 Q workqueue [m7ps3@m7-ps3a torque_job]$ qstat Job id Name User Time Use S Queue ------------------- ---------------- --------------- -------- - ----- 64.m7-ps3a zadanie_test m7ps3 0 R workqueue [m7ps3@m7-ps3a torque_job]$ qstat Job id Name User Time Use S Queue ------------------- ---------------- --------------- -------- - ----- 64.m7-ps3a zadanie_test m7ps3 00:00:00 E workqueue [m7ps3@m7-ps3a torque_job]$ qstat Job id Name User Time Use S Queue ------------------- ---------------- --------------- -------- - ----- 64.m7-ps3a zadanie_test m7ps3 00:00:00 E workqueue [m7ps3@m7-ps3a torque_job]$ qstat Job id Name User Time Use S Queue ------------------- ---------------- --------------- -------- - ----- 64.m7-ps3a zadanie_test m7ps3 00:00:00 E workqueue [m7ps3@m7-ps3a torque_job]$ qstat Job id Name User Time Use S Queue ------------------- ---------------- --------------- -------- - ----- 64.m7-ps3a zadanie_test m7ps3 00:00:00 E workqueue [m7ps3@m7-ps3a torque_job]$ qstat Job id Name User Time Use S Queue ------------------- ---------------- --------------- -------- - ----- 64.m7-ps3a zadanie_test m7ps3 00:00:00 E workqueue [m7ps3@m7-ps3a torque_job]$ qstat Job id Name User Time Use S Queue ------------------- ---------------- --------------- -------- - ----- 64.m7-ps3a zadanie_test m7ps3 00:00:00 E workqueue [m7ps3@m7-ps3a torque_job]$ qstat Job id Name User Time Use S Queue ------------------- ---------------- --------------- -------- - ----- 64.m7-ps3a zadanie_test m7ps3 00:00:00 E workqueue [m7ps3@m7-ps3a torque_job]$ qstat Job id Name User Time Use S Queue ------------------- ---------------- --------------- -------- - ----- 64.m7-ps3a zadanie_test m7ps3 00:00:00 E workqueue [m7ps3@m7-ps3a torque_job]$ qstat Job id Name User Time Use S Queue ------------------- ---------------- --------------- -------- - ----- 64.m7-ps3a zadanie_test m7ps3 00:00:00 E workqueue (zadanie jest najpier kolejkonowane opcja Q(Queued) następnie przechodzi do działania R(Running) na końcu E (Exe)
Skrypt miał dolecelowo wykonać się na maszynie m7ps301, dodatkowo na tej konsoli w folderze /tmp będzie przechowywany wynik srdOUT wykonania skryptu plik ten będzie miał następującą nazwę zdefiniowaną podczasz wykonywania:
echo "starting $PBS_JOBNAME" > /tmp/output.$PBS_JOBID
Czyli nazwa w /tmp na dysku lokalnym m7ps301 będzie (output.JOB_ID) ----> output.64.xxx.yyy.pk.edu.pl. Oraz wewnątrz pliku /tcp/output.64.xxx.yyy.pk.edu.pl będzie widnieć nazwa wykonywanego zadania (zadanie_test).
Pierwsza sprawa to utworzenie przykładowej kolejki
qmgr -c "create queue batch queue_type=execution"
Następnie możemy dodawać atrybuty. Omówię kilka z nich:
1. acl_hosts HOST[+HOST]... specyfikacja odnośnie hostów możliwych do pracy w danej kolejce (np mogących dodawać zadania) qmgr -c "set queue batch acl_hosts=h1+h2+h3" dodanie przykładowych hostów do kolejki batch qmgr -c "set queue batch acl_host_enable=true ustawienie filtracji hostów na true 2. acl_users USER[@HOST][+USER[@HOST]]... secyfikacja user'ów do pracy w kolejce qmgr -c "set queue batch acl_users=john" qmgr -c "set queue batch acl_users+=steve@h2" qmgr -c "set queue batch acl_users+=stevek@h3" qmgr -c "set queue batch acl_user_enable=true ustawienie filtracji hostów na true
do celów testowych wprowadzaone zotały ustawienia dla hosta xxx.yyy.pk.edu.pl następnie wyłączone opcję acl_host_enable=false w celach przywrócenia poprawnej pracy dodatkowo wprowadzono
set server allow_node_submit = True
Jest to ustawienie globalne dla całego serwera umożliwia wszystkim węzłą na klastrze dodawanie job'ów do wszystkich kolejek. Ten wpis zabija inne ustawienie serwera mianowicie:
set server submit_hosts = xxx.yyy.pk.edu.pl
Ciekawym poleceniem odnośnie zadania jest tracejob JOB_ID , najwięcej informacji możemy uzyskać wywołując go z maszyny na której postawiony został serwer torque czyli (xxx.yyy.pk.edu.pl) z poziomu użytkownika root. Poniżej przykład dla zadania JOB_ID = 70.
[root@m7-ps3a ~]# tracejob 70 /var/torque/mom_logs/20090914: No matching job records located Job: 70.xxx.yyy.pk.edu.pl 09/14/2009 22:53:26 S enqueuing into workqueue, state 1 hop 1 09/14/2009 22:53:26 S Job Queued at request of m7ps3@m7ps301, owner = m7ps3@m7ps301, job name = zadanie_test, queue = workqueue 09/14/2009 22:53:26 A queue=workqueue 09/14/2009 22:54:26 S Job Modified at request of Scheduler@xxx.yyy.pk.edu.pl 09/14/2009 22:54:26 L Job Run 09/14/2009 22:54:26 S Job Run at request of Scheduler@xxx.yyy.pk.edu.pl 09/14/2009 22:54:26 A user=m7ps3 group=m7ps3 jobname=zadanie_test queue=workqueue ctime=1252961606 qtime=1252961606 etime=1252961606 start=1252961666 exec_host=m7ps301/0 Resource_List.cput=24:00:00 Resource_List.neednodes=m7ps301 Resource_List.nodect=1 Resource_List.nodes=m7ps301 Resource_List.walltime=00:01:00 09/14/2009 22:54:32 S Exit_status=0 resources_used.cput=00:00:00 resources_used.mem=0kb resources_used.vmem=0kb resources_used.walltime=00:00:04 09/14/2009 22:54:32 A user=m7ps3 group=m7ps3 jobname=zadanie_test queue=workqueue ctime=1252961606 qtime=1252961606 etime=1252961606 start=1252961666 exec_host=m7ps301/0 Resource_List.cput=24:00:00 Resource_List.neednodes=m7ps301 Resource_List.nodect=1 Resource_List.nodes=m7ps301 Resource_List.walltime=00:01:00 session=3946 end=1252961672 Exit_status=0 resources_used.cput=00:00:00 resources_used.mem=0kb resources_used.vmem=0kb resources_used.walltime=00:00:04 09/14/2009 22:54:36 S dequeuing from workqueue, state COMPLETE
bardzo szczegółowe informacje na temat zadania (czas, kto zlecił, kto wykonał, zasoby), na końcu widnieje bardzo ważna wiadomość mianowicie "state COMPLETE".
Ganglia is a scalable distributed monitoring system for high-performance computing systems such as clusters and Grids. It is based on a hierarchical design targeted at federations of clusters. It leverages widely used echnologies such as XML for data representation, XDR for compact, portable data transport, and RRDtool for data storage and visualization. http://ganglia.info/
Ganglia jest systemem monitorowania przeznaczonym dla klastróww (grid'ów). Jest to projekt przydatny zarówno dla administratorów jak i użytkowników, pozwala sprawdzić obciążenie (określić kondycję) klastra lub grupy klastrów jak również każdego węzła z osobna. Monitorowaniu moze podlegać aktywność procesora, sieci, pamięci itp. Dodatkowo program dostarcza informacji o systemie (jest to np. wersja jądra systemowego, nazwa systemu operacyjnego) i sprzęcie (np. częstotliwość taktowania procesora i jego architektura, ilość pamięci RAM) na którym został uruchomiony. Projekt może być używany do monitorowania również systemów wirtualnych uruchomionych na jednej maszynie z WSO. Ogromn zalet projektu Ganglia jest latwość wykrywania węzłów nieaktywnych lub niepracujących prawidłowo - jest to przydatne szczególnie w przypadkach, gdy klaster składa się z bardzo dużej ilości węzłów. Na projekt składa się kilka programów. Najważniejsze z nich to:
- Gmond (Ganglia MONitor Daemon) jest to program uruchamiany na każdym z węzłów klastra. Nie wymaga systemu plików, użytkownika ze specjalnymi uprawnieniami czy bazy danych. Jego zadanie polega na monitorowaniu stanu węzła i informowaniu program gmetad o zmianach na węźle. Wykorzystuje protokół multicast do rozsyłania informacji do innych węzłów.
- Gmetad (Ganglia METAdata Daemon) jest uruchamiany na jednym komputerze np. kontrolerze klastra lub na niezależnej maszynie. Jego funkcja polega na zbieraniu danych pochodzcych od programów gmond (monitorujócych węzły) jak również od innych programów gmetad (monitorujócych inne klastry) i zapisywaniu ich w bazie Round Robin Database (RRD). Zebrane informacje podlegają następnie odpowiedniej obróbce i prezentowane są na stronie www w postaci wykresów.
- rrdtool (Round Rabin Database) , baza danych przchowujóca statyski klastra
Właściwości systemu i wykorzystanie:
- rozproszony system monitorowania klastrów i gridów
- wykorzystywany na tysiącach klastrów na całym świecie (CERN, Motorola, Cisco, itd. )
- XML, XDR
- przechowywanie i prezentacja wyników: RRDTOOL specjalne algorytmy i struktury danych
- minimalizacja narzutów czasowych
- skalowalność (do 2000 węzłów)
-dostępny na wiele systemów operacyjnych i architektur (AMD64, Intel, itd.)
Architektura (schemat ogólny)
Serwer jak większość aplikacji zarządzających został postawiony na węźle 22 ( ip: 197.197.197.1), będzie on pełnił funkcję zbierania statystyk i udostępniania w postaci inferfejsu web'owego.
Listing procesu instalacj:
[root@m7-ps3a ~]# yum install rrdtool ganglia ganglia-gmetad ganglia-gmond ganglia-web httpd php fedora | 2.4 kB 00:00 updates | 2.6 kB 00:00 Ustawianie procesu instalacji Analizowanie argumentów instalacji pakietów Rozwiązywanie zależności --> Wykonywanie sprawdzania transakcji ---> Pakiet ganglia-gmetad.ppc 0:3.0.7-1.fc9 zostanie zaktualizowany ---> Pakiet ganglia-gmond.ppc 0:3.0.7-1.fc9 zostanie zaktualizowany ---> Pakiet rrdtool.ppc 0:1.3-0.12.beta4.fc9 zostanie zaktualizowany --> Przetwarzanie zależności: dejavu-lgc-fonts dla pakietu: rrdtool ---> Pakiet php.ppc 0:5.2.5-7.fc9 zostanie zaktualizowany --> Przetwarzanie zależności: php-common = 5.2.5-7.fc9 dla pakietu: php --> Przetwarzanie zależności: php-cli = 5.2.5-7.fc9 dla pakietu: php ---> Pakiet ganglia.ppc 0:3.0.7-1.fc9 zostanie zaktualizowany ---> Pakiet ganglia-web.ppc 0:3.0.7-1.fc9 zostanie zaktualizowany --> Przetwarzanie zależności: php-gd dla pakietu: ganglia-web ---> Pakiet httpd.ppc 0:2.2.8-3 zostanie zaktualizowany --> Przetwarzanie zależności: httpd-tools = 2.2.8-3 dla pakietu: httpd --> Wykonywanie sprawdzania transakcji ---> Pakiet php-common.ppc 0:5.2.5-7.fc9 zostanie zaktualizowany ---> Pakiet httpd-tools.ppc 0:2.2.8-3 zostanie zaktualizowany ---> Pakiet php-cli.ppc 0:5.2.5-7.fc9 zostanie zaktualizowany ---> Pakiet php-gd.ppc 0:5.2.5-7.fc9 zostanie zaktualizowany ---> Pakiet dejavu-lgc-fonts.noarch 0:2.24-3.fc9 zostanie zaktualizowany --> Zakończono rozwiązywanie zależności Rozwiązano zależności ============================================================================= Pakiet Architektura Wersja Repozytorium Rozmiar ============================================================================= Instalowanie: ganglia ppc 3.0.7-1.fc9 fedora 94 k ganglia-gmetad ppc 3.0.7-1.fc9 fedora 93 k ganglia-gmond ppc 3.0.7-1.fc9 fedora 238 k ganglia-web ppc 3.0.7-1.fc9 fedora 120 k httpd ppc 2.2.8-3 fedora 1.2 M php ppc 5.2.5-7.fc9 fedora 1.3 M rrdtool ppc 1.3-0.12.beta4.fc9 fedora 440 k Instalowanie, aby rozwiązać zależności: dejavu-lgc-fonts noarch 2.24-3.fc9 fedora 3.4 M httpd-tools ppc 2.2.8-3 fedora 80 k php-cli ppc 5.2.5-7.fc9 fedora 2.5 M php-common ppc 5.2.5-7.fc9 fedora 235 k php-gd ppc 5.2.5-7.fc9 fedora 124 k Podsumowanie transakcji ============================================================================= Instalowanie 12 pakietów Aktualizowanie 0 pakietów Usuwanie 0 pakietów
Zainstalowano tutaj dodatkowo serwer apache (httpd) z modułem php będzie on tutaj współpracował z ganglia udostępniając wyniki gmetric w http.
Wstępne informacje:
- działa na każdym węzle
- 37 różnych metryk wbudowanych (np. obciążenie procesora , liczba procesów
- konfiguracja: /etc/gmond.conf
Przechodzimy do konfiguracji deamon'a gmond w tym celu edytujemy plik /etc/gmond.conf. Oraz wprowadzamy zmiany:
cluster { name = "m7ps3" owner = "M-7" latlong = "unspecified" url = "unspecified" }
Zmieaniemy pole name, oraz owner wprowadzajać odpowiednio m7ps3 oraz M-7.
udp_send_channel { host = 197.197.197.1 /*adres demona agregującego - gmond*/ port = 8649 }
W polu host wpisujemy adres ip maszyny , oraz port którego serwer bedzie używał do komunikacji tutaj 8649.
udp_recv_channel { port = 8649 family = inet4 } tcp_accept_channel { port = 8649 }
Port na którym gmond bedzie oczekiwał połączeń również ustawiamy na 8649, oraz wprowadzamy pole family z parametrem inet4 połączenia akcepotowalne tcp należy ustawić również na porcie 8649.
Listing pliku /etc/gmond.conf ( pierwsz 60 lini )
[root@m7-ps3a etc]# head -n 60 /etc/gmond.conf /* This configuration is as close to 2.5.x default behavior as possible The values closely match ./gmond/metric.h definitions in 2.5.x */ globals { daemonize = yes setuid = yes user = ganglia debug_level = 0 max_udp_msg_len = 1472 mute = no deaf = no host_dmax = 0 /*secs */ cleanup_threshold = 300 /*secs */ gexec = no } /* If a cluster attribute is specified, then all gmond hosts are wrapped inside * of a CLUSTER tag. If you do not specify a cluster tag, then all HOSTS will * NOT be wrapped inside of a CLUSTER tag. */ cluster { name = "m7ps3" owner = "M-7" latlong = "unspecified" url = "unspecified" } /* The host section describes attributes of the host, like the location */ host { location = "unspecified" } /* Feel free to specify as many udp_send_channels as you like. Gmond used to only support having a single channel */ udp_send_channel { host = 197.197.197.1 port = 8649 } /* You can specify as many udp_recv_channels as you like as well. */ udp_recv_channel { port = 8649 family = inet4 } /* You can specify as many tcp_accept_channels as you like to share an xml description of the state of the cluster */ tcp_accept_channel { port = 8649 }
Wstępne informacje:
- co pewien interwał czasu odpytuje daemon'y gmond na poszczególnych węzłach
- parsuje odpowiedzi XML
- agreguje w bazie danych RRD (round-robin database), RRD – baza o stałym rozmiarze
- konfiguracja: /etc/gmetad.conf
Przechodzimy do konfiguracji daemona gmetad w tym celu edytujemy plik /etc/gmetad.conf. Oraz wprowadzamy zmiany:
root@m7-ps3a ~]# cat /etc/gmetad.conf # This is an example of a Ganglia Meta Daemon configuration file # http://ganglia.sourceforge.net/ # # $Id: gmetad.conf 667 2006-07-20 08:49:41Z knobi1 $ # #------------------------------------------------------------------------------- # Setting the debug_level to 1 will keep daemon in the forground and # show only error messages. Setting this value higher than 1 will make # gmetad output debugging information and stay in the foreground. # default: 0 # debug_level 10 # #------------------------------------------------------------------------------- # What to monitor. The most important section of this file. # # The data_source tag specifies either a cluster or a grid to # monitor. If we detect the source is a cluster, we will maintain a complete # set of RRD databases for it, which can be used to create historical # graphs of the metrics. If the source is a grid (it comes from another gmetad), # we will only maintain summary RRDs for it. # # Format: # data_source "my cluster" [polling interval] address1:port addreses2:port ... # # The keyword 'data_source' must immediately be followed by a unique # string which identifies the source, then an optional polling interval in # seconds. The source will be polled at this interval on average. # If the polling interval is omitted, 15sec is asssumed. # # A list of machines which service the data source follows, in the # format ip:port, or name:port. If a port is not specified then 8649 # (the default gmond port) is assumed. # default: There is no default value # # data_source "my cluster" 10 localhost my.machine.edu:8649 1.2.3.5:8655 # data_source "my grid" 50 1.3.4.7:8655 grid.org:8651 grid-backup.org:8651 # data_source "another source" 1.3.4.7:8655 1.3.4.8 data_source "m7ps3" 127.0.0.1:8649 # # Round-Robin Archives # You can specify custom Round-Robin archives here (defaults are listed below) # # RRAs "RRA:AVERAGE:0.5:1:244" "RRA:AVERAGE:0.5:24:244" "RRA:AVERAGE:0.5:168:244" "RRA:AVERAGE:0.5:672:244" \ # "RRA:AVERAGE:0.5:5760:374" # # #------------------------------------------------------------------------------- # Scalability mode. If on, we summarize over downstream grids, and respect # authority tags. If off, we take on 2.5.0-era behavior: we do not wrap our output # in GRID>/GRID tags, we ignore all GRID tags we see, and always assume # we are the "authority" on data source feeds. This approach does not scale to # large groups of clusters, but is provided for backwards compatibility. # default: on # scalable off # #------------------------------------------------------------------------------- # The name of this Grid. All the data sources above will be wrapped in a GRID # tag with this name. # default: Unspecified # gridname "MyGrid" # #------------------------------------------------------------------------------- # The authority URL for this grid. Used by other gmetads to locate graphs # for our data sources. Generally points to a ganglia/ # website on this machine. # default: "http://hostname/ganglia/", # where hostname is the name of this machine, as defined by gethostname(). # authority "http://mycluster.org/newprefix/" # #------------------------------------------------------------------------------- # List of machines this gmetad will share XML with. Localhost # is always trusted. # default: There is no default value # trusted_hosts 127.0.0.1 169.229.50.165 my.gmetad.org # #------------------------------------------------------------------------------- # If you want any host which connects to the gmetad XML to receive # data, then set this value to "on" # default: off # all_trusted on # #------------------------------------------------------------------------------- # If you don't want gmetad to setuid then set this to off # default: on # setuid off # #------------------------------------------------------------------------------- # User gmetad will setuid to (defaults to "ganglia") # default: "ganglia" # setuid_username "ganglia" # #------------------------------------------------------------------------------- # The port gmetad will answer requests for XML # default: 8651 # xml_port 8651 # #------------------------------------------------------------------------------- # The port gmetad will answer queries for XML. This facility allows # simple subtree and summation views of the XML tree. # default: 8652 # interactive_port 8652 # #------------------------------------------------------------------------------- # The number of threads answering XML requests # default: 4 # server_threads 10 # #------------------------------------------------------------------------------- # Where gmetad stores its round-robin databases # default: "/var/lib/ganglia/rrds" # rrd_rootdir "/some/other/place"
Edytujemy linie --data_source "m7ps3" 127.0.0.1:8649-- wprowadzając adres pętli zwrotnej i port 8649.
pozostałe węzły do komunikacji z serwerem wymagają tylko daemon'a gmond
root@m7-ps3a ~]# yum install ganglia-gmond
Konfiguracja jest analogiczna w stosunku do serwera, można spokojnie skopiować plik /etc/gmond.conf z serwera na pozostałe węzły. Przechodzimy do konfiguracji daemona gmond w tym celu edytujemy plik /etc/gmond.conf. Oraz wprowadzamy zmiany:
cluster { name = "m7ps3" owner = "M-7" latlong = "unspecified" url = "unspecified" }
Zmieniamy pole name, oraz owner wprowadzajac odpowiednio m7ps3 oraz M-7.
udp_send_channel { host = 197.197.197.1 /*adres demona agregującego - gmond*/ port = 8649 }
W polu host wpisujemy adres ip maszyny , oraz port którego node bedzie używał do komunikacji port=8649.
udp_recv_channel { port = 8649 family = inet4 } tcp_accept_channel { port = 8649 }
Port na którym gmond bedzie oczekiwał połączeń również ustawiamy na 8649, oraz wprowadzamy pole family z parametrem inet4 połączenia akcepotowalne tcp należy ustawić również na porcie 8649.
Listing pliku /etc/gmond.conf ( pierwsz 60 lini )
[root@m7-m7-ps308 ]# head -n 60 /etc/gmond.conf /* This configuration is as close to 2.5.x default behavior as possible The values closely match ./gmond/metric.h definitions in 2.5.x */ globals { daemonize = yes setuid = yes user = ganglia debug_level = 0 max_udp_msg_len = 1472 mute = no deaf = no host_dmax = 0 /*secs */ cleanup_threshold = 300 /*secs */ gexec = no } /* If a cluster attribute is specified, then all gmond hosts are wrapped inside * of a CLUSTER tag. If you do not specify a cluster tag, then all HOSTS will * NOT be wrapped inside of a CLUSTER tag. */ cluster { name = "m7ps3" owner = "M-7" latlong = "unspecified" url = "unspecified" } /* The host section describes attributes of the host, like the location */ host { location = "unspecified" } /* Feel free to specify as many udp_send_channels as you like. Gmond used to only support having a single channel */ udp_send_channel { host = 197.197.197.1 port = 8649 } /* You can specify as many udp_recv_channels as you like as well. */ udp_recv_channel { port = 8649 family = inet4 } /* You can specify as many tcp_accept_channels as you like to share an xml description of the state of the cluster */ tcp_accept_channel { port = 8649 }
polecenia: /etc/init.d/gmond start polecenie: ( uruchamianie podczas startu systemu) chkconfig gmond on
Aby instalacja na pozostałych konsolach przebiegała sprawnie -- instalacja skrótowa:
0. Z poziomu root.
1. yum install ganglia-gmond
2. chkconfig gmond on
3. Włączasz mc , przechodzisz do katalogu /etc/gmond.conf i go edytujesz .
4. Edytujesz go zmieniając:
cluster { name = "m7ps3" owner = "M-7" latlong = "unspecified" url = "unspecified" } udp_send_channel { host = 197.197.197.1 port = 8649 } udp_recv_channel { port = 8649 family = inet4 }
5. /etc/init.d/gmond start
Dzięki gmetad oraz httpd, mamy do dyspozycji web'owy interfejs programu ganglia dostępny pod adresem 111.222.333.444/ganglia.
Ogólne informacje odnośnie monitorowanego klastra, mamy do dyspozycji 32 procesory na 16 maszynach , wszystkie maszyny są aktywne (Host down = 0), cztery środkowe wykresy informują globalnie o stanie klastra, wartości liczbowe przeliczane są za pomocą specjalnych algorytmów dzięki czemu możemy obserwować wyniki w postaći przejrzystych grafów.
Informacje odnośnie ilości maszyn i sprzętu prezentuje wykres LOAD, następnie dalej jest graf przezentujące stan CPU klastra, pamięci MEMORY oraz zajetości sieci (NETWORK).
W każdej chwili możemy ustawić intresującą nas metryką (jest ich 37) oraz zdefiniować okres pomiaru jaki nas interesuje (max: rok) wstecz.
Pobranie aktualnych statystyk następuje po kliknięciu przycisku "GET FRESH DATA".
Pod wykresami ogólnymi stanu całego klastra widnieją informacje odnośnie node'ów, aby uzyskać wszystkie statystyki (grafy, wykresy, info odnośnie sprzętu) należy kliknąć w wybrany wykres albo skorzystać z pola wyboru --Choose a Node --.
Po kliknięciu m7ps301 mamy:
Poniżej bardzo szczegółowe grafy zawierające wszytkie informacje o stanie danego węzła
SERWER GŁÓWNYCH host: xxx.yyy.pk.edu.pl
[m7ps3@m7-ps3a ~]$ rpm -qa | grep ganglia ganglia-web-3.0.7-1.fc9.ppc ganglia-3.0.7-1.fc9.ppc ganglia-gmetad-3.0.7-1.fc9.ppc ganglia-gmond-3.0.7-1.fc9.ppc [m7ps3@m7-ps3a ~]$ rpm -qa | grep rrdtool rrdtool-1.3-0.12.beta4.fc9.ppc [m7ps3@m7-ps3a ~]$ rpm -qa | grep httpd httpd-2.2.8-3.ppc httpd-tools-2.2.8-3.ppc [m7ps3@m7-ps3a ~]$ rpm -qa | grep php php-cli-5.2.5-7.fc9.ppc php-5.2.5-7.fc9.ppc php-gd-5.2.5-7.fc9.ppc php-common-5.2.5-7.fc9.ppc
KLIENT hosty: m7ps301,m7ps302,m7ps303,...,m7ps316
[m7ps3@m7ps301 ~]$ rpm -qa | grep ganglia ganglia-gmond-3.0.7-1.fc9.ppc ganglia-3.0.7-1.fc9.ppc64
W celach bezpieczeństwa wprowadzona została autoryzacja użytkownika , hasło wygenerowane zostało za pomocą programu htpasswd -c.
htpasswd -c ./home/services/httpd/.htpassword m7admin
Sposób szyfrowania jest standardowym jakie oferują systemy Linux , listing pliku .htpassword ( hasło jest szyfrowane ):
[root@m7-ps3a httpd]# cat .htpasswd m7admin:hc1TdyfEUsXqQ
Takie zabezpieczenie jest wystarczające w szczególności, że usługa ganglia nie oferuje możliwości ingerencji w procesy bądź konfigurację systemu. Poniewż gmetad korzysta z apache w pliku konfiguracyjnym httpd zostały wprowadzony odpowiednie zmiany odnośnie wyświetlania usługi.
Logowanie: wprowadź login oraz hasło
3-krotnie wprowadzone błędne hasło
Ganglia jest zdecydowanie najpopularniejszym systemem monitoringu grid'ów, używają jej między innymi takie potęgi jak Motorola, HP, Microsoft, Cisco oraz najpoularniejsze i najbardziej renomowane universytety Havard, Stanford, Yale teraz także Cracow University of Technology
1. Berkeley (the birthplace of ganglia) 2. Twitter 3. flickr 4. last.fm 4. San Diego Supercomputing Center (contributed great code to the project) 5. Massachusetts Institute of Technology (MIT) 6. National Aeronautics and Space Administration (NASA) 7. National Institutes of Health (NIH) 8. Reuters 9. Internet Archive 10. Industrial Light Magic 11. Wikipedia (check it out!) 12. Virginia Tech (built the fastest supercomputer at any academic institution in the world using ganglia) 13. Dow Chemical 15. Motorola 16. Harvard 17. D.E. Shaw 18. Lucent 19. CERN 20. Cisco 21. Sun (thanks for recommending ganglia for Grid Infrastructure!) 22. HP 23. Microsoft 24. Dell (thanks for the hardware donation!) 25. Cray 26. Boeing 27. Lockheed-Martin 28. GE Global Research 30. Cadence Design Systems 31. nVidia 32. Duke University 33. Bank of America 34. Queensland University of Technology 35. Georgetown University 36. UOL.com 37. PriceGrabber.com 38. Ticket Master 39. Qinetiq 40. Cummins 41. freescale 42. Sandia National Laboratories 43. Rocketcalc 44. Yale 45. Deutsches Elektronen-Synchrotron 46. bp 47. Nortel 48. LexisNexis 49. Landmark 50. SARA 51. Bellsouth 52. University of Pisa, Italy 53. X-ISS 54. Tennesee Tech University 55. Princeton 56. The Moving Picture Company 57. University of Michigan 58. Universite De Sherbrook 58. The Royal Bank of Scotland 59. U.S. Air Force 60. Celgene 61. Groundwork 62. Brookhaven National Laboratory 63. N.E.C. 64. GlobeXplorer 65. John Deere 66. Xilinx 67. Freddie Mac 68. jeteye 69. Tokyo Institute of Technology 70. Purdue University 71. Stanford info: http://ganglia.info/
W razie zaniku zasilania, awarii, zaistnienia init 6 poniższe usługi zostaną automatycznie włączone po reboot'cie
[root@m7-ps3a ~]# /sbin/chkconfig --list |grep '3:włączone' | sed -e 's/ączone/./g' | sort atd 0:wył. 1:wył. 2:wył. 3:wł. 4:wł. 5:wł. 6:wył. crond 0:wył. 1:wył. 2:wł. 3:wł. 4:wł. 5:wł. 6:wył. gmetad 0:wył. 1:wył. 2:wł. 3:wł. 4:wł. 5:wł. 6:wył. gmond 0:wył. 1:wył. 2:wł. 3:wł. 4:wł. 5:wł. 6:wył. haldaemon 0:wył. 1:wył. 2:wył. 3:wł. 4:wł. 5:wł. 6:wył. httpd 0:wył. 1:wył. 2:wył. 3:wł. 4:wył. 5:wył. 6:wył. iptables 0:wył. 1:wył. 2:wł. 3:wł. 4:wł. 5:wł. 6:wył. irqbalance 0:wył. 1:wył. 2:wył. 3:wł. 4:wł. 5:wł. 6:wył. mdmonitor 0:wył. 1:wył. 2:wł. 3:wł. 4:wł. 5:wł. 6:wył. messagebus 0:wył. 1:wył. 2:wł. 3:wł. 4:wł. 5:wł. 6:wył. netfs 0:wył. 1:wył. 2:wył. 3:wł. 4:wł. 5:wł. 6:wył. network 0:wł. 1:wł. 2:wł. 3:wł. 4:wł. 5:wł. 6:wł. nfs 0:wł. 1:wł. 2:wł. 3:wł. 4:wł. 5:wł. 6:wł. nfslock 0:wył. 1:wył. 2:wył. 3:wł. 4:wł. 5:wł. 6:wył. pbs_mom 0:wył. 1:wył. 2:wył. 3:wł. 4:wył. 5:wł. 6:wył. pbs_sched 0:wył. 1:wył. 2:wył. 3:wł. 4:wył. 5:wł. 6:wył. pbs_server 0:wył. 1:wył. 2:wył. 3:wł. 4:wył. 5:wł. 6:wył. pcscd 0:wył. 1:wył. 2:wł. 3:wł. 4:wł. 5:wł. 6:wył. restorecond 0:wył. 1:wył. 2:wł. 3:wł. 4:wł. 5:wł. 6:wył. rpcbind 0:wył. 1:wył. 2:wł. 3:wł. 4:wł. 5:wł. 6:wył. rpcgssd 0:wył. 1:wył. 2:wył. 3:wł. 4:wł. 5:wł. 6:wył. rpcidmapd 0:wył. 1:wył. 2:wył. 3:wł. 4:wł. 5:wł. 6:wył. rsyslog 0:wył. 1:wył. 2:wł. 3:wł. 4:wł. 5:wł. 6:wył. sshd 0:wł. 1:wł. 2:wł. 3:wł. 4:wł. 5:wł. 6:wł. udev-post 0:wył. 1:wł. 2:wł. 3:wł. 4:wł. 5:wł. 6:wył.
Po ponownym uruchomieniu systemu, torque(pbs) oraz ganglia zostaną wznowione.
Aplikacj służy do monitorowania systemu loklanie (wzbogacony top)
Ekran powitalny programu htop, informacje odonośnie aktywnych procesów zajętości pamięci,cpu. Interfejs jest bardzo intuicyjny możemy łatwo wyszukać interesujący nas proces.
F1 -- help F3 -- wyszukaj proces F9 -- zabij proces F5 -- tree F10 -- wyjście z programu
Zainstalwany na węźle główny oraz węźle 7008 , możliwość uruchamiana tylko z poziomu X-Window
polecenie: yum intall torque-gui
Ułatwia użytkowanie systemu torque, możliwość przeglądania aktywnych kolejek oraz zadań przewidzianych do wykonania. Ponadto możemy wstrzymywać zadania usuwać je z kolejki przenosić do innej kolejki, aplikacja łączy się z serwerem głównym (197.197.197.1) i pobiera aktualne informacje na temat stanu zadań i aktywnych kolejek.
Uruchomienie programu następuje po wpisaniu w oknie terminala hasła xpbs .
Wygodny interfejs w szczególności dla użytkowników końcowych nie zagłębiających sie bardzo w system . Generalnie przeglądanie aktywanych zadań i możliwość ich wstrzymania oraz usunięci. Niestety nie ma możliwości dodania nowego zadania z poziomu gui trzeba używać qsub w oknie terminala.
Ciekawym polceniem odnośnie zadania jest tracejob JOB_ID , najwięcej informacji możemy uzyskać wywołując go z maszyny na której postawiony został serwer torque czyli (xxx.yyy.pk.edu.pl) z poziomu użytkownika root. Poniżej przykład dla zadania nr. 70.
[root@m7-ps3a ~]# tracejob 70 /var/torque/mom_logs/20090914: No matching job records located Job: 70.xxx.yyy.pk.edu.pl 09/14/2009 22:53:26 S enqueuing into workqueue, state 1 hop 1 09/14/2009 22:53:26 S Job Queued at request of m7ps3@m7ps301, owner = m7ps3@m7ps301, job name = zadanie_test, queue = workqueue 09/14/2009 22:53:26 A queue=workqueue 09/14/2009 22:54:26 S Job Modified at request of Scheduler@xxx.yyy.pk.edu.pl 09/14/2009 22:54:26 L Job Run 09/14/2009 22:54:26 S Job Run at request of Scheduler@xxx.yyy.pk.edu.pl 09/14/2009 22:54:26 A user=m7ps3 group=m7ps3 jobname=zadanie_test queue=workqueue ctime=1252961606 qtime=1252961606 etime=1252961606 start=1252961666 exec_host=m7ps301/0 Resource_List.cput=24:00:00 Resource_List.neednodes=m7ps301 Resource_List.nodect=1 Resource_List.nodes=m7ps301 Resource_List.walltime=00:01:00 09/14/2009 22:54:32 S Exit_status=0 resources_used.cput=00:00:00 resources_used.mem=0kb resources_used.vmem=0kb resources_used.walltime=00:00:04 09/14/2009 22:54:32 A user=m7ps3 group=m7ps3 jobname=zadanie_test queue=workqueue ctime=1252961606 qtime=1252961606 etime=1252961606 start=1252961666 exec_host=m7ps301/0 Resource_List.cput=24:00:00 Resource_List.neednodes=m7ps301 Resource_List.nodect=1 Resource_List.nodes=m7ps301 Resource_List.walltime=00:01:00 session=3946 end=1252961672 Exit_status=0 resources_used.cput=00:00:00 resources_used.mem=0kb resources_used.vmem=0kb resources_used.walltime=00:00:04 09/14/2009 22:54:36 S dequeuing from workqueue, state COMPLETE
bardzo szczegółowe informacje na temat zadania (czas, kto zlecił, kto wykonał, zasoby), na końcu widnieje bardzo ważna wiadomość mianowicie "state COMPLETE".