DIVIDE ET IMPERA !

Il partizionamento era gia' ben conosciuto dagli antichi romani che lo utilizzarono per gestire un impero enorme. Piu' tardi gli inglesi sfruttarono lo stesso principio nell'amministrazione delle proprie colonie.
La tecnica del partizionamento e' stata applicata al sistema operativo Unix solo successivamente...

In questo breve documento vengono velocemente trattate le problematiche del partizionamento e la loro applicazioni sui sistemi operativi Unix piu' significativi nel corso del tempo: IBM AIX, HP HP-UX, Sun Solaris, Linux, ... ed alcuni cenni alle evoluzioni future. Il taglio del documento e' volutamente semplice, introduttivo e pratico, per i dettagli si rimanda all'ampia documentazione disponibile.
Un documento dallo stesso titolo, ma relativo alle problematiche di partizionamento sulle basi dati, si trova su questo link.

Partitioning

La forte crescita della capacita' elaborativa dei processori consente di utilizzare un unico server fisico per sopportare tutto il carico che in precedenza era necessario dividere su piu' server. Tuttavia la separazione dei sistemi resta una necessita' fondamentale per diverse ragioni come manutenzione, aggiornamento di release, sicurezza, gestione di un differente carico elaborativo, ... Nasce quindi la necessita' di partizionare il sistema ospite in piu' parti piu' facilmente gestibili ed indirizzate ad un utilizzo specifico.
Le tecniche disponibili sono molteplici e dipendono dai tecnicismi adottati dai singoli produttori. Tuttavia i concetti di base sono sempre gli stessi!
Il partizionamento puo' essere effettuato principalmente in due modi:

Il partizionamento fisico e' meno flessibile poiche' ha vincoli ben precisi (eg. una CPU board, un drawer di I/O), ma tipicamente presenta una maggior separazione delle partizioni e non introduce un degrado prestazionale. Il partizionamento logico puo' introdurre qualche degrado, soprattutto se non configurato correttamente, ma offre la massima flessibilita'.

I primi esempi di partizionamento non sono relativi a sistemi Unix ma a Mainframe IBM (eg. S/370 nel 1972). Ma e' con i sistemi operativi Unix che si sono avute le maggiori e piu' diverse evoluzioni e poi... li conosco meglio: quindi nel seguito parleremo solo di questo!
Ma perche' costruire un Mainframe Unix? Unix e' un ottimo sistema operativo. E' affidabile, sicuro, efficiente e poco costoso... naturalmente in relazione agli altri OS. Offre un'ambiente molto adatto allo sviluppo delle applicazioni, garantisce una buona stabilita' in produzione ed puo' essere facilmente integrato e configurato in architetture complesse. Questa e' la ragione della sua diffusione. Disporre di funzioni sofisticate rivolte alla: alta affidabilita', scalabilita', manutenzione e consolidamento sistemi su ambienti flessibili e potenti come quelli Unix consente notevoli risparmi economici. Quindi la risposta alla domanda "Perche' un mainframe Unix?" e' "Perche' conviene!"

Di teoria abbiamo detto fin troppo, ora vediamo un poco di pratica su come e' implementato il partizionamento sui sistemi Unix!

HP - HP-UX

HP Superodome 2 I sistemi HP, che utilizzano i processori RISC HPPA (HP Precision Architecture) ed Itanium, hanno un'ottima affidabilita' e sono molto utilizzati nelle soluzioni Enterprise. Sui sistemi HP, con il sistema ospite HP-UX, supportano sia il partizionamento fisico (NPAR) che quello logico (VPAR).

Sui modelli di fascia piu' alta (eg. i Superdome introdotti nel 2000) e' disponibile il Physical Partitioning. Con il Physical Partitioning e' possibile creare piu' macchine sullo stesso HW utilizzando la tecnica dei crossbar switch. Ogni "macchina" creata prende il nome di nPar: partizione fisica. Con il comando parstatus si ottiene il dettaglio della configurazione delle celle, l'HW presente e le connessioni abilitate.

La maggioranza dei modelli di macchine HP consentono di partizionare in modo logico le risorse ed installare sistemi differenti sullo stesso HW. Con il Virtual Partitioning possono essere create piu' macchine virtuali (vPar) sullo stesso HW con risorse di CPU, Memoria, I/O, ... dedicate a ciascun sistema. Con il comando vparstatus -v si ottiene il dettaglio della configurazione delle partizioni virtuali, le risorse associate a ciascun sistema, ...

Ma vediamo qualche esempio...
Iniziamo con alcune immagini della configurazione di due Superdome su cui sono ricavate alcune partizioni fisiche (nPar) e queste a loro volta sono partizionate logicamente (vPar). Il primo Superdome e' composto da due cabinet cui si aggiungono altri 3 rack per gli I/O drawer, i dischi di sistema, i lettori CD, la console, ... insomma 5 rack in totale.

HP-UX Superdome partitioning - Sample global picture HP-UX Superdome partitioning - Clustering
La parte evidenziata in rosso nella prima figura e' quella relativa ad una nPar cui e' sono state assegnate due CPU/Mem board (la 4 e la 6 del secondo cabinet) e due I/O drawer sempre nel secondo cabinet. Alla partizione fisica sono assegnate 8 CPU (di cui 2 on demand) e 16GB di RAM. Questa partizione fisica e' a sua volta suddivisa in due vPar (in basso a sinistra nella seconda figura) cui possono essere associate dinamicamente le risorse senza particolari vincoli fisici. In questo caso le due partizioni utilizzano 3 CPU e 8GB RAM la prima e 2 CPU e 4GB RAM la seconda. Le periferiche di I/O della nPar vengono singolarmente assegnate alle vPar. Su ogni partizione logica e' installata una versione del sistema operativo HP-UX. La seconda figura mostra anche che alcuni sistemi sono configurati in un failover cluster.

Il partizionamento e' solo il primo degli elementi di una configurazione di sistemi Enterprise! Tipicamente sono presenti complesse configurazione per lo storage, per il networking, per l'HA (High Availability) come cluster, load balancer, ...

HP-UX Superdome partitioning - Boot disks and SAN HP-UX Superdome partitioning - Networking sample

I due Superdome sono posti in due building distinti ed utilizzano due SAN distinte connesse in fibra. Le SAN sono connesse tra loro in fibra, utilizzano la replicazione a livello di Volume Manager ed alcuni sistemi sono in configurazione di failover cluster. I sistemi sono connessi tra loro in rete su VLAN differenti: per la trasmissione dei dati, per il management, per i backup, per le connessioni di Heartbeat dei cluster. Si tratta di configurazioni molto comuni per ambienti di tipo Enterprise...

Ora vediamo in dettaglio un esempio semplificato... prediamo un solo Superdome con un solo cabinet e tre partizioni. Ecco i comandi per verificare la configurazione:

# parstatus

[Complex]Complex Name : SuperDomeComplexComplex CapacityCompute Cabinet (8 cell capable) : 1Active MP Location : cabinet 0Model : 9000/800/SD32000Original Serial Number : USR6969XYZCurrent Product Order Number : 69695BOriginal Manufacturer : HPComplex Profile Revision : 1.0The total number of partitions present : 3
[Cabinet]                 Cabinet   I/O Bulk  Power      Backplane                 Blowers   Fans      Supplies   Power Boards                 OK/       OK/       OK/        OK/Cab              Failed/   Failed/   Failed/    Failed/Num Cabinet Type N Status  N Status  N Status   N Status     MP=== ============ ========= ========= ========== ============ ======0   8 cell slot  4/0/N+    5/0/NA    5/0/N+     3/0/N+       Active
[Cell]                        CPU     Memory                               Use                        OK/     (GB)                         Core    OnHardware   Actual       Deconf/ OK/                          Cell    Next ParLocation   Usage        Max     Deconf   Connected To        Capable Boot Num========== ============ ======= ======== =================== ======= ==== ===cab0,cell0 Active Core  4/0/4   4/0      cab0,bay0,chassis1  yes     yes  0cab0,cell1 Active Base  2/0/4   2/0      -                   no      yes  2cab0,cell2 Inactive     4/0/4   2/0      cab0,bay1,chassis3  yes     yes  1cab0,cell3 Inactive     2/0/4   2/0      -                   no      -    -cab0,cell4 Active Core  2/0/4   2/0      cab0,bay0,chassis3  yes     yes  2cab0,cell5 Powered off  0/0/4   ?        ?                   ?       no   0cab0,cell6 Active Core  2/0/4   2/0      cab0,bay1,chassis1  yes     yes  1cab0,cell7 Powering on  0/0/4   ?        ?                   ?       -    -
[Chassis]                                 Core Connected  ParHardware Location   Usage        IO   To         Num=================== ============ ==== ========== ===cab0,bay0,chassis0  Absent       -    -          -cab0,bay0,chassis1  Active       yes  cab0,cell0 0cab0,bay0,chassis2  Absent       -    -          -cab0,bay0,chassis3  Active       yes  cab0,cell4 2cab0,bay1,chassis0  Absent       -    -          -cab0,bay1,chassis1  Active       yes  cab0,cell6 1cab0,bay1,chassis2  Absent       -    -          -cab0,bay1,chassis3  Inactive     yes  cab0,cell2 1
[Partition]Par              # of  # of I/ONum Status       Cells Chassis  Core cell  Partition Name (first 30 chars)=== ============ ===== ======== ========== ===============================0   Active       2     1        cab0,cell0 svunh691   Active       3     2        cab0,cell6 svunh702   Active       2     1        cab0,cell4 svunh71
[Partition - Multithread]Par Num Multithreading Enabled======= ======================0        no1        no2        no
Semplice vero?
Il comando riporta la configurazione del sistema e di ogni componente. Leggendo i dati e' semplice vedere che e' presente un cabinet con 8 CPU board (cell), due bay che ospitano ciascuno 4 chassis con le schede di I/O. Le celle con la CPU e la RAM e gli chassis con le schede di I/O sono assegnate alle tre partizioni (nPar) definite. Alcuni componenti sono spenti e questo non provoca alcun problema poiche' le partizioni sono isolate anche elettricamente tra loro.
Ora vediamo come la partizione fisica svunh69 viene partizionata in due differenti sistemi assegnando a ciascuno risorse specifiche:
# vparstatus

[Virtual Partition]
                                                                          Boot
Virtual Partition Name         State Attributes Kernel Path               Opts
============================== ===== ========== ========================= =====
svunh69                        Up    Dyn,Auto   /stand/vmunix
svunh69t                       Up    Dyn,Auto   /stand/vmunix

[Virtual Partition Resource Summary]
                                            CPU    Num        Memory (MB)
                                   CPU     Bound/   IO   # Ranges/
Virtual Partition Name          Min/Max  Unbound  devs  Total MB    Total MB
==============================  ================  ====  ====================
svunh69                           2/  8    2   0     2    0/  0         2048
svunh69t                          1/  8    2   1     2    0/  0         1024

Il partizionamento logico con HP-UX consente di associare le risorse senza alcun vincolo HW ed in modo dinamico (anche molto dinamico con il WLM ed il PRM). Sono presenti ed attive due vPar a cui sono state assegnate le riscorse di CPU, RAM ed i dispositivi di I/O. In questo momento la prima partizione ha 2 CPU e 2GB di RAM, ma il numero di CPU puo' cambiare dinamicamente fino ad otto (fino a sette se non si spegne la seconda partizione).

Naturalmente l'evoluzione e' continua, le funzionalita' cambiano e cambiano gli output dei comandi a seconda delle versioni... I piu' recenti modelli, gli Integrity Superdome 2 servers (2010), introducono importanti nuove funzionalita' quali:

I Superdome 2 utilizzano l'architettura SX3000 con i processori Intel Itanium 9300/9500 ed hardware basato su Blade (fino ad un massimo 16 blade).
Dal punto di vista del software i prodotti piu' recenti sono HP Integrity VM, che e' un completo prodotto di virtualizzazione, ed HP-UX Containers.

Riassumento, con un'opportuna configurazione delle partizioni fisiche e logiche, e' possibile sfruttare in modo ottimale e flessibile i potenti sistemi di fascia Enterprise HP.

IBM - AIX

IBM P780 La storia dei sistemi partizionabili di IBM e' tanto lunga che, nonostante la mia veneranda eta', i primi modelli non ho avuto modo di configurarli. Il partizionamento logico viene introdotto su AIX, il sistema operativo Unix di IBM, dalla versione 5.1 (2001). Il Power Hypervisor (PHYP) gestisce l'HW ed indirizza le richieste e le risposte degli SCSI alle LPAR (virtual partition) definite su cui e' ospitato il sistema operativo AIX.

La serie di modelli IBM System P Power, basati sul processore RISC POWER (la cui versione piu' recente e' POWER7) ha poi visto l'introduzione del Micro_partitioning. Con il micropartitioning possono essere create fino a 10 LPAR sullo stesso processore fisico. I cicli del processore vengono suddivisi tra le partizioni definite dall'Hypervisor. Con il Dynamic Logical Partitioning (DLPAR disponibile con AIX 5.2 nel 2002 e solo di recente, nel 2009, con Linux), le assegnazioni alle LPAR possono essere modificate tra il minimo e massimo definito senza necessita' di riavviare la partizione o il sistema operativo.
In pratica le partizioni non vedono un processore fisico ma uno o piu' processori logici e questi possono essere configurati in modo dinamico dall'amministratore. Analogamente avviene per l'I/O che, nelle versioni piu' recenti di AIX, e' completamente virtualizzato.

Ma vediamo un esempio! Ecco come appare una partizione cui sono state assegnate 8 CPU logiche con un entitlement a 2 CPU (uncapped quindi non limitate), 12 GB di RAM, ... Il primo comando riporta i dati dell'utilizzo corrente delle CPU mentre il secondo riporta i dettagli della configurazione.

# lparstat

System configuration: type=Shared mode=Uncapped smt=On lcpu=8 mem=12288 psize=32 ent=2.00 

%user  %sys  %wait  %idle physc %entc  lbusy      vcsw   phint
----- ----- ------ ------ ----- ----- ------     -----   -----
 64.3  30.3    0.5    4.9  0.02   1.0    3.1 464846423 2953618 

# lparstat -i
Node Name                                  : xenia01sd4
Partition Name                             : N6P_P09_xenia01sd4_new
Partition Number                           : 9
Type                                       : Shared-SMT
Mode                                       : Uncapped
Entitled Capacity                          : 2.00
Partition Group-ID                         : 32777
Shared Pool ID                             : 0
Online Virtual CPUs                        : 4
Maximum Virtual CPUs                       : 8
Minimum Virtual CPUs                       : 2
Online Memory                              : 12288 MB
Maximum Memory                             : 24576 MB
Minimum Memory                             : 6144 MB
Variable Capacity Weight                   : 192
Minimum Capacity                           : 1.00
Maximum Capacity                           : 4.00
Capacity Increment                         : 0.01
Maximum Physical CPUs in system            : 64
Active Physical CPUs in system             : 32
Active CPUs in Pool                        : 32
Shared Physical CPUs in system             : 32
Maximum Capacity of Pool                   : 3200
Entitled Capacity of Pool                  : 1280
Unallocated Capacity                       : 0.00
Physical CPU Percentage                    : 50.00%
Unallocated Weight                         : 0
AIX 7 WPAR

L'evoluzione delle funzionalita' delle LPAR nel corso tempo e' stata notevole ed ha avuto un legame molto forte con l'evoluzione dei processori RISC POWER.
Fondamentale e' stata l'introduzione del I/O virtuale. Molto interessante e' anche la possibilita' di creare WPARs (Workload Partitions), introdotta con AIX 6 e con nuove funzionalita' in AIX 7. Si tratta di un'implementazione completamente software ed e' quindi molto piu' vicina ad una completa virtualizzazione di ambienti che ad un semplice partizionamento del sistema.

I modelli IBM piu' recenti (eg P780) sono basati sul processore POWER7 (8 core, 4 SMT, 4.25 Ghz) e raggiugono elevatissimi livelli di scalabilita' verticale. Con la piu' recente versione di AIX (7.1 3Q 2010) e' possibile: importare e quindi consolidare partizioni AIX 5.2, sfruttare al meglio il VIOS, gestire i profili di sistema, utilizzare le funzionalita' di clustering integrate nel sistema operativo, ...

Una nota non tecnica: i sistemi partizionabili IBM brevemente descritti in questo capitolo sono stati utilizzati in alcune famose sfide contro l'uomo come Deep Blue, Watson e perche' no... anche HAL!

Sun/Oracle - Solaris

Sun/Oracle Exadata 2 La Sun Microsystems nel tempo ho introdotto molte importanti innovazioni che sono poi diventate comuni per tutti i sistemi operativi e gli ambienti (basta pensare ad esempi come NFS, YP, Java, ...).

I sistemi SUN Enterprise supportano da molto tempo il partizionamento fisico sui modelli di fascia piu' alta: l'Enterprise 10000, il primo di questa serie, e' stato commercializzato dal 2000. I modelli successivi, che introducono via via nuove funzionalita', sono il Sun Fire 15K, Sun Fire E25K, Sun SPARC Enterprise M9000, ... fino ai piu' recenti modelli marchiati Oracle e chiamati EXA*.

Nella versione 10 di Solaris (2005) sono state introdotte le Zone (Solaris Containers) che consentono il partizionamento logico del sistema in ambienti indipendenti ma facilmente gestibili.
I Logical Domains (LDoms o LDOM) permettono il partizionamento e la virtualizzazione sui processori SPARC e sono disponibili dal 2007. Dopo l'acquisizione da parte di Oracle tale tecnologia e' stata rinominata in Oracle VM Server for SPARC. E' notizia recente (1Q 2013) la possibilita' di gestire con Oracle VM 3.2 (OVM) sia Server x86 che Server SPARC.
Insomma non sara' facile riuscire ad essere brevi in questo capitolo... senza tralasciare nulla!

Solaris virtualization

Cominciamo con il partizionamento fisico!
E' facile... semplificando solo un po'! Un sistema di fascia enterprise puo' essere suddiviso in domini (partizioni fisiche) separati tra loro, cui vengono assegnati fisicamente CPU, memoria e periferiche di I/O. I domini sono completamente separati tra loro, anche elettricamente, e quindi possono essere gestiti in modo indipendente. La gestione del sistema viene effettuata su un HW separato chiamato SPP (System Service Processor), che e' ovviamente uno sistema SPARC con Solaris. Dall'SPP e' possibile effettuare tutte le attivita' di configurazione (eg. aggungere risorse) e di gestione (eg. effettuare un reboot).
Il partizionamento fisico dei sistemi di fascia Enterprise di SUN ha avuto una notevole diffusione e sono molti i sistemi 10.000, 15K, ... installati su clienti di grandi dimensioni.

Solaris Zones - Diagramma di stato Ora il partizionamento logico o almeno quello che gli assomiglia di piu'...
Nella versione 10 di Solaris sono state introdotte le Zone che consentono il partizionamento logico del sistema in ambienti indipendenti ma facilmente gestibili.
La zona iniziale con ID=0 e' detta global e consente di controllare tutte le risorse, i processi, ... in modo completo. Tipicamente non si configurano servizi in tale zona, ma non e' un vincolo. Le altre zone sono tra loro completamente indipendenti e trasparenti. Su ogni zona viene configurato un sistema operativo distinto. Per chi conosce il Jails o anche solo il comando chroot tutto dovrebbe essere semplice da capire!
In pratica e' come se avessimo un solo sistema operativo, quello della zona global. Da tale zona sono visibili tutte le risorse, tutti i processi, tutti i file system, ... Le altre zone "pensano" di essere un sistema operativo indipendente, ma in realta' stanno operando all'interno della zona global che semplicemente non vedono. Vi sono pregi e difetti di tale modalita' di "partizionamento logico" o meglio di virtualizzazione del sistema... i vantaggi sono il limitato overhead (sia come spazio disco che come memoria occupata) e la visione complessiva che il sistemista ha dalla zona global.
I comandi principali sono: zonecfg zoneadm zlogin, l'opzione aggiuntiva per estendere i normali comandi di sistema e' la -Z (eg. ps df). Gli stati delle zone sono riportate nel diagramma a lato.
Una funzionalita' molto interessante e' il BRAND delle zone. Con il branding, anche se il kernel di tutte le zone e' lo stesso, possono venire effettuate call translation. Vengono cosi' simulati sistemi operativi ospiti differenti. E' in questo modo possibile consolidare su un recente sistema con Solaris 10 zone in cui i sistemi ospite sono Solaris 9 o Solaris 8.

Ma vediamo un esempio! Ecco come appare la configurazione di una serie di zone, che ospitano vecchi ambienti Solaris 8, su un recente sistema con Solaris 10 (il report e' ottenuto con ux2html ed il relativo Plug-in per le Solaris Zones):

  

Solaris Zones

Plug-in version: 1.0.0

Configured Zones

ID NAME STATUS PATH BRAND IP 0 global running / native shared 1 xenia01-zone running /zones/xenia1 solaris8 excl 4 xenia02-zone running /zones/xenia2 solaris8 excl 5 collectlog1-zone running /zones/collectlog1 native excl - domint-zone installed /zones/domint solaris8 excl

Zones Details

Zone Name: global create -b set autoboot=false set ip-type=shared Zone Name: xenia01-zone create -b set zonepath=/zones/domcom set brand=solaris8 set autoboot=false set ip-type=exclusive add fs set dir=/oracle8 set special=domxen-zp/oracle8 set type=zfs end add fs ... add net set physical=nxge12001 end add rctl set name=zone.cpu-shares add value (priv=privileged,limit=50,action=none) end add rctl set name=zone.max-swap add value (priv=privileged,limit=4294967296,action=deny) end add capped-memory set physical=4G end ...
LDom - Cluster

Infine i logical domains...
Sono conosciuti come LDoms, LDOM e, dopo l'acquisizione di Sun da parte di Oracle, anche come Oracle VM Server for SPARC. I Logical Domains sfruttano in modo specifico il CMT (Chip Multi Threading) dei processori UltraSPARC T1, T2 e T3 [NdE T4, T5, M7 (2015/10), M8 (2017/09)]. Ogni processore contiene piu' core (fino a 16) [NdE 32 su M7 ed M8] e ciascuno di questi ospita piu' hardware thread (fino a 8) che agiscono come CPU virtuali assegnate ai domini. L'unita' minima assegnabile alla vCPU e' il thread e la gestione e' molto dinamica poiche' le risorse possono essere assegnate ed i domini migrati senza richiedere riavvii.
Vi sono 4 tipi di domini, con compiti facilmente riconoscibili dal nome:

I sistemi operativi ospite e le applicazioni ovviamente girano sui Guest domains. Sono possibili diverse configurazioni tra cui quella in cluster.
Con gli LDOM la granularita' nell'assegnazione delle risorse e' molto fine e, a differenza delle LPAR, non utilizza un time slice [NdA forse meno flessibilita' ma sicuramente minore overehead]. Come sistemi operativi ospite, oltre a Solaris, sono supportati Ubuntu e OpenBSD.

ODA - Oracle Database Appliance Sun/Oracle Exadata 2 Anche per i sistemi SUN l'evoluzione e' continua ed innarrestabile.

Dopo l'acquisizione da parte di Oracle sono state prodotte nuove tipologie di sistemi dedicate ad un utilizzo verticale come Database Machine e per ospitare Application Servers e Cloud: le serie Exadata ed Exalogic. Sulla piattaforma EXADATA vengono utilizzate tecnologie innovative che consentono significativi vantaggi prestazionali sfruttando l'intelligenza dei dispositivi di I/O (Cell Offload).

Ancora piu' recente e' l'ODA (Oracle Database Appliance) il fratellino minore dell'Exadata. Si tratta di un sistema di modeste dimensioni (4U su un rack standard) ma ingegnerizzato per le massime prestazioni e l'affidabilita'. Per altro e' sfruttabile in modo molto flessibile grazie all' introduzione della virtualizzazione (con OVM basato su Xen).

Caratteristica fondamentale dei sistemi Exadata ed ODA e' la completa ingegnerizzazione di tutte le componenti: dall'HW al sistema operativo, dal software di base all'RDBMS. Questo garantisce prestazioni ottimali e tempi di installazione/configurazione notevolmente ridotti.

Linux

Parlare di partizionamento con Linux e' molto riduttivo poiche' in realta' si tratta di utilizzare il sistema operativo per qualcosa di differente: la virtualizzazione. Linux e' infatti utilizzato sia come hypervisor che come guest di ambienti di virtualizzazione molto completi. L'architettura di Linux e' molto adatta alla virtualizzazione poiche' utilizza un kernel relativamente semplice ed una gestione dell'I/O mediante device driver indipendenti. Linux utilizza un kernel monolithic, il che presenta vantaggi e svantaggi, ma certamente consente diverse implementazioni.
Infatti le scelte possibili sono tante! Per citare i soli ambienti con cui ho incontrato: UML, Xen, KVM, VMware Server, VMware ESX, VirtualBox, ... ed alcune loro evoluzioni commerciali (Oracle VM, Citrix XenServer, Sun xVM). E sono solo alcuni degli ambienti disponibili: Linux Virtualization Technology Comparison...

Xen Architecture Quindi che dire? Forse si puo' iniziare dal processore piu' utilizzato (x86 base) che pero'... non supporta la virtualizzazione! Ed allora come si puo' partizionare/virtualizzare? Gli ambienti di virtualizzazione pura (eg. VMware e QEMU) risolvono "sostituendo" le istruzioni privilegiate con richiami a routine di gestione.

Naturalmente questo rende lenta la virtualizzazione, soprattutto per la parte di sistema operativo. La soluzione e' la paravirtualizzazione ovvero utilizzare, per la parte di gestione del sistema, moduli sviluppati apposta per essere efficienti quando virtualizzati. In questo modo il nostro Linux sara' efficiente, quando utilizzato come sistema operativo ospite, anche su processori che non supportano la virtualizzazione.

Oracle VM architecture E' da un decennio che Linux supporta la paravirtualizzazione su Xen con ottime prestazioni. Xen nasce come progetto dell'universita' di Cambridge (2003). L'architettura Xen e' relativamente semplice...
Xen utilizza un hypervisor che gira con i massimi privilegi. Sopra questo livello vengono eseguiti i vari "domini". Il primo tra questi e' chiamato dom0 che viene direttamente attivato dall'Hypervisor ed e' quello da cui si gestiscono tipicamente gli altri domini utente domU.
L'Hypervisor di Xen si occupa dello scheduling mentre il dom0 fornisce i device driver utilizzati dai guest. dom0 e' un kernel linux modificato ed i vari domU non agiscono direttamente sull'HW ma passano attraverso dom0 per ogni attivita'. Il processo Xend e' l'interfaccia principale dei domU verso l'Hypervisor. Si tratta di un demone (scritto in python) che, attraverso la libreria Libxenctrl, colloquia con il driver privcmd di dom0.
L'evoluzione di Xen e' stata notevole e sono molteplici i prodotti commerciali che la utilizzano come base (eg. Citrix XenServer, OracleVM).

Nella figura a sinistra e' presentata l'architettura di Oracle VM (OVM). Si tratta chiaramente di un ambiente con Hypervisor Xen. La gestione avviene con l'interfaccia grafica web dell'Oracle VM Manager che comunica i comandi all'Agente ospitato sul dominio di management dom0 presente su tutti i Server. Le virtual machine sono ospitate sui vari domini domU.
Naturalmente nelle versioni commerciali di Xen viene rivolta una forte attenzione alle interfacce di amministrazione ed all'integrazione dei vari componenti presentando cosi' all'amministratore un ambiente di semplice controllo e gestione.

KVM Architecture Dalla versione 2.6.20 nella distribuzione ufficiale del kernel Linux e' presente il KVM (Kernel based Virtual Machine). Il KVM supporta la virtualizzazione in modo nativo per i processori x86 con estensioni Intel VT-x o AMD-V. KVM fornisce ottime prestazioni molto vicine a quelle del bare-metal.
L'architettura KVM e'... ancora piu' semplice!
Poiche' il KVM e' un componente del kernel lo scheduling viene svolto direttamente dal sistema operativo Linux. Ogni sistema ospite gira come un "normale" processo utente. Nello stesso modo i device driver per la gestione dell'I/O sono gli stessi del sistema operativo.
Anche per il KVM l'evoluzione e' costante ed il supporto diretto di Red Hat e' molto significativo.

Se invece si vogliono utilizzare diverse istanze dello stesso sistema operativo la tecnologia piu' adatta e' quella dei containers. FreeBSD Jails e' stato il percursore cui si sono ispirati molti prodotti successivi sia Open Source che proprietary (eg. Solaris Zones).

VMware ESX architecture Per ultimo... il vendor piu' importante! VMware e' la prima compagnia che ha sviluppato prodotti di virtualizzazione con una stabilita' e diffusioni tali da divenire leader di mercato in diversi segmenti. Le versioni VMware "ospiti" su windows su piattaforma Intel sono molto diffuse e riconosciute per la loro efficienza e stabilita'.
La versione ESX e' il punto di riferimento sugli hypervisor per i server. Anche se profondamente modificato la base dell'hypervisor e' un sistema Linux! I comandi di base che si possono dare da interfaccia a terminale (Service Console) sono quindi i classici comandi Unix. Anche se l'interfaccia di gestione piu' frequentemente utilizzata e' una GUI molto evoluta e con molteplici funzionalita' anche in ottica Cloud. In realta' l'hypervisor di VMware si e' molto evoluto rispetto alle versioni originali Linux ma... era comunque importante parlarne!

Ma non abbiamo ancora visto alcun esempio... ecco Xen:

# xm list
Name                                ID   Mem  VCPUs    State   Time(s)
Domain-0                            0   2048     8     r-----  35646.8
xenia_ap0                           4    512     2     -b----    342.6
xenia_ap1                           5    512     2     -b----    496.4
xenia_db0                           3   1024     2     r-----   2424.0xenia_db0

# xm info
host                   : XeniaXen
release                : 2.6.29-xen-r4
version                : #2 SMP Wed Sep 16 11:10:45 EDT 2009
machine                : x86_64
nr_cpus                : 16
nr_nodes               : 1
cores_per_socket       : 4
threads_per_core       : 2
cpu_mhz                : 2933
hw_caps                : bfebfbff:28100800:00000000:00000340:009ce3bd:00000000:00000001:00000000
virt_caps              : hvm
total_memory           : 8186
free_memory            : 127
...
KVM quasi non ha comandi, quindi utilizziamo Virsh, l'interfaccia command-line di libvirt (API Open Source che gestisce i principali hypervisor):
# virsh nodeinfo
CPU model                    x86_64
CPU (s)                      16
CPU frequency                2933 Mhz
CPU socket(s)                2      
Core(s) per socket           4
Threads per core:            2
Numa cell(s)                 1
Memory size:                 8386560 kb

# virsh list --all
 Id Name                 State
----------------------------------
 69 Xenia_db0            paused
 72 Xenia_ap0            inactive
 83 Xenia_ap1            crashed

# virsh dominfo Xenia_db0
id:             69
name:           Xenia_db0
uuid:           5a7c09a7-ef3f-b781-86e4-388f2862f011
os type:      	linux
state:          blocked
cpu(s):         1
cpu time:     	11.0s
max memory:     1024000 kb
used memory:    1024000 kb
In entrambe gli esempi sono state configurate tre macchine virtuali ed associate le relative risorse di CPU e memoria. La gestione avviene spesso con strumenti grafici come il virt-manager o integrata in piu' complessi ambienti per la gestione di Cloud.

Evoluzioni future

Questo documento ha cercato di descrivere il partizionamento di sistemi Unix. I sistemi trattati sono sistemi Unix di classe Enterprise per potenza, funzionalita', flessibilita', disponibilita', ... Come descritto al termine di ogni capitolo tutti i produttori HW hanno fatto evolvere la propria soluzione e le possibilita' attuali sono notevoli.

L'evoluzione dei processori e la loro sempre crescente potenza portano queste possibilita' anche a sistemi di fascia piu' bassa.
Sarebbe quindi importante parlare della virtualizzazione in modo piu' completo... Non tralasciando i prodotti leader del mercato come le soluzioni hosted VMware Workstation (1999), GSX Server (2001) e quella bare-metal ESX Server (2001).

Una fortissima evoluzione stanno avendo gli ambienti container e chi ne rende disponibili i contenuti come Docker o ne consente la gestione come Kubernetes. Sarebbe importante parlarne... l'idea di base e' semplice: anziche' ospitare le applicazioni su una VM che ospita un intero sistema operativo si virtualizzano le chiamate a sistema e si sfrutta il sistema operativo del sistema ospite. Questo consente di allocare ambienti con meno risorse ed in tempi molto piu' brevi. Non e' un'idea nuova (ricordate jails e chroot di cui abbiamo parlato prima?), ma piuttosto un'evoluzione di tecniche gia' note che sta avendo molto successo. Ma non c'e' spazio/tempo per parlarne!

La scalabilita' puo' essere realizzata in modo orizzontale anziche' verticale.
Sarebbe importante parlare del Grid... Sarebbe importante parlare del Cloud Computing...

Sarebbe importante... ma occorre tempo e spazio! E purtroppo ne ho relativamente poco: quindi per il momento lascio questi spunti aperti per il futuro [NdA Docker].

Conclusioni

Il partizionamento e' una ottima tecnica per la gestione di sistemi di grandi dimensioni. I vari produttori lo implementano utilizzando costrutti simili.
La costante crescita delle capacita' elaborative, la conseguente opportunita' di distribuzione della potenza di calcolo dei sistemi e la sempre maggior condivisione delle informazioni saranno una costante anche per gli anni a venire. Quindi il partizionamento, la virtualizzazione, il cloud computing sono e saranno in costante crescita ed evoluzione.
Quindi non importa se sei un sistemista AIX, Solaris o Linux... DIVIDE ET IMPERA ovvero comincia a partizionare e virtualizzare!


Testo: DIVIDE ET IMPERA ! (Unix version)
Data: 14 Febbraio 2010
Versione: 1.0.5 - 14 Febbraio 2017
Autore: mail@meo.bogliolo.name