7.4. Performances de stockage et réglage

7.4.1. Recommandations relatives au redimensionnement des serveurs de stockage Sun ZFS
7.4.2. A propos des caches de stockage ZFS
7.4.3. Gestion du ZIL dans les plates-formes Oracle Solaris
7.4.4. Paramètres globaux de Oracle VDI pour le stockage
7.4.5. A propos de l'alignement des blocs

7.4.1. Recommandations relatives au redimensionnement des serveurs de stockage Sun ZFS

La configuration de disque recommandée est RAID 10 (des jeux mis en miroir dans un jeu entrelacé), ZFS entrelaçant les données automatiquement entre plusieurs jeux. Cette configuration est appelée "mise en miroir" par Sun 7000 Series. Bien que cette configuration utilise 50 % de la capacité disponible du disque pour assurer la redondance, elle est plus rapide que RAID 5 pour les petites lectures/écritures aléatoires fréquentes, qui est le type d'accès caractéristique d'iSCSI.

Les serveurs de stockage fournissent les disques virtuels auxquels Oracle VM VirtualBox accède via iSCSI. Comme iSCSI est un protocole qui consomme beaucoup de CPU, le nombre de coeurs du serveur de stockage est un facteur décisif pour ses performances. Les autres facteurs importants sont la taille de la mémoire (cache), le nombre de disques et la bande passante réseau disponible.

La bande passante réseau est très volatile et est définie par le rapport entre les bureaux qui démarrent (*bande passante réseau en période de pointe*) et les bureaux qui ont mis en cache les applications en cours d'utilisation (*bande passante réseau moyenne*). Le démarrage d'une machine virtuelle (invité XP) entraîne une charge réseau de 150 Mo qui doit être satisfaite en 30 secondes environ. Si plusieurs bureaux sont lancés en même temps, la bande passante réseau requise peut dépasser 1 Gb/s si les CPU du stockage peuvent gérer la charge engendrée par le trafic iSCSI. Cette situation est courante pour les sociétés fonctionnant par rotation des équipes. Dans ce cas, définissez l'option Pool, Clonage ou Etat de la machine sur En fonctionnement, ce qui permet de conserver les bureaux actifs et ainsi de découpler le démarrage du système d'exploitation lorsqu'un utilisateur se connecte. Vous pouvez également joindre plusieurs interfaces pour fournir une bande passante supérieure à 1 Go/s via une adresse IP. Vous pouvez par ailleurs utiliser des trames Jumbo afin d'accélérer les connexions iSCSI. Les trames Jumbo doivent être configurées pour tous les participants du réseau : serveurs de stockage, serveurs VirtualBox et commutateurs. Notez que les trames Jumbo ne sont pas normalisées et que par conséquent, un risque d'incompatibilité existe.

Oracle VDI, en association avec VirtualBox, utilise la fonctionnalité des volumes sparse de ZFS, qui lui permet d'allouer plus d'espace disque aux volumes que l'espace physiquement disponible, tant que les données réellement écrites ne dépassent pas la capacité du stockage. Cette fonctionnalité, associée au fait que les bureaux clonés réutilisent les données inchangées de leurs modèles, permet une exploitation très performante de l'espace disque disponible. Par conséquent, le calcul de l'espace disque ci-dessous constitue un des pires scénarios possibles, qui suppose que tous les volumes sont entièrement utilisés par des données qui diffèrent du modèle.

  • Nombre de coeurs = nombre de disques virtuels utilisés / 200

    Exemple : un stockage x7210 avec 2 CPU et 4 coeurs par CPU peut servir jusqu'à 2 * 4 * 200 = 1 600 disques virtuels.

  • Taille de la mémoire - Il est conseillé d'en posséder le plus possible. La mémoire disponible peut être utilisée comme cache disque, ce qui réduit le temps d'accès.

  • Nombre de disques = nombre de bureaux / 10

  • Bande passante réseau moyenne [Mb/s] \ = nombre de disques virtuels en cours d'utilisation x 0,032 Mb/s

    Exemple : un stockage x7210 avec une interface Gigabit Ethernet peut desservir jusqu'à 1 000 / 0,032 = 31 250 disques virtuels

  • Bande passante réseau de pointe [Mb/s]\ = nombre de disques virtuels en cours d'utilisation x 40 Mo/s

    Exemple : un stockage x7210 avec une interface Ethernet d'un Gigabit peut servir jusqu'à 1 000 / 40 = 25 disques virtuels

  • Espace disque [Go] = nombre de bureaux x taille du disque virtuel (en Go)

    Exemple : un stockage x7210 avec une capacité de 46 To peut prendre en charge 46 * 1 024 Go / 2 / 8 Go = 2 944 disques de 8 Go dans une configuration RAID 10.

Note

Pour plus d'informations sur l'amélioration des performances des bureaux, reportez-vous aux sections relatives à l'optimisation des images de bureau (Section 5.5, « Création d'images de bureau »).

7.4.2. A propos des caches de stockage ZFS

Cette section présente brièvement la structure du cache et les performances de ZFS et les correspondances avec le matériel des systèmes de stockage unifié de la série Sun Storage 7000.

Arrière-plan

Le système ZFS (Zettabyte File System) est le système de fichiers sous-jacent des plates-formes de stockage des systèmes de stockage unifié Solaris et Sun Storage 7000 prises en charge.

Le cache ARC (Adaptive Replacement Cache) est le cache de lecture ZFS situé dans la mémoire principale (DRAM).

Le second cache L2ARC (Second Level Adaptive Replacement Cache) sert à stocker le contenu du cache de lecture hors de la mémoire principale. Les systèmes de stockage unifié de la série Sun Storage 7000 utilisent des disques durs SSD optimisés en lecture (également appelés Readzillas) pour le cache L2ARC. Les disques SSD sont plus lents que la mémoire DRAM mais bien plus rapides que les disques durs traditionnels. Le L2ARC autorise un très grand cache, ce qui améliore les performances en lecture.

Le ZIL (ZFS Intent Log) satisfait les exigences POSIX en matière d'écriture synchrone et de récupération après blocage. Il n'est pas utilisé pour les écritures asynchrones. Les appels au système ZFS sont enregistrés dans un journal par le ZIL et contiennent suffisamment d'informations pour une réexécution en cas de blocage d'un système. Les systèmes de stockage unifié de la série Sun Storage 7000 utilisent des disques SSD optimisés en écriture (également appelés Writezillas ou Logzillas) pour le ZIL. Lorsque les Logzillas ne sont pas disponibles, les disques durs traditionnels sont utilisés.

Le cache en écriture sert à stocker les données dans la mémoire DRAM volatile (sans batterie de secours) pour accélérer les écritures. Les appels au système ne sont pas enregistrés dans le ZIL lorsque le cache des systèmes de stockage unifié de la série Storage 7000 est activé.

Considérations relatives aux performances

Pour améliorer les performances, redimensionnez le cache de lecture de manière à stocker autant de données que possible. Maximisez d'abord l'utilisation du cache ARC (DRAM), puis ajoutez le cache L2ARC (disques Readzillas).

Oracle VDI active par défaut le cache en écriture de chaque volume iSCSI utilisé par Oracle VDI. Cette configuration est très rapide et n'utilise pas les disques Logzillas, puisque le ZIL n'est pas utilisé. Sans le ZIL, les données courent un risque lorsque le système de stockage unifié de la série Sun Storage 7000 redémarre ou subit une perte d'alimentation pendant que les bureaux sont actifs. Le système ZFS lui-même n'est toutefois pas corrompu.

Pour réduire les risques de perte de données, désactivez le cache en écriture dans Oracle VDI. Sans les disques Logzillas, le ZIL est soutenu par les disques durs traditionnels disponibles et les performances baissent de façon notable. Utilisez des disques Logzillas pour accélérer le ZIL. Si vous utilisez deux ou quatre disques Logzillas, servez-vous du profil 'entrelacé' pour améliorer encore davantage les performances.

Pour désactiver le cache en écriture de la mémoire, sélectionnez un stockage dans Oracle VDI Manager, cliquez sur Modifier pour ouvrir l'Assistant Modifier le stockage et désactivez la case à cocher Cache. Le changement s'appliquera aux bureaux récemment créés pour les Oracle VM VirtualBox et aux bureaux récemment démarrés pour les plates-formes de virtualisation Microsoft Hyper-V.

7.4.3. Gestion du ZIL dans les plates-formes Oracle Solaris

Désactiver le journal ZIL (ZFS Intent Log) est un moyen d'accélérer les plates-formes de stockage Oracle Solaris 10 10/09 (et versions ultérieures). Plusieurs méthodes permettent d'effectuer cette opération, mais n'oubliez pas que désactiver le ZIL est risqué lorsque les E/S synchrones de disque et la cohérence des données lors des défaillances du stockage sont importantes.

La commande qui permet de désactiver immédiatement le journal ZIL est la suivante :

echo zil_disable/W0t1 | mdb -kw

La commande qui permet d'activer immédiatement le journal ZIL est la suivante :

echo zil_disable/W0t0 | mdb -kw

Pour éviter que la commande de désactivation du journal ZIL survive après un redémarrage, modifiez /etc/system et ajoutez la ligne suivante.

set zfs:zil_disable=1

La modification de l'état du ZIL entre en vigueur pour un pool ZFS spécifique lorsqu'il est monté, de sorte que le pool ZFS doit être créé, remonté ou importé après la modification du paramètre (opération implicite lors du redémarrage).

Comme le paramètre ZIL est global pour un stockage et désactive le ZIL pour tous les pools ZFS d'un stockage après un redémarrage, il est possible que le volume racine d'un système servi par ZFS ne se comporte pas comme prévu puisque les sémantiques synchrones n'existent plus.

La pratique recommandée pour éviter un tel conflit d'intérêt consiste à utiliser un serveur doté d'au moins deux disques. Le premier disque héberge les tranches du système d'exploitation à l'aide de l'ancien système de fichiers UFS. Les disques restants sont formatés au format ZFS et utilisés pour le stockage Oracle VDI. Avec cette méthode, le ZIL peut être désactivé et le disque UFS continuera à fournir les sémantiques synchrones puisque le ZIL est uniquement ZFS.

Page de référence pour ZFS et ZIL :

http://www.solarisinternals.com/wiki/index.php/ZFS_Evil_Tuning_Guide#Disabling_the_ZIL_.28Don.27t.29

7.4.4. Paramètres globaux de Oracle VDI pour le stockage

Cette section présente des informations sur les paramètres globaux de Oracle VDI s'appliquant au stockage. Pour répertorier et modifier ces paramètres, utilisez les commandes vda settings-getprops et vda settings-setprops.

Paramètre global

Description

storage.max.commands

Nombre de commandes exécutées dans un stockage en parallèle.

La valeur par défaut est 10.

La modification de ce paramètre requiert le redémarrage du service Oracle VDI.

Le paramètre est global pour une installation Oracle VDI et s'applique à un stockage physique en fonction de son adresse IP ou de son nom DNS.

Le nombre d'hôtes Oracle VDI n'affecte pas le nombre maximal d'actions de stockage parallèles exécutées par Oracle VDI dans un stockage physique. Si des messages intermittents vous signalent que le stockage ne répond pas, réduisez la charge du stockage. Cette opération affecte les performances du clonage et du recyclage.

Ce paramètre fonctionne même si l'agent du Centre Oracle VDI ne fonctionne plus dans l'hôte.

Ce paramètre s'applique uniquement au stockage Sun ZFS utilisé avec les fournisseurs de bureaux Oracle VM VirtualBox (sur Solaris) et Microsoft Hyper-V.

storage.query.size.interval

Délai en secondes pendant lequel le service Oracle VDI interroge le stockage pour connaître son espace disque total et disponible.

La valeur par défaut est de 180 secondes.

Etant donné qu'un seul hôte Oracle VDI effectue cette opération, il n'est généralement pas nécessaire de modifier ce paramètre.

Ce paramètre s'applique à tous les types de stockage.

storage.watchdog.interval

Délai en secondes pendant lequel le service Oracle VDI interroge le stockage sur sa disponibilité.

La valeur par défaut est de 30 secondes.

Etant donné qu'un seul hôte Oracle VDI effectue cette opération, il n'est généralement pas nécessaire de modifier ce paramètre.

Ce paramètre s'applique à tous les types de stockage.

storage.fast.command.duration

Délai en secondes après lequel le service Oracle VDI considère qu'une commande de stockage rapide a échoué.

La valeur par défaut est de 75 secondes.

La modification de ce paramètre requiert le redémarrage du service Oracle VDI.

La seule fonction Oracle VDI qui utilise cette durée de commande est le chien de garde du stockage qui envoie régulièrement des commandes ping au stockage pour connaître sa disponibilité.

Ce paramètre s'applique uniquement au stockage Sun ZFS utilisé avec les fournisseurs de bureaux Oracle VM VirtualBox (sur Solaris) et Microsoft Hyper-V.

storage.medium.command.duration

Délai en secondes après lequel le service Oracle VDI considère qu'une commande de stockage moyenne a échoué.

La valeur par défaut est de 1 800 secondes (30 minutes).

La modification de ce paramètre requiert le redémarrage du service Oracle VDI.

La plupart des commandes de stockage utilisées par Oracle VDI utilisent cette durée de commande.

Ce paramètre s'applique uniquement au stockage Sun ZFS utilisé avec les fournisseurs de bureaux Oracle VM VirtualBox (sur Solaris) et Microsoft Hyper-V.

storage.slow.command.duration

Délai en secondes après lequel le service Oracle VDI considère qu'une commande de stockage lent a échoué.

La valeur par défaut est 10 800 secondes (3 heures).

La modification de ce paramètre requiert le redémarrage du service Oracle VDI.

Seuls quelques scripts de stockage complexes utilisés par Oracle VDI utilisent cette durée de commande. Ces scripts ne sont pas exécutés très souvent, généralement une fois par jour.

Ce paramètre s'applique uniquement au stockage Sun ZFS utilisé avec les fournisseurs de bureaux Oracle VM VirtualBox (sur Solaris) et Microsoft Hyper-V.

Le paramètre le plus souvent modifié est storage.max.commands. Par défaut, les systèmes de stockage unifié de la série Sun Storage 7000 ne peuvent exécuter que quatre commandes en parallèle, les commandes restantes étant mises en file d'attente. Pour obtenir de meilleures performances, Oracle VDI VDI surcharge intentionnellement la file d'attente du stockage. Si votre stockage devient lent, par exemple à cause d'une charge lourde, l'exécution des commandes mises en file d'attente peut être trop longue, et lorsque ces commandes prennent plus de temps que le délai défini dans les paramètres de durée, le stockage peut être signalé de façon incorrecte comme ne répondant plus. Si cela arrive régulièrement, vous pouvez réduire la valeur du paramètre storage.max.commands, mais cela peut également réduire les performances lorsque le stockage n'est pas très occupé.

Les paramètres d'intervalle n'ont que rarement besoin d'être modifiés, car les commandes sont uniquement exécutées par l'hôte principal d'un Centre Oracle VDI. Réduire la valeur de ces paramètres donne des informations plus à jour sur l'espace disque du stockage et accélère la détection des hôtes de stockage qui ne répondent plus, mais accroît également la charge des hôtes de stockage. Il est préférable de conserver les valeurs par défaut des paramètres.

Les paramètres de durée incluent une bonne marge de sécurité. Ne modifiez les paramètres de durée que si le stockage ne parvient pas à exécuter les commandes dans les délais alloués.

7.4.5. A propos de l'alignement des blocs

Les disques durs classiques ont une taille de bloc de 512 octets. Selon le système d'exploitation invité de la machine virtuelle, un même bloc logique du système de fichiers invité peut utiliser deux blocs dans le stockage. Il s'agit du désalignement des blocs. Figure 7.2 présente un exemple. Il est préférable d'éviter un désalignement des blocs car cela double les E/S du stockage pour accéder à un bloc du système de fichiers du système d'exploitation invité (en supposant la présence d'un modèle d'accès aléatoire complet et l'absence de cache).

Figure 7.2. Exemples de blocs alignés et mal alignés avec le stockage Sun ZFS

Le diagramme présente deux exemples d'un disque virtuel, un correctement aligné et un mal aligné.

Par défaut, Windows XP n'aligne pas correctement les partitions et les blocs sont désalignés. En général, Windows Vista et Windows 7 alignent les partitions correctement et les blocs sont alignés.

Vérification de l'alignement des blocs

En général, la partition unique d'un disque commence au niveau du secteur 63 du disque. Pour vérifier l'alignement d'une partition Windows, utilisez la commande suivante :

wmic partition get StartingOffset, Name, Index

Voici un exemple de résultat de cette commande :

Index Name                   StartingOffset 
0     Disk #0, Partition #0  32256

Pour trouver le secteur de départ, divisez la valeur StartingOffset par 512 (la taille de bloc du disque dur) :

32256 ÷ 512 = 63

La taille d'un cluster NTFS est généralement de 4 kilo-octets. Le premier cluster NTFS commence donc au secteur 63 du disque et se termine au secteur 70.

Les types de stockage qui utilisent le système de fichiers ZFS (Zettabyte File System) ont une taille de bloc par défaut de 8 Ko. Dans le stockage, le quatrième bloc ZFS correspond aux secteurs 48 à 63 du disque, et le secteur du cinquième bloc ZFS aux secteurs 64 à 79 du disque.

Les types de stockage qui utilisent OCFS2 (Oracle Cluster File System version 2) ont une taille de bloc par défaut de 4 Ko. Dans le stockage, le huitième bloc OCFS2 correspond aux secteurs 56 à 63 du disque, et le secteur du neuvième bloc OCFS2 aux secteurs 64 à 73 du disque.

Un désalignement se produit sur les deux types de stockage car il faut accéder à plus d'un bloc sur le stockage pour accéder au premier cluster NTFS, comme illustré sur la Figure 7.2.

Pour un alignement correct des blocs, la valeur StartingOffset doit être exactement divisible par 8192 ou 4096, en fonction de la taille de bloc utilisée par le système de fichiers sur le stockage.

Dans l'exemple suivant, les blocs sont désalignés :

wmic partition get StartingOffset, Name, Index
Index Name                   StartingOffset 
0     Disk #0, Partition #0  32256

32556 ÷ 8192 = 3.97412109

32556 ÷ 4096 = 7.94824219

Dans l'exemple suivant, les blocs sont alignés :

wmic partition get StartingOffset, Name, Index
Index Name                   StartingOffset 
0     Disk #0, Partition #0  32768

32768 ÷ 8192 = 4

32768 ÷ 4096 = 8

Correction de l'alignement des blocs

Sous Windows 2003 SP1 et les versions ultérieures, l'utilitaire diskpart.exe fournit une option Align qui permet de spécifier l'alignement des blocs dans les partitions. Pour Windows XP, utilisez un outil de partitionnement de disque tiers tel que parted pour créer des partitions avec un secteur de départ défini. Reportez-vous à l'exemple ci-après. Pour les autres systèmes d'exploitation, consultez leur documentation pour plus d'informations sur l'alignement des partitions.

Exemple de préparation d'un disque pour Windows XP avec un alignement correct des blocs

Dans cet exemple, des utilitaires de disques situés dans un système Linux de démarrage, tels que Knoppix, sont utilisés pour créer une partition de disque dont les blocs sont correctement alignés.

  1. Créez une nouvelle machine virtuelle.

  2. Assignez l'image ISO du système Linux au lecteur de CD/DVD-ROMD de la machine virtuelle.

  3. Démarrez la machine virtuelle.

  4. Ouvrez un Shell de commande et devenez utilisateur root.

  5. Obtenez le nombre total de secteurs du disque.

    Pour obtenir des informations sur le disque, utilisez la commande fdisk -ul.

    Dans l'exemple suivant, le disque a 20 971 520 secteurs :

    # fdisk -ul
    Disk /dev/sda doesn't contain a valid partition table
    
    Disk /dev/sda: 10.7 GB, 10737418240 bytes
    255 heads, 63 sectors/track, 1305 cylinders, total 20971520 sectors
    Units = sectors of 1 * 512 = 512 bytes
    Sector size (logical/physical): 512 bytes / 512 bytes
    I/O size (minimum/optimal): 512 bytes / 512 bytes
    Disk identifier: 0x00000000
  6. Créez une table de partition MS-DOS dans le disque.

    Utilisez la commande parted <disk> mklabel msdos pour créer la table de partition.

    Dans l'exemple suivant, la table de partition est créée dans le disque /dev/sda :

    # parted /dev/sda mklabel msdos
  7. Créez une nouvelle partition, en spécifiant ses secteurs de départ et de fin.

    Utilisez la commande parted <disk> mkpartfs primary fat32 64s <end-sector>s pour créer la partition. <end-sector> correspond au nombre total de secteurs du disque moins un. Par exemple, si le disque contient 20 971 520 secteurs, <end-sector> est égal à 20 971 519.

    Selon la version de l'utilitaire parted utilisé, un message d'avertissement peut vous signaler que la partition n'est pas correctement alignée pour des performances optimales. Vous pouvez ignorer cet avertissement sans prendre de risque.

    Dans l'exemple suivant, une partition est créée dans le disque /dev/sda :

    # parted /dev/sda mkpartfs primary fat32 64s 20971519s                          
  8. Vérifiez que la partition a bien été créée.

    Utilisez la commande parted <disk> print pour contrôler la partition.

    Dans l'exemple suivant, les partitions du disque /dev/sda sont vérifiées :

    # parted /dev/sda print
    Model: ATA VBOX HARDDISK (scsi)
    Disk /dev/sda: 10.7GB
    Sector size (logical/physical): 512B/512B
    Partition Table: msdos
    
    Number  Start   End     Size    Type     File system  Flags
     1      32.8kB  10.7GB  10.7GB  primary  fat32        lba
  9. Eteignez la machine virtuelle et annulez l'assignation de l'image ISO.

  10. Assignez l'image ISO de l'installation de Windows XP au lecteur de CD/DVD-ROM de la machine virtuelle.

  11. Démarrez la machine virtuelle et installez Windows XP.

  12. Lorsque vous y êtes invité, sélectionnez la partition nouvellement créée.

  13. (Facultatif) Lorsque vous y êtes invité, remplacez le système de fichiers FAT32 par NTFS.

  14. Terminez l'installation.

  15. Connectez-vous à l'invité Windows XP en tant qu'administrateur.

  16. Vérifiez que la valeur de StartingOffset est 32768.

    wmic partition get StartingOffset, Name, Index
    Index Name                   StartingOffset 
    0     Disk #0, Partition #0  32768