linux: Existe uma maneira de descarregar a fila de execução de tarefas?

2

Estou enfrentando um problema de carga extrema estranha em condições ociosas .

Existe uma maneira de despejar diretamente a fila de execução do agendador do processo linux?
Por exemplo. quando sar -q gera 400 como runq-sz , para obter esses 400 PIDs?

ps , top e amigos parecem ser "lentos" demais para tirar um instantâneo instantâneo, porque eles mostram apenas alguns processos em D ou R state.

    
por MRalwasser 29.07.2016 / 20:31

2 respostas

1

Eu não sei como despejar a fila de execução, mas você pode conseguir outras informações usando perf . Por exemplo, se uma tempestade de novos processos estiver sendo criada, você pode rastreá-los com

perf record -e sched:sched_process_exec -a

Pare a gravação com o controle-C e observe os resultados com perf report . Você também pode pesquisar os scripts simples, mas poderosos, baseados em perf que Brendan Gregg reuniu.

    
por 30.07.2016 / 14:38
0

Olhando diretamente para o código-fonte do kernel, você pode procurar tarefas como as seguintes.

struct task_struct *process, *thread;
int cnt = 0;

rcu_read_lock();
for_each_process_thread(process, thread) {
    task_lock(thread);

/* do something with the task properties:

     thread->state;
     thread->wake_cpu;
     thread->pid;
     thread->comm;
*/

    task_unlock(thread);
    cnt++;
}
rcu_read_unlock();

A parte mais importante é bloquear as tarefas RCU na entrada e desbloquear na saída. Você codificará este despejo em um módulo do kernel e fornecerá um meio de recuperar a lista em um comando de espaço do usuário.

Sugiro-lhe que leia e melhore as suas necessidades no meu exemplo no GitHub @ dumptask

    
por 11.01.2017 / 20:05