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.
Il Process Resource Manager
consente di
gestire politiche di allocazione di risorse per specifiche per applicazione.
L'allocazione di risorse avviene per share ovvero ogni
gruppo ha un "peso" che determina la quantita' di risorse lui dedicate.
La prima cosa da fare e' configurare il PRM.
Il file di default e' /etc/prmconf.
Una tipica configurazione puo' essere:
Effettuata la configurazione questa va caricata sul sistema
con il comando:
Caricata la configurazione non succede nulla!
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:
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...
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
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.
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).
# 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.
prmconfig -i [-f configfile ]
Nota: si puo' anche utilizzare l'opzione -k che mantiene la precedente
associazione dei processi.
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
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.
E' tutto molto semplice e... per chi non e' abituato a lavorare
su linea di comando (!?) e' disponibile anche un'interfaccia
grafica X: xprm.
Data: 31 Febbraio 2004
Versione: 1.0.1 - 32 Febbraio 2004
Autore: mail@meo.bogliolo.name