Tendance précise des performances d'E / S aléatoires pour la planification de la capacité

11

Là où je travaille, nous avons de nombreux serveurs "big iron" qui sont utilisés pour héberger de nombreuses machines virtuelles à l'aide d'un hyperviseur Xen. Ceux-ci sont généralement configurés avec 32 Go de RAM, des processus Dual Quad core et des disques rapides avec des quantités de capacité d'E / S.

Nous sommes au point où la configuration matérielle existante devient un peu longue dans la dent et il est temps de sortir et de trouver du nouveau matériel plus gros, plus rapide et plus brillant.

Comme mentionné ci-dessus, le kit existant a été déployé avec 32 Go de RAM et cela a effectivement limité le nombre de machines virtuelles que nous pouvons déployer sur un hôte.

En étudiant les nouveaux matériels, il est évident que vous pouvez obtenir de plus en plus de RAM sur une seule machine avec 64, 72 ou même 96 Go dans un seul châssis. Évidemment, cela nous permettra d'obtenir plus de machines sur un hôte donné, ce qui est toujours une victoire. L'analyse effectuée jusqu'à présent suggère que le facteur limitant sera désormais déplacé vers le sous-système de disque.

Le problème est maintenant d'essayer de se faire une idée d'où nous en sommes ... Grâce à l'utilisation, nous savons que nous ne sommes pas limités en termes de bande passante d'E / S, plus encore, le nombre de I aléatoires / O opérations qui peuvent être terminées. Nous savons anecdotiquement qu'une fois que nous avons atteint ce point, iowait va monter en flèche et toutes les performances de la machine vont aux chiens.

Maintenant, c'est le noeud de la question que je pose, est-ce que quelqu'un est au courant d'un moyen de suivre / tendre avec précision les performances d'E / S existantes spécifiquement en fonction du nombre d'opérations d'E / S aléatoires en cours?

Ce que j'essaie vraiment d'obtenir une métrique est "cette configuration peut gérer avec succès X nombre de demandes d'E / S aléatoires, et nous faisons actuellement (en moyenne) Y op avec un pic de Z op".

Merci d'avance!

Keiran Holloway
la source

Réponses:

5

sarfait bien le travail ici; il collectera le nombre de transactions ainsi que les secteurs lus / écrits par seconde, qui peuvent être utilisés pour ensuite rejouer votre charge de travail d'E / S avec une précision relativement décente (en termes de ratios de lecture / écriture, ainsi que de taille de transaction, qui est la déterminant le degré de "aléatoire" de votre E / S). Ce n'est pas parfait, mais d'après mon expérience, il fait un assez bon travail pour faire le genre d'estimation que vous regardez.

womble
la source
2

Cela ressemble donc à un problème de surveillance et de rapport de capacité. Si vous voulez commencer à mesurer les statistiques de tendance, je passerais à travers, pour que vous puissiez comparer, corréler etc.

En termes d'outils, vous avez des ganglions, des zenoss, des nagios, etc. dans le monde open source et de nombreux autres produits de fournisseurs.

Vous pouvez les configurer pour suivre, mesurer et stocker les KPI qui vous intéressent, puis en faire rapport périodiquement.

Compte tenu de vos requêtes sur l'utilisation de la RAM, il serait logique d'inclure également les statistiques de la mémoire, l'utilisation des swaps et le processeur, de sorte que vous puissiez les comparer à travers le tableau pour la même période et voir ce qui est limité, etc.

Une fois que vous capturez des données, vous pouvez tout stocker dans une belle grande base de données pour les rapports, éventuellement en raréfiant les données historiques, par exemple stocker toutes les 5 secondes métriques pendant 6 mois, puis par minute, puis 5, puis par heure, au fur et à mesure que vous remontez. Ce genre de chose peut être scripté et exécuté via cron, autosys, etc.

Ces rapports vous donneront ce que la direction veut - c'est-à-dire. quelque chose avec de jolis graphiques.

Et pour la gestion quotidienne, vous pouvez consulter des informations en temps réel sur un graphique / chiffres via la console pour voir comment vous vous comportez à un moment donné.

Alex
la source
Merci pour votre réponse. Le plus gros problème que je trouve est en fait de suivre avec précision le nombre d'opérations. -À- dire, tout ce que je suis venu à travers des rapports sur la quantité de données déplacées ou iowait etc etc. Cela ne semble pas tout à fait correspondre à la facture ici ..
Keiran Holloway
2

Nous utilisons collectl car nous pouvons rassembler toutes les informations nécessaires dans un seul fichier et rejouer les statistiques au besoin. Cela vous permettra de voir le nombre d'IOPS par intervalle d'enregistrement, les changements de contexte, les statistiques de la mémoire. Vous pouvez décomposer cela par disque ou simplement avoir une vue d'ensemble du système. Collectl prend également en charge le lustre.

Il s'agit d'un excellent outil pour obtenir un aperçu des performances globales du système. Bonne chance, d'après les observations, les disques SATA dépassent généralement entre 200 et 300 IOPS lors de l'accès aléatoire.


la source
Quelqu'un avait-il beaucoup d'expérience avec les disques SAS à 15 000 tr / min?
Keiran Holloway
2

Nous enregistrons et représentons graphiquement les E / S disque de la même manière que nous effectuons toutes les autres mesures:

  • Les données sont extraites des hôtes à l'aide de SNMP. Nos boîtiers NAS / SAN le font nativement. Nous utilisons net-snmp sur tous les hôtes Linux, qui fournit ces informations depuis USB-DISKIO-MIB .

  • Les données sont stockées (au format RRD) et représentées graphiquement à l'aide de Cacti . Certains modèles Disk IO nous donnent un nombre et une taille de transaction, affichés dans le format courant, moyen et de pointe habituel.

Ces métriques ne sont pas nécessairement aussi finies que l'utilisation de iostat/ dstat/ sarsur un hôte. Mais c'est le feu et l'oublie, qui se configure automatiquement lorsqu'une nouvelle machine est mise en service, stockée de manière centrale et reste disponible pour référence future.

Nous utilisons ces données pour nous alerter des tendances inhabituelles sur une base opérationnelle et y repensons toujours lors de la planification de la capacité.

Ce que j'essaie vraiment d'obtenir une métrique est "cette configuration peut gérer avec succès le nombre X de demandes d'E / S aléatoires [..]".

Il y a quelques problèmes avec ceci:

  • Il est assez difficile de séparer et de quantifier les E / S aléatoires des E / S séquentielles. Puisque la différence fondamentale entre les deux est l'emplacement physique des blocs stockés sur le plateau de disque. Vous pouvez faire une estimation éclairée de la taille des transactions, en partant du principe que de nombreuses petites transactions concernent probablement de petits fichiers parsemés sur le disque. Mais il n'y a aucune garantie. Il peut s'agir de la lecture séquentielle de petites quantités de données à partir d'un seul fichier ou de blocs adjacents sur le disque.

  • L'enregistrement des métriques vous donnera une très bonne image de ce que sont vos engagements aujourd'hui, comment ils ont changé au fil du temps et donc comment ils changeront à l'avenir. Ce qu'il ne vous dira pas, c'est quel est le plafond. Du moins pas avant qu'il ne soit trop tard. Pour déterminer cela, vous devez faire quelques calculs (à partir de vos spécifications matérielles), des analyses comparatives (j'aime beaucoup bonnie++moi - même) et il est utile d'avoir une idée logistique de ce que ces domUs font / sont utilisés pour.

Dan Carley
la source
1

En fonction de votre backend de stockage (IBM SVC / DS8000), vous pourrez peut-être en extraire directement des statistiques relatives aux IOPS aléatoires.

Pour extraire les statistiques du serveur, vous pouvez utiliser nmon . C'est gratuit (comme dans la bière). Développé à l'origine par IBM pour AIX, fonctionne également sous Linux.

MikeyB
la source
Tout le stockage est directement attaché, fonctionnant sur des hôtes Debian. Tout FOSS est bon.
Keiran Holloway
1

Si les gens utilisent SAR, j'espère au moins que vous échantillonnez vos données en quelques secondes. Lorsque j'utilise collectl, j'échantillonne une fois / seconde. En ce qui concerne la mesure de vos performances à des E / S aléatoires, utilisez un outil comme le dt de Robin Miller (google it) et vous pouvez facilement générer BEAUCOUP d'E / S aléatoires, puis mesurer simplement avec collectl pour voir combien vous peut faire par seconde. Un disque typique fait généralement un maximum de 200 à 300 E / S / s, basé à peu près sur la latence de rotation. La taille du bloc a eu un effet minimal car l'attente d'une demi-révolution pour que le disque soit au bon endroit écrase tout le reste.

btw - iowait est l'une des mesures les plus mal comprises. Cela n'a RIEN à voir avec la charge du processeur, cela signifie simplement que le processeur ne faisait rien d'autre pendant que les E / S se produisaient. En fait, si vous êtes à 100%, cela signifie essentiellement que vous êtes à 100% inactif!

-marque


la source