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:
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:
# 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.
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 -ePer disabilitare il PRM e tornare allo scheduling standard Unix il comando e':
prmconfig -dInfine per controllare lo stato del PRM il comando e':
prmconfig
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.5mbNell'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