Process Resource Manager (PRM)

Il Process Resource Manager (PRM) e' una funzionalita' del sistema operativo HP-UX che consente di gestire in modo sofisticato le risorse di sistema. In questo modo e' possibile ospitare differenti ambienti applicativi su un sistema Unix utilizzando definizioni di livello di servizio specifiche per applicazione. In questo breve documento vengono riportate alcune indicazioni relative al suo utilizzo.

La gestione delle risorse e' uno dei compiti di base del sistema operativo. Unix e' sempre stato un sistema molto efficiente da questo punto di vista con meccanismi di definizione delle priorita' e di schedulazione leggeri.
Un limite tuttavia e' presente. Gli algoritmi di schedulazione sono "equi" e trattano nello stesso modo tutti i processi presenti sul sistema. Quindi se un applicazione occupa il sistema con piu' processi CPU bound (per una qualsiasi ragione valida o meno) questi "combattono" per tale risorsa con tutti gli altri processi presenti sul sistema.
Nel caso di sistemi di grandi dimensioni utilizzati quali Farm (eg. DB Farm, Application Server) sono solitamente presenti differenti applicazioni ed allocare risorse a secondo dell'importanza dell'applicazione diventa un requisito.

Il Process Resource Manager consente di gestire politiche di allocazione di risorse per specifiche per applicazione.
PRM utilizza il concetto di group. Un gruppo di processi PRM e' un insieme di processi a cui il PRM garantisce un livello minimo e massimo di risorse durante i momenti di picco (peak load). Quando le risorse di sistema (eg. CPU) non sono sovraccariche ogni gruppo riceve dal sistema quanto necessario all'esecuzione. Quando una risorsa diventa critica il PRM applica ai gruppi le politiche che sono state definite in configurazione.
Il PRM gestisce diversi tipi di risorse:

Le modalita' sono differenti per ogni tipo di risorsa ed i dettagli... si possono immaginare!
Una nota: la gestione dell'I/O e' possibile solo per dischi controllati da Volume Manager (eg. LVM o VxVM).

L'allocazione di risorse avviene per share ovvero ogni gruppo ha un "peso" che determina la quantita' di risorse lui dedicate.

Configurazione

La prima cosa da fare e' configurare il PRM. Il file di default e' /etc/prmconf. Una tipica configurazione puo' essere:

# PRM configuration file
#
# GROUP:{PRMID | HIER}:SHARES::
# GROUP:PSET:::[CPUS]:[CPU_LIST]
# #!PRM_MEM:{PRMID|GROUP}:SHARES:[CAP]:[SUPPRESS]::[[IMPORT]:[EXPORT]:[LOCKABLE]]
# USER::::INITIAL_GROUP[,ALTERNATE_GROUP[, ...]]
# APPLICATION::::GROUP[,ALTERNATE_NAME[, ...]]
# VOLUME:{PRMID | GROUP}:SHARES::
#
...
# GROUPS
OTHERS:1:10::
APPL:HIER:90::
APPL/0VABS:2:481::
APPL/0VABP:3:5501::
APPL/0CABEP:4:24070::
APPL/0DAB_FIP:5:18761::
APPL/0FABNI:6:528::
APPL/0SAB:7:1931::
APPL/0UABLAB:8:2997::
APPL/0SAB:9:3479::
APPL/0RABBULL:10:2811::
APPL/0RABSAL:11:2802::
...
# USERS
or57920::::APPL/0VABS
arcr200::::APPL/1SABBA
orr2920::::APPL/1SABBA
orf0920::::APPL/1CAB
apdp700::::APPL/0VABP
orp7920::::APPL/0VABP
ardr700::::APPL/0CABEP
orr7817::::APPL/0CABEP
yr52201::::APPL/0CABEP
yr52203::::APPL/0CABEP
...
/usr/cr2/AS/9.0.2/jdk/bin/java::::APPL/1SABBA,.java_wrapper
/usr/cr2/AS/9.0.2/jdk/jre/bin/java::::APPL/1SABBA,.java_wrapper
/usr/cr2/AS/9.0.2/Apache/Apache/bin/httpd::::APPL/1SABBA,httpd
...
Nell'esempio sono stati definiti due gruppi OTHERS ed APPL assegnando tra questi uno share del 10% e 90%. Quest'ultimo e' una gerarchia costituita da altri gruppi specifici con share differenti.
Quindi sono stati definiti i processi assegnati ad ogni gruppo definendoli a livello di utenti o di processi.

Abilitazione

Effettuata la configurazione questa va caricata sul sistema con il comando:

           prmconfig -i [-f configfile ]
Nota: si puo' anche utilizzare l'opzione -k che mantiene la precedente associazione dei processi.

Caricata la configurazione non succede nulla!
In reata' il sistema gia' sta registrando l'utilizzo delle risorse da parte dei processi (vedi sotto) ma non sono stati cambiati i meccanismi di scheduling del sistema. Per far questo e' necessario abilitare il manager con il comando:

           prmconfig -e
Per disabilitare il PRM e tornare allo scheduling standard Unix il comando e':
           prmconfig -d
Infine per controllare lo stato del PRM il comando e':
           prmconfig

Varie ed eventuali

Una volta caricata la configurazione, sia che sia abilitato il manager o no, e' possibile seguire con strumenti standard l'assegnazione dei processi ai vari gruppi. L'opzione da utilizzare e' la P. Quindi con ps -P si ottiene qualcosa come:

     UID        PRMID    PID  PPID  C    STIME TTY       TIME COMMAND
    root    (PRM_SYS)      0     0  2  Apr  1  ?        170:46 swapper
    root    (PRM_SYS)      8     0  0  Apr  1  ?         0:00 supsched
    root    (PRM_SYS)      9     0  0  Apr  1  ?         0:00 strmem
    root    (PRM_SYS)     10     0  0  Apr  1  ?         0:00 strweld
...
 org7920    APPL/0SAB   4378     1  0  Apr  1  ?         3:52 ora_dbw0_adg
 orp7920   APPL/0VABP   4201     1  0  Apr  1  ?         6:06 ora_dbw0_adp
 or57920   APPL/0VABS   3980     1  0  Apr  1  ?         9:47 ora_ckpt_ad5
 or57920   APPL/0VABS   3974     1  0  Apr  1  ?         2:40 ora_pmon_ad5
...
Oppure in glance con P si ha una videata come:
Cpu  Util   S                                   SN          NA |100%  100%  100%
Disk Util   F                      FV             V            | 76%   48%   99%
Mem  Util   S         SU                UB                   B |100%  100%  100%
Swap Util   U      UR   R                                      | 26%   26%   26%
--------------------------------------------------------------------------------
                                 PRM GROUP LIST                     Users=    7
                         Num   Act CPU  CPU  AvgCPU  Logl   Phys    Res    Virt
Idx PRM Group          Procs Procs SHR  Util  Util    IO     IO     Mem     Mem
--------------------------------------------------------------------------------
  1 (PRM_SYS)             162    8  25   3.2   3.4   17.7   50.0 157.1mb 593.0mb
  2 OTHERS                136   13   9   0.0   3.0    1.1   84.4  2.41gb  9.30gb
  3 APPL/0VABS              7    1   0   0.0   0.0    3.3    3.3 162.4mb 236.8mb
  4 APPL/0VABP             13    0   4   0.0   0.0    0.0    0.0 321.7mb  1.23gb
  5 APPL/0CABEP             0    0  21   0.0   0.0    0.0    0.0     0kb     0kb
  6 APPL/0DAB_FIP          35   23  16  61.1  54.6 8670.0    3.3 353.9mb 586.9mb
  7 APPL/0FABNI             7    0   0   0.0   0.0    0.0    0.0 162.6mb 236.6mb
  8 APPL/0SAB              11    1   1   0.0   0.0    3.3    3.3 162.4mb 286.1mb
  9 APPL/0UABLAB            7    0   2   0.0   0.0    0.0    0.0 189.0mb 249.2mb
 10 APPL/0SAB              10    0   3   0.0   0.0    0.0    0.0 119.5mb 193.7mb
 11 APPL/0RABBULL           0    0   2   0.0   0.0    0.0    0.0     0kb     0kb
 12 APPL/0RABSAL            7    1   2   0.0   0.0    3.3    3.3 192.4mb 520.9mb
 13 APPL/0PAB               7    0   0   0.0   0.0    3.3    3.3 142.8mb 367.9mb
 14 APPL/0GABMIC           71   38   4  15.3  11.5 3713.3   48.8 284.8mb 810.8mb
 15 APPL/1SABBA             0    0   0   0.0   0.0    0.0    0.0     0kb     0kb
 16 APPL/1TABSP            10    0   0   0.0   0.2    0.0    0.0 133.8mb  1.11gb
 17 APPL/1CABT             11    2   0   0.0   0.0    0.0    0.0 141.2mb 755.1mb
 18 APPL/1DAB               7    0   4   0.0   0.0    0.0    0.0 497.9mb 671.0mb
 19 APPL/1SABING            8    1   4   0.0   0.1    0.0    0.0 159.7mb 256.0mb
 20 APPL/1SAB              28   21   6  22.5  27.4 4242.2    0.0 215.2mb 909.8mb
 21 APPL/1QABLPRO           9    0   0   0.0   0.0    3.3    3.3 229.6mb 869.5mb
Nell'esempio sono stati generati un centinaio di processi in loop caricando la CPU al 100% ed e' stato abilitato il PRM. L'allocazione delle risorse rispetta la proporzioni configurate. Infatti l'applicazione "APPL/0GABMIC" riceve il 15% di CPU anche se ha allocato piu' del 50% dei processi in loop.

Sono disponibili una serie di comandi per l'analisi dei dati del PRM. Simpatico e', per esempio, il prmanalyze che utilizza i dati del process accounting. Simpatica e' anche l'integrazione con i PSET...
E' tutto molto semplice e... per chi non e' abituato a lavorare su linea di comando (!?) e' disponibile anche un'interfaccia grafica X: xprm.

Piu' sofisticato e complesso di PRM e' il WorkLoad Manager (WLM) che permette di definire i Service Level Objectives (SLO) e modifica dinamicamente i sistemi per ottenerne il raggiungimento. WLM controlla il carico di uno o piu' sistemi, permette di controllare il carico su basi dati (Oracle) ed Application Server (BEA WebLogic) genera in automatico le configurazioni del PRM, abilita iCOD, opera su vPAR ed NPAR, ... ma questa e' un'altra storia!


Testo: Process Resource Manager (PRM) su HP-UX
Data: 31 Febbraio 2004
Versione: 1.0.1 - 32 Febbraio 2004
Autore: mail@meo.bogliolo.name