Simulateurs de systèmes informatiques - ressemblent-ils à la réalité

Dans un langage simple et accessible sur les termes de base du domaine des simulateurs, ainsi que les types et niveaux de détail des modèles. Matériel pour une connaissance facile et rapide de ce domaine.

image

Si on m'avait interrogé sur la simulation il y a quelque temps, la première chose qui me serait venue à l'esprit serait mon fils, qui parle de son estomac malade à la veille du contrôle à l'école. Cependant, depuis dix ans, je travaille avec des simulateurs de divers systèmes informatiques, des téléphones aux serveurs basés sur des microprocesseurs, des SOC (System-On-Chip) et des chipsets de l'un des plus grands fabricants (malheureusement, le nom est sous la NDA), et mon idée de La simulation a changé. Mais tout d'abord.

Je suis sûr que beaucoup d'entre vous sont tombés sur des simulateurs, souvent appelés machines virtuelles, hyperviseurs. Quelqu'un installe Parallels Studio sur son Mac pour exécuter Windows à partir de MacOS, quelqu'un utilise un produit de VmWare - Workstation pour avoir un autre système d'exploitation (OS) à l'intérieur déjà installé. Ceux qui connaissent Linux préfèrent KVM et QEMU. VirtualBox est également populaire parmi les gens. Les professionnels impliqués dans le développement de matériel basé sur FPGA (circuits intégrés logiques programmables) connaissent VCS de Synopsys et Mentor Graphics Questa. Et pourtant, ce n'est qu'une petite partie de ce que l'on peut appeler des simulateurs.

Qu'est-ce qu'un simulateur?


Un simulateur est un modèle, généralement un logiciel, un véritable appareil. En conséquence, la simulation est un processus d'un tel modèle qui répète le fonctionnement du dispositif.

En principe, vous pouvez créer un modèle de n'importe quel périphérique, mais les plus courants sont les simulateurs de périphériques à microprocesseur, c'est-à-dire les périphériques dont le composant central est un microprocesseur, et le reste de la logique est déjà construit autour de lui. L'une des principales utilisations du simulateur est de lancer des programmes conçus pour ce microprocesseur lui-même. Dans le même temps, l'utilisation d'un véritable appareil est difficile pour une raison ou une autre, par exemple, elle peut tout simplement ne pas exister encore, si nous parlons de modélisation de la future génération de microprocesseurs.

Airbnb en simulation - invité et hôte


Le code qui s'exécute à l'intérieur du simulateur s'appelle le "code invité", il peut s'agir d'un "programme invité" ou de l'ensemble du "système d'exploitation invité". Le système simulé lui-même est simplement appelé «invité». À son tour, le système, l'ordinateur sur lequel le simulateur s'exécute, est appelé «hôte» (hôte anglais) et le système d'exploitation exécuté sur l'hôte sur lequel le simulateur s'exécute est appelé «OS hôte».

image

Ainsi, nous pouvons dire qu'un simulateur qui implémente un certain ensemble d'instructions du système invité les simule à l'aide des outils du système hôte disponibles.

Simulation et émulation - quel nom est correct?


Le modèle peut répéter l'appareil avec différents degrés de précision et de détails. Il s'agit souvent d'une simulation du comportement externe du système uniquement disponible pour le code de programme. Le code ne se soucie pas de la façon dont telle ou telle instruction du processeur est implémentée à l'intérieur - l'essentiel est qu'il fonctionne. Cette version de la simulation est courante, pas difficile à développer et assez rapide, ne ralentit pas même sur les ordinateurs des utilisateurs ordinaires.

Cependant, cela ne suffit pas si nous voulons savoir, par exemple, combien de temps le programme fonctionnera sur du matériel réel. Cela nécessite de modéliser non seulement le comportement externe, mais aussi une répétition de la structure interne et de la logique de travail. Cela peut également être fait avec différents degrés de détail et de précision. Il est plus correct d'appeler de tels modèles d'émulateurs, qui émulent vraiment l'appareil et ne «simulent» pas les résultats.

La création d'émulateurs est beaucoup plus compliquée en raison de la plus grande quantité de fonctionnalités qui doivent être implémentées dans le modèle. Ils fonctionnent également beaucoup plus lentement que les simulateurs du comportement externe de l'appareil. Avec les émulateurs, nous ne parlons pas du tout de démarrer Windows - cela peut prendre des années. Personne n'est engagé dans la création d'un émulateur logiciel de l'ensemble de la plateforme - c'est très long et cher. Au lieu de cela, des composants individuels du système sont émulés, comme le même processeur central, et seule une partie du processus de simulation est lancée sur celui-ci. Divers schémas hybrides sont possibles, lorsqu'une partie du simulateur est un modèle de haut niveau, une partie est un modèle de bas niveau, une partie est dans un FPGA et une partie est en fait un véritable morceau de fer.

image

4 niveaux de détails de simulation


Comme je l'ai écrit ci-dessus, l'option la plus courante est la simulation au niveau des instructions du processeur, dite ISA (Instruction Set Architecture), ou, plus précisément, le résultat de leur exécution, c'est-à-dire sans émuler toute la logique interne de comment cela se passe dans un vrai processeur, et sans prendre en compte le temps d'exécution des différentes instructions. Ces simulateurs sont également appelés fonctionnels. C'est ainsi que VirtualBox, Vmware Workstation, Wind River Simics, KVM et QEMU fonctionnent. Cela vous permet d'exécuter facilement, sans actions supplémentaires inutiles, des programmes conçus pour le périphérique simulé. En d'autres termes, aucune recompilation ni aucune autre manipulation avec les programmes en cours n'est requise. Dans de tels cas, ils disent qu'il est possible d'exécuter du code binaire non modifié.

Si nous parlons d'un niveau d'abstraction plus élevé, alors ce sera la mise en œuvre d'une certaine ABI (Application Binary Interface). En résumé, ABI décrit une interface binaire pour l'interaction de deux programmes - généralement un programme utilisateur et une bibliothèque ou un système d'exploitation. ABI couvre les conventions d'appel (comment passer des paramètres et renvoyer des valeurs), la taille des types de données, les appels système. Comment ça fonctionne? Par exemple, si un programme écrit pour Linux doit créer un thread supplémentaire (à partir du thread anglais) pour l'exécution, la fonction pthread_create () est appelée. Mais que faire si vous créez une bibliothèque avec une telle fonction dans Windows et implémentez les mécanismes nécessaires pour lier l'application et la bibliothèque (liaison dynamique)? Dans ce cas, vous pouvez exécuter des applications Linux à partir de Windows. Windows "simulera" Linux.C'est exactement ce qui a été fait dans le sous-système Windows pour Linux sur Windows 10, qui vous permet d'exécuter des applications Linux binaires non modifiées sur Windows.

Voyons maintenant à quoi ressemblent les niveaux de simulation inférieurs et détaillés. Ce sera le niveau de microarchitecture auquel les algorithmes internes réels et les blocs de processeur sont simulés, tels qu'un décodeur d'instructions, des files d'attente, une unité de traitement en panne, un prédicteur de branche, un cache, un planificateur et des appareils de comptage eux-mêmes. Une telle modélisation nous permet d'analyser la vitesse réelle d'exécution des programmes et, par exemple, de les optimiser pour les architectures existantes. Et dans le cas de la simulation de prototypes de futurs microprocesseurs, la prédiction et l'évaluation des performances de ces dispositifs sont possibles.

En dessous du niveau de simulation microarchitecturale se trouve le niveau d'émulation des éléments logiques qui composent les puces modernes. Ces émulateurs sont à la fois logiciels et matériels utilisant des FPGA. La logique FPGA est décrite en utilisant RTL (Register Transfer Level) dans les langues Verilog, VHDL, etc. Après la compilation, une image (bitstream) est obtenue, qui est ensuite flashée dans le FPGA. Et pour cela, il n'est pas nécessaire d'utiliser un fer à souder et de comprendre le génie électrique. La carte est connectée à un ordinateur, par exemple, via une interface USB ou JTAG, et un logiciel spécial du fabricant de la carte FPGA effectue l'enregistrement. Le coût de ces cartes commence de dix dollars pour les options les plus simples à des millions de dollars pour les grandes cartes FPGA de la taille d'une armoire utilisée dans les grandes entreprises de fabrication de puces.Dans ces entreprises, la simulation FPGA est la dernière étape avant la mise en production de RTL.

Si nous parlons d'appareils simples, alors que l'image FPGA est à portée de main, vous pouvez contacter des entreprises spécialisées qui fabriqueront un véritable appareil (non FPGA) avec une logique programmée.

La figure ci-dessous montre les niveaux de simulation décrits.

image

En plus de ces niveaux de simulation, j'ai également dû faire face à des simulateurs hybrides. En fait, ce sont des simulateurs connectés les uns aux autres, modélisant différentes parties du système à différents niveaux. Par exemple, vous devez analyser la bande passante d'une nouvelle carte réseau qui fonctionne avec le pilote en cours de développement pour un système d'exploitation particulier. Un tel dispositif de réseau, ainsi qu'un certain nombre de dispositifs associés, peuvent être mis en œuvre d'abord au niveau microarchitectural pour une analyse préliminaire, puis dans le FPGA, au niveau des éléments logiques, pour les vérifications finales. Dans le même temps, le reste du système, qui n'est que partiellement impliqué, est implémenté au niveau de l'instruction. Vous ne pouvez pas vous en passer, car il est nécessaire, par exemple, de charger le système d'exploitation, et cela n'a aucun sens de l'implémenter à un niveau inférieur et plus complexe.

Alors, qu'en est-il de la comparaison des simulateurs et de la réalité?

Comme il est maintenant clair, il n'y a aucune tâche pour rendre tel ou tel simulateur aussi similaire à la réalité que possible. Il y a une tâche posée par l'entreprise, et la simulation est effectuée avec le degré de «similitude» avec la réalité, ce qui est au minimum suffisant pour résoudre ce problème, sans perdre d'argent et de temps supplémentaires. Dans un cas, il peut s'agir d'une simple bibliothèque qui implémente l'interface binaire nécessaire (ABI), et dans l'autre, un simulateur microarchitectural détaillé ne peut être supprimé.

Il s'agit des informations les plus élémentaires sur ce que sont les simulateurs et ce qu'ils sont. Dans le prochain article, je décrirai les détails de la mise en œuvre de simulateurs de plate-forme complète, de modèles de battements et de travail avec des pistes.

All Articles