Consulenze presso Eunet srl, via dell'Artigianato 15, 09122 Cagliari 070 753609 Lun - Ven 08:30-13:00 / 14.30-17.00

Assegnare la giusta quantità di RAM ad una VM

In questo articolo riprendiamo l'argomento relativo al monitoraggio dei consumi di memoria all'interno del nostro ambiente virtuale, introdotto nell'articolo "Consumi di memoria in una VM: i valori di host memory e guest memory" di cui si consiglia la lettura. In particolare cercheremo di spiegare quali sono i valori di cui tener conto per dimensionare correttamente la RAM assegnata ad una VM.

Per la gestione dell'indirizzamento di memoria, i sistemi operativi odierni utilizzano una tecnica conosciuta come virtual memory, dove il termine "virtual" in questo passaggio non è da confondere con i processi di virtualizzazione dell'hypervisor. Il concetto di Virtual Memory prevede la creazione di uno spazio di indirizzamento virtuale per ogni processo; questo spazio può essere anche più grande della memoria fisica disponibile, grazie alla possibilità di riversare alcuni contenuti dalla RAM ad una memoria di massa (tipicamente hard disk). Lo spazio dedicato su disco prende il nome di file di paging nei sistemi Windows e area di swap nei sistemi Linux. La memoria complessiva data dalla RAM più lo spazio dedicato su disco rappresenta quindi lo spazio di indirizzamento virtuale.

I programmi fanno riferimento alla memoria con indirizzi logici, ovvero virtuali, che vengono tradotti in indirizzi fisici reali da una unità apposita, la MMU (Memory Management Unit) generalmente incorporata nei processori. E' quindi il sistema operativo, insieme all'hardware dei processori moderni, che si occupa di traslare gli indirizzi dello spazio virtuale in indirizzi di memoria fisica. Questa tecnica semplifica il lavoro dei programmatori e si presta agli ambienti dove è necessario sfruttare ampi spazi di indirizzamento.

Prendiamo come esempio i sistemi Windows. Per ogni processo in esecuzione, l'insieme delle pagine di memoria residenti nella memoria fisica viene definito Working Set (set di lavoro). Quando il sistema ha bisogno di spazio nella memoria fisica, sposta le pagine meno utilizzate o inattive sul file di paging. Viceversa quando una pagina viene spostata in RAM, il sistema aggiorna gli indici dei processi coinvolti. Tale gestione è completamente trasparente alle applicazioni, che operano solo nei loro spazi di indirizzi virtuali. Sul monitoraggio risorse di Windows, relativamente alla memoria, abbiamo alcune importanti voci.

Per ogni processo:

  • Commit = Quantità di memoria virtuale riservata per un processo. Questo non significa che tale quantità sia sempre in uso.
  • Working Set = Per ogni processo, è l'insieme di pagine dello spazio di indirizzamento virtuale che sono state caricate nella memoria fisica. In altre parole è la parte di memoria di un processo allocata in RAM. Anche in questo caso non si tratta necessariamente di memoria in uso, ma solo di memoria che ha una sua precisa locazione. Una parte di questa memoria può anche essere condivisa con altri processi ed è chiamata Shareable, mentre la parte che non può essere condivisaè detta Private.
  • Hard Faults/sec (Errori hardware/sec) = non si tratta di un errore hardware in senso letterale, ma di un errore di pagina di memoria, che si verifica quando la pagina dell'indirizzo a cui si fa riferimento non è più presente nella memoria fisica (RAM), perché la pagina stessa è stata aggiornata oppure è disponibile nel file di paging su disco. Un elevato numero di errori hardware è sinonimo di lentezza delle applicazioni, i cui processi devono far riferimento a pagine di memoria su disco anziché su memoria fisica, con notevoli rallentamenti.

Ci sono poi delle informazioni globali, tra cui alcune voci che non hanno bisogno di spiegazioni:

  • Memoria in uso
  • Memoria Libera

Alla luce di queste indicazioni, come facciamo a capire se il quantitativo di RAM assegnato ad una VM è sufficiente? Un errore comune è di far riferimento ai soli valori "memoria in uso" e "memoria libera" o di entrare nel panico quando un processo sembra consumare un quantitativo eccessivo di memoria. Piuttosto bisognerebbe capire come si comportano le applicazioni; prendiamo ad esempio Exchange 2010 che, per come è stato progettato, utilizza molta più memoria di quanta gliene occorra veramente. Questo comportamento consente ad Exchange di "parcheggiare" parte della cache in RAM e incrementare così le prestazioni. Pertanto, più RAM assegnate alla macchina, più RAM andrà ad occupare quel processo. E' opportuno quindi verificare anche altre metriche, ed in particolare gli errori hardware (Hard Faults/sec), per capire se c'è realmente bisogno di più RAM.

Ad esempio, le due immagini qui sotto spiegano meglio quanto appena esposto. Si tratta della stessa VM con Windows Server 2008 R2 che fa girare vCenter Server 5. Nella prima immagine viene mostrato il monitoraggio risorse con la macchina dotata di soli 2GB di memoria. Gli errori hardware sono numerosi, perché a causa della poca RAM disponibile molte pagine di memoria sono posizionate nel file di paging su disco. Nella seconda immagine, viene riproposta la stessa situazione, ma questa volta la macchina è dotata di 4GB di RAM e gli errori hardware sono prossimi allo zero.

 Resource monitor 2GB

Resource monitor 4GB

 

(0 Votes)