1. Este site usa cookies. Ao continuar a usar este site está a concordar com o nosso uso de cookies. Saber Mais.

Controlar Load do cpu

Discussão em 'Programação' iniciada por Fric, 28 de Março de 2005. (Respostas: 14; Visualizações: 1040)

  1. Fric

    Fric Power Member

    I want to control the cpu load to test the power consume at a specified load.

    Exemple:
    -Fix the load at 65% and check the power consume of the computer using a Voltage and Current meter


    I was thinking in something like this:
    sleep(x);
    /*X time (X float and inside [0;1]) */
    while(1);
    /* during 1-X time */

    This doesn't work because the time unit is to large (sleep only accept seconds), i want something like miliseconds ou even microseconds.

    Any idea?


    Fiquem bem
     
  2. xtr3me

    xtr3me Power Member

    Por acaso tenho ideia que o sleep tb pode ser feito em milisegundos, mas agora n tenho a certeza (acho que já código onde no comment tava a dizer que o tempo era em milisegundos),
    De qualquer maneira, checka o usleep(), que faz o mm que o sleep, mas em microsegundos.
     
  3. Fric

    Fric Power Member

    Ya, essa funcao serve perfeitamente mas a questao agora e' outra:

    Tenho um ciclo principal:

    While(1){

    usleep(x);
    100load(1-x);

    }

    A funcao 100load() o q me faz e' o contrario do usleep, coloca-me o load do cpu durante 1-x tempo a 100%

    Infelizmente n conheco nenhuma funcao q se comporte assim, alguma ideia?

    Obrigado mais uma vez :)
     
  4. Fric

    Fric Power Member

    I was thinking in something like this:

    [c]void fullload(int Delay){
    int timeStamp;

    timeStamp=currTimeInUSecond(); /* dont know if this exist, need something like this */

    /* Pooling until the Delay have pass */
    while(currTimeInUSecond()<timeStamp+Delay);

    return;
    }[/c]

    Where can i get a similar funcion currTimeInUSecond(); ?
     
  5. NoMercy

    NoMercy Power Member

    @ Fric, porque é que estás a escrever em Inglês? acho que por aqui, só andam pessoas de expressão e língua Portuguesa
     
  6. Fric

    Fric Power Member

    Porque tb postei em foruns internacionais e como a maioria do ppl aqui percebe minimamente de ingles penso q nao seja um problema.

    Se alguem tiver duvida em perceber digam q eu rapidamente explicarei em portugues :)

    Fica bem
     
  7. Fric

    Fric Power Member

    Código:
    #include <stdio.h>
    #include <sys/time.h>
    
    #define LOAD 6
    
    void fullload(int Delay){
    
     int timeStamp;
     struct timeval tv;
     struct timezone tz;
    
     gettimeofday(&tv,&tz);
    
     timeStamp=tv.tv_usec;
    
     while(1){
      gettimeofday(&tv,&tz);
      if(timeStamp+Delay>tv.tv_usec)
       break;
     }
     return;
    }
    
    int main(){
     while(1){
      usleep(LOAD);
      fullload(10-LOAD); 
     }
    }
    

    Doesn't work... dont know why...
    The load's goes to 150% consulting /proc/loadavg :(

    Any idea?
     
  8. Fric

    Fric Power Member

    I founded a soulution:

    Código:
    #include <stdio.h>
    #include <sys/time.h>
    #include <unistd.h>
    #include <sys/types.h>
    #include <sys/wait.h>
    #include <signal.h>
    
    #define LOAD 20
    
    int main(){
    
     int pid;
     
     /* Create a Son and a Father process */
     pid=fork();
      
     /* If its the son consume 100% of resources */
     if(pid==0){   
      while(1);
     }
      
     /* Father */
     else{
      while(1){
       
       /* 100% Load */
       usleep(LOAD*10000);
       /* Stops child processes */
       kill(pid,SIGSTOP);
    
       /* 0% Load */   
       usleep(999999-LOAD*10000);
       /* Resume child process */
       kill(pid,SIGCONT);
      }
     }
     return 0;
    }
    
    Finalmente uma solucao... tava dificil... vou mas e' dormir.

    Obrigado e ate amanha
     
  9. redalert

    redalert Folding Member

    boas.

    programa curioso. :)
    ja agora alguem sabe como monitorizar o load do cpu em tempo real (p.e. 1 em 1 seg) em linux?

    tks.


    ps: nao kero medias do load do cpu. mas sim um "shot" do load do cpu num dado instante/periodo_de_tempo. :)
     
  10. NoMercy

    NoMercy Power Member

    redalert, bem que tu e o Fric podiam juntar esforços para desenvolver aquele cpu burner/bencher que andavas a desenvolver aqui á uns tempos, uma vez que estão a trabalhar em coisas parecidas.
     
  11. redalert

    redalert Folding Member

    boas.

    nao me importo nda de juntar esforços com + coders. :001: simplificava-me muito a vida e enriquecia o programa visto k 2 cabecas pensam mais k 1. :P

    esta cena de monitorizar o cpu é com outro fim. keria fazer uma peça de modding para a minha caixa... adivinhem la.... :D

    [[]]


    ps: o cburner anda "parado" pk n tenho tido grande oportunidade de continuar o projecto por mera falta de tempo. :\ vamos la ver se ate fins de abril ja tenho uma versao 1.1 'betah 6' para linux. ;)
     
  12. Fric

    Fric Power Member

    Por acaso queria uma coisa semelhante, o melhor q encontrei foi um "cat /proc/loadavg" mas isto so me diz a media do load para tres intervalos diferentes (1 minuto, 5 minutos e 15 minutos)

    Encontrei tambem um outro aplicativo q me diz o load instantaneo, o "top". Talvez com grep's consiga chegar somente ao valor do cpu load mas definitivamente nao e' a melhor solucao.


    Espero daqui a uns dias ja saber como chegar ao load instantaneo pois irei necessitar dele para o trabalho q estou a desenvolver (controlo da frequencia do cpu consoante o load do cpu, o estado da bateria, e mais algumas coisas)


    Fiquem bem
     
  13. redalert

    redalert Folding Member

    esse teu trabalho vai ser opensource, n vai? :D

    [[]]
     
  14. Fric

    Fric Power Member

    E' o meu trabalho final de curso para a faculdade.

    Neste momento consigo controlar a frequencia do processador consoante o estado do load avg durante 1 minuto e ainda o estado da bateria, tudo automaticamente (um daemon q fica a correr)
    Funciona com processadores q suportem speedstep (q tenham o kernel compilado com este modulo)

    Vai ser open source sem duvida mas nao no imediato, posso simplesmente disponibilizar o binario.
     
  15. redalert

    redalert Folding Member

    $me espera! :001: mas n muito... :-D ;P

    tks
    [[]]
     

Partilhar esta Página