Ralentissement des performances du disque sur la machine virtuelle Azure

9

D'accord, alors tout d'abord, permettez-moi de dire que je ne suis pas un opérateur, mais un développeur. Je vais donc dans un peu de terre inconnue ici, alors soyez indulgent avec moi.

Je souhaite utiliser une machine virtuelle Azure pour extraire un fichier XML de 50 Go à partir d'un fichier zip de 1,9 Go. J'ai donc testé la taille d'instance sur Azure que je devrais utiliser pour obtenir de bonnes performances tout en ne payant pas plus que ce dont j'ai besoin.

Cependant, les performances du disque des machines virtuelles Azure n'ont pas été incroyables, et je voudrais savoir si c'est moi qui fais quelque chose de mal, ou si mes résultats sont ce à quoi on peut s'attendre.

Tout d'abord, avec quoi ai-je testé? J'ai une application de console .NET personnalisée qui ne fait que prendre un fichier zip comme argument et commence immédiatement à extraire le fichier zip dans le même répertoire que le fichier zip. Pendant que l'extraction se poursuit, l'application calcule le nombre de mégaoctets l'application a écrit dans le fichier cible par seconde et l'a édité.

Sur ma machine de développement local, j'obtiens de très bonnes performances avec cette application, 160-210 Mo / s écrite. Ainsi, l'ensemble du processus d'extraction prend environ 8 minutes. Les spécifications de ma machine locale sont Intel Core i7 950, 3 GHz, 4 cœurs (8 logiques), 12 Go de RAM, Samsung SSD 830 series 250 Go.

D'accord, j'ai donc commencé à tester différentes tailles d'instances, et voici mes résultats.

  • Sur une instance A4 avec Windows Server 2012 Datacenter R2 (8 cœurs, 14 Go de RAM) avec un RAID rayé de 4 disques virtuels utilisant le même compte de stockage, sans mise en cache de l'hôte, j'ai obtenu une stabilité de 30 à 35 Mo / s, ce qui signifie que l'ensemble l'extraction a pris 24 minutes et 48 secondes. J'ai également essayé d'activer la mise en cache de l'hôte, mais cela n'a pas vraiment fait de différence.
  • Sur une instance D4 avec Windows Server 2012 Datacenter (8 cœurs, 28 Go de RAM, 500 Go de disque SSD local), j'ai obtenu de très bonnes performances (150+ Mo / s) pendant les premières minutes, puis des performances variables avec des pics à 200 Mo / s et vallées à 9 Mo / s. Les performances moyennes se situaient entre 70 et 100 Mo / s. L'extraction a pris 9 min et 40 secondes.
  • Sur une instance D3 avec Windows Server 2012 Datacenter (4 cœurs, 14 Go de RAM, 250 Go de disque SSD local), j'ai obtenu de très bonnes performances (150+ Mo / s) la première minute, mais ensuite les performances ont baissé pour se stabiliser à 20-40 Mo / s, ce qui rend le processus d'extraction prendre 21 minutes et 49 secondes.

Sur une instance D2 et D1, les performances du disque sont pires que sur le D3.

Et cela me surprend vraiment. Comment un disque SSD local peut-il fonctionner si mal, comme il le fait sur les instances D1, D2 et D3? Et quelqu'un sait-il pourquoi les performances du disque diffèrent tellement entre D1 et D4? Est-ce un problème de mémoire? Lorsque je regarde le gestionnaire de tâches pendant l'extraction, la consommation de mémoire explose. Je soupçonne que c'est parce que Windows met en cache les données écrites, mais lorsqu'il manque de mémoire, il doit vider les données sur le disque. Lorsque cela se produit, les performances du disque diminuent. Mais cela ne se produit pas sur ma machine locale, alors pourquoi une mise en cache aussi agressive est-elle nécessaire sur ces machines virtuelles?

Je sais qu'il y a des différences entre ma machine locale et une machine virtuelle hébergée dans Azure, mais est-ce que les performances du disque que je connais sont vraiment à prévoir?

(J'ai initialement posté ma question sur Stackoverflow , car je soupçonnais que c'était ma candidature qui en était la cause. Mais je n'en suis plus si sûr)

René
la source

Réponses:

7

Un peu tard pour la fête ici, mais pour ce que ça vaut, les SSD "attachés" dans Azure ont leurs IOP limités en fonction de la taille de la machine. Cela n'a été mentionné dans les prix nulle part, mais j'ai soulevé ce problème comme un ticket avec le support technique quand ils m'ont référé au blog ci-dessous.

Voir ce lien: http://azure.microsoft.com/blog/2014/10/06/d-series-performance-expectations/

Richard Hauer
la source
Grande info, merci Richard! Je soupçonnais que cela avait à voir avec la limitation, mais je ne pouvais à ce moment-là trouver aucune information spécifique à ce sujet. Ce billet de blog répond à mes questions.
René
disque de limite azur io..ce que diable..Je passe à Google Cloud ..ils ne limitent pas cela et le prix est beaucoup moins cher.
tyan
4

Peut-être que ce n'est pas lié à la mémoire. Les disques "physiques" sur Azure utilisent ce qu'on appelle le stockage Blob et c'est la raison pour laquelle les performances ne sont pas les mêmes que sur votre ordinateur local, même avec un matériel similaire. Vous pouvez trouver plus d'informations sur ce lien . Cela semble être un problème courant pour la communauté SQL Server qui dépend fortement des performances du disque. Je citerai un article que j'ai trouvé à ce sujet

Le livre blanc sur les performances de SQL Server dans les machines virtuelles Azure mentionne (aux pages 15 et 26) que dans les machines virtuelles Azure, les espaces de stockage peuvent être utilisés pour améliorer les performances de stockage des charges de travail SQL Server

Les espaces de stockage sont une fonctionnalité intégrée de Windows Server 2012 qui vous permet d'utiliser plusieurs disques physiques pour créer un seul disque virtuel, donc comme solution de contournement pour les limitations d'E / S du disque VM lui-même. Citant encore:

Avec des machines virtuelles plus grandes qui prennent en charge de nombreux disques physiques (jusqu'à 16), une augmentation très significative des performances de stockage est possible. Cela peut activer Azure en tant que plate-forme viable pour de nombreuses charges de travail SQL qui seraient autrement trop limitées par les performances d'E / S d'un seul disque Azure.

Cet article vous montrera les étapes pour créer un espace de stockage.

Vous devriez essayer ceci en premier. Vous pouvez probablement même utiliser une instance plus petite car le service de stockage est un service distinct de l'instance elle-même.

Bruno Faria
la source
Vous avez raison de dire que les disques standard sur Azure utilisent réellement le stockage Blob, mais je ne pense pas que ce soit le cas avec les disques SSD. Selon les informations fournies à Microsoft, il s'agit de disques SSD physiques locaux. Et quand c'est le cas, je pense que c'est étrange que les performances diffèrent tellement entre les tailles d'instance D. En ce qui concerne les espaces de stockage: j'ai exploré cela et fait quelques tests, mais malheureusement, cela ne m'a pas vraiment apporté de gain de performance notable. En fin de compte, je suis arrivé à la conclusion que je dois juste accepter que je dois utiliser une taille d'instance plus grande pour cette tâche.
René
1
@ René, avez-vous eu l'occasion de tester le nouveau Azure Storage Premium? Désolé d'avoir heurté ce vieux sujet, mais je suis assez curieux de voir comment ce nouveau stockage fonctionnerait dans votre environnement.
Bruno Faria
Désolé pour ma réponse tardive. Bon conseil sur Azure Storage Premium. Je ne l'ai pas essayé car il n'est pas encore disponible dans ma région. Mais je garderai un œil dessus. Merci encore!
René