diff options
author | jistone <jistone> | 2006-05-18 02:29:34 +0000 |
---|---|---|
committer | jistone <jistone> | 2006-05-18 02:29:34 +0000 |
commit | 1617d766b6c65e3da6b630173b42a15dd606f835 (patch) | |
tree | b8d555480141ca607639577aa49b26682471a05a /tapset/scheduler.stp | |
parent | d4c790043910cb1d7062cf576eef2a27391de6cc (diff) | |
download | systemtap-steved-1617d766b6c65e3da6b630173b42a15dd606f835.tar.gz systemtap-steved-1617d766b6c65e3da6b630173b42a15dd606f835.tar.xz systemtap-steved-1617d766b6c65e3da6b630173b42a15dd606f835.zip |
2006-05-17 Josh Stone <joshua.i.stone@intel.com>
* testsuite/buildok/sched_test.stp: test scheduler tapset
* examples/small_demos/sched_snoop.stp: demo scheduler tapset
* tapset/scheduler.stp: New scheduler tapset
Diffstat (limited to 'tapset/scheduler.stp')
-rw-r--r-- | tapset/scheduler.stp | 105 |
1 files changed, 105 insertions, 0 deletions
diff --git a/tapset/scheduler.stp b/tapset/scheduler.stp new file mode 100644 index 00000000..e1fac79d --- /dev/null +++ b/tapset/scheduler.stp @@ -0,0 +1,105 @@ +// scheduler tapset +// Copyright (C) 2006 Intel Corporation. +// +// This file is part of systemtap, and is free software. You can +// redistribute it and/or modify it under the terms of the GNU General +// Public License (GPL); either version 2, or (at your option) any +// later version. + + +function __is_idle:long() +%{ + /* Ways to detect idle-ness: + * - pid() or tid() == 0 + * - current == current->parent + * - current == this_rq()->idle + * - others? + */ + THIS->__retvalue = (current->pid == 0); +%} + + +/* probe scheduler.cpu_off + * + * Fires when a process is about to stop running on a cpu. + * + * Context: + * The process leaving the cpu. + * + * Arguments: + * task_prev - the process leaving the cpu (same as current) + * task_next - the process replacing current + * idle - boolean indicating whether current is the idle process + */ +probe scheduler.cpu_off + = kernel.inline("context_switch") +{ + task_prev = $prev + task_next = $next + idle = __is_idle() +} + + +/* probe scheduler.cpu_on + * + * Fires when a process is beginning execution on a cpu. + * + * Context: + * The resuming process. + * + * Arguments: + * task_prev - the process that was previously running on this cpu. + * idle - boolean indicating whether current is the idle process + */ +probe scheduler.cpu_on + = kernel.inline("finish_task_switch") +{ + task_prev = $prev + idle = __is_idle() +} + + +/* probe scheduler.tick + * + * Fires on the schedulers internal tick, when a processes timeslice + * accounting is updated. + * + * Context: + * The process whose accounting will be updated. + * + * Arguments: + * idle - boolean indicating whether current is the idle process + */ +probe scheduler.tick = kernel.function("scheduler_tick") +{ + idle = __is_idle() +} + + +/* probe scheduler.migrate + * + * Fires whenever a task is moved to a different cpu's runqueue. + * + * Context: + * Unknown (sometimes migration thread, sometimes cpu_to) + * + * Arguments: + * task - the process that is being migrated + * cpu_from - the cpu that is losing the task + * cpu_to - the cpu that is claiming the task + */ +probe scheduler.migrate = kernel.inline("pull_task") { + task = $p + cpu_from = $p->thread_info->cpu + cpu_to = $this_cpu +} + + +/* probe scheduler.balance + * + * Fires when a cpu attempts to find more work. + * + * Context: + * The cpu looking for more work. + */ +probe scheduler.balance = kernel.inline("idle_balance") {} |