como tirar o total de horas de trabalho do sistema em um dia?

2

Eu preciso tirar o total de horas de trabalho do sistema em um dia. Isso significa que o tempo entre a energização e o desligamento e também a subtração do tempo do sistema foram suspensos. A saída final deve ser total de horas de trabalho em um dia. Eu tentei alguns softwares de terceiros e minhas próprias operações baseadas em comando, mas tudo isso falhou. Como posso calcular isso? Existe alguma maneira? Eu tentei uma ideia para obter o resultado assim:

  • poder do sistema no horário: "tempo"
  • suspensão do sistema em: "hora"
  • ativação do sistema em: "hora"
  • sistema encerrado em: "hora"
  • hora total de trabalho: ((sistema encerrado - ativação do sistema) - (diferença entre o tempo de espera e o tempo de despertar))

Eu acho que é uma tarefa enorme. Você pode me ajudar?

    
por Dinesh Dhananjayan 11.07.2015 / 13:21

1 resposta

0

Nota: Esta é apenas uma resposta parcial, lidando apenas com a diferença entre o tempo de atividade e o tempo suspenso.

Você pode determinar a diferença entre o tempo de atividade e o tempo suspenso utilizando algumas das informações disponíveis por meio de /proc/timer_list .

Exemplo 1:

$ uptime
 11:58:46 up  3:43,  2 users,  load average: 0.00, 0.01, 0.05
$ cat /proc/timer_list | grep "now at"
now at 12734872068331 nsecs

Então o tempo de atividade = (3 * 60 + 43) * 60 = 13,3800 segundos. Tempo ativo = 12.735 segundos. Portanto, tempo suspenso = 13.300 - 12.735 = 645 segundos

Ou apenas observe o tempo de deslocamento de cada CPU para obter seu tempo suspenso diretamente:

$ cat /proc/timer_list | grep -A 1 "ktime_get_boottime"
  .get_time:   ktime_get_boottime
  .offset:     668016000993 nsecs
--
  .get_time:   ktime_get_boottime
  .offset:     668016000993 nsecs
--
  .get_time:   ktime_get_boottime
  .offset:     668016000993 nsecs
--
  .get_time:   ktime_get_boottime
  .offset:     668016000993 nsecs
--
  .get_time:   ktime_get_boottime
  .offset:     668016000993 nsecs
--
  .get_time:   ktime_get_boottime
  .offset:     668016000993 nsecs
--
  .get_time:   ktime_get_boottime
  .offset:     668016000993 nsecs
--
  .get_time:   ktime_get_boottime
  .offset:     668016000993 nsecs

Ou 668 segundos para cada CPU.
Por que os dois métodos diferem em 23 segundos? Porque o tempo de atividade é listado apenas no minuto. Então essa resposta é realmente 645 +59 -0 segundos (ou, dependendo do tempo de atividade, 645 + - 30 segundos.

Então, o que você parece querer executar isso durante o desligamento:

$ cat /proc/timer_list | grep "now at"
now at 25561396304263 nsecs

e divida esse número por 3,6e12 (ou seja, 7,1 horas de tempo ativo)

    
por Doug Smythies 11.07.2015 / 21:09