Wie verlangsame ich einen Prozess?

8

Angenommen, ich habe ein Programm, das in einer bestimmten Zeit (z. B. drei Sekunden) läuft. Ich möchte dieses Programm so ausführen, dass es n-mal langsamer läuft (in der Befehlszeile angegeben). Wie würdest du es mit (oder besser, ohne) Änderungen am Programm erreichen?

Bitte beachten Sie, dass das Hinzufügen eines Schlafs am Ende keine Lösung ist. Das Programm muss langsamer laufen, nicht für die ersten drei Sekunden mit voller Geschwindigkeit laufen und dann für die verbleibende Zeit nichts tun. Auch die Verwendung von "nett" unter Unix ist keine gute Lösung. es wird langsamer laufen, wenn andere Prozesse den Prozessor fordern, aber mit voller Geschwindigkeit, wenn nichts gleichzeitig Prozessor benötigt.

Das ist eine Kuriositätsfrage. Nichts ernsthaftes damit zu tun. Tatsache ist, dass ich mich an Spiele vor 15-20 Jahren erinnere, die einfach zu schnell waren, um auf neuen Prozessoren zu spielen, weil sie mit der Prozessoruhr zeitlich abgestimmt waren. Du musst den Turbo ausschalten.

Nehmen wir an, das Programm ist ein C-kompiliertes Programm.

    
Stefano Borini 07.02.2010, 08:15
quelle

5 Antworten

5

Eine Idee ist es, einen 'ptrace runner' zu schreiben. ptrace ist der Aufruf, mit dem Sie einen Debugger auf Plattformen wie Linux und Mac implementieren können.

Die Idee besteht darin, an das Programm anzuhängen und dann der Anwendung immer wieder zu sagen, dass sie eine Anweisung mit ptrace(PTACE_SINGLESTEP) ausführen soll. Wenn das nicht langsam genug ist, können Sie zwischen jedem Aufruf von ptrace im Runner-Programm einen Ruhezustand hinzufügen.

    
R Samuel Klatchko 07.02.2010, 08:26
quelle
5

Ich habe ein einfaches Beispiel auf meiner Linux-Box geschrieben, wie man einen Kindprozess mit SIGSTOP- und SIGCONT-Signalen verlangsamt:

%Vor%

Keine Verlangsamung, wenn WAIT gleich Null ist, andernfalls stoppt der Elternteil nach jedem RUN Sekunden das Kind für WAIT Sekunden.

Laufzeit Ergebnisse:

%Vor%     
sambowry 07.02.2010 12:06
quelle
2

cpulimit ist ein Tool, das so etwas macht. Es funktioniert in regelmäßigen Abständen kill -STOP und kill -CONT der Prozess, der den Effekt hat, dass es langsamer läuft (wenn es über die Zeit gemittelt wird).

    
Wim 07.02.2010 12:46
quelle
0

Wenn Sie DTrace haben, können Sie die chill () -Funktion verwenden. Sie können diesen Chill an fast jeder Stelle in einer Benutzerlandanwendung und an mehreren Stellen einfügen. Es wurde schon früher verwendet, um Rennbedingungen zu replizieren, die auf langsameren Systemen zu finden sind.

    
user2152447 10.03.2013 17:18
quelle
-6

Ich habe eine Anwendung in einer virtuellen Maschine unter Ubuntu ausgeführt. Es war sehr langsam. Sie können die Verwendung der virtuellen Maschine des Systems konfigurieren.

Sie könnten die Situation ein wenig weiter verschleiern, indem Sie eine virtuelle Maschine unter einer virtuellen Maschine unter einer virtuellen Maschine ausführen, ...

    
Blessed Geek 07.02.2010 08:23
quelle

Tags und Links