2010-11-19 65 views
9

Je voudrais un environnement logiciel dans lequel je peux tester la vitesse de mon logiciel sur du matériel avec des ressources spécifiques. Par exemple, à quelle vitesse ce programme fonctionne-t-il sur un x86 de 800 MHz avec 24 Mo de RAM, alors que mon matériel hôte est un amd64 quad core 3GHz avec 12 Go de RAM? Les émulateurs tels que le qemu font un excellent point d'exécution "presque aussi rapide" que le matériel sous-jacent; Je voudrais le faire courir plus lentement. Y-a-t-il un moyen de faire ça?Émulation des ressources (limitées) d'un processeur, y compris la vitesse d'horloge

+0

Je ne suis pas sûr à propos de la vitesse du processeur, mais vous pouvez certainement contrôler la RAM en utilisant une VM comme VirtualBox, Parallels Desktop, etc –

+0

Oui, je pense que la mémoire n'est pas le problème; le problème est la vitesse et d'autres ressources. Je suis inclusif dans le phrasé parce que je veux que ce soit comme le matériel réel, à tous égards. J'espérais en quelque sorte qu'il y avait une solution prête à l'emploi, mais évidemment il n'y en a pas, alors je vais la prendre au cas par cas. – Liam

Répondre

0

Dans votre émulateur, conservez une "horloge" virtuelle et augmentez-la de manière appropriée lorsque vous exécutez chaque instruction. À partir de là, vous pouvez simplement indiquer combien de temps il a fallu en temps virtuel pour exécuter, ou vous pouvez avoir votre émulateur de temps en temps pour maintenir la vitesse d'exécution à peu près où il serait dans la cible.

+0

Cela semble dur. Je ne suis pas sûr que cela soit implémenté dans l'OS hôte ou invité, mais je ne pense pas avoir les compétences pour le faire de toute façon. – Liam

+0

@Liam: En outre, vous n'aurez pas une «sensation» de la lenteur ou de la rapidité, ce qui serait important si vous évaluez par ex. une application de bureau ou un autre logiciel interactif. Les applications multimédia seraient également difficiles à tester. – thkala

2

Je n'ai jamais essayé, mais vous pourriez peut-être obtenir ce que vous voulez dans une certaine mesure en combinant un émulateur comme QEMU ou VirtualBox sous Linux avec quelque chose comme ceci:

http://cpulimit.sourceforge.net/

Si vous pouvez limiter la Temps de processeur disponible pour l'émulateur, vous pourriez être en mesure de simuler les résultats de l'exécution sur un ordinateur plus lent. Gardez à l'esprit, cependant, que cela n'affecterait que la vitesse d'exécution (ou du moins j'espère, de toute façon).

Le jeu d'instructions de l'UC et les autres caractéristiques du système resteraient inchangés. Cela signifie que l'émulation exacte d'un processeur spécifique serait difficile sinon impossible.

En outre, en utilisant quelque chose comme cpulimit, qui fonctionne à l'aide SIGSTOP et SIGCONT pour arrêter/redémarrer à plusieurs reprises le processus de l'émulateur peut entraîner des effets secondaires, tels que des incohérences temporelles, des artefacts d'affichage vidéo etc.

+0

Ceci est intéressant; Je ne savais pas à propos de cpulimit. Bien que ce ne soit pas une solution complète, c'est la «pièce manquante» la plus importante de ce que je recherche, car je pense que les limites de la mémoire peuvent déjà être définies dans la plupart des émulateurs. Je me rends compte que je ne serais pas en train d'émuler l'autre processeur (sauf si qemu émule spécifiquement, disons, un membre spécifique de la famille x86), mais cela est probablement assez proche pour mes objectifs. – Liam

+0

* cpulimit * fonctionne plutôt bien. OK le système d'exploitation invité imprime toujours la vitesse physique du processeur, mais la vitesse disponible est définie par cpulimit. par exemple. 'cpulimit -l 5 -s qemu-system-i386 -cpu pentium -m 32 ' émule un Pentium 166MHz assez réaliste. Merci @thkala. – tuk0z