Analyse de performances de serveurs Windows

 

superfmonLorsque l’on met en production ou maintient un système on ne pense pas toujours à faire d’évaluation de performances des serveurs, parce qu'on a pas forcément les outils pour le faire et le temps d’analyser les résultats obtenus.

Lorsque j’étais Premier Field Engineer chez Microsoft, j’utilisais souvent avec mes clients un outil développé par des collègues et qui s’appelle PAL (Performance Analysis of Logs). Le but de PAL est simple : offrir un moteur d’analyse et de génération de rapports pour les performances des serveurs. Cerise sur le gâteau, il vient avec la possibilité de générer les modèles de capture d’informations pour Performance Monitor (perfmon) de Windows, afin de ne collecter que l’essentiel sur une machine. 

Dans mon scénario, je chercher à vérifier si performances de mes contrôleurs de domaines sont bonnes et si ce n’est pas le cas, à en déterminer la cause (disques lents, mémoire saturée, réseau engorgé, processus qui consomment toutes mes ressources, etc.)

 

Récupération de l’outil PAL

L’outil est disponible sur http://pal.codeplex.com/ et il est mis à jour régulièrement par Clint Huffman. Cette page contient l’outil qui a quelques prérequis parmi lesquels PowerShell qui sera utilisé pour analyser les données et Microsoft Chart Controls for Microsoft .NET Framework 3.5 qui sera utilisé pour générer les graphiques du rapport.

On récupère donc les binaires de l’outils et on l’installe sur un poste client.

 

Création des modèles

Sur le poste client toujours, nous allons dans un premier temps générer un modèle pour Perfmon qui permettra de prendre une trace de performance selon le rôle de serveur que je souhaite analyser.

Voici l’écran d’accueil de PAL, pour le moment allons dans la section Threshold File

PAL1

Lorsque l’on ouvre le menu déroule, on voit qu’il y a pas mal de modèles de capture de compteurs de performances pour différents scenarios serveurs.

PAL2

Sélectionnons le scénario Microsoft Active Directory et cliquons sur Export to Perfmon template file…

PAL3

On sauvegarde le fichier XML et on le copie sur le serveur où l’on souhaite effectuer la capture.

PAL4

Dans ce modèle, il y a tout simplement la liste des compteurs perfmon que l’on a besoin pour un scénario donné, vous pouvez rajouter vos propres compteurs si le coeur vous en dit. 

 

Import du modèle de compteurs de performances sur le serveur

Un fois le fichier de modèle perfmon généré, allons l’importer sur le serveur à analyser.

Lançons perfmon.exe et allons dans la section User-Defined

perfmon2

Click droit et sélectionnons New, Data Collector Set

perfmon3

Spécifions un nom explicite pour retrouver facilement la trace

perfmon4

Sélectionnons Browse pour importer le modèle que nous avons créé sur le poste de travail et copié sur le serveur.

perfmon5

Un œil fin aura remarqué que j’aurai pu utiliser également un scénario “Active Directory Diagnostics” déjà inclut dans l’OS. Mais celui ci fait un peu plus que prendre des traces perfmon (en fait, il prend un dump de la configuration de la base de registre et démarre une trace ETL, ce dont je n’ai pas besoin et qui a aussi un impact de performances).

Je confirme donc l’import du fichier XML.

perfmon6

J’utilise le modèle “PAL” défini dans le fichier XML.

perfmon7

Stockage à l’emplacement par défaut.

perfmon8

Utilisation du compte par défaut

perfmon9

La collecte est prête et stoppée.

perfmon10

Lorsque nous cliquons deux fois, nous pouvons vérifier la liste des compteurs inclus dans ce modèle ainsi que l’intervalle de capture.

perfmon11

 

Capture de compteurs de performance

Nous sommes prêts à prendre notre première capture. Nous vérifions dans un premier temps les propriétés définies dans la capture :

capture1

Une description du scénario.

capture2

Spécifions une limite de taille pour le fichier ainsi qu’une durée dans le temps. Pour une prise de compteurs perfmon, 500 MO, c’est plutôt large, on utilisera des valeurs plus petites lorsque l’espace disque est limité.

capture3

Je peux lancer ma première capture.

capture4

Je vois bien que la capture commence dans le repertoire attendu, c’est là que j’irai chercher le fichier BLG pour analyse.

capture5

Nous sommes partis pour une heure de capture, allons prendre un café et faire connaissance avec les nouvelles stagiaires de la compta.  

config

De retour sur le serveur, il nous faut vérifier quelle version d’OS on exécute et de combien de RAM est-il doté. Ceci sera utile quand nous lancerons l’analyse des compteurs de performance.

 

Analyse automatisée

On récupère le fichier de capture dans le répertoire que l’on a localisé (c:\perflogs)

BLG1

L’étape suivante consiste a analyser le fichier de log généré par perfmon. Le premier contact lorsqu’on double clique sur le fichier n’est pas forcément très engageant :

BLG2

On a mieux pour analyser tout cela : retournons dans PAL. Pour cela, copions le fichier BLG sur notre machine cliente et lançons à nouveau l’outil.

PAL1

Déroulons l’assistant, la première étape consiste à lui fournir le fichier de capture que nous avons pris (le fichier .BLG)

APAL1

Nous validons le modèle Active Directory, cette fois pour l’analyse.

APAL2

Sélectionnons l’OS qui est utilisé :

APAL3

Sélectionnons la quantité de RAM installé sur le serveur :

APAL4

Par défaut, laissons le choisir sa fréquence d’analyse :

APAL5

Le rapport sera généré dans le répertoire PAL Reports de l’utilisateur actif :

APAL6

Voici la commande PowerShell qui est lancée automatiquement à la fin de l’assistant :

APAL7

On choisi de l’exécuter immédiatement, mais on peut l’ajouter en file d’attente :

APAL8

Exécution de l’analyse et création du rapport qui prend quelques minutes :

APAL9

Une fois le fichier de rapport généré, à vous de partir à l’aventure de son exploration

APAL10

Et Voilà

Je commence toujours par la vue chronologique au début du fichier qui permet de voir ce qui s’est passé dans l’intervalle :

image

On voit dans mon exemple un certain nombre de points rouges et jaunes plus ou moins critiques.

Ici je vois que mon LDAP Bind Time est un peu lent, avec une moyenne de 16 ms. Ceci veut dire qu’un utilisateur qui se connecte au serveur LDAP sur ce serveur a un délai de réponse moyen de 16 ms (ceci n’inclus pas la latence réseau, et donc tout cumulé, ceci peut être considéré comme un peu lent).

Si je corrobore avec d’autres éléments, on voit que le disque sur lequel est stocké AD est également un peu lent avec en moyenne 18 ms pour les écritures et 9 ms pour les lectures : on a donc un coupable tout désigné pour les performances de mon AD.

Ceci n’a pas l’air dramatique, mais c’est vraiment un serveur à surveiller, à fortiori on observe des pics importants :

APAL12

Dans les détails du rapport, je peux observer les compteurs plus précisément :

NTDS_LDAP_Bind_Time0

PhysicalDisk_Avg_Disk_sec_Read0

PhysicalDisk_Avg_Disk_sec_Write0

Ce qui est très sympa également avec PAL, c’est que le rapport généré vous décrit les compteurs utilisés et les valeurs qui sont importantes pour ces compteurs, bref une vraie mine d’or !

Voilà pour cette petite introduction à PAL, j’espère vous avoir initié à des plaisirs insoupçonnés autour de l’analyse de performance de serveurs. Il existe bien d’autres outils, que l’on détaillera dans d’autres articles !

Si vous souhaitez plus d’informations sur le dépannage d’Active Directory et des performances, vous pouvez aussi retrouver un cours dédié sur la Microsoft Virtual Academy : Active Directory – Dépannage et mécanismes internes http://www.microsoftvirtualacademy.com/training-courses/active-directory-depannage-et-mecanismes-internes-fr

Encore plus de cours sur la Microsoft Virtual Academy : https://aka.ms/MVAFR

Egalement à suivre, le blog de Clint Huffman http://blogs.technet.com/b/clinth/ 

Arnaud Lheureux

SMB 3.0: Introduction au Multicanal

Dans Windows Server 2012, vous aurez remarqué que nous avons massivement investi pour donner au protocole de partage de fichiers que nous utilisons tous les jours une ambition supplémentaire : supporter toutes vos applications les plus exigeantes (hébergement de machines virtuelles, de bases de données SQL Server 2012, etc.)

Pour cela, le multicanal SMB est un aspect fondamental : offrir aux machines la possibilité d’un accès aux partages de fichiers de manière redondée (un peu comme du multipath IO) ou en agrégeant la bande passante des connexions disponibles sur la machine. Concrètement il s’agit donc dans un dialogue SMB d’établir plusieurs sessions pour accélérer les accès aux fichiers distants en accord avec les capacités de la machine cliente et du serveur.

Prérequis

Pour pouvoir mettre en œuvre le multicanal de SMB il vous faudra au moins deux machines Windows Server 2012 et/ou Windows 8 qui ont au choix:

  • Plusieurs cartes réseau
  • Au moins une carte réseau qui supporte RSS (Receive Side Scaling)
  • Au moins une carte réseau qui supporte RDMA (Remote Direct Memory Access)

 

Détection du multicanal SMB

Lorsque le client SMB va initier un dialogue avec un serveur, cela commence comme d’habitude par un établissement de session TCP sur le port 445 suivi d’un SMB Negotiate en SMBv1 (frame 1038 sur la capture ci-dessous). La capacité de SMB 3.0 va être annoncé par le serveur ce qui va faire que le client bascule automatiquement en réponse avec le protocole SMB3.0 (techniquement SMB3.0 n’est que SMB2.2 mais il y a tellement de nouveautés dans le protocole qu’on s’est dit au final qu’un incrément de version était bien mérité)

smbnego

Une fois cette bascule en SMB30 effectuée et la connexion établie (Session Setup complété), si le client supporte le multicanal, il va demander au serveur la liste de ses interfaces et de leurs capacités (en matière de bande passante notamment, mais aussi la possibilité de faire du RDMA – Remote Direct Memory Access). Charge au client de tester les différents chemins possibles pour atteindre les différentes interfaces. Ceci va s’effectuer quelques secondes après la connexion initiale et en fonction de la qualité du lien (latence et taille de la fenêtre TCP).

 

Evaluation des chemins

Un fois les connections établies, la machine va réévaluer le chemin toutes les 10 minutes ou lorsque les évènements suivants se produisent:

  • déconnection d’un câble réseau
  • perte de connexion
  • modification de la configuration SMB multicanal

 

Calculs des canaux à disposition

Pour une relation client/serveur, il y aura toujours une limite maximale de 8 connections concourantes et la création des connections va se baser sur le type de carte réseau impliquée comme suit:

Type d’interface réseau Nombre maximal de connexions établies
Interface standard 1 connexion TCP
Interface supportant RDMA 2 connexions RDMA
Interface supportant RSS 4 connexions TCP

 

Multicanal a une carte

Commençons par un cas simple: le multicanal a une carte. Pourquoi faire ? Avec des cartes réseau a très forte bande passante et faible latence, lorsque l’on copie des gros fichiers tout va bien car on ne perd pas de temps en aller-retour pour effectuer les transactions et l’on remplit aisément la fenêtre TCP. En revanche lorsque l’on copie des petits fichiers, établir plusieurs connections TCP sur les différents cœurs CPU va permettre de mener de front plusieurs transactions et donc de tirer partie au maximum de la bande passante du lien.  Dans l’implémentation actuelle, ceci ne se passe que sur des cartes à minimale 10GbE.

 

Multicanal a plusieurs cartes

L’utilisation du multicanal a plusieurs cartes va se faire dans les conditions énumérées précédemment en considérant l’ensemble des NICs avec des capacités égales. Si l’on a une carte 10GbE et une carte 1GbE, il est plus pertinent de n’utiliser que la carte 10GbE sans chercher à multiplexer avec la carte 1GbE.

 

Multicanal, et teaming

Le multicanal et la mise en équipe des cartes réseaux de Windows Server 2012 sont cumulatif. La mise en équipe de carte réseau permet d’agréger des liens au niveau logique dans NDIS (couches basses) pour n’avoir qu’une seule carte logique exposant plusieurs cartes physiques. Combiner les deux technologies permet de cumuler les bénéfices et de monter encore plus en charge dans la mesure ou une team ne correspondra alors qu’à une interface réseau du point de vue de l’évaluation des chemins par le système.  

 

Commandes utiles

Voici quelques commandes permettant de diagnostiquer le comportement d’un système.

Dans un premier temps il est fondamental de vérifier les capacités RSS avec les commandes suivantes:

  • Get-NetAdapter – affiche la liste des interfaces réseau
  • Get-NetAdapterAdvancedProperty – affiche la liste des interfaces réseau et leurs capacités
  • Get-NetAdapterRSS permet de lister les files RSS associées aux cartes dans le système

 

Il est ensuite intéressant de vérifier les capacités du composant serveur comme du composant client SMB:  

Get-SmbServerConfiguration -  

get-smbserverconfiguration

Get-SmbClientConfiguration

get-smbclientconfiguration

Get-SmbServerNetworkInterface – est sans doute la commande la plus importante car elle permet de lister les interfaces liées au serveur SMB et leurs capacités RSS.

get-smbservernetworkint

Get-SmbClientNetworkInterface – est l’équivalent côté client de la commande précédente :

get-smbclientnetworkint

 

Get-SmbMultichannelConnection – Permet de voir l’état dynamique des connections établies

Get-SmbMultichannelConnectionFL

 

*** SECTION JACKY TUNING ***

Enfin notons que même si les réglages par défaut du groupe produit ont été testés pour être les plus favorables dans les cas communs, il est possible de paramétrer le nombre de connections utilisées avec les commandes suivantes:

Set-SmbClientConfiguration –MaximumConnectionCountPerServer <n>

Set-SmbClientConfiguration -ConnectionCountPerRssNetworkInterface <n>

 

Il est également possible de personnaliser le comportement du multicanal entre plusieurs serveurs pour forcer l’utilisation de certaines cartes et en exclure d’autres. Il faudra alors utiliser les commandes suivantes:

New-SmbMultichannelConstraint -ServerName <monserveur> -InterfaceAlias <macarte1>, <macarte2>

 

 

Exemple avec trace

Etudions un cas simple dans mon environnement de test représenté comme suit:

simplelab

 

La configuration est la même que celle utilisée dans les commandes précédentes. Depuis member01, on va établir une connexion depuis l’Explorateur de fichiers vers member02. En parallèle Microsoft Network Monitor nous permet de suivre ce qui se passe.

1. Première session depuis member 01:

netmon1

Dans les frames 1035 à 1037, on voit l’établissement de session TCP entre member01 par sa première adresse IP (192.168.42.20) et member02, puis l’initiation du dialogue SMB.

 

2. Deuxième, troisième, quatrième sessions:

netmon2

Si on descend dans la trace, on observe que 3 établissements de sessions vont suivre depuis notre même adresse IP source de member01 (les frames 1087-1089, 1092-1094, 1099,1102 et 1103)

 

3. Cinquième, Sixième, Septième et huitième sessions:

netmon3

Un peu plus loin dans la session, on voit que member01 va commencer à établir de nouvelles sessions sur sa deuxième carte réseau avec l’adresse IP source 192.168.42.132, avec le serveur member02. Il s’agit des frames 1260-1262, 1265-1266 et 1268; 1272 et 1274-1275 et la dernière que l’on ne voit pas ce la capture d’écran (mais vous me faites confiance non?)

 

Explications:

Comme on peut le voir dans cette capture on a deux interfaces 10GbE, compatibles RSS sur member01. On sait que chaque interface RSS pourra établir 4 connections TCP et qu’au total une relation client/serveur ne peut avoir que 8 connections TCP simultanées. On a donc bien mis en œuvre le multicanal, sans rien avoir configuré. Dans cette configuration, cela nous permettra d’avoir par exemple de bien meilleures performances sur la copie de fichiers en comparaison avec les versions précédentes de Windows (pour des benchmarks, voir la section référence de cet article).

 

Suivi à la trace

Journaux d’évènements

Les erreurs peuvent être trouvés dans les journaux d’évènements pour la partie cliente et la partie serveur:

  • Application and Services Log, Microsoft, Windows, SMB Client – Operational
  • Application and Services Log, Microsoft, Windows, SMB Server – Operational

 

Compteurs de performance

On notera que Windows Server 2012 sait désormais nous montrer des compteurs de performance propres à chaque partage et non plus seulement de manière globale pour le serveur. On peut ainsi obtenir des informations avancées par chacun des partage en utilisant les compteurs SMB Client Shares ainsi que SMB Server Shares.

 

Traces unifiées

Enfin, quand plus rien ne va, il reste toujours les traces unifiées pour déterminer les raisons d’un comportement suspect :

netsh trace start scenario=filesharing capture=yes

<repro du problème>

netsh trace stop

Et envoi du package a votre ingénieur support préféré !

 

Pour références:

– MSDN Protocol documentation: [MS-SMB2]- Server Message Block (SMB) Protocol Versions 2 and 3

– Windows 8 SMB 2.2 File Sharing Performance – http://msdn.microsoft.com/en-us/library/windows/hardware/hh457617 

– Vidéo : Windows Server 2012 NIC Teaming and Multichannel Solutions – https://channel9.msdn.com/Events/TechEd/NorthAmerica/2012/WSV314 

– The basics of SMB Multichannel, a feature of Windows Server 2012 and SMB 3.0-  http://blogs.technet.com/b/josebda/archive/2012/05/13/the-basics-of-smb-multichannel-a-feature-of-windows-server-2012-and-smb-3-0.aspx

 

Enfin, pour tester Windows Server 2012, vous pouvez télécharger gratuitement la version d’évaluation disponible sous la forme :
– d’une image ISO : https://aka.ms/jeveuxwindows2012
– d’un fichier VHD avec un système préinstallé : https://aka.ms/jeveuxwindows2012

 

Arnaud Lheureux

SR-IOV en pratique dans Windows Server 2012

Une des grandes nouveautés pour la virtualisation et les meilleures performances dans Windows Server 2012 est le support de SR-IOV. Cette norme qui fait partie du PCI-SIG n’est pas propre au réseau, mais elle permet d’une manière générale de simplifier le chemin des IO entre une machine virtuelle et les ressources de sa machine physique. Avec des cartes réseaux de plus en plus puissantes, on pense au 40GbE et même au 100GbE qui pointent le bout de leurs nez, ce n’est donc plus la bande passante qui est le souci mais le volume de données, les temps de latence dans le filtrage et la simplification des gestions des IO.

 

Schématiquement voici comment se présente SR-IOV:

WS 2012 Deck_Networking

Ce schéma extrêmement simplifié montre qu’une carte réseau compatible SR-IOV va exposer au système un certain nombre de Virtual Functions qui seront autant de slots que pourront consommer des machines virtuelles connectées sur la machine physique.

Pour faire fonctionner SR-IOV, il ne suffit pas d’une carte réseau SR-IOV, on doit vérifier également quelques prérequis :

  • Support de la fonctionnalité par la carte réseau (notons les cartes Intel Gigabit ET Dual Port, ainsi que Gigabit ET2 QuadPort que nous utilisons pour cet article)
  • Un driver et un firmware bien mis à jour (même si les pilotes de Windows reconnaissent votre carte réseau, installez ceux du constructeur pour bénéfice de toutes les fonctionnalités ET n’oubliez pas de les mettre à jour régulièrement.)
  • Support du chipset pour IOMMU (Input/Output Memory Management Unit, voir références plus bas)
  • Support du SLAT (Second Level Address Translation)

 

Vérifications sur la partition parent

Avec les pilotes réseau par défaut de Windows, vérifions la présence de la section SRIOV dans les fonctionnalités avancées de la carte au sein du gestionnaire de périphériques:

 WindowsDRV1

 

Dans notre exemple nous utilisons les cartes carte Intel Gigabit ET Dual Port, ainsi que Gigabit ET2 QuadPort. Lorsque l’on installe les drivers Intel on a beaucoup plus d’options et notamment un contrôle plus fin sur l’utilisation de SR-IOV et VMQ :

IntelDRV1IntelDRV2

 

Une fois les fonctionnalités activés au niveau du périphérique, vérifions les capacités exposées par la carte réseau à l’aide de la commande PowerShell:

 Get-NetAdapterSriov

verifcarte

Premier élément à vérifier est le support de SR-IOV, dans notre cas c’est supported, mais dans d’autres cas on aura un message d’erreur indiquant la raison pour laquelle cela ne fonctionne pas.

Autres éléments intéressants le nombre total de VF exposées par la carte (NumVFs) et le nombre déjà consommées sur le système (NumAllocatedVFs) .

 

Configuration de la partition parent

Une fois tout cela vérifié, il faudra l’activer sur le Switch Virtuel ainsi que sur les cartes réseaux virtuelles des VM qui doivent profiter de la fonctionnalité.

Cela se fait dans le gestionnaire de réseaux virtuels de Hyper-V:

Switch

 

Ensuite pour chaque VM dans les options d’accélération matérielles de la carte virtuelle:

VM

 

De la même manière on peut vérifier en Powershell l’effectivité de SR-IOV sur le switch en utilisant la commande:

Get-VMSwitch

PshellSwitch

La case cochée dans l’interface graphique est ici représentée par IovEnabled.

IovSupport et IovSupportReasons permettront de comprendre ce qui se passe réellement : si il y a un problème avec la fonctionnalité et quelle en est l’origine.

 

Vérification sur les machines virtuelles

Une fois tout cela effectué, on peut vérifier le fonctionnalité premièrement dans le gestionnaire de périphériques de la VM avec l’apparition d’une "carte réseau" supplémentaire:

VF

Sur la machine physique, on peut aussi s’assurer du fonctionnement de l’ensemble dans le gestionnaire Hyper-V, dans l’onglet Networking de la VM:

HV-Net

 

Notons que lorsqu’on utilise les fonctions du switch Hyper-V telles que les ACL réseau entre machines virtuelles, cela désactive automatiquement SR-IOV pour passer par le chemin classique des IO réseau.

Dans un prochain article nous étudierons le cas d’une machine qui ne support pas SR-IOV et comment en déterminer les raisons avec Powershell et les journaux d’évènements! 

 

Pour plus d’informations sur SR-IOV :

IT Pro :

Excellent série d’article de John Howard dont je me suis inspiré: http://blogs.technet.com/b/jhoward/archive/2012/03/12/everything-you-wanted-to-know-about-sr-iov-in-hyper-v-part-1.aspx 

A BIOS update may be required for some computers to install the Hyper-V Role and/or start Hyper-V virtual machines – http://support.microsoft.com/kb/2762297

Yellow bang in device manager if SR-IOV NIC is moved to noncapable slot on Windows Server 2012 – http://support.microsoft.com/kb/2756208

Building Your Cloud Infrastructure: Non-Converged Data Center Configuration – http://technet.microsoft.com/en-us/library/hh831559.aspx

 

Architecture :

Overview of Single Root I/O Virtualization (SR-IOV) – http://msdn.microsoft.com/en-us/library/windows/hardware/hh440148(v=vs.85).aspx

Writing SR-IOV PF Miniport Drivers – http://msdn.microsoft.com/en-us/library/windows/hardware/hh440298(v=vs.85).aspx

Writing SR-IOV VF Miniport Drivers – http://msdn.microsoft.com/en-us/library/windows/hardware/hh440299(v=vs.85).aspx

Intel’s Virtualization for Directed I/O, a.k.a IOMMU-  http://software.intel.com/en-us/blogs/2009/03/02/intels-virtualization-for-directed-io-aka-iommu-part-1/

 

Et toujours, si tu veux Windows Server 2012, c’est par ici: https://aka.ms/jeveuxWindows2012

 

Arnaud