La gestion de la QoS sur nos chères VNX (ou CX avant elles) a toujours été un domaine assez “obscure” ou en tout cas d’un accès moins évident que le simple usage d’Unisphere pour le provisionnement et l’administration au quotidien. En effet, il faut prendre des précautions avec cet outil : d’une part cette fonction est en général réservée à un public averti car il faut bien maîtriser les concepts associés et d’autre part l’impact sur le fonctionnement général de la baie en cas de mauvais paramétrage peut-être très important.
Sans me substituer aux ingénieurs EMC spécialisés sur le domaine, je vous propose une petite découverte de cette fonction QoS, histoire de démystifier un peu son usage et vous permettre au moins d’évaluer son potentiel.
La première chose qu’il faut savoir sur la QoS des VNX, c’est que globalement, elle s’oriente plutôt sur des fonctions de limitation que de priorisation. Plus précisément, la plupart des politiques que vous pourrez implanter auront un effet limitant sur la ou les I/O ciblées. Il est plus difficile de prioriser spécifiquement une LUN ou des I/Os par rapport aux autres. Dans la pratique, si vous souhaitez réellement booster une application, il faut “inverser le problème” et plutôt tenter de brider celles qui la pénalise.
Avant de rentrer dans le vif du sujet, d’abord quelques concepts pour bien appréhender les fonctions du QoS Manager :
Classe d’I/O (I/O Class) : Une classe d’I/O est l’élément de base d’une QoS au sens VNX. L’I/O Class définit l’ensemble des critères permettant de spécifier le périmètre sur lequel on va appliquer une QoS particulière. La sélection peut porter sur une liste de LUN, un type d’I/O (lecture/écriture/les deux), la taille des I/O concernées. Une fois les critères renseignées, vous devez définir une cible à atteindre. Trois cibles sont possible : Limit, Fixed Queud et Cruise Control.
Cible (Goal) : la cible est renseignée dans une I/O Class et correspond au type de comportement à appliquer en fonction des critères définis. La cible “Limit” permet de fixer une limite à un metric particulier (bande passante, latence, nombre d’I/O). La cible “Cruise control” permet de niveler un metric autour d’une valeur “idéale”, l’exemple typique est la latence. Enfin, la cible “Fixed queue depth” permet de limiter artificiellement le nombre d’I/O en attente dans la ou les queues de chaque LUN sélectionnée. cette dernière cible est à réserver à des usages très particuliers car elle répond à des contraintes spécifiques et plutôt destinée à un public averti.
Politique (Policy) : un regroupement de classes d’I/O définissant un comportement général. Vous pouvez définir autant de politiques que vous voulez mais seule UNE politique est active à un instant T. Si vous souhaitez faire évoluer la politique de votre baie au cours du temps, vous avez à votre disposition un scheduler pour ordonnancer tout cela. De plus, une politique donnée ne peut contenir qu’un seul type de “Cible”. Par exemple, vous ne pouvez pas mixer un “Cruise Control” avec un “Limit”.
La section QoS des VNX est accessible via Unisphere par le menu “System”, en choisissant l’option “QoS Manager” :
La plupart des fonctions QoS sont directement accessible depuis le Control Panel. Vous disposez d’un assistant “Policy Builder”, mais personnellement, je préfère passer par toutes les étapes manuellement, cela permet de vraiment comprendre tous les concepts et mécanismes associés. Lorsque que vous accédez au Control Panel, vous allez retrouver une fenêtre avec les onglets suivants :
Monitor: section dédiée au suivi temps réel de l’application des politiques définies
I/O Classes : section dédiée à la création de “classes d’I/O”, les différens ordres que vous allez donner à la baie, on y reviendra
Policies: section dédiée à la gestion des politiques à appliquer
Schedule: section permettant de gérer l’application de politiques différentes suivant un calendrier précis
Settings : paramètres généraux du QoS Manager
Prenons un exemple concret pour fixer les idées et avoir un cadre pratique à l’application d’une QoS simple sur une VNX. Une application utilisant un LUN spécifique exécute régulièrement des batchs qui ont pour particularité de générer de très grosses I/O en lecture et pénalisent la bande passante globale disponible. Chaque nuit, des pics de 500 ou 600 Mo/s sont constatés sur le pool où se trouve la LUN en question. Nous souhaitons artificiellement limiter la bande passante maximum disponible sur ce volume à un “plus raisonnable” 200 Mo/s.
La première chose à faire c’est donc de créer une I/O Class qui va d’une part sélectionner la LUN source et d’autre part définir une limite de bande passante pour celle-ci. Pour se faire, dans le Control Panel, section “I/O Classes”, nous allons créer un nouvel enregistrement :
Vous notez ici les différents critères de sélection : grosses I/O (supérieures à 32 Kb), I/O en lecture uniquement, LUN sélectionnée.
Une fois ces critères remplis, on définit maintenant une cible dans l’onglet “Goal” :
On a choisi la cible “Limit” puis le metric “Bandwidth” et fixé le seuil maximum à 200 Mo/s.
Enfin, on applique ces modifications pour créer la classe d’I/O. Ce qui donne dans la section ad-hoc :
Une fois la classe crée, nous allons définir une politique contenant cette classe. Dans la section “Policies”, on va utiliser le bouton “Create Policy” et renseigner les informations nécessaires :
Ici, c’est relativement simple car nous n’avons défini qu’une seule I/O Class, mais on peut tout à fait imaginer un ensemble de plusieurs classes qui forme la politique à appliquer. Les paramètres en fin de boite de dialogue permettent d’ajuster les critères d’application de la politique. En effet, lorsque vous allez ordonner à la baie d’appliquer celle-ci, les contrôleurs vont mettre un certain temps à ajuster leurs paramètres internes pour obtenir l’effet désiré. Pour se faire, on peut faire varier le temps, la fenêtre d’évaluation et, au final, la décision à prendre en cas d’échec. Il est possible que certaines politiques soient inapplicables ou non atteignables ; dans ces conditions, on indique à la machine ce qu’elle doit faire : continuer, stopper la politique ou passer en mode mesure uniquement (j’en parlerais plus tard).
Pour notre exemple, nous allons laisser les paramètres par défaut (qui, dans l’ensemble fonctionnent très bien sans y toucher). Une fois appliquée, vous allez retrouver votre politique dans la section :
Il peut être utile, avant d’activer une politique, de procéder à une première phase de mesure uniquement. Pour se faire, vous disposez du bouton “Measure” à coté du bouton “Run”, qui va vous aider à comparer vos choix de QoS avec la réalité en temps réel. En effet, étant donné la combinatoire possible, il est plus raisonnable de vraiment évaluer l’applicabilité d’une politique avant de l’implanter réellement. Une fois le mode mesure activé, rendez-vous dans la section “Monitor” pour vérifier tout cela graphiquement :
Sur les graphiques sont représentés l’ensemble des classes d’I/O définies dans la politique actuellement mesurée ainsi que la “Background class” qui regroupe toute l’activité hors du scope de sélection de la politique. Vous pouvez noter que la fameuse limite de 200 Mo/s crée dans notre I/O Class est matérialisée sur les graphiques, ce qui permet de suivre plus facilement l’adéquation de nos règles avec l’activité globale de la baie.
Une fois ces mesures réalisées, vous pouvez enfin démarrer cette politique, voir l’ordonnancer via le scheduler intégré (voir section Schedule). le bouton “Run” vous permet de la mettre en oeuvre réellement.
Evidemment, cette présentation n’a fait qu’effleurer les possibilités du QoS manager des VNX. Si vous souhaitez mettre en place des comportements complexes, je ne saurais que trop vous conseiller malgré tout de faire appel à un spécialiste du sujet. Par contre, si l’objectif est juste de “calmer les ardeurs” d’une ou plusieurs applications particulières, un peu trop gourmandes en IOps ou en bande passante, c’est un outil à considérer pour assurer le meilleur service à vos applications et utilisateurs au quotidien.
A votre disposition pour échanger, comme toujours sur ce sujet passionnant.