A la lecture du précédent article (Concepts Azure | Comptes de stockage), nous avons vu qu’un disque virtuel (VHD) est stocké au sein d’un compte de stockage proposant un service de stockage Blob, et plus précisément un objet de type « page blobs« . Donc au sein d’un compte de stockage de type StorageV2 (General Purpose V2) Standard ou Premium qui sont les seuls à proposer la gestion de « page blobs ».
Afin d’alléger les tâches de création et de gestion des comptes de stockage pour une finalité orientée VHD, Microsoft propose un service de disques managés. En substance, il est possible de créer des disques et de les rattacher aux machines virtuelles sans avoir à gérer la couche compte de stockage. Il s’agit de la façon la plus efficace de gérer les VHD sur Azure et je n’aborderai donc pas la création de disques VHD non managés dans cet article.
Gammes de disques managés
Microsoft propose 4 gammes de disques managés afin de répondre aux différents besoins de performance. Par ordre croissant de performance :
- La gamme « Standard HDD »
- La gamme « Standard SSD »
- La gamme « Premium SSD »
- La gamme « Ultra Disks »
Standard et Premium
Pour les gammes Standard et Premium, Microsoft propose plusieurs tailles (en GiB) de disque. La taille du disque détermine le niveau de performance associé.

A noter que le choix du disque ne se fait pas sur la base des classes (un « S10 » ou un « S20 » par exemple), c’est la taille du disque qui détermine la performance associé comme le montre l’illustration ci-dessous


Ultra Disks
Pour les « Ultra Disks », le fonctionnement est différent : La taille, les IOPS et la bande passante sont configurés de façon indépendante. Les valeurs sont cependant bornés selon les formules suivantes :
- La taille [T] du disque doit être comprise entre 4 GiB et 65 536 GiB (64 TiB)
- Pour les IOPS [IO] :
- Valeur minimale : 100 IOPS en valeur plancher ou [T] x 4
- Valeur maximale : [T] x 300 ou 160 000 IOPS en valeur plafond
- Pour la bande passante (en MiB/sec) :
- Valeur minimale : 1 MiB/sec en valeur plancher ou [IO] x 4 KiB/sec
- Valeur maximale : [IO] * 256 KiB ou 2 000 MiB/sec en valeur plafond
Ci-dessous l’application de ces formules pour une série de taille de disque. On observe que le maximum en bande passante (2 000 MiB/sec) est accessible avec un disque de 32 GiB. Le maximum en IOPS (160 000) est accessible avec un disque de 1 TiB.

Pour terminer sur les Ultra disks, qui sont disponibles depuis août 2019, je vous invite à lire la documentation Microsoft afin de bien prendre connaissance des limitations actuelles de ce service.
- What disk types are available in Azure? #ultradisk
- Using Azure ultra disks (en particulier les limitations sur les usages des ultra disks)
[Digression] – Unités de mesure
Une petite parenthèse sur les unités de mesure et la terminologie Mebibyte (wikipedia) car c’est parfois confus et qu’un petit rappel est souvent appréciable.
La plus petite unité de mesure de l’information est le bit (binaire : 1 ou 0). Sa nomenclature est « b » (b minuscule)
1 byte (octet en français) est un bloc de 8 bits. Sa nomenclature est « B » (B majuscule).
Dans le domaine du réseau, on parle en bits (par exemple la bande passante est de 100 Mbps, 100 Méga bits par seconde)
Dans le domaine du stockage, on parle en byte (par exemple mon disque a une capacité de 250 MB)
Il existe également une confusion entre les deux notations suivantes :
1 KB = 1 000 Bytes (x 1000)
1 KiB = 1 024 Bytes (x 2^10)
La terminologie Mebibyte a été introduite en 1998 afin de lever les ambiguïtés liées au système métrique traditionnel. 1 KiB = 1 024 Bytes. 1 MiB = 1 024 KiB (1 048 576 Bytes).
Dans cet article, j’utilise les notations GiB / MiB et KiB qui sont plus justes.
Gestion de la performance des disques virtuels
Plusieurs paramètres sont à prendre en compte dès lors que nous nous intéressons à la performance des disques virtuels
Choix de la machine virtuelle
Le choix de la machine virtuelle est le premier facteur pouvant impacter la performance des disques virtuels. En effet, indépendamment de l’architecture disques qui sera choisi, le type de la machine virtuelle implique de potentielles limitations sur la performance des disques qui lui seront rattachés. Ci-dessous quelques conseils sur le choix du type de machine virtuelle.
- Pour consulter la liste des types de machines virtuelles : Azure Virtual machine size
- Les machines virtuelles sont regroupées par familles
- Usage général
- Optimisé pour le calcul
- Optimisé pour la mémoire
- Optimisé pour le stockage
- GPU – Calcul accéléré
- Calcul haute performance
En consultant le détail des différentes machines virtuelles, il faut vérifier les points ci-dessous dans une optique de gestion de la performance des disques :
- Vérifier que le stockage Premium / Ultra disk est disponible
- Vérifier combien de disque de données il est possible de rattacher à la VM (point important lorsque l’on cherche à augmenter la performance via le stripping)
- Vérifier la limite haute d’IOPS et de bande passante (MiBps). Quel que soit votre architecture de disque, ces limites ne pourront pas être dépassées.

Autre point à prendre en considération si l’application cible propose des mécanismes de cache sur disque, toutes les machines virtuelles sont montées par défaut avec deux disques obligatoires :
- Un disque pour le système d’exploitation,
- Un disque pour les données temporaires
Ce dernier propose un niveau de performance important et peut donc être utilisé pour le stockage de données non persistantes. Un cas d’usage est la tempDB de Microsoft SQL Server (explication). Si vous souhaitez utiliser cet espace, il faut bien s’assurer que ses caractéristiques répondent à votre besoin (taille du volume / IOPS et bande passante)
Comprendre et quantifier la performance des disques
Afin de vous donner les outils nécessaires pour quantifier la performance d’un disque, je vous propose une petit chapitre orienté théorie et mathématique !
Quelques définitions
- Sector (secteur en français) : Il s’agit de la plus petite unité de stockage sur un disque. Sa taille historique est de 512 Bytes. Depuis 2010 la norme technologique est passée sur des secteurs d’une taille de 4 096 Bytes (4K | Standard Advanced Format)
- Block size : Le « block size » est un groupe de secteurs déterminé par le système d’exploitation lors de la création d’un système de fichier (file system). Il s’agit de la plus petite unité de stockage, du point de vue de l’OS, pour sauvegarder un fichier. Généralement sa valeur est de 4 KiB. Sur les environnements Windows, on emploi également le terme « Unit allocation »
- I/O block size : A ne pas confondre avec le « block size » de l’OS, l’I/O block size est la taille d’une opération de lecture ou d’écriture. Cette taille est déterminée par l’application utilisant le système de fichier mis à disposition par l’OS. Par exemple l’application Microsoft SQL Server fait varier la taille des opérations de lecture / écriture selon la fonctionnalité finale (What is SQL Server’s IO Block Size?)
- IOPS : Abréviation de « Input / Output operations per second », il s’agit du nombre de transaction en lecture ou écriture possible en 1 seconde. Une transaction correspond à l’écriture ou la lecture d’un bloc de données (I/O block size). Donc si l’application manipule des blocs de grande taille (par exemple 256 KiB), la valeur des IOPs sera forcément plus faible qu’avec des blocs de petite taille (4 KiB par exemple).
Petite illustration ci-dessous avec des tests réalisés sur le disque de mon PC

On constate avec le premier test (block size = 512B), que nous atteignons le maximum d’IOPs du disque, sans pour autant atteindre le maximum de la bande passante. Nous faisons énormément de petites transactions.
Plus on augmente la taille du block size, plus la bande passante augmente mais le compteur IOPs est de plus en plus faible.
- Throughput (bande passante) : Il s’agit du volume de données échangées entre le système et le stockage. Il est généralement exprimé en MiBps ou MBps : Mega-Bytes par seconde (MOps Méga-octets par seconde en français).
- Latency (latence) : Il s’agit du temps nécessaire pour réaliser une opération d’I/O sur le disque. Généralement on mesure la valeur moyenne de la latence.
- I/O Threading, outstanding IO, Queue depth : 3 termes qui recouvrent le même concept. Il s’agit de la capacité à réaliser plusieurs E/S sur un disque au même moment. A partir d’un certain niveau de parallélisme, la performance se stabilise et l’augmentation du parallélisme n’a plus guère d’incidence. Ci-dessous un exemple où nous faisons varier le niveau de parallélisme.

On constate très clairement un gain de performance entre 1 et 2 threads, puis la performance augmente moins rapidement pour plafonner vers 50K IOPs et 200 MiBps au delà de 4 threads
Constats
IOPS, I/O block size et throughput sont 3 notions qui sont liées par la formule suivante :
Throughput = IOPS x I/O Block size
Ainsi, même si Microsoft communique sur les IOPS et le throughput théoriques de leurs gammes de disques, l’une des caractéristiques peut limiter l’autre. Par exemple sur un disque P20 (2 300 IOPS et 150 MiBps), si l’application exploitant ce disque réalise uniquement des petites transactions (512 Bytes), alors nous allons rapidement atteindre le plafond des 2 300 IOPS pour une bande passante de 1,12 MiBps (bien en dessous de la bande passante théorique d’un disque P20).
La latence est également une caractéristique importante de la mesure de la performance. La latence a un impact sur les IOPS : Chaque I/O sur le disque va prendre un temps minium incompressible. Si cette latence est de 0,1 ms alors il ne sera jamais possible d’avoir plus de 10 000 IOPS. La latence est également facteur de la taille de l’I/O block size : Plus la taille du bloc est volumineux, plus le disque aura besoin de temps pour finaliser la transaction.
Pour mitiger les effets liés à la latence, Microsoft propose des mécanismes de cache (pas de cache / cache en lecture seule / cache en lecture et en écriture). Il existe également des gammes de machines virtuelles (série L) qui permettent l’utilisation de disques locaux (minimisation de la distance entre la VM et le disque physique).
Optimiser la performance des disques Azure
En conclusion, les bonnes pratiques pour optimiser la performance des disques sur Azure sont :
- Etre attentif au choix de la machine virtuelle
- Ne pas hésiter à faire du strapping sur les disques (rattacher plusieurs disques à une seule machine et configurer le système de fichier afin de présenter un disque unique au système d’exploitation). Cela augmente le parallélisme et permet d’augmenter les IOPS et la bande passante.
- Utiliser les mécanismes de cache quand c’est pertinent pour l’usage final
- S’appuyer sur les disques temporaires pour les données non permanentes
- Faire des tests afin de se forger une opinion factuelle de la performance de vos VHD (je vous conseille l’outil IOMeters)
Quelques articles pour aller plus loin :
- Understanding Azure Virtual Machine IOPS, throughput and disk latency (Part1)
- Understanding Azure Virtual Machine IOPS, throughput and disk latency (Part2)
- Understanding Queue depth / IOPS and latency (non spécifique à Azure)
- IOmeter user guide (PDF)
- Azure Storage options for SQL Server
- Digging Into Azure VM Disk Performance Features
Publié initialement sur l’intranet de Viareport, cet article fait partie d’une série abordant les concepts fondamentaux de Microsoft Azure.