Ingénierie des performances de stockage

Bonjour à tous! Chaque jour, notre grande et sympathique équipe d'ingénieurs résout des problèmes complexes et contribue à la création de produits de haute technologie - systèmes de traitement et de stockage de données. Nous avons décidé de vous présenter leur routine de plus près, et aujourd'hui nous commençons une série d'entretiens avec des collègues afin de vous parler de toutes les nuances de leur travail à la première personne.



image



La performance est l'une des caractéristiques clés d'un bon logiciel; les autres caractéristiques des systèmes de stockage ne seront pas appréciées si elles sont lentes ou instables. Aujourd'hui, nous parlons avec Sergey Kachkin kachini- Chef du Département Expertise Technique du Département Recherche Appliquée et Expertise Technique de YADRO.



Son métier porte plusieurs noms: analyste de performance, ingénieur de performance, testeur de performance. Et tous sont assez rares en Russie. L'ingénierie des performances, quant à elle, permet de créer des systèmes informatiques efficaces qui fonctionnent rapidement et de manière fiable. Sa tâche est d'étudier pourquoi le système ne fonctionne pas comme nous le souhaiterions, de comprendre les raisons de la lenteur ou de ne pas correspondre aux paramètres de travail cibles, d'identifier et de trouver les zones problématiques et d'aider à les éliminer.  



Sergey Kachkin a parlé de la recherche de goulots d'étranglement dans la pile logicielle et de l'optimisation des performances de stockage, de ce que fait son équipe.

 

Sergey, comment êtes-vous arrivé à YADRO? Avez-vous déjà de l'expérience avec OpenPOWER?

Avant cela, je travaillais pour un autre fournisseur, j'étais impliqué dans la prise en charge d'une version propriétaire d'UNIX OS sur des processeurs IA64 (à ne pas confondre avec x86) en termes de performances du noyau. L'architecture EPIC n'est pas comme RISC, elle est complètement différente. C'est donc ma première expérience de travail avec OpenPOWER chez YADRO, et la reconstruction a pris un certain temps. Mais l'idée d'OpenPOWER, malgré un certain minimalisme, est la même, donc tout peut être maîtrisé.



Que font les ingénieurs de performance? Quelles méthodes sont utilisées dans le travail? Est-ce difficile pour vous de recruter de nouveaux employés?



La principale spécialisation de notre équipe est l'ingénierie de la performance ou l'ingénierie de la performance. Il s'agit d'une discipline distincte visant à garantir que la solution en cours de développement satisfait aux exigences non fonctionnelles, en particulier en matière de performances. Il comprend un ensemble de pratiques, de connaissances, de méthodes et de techniques qui peuvent être appliquées à différentes étapes du développement logiciel: préparation, programmation, test et fonctionnement du système.



En Russie, cette discipline n'est pas très répandue, du moins, une telle impression est créée par les résultats de la recherche d'employés. Cependant, dans le monde, c'est une direction établie. Cette spécialisation informatique implique rarement un codage direct. Nous programmons peu et, en fait, ne savons pas comment le faire comme des programmeurs professionnels. Cela nécessite des compétences spécifiques pour localiser les «points chauds» dans les logiciels qui affectent les exigences non fonctionnelles. D'une part, cela aide à créer un produit qui répond aux exigences, d'autre part, cela évite le coût d'une optimisation ou de retouches supplémentaires.



Comment garantissez-vous le contrôle qualité et l'identification des goulots d'étranglement dans la pile logicielle?



Les méthodes peuvent être divisées en deux types. Le premier est l'approche centrée sur le système. Il est axé sur les ressources: nous analysons la charge des composants individuels du système et, sur la base des résultats obtenus, faisons une hypothèse en cas de goulot d'étranglement.



La seconde est l'approche centrée sur l'application, lorsque l'objet de la recherche est l'ensemble de l'application ou des processus individuels sous Linux. Nous regardons ce que fait l'application, quel travail elle fait. Ce travail est-il utile, ou il fait quelque chose d'inutile, c'est-à-dire de perdre du temps. Si l'application attend, on voit ce qu'elle attend. Il s'agit généralement de ressources matérielles ou logicielles, de mécanismes de synchronisation.



Dans la vraie vie, vous devez basculer entre ces méthodes. Autrement dit, d'une part, nous regardons les ressources: y a-t-il des problèmes ou des erreurs évidents. Nous tirons des conclusions. Ensuite, nous regardons l'application: comment ça se sent. Dans ce cas, l'application est le code du système de stockage ou autre chose qui fait l'objet d'optimisation.



Comment comprendre que le stockage fonctionne «à la limite»? Comment savoir si votre productivité est épuisée? Quels paramètres indiquent cela? Quelles sont les principales mesures utilisées pour mesurer les performances de stockage?



Plusieurs métriques sont disponibles pour l'utilisateur moyen. Le principal est le temps de réponse. Sa valeur absolue est importante. Outre le temps de réponse, la bande passante est également importante. Si le temps de réponse commence à augmenter avec l'augmentation de la charge, alors que les IOPS et la quantité de données transférées n'augmentent pas, cela signifie que certaines ressources de stockage sont proches de la saturation. Comme vous le savez, un système de stockage fonctionne aussi vite que sa ressource la plus lente peut fonctionner.



Dans le même temps, différentes applications peuvent être critiques soit pour le temps de réponse, soit pour la bande passante. Par exemple, si nous parlons d'une base de données, il s'agit généralement d'un accès aléatoire en petits blocs, de nombreuses lectures, et les performances en IOPS et le temps de réponse minimum sont importants pour cela. Pour d'autres charges telles que le streaming pour les sauvegardes, l'enregistrement à partir de caméras vidéo ou de l'Internet des objets, la bande passante est plus importante, la possibilité d'enregistrer un flux de données volumineux.



Le système de stockage est-il optimisé pour une tâche spécifique ou est-il créé comme une solution universelle?



Pendant longtemps, les systèmes de stockage, au moins à des fins générales, ont été polyvalents. Ils ne sont pas "affûtés" pour une charge particulière et tentent de "plaire" aux applications les plus courantes. Après tout, on sait à peu près quel est le profil de charge de la base de données, du système de sauvegarde, de la vidéosurveillance, etc. Le système de stockage doit répondre de manière adéquate à ces charges sans aucune configuration supplémentaire.



Par conséquent, les systèmes de stockage à usage général sont conçus de A à Z pour répondre aux tâches les plus courantes. Pour cela, des tests synthétiques sont utilisés avec un ensemble de profils «critiques» qui simulent une situation réelle. La plupart du temps, cela fonctionne, mais la réalité est toujours beaucoup plus compliquée.



Les charges réelles sont modélisées par des synthétiques très approximativement. Il s'agit généralement d'un domaine à forte intensité scientifique, car en plus des IOPS, de la bande passante, de la taille des blocs et du rapport des opérations de lecture / écriture, la charge a beaucoup plus de caractéristiques. Il s'agit de la localisation de la tache de données sur le disque, de la présence de «zones chaudes», de la répartition des requêtes dans le temps, et de l'uniformité de leur arrivée. Par conséquent, il est possible qu'une charge particulière k ne tombe dans aucun des profils. Peut-être à cause des fonctionnalités du logiciel ou des spécificités de la tâche métier elle-même. Dans ce cas, vous devez configurer le système pour des tâches spécifiques.



Examinez l'application, son fonctionnement. Et il peut être nécessaire de modifier soit le fonctionnement de l'application, soit les paramètres du système de stockage. Parfois, il est beaucoup plus facile de résoudre les problèmes du côté de l'application à l'aide d'une sorte de personnalisation que de gérer le changement du système de stockage.



Le système est-il automatiquement configuré pour la tâche? Avez-vous besoin d'une intelligence artificielle pour cela? L'administrateur ou l'utilisateur peut-il choisir lui-même le profil de chargement?



Les systèmes de stockage le font automatiquement depuis longtemps - l'administrateur n'est pas chargé d'une telle tâche. Habituellement, ils essaient d'y parvenir sans utiliser l'intelligence artificielle - les algorithmes traditionnels. Cependant, l'IA a un grand potentiel. Si cela vous permet de prédire quels blocs de données et à quel moment l'application peut demander, vous pouvez vous y préparer à l'avance.



Si les algorithmes d'optimisation antérieurs étaient assez simples, comme la lecture anticipée, c'est-à-dire lors de la lecture séquentielle des données, le système chargeait les données dans le cache à l'avance ou, au contraire, libérait la mémoire cache pour d'autres données, maintenant les possibilités s'élargissent: le système pourra se préparer à un pic de requêtes ou être organisé de manière complexe " point chaud de données ".



Quelle devrait être l'échelle de l'optimisation du stockage? Couvre-t-il également le logiciel / matériel serveur, l'infrastructure (SAN)? Cela nécessite-t-il une intégration étroite des piles logicielles et matérielles?



Du point de vue de l'ingénierie des performances, le système est considéré comme un tout, dans un complexe, c'est-à-dire une application, un hôte (serveur), une infrastructure de stockage, (SAN), des systèmes de stockage. Il est important de comprendre le fonctionnement de l'application, car c'est elle qui génère les requêtes vers le système de stockage. Tout cela, bien sûr, est pris en compte et utilisé.



On pense que l'option la plus optimale pour utiliser des disques de différents types dans les systèmes de stockage est le stockage de données à plusieurs niveaux. Le déchirement peut-il être considéré comme un moyen d'augmenter les performances de stockage?



De manière générale, le déchirement est similaire à la mise en cache - ils ont des éléments communs. La seule différence est que lors de la mise en cache, les données sont dupliquées, c'est-à-dire qu'elles se trouvent à la fois sur le SSD (dans le cache) et sur le disque, et lorsque la hiérarchisation est stockée à un seul endroit. Autrement dit, si la mise en cache est un moyen d'optimiser les performances, le déchirement peut également être considéré comme une méthode d'optimisation.



Où voyez-vous les avantages / inconvénients du stockage défini par logiciel (SDS) en termes d'analyse des performances et d'optimisation du système? Peut-être s'agit-il de solutions plus simples et plus flexibles?



En fait, tout le contraire. SDS est un système distribué composé de nombreux serveurs qui interagissent les uns avec les autres. Si des systèmes d'exploitation spéciaux sont utilisés, une sorte de système de fichiers, cela ajoute également de la complexité. Du point de vue de l'ingénierie, c'est plus difficile, mais à certains égards plus intéressant. D'un autre côté, le SDS n'a généralement pas d'exigences de performances strictes, tandis que les systèmes de stockage classiques sont plus stricts. Ce qui est pardonné pour les systèmes définis par logiciel ne sera pas pardonné pour le stockage traditionnel.



L'un des objectifs de l'entreprise est de développer des produits optimisés pour l'intelligence artificielle, l'IdO et les réseaux de cinquième génération. À quel point pensez-vous que c'est difficile? À quoi ressembleront ces produits?



À l'heure actuelle, pour stocker des données brutes dans l'IA, des stockages de fichiers sont souvent utilisés, pour la formation et la construction de modèles - SDS, c'est-à-dire qu'il s'agit presque toujours de solutions distribuées. À mon avis, de nombreuses entreprises utilisent maintenant l'IA comme une sorte d'expérience, elles la regardent et essaient de comprendre en quoi elle peut être utile. Par conséquent, les exigences relatives au matériel ne sont pas très strictes. Si cela fonctionne - eh bien, cela ne fonctionne pas - vous pouvez attendre un jour ou deux. À mesure que le travail de l'IA dans les entreprises devient plus critique, les exigences relatives aux sous-systèmes de disque le seront également. Nous verrons de nouvelles solutions de stockage pour l'IA et l'Internet des objets déjà de classe critique.



Quel rôle joue le partenariat de YADRO avec des entreprises technologiques mondiales dans l'optimisation des logiciels?



Du point de vue d'un technicien, cela aide certainement. Une telle coopération facilite la communication des ingénieurs entre eux, leur accès à l'information, aux développements tout faits et n'a pas à «réinventer la roue» à chaque fois.



Comment voyez-vous le rôle de la virtualisation dans le stockage? Aide-t-il à supprimer les goulots d'étranglement logiciels, ou vice versa? Et comment les performances et la fiabilité du système sont-elles liées? La fiabilité peut-elle être maintenue tout en augmentant la productivité?

La virtualisation ajoute de la complexité, bien sûr, mais elle peut être utile pour isoler une fonctionnalité de stockage d'une autre. En général, il s'agit de coûts et de complications supplémentaires, il faut donc les considérer d'un œil critique, avec prudence.



Lorsqu'il s'agit d'augmenter la productivité, il est en effet facile de perdre en fiabilité en cours de route. C'est une sorte de dualisme. Par exemple, lorsque nous parlons de serveurs, pour un serveur haute performance (HPC), la fiabilité vient généralement en second. Les systèmes de stockage doivent généralement fournir d'abord une haute disponibilité, des fonctionnalités et des performances. À mesure que la fiabilité du niveau de redondance augmente, le système devient plus complexe. Il devient nécessaire de synchroniser les éléments. Cependant, les performances du système en souffriront inévitablement. La tâche du développement est de minimiser cet effet.



Maintenant, il existe de nouvelles classes de mémoire telles que la mémoire de classe de stockage, la mémoire persistante, les lecteurs flash sont en cours d'amélioration. Comment cela affecte-t-il l'architecture du système? Le logiciel suit-il ces changements?



Au moins, il essaie. En général, l'avènement de la mémoire rapide a considérablement changé la façon dont les ingénieurs de performance travaillent dans l'industrie. Avant l'avènement des SSD, la grande majorité des problèmes de performances informatiques étaient liés aux E / S de stockage. Parce qu'il existe des processeurs et des disques rapides (HDD) avec des éléments mécaniques qui sont de plusieurs ordres de grandeur plus lents qu'un processeur. Par conséquent, au détriment des algorithmes, nous avons dû essayer de lisser les retards des disques lents.



Avec l'avènement de la mémoire rapide et les algorithmes doivent changer. Si l'algorithme est assez lourd, il a quand même aidé avant, car le disque est beaucoup plus lent. Si vous avez réussi à cacher le retard dans la mécanique, c'est bien. Avec l'avènement des SSD, les logiciels devraient fonctionner différemment. Il devrait introduire la latence minimale pour obtenir la vitesse maximale du SSD. Autrement dit, le besoin d'algorithmes complexes qui masquent la latence des disques a diminué. Une base de données intensive d'E / S particulièrement sensible au temps de réponse peut être migrée vers un SSD.



Cela changera-t-il l'architecture de stockage? Oui et non. Parce que les disques ne sont allés nulle part. D'une part, le code doit pouvoir fonctionner avec SSD, c'est-à-dire être très rapide. D'autre part, les disques mécaniques utilisent des charges qu'ils peuvent bien supporter, comme le streaming. Dans le même temps, la taille des disques a augmenté de nombreuses fois, mais la vitesse est restée la même qu'il y a 10 ans.



All Articles