2012-02-08 1 views
3

J'écris un code C (sur Linux) qui doit consommer une certaine quantité de CPU lorsqu'il est en cours d'exécution. Je réalise une expérience dans laquelle je déclenche certaines actions en atteignant un certain seuil CPU. Donc, une fois que l'utilisation atteint un certain seuil, je dois le garder à cet état pendant 30 secondes, jusqu'à ce que je termine mes expériences. Je surveille l'utilisation du CPU en utilisant la commande du haut. Mes questions sont les suivantes: - 1. Comment augmenter l'utilisation de l'UC à une valeur donnée (de manière déterministe si possible)? 2. Une fois arrivé au seuil, y a-t-il un moyen de le garder à ce niveau pendant une durée prédéfinie?Augmenter l'utilisation du processeur et le maintenir à un certain niveau en utilisant le code C

Exemple de sortie de commande supérieure (la colonne 9 est CPU utilisé par le processus 'top') - 19304 abcde 16 0 5448 1212 808 R 0,2 0,0 0: 00,06 haut

similaires à ci-dessus, je regarde à la ligne en haut qui montre l'utilisation de mon binaire.

Toute aide serait appréciée. Aussi, laissez-moi savoir si vous avez besoin de plus de détails.

Merci! Les lignes de code suivantes m'ont permis de contrôler assez bien l'utilisation du CPU - Dans le cas suivant, j'ai 2 options - le garder au dessus de 50% et le garder au dessous de 50% - Après quelques essais et erreurs, je établi aux valeurs usleep donné.

endwait = clock() + (seconds * CLOCKS_PER_SEC); 
while(clock() < endwait) {} 
if (cpu_utilization > 50) 
    usleep(250000); 
else 
    usleep(700000); 

Espérons que cela aide!

+3

Utilisez une combinaison de veille et de boucle occupée, de veille, de boucle occupée, de veille, de boucle occupée, etc. pour obtenir l'utilisation de l'unité centrale que vous souhaitez. –

+0

Bien qu'une boucle occupée maintienne évidemment l'utilisation de l'UC indiquée au minimum, vous pouvez vouloir y lancer des accès mémoire non alignés afin de maintenir l'unité centrale occupée. –

Répondre

2

cpuburn est connu pour rendre l'utilisation de l'UC si élevée qu'elle élève sa température à son niveau maximum. Il semble qu'il n'y ait plus de site officiel à ce sujet, mais vous pouvez toujours accéder au code source avec Debian package ou googlecode. Il est mis en œuvre asm, de sorte que vous aurez à faire un peu de colle afin d'interagir avec elle en C.

2

Quelque chose de ce genre devrait avoir une utilisation du processeur constante, à mon avis: md5sum </dev/urandom

+0

Bonjour et merci d'avoir répondu à vos questions. Etes-vous sûr que urandom ne bloquera pas à certains points parce qu'il demande un reseed? Il me semble que le simple fait d'effectuer des hachages sur des données connues est aussi efficace et a moins de chance de bloquer. –

+0

'/ dev/urandom' ne bloquera pas alors que'/dev/random' le fera. Cependant, consommer des données de l'un ou de l'autre diminuera le pool d'entropie et pourrait ralentir certaines opérations dans le futur (par exemple la cryptographie dans ssh/ssl). Hacher '/ dev/zero' devrait vous donner la même consommation de CPU sans les risques supplémentaires. –

Questions connexes