Home > vmware, vsphere > Introduzione a VAAI

Introduzione a VAAI

Con l’arrivo di vSphere 4.1 è stato introdotto il VAAI (vStorage API for Array Integration). Dato che stanno arrivando sempre piu’ storage “VAAI enabled”, ho deciso di scrivere una introduzione a questa tecnologia per capire cosa fa e che migliorie porta.

Il concetto di fondo delle vStorage API è analogo a quanto accaduto per la CPU: per migliorare l’efficienza della virtualizzazione della CPU, le CPU offrono un supporto in hardware alla virtualizzazione (ad esempio con tecnologie come Intel VT e AMD-V), scaricando il software (in particolare il Virtual Machine Monitor) da alcuni compiti. Analogamente le vStorage API abilitano il supporto in hardware alla virtualizzazione dello storage, riducendo il carico di lavoro del server: in parole povere, si fa fare il lavoro legato allo storage a chi lo sa fare meglio (lo storage array).

Ci sono numerose “specializzazioni” delle vStorage API, dedicate a differenti aspetti:

  • Prestazioni e scalabilità: vStorage API for Array Integration (VAAI)
  • Disaster Recovery: vStorage API for Site Recovery Manager
  • Availability: vStorage API for Pluggable Storage Architecture
  • Data Protection: vStorage API for Data Protection
  • Capacity Optimization: vStorage API for Thin Provisioning
  • Manageability: vStorage API for Storage Awareness

L’integrazione avviene fondamentalmente a tre livelli:

  • a livello di nodo ESX/ESXi, tramite la Pluggable Storage Architecture (PSA)
  • a livello di vCenter, tramite plugin specifici sviluppati dai vendors di storage
  • a livello di storage array, tramite il supporto ai comandi VAAI SCSI

VAAI-api

Cos’è VAAI

Le vStorage API for Array Integration sono un nuovo set di primitive (intese come operazioni fondamentali di tipo  storage) che ESX usa per accelerare le operazioni di I/O che possono essere portate a termine direttamente dall’hardware dello storage stesso, anziche’ dall’ESX.

Le primitive implementate sono:

  • Full Copy (copia completa): questa primitiva permette allo storage array di creare copie complete di dati senza che ESX debba leggere e scrivere i dati stessi. Tramite questa primitiva si sfruttano le capacità dello storage di fare operazioni di copia massiva, snapshot e spostamento di blocchi tramite comandi SCSI.
  • Block Zeroing (azzeramento di blocchi): questa primitiva permette allo storage array di azzerare grossi quantitativi di blocchi per accelerare il provisioning di VM. Tramite questa primitiva si elimina la necessita’ di inviare comandi di scrittura ripetitivi, dicendo allo storage array di ripetere il comando tramite comandi SCSI.
  • Hardware Assisted Locking: questa primitiva fornisce un modo alternativo per proteggere i metadata del file system VMFS, migliorando la scalabilita’ e fornendo un controllo piu’ granulare sugli storage condivisi. Tramite questa primitiva il lock puo’ avvenire a livello di singolo blocco e non piu’ di intera LUN.

VAAI Plug In

Non tutti gli storage array supportano VAAI: per il supporto è necessaria la presenza di un plugin specifico implementato dal produttore dello storage, e non tutti gli storage sono già supportati. Questo sta via via cambiando e sempre piu’ storage sono “VAAI enabled”. Tutti i principali vendors (EMC, NetApp, HP, Dell…) hanno implementato il plugin per alcuni loro storage: per una lista completa, la guida di riferimento ufficiale è la VMware Storage Compatibility Guide.

Le primitive: senza e con VAAI

Diamo ora un rapido sguardo “sotto il cofano” e vediamo come funzionano le primitive interessate senza e con il VAAI.

Full Copy

full_novaai

Senza VAAI, clonare e migrare le VM implica dover copiare I dati “dentro” l’ESX: è l’ESX che si occupa di copiare I dati,  leggendoli e scrivendoli dai datastore interessati. Questo processo di copia consuma cpu, memoria e banda e ci sono potenzialmente lunghi periodi con I/O elevato a livello di VMFS dato da milioni di operazioni su piccoli blocchi.

full_vaai

Con il VAAI, la clonazione la migrazione diventano set di comandi invati dall’ESX allo storage array: il processo di copia avviene nello storage senza utilizzare risorse dell’host (cpu e memoria) e riducendo le operazioni di IO e gli IOPS.

Block Zeroing

zero_novaai

Senza VAAI l’inizializzazione di nuovi blocchi (dei VMDK) necessita che l’host scriva degli zero sullo storage. Questo processo consuma cpu e banda. Inoltre negli array in grado di fare thin provisioning, questi zero possono venire deduplicati solo dopo essere stati scritti.

zero_vaai

Con il VAAI, è lo storage che inizializza I blocchi dei VMDK, rendendo il processo di inizializzazione più veloce e riducendo drasticamente l’uso di cpu e banda dell’host. Inoltre gli array in grado di fare thin provisioning possono deduplicare gli zeri direttamente.

Hardware Assisted Locking

lock_novaai

Senza VAAI quando un ESX ha bisogno di acquisire un lock sul disco di una VM (ad esempio quando deve avviarla) deve riservare l’intera LUN che ospita la VM: questo richiede molti comandi SCSI. Mentre la LUN è riservata, gli altri host sono bloccati fino a quando il lock viene rilasciato. Questo comportamento limita le performance e la scalabilità.

lock_vaai

Con il VAAI, il lock avviene a livello di blocco, tramite un unico comando SCSI. Il lock a livello di blocco non impatta sugli altri host che possono compiere operazioni senza attendere il suo rilascio. Questo permette una maggior scalabilità e un miglioramento nelle performance globali.

Le perfomance

Che incremento di perfomance ci si puo’ aspettare usando VAAI? Si va da 4x a 20x le performance senza VAAI.

Per dei dati relativi a test effettuati su piu’ storage vi rimando a questo post di Duncan Epping: http://www.yellow-bricks.com/2011/03/24/vaai-sweetness/ in cui ha raggruppato risultati di test effettuati su diversi storage.

[tweetmeme only_single=”false”]
Categories: vmware, vsphere Tags: , , , , ,
  1. No comments yet.
  1. No trackbacks yet.

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s

%d bloggers like this: