9
votes

Comment ralentir un processus?

Supposons que j'ai un programme qui fonctionne dans une durée donnée (disons, trois secondes). Je veux exécuter ce programme afin qu'il exécute N-fois plus lent (spécifié sur la ligne de commande). Comment l'atteindra-tu avec (ou mieux, sans) des modifications du programme?

Veuillez noter que l'ajout d'un sommeil à la fin n'est pas une solution. Le programme doit courir plus lentement, ne pas courir à pleine vitesse pendant les trois premières secondes, puis ne rien faire pour le temps restant. En outre, en utilisant «Nice» sous Unix n'est pas une bonne solution non plus. Il fonctionnera plus lentement si d'autres processus exigent le processeur, mais à toute vitesse si rien n'est un processeur, exigeant en même temps.

Ceci est une question de curiosité. Rien de sérieux à faire en relation. Le fait est que je me souviens de 15 à 20 ans des matchs simplement trop rapides pour jouer sur de nouveaux processeurs, car ils ont été chronométrés avec l'horloge du processeur. Vous deviez éteindre le turbo.

Supposons que le programme est un programme compilé C.


1 commentaires

La solution pour faire fonctionner de vieux jeux sur les nouveaux ordinateurs est de les exécuter dans DosBox (je pense qu'il émule DOS sur un 386 ou quelque chose).


5 Réponses :


-6
votes

J'ai dirigé une certaine application dans une machine virtuelle sous Ubuntu. C'était vraiment lent. Vous pouvez configurer l'utilisation de la machine virtuelle du système.

Vous pouvez susciter la situation un peu plus loin en exécutant une machine virtuelle sous une machine virtuelle sous une machine virtuelle, ...


4 commentaires

... ce qui n'est pas possible BTW.


@Johannes Rudolph - n'est-ce pas? Googling "machines virtuelles imbriquées" reçoit des résultats. Par exemple: vritical.com/2009/ 05 / VMware-ESX-4-CAN-CAN-MÊME-VIRTUALIZE-ITSEL F


Je ne ferai pas quelque chose comme ça, il y a des moyens plus pratiques de le faire.


En effet, j'ai constaté que le moyen le plus pratique de ralentir une application était de l'exécuter dans une machine virtuelle affamée. VirtualBox est si facile à configurer. Il est possible de gérer une machine virtuelle sous une machine virtuelle, bien que cela serait idiot.



5
votes

Une idée est d'écrire un 'ptrace Runner.' pTrace est l'appel qui vous permet d'implémenter un débogueur sur des plates-formes telles que Linux et Mac.

L'idée est de joindre au programme, puis de dire à plusieurs reprises à l'application d'exécuter une instruction avec pTrace (ptace_singletep) . Si ce n'est pas assez lent, vous pouvez ajouter un sommeil entre chaque appel à Ptrace dans le programme de coureur.


0 commentaires

5
votes

J'ai écrit un exemple simple sur ma boîte Linux comment ralentir un processus enfant avec SIGSTOP et SIGCONT Signaux:

RUN=1 WAIT=0
---------------
real     3.905s
user     3.704s
sys      0.012s

RUN=1 WAIT=1
---------------
real     9.061s
user     3.640s
sys      0.016s

RUN=1 WAIT=2
---------------
real    13.027s
user     3.372s
sys      0.032s


1 commentaires

C'est bien, mais ça va courir dans "Hiccups" :)



3
votes

CPULIMIT est un outil qui fait quelque chose comme ça. Ça marche par périodiquement Kill -Stop et Kill -Cont Le processus, qui a l'effet de fonctionner plus lentement (lors de la moyenne au fil du temps).


1 commentaires

Cet outil m'a sauvé, vraiment serviable, a réduit mon utilisation de la CPU de sauvegarde par beaucoup (et la température de l'ordinateur portable est tombée assez vite)



0
votes

Si vous avez dtrace, vous pourrez peut-être utiliser la fonction refroidir () . Vous pouvez insérer ce froid à presque n'importe où dans une application Userland et dans plusieurs endroits. Il a été utilisé avant de répliquer les conditions de course observées sur des systèmes plus lents.


0 commentaires