2010-11-19 9 views
9

Ich möchte eine Softwareumgebung, in der ich die Geschwindigkeit meiner Software auf Hardware mit bestimmten Ressourcen testen kann. Zum Beispiel, wie schnell läuft dieses Programm auf einem 800MHz x86 mit 24 MB RAM, wenn meine Host-Hardware ein 3GHz Quad Core AMD64 mit 12 GB RAM ist? Emulatoren wie qemu machen es "fast so schnell" wie die zugrunde liegende Hardware; Ich möchte es langsamer laufen lassen. Gibt es eine Möglichkeit, das zu tun?Emulation der (begrenzten) Ressourcen eines Prozessors einschließlich Taktrate

+0

Ich bin nicht sicher über Prozessorgeschwindigkeit, aber Sie können RAM mit einer VM wie VirtualBox, Parallels Desktop, etc. definitiv kontrollieren. –

+0

Ja, ich denke, Speicher ist nicht das Problem; Das Problem ist Geschwindigkeit und andere Ressourcen. Ich bin in der Formulierung inklusiv, weil ich möchte, dass es in jeder Hinsicht wie die tatsächliche Hardware ist. Ich habe gehofft, dass es eine fertige Lösung gibt, aber offensichtlich gibt es keine, also nehme ich es Stück für Stück. – Liam

Antwort

0

Behalten Sie in Ihrem Emulator eine virtuelle "Uhr" und erhöhen Sie sie entsprechend, wenn Sie jede Anweisung ausführen. Von dort können Sie einfach berichten, wie lange es dauerte, bis die Ausführung virtuell war, oder Sie können Ihren Emulator hin und wieder schlafen lassen, um die Ausführungsgeschwindigkeit ungefähr dort zu belassen, wo sie im Ziel wäre.

+0

Das klingt schwer. Ich bin mir nicht sicher, ob dies im Host- oder Gastbetriebssystem implementiert werden würde, aber ich glaube nicht, dass ich die Fähigkeiten habe, dies zu tun. – Liam

+0

@ Liam: Auch würden Sie nicht ein "Gefühl" wie langsam oder schnell es ist, was wichtig wäre, wenn Sie z. eine Desktop-Anwendung oder andere interaktive Software. Multimedia-Anwendungen wären ebenfalls schwer zu testen. – thkala

2

Ich habe nie versucht es, aber vielleicht könnten Sie erreichen, was Sie durch die Kombination von einem Emulator wie QEMU oder VirtualBox auf Linux mit so etwas zu einem gewissen Grad wollen:

http://cpulimit.sourceforge.net/

Wenn Sie das begrenzen CPU-Zeit, die dem Emulator zur Verfügung steht, können Sie möglicherweise die Ergebnisse der Ausführung auf einem langsameren Computer simulieren. Denken Sie jedoch daran, dass dies nur die Ausführungsgeschwindigkeit beeinflussen würde (jedenfalls hoffe ich es jedenfalls).

Der CPU-Befehlssatz und andere Systemfunktionen bleiben unverändert. Dies bedeutet, dass das genaue Emulieren eines spezifischen Prozessors schwierig, wenn nicht unmöglich ist.

Darüber hinaus, so etwas wie cpulimit verwenden, die unter Verwendung von SIGSTOP und SIGCONT arbeitet immer wieder zu stoppen/starten Sie den Emulator Prozess Nebenwirkungen verursachen könnte, wie Timing Inkonsistenzen, Video-Display-Artefakte usw.

+0

Das ist interessant; Ich wusste nichts über Cpulimit. Obwohl es keine vollständige Lösung ist, ist es das wichtigste "fehlende Stück" von dem, was ich suche, weil ich denke, dass Speichergrenzen in den meisten Emulatoren bereits gesetzt werden können. Mir ist klar, dass ich den anderen Prozessor nicht emulieren würde (es sei denn, Qemu emuliert spezifisch ein bestimmtes Mitglied der x86-Familie), aber das ist wahrscheinlich nahe genug für meine Zwecke. – Liam

+0

* cpulimit * funktioniert ganz gut. OK, das Gast-Betriebssystem druckt immer noch die physikalische CPU-Geschwindigkeit, aber die verfügbare Geschwindigkeit wird von cpulimit gesetzt. z.B. 'cpulimit -l 5 -s qemu-system-i386 -cpu pentium -m 32 ' emuliert einen Pentium 166MHz ziemlich realistisch. Danke @thkala. – tuk0z