Pouvons-nous exécuter linux dans quelque chose de plus rapide que la RAM?

21

C'est peut-être une question stupide et peut être le résultat d'un malentendu. J'étudie les processeurs en ce moment, et la mémoire en particulier. Je venais de lire à quel point la SRAM est plus rapide que la DRAM mais plus chère. SRAM est très cher: j'ai acheté un peu et j'ai trouvé une carte SRAM alimentée par batterie avec 16 Mo pour environ 400 $.

Récemment, un ami a mentionné qu'il utilisait Linux pour chiots dans la RAM et que c'était rapide. J'ai remarqué, cependant, que le noyau Linux minuscule peut être encore plus petit ... aussi petit que 8 Mo! Cela m'a fait penser: pouvons-nous exécuter linux dans SRAM? Cette question est-elle même bien formulée?

La recherche sur cette question s'est révélée inefficace, mais elle a soulevé encore plus de questions. Pourrait-on exécuter linux dans le cache L3? Intel Core i7 peut avoir un cache L3 suffisamment grand pour accueillir les 8 Mo ... mais est-ce que je fais une erreur catégorique? Quelle est la différence entre ceci et Linux «embarqué»?

C'est la question: pouvons-nous exécuter linux dans SRAM ou L3 Cache? Y a-t-il quelque chose de plus rapide? À quelle vitesse pouvons-nous linux!?

z.

Ziggy
la source
3
Les linux intégrés sont souvent exécutés sur mémoire vive ou mémoire non volatile. Les linux intégrés sont souvent simplement supprimés pour fonctionner sur du matériel spécifique uniquement, ou utilisent des options de noyau moins courantes comme une faible latence
Journeyman Geek
2
Je me demande s'il y a une utilité pratique pour cette question?
Robert Niestroj
4
+1 pour avoir utilisé "linux" comme verbe (dans la dernière phrase)!
Vorac

Réponses:

20

Linux ou tout autre système d'exploitation ne sait pas comment fonctionne la RAM. Tant que le contrôleur de mémoire est correctement configuré (par exemple, les taux de rafraîchissement définis pour les non-SRAM), le système d'exploitation ne se soucie pas s'il s'exécute sur de la mémoire dynamique ordinaire (RAM ordinaire), de la RAM en mode page rapide (FP RAM, à partir du C64-ish fois), RAM de mode de sortie de données étendue (EDO), RAM synchrone (SDRAM), n'importe laquelle des SDRAMS à double débit (DDR 1/2/3).

Tous ceux qui soutiennent la lecture et l'écriture à partir d'endroits aléatoires. Tout fonctionnera.

Maintenant, le cache est un peu différent. Vous n'avez pas à y écrire pour que le contenu change. Cela vous gênera. Pourtant, il est quelque peu utilisable. Je sais que coreboot utilise le cache comme une sorte de mémoire lors du démarrage, avant que le contrôleur de mémoire ne soit correctement configuré. (Pour plus de détails, consultez les vidéos des discussions de Coreboot lors du FOSDEM 2011).

Donc en théorie oui, vous pouvez l'utiliser.

MAIS : Pour les tâches pratiques, un système avec 1 Go de mémoire «régulière» à «vitesse moyenne» fonctionnera beaucoup mieux qu'avec seulement quelques Mo de mémoire ultra rapide. Ce qui signifie que vous avez trois choix:

  1. Construisez les choses de la manière «bon marché» normale. Si vous avez besoin de plus de vitesse, ajoutez quelques dizaines d'ordinateurs supplémentaires (tous avec une mémoire «lente»)
  2. Ou construisez un seul ordinateur avec une douzaine de fois le prix et beaucoup moins que la douzaine de fois les performances.

Sauf dans de très rares cas, le dernier n'est pas sensible.

Hennes
la source
6
De nombreux processeurs prennent en charge un mode «cache-RAM» via les registres spécifiques au modèle (MSR) du processeur. Notez également que la SRAM consomme plus d'énergie que la DRAM et c'est également un facteur de conception. Si le cache du CPU était suffisamment grand ou le noyau suffisamment petit, vous pouvez activer ce mode de cache en tant que RAM et continuer à l'exécuter entièrement en SRAM sur le CPU. Vous auriez cependant une quantité limitée de RAM pour exécuter des programmes, etc. car AFAIK cache-as-RAM et le mode normal ne fonctionneront pas simultanément. Je peux me tromper cependant. Même si c'était le cas, la majeure partie de la vitesse d'un processeur de nos jours est due à l'utilisation du cache L2, L3.
LawrenceC
@Hennes est-ce que Linux ne se soucie que des adresses mémoire (mappées)?
Alvin Wong
SDRAM est RAM synchrone D (ynamique), tandis que SRAM est RAM statique. Je ne sais pas lequel vous vouliez faire référence dans le premier paragraphe et je n'ai pas le représentant pour apporter des modifications "triviales", mais peut-être pourriez-vous résoudre ce problème? A part ça, bonne réponse.
un CVn du
Cela ne me dérange pas de clarifier, mais je ne suis pas sûr de ce que vous voulez clarifier. Pouvez-vous ajouter cela dans un commentaire et je le modifierai.
Hennes
Quand j'ai lu ce commentaire pour la première fois, j'ai vu: "Linux ou tout autre système d'exploitation meurt sans savoir comment fonctionne la RAM." Votre ventilation est bonne: je pense que je ne me faisais aucune illusion que ce serait "mieux". Je me demandais simplement si cela pouvait être fait.
Ziggy
8

Oui, vous pouvez, et c'est en fait ainsi que cela se fait déjà, automatiquement. Les parties de RAM les plus utilisées sont copiées dans le cache. Si votre utilisation totale de RAM est inférieure à la taille de votre cache (comme vous le supposez), le mécanisme de mise en cache existant aura tout copié dans la RAM.

Le seul moment où le cache serait ensuite recopié dans la RAM normale est lorsque le PC passe en mode veille S3. Cela est nécessaire car les caches sont hors tension en mode S3.

MSalters
la source
1
Tous ne peuvent pas / ne seront pas copiés. Pour la structure de cache Intel / x86: si j'ai un cache de 256 Ko et un cache de 1024 Ko, je peux lire l'adresse 0. Elle sera stockée dans le cache à l'emplacement 0. Je pourrai alors lire l'adresse 1 et elle sera stockée dans le cache à l'emplacement 1 Cependant, si je lis l'adresse de (256Kib + 1) qui sera également stockée à l'adresse 1 dans le cache. Le cache utilise un SRAM supplémentaire (tag) pour indiquer lequel des deux est stocké. Cela signifie que la lecture à partir de multiples de la taille des caches ne fonctionnera pas bien. (Notez que ce serait une chose rare et peut généralement être ignoré).
Hennes
C'est perspicace! Pourquoi devrais-je maladroitement mettre ce que je pense est important dans le cache L3 alors que je pouvais laisser une armée de génies déterminer la chose optimale à faire et programmer un processeur pour faire cette chose optimale. Droite?
Ziggy
3

De nombreux processeurs permettent au cache d'être utilisé comme RAM. Par exemple, la plupart des processeurs x86 plus récents peuvent configurer certaines régions en écriture différée sans lecture lors des lectures via les MTRR. Cela peut être utilisé pour désigner une région de l'espace d'adressage en tant que cache-ram.

Que cela soit bénéfique est une autre question - cela verrouillerait le noyau dans la RAM, mais en même temps réduirait la taille effective du cache. Il pourrait également y avoir des effets secondaires (comme avoir à désactiver la mise en cache pour le reste du système) qui rendraient cela beaucoup plus lent.

Marc Lehmann
la source
2

"pouvons-nous exécuter linux dans le cache L3?"

Non , cela n'est pas possible car la mémoire cache n'est pas adressée directement / linéairement.
En raison de la façon dont la mémoire cache est conçue, le registre du compteur de programme CPU (IP) ne peut pas pointer vers un emplacement dans la mémoire cache.

Un cache CPU a sa propre "associativité" et cette associativité définit la façon dont la mémoire "normale" est "mappée" à la mémoire cache. Cette caractéristique de la mémoire cache est l'une des raisons pour lesquelles les mémoires cache sont si rapides.

Max
la source
1

"pouvons-nous exécuter linux dans le cache L3?"

Non, le cache est là pour un travail spécifique de conservation des données de programme et des instructions prêtes pour le moment où le processeur en aura besoin. Vous trouverez de toute façon le système d'exploitation dans le cache car il est constamment utilisé. Charger tout le système d'exploitation dans le cache n'est pas efficace car vous n'utilisez pas tous les chemins de code dans le noyau à la fois.

"pouvons-nous exécuter linux dans SRAM?"

Vous pouvez certainement utiliser la SRAM sauvegardée par batterie comme partition de démarrage, vous pouvez ensuite utiliser le drapeau intégré d'exécution en place. Cela pourrait entraîner des temps de démarrage plus rapides et des opérations légèrement plus rapides. Cependant, un facteur majeur est la bande passante entre le cache L3 et l'emplacement du noyau (un lecteur de démarrage ou RAM).

"Y a-t-il quelque chose de plus rapide? À quelle vitesse pouvons-nous Linux!?"

Généralement, les fabricants de matériel et les développeurs de systèmes d'exploitation s'efforcent de rendre le traitement aussi rapide que possible. Cependant, votre question est très générale, voulez-vous accélérer les temps de démarrage, optimiser l'accès au système de fichiers, accélérer les calculs ou autre chose. Une fois que vous avez une question plus spécifique, vous pouvez certainement commencer à trouver le goulot d'étranglement et à le supprimer. Votre lecteur SRAM accélérerait certainement votre processus de démarrage. Accéder à une interface graphique en 3 secondes serait très cool à voir.

Phil Hannent
la source
1

À l'époque des 486, il y avait des machines où toute la RAM était SRAM. C'est de retour quand 8 Mo était beaucoup, mais semble correspondre à vos contraintes. Je suis sûr que 8 Mo de SRAM sont beaucoup moins chers maintenant qu'à l'époque.

Ainsi, vous pouvez exécuter Linux dans SRAM si la machine a été conçue de cette façon. Ce n'est pas une théorie; c'est fait.

Mais pas dans Cache. Le cache est câblé différemment et, plus important encore, traité différemment. Vous ne pouvez pas y répondre de la même façon. Les morceaux sont mappés différemment, pas comme un morceau continu. Et le contenu n'est pas nécessairement ce que vous voyez sur le disque - les puces Intel plus récentes font une sorte de "compilation" juste à temps (plus un CISC => RISC-micro-op re-encoding) où les micro-ops sont les choses qui finissent dans le cache. En bref, ce qui est dans le cache n'est pas votre programme, mais une vue modifiée de celui-ci, vous ne pouvez donc plus l'utiliser comme représentation mémoire de votre programme.

La question est pourquoi. À part "parce que je peux", il n'y a pas beaucoup de raisons à cela. Le système de cache vous offre la plupart des avantages de vitesse avec beaucoup moins de coûts. Et rappelez-vous que le coût n'est pas seulement de l'argent ... SRAM prend plus de transistors, ce qui signifie plus d'électricité.

Rich Homolka
la source