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? P>
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. P>
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. P>
Supposons que le programme est un programme compilé C. p>
5 Réponses :
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. P>
Vous pouvez susciter la situation un peu plus loin en exécutant une machine virtuelle sous une machine virtuelle sous une machine virtuelle, ... p>
... 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.
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. p>
L'idée est de joindre au programme, puis de dire à plusieurs reprises à l'application d'exécuter une instruction avec pTrace (ptace_singletep) code>. Si ce n'est pas assez lent, vous pouvez ajouter un sommeil entre chaque appel à Ptrace dans le programme de coureur. P>
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
C'est bien, mais ça va courir dans "Hiccups" :)
CPULIMIT est un outil qui fait quelque chose comme ça. Ça marche par périodiquement
Kill -Stop code> et Kill -Cont code> Le processus, qui a l'effet de fonctionner plus lentement (lors de la moyenne au fil du temps). P>
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)
Si vous avez dtrace, vous pourrez peut-être utiliser la fonction refroidir () i>. 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. P>
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).