Ottimizzare la VM Linux su AzureOptimize your Linux VM on Azure

La creazione di una macchina virtuale (VM) di Linux è facile da eseguire dalla riga di comando o dal portale.Creating a Linux virtual machine (VM) is easy to do from the command line or from the portal. Questa esercitazione illustra come assicurarsi di averla configurata in modo da ottimizzarne le prestazioni sulla piattaforma Microsoft Azure.This tutorial shows you how to ensure you have set it up to optimize its performance on the Microsoft Azure platform. Questo argomento usa una VM di Ubuntu Server, ma è anche possibile creare una macchina virtuale Linux usando le proprie immagini come modelli.This topic uses an Ubuntu Server VM, but you can also create Linux virtual machine using your own images as templates.

PrerequisitiPrerequisites

Questo argomento presuppone che sia disponibile una sottoscrizione di Azure attiva (registrazione alla versione di valutazione gratuita) e che sia già stato eseguito il provisioning di una macchina virtuale nella sottoscrizione di Azure.This topic assumes you already have a working Azure subscription (free trial signup) and have already provisioned a VM into your Azure subscription. Assicurarsi che sia installata la versione più recente dell'interfaccia della riga di comando 2.0 di Azure e che sia stato effettuato l'accesso alla sottoscrizione di Azure con az login prima di creare una macchina virtuale.Make sure that you have the latest Azure CLI 2.0 installed and logged in to your Azure subscription with az login before you create a VM.

Disco del sistema operativo di AzureAzure OS Disk

Dopo la creazione, alla macchina virtuale Linux in Azure sono associati due dischi.Once you create a Linux VM in Azure, it has two disks associated with it. /dev/sda è il disco del sistema operativo mentre /dev/sdb è il disco temporaneo./dev/sda is your OS disk, /dev/sdb is your temporary disk. Usare il disco principale del sistema operativo (/dev/sda) esclusivamente per il sistema operativo, perché è ottimizzato per tempi di avvio della macchina virtuale ridotti e non offre prestazioni ideali per i carichi di lavoro.Do not use the main OS disk (/dev/sda) for anything except the operating system as it is optimized for fast VM boot time and does not provide good performance for your workloads. È consigliabile collegare uno o più dischi alla VM per ottenere l'archiviazione persistente e ottimizzata per i dati.You want to attach one or more disks to your VM to get persistent and optimized storage for your data.

Aggiunta di dischi per risultati a livello di dimensioni e prestazioniAdding Disks for Size and Performance targets

In base alle dimensioni della VM, è possibile collegare fino a 16 dischi aggiuntivi su una macchina virtuale di Serie A, 32 dischi su una di Serie D e 64 dischi su una di Serie G, fino a un massimo di 1 TB di dimensioni per ogni VM.Based on the VM size, you can attach up to 16 additional disks on an A-Series, 32 disks on a D-Series and 64 disks on a G-Series machine - each up to 1 TB in size. Aggiungere altri dischi in base alle necessità specificate dai requisiti per spazio e IOps.You add extra disks as needed per your space and IOps requirements. Ogni disco ha un obiettivo a livello di prestazioni pari a 500 IOps per l'Archiviazione Standard e 5000 IOps per disco per l'Archiviazione Premium.Each disk has a performance target of 500 IOps for Standard Storage and up to 5000 IOps per disk for Premium Storage. Per altre informazioni sui dischi di Archiviazione Premium vedere Archiviazione Premium: archiviazione a prestazioni elevate per macchine virtuali di AzureFor more information about Premium Storage disks, see Premium Storage: High-Performance Storage for Azure VMs

Per ottenere i valori IOps più elevati nei dischi di Archiviazione Premium in cui le impostazioni della cache sono state impostate su ReadOnly o None, è necessario disabilitare le barriere durante il montaggio del file system in Linux.To achieve the highest IOps on Premium Storage disks where their cache settings have been set to either ReadOnly or None, you must disable barriers while mounting the file system in Linux. Non sono necessarie barriere perché le scritture relative ai dischi supportati da Archiviazione Premium assicurano la durabilità per queste impostazioni della cache.You do not need barriers because the writes to Premium Storage backed disks are durable for these cache settings.

  • Se si usa reiserFS, disabilitare le barriere tramite l'opzione di montaggio barrier=none. Per abilitarle usare barrier=flush.If you use reiserFS, disable barriers using the mount option barrier=none (For enabling barriers, use barrier=flush)
  • Se si usa ext3/ext4, disabilitare le barriere tramite l'opzione di montaggio barrier=0. Per abilitarle usare barrier=1.If you use ext3/ext4, disable barriers using the mount option barrier=0 (For enabling barriers, use barrier=1)
  • Se si usa XFS, disabilitare le barriere tramite l'opzione di montaggio nobarrier. Per abilitarle usare l'opzione barrier.If you use XFS, disable barriers using the mount option nobarrier (For enabling barriers, use the option barrier)

Considerazioni sull'account di archiviazione non gestitoUnmanaged storage account considerations

L'azione predefinita quando si crea una macchina virtuale con l'interfaccia della riga di comando 2.0 di Azure consiste nell'uso di Azure Managed Disks.The default action when you create a VM with the Azure CLI 2.0 is to use Azure Managed Disks. Questi dischi vengono gestiti dalla piattaforma Azure e non richiedono alcuna pianificazione o alcuna posizione per l'archiviazione.These disks are handled by the Azure platform and do not require any preparation or location to store them. I dischi non gestiti richiedono un account di archiviazione e presentano alcune considerazioni aggiuntive sulle prestazioni.Unmanaged disks require a storage account and have some additional performance considerations. Per altre informazioni sui dischi gestiti, vedere Azure Managed Disks overview (Panoramica di Azure Managed Disks).For more information about managed disks, see Azure Managed Disks overview. Nella sezione seguente vengono descritte le considerazioni sulle prestazioni applicabili solo quando si usano dischi non gestiti.The following section outlines performance considerations only when you use unmanaged disks. Anche in questo caso la soluzione di archiviazione predefinita e consigliata consiste nell'usare dischi gestiti.Again, the default and recommended storage solution is to use managed disks.

Quando si crea una macchina virtuale con dischi non gestiti è consigliabile assicurarsi di collegare dischi da account di archiviazione che si trovano nella stessa area della macchina virtuale, per garantire la prossimità e ridurre al minimo la latenza di rete.If you create a VM with unmanaged disks, make sure that you attach disks from storage accounts residing in the same region as your VM to ensure close proximity and minimize network latency. Ogni account di archiviazione Standard ha capacitò pari ad almeno 20.000 IOps e a dimensioni di 500 TB.Each Standard storage account has a maximum of 20k IOps and a 500 TB size capacity. Ciò consente di ottenere circa 40 dischi a uso elevato, inclusi il disco del sistema operativo ed eventuali dischi dati creati.This limit works out to approximately 40 heavily used disks including both the OS disk and any data disks you create. Per gli account di archiviazione Premium non sono previsti limiti massimi per IOps ma è previsto un limite di 32 TB per le dimensioni.For Premium Storage accounts, there is no Maximum IOps limit but there is a 32 TB size limit.

Quando si gestiscono carichi di lavoro con IOps elevati ed è stata scelta l'Archiviazione Standard per i dischi, potrebbe essere necessario suddividere i dischi in più account di archiviazione, per assicurarsi di non superare il limite di 20.000 IOps per gli account di archiviazione Standard.When dealing with high IOps workloads and you have chosen Standard Storage for your disks, you might need to split the disks across multiple storage accounts to make sure you have not hit the 20,000 IOps limit for Standard Storage accounts. La VM può includere una combinazione di dischi da diversi account di archiviazione e tipi di account di archiviazione per ottenere una configurazione ottimale.Your VM can contain a mix of disks from across different storage accounts and storage account types to achieve your optimal configuration.

Unità temporanea per la VMYour VM Temporary drive

Per impostazione predefinita, quando si crea una macchina virtuale, Azure mette a disposizione un disco del sistema operativo (/dev/sda) e un disco temporaneo (/dev/sdb).By default when you create a VM, Azure provides you with an OS disk (/dev/sda) and a temporary disk (/dev/sdb). Tutti gli altri dischi aggiuntivi verranno visualizzati come /dev/sdc, /dev/sdd, /dev/sde e così via.All additional disks you add show up as /dev/sdc, /dev/sdd, /dev/sde and so on. Tutti i dati nei dischi temporanei (/dev/sdb) non sono durevoli e possono andare persi se eventi specifici come il ridimensionamento, la ridistribuzione o la manutenzione della macchina virtuale impongono un riavvio.All data on your temporary disk (/dev/sdb) is not durable, and can be lost if specific events like VM Resizing, redeployment, or maintenance forces a restart of your VM. Le dimensioni e il tipo del disco temporaneo sono correlati alle dimensioni della VM scelte in fase di distribuzione.The size and type of your temporary disk is related to the VM size you chose at deployment time. Nel caso di macchine virtuali con dimensioni Premium (serie DS, G e DS_V2) l'unità temporanea sarà supportata da un'unità SSD locale per assicurare prestazioni aggiuntive fino a un massimo di 48.000 IOps.All of the premium size VMs (DS, G, and DS_V2 series) the temporary drive are backed by a local SSD for additional performance of up to 48k IOps.

File di scambio LinuxLinux Swap File

Se la VM di Azure proviene da un'immagine Ubuntu o CoreOS, è possibile usare CustomData per inviare un file cloud-config a cloud-init.If your Azure VM is from an Ubuntu or CoreOS image, then you can use CustomData to send a cloud-config to cloud-init. Se è stata caricata un'immagine Linux personalizzata che usa cloud-init, si configurano anche partizioni di scambio con cloud-init.If you uploaded a custom Linux image that uses cloud-init, you also configure swap partitions using cloud-init.

Nelle immagini cloud Ubuntu, è necessario usare cloud-init per configurare la partizione di scambio.On Ubuntu Cloud Images, you must use cloud-init to configure the swap partition. Per altre informazioni vedere AzureSwapPartitions.For more information, see AzureSwapPartitions.

Per le immagini senza supporto cloud-init, le immagini delle VM distribuite da Azure Marketplace includono un agente Linux integrato per la VM con il sistema operativo, che consente alla VM di interagire conFor images without cloud-init support, VM images deployed from the Azure Marketplace have a VM Linux Agent integrated with the OS. diversi servizi di Azure.This agent allows the VM to interact with various Azure services. Supponendo che sia stata distribuita un'immagine standard da Azure Marketplace, sarà necessario seguire questa procedura per configurare correttamente le impostazioni del file di scambio Linux:Assuming you have deployed a standard image from the Azure Marketplace, you would need to do the following to correctly configure your Linux swap file settings:

Trovare e modificare due voci nel file /etc/waagent.conf .Locate and modify two entries in the /etc/waagent.conf file. Queste voci controllano l'esistenza di un file di scambio dedicato e le dimensioni del file di scambio.They control the existence of a dedicated swap file and size of the swap file. I parametri che si sta cercando di modificare sono ResourceDisk.EnableSwap=N e ResourceDisk.SwapSizeMB=0The parameters you are looking to modify are ResourceDisk.EnableSwap=N and ResourceDisk.SwapSizeMB=0

Modificarli secondo le impostazioni seguenti:Change the parameters to the following settings:

  • ResourceDisk.EnableSwap=YResourceDisk.EnableSwap=Y
  • ResourceDisk.SwapSizeMB={dimensione in MB che soddisfa le esigenze}ResourceDisk.SwapSizeMB={size in MB to meet your needs}

Dopo aver apportato le modifiche, è necessario riavviare il waagent o la macchina virtuale Linux.Once you have made the change, you need to restart the waagent or restart your Linux VM to reflect those changes. Per verificare l'implementazione delle modifiche e la creazione di un file di scambio, provare a usare il comando free per visualizzare lo spazio disponibile.You know the changes have been implemented and a swap file has been created when you use the free command to view free space. L'esempio seguente consente di creare un file di scambio di 512 MB come risultato della modifica del file waagent.conf:The following example has a 512MB swap file created as a result of modifying the waagent.conf file:

azuseruser@myVM:~$ free
            total       used       free     shared    buffers     cached
Mem:       3525156     804168    2720988        408       8428     633192
-/+ buffers/cache:     162548    3362608
Swap:       524284          0     524284

Algoritmo di pianificazione I/O per l'Archiviazione PremiumI/O scheduling algorithm for Premium Storage

Con il kernel Linux 2.6.18, l'algoritmo di pianificazione I/O predefinito è stato modificato da algoritmo Deadline a CFQ (Completely Fair Queuing).With the 2.6.18 Linux kernel, the default I/O scheduling algorithm was changed from Deadline to CFQ (Completely fair queuing algorithm). Per modelli I/O ad accesso casuale, la differenza tra le prestazioni per CFQ e Deadline è minima.For random access I/O patterns, there is negligible difference in performance differences between CFQ and Deadline. Per i dischi basati su SSD in cui il modello I/O del disco è prevalentemente sequenziale, il ritorno all'algoritmo NOOP o Deadline può consentire di ottenere prestazioni migliori per I/O.For SSD-based disks where the disk I/O pattern is predominantly sequential, switching back to the NOOP or Deadline algorithm can achieve better I/O performance.

Visualizzare l'utilità di pianificazione di I/O correnteView the current I/O scheduler

Usare il comando seguente:Use the following command:

cat /sys/block/sda/queue/scheduler

Verrà visualizzato l'output seguente, che indica l'utilità di pianificazione corrente.You see following output, which indicates the current scheduler.

noop [deadline] cfq

Modificare il dispositivo corrente (/dev/sda) dell'algoritmo di pianificazione di I/OChange the current device (/dev/sda) of I/O scheduling algorithm

Usare il seguente comando:Use the following commands:

azureuser@myVM:~$ sudo su -
root@myVM:~# echo "noop" >/sys/block/sda/queue/scheduler
root@myVM:~# sed -i 's/GRUB_CMDLINE_LINUX=""/GRUB_CMDLINE_LINUX_DEFAULT="quiet splash elevator=noop"/g' /etc/default/grub
root@myVM:~# update-grub

Nota

Applicare questa impostazione esclusivamente a /dev/sda non serve a niente.Applying this setting for /dev/sda alone is not useful. È necessario che sia impostata su tutti i dischi dati in cui la modalità I/O sequenziale domina il modello I/O.Set on all data disks where sequential I/O dominates the I/O pattern.

Si dovrebbe visualizzare l'output seguente, che indica che grub.cfg è stato ricompilato correttamente e che l'utilità di pianificazione predefinita è stata aggiornata a NOOP.You should see the following output, indicating that grub.cfg has been rebuilt successfully and that the default scheduler has been updated to NOOP.

Generating grub configuration file ...
Found linux image: /boot/vmlinuz-3.13.0-34-generic
Found initrd image: /boot/initrd.img-3.13.0-34-generic
Found linux image: /boot/vmlinuz-3.13.0-32-generic
Found initrd image: /boot/initrd.img-3.13.0-32-generic
Found memtest86+ image: /memtest86+.elf
Found memtest86+ image: /memtest86+.bin
done

Per il gruppo di distribuzione Redhat è necessario solo il seguente comando:For the Redhat distribution family, you only need the following command:

echo 'echo noop >/sys/block/sda/queue/scheduler' >> /etc/rc.local

Uso di Software RAID per ottenere valori I/Ops più elevatiUsing Software RAID to achieve higher I/Ops

Se i carichi di lavoro richiedono un valore di IOps superiore a quello consentito da un singolo disco, sarà necessario usare una configurazione Software RAID con più dischi.If your workloads require more IOps than a single disk can provide, you need to use a software RAID configuration of multiple disks. Poiché Azure esegue già la resilienza del disco a livello di infrastruttura locale, è possibile ottenere il livello massimo di prestazioni mediante una configurazione con striping RAID-0.Because Azure already performs disk resiliency at the local fabric layer, you achieve the highest level of performance from a RAID-0 striping configuration. È necessario effettuare il provisioning e creare dischi nell'ambiente Azure, poi collegarli alla macchina virtuale Linux prima del partizionamento, della formattazione e del montaggio delle unità.Provision and create disks in the Azure environment and attach them to your Linux VM before partitioning, formatting and mounting the drives. Altri dettagli sulla configurazione di un'installazione RAID software nella VM Linux in Azure sono disponibili nel documento Configurare RAID software in Linux.More details on configuring a software RAID setup on your Linux VM in azure can be found in the Configuring Software RAID on Linux document.

Passaggi successiviNext Steps

Come per tutte le considerazioni sull'ottimizzazione, sarà necessario eseguire test prima e dopo ogni modifica per misurare l'impatto della modifica stessa.Remember, as with all optimization discussions, you need to perform tests before and after each change to measure the impact the change has. L'ottimizzazione è un processo graduale che potrà avere risultati diversi in diversi computer nell'ambiente.Optimization is a step by step process that has different results across different machines in your environment. Le impostazioni ottimali per una configurazione potrebbero non essere appropriate per altre.What works for one configuration may not work for others.

Ecco alcuni collegamenti utili a risorse aggiuntive:Some useful links to additional resources: