de bug.Il nous manquait, dans RUVDS, un serveur NVMe dans la lignée pour le rendre plus rapide et plus puissant. .. Parce que l'année dernière la mode est allée se déployer sur par exemple Bitrix et 1C ... Il y a une demande pour le service, d'autres services d'hébergement l'ont également et sont commandés - en général, tout se résume au fait qu'il vous suffit de choisir une configuration et des options matérielles spécifiques et d'acheter dans les 11 emplacements à travers le monde. Et là, je dois dire que nous ne supportons actuellement que deux configurations : plus rapide et plus lente. Parce que les pièces de rechange, parce que le support, parce que les logiciels, etc. font partie de la politique de prix adéquats. C'est-à-dire qu'un troisième sera ajouté, et il sera possible d'y changer quelque chose dans quatre ans.
Nous avons un SSD RAID partout (même là où le disque dur est affiché à un tarif), mais nous voulions plus fort, plus haut et plus rapide.
La première chose que nous avons apprise était que NVMe n'est pas combiné dans RAID de manière normale, c'est-à-dire qu'il ne faut pas s'attendre à des disques fiables. Deuxièmement, nous voulions pousser le Hi-CPU dans le même serveur et avons été surpris de constater que la fréquence de 4,5 GHz n'est pas celle d'un serveur, mais que le matériel de bureau domestique et les solutions de serveur d'une telle fréquence n'existent tout simplement pas encore physiquement dans la nature.
De plus, en chemin, notre administrateur a trouvé un bogue fatal dans l'utilitaire de test. En général, laissez-moi vous dire avec des tests à quoi ressemble la solution NVMe dans l'hébergement VDS.
Je dois dire tout de suite que nous avons peut-être fait quelque chose de mal, et si quelqu'un comprend cela, je lui en serai très reconnaissant.
Attentes de NVMe
Lorsque nous sommes passés du disque dur au SSD, la différence était comme le ciel et la terre. Vous exécutez n'importe quel test et vous obtenez un gain de performances multiple. Ce n'était pas le cas sur NVMe. De plus, lors d'une collision frontale avec nos configurations NVMe existantes, les disques ne les contournaient pas toujours. Ils étaient plus rapides ou plus lents, selon les conditions du test.
Pour commencer, nous avons acheté quelques options de serveur. Nous achetons généralement une plate-forme, la testons, comprenons ce qui ne va pas, la testons à nouveau, puis la déployons uniquement dans 11 emplacements, car autant de pièces de rechange à la fois et de nouveaux processus de support sont coûteux. Ensuite, nous avons acheté une plate-forme et sommes immédiatement tombés sur un résultat incroyablement nul.
Dans le même hyperviseur sur différents systèmes d'exploitation invités, il était impossible de faire la distinction entre SSD à l'intérieur du serveur ou NVMe. Même avec la pâte.
Lors de l'utilisation de NVMe en RAID, la vitesse sera plus lente que SSD. En gros, quand on utilise du RAID, on l'inclut dans un bus PCIe et on est limité à ce PCI Express, et on ne peut paralléliser que quelques disques sur différents bus. Nous avons besoin de contrôleurs.
Pourquoi donc, personne ne pouvait donner une réponse normale. Ils ont demandé à un ancien fournisseur de confiance, à de nouveaux fournisseurs et généralement à des fournisseurs de gauche. Tout le monde a haussé les épaules et a dit: "Eh bien, vous êtes généralement des drageons, qui collez NVMe en RAID - il n'y aura aucune performance!" Le libellé était différent de celui donné, mais le sens restait inchangé. Nous avons donc réalisé que nous devrions probablement utiliser NVMe sans raid. Il y a une entreprise (un concurrent amical) - et donc, seulement ils ont expliqué qu'ils avaient la même chose il y a quelques années. Ils ont jeté plusieurs plates-formes et finalement, il a été décidé de ne pas utiliser le RAID.
C'est-à-dire que le premier problème est que lorsque le disque est libéré, il n'y aura pas de reconstruction automatique pour un nouveau, qui sera apporté par l'administrateur. Sans RAID, les clients perdront l'état et les données de leur machine virtuelle. Pas la même chose, mais nous essayons d'avancer.
Ensuite, il y a le choix entre U2 et M2. Nous avons acheté des jantes U2 chères. Ils sont bloqués via l'interface Okulinka dans le bus. M2 est plus souvent utilisé dans les ordinateurs de bureau, ils se collent à la carte mère. Nous l'avons également testé, il n'y a pas beaucoup de différence entre eux. Mais si le disque est collé directement dans la carte sans interface intermédiaire, il est alors plus difficile de le réparer - en cas de panne, vous devrez retirer le capot du serveur et fouiller.
▍ Désormais, les tests sont la réalité du NVMe
Le résultat dépend du système d'exploitation hôte, de la version de l'hyperviseur, de la version du système d'exploitation domestique sur la machine virtuelle et du choix de la méthode de test.
Cela dépend du fait que les hyperviseurs les plus récents prennent en charge NVMe avec leurs pilotes de manière native, tandis que d'autres fonctionnent comme un surcoût SSD. Ce n'est pas non plus un très bon résultat, car nous sommes habitués à utiliser des solutions éprouvées. Il existe un serveur Windows 12-16-19. Nous utilisons au maximum la version 16. Lorsque la prochaine sortira, nous utiliserons la 19. Car les dernières versions sont toujours des bêta. En général, seuls les geeks et les suicidés utilisent la dernière version du logiciel dans l'administration des serveurs. Et oui, si votre main tremble en ce moment, vous êtes un geek. Ou un bêta-testeur. Bien que vous ne le sachiez peut-être pas encore. Le fournisseur de logiciels déploie régulièrement une nouvelle version, propose des redémarrages, des mises à jour, des correctifs - vous devez passer par une génération pour que cela fonctionne de manière stable. Comme toujours, nous attendons le deuxième service pack. Vous ne pouvez pas expliquer à un client une nouvelle vulnérabilité ou un nouveau pack de mises à jour de MS. Plus précisément,on peut expliquer, mais le client n'y croit pas toujours. Avec notre flotte de voitures sur le 19 Windu, il n'est pas très agréable de rouler. Si tous les serveurs commencent à faire de la musique en couleur avec des mises à jour et des redémarrages, vous ne voulez pas vous mettre la gueule dans la boue.
Le deuxième point important concerne la bizarrerie sur le fichier de 45 Go, vous allez le voir maintenant.
Méthodologie : lors des tests, nous avons utilisé l'utilitaire diskspd . CrystalDiskMark a été vissé autour de lui , que nous voulions utiliser en premier, mais nous avons trouvé un bug très amusant.
Il est important pour nous que les deux utilitaires :
- Permet de spécifier plusieurs fichiers de test en même temps. De plus, ces fichiers peuvent se trouver sur différents disques. Cela peut être utile pour vérifier le débit global du contrôleur lors de la lecture indépendante sur différents disques. Le nombre de fils. Combien de threads indépendants les uns des autres seront créés pour lire et écrire des fichiers.
- Dans diskspd nombre de demandes d'E/S en attente par thread - il peut y avoir des divergences dans la traduction. De plus, dans CrystalDiskMark, ce paramètre est appelé Queue, bien qu'il puisse difficilement être appelé file d'attente.
Comprendre le nombre de paramètres IO en suspens
Pour comprendre le fonctionnement de l'utilitaire, nous pouvons examiner son code source. Les lignes suivantes sont des plus intéressantes.
À lire:
if (useCompletionRoutines) { rslt = ReadFileEx(...); } else { rslt = ReadFile(...); }
Et des lignes similaires à écrire :
if (useCompletionRoutines) { rslt = WriteFileEx(...); } else { rslt = WriteFile(...); }
Arguments omis par souci de clarté. Nous sommes plus intéressés par le fait que la lecture et l'écriture sont effectuées par les fonctions standard de WinAPI :
ReadFile
WriteFile
Et les fonctions asynchrones correspondantes :
ReadFileEx
WriteFileEx
Si vous regardez de plus près le code, vous pouvez comprendre ce qui suit :
Lors de la définition du nombre d'encours IO = 1 , les options synchrones ReadFile et WriteFile seront utilisées. Le pseudocode pour l'opération d' écriture ressemble à ceci :
void testThreadFunc() { while (!stopTesting) { WriteFile(...) // } }
Si vous définissez le nombre d'E/S en attente > 1 , les options asynchrones ReadFileEx et WriteFileEx seront utilisées et le nombre d'E/S en attente définit la profondeur de ces appels pour chaque thread. Le pseudocode pour une opération d'écriture avec un nombre d'E/S en attente = 3 ressemble à ceci :
void callback1() { while (!stopTesting) { WriteFileEx(..., callback1) } } void callback2() { while (!stopTesting) { WriteFileEx(..., callback2) } } void callback3() { while (!stopTesting) { WriteFileEx(..., callback3) } } void testThreadFunc() { WriteFileEx(..., callback1) // WriteFileEx(..., callback2) // WriteFileEx(..., callback3) // // }
Ainsi, le nombre d'E/S en attente est le nombre d'appels asynchrones dans chaque thread.
▍ Pourquoi nous n'avons pas utilisé CrystalDiskMark
L'utilitaire CrystalDiskMark n'est qu'une interface graphique pour diskspd . Il est facile de le deviner si vous installez l'utilitaire et accédez au répertoire CdmResource \ DiskSpd.
Mais il y a un certain nombre de problèmes avec la mise en œuvre de ce shell.
Tout d'abord, il modifie le code diskspd d' une manière ou d'une autre . C'est facile à comprendre si vous regardez le code CrystalDiskMark :
command.Format(L"\"%s\" %s -d%d -A%d -L \"%s\"", ..., GetCurrentProcessId(), ...);
Lors de l'appel de diskspd, le paramètre -A lui est transmis avec l'ID du processus en cours. Diskspd n'a pas un tel paramètre. L'auteur de CrystalDiskMark a décidé de ne pas analyser la sortie de la console diskspd et a décidé d'obtenir les données d'une manière plus délicate. De plus, la méthode choisie n'est pas la plus réussie.
Dans cette fonction, diskspd est appelé directement :
int ExecAndWait(TCHAR *pszCmd, BOOL bNoWindow, double *latency) { DWORD Code = 0; … GetExitCodeProcess(pi.hProcess, &Code); *latency = (double)*pMemory * 1000; // milli sec to micro sec return Code; }
En principe, il n'y a pas de questions sur le transfert de latence via SharedMemory . Mais si nous considérons plus loin le code où la valeur de la variable Code est utilisée , il devient clair qu'il s'agit de la vitesse du disque mesurée. Ce n'est pas une bonne idée de le retourner via le ErrorCode du processus. Par exemple, si le processus se termine par une erreur pour une autre raison, le code d'erreur sera simplement affiché à la suite du test.
Il existe également des doutes sur l'exactitude de la valeur de retour de latence . Lorsque vous spécifiez le commutateur -L, diskspd renvoie quelque chose comme ceci :
Par exemple, la sixième ligne signifie que 95 % du temps, la latence sera inférieure à 54,306 ms . CrystalDiskMark renvoie simplement la moyenne de toutes les valeurs du tableau. Cela peut être trompeur.
Paramètres de test
Pour voir les avantages de NVME, vous devez définir le nombre d'E/S en suspens suffisamment grand. Nous avons choisi le nombre 32.
❒ Plateforme :
Supermicro SuperServer SYS-6029P-WTRT 2U
❒ Lecteurs :
Intel SSD DC P4610 Series 1,6 To, 2,5 pouces PCIe 3.1 x4, 3D2, TLC
❒ Commandes pour exécuter diskspd pour le fichier 10G :
DiskSpd64.exe -b128K -t32 -o32 -w0 -d10 -si -S -c10G G:/testfile.dat DiskSpd64.exe -b128K -t32 -o32 -w100 -d10 -si -S -c10G G:/testfile.dat DiskSpd64.exe -b4K -t32 -o32 -w30 -d10 -r -S -c10G G:/testfile.dat
❒ commandes à exécuter diskspd pourfichier 50G:
DiskSpd64.exe -b128K -t32 -o32 -w0 -d10 -si -S -c50G G:/testfile.dat DiskSpd64.exe -b128K -t32 -o32 -w100 -d10 -si -S -c50G G:/testfile.dat DiskSpd64.exe -b4K -t32 -o32 -w30 -d10 -r -S -c50G G:/testfile.dat
Résultats
❒ Tableau 1 Système d'exploitation hôte Windows Server 2019
|
|
SSD RAID5 |
NVME U.2 |
|
Fichier de 10 Go de serveur virtuel Windows Server 2016 (IOPS - plus c'est mieux) |
11636 |
246813 |
|
Fichier de 45 Go du serveur virtuel Windows Server 2016 (IOPS - plus c'est mieux) |
9124 |
679 |
|
Fichier Debian Virtual Server 10 10 Go (IOPS - plus c'est mieux) |
- |
162748 |
|
Fichier de serveur virtuel Debian 10 45 Go (IOPS - plus c'est mieux) |
- |
95330 |
❒ Tableau 1 Système d'exploitation hôte Windows Server 2016
|
|
SSD RAID5 |
NVME U.2 |
|
Fichier de 10 Go de serveur virtuel Windows Server 2016 (IOPS - plus c'est mieux) |
11728 |
101350 |
|
Fichier de 45 Go du serveur virtuel Windows Server 2016 (IOPS - plus c'est mieux) |
11200 |
645 |
|
Fichier Debian Virtual Server 10 10 Go (IOPS - plus c'est mieux) |
10640 |
52145 |
|
Fichier de serveur virtuel Debian 10 45 Go (IOPS - plus c'est mieux) |
9818 |
39821 |
Sous Hyper-V et un invité Windows Server, les résultats sont difficiles à expliquer. Sur un petit fichier d'environ 10G, on obtient une grosse augmentation des IOPS par rapport à un SSD en raid. Mais si on prend un fichier 45G , au contraire, on obtient une baisse significative des IOPS.
Passons maintenant au Hi-CPU
La deuxième surprise s'est ouverte sur des processeurs à 4,5 GHz.
Il faut dire ici que les processeurs des lignes de serveurs sont également utilisés par la génération -1 à partir du bureau. Parce que les bêta-testeurs sont des joueurs et que vous pouvez leur envoyer des correctifs logiciels. Mais sur les serveurs, même le même heartblade n'a pas été immédiatement corrigé, et pas tout. Toutes les solutions de serveur sont fiables et chères, mais leur vitesse est toujours inférieure.
Nous avons des tâches non bureautiques. La machine est divisée entre de nombreux clients. Et maintenant, nous voyons des configurations à 4,5 GHz, qui ne sont pas dans la nature.
Il s'avère qu'il existe deux implémentations :
- Hi-CPU ( , ). , , . .
- , turbo boost-, . ! - 3,6 4,5 . , -, : . ( ), . .
▍
Du coup, nous avons décidé de rester sur notre éprouvé 3,6 GHz (turbo boost 4,4 GHz) et de clore ainsi les recherches avec le processeur.
Avec NVMe - après avoir récupéré des résultats aléatoires d'un utilitaire super standard, comme vous pouvez le voir, nous avons changé l'outil. Vient ensuite la question de l'hyperviseur et de l'OS.
Commercialement, ces disques proposent de plus en plus, il faut apprendre à travailler. Pour nous-mêmes, nous laissons une certaine combinaison de la version hôte de l'hyperviseur et nous continuerons à tester, présenter les disques aussi. Si un hébergeur écrit NVMe, cela ne veut encore rien dire. Sur KVM avec certains assemblages frais * nix et une configuration minutieuse, vous pouvez obtenir d'excellents gains, mais chaque test doit être marqué d'un astérisque - "dans de telles conditions, si vous changez un peu, et en général tout n'est pas le cas". Sur le 12e Windows ou Debian, tout est différent.
En général, NVMe est un standard inconditionnel, mais jusqu'à présent, cela ne signifie pas qu'il sera certainement plus rapide avec. Nous déployons les serveurs avec précaution, mais tant que le gain correspond à peu près à l'augmentation du prix, il n'y a pas de magie.