Comment ralentir votre ordinateur (à des fins de test)? [fermé]

20

Comme la plupart des gens sont d'accord, encourager les développeurs à créer du code rapide en leur donnant des machines lentes n'est pas une bonne idée . Mais il y a un point dans cette question. Ma machine de développement est rapide, et donc j'écris de temps en temps du code qui est dérangeant de manière inefficace, mais cela ne devient apparent qu'en l'exécutant sur les machines d'autres personnes.

Quels sont les bons moyens de ralentir temporairement une machine de développement turbocompressée? La notion de "vitesse" comprend plusieurs facteurs, par exemple:

  • Fréquence d'horloge du processeur.
  • Nombre de cœurs de CPU.
  • Quantité de mémoire et de cache processeur.
  • Vitesse de divers bus.
  • E / S disque.
  • GPU.
  • etc.
Joonas Pulakka
la source
34
Appuyez sur le "bouton Turbo" ... non, attendez.
LennyProgrammers
6
Voici la racine de votre problème: "Dérangement inefficace". changer votre habitude de codage
Darknight
16
@ Darknight: Non, ce n'est pas ça. Vous devez d' abord le faire correctement, puis le faire rapidement si nécessaire . Pour savoir quoi optimiser, vous devez tester et découvrir quelle est la partie problématique. Faire les choses aussi vite que possible en premier lieu est perte de votre temps - et les déchets susceptibles de le faire droit .
Joonas Pulakka
1
Eh bien, je suis en partie d'accord. Cependant, si vous avez une habitude de codage efficace au début; alors comme votre "bon fonctionnement", vous pouvez passer moins de temps plus tard "le rendre plus rapide".
Darknight
4
@Darknight: Je pense que @Joonas pose une question très sensible. L'idée que «changer votre habitude de codage» soit suffisante n'est pas réaliste. Voici un exemple: ( stackoverflow.com/questions/926266/… ) ET, l'idée que vous pouvez simplement le chronométrer sur une machine plus lente sans IDE suppose que cela suffit pour trouver des bogues de performance. Beaucoup de gens parlent de profilage, mais le faire (avec succès) est une autre affaire. Ce qui m'aiderait vraiment (et d'autres je pense), c'est ce que Joonas demande.
Mike Dunlavey

Réponses:

39

Exécutez vos tests dans une machine virtuelle avec une mémoire limitée et un seul cœur.

Les anciennes machines que les gens peuvent encore posséder sont principalement des objets de l'ère Pentium 4. Ce n'est pas si irréaliste - j'en utilise un moi-même en ce moment. Les performances monocœur sur de nombreux PC actuels ne sont normalement pas bien meilleures et peuvent être pires. Les performances de la RAM sont plus importantes que les performances du CPU pour de nombreuses choses de toute façon, et en limitant un peu plus sévèrement que pour un ancien P4 de 1 Go, vous compensez un peu cela.

A défaut, si vous êtes prêt à dépenser un peu, achetez un netbook. Exécutez les tests à ce sujet.

Steve314
la source
1
Ou un ordinateur portable vieillard.
Le problème avec les machines virtuelles est qu'aucune d'entre elles (AFAIK) ne prend en charge le port IEEE 1394 (firewire). Certains de mes logiciels utilisent des caméras connectées au FireWire, donc ...
Joonas Pulakka
les vrais vous permettent d'assigner n'importe quel périphérique PCI à la VM
Javier
3
Cela pourrait être un travail pour Xen - la machine virtuelle n'a pas d'O / S hôte, mais est la couche supérieure en soi. A une histoire fortement Unix, mais peut désormais prendre en charge les systèmes d'exploitation propriétaires. Mais je ne l'ai jamais utilisé et je ne sais pas combien de contrôle vous pouvez avoir sur les performances et les ressources d'une machine virtuelle particulière.
Steve314
1
+1 Une machine virtuelle est hautement réglable et fournit exactement l'environnement que vous recherchez pour les tests. J'utilise VMWare moi-même à cette fin.
Gary Rowe
11

Le moyen de détecter une inefficacité importante de l'algorithme est de profiler votre code. La façon d'attraper la surutilisation de la mémoire consiste à comprendre d'abord la quantité de mémoire utilisée par votre cible, puis à la concevoir en conséquence et à tester régulièrement dans cet environnement.

Si vous écrivez du code threadé, les tests sur plusieurs machines avec des vitesses de processeur différentes aideront à mettre en évidence des bogues spécifiques liés au timing dans votre gestion des threads, mais des tests unitaires agressifs de la logique des threads sont indispensables.

Michael Shaw
la source
1
Non, le profilage ne détectera pas l'inefficacité algorithmique. Il vous montrera où le programme passe son temps si vous devez l'accélérer, mais pas si vous devez l'accélérer.
David Thornley
Je pense que je manque la distinction ici. Si vous voulez dire que le profilage ne vous dira pas SI vous êtes sous-optimal, juste où vous passez vos cycles de processeur, alors je suis d'accord. Cela prend de l'expérience pour porter ce jugement.
Michael Shaw
4
@David Thornley & @Ptolemy: Je pense que l'inefficacité des algorithmes ou les points chauds du code sont secondaires au problème principal: "Est-ce trop lent ou pas?" C'est subjectif, mais c'est aussi la question la plus importante. Si cela ne semble pas lent dans la pratique, alors que se passe-t-il si votre algorithme est inefficace? Il fait ce qu'il doit faire! Ou si le programme semble trop lent malgré les algorithmes hautement optimaux, vous devrez peut-être changer complètement l'approche (architecture? Langage de programmation? Quelque chose!). Avoir des algorithmes hautement optimaux n'est pas une excuse pour la lenteur du programme :-)
Joonas Pulakka
1
Pour révéler l'inefficacité de l'algorithme, utilisez des ensembles de données de taille progressive pour les tests.
rwong
10

Tout ce que vous faites pour ralentir votre machine serait probablement un hack.

Voici quelques suggestions:

  • Utiliser des machines virtuelles
  • Profilez le code sur votre machine, à la recherche de goulots d'étranglement
  • Utiliser une vieille machine pour "tester les performances"
Jason
la source
@matt qu'est-ce que cela signifie?
johnny
1
@johnny: Je veux dire que je vote parce que Jason a suggéré de profiler l'application, qui, espérons-le, trouverait la source des goulots d'étranglement de performance sans avoir besoin de passer à un système plus lent.
Matt Ellen
4

Sachez que c'est une question assez ancienne, mais pour quiconque dans cette situation; vous pouvez essayer CPUKiller. Il s'agit essentiellement d'une petite application que vous pouvez configurer pour consommer différents% de votre processeur. http://www.cpukiller.com/

Dave
la source