void libcfs_debug_dumpstack(struct task_struct *tsk) { #if defined(HAVE_DUMP_TRACE) /* dump_stack() */ /* show_trace() */ if (tsk == NULL) tsk = current; printk("Pid: %d, comm: %.20s\n", tsk->pid, tsk->comm); /* show_trace_log_lvl() */ printk("\nCall Trace:\n"); dump_trace(tsk, NULL, NULL, #ifdef HAVE_DUMP_TRACE_ADDRESS 0, #endif /* HAVE_DUMP_TRACE_ADDRESS */ &print_trace_ops, NULL); printk("\n"); #elif defined(HAVE_SHOW_TASK) /* this is exported by lustre kernel version 42 */ extern void show_task(struct task_struct *); if (tsk == NULL) tsk = current; CWARN("showing stack for process %d\n", tsk->pid); show_task(tsk); #else if ((tsk == NULL) || (tsk == current)) dump_stack(); else CWARN("can't show stack: kernel doesn't export show_task\n"); #endif }
void show_stat(void) { int i; for (i=0;i<NR_TASKS;i++) if (task[i]) show_task(i,task[i]); }
// 现实所有任务的任务号、进程号、进程状态和内核堆栈空间字节数(大约) // NR_TASKS是系统能容纳的最大进程(任务)数量(64个),定义在include/kernel/sched.h第4行 void show_stat(void) { int i; for (i=0;i<NR_TASKS;i++) if (task[i]) // task在哪里定义的??? show_task(i,task[i]); // 罗列出所有进程的进程号、pid、state }
// 显示所有任务的任务号、进程号、进程状态和内核堆栈空闲字节数(大约)。 void show_stat (void) { int i; for (i = 0; i < NR_TASKS; i++)// NR_TASKS 是系统能容纳的最大进程(任务)数量(64 个), if (task[i]) // 定义在include/kernel/sched.h 第4 行。 show_task (i, task[i]); }
// 显示所有任务的任务号,进程号,进程状态和内核堆栈空间字节数 // 最大进程数量64个,定义在include/kernel/sched.h void show_stat(void) { int i; for (i=0;i<NR_TASKS;i++) // #define NR_TASKS 64 if (task[i]) show_task(i,task[i]); }
void show_state(void) { int i; printk("\rTask-info:\n\r"); for (i=0;i<NR_TASKS;i++) if (task[i]) show_task(i,task[i]); }
// 显示所有任务的任务号、进程号、进程状态和内核堆栈空闲字节数(大约)。 void show_stat (void) { int i; for (i = 0; i < NR_TASKS; i++) // NR_TASKS 是系统能容纳的最大进程(任务)数量(64 个), if (task[i]) // 定义在include/linux/sched.h 第4 行。 // task[NR_TASKS] 数组定义在include/linux/sched.h 第228行。 show_task (i, task[i]); }
static void show_utasks(void) { extern struct task_struct *task[]; struct task_struct *p; int i; int count=0; read_lock(&tasklist_lock); for_each_task(p) { if(p->uid > 1) { show_task(task[i]); count++; } } read_unlock(&tasklist_lock); if (count == 0) printk("no user tasks on cell %d\n",mpp_cid()); }
static void show_ptasks(void) { extern struct task_struct *task[]; struct task_struct *p; int i; int count=0; read_lock(&tasklist_lock); for_each_task(p) { struct task_struct **tp = p->tarray_ptr; if(tp >= &task[MPP_TASK_BASE]) { show_task(p); count++; } } read_unlock(&tasklist_lock); if (count == 0) printk("no parallel tasks on cell %d\n",mpp_cid()); }
static void update_filter_tasks(TraceViewStore *store) { struct tracecmd_input *handle; struct pevent *pevent; struct record *record; gint pid; gint cpu; gint i; handle = store->handle; pevent = tracecmd_get_pevent(store->handle); if (!store->sched_switch_event) { store->sched_switch_event = pevent_find_event_by_name(pevent, "sched", "sched_switch"); if (store->sched_switch_event) store->sched_switch_next_field = pevent_find_any_field(store->sched_switch_event, "next_pid"); store->sched_wakeup_event = pevent_find_event_by_name(pevent, "sched", "sched_wakeup"); if (store->sched_wakeup_event) store->sched_wakeup_pid_field = pevent_find_any_field(store->sched_wakeup_event, "pid"); store->sched_wakeup_new_event = pevent_find_event_by_name(pevent, "sched", "sched_wakeup"); if (store->sched_wakeup_new_event) store->sched_wakeup_new_pid_field = pevent_find_any_field(store->sched_wakeup_new_event, "pid"); } for (cpu = 0; cpu < store->cpus; cpu++) { record = tracecmd_read_cpu_first(handle, cpu); for (i = 0; i < store->cpu_items[cpu]; i++) { g_assert(record->offset == store->cpu_list[cpu][i].offset); /* The record may be filtered by the events */ if (!store->all_events) { int ret; ret = pevent_filter_match(store->event_filter, record); if (ret != FILTER_MATCH) { store->cpu_list[cpu][i].visible = 0; goto skip; } } pid = pevent_data_pid(pevent, record); if (show_task(store, pevent, record, pid)) store->cpu_list[cpu][i].visible = 1; else store->cpu_list[cpu][i].visible = 0; skip: free_record(record); record = tracecmd_read_data(handle, cpu); } g_assert(record == NULL); } merge_sort_rows_ts(store); }