Optimisation du Cluster Shared Volumes avec CSV-(Block)Cache


Performance, Stockage, Virtualisation / dimanche, juin 9th, 2013

Une des nouveautés de Windows Server 2012 au niveau du Failover Clustering est CSV-(Block)Cache, c’est à dire que l’on peut allouer de la mémoire vive en tant que cache write-trough. Cette nouvelle fonctionnalité permet la mise en cache des lectures uniquement (Read Only Unbuffered I/O) non bufferisées par le cache de Windows, ce qui améliore grandement les temps de lecture ! Il est intéressant de noter que le mécanisme de cache agit au niveau bloc et utilise la mémoire vive contrairement à d’autre solutions qui utilisent le SSD-Caching, pour information, la vitesse d’un SSD OCZ est de 1400 Mbps et la mémoire DDR3-2500 est de 20.000 Mbps !

Ce mécanisme de cache sera donc plus efficace dans des scénarios où les lectures sont prédominantes, typiquement des usages VDI mais également pour réduire « les tempêtes » de démarrage de VMs, Scale-Out File Servers, … Microsoft recommande de l »utiliser pour tous vos scénarios, a noter qu’il désactivé par défaut ! Une présentation au TechEd a démontré des gains de performances très appréciables dans un environnement VDI. Le test a été réalisé sur 5120 VMs dans un cluster 16 noeuds avec 320 VMs par noeud, le temps de boot est ainsi passé de 211 secondes à seulement 29 dont 90% bootent en moins de 40 secondes !

La recommandation Microsoft est d’attribuer 20% de la mémoire totale au CSV-Cache, les test Microsoft ont démontrés qu’à partir de 512 Mo les résultats sont déjà très bons (meilleur rapport coût ressource/performance), c’est d’ailleurs la valeur par défaut 😉 Bien entendu, selon votre pattern I/O ou votre charge (workload) vous pouvez augmenter cette valeur.

Le site YUSUFOZTRUK.INFO a réalisé des benchmarks à l’aide de IOMTER sur une VM avec un cache de 4 Go et sans, les résultats sont bons malgré l’usage d’une seule VM ! Un autre benchmark est disponible ici.

Voici les commandes pour définir la taille du cache de la fonctionnalité CSV-Cache:

(Get-Cluster). SharedVolumeBlockCacheSizeInMB = 512

Ensuite, il convient de l’activer à l’aide de cette commande:

Get-ClusterSharedVolume “Votre disque cluster” | Set-ClusterParameter  CsvEnableBlockCache 1
A noter que la modification de la taille du cache peut se faire à chaud, par contre l’activation du cache nécessite de basculer en OFFLINE/ONLINE la ressource physique du disque au niveau du cluster. Plusieurs compteurs de performance sont disponibles dans la console perfmon.msc, à savoir:

I/O au niveau du cache:

  • Cache IO Read-Bytes
  • Cache IO Read-Bytes/Sec
  • Cache Read
  • Cache Read/Sec

I/O au niveau du disque:

  • Disk IO Read-Bytes
  • Disk IO Read-Bytes/Sec
  • Disk Read
  • Disk Read/Sec

Total I/O:

  • IO Read-Bytes
  • IO Read-Bytes/Sec
  • IO Read
  • IO Read/Sec