web-dev-qa-db-fra.com

Performances de disque lente sur la machine virtuelle Azure

D'accord, alors tout d'abord, permettez-moi de dire que je ne suis pas une personne d'opérations, mais un développeur. Donc, je vais dans un peu de terres inconnues ici, alors veuillez supporter avec moi.

J'aimerais utiliser une machine virtuelle Azure pour extraire un fichier XML de 50 Go d'un fichier zip de 1,9 Go. J'ai donc testé quelle taille d'instance sur Azure je devrais utiliser pour obtenir de bonnes performances tout en payant plus que nécessaire.

Cependant, la performance du disque d'Azure VM n'a pas été incroyable et j'aimerais savoir si c'est moi qui fait quelque chose de mal, ou si mes résultats sont attendus.

Tout d'abord, ce que j'ai testé avec? J'ai une application de console personnalisée .NET qui ne fait que prendre un fichier zip comme argument et commence immédiatement à extraire le fichier ZIP dans le même répertoire réside dans le même répertoire. Bien que l'extraction se passe, l'application calcule combien de mégaoctets L'application a écrit dans le fichier cible par seconde et la génère.

Sur ma machine de développement local, j'ai une très bonne performance avec cette application, 160-210 MB/s écrit. L'ensemble du processus d'extraction prend donc 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 commencé à tester différentes tailles d'instances et voici mes résultats.

  • Sur une instance A4 avec Datacenter Windows Server 2012 R2 (8 cœurs, 14 Go de RAM) avec un raid rayé de 4 disques virtuels utilisant le même compte de stockage, sans la mise en cache d'hôte, j'ai été stable 30-35 Mo/s, ce qui signifie le tout L'extraction a pris 24 minutes et 48 secondes. J'ai également essayé de permettre la mise en cache hôte, mais cela n'a pas vraiment fait de différence.
  • Sur une instance D4 avec le datacenter Windows Server 2012 (8 cœurs, 28 Go de RAM, disque SSD local de 500 Go) J'ai eu de très bonnes performances (plus de 150 MB/s) pour les premières minutes, puis variant des performances avec des pics à 200 Mo/s et vallées à 9 Mo/s. La performance moyenne était comprise entre 70 et 100 Mo/s. L'extraction a pris 9 min et 40 secondes.
  • Sur une instance D3 avec le datacenter Windows Server 2012 (4 cœurs, 14 Go de RAM, 250 Go de disque SSD local de 250 Go) J'ai eu de très bonnes performances (150+ Mb/s) la première minute, mais la performance a alors diminué pour sténaire 20-40 Mo/s, faire en sorte que le processus d'extraction prend 21 minutes et 49 secondes.

Sur une instance D2 et D1, la performance du disque est pire que sur la D3.

Et cela me surprend vraiment. Comment un disque SSD local peut-il fonctionner si mal, comme sur les instances D1, D2 et D3? Et quelqu'un sait-il pourquoi la performance du disque diffère tellement entre D1 à D4? Est-ce un problème de mémoire? Lorsque je consulte le gestionnaire de tâches pendant que le système d'exploitation d'extraction se passe, l'utilisation de la mémoire explose. Je soupçonne que c'est parce que Windows met la mise en cache des données écrites, mais lorsqu'elle manque de mémoire, elle doit rincer les données sur le disque. Lorsque cela se produit, la performance du disque décline. Mais cela ne se produit pas sur ma machine locale, alors pourquoi la mise en cache aussi agressive est-elle nécessaire sur ces vm?

Je sais qu'il y a des différences entre ma machine locale et une machine virtuelle hébergée à Azure, mais la performance du disque que je connais vraiment à être attendue?

(J'ai initialement affiché ma question sur Stackoverflow , comme je soupçonnais que c'était ma demande qui était la cause. Mais je ne suis plus sûr)

8
René

Un peu tard à la fête ici, mais pour ce que cela vaut la peine de "attacher" SSDS à Azure, les iops sont étrangers basés sur la taille de la machine. Il n'a pas été mentionné dans la tarification nulle part, mais j'ai soulevé cette question comme un billet avec un support technique lorsqu'ils m'ont référé au poste de blog ci-dessous.

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

6
Richard Hauer

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

Le guidage de performance pour SQL Server dans Azure VMS Whitepaper mentionne (les pages 15 et 26) que dans Azure VMS, des espaces de stockage peuvent être utilisés pour améliorer les performances de stockage pour les charges de travail SQL Server.

Les espaces de stockage sont une caractéristique intégrée de Windows Server 2012 qui vous permet d'utiliser plusieurs disques physiques pour créer un seul disque virtuel, donc comme un travail autour des limitations d'E/S du VM Disk lui-même . Citant à nouveau:

Avec des machines virtuelles plus importantes qui soutiennent de nombreux disques physiques (jusqu'à 16), une augmentation de performance de stockage très significative est possible. Cela peut activer Azure comme une plate-forme viable pour de nombreuses charges de travail SQL qui seraient trop contraintes par les performances d'E/S d'un seul disque d'azur autrement.

Ceci Article vous montrera les étapes à suivre pour créer un espace de stockage.

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

4
Bruno Faria