15db28971f91c98efb449aebf46024ac72779fa3Krishnendu Sadhukhan - Sun Microsystems/*
15db28971f91c98efb449aebf46024ac72779fa3Krishnendu Sadhukhan - Sun Microsystems * CDDL HEADER START
15db28971f91c98efb449aebf46024ac72779fa3Krishnendu Sadhukhan - Sun Microsystems *
15db28971f91c98efb449aebf46024ac72779fa3Krishnendu Sadhukhan - Sun Microsystems * The contents of this file are subject to the terms of the
15db28971f91c98efb449aebf46024ac72779fa3Krishnendu Sadhukhan - Sun Microsystems * Common Development and Distribution License (the "License").
15db28971f91c98efb449aebf46024ac72779fa3Krishnendu Sadhukhan - Sun Microsystems * You may not use this file except in compliance with the License.
15db28971f91c98efb449aebf46024ac72779fa3Krishnendu Sadhukhan - Sun Microsystems *
15db28971f91c98efb449aebf46024ac72779fa3Krishnendu Sadhukhan - Sun Microsystems * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
15db28971f91c98efb449aebf46024ac72779fa3Krishnendu Sadhukhan - Sun Microsystems * or http://www.opensolaris.org/os/licensing.
15db28971f91c98efb449aebf46024ac72779fa3Krishnendu Sadhukhan - Sun Microsystems * See the License for the specific language governing permissions
15db28971f91c98efb449aebf46024ac72779fa3Krishnendu Sadhukhan - Sun Microsystems * and limitations under the License.
15db28971f91c98efb449aebf46024ac72779fa3Krishnendu Sadhukhan - Sun Microsystems *
15db28971f91c98efb449aebf46024ac72779fa3Krishnendu Sadhukhan - Sun Microsystems * When distributing Covered Code, include this CDDL HEADER in each
15db28971f91c98efb449aebf46024ac72779fa3Krishnendu Sadhukhan - Sun Microsystems * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
15db28971f91c98efb449aebf46024ac72779fa3Krishnendu Sadhukhan - Sun Microsystems * If applicable, add the following below this CDDL HEADER, with the
15db28971f91c98efb449aebf46024ac72779fa3Krishnendu Sadhukhan - Sun Microsystems * fields enclosed by brackets "[]" replaced with your own identifying
15db28971f91c98efb449aebf46024ac72779fa3Krishnendu Sadhukhan - Sun Microsystems * information: Portions Copyright [yyyy] [name of copyright owner]
15db28971f91c98efb449aebf46024ac72779fa3Krishnendu Sadhukhan - Sun Microsystems *
15db28971f91c98efb449aebf46024ac72779fa3Krishnendu Sadhukhan - Sun Microsystems * CDDL HEADER END
15db28971f91c98efb449aebf46024ac72779fa3Krishnendu Sadhukhan - Sun Microsystems */
15db28971f91c98efb449aebf46024ac72779fa3Krishnendu Sadhukhan - Sun Microsystems/*
15db28971f91c98efb449aebf46024ac72779fa3Krishnendu Sadhukhan - Sun Microsystems * Copyright (c) 2008-2009, Intel Corporation.
15db28971f91c98efb449aebf46024ac72779fa3Krishnendu Sadhukhan - Sun Microsystems * All Rights Reserved.
15db28971f91c98efb449aebf46024ac72779fa3Krishnendu Sadhukhan - Sun Microsystems */
15db28971f91c98efb449aebf46024ac72779fa3Krishnendu Sadhukhan - Sun Microsystems
15db28971f91c98efb449aebf46024ac72779fa3Krishnendu Sadhukhan - Sun Microsystems#define MAX_TAG 8
15db28971f91c98efb449aebf46024ac72779fa3Krishnendu Sadhukhan - Sun Microsystems#define MAX_STACK 64
15db28971f91c98efb449aebf46024ac72779fa3Krishnendu Sadhukhan - Sun Microsystems
15db28971f91c98efb449aebf46024ac72779fa3Krishnendu Sadhukhan - Sun Microsystems#pragma D option aggsize=8m
15db28971f91c98efb449aebf46024ac72779fa3Krishnendu Sadhukhan - Sun Microsystems#pragma D option bufsize=16m
15db28971f91c98efb449aebf46024ac72779fa3Krishnendu Sadhukhan - Sun Microsystems#pragma D option dynvarsize=16m
15db28971f91c98efb449aebf46024ac72779fa3Krishnendu Sadhukhan - Sun Microsystems#pragma D option aggrate=0
15db28971f91c98efb449aebf46024ac72779fa3Krishnendu Sadhukhan - Sun Microsystems#pragma D option stackframes=MAX_STACK
15db28971f91c98efb449aebf46024ac72779fa3Krishnendu Sadhukhan - Sun Microsystems/*
15db28971f91c98efb449aebf46024ac72779fa3Krishnendu Sadhukhan - Sun Microsystems * Our D script needs to compile even if some of the TRANSLATE probes cannot
15db28971f91c98efb449aebf46024ac72779fa3Krishnendu Sadhukhan - Sun Microsystems * be found. Missing probes can be caused by older kernel, different
15db28971f91c98efb449aebf46024ac72779fa3Krishnendu Sadhukhan - Sun Microsystems * architecture, unloaded modules etc.
15db28971f91c98efb449aebf46024ac72779fa3Krishnendu Sadhukhan - Sun Microsystems */
15db28971f91c98efb449aebf46024ac72779fa3Krishnendu Sadhukhan - Sun Microsystems#pragma D option zdefs
15db28971f91c98efb449aebf46024ac72779fa3Krishnendu Sadhukhan - Sun Microsystems
15db28971f91c98efb449aebf46024ac72779fa3Krishnendu Sadhukhan - Sun Microsystems#if defined(ENABLE_SCHED)
a9c12afde877c596eed286ac3f1d518246e5cd1eKrishnendu Sadhukhan - Sun Microsystems#if defined(TRACE_PID)
a9c12afde877c596eed286ac3f1d518246e5cd1eKrishnendu Sadhukhan - Sun Microsystems#define TRACE_FILTER / pid == 0 || pid == TRACE_PID /
a9c12afde877c596eed286ac3f1d518246e5cd1eKrishnendu Sadhukhan - Sun Microsystems#define TRACE_FILTER_COND(a) / (pid == 0 || pid == TRACE_PID) && (a) /
a9c12afde877c596eed286ac3f1d518246e5cd1eKrishnendu Sadhukhan - Sun Microsystems#elif defined(TRACE_PGID)
a9c12afde877c596eed286ac3f1d518246e5cd1eKrishnendu Sadhukhan - Sun Microsystems#define TRACE_FILTER / pid == 0 || curpsinfo->pr_pgid == TRACE_PGID /
a9c12afde877c596eed286ac3f1d518246e5cd1eKrishnendu Sadhukhan - Sun Microsystems#define TRACE_FILTER_COND(a)
a9c12afde877c596eed286ac3f1d518246e5cd1eKrishnendu Sadhukhan - Sun Microsystems / (pid == 0 || curpsinfo->pr_pgid == TRACE_PGID) && (a) /
a9c12afde877c596eed286ac3f1d518246e5cd1eKrishnendu Sadhukhan - Sun Microsystems#else
15db28971f91c98efb449aebf46024ac72779fa3Krishnendu Sadhukhan - Sun Microsystems#define TRACE_FILTER
15db28971f91c98efb449aebf46024ac72779fa3Krishnendu Sadhukhan - Sun Microsystems#define TRACE_FILTER_COND(a) / (a) /
a9c12afde877c596eed286ac3f1d518246e5cd1eKrishnendu Sadhukhan - Sun Microsystems#endif
a9c12afde877c596eed286ac3f1d518246e5cd1eKrishnendu Sadhukhan - Sun Microsystems#else /* ENABLE_SCHED */
a9c12afde877c596eed286ac3f1d518246e5cd1eKrishnendu Sadhukhan - Sun Microsystems#if defined(TRACE_PID)
a9c12afde877c596eed286ac3f1d518246e5cd1eKrishnendu Sadhukhan - Sun Microsystems#define TRACE_FILTER / pid == TRACE_PID /
a9c12afde877c596eed286ac3f1d518246e5cd1eKrishnendu Sadhukhan - Sun Microsystems#define TRACE_FILTER_COND(a) / (pid == TRACE_PID) && (a) /
a9c12afde877c596eed286ac3f1d518246e5cd1eKrishnendu Sadhukhan - Sun Microsystems#elif defined(TRACE_PGID)
a9c12afde877c596eed286ac3f1d518246e5cd1eKrishnendu Sadhukhan - Sun Microsystems#define TRACE_FILTER / curpsinfo->pr_pgid == TRACE_PGID /
a9c12afde877c596eed286ac3f1d518246e5cd1eKrishnendu Sadhukhan - Sun Microsystems#define TRACE_FILTER_COND(a) / (curpsinfo->pr_pgid == TRACE_PGID) && (a) /
15db28971f91c98efb449aebf46024ac72779fa3Krishnendu Sadhukhan - Sun Microsystems#else
15db28971f91c98efb449aebf46024ac72779fa3Krishnendu Sadhukhan - Sun Microsystems#define TRACE_FILTER / pid != 0 /
a9c12afde877c596eed286ac3f1d518246e5cd1eKrishnendu Sadhukhan - Sun Microsystems#define TRACE_FILTER_COND(a) / (pid != 0) && (a) /
15db28971f91c98efb449aebf46024ac72779fa3Krishnendu Sadhukhan - Sun Microsystems#endif
a9c12afde877c596eed286ac3f1d518246e5cd1eKrishnendu Sadhukhan - Sun Microsystems#endif /* ENABLE_SCHED */
15db28971f91c98efb449aebf46024ac72779fa3Krishnendu Sadhukhan - Sun Microsystems
15db28971f91c98efb449aebf46024ac72779fa3Krishnendu Sadhukhan - Sun Microsystems/* Threshold to filter WAKEABLE latencies. */
15db28971f91c98efb449aebf46024ac72779fa3Krishnendu Sadhukhan - Sun Microsystems#define FILTER_THRESHOLD 5000000
15db28971f91c98efb449aebf46024ac72779fa3Krishnendu Sadhukhan - Sun Microsystems/* From thread.h */
15db28971f91c98efb449aebf46024ac72779fa3Krishnendu Sadhukhan - Sun Microsystems#define T_WAKEABLE 2
15db28971f91c98efb449aebf46024ac72779fa3Krishnendu Sadhukhan - Sun Microsystems
15db28971f91c98efb449aebf46024ac72779fa3Krishnendu Sadhukhan - Sun Microsystems/*
15db28971f91c98efb449aebf46024ac72779fa3Krishnendu Sadhukhan - Sun Microsystems * This array is used to store timestamp of when threads are enqueued
15db28971f91c98efb449aebf46024ac72779fa3Krishnendu Sadhukhan - Sun Microsystems * to dispatch queue.
15db28971f91c98efb449aebf46024ac72779fa3Krishnendu Sadhukhan - Sun Microsystems * self-> is not accessible when enqueue happens.
15db28971f91c98efb449aebf46024ac72779fa3Krishnendu Sadhukhan - Sun Microsystems */
15db28971f91c98efb449aebf46024ac72779fa3Krishnendu Sadhukhan - Sun Microsystemsunsigned long long lt_timestamps[int, int];
15db28971f91c98efb449aebf46024ac72779fa3Krishnendu Sadhukhan - Sun Microsystems
15db28971f91c98efb449aebf46024ac72779fa3Krishnendu Sadhukhan - Sun Microsystemsself unsigned int lt_is_block_wakeable;
15db28971f91c98efb449aebf46024ac72779fa3Krishnendu Sadhukhan - Sun Microsystemsself unsigned long long lt_sleep_start;
15db28971f91c98efb449aebf46024ac72779fa3Krishnendu Sadhukhan - Sun Microsystemsself unsigned long long lt_sleep_duration;
15db28971f91c98efb449aebf46024ac72779fa3Krishnendu Sadhukhan - Sun Microsystemsself unsigned long long lt_sch_delay;
15db28971f91c98efb449aebf46024ac72779fa3Krishnendu Sadhukhan - Sun Microsystemsself unsigned int lt_counter; /* only used in low overhead */
15db28971f91c98efb449aebf46024ac72779fa3Krishnendu Sadhukhan - Sun Microsystemsself unsigned long long lt_timestamp; /* only used in low overhead */
15db28971f91c98efb449aebf46024ac72779fa3Krishnendu Sadhukhan - Sun Microsystemsself unsigned int lt_stackp;
15db28971f91c98efb449aebf46024ac72779fa3Krishnendu Sadhukhan - Sun Microsystemsself unsigned int lt_prio[int];
15db28971f91c98efb449aebf46024ac72779fa3Krishnendu Sadhukhan - Sun Microsystemsself string lt_cause[int];
15db28971f91c98efb449aebf46024ac72779fa3Krishnendu Sadhukhan - Sun Microsystems
15db28971f91c98efb449aebf46024ac72779fa3Krishnendu Sadhukhan - Sun Microsystemsthis unsigned int priority;
15db28971f91c98efb449aebf46024ac72779fa3Krishnendu Sadhukhan - Sun Microsystemsthis string cause;
15db28971f91c98efb449aebf46024ac72779fa3Krishnendu Sadhukhan - Sun Microsystems
15db28971f91c98efb449aebf46024ac72779fa3Krishnendu Sadhukhan - Sun Microsystems/*
15db28971f91c98efb449aebf46024ac72779fa3Krishnendu Sadhukhan - Sun Microsystems * Clean up everything, otherwise we will run out of memory.
15db28971f91c98efb449aebf46024ac72779fa3Krishnendu Sadhukhan - Sun Microsystems */
15db28971f91c98efb449aebf46024ac72779fa3Krishnendu Sadhukhan - Sun Microsystemsproc:::lwp-exit
15db28971f91c98efb449aebf46024ac72779fa3Krishnendu Sadhukhan - Sun Microsystems{
15db28971f91c98efb449aebf46024ac72779fa3Krishnendu Sadhukhan - Sun Microsystems lt_timestamps[curpsinfo->pr_pid, curlwpsinfo->pr_lwpid] = 0;
15db28971f91c98efb449aebf46024ac72779fa3Krishnendu Sadhukhan - Sun Microsystems
15db28971f91c98efb449aebf46024ac72779fa3Krishnendu Sadhukhan - Sun Microsystems self->lt_sleep_start = 0;
15db28971f91c98efb449aebf46024ac72779fa3Krishnendu Sadhukhan - Sun Microsystems self->lt_is_block_wakeable = 0;
15db28971f91c98efb449aebf46024ac72779fa3Krishnendu Sadhukhan - Sun Microsystems self->lt_counter = 0;
15db28971f91c98efb449aebf46024ac72779fa3Krishnendu Sadhukhan - Sun Microsystems self->lt_timestamp = 0;
15db28971f91c98efb449aebf46024ac72779fa3Krishnendu Sadhukhan - Sun Microsystems
15db28971f91c98efb449aebf46024ac72779fa3Krishnendu Sadhukhan - Sun Microsystems /*
15db28971f91c98efb449aebf46024ac72779fa3Krishnendu Sadhukhan - Sun Microsystems * Workaround: no way to clear associative array.
15db28971f91c98efb449aebf46024ac72779fa3Krishnendu Sadhukhan - Sun Microsystems * We have to manually clear 0 ~ (MAX_TAG-1).
15db28971f91c98efb449aebf46024ac72779fa3Krishnendu Sadhukhan - Sun Microsystems */
15db28971f91c98efb449aebf46024ac72779fa3Krishnendu Sadhukhan - Sun Microsystems
15db28971f91c98efb449aebf46024ac72779fa3Krishnendu Sadhukhan - Sun Microsystems self->lt_prio[0] = 0;
15db28971f91c98efb449aebf46024ac72779fa3Krishnendu Sadhukhan - Sun Microsystems self->lt_prio[1] = 0;
15db28971f91c98efb449aebf46024ac72779fa3Krishnendu Sadhukhan - Sun Microsystems self->lt_prio[2] = 0;
15db28971f91c98efb449aebf46024ac72779fa3Krishnendu Sadhukhan - Sun Microsystems self->lt_prio[3] = 0;
15db28971f91c98efb449aebf46024ac72779fa3Krishnendu Sadhukhan - Sun Microsystems self->lt_prio[4] = 0;
15db28971f91c98efb449aebf46024ac72779fa3Krishnendu Sadhukhan - Sun Microsystems self->lt_prio[5] = 0;
15db28971f91c98efb449aebf46024ac72779fa3Krishnendu Sadhukhan - Sun Microsystems self->lt_prio[6] = 0;
15db28971f91c98efb449aebf46024ac72779fa3Krishnendu Sadhukhan - Sun Microsystems self->lt_prio[7] = 0;
15db28971f91c98efb449aebf46024ac72779fa3Krishnendu Sadhukhan - Sun Microsystems
15db28971f91c98efb449aebf46024ac72779fa3Krishnendu Sadhukhan - Sun Microsystems self->lt_cause[0] = 0;
15db28971f91c98efb449aebf46024ac72779fa3Krishnendu Sadhukhan - Sun Microsystems self->lt_cause[1] = 0;
15db28971f91c98efb449aebf46024ac72779fa3Krishnendu Sadhukhan - Sun Microsystems self->lt_cause[2] = 0;
15db28971f91c98efb449aebf46024ac72779fa3Krishnendu Sadhukhan - Sun Microsystems self->lt_cause[3] = 0;
15db28971f91c98efb449aebf46024ac72779fa3Krishnendu Sadhukhan - Sun Microsystems self->lt_cause[4] = 0;
15db28971f91c98efb449aebf46024ac72779fa3Krishnendu Sadhukhan - Sun Microsystems self->lt_cause[5] = 0;
15db28971f91c98efb449aebf46024ac72779fa3Krishnendu Sadhukhan - Sun Microsystems self->lt_cause[6] = 0;
15db28971f91c98efb449aebf46024ac72779fa3Krishnendu Sadhukhan - Sun Microsystems self->lt_cause[7] = 0;
15db28971f91c98efb449aebf46024ac72779fa3Krishnendu Sadhukhan - Sun Microsystems}
15db28971f91c98efb449aebf46024ac72779fa3Krishnendu Sadhukhan - Sun Microsystems
15db28971f91c98efb449aebf46024ac72779fa3Krishnendu Sadhukhan - Sun Microsystems#if !defined(ENABLE_LOW_OVERHEAD)
15db28971f91c98efb449aebf46024ac72779fa3Krishnendu Sadhukhan - Sun Microsystems/*
15db28971f91c98efb449aebf46024ac72779fa3Krishnendu Sadhukhan - Sun Microsystems * Log timestamp when a thread is taken off the CPU.
15db28971f91c98efb449aebf46024ac72779fa3Krishnendu Sadhukhan - Sun Microsystems */
15db28971f91c98efb449aebf46024ac72779fa3Krishnendu Sadhukhan - Sun Microsystemssched::resume:off-cpu
15db28971f91c98efb449aebf46024ac72779fa3Krishnendu Sadhukhan - Sun MicrosystemsTRACE_FILTER_COND(curlwpsinfo->pr_state == SSLEEP)
15db28971f91c98efb449aebf46024ac72779fa3Krishnendu Sadhukhan - Sun Microsystems{
15db28971f91c98efb449aebf46024ac72779fa3Krishnendu Sadhukhan - Sun Microsystems self->lt_sleep_start = timestamp;
15db28971f91c98efb449aebf46024ac72779fa3Krishnendu Sadhukhan - Sun Microsystems self->lt_is_block_wakeable = curthread->t_flag & T_WAKEABLE;
15db28971f91c98efb449aebf46024ac72779fa3Krishnendu Sadhukhan - Sun Microsystems
15db28971f91c98efb449aebf46024ac72779fa3Krishnendu Sadhukhan - Sun Microsystems lt_timestamps[curpsinfo->pr_pid, curlwpsinfo->pr_lwpid] =
15db28971f91c98efb449aebf46024ac72779fa3Krishnendu Sadhukhan - Sun Microsystems self->lt_sleep_start;
15db28971f91c98efb449aebf46024ac72779fa3Krishnendu Sadhukhan - Sun Microsystems}
15db28971f91c98efb449aebf46024ac72779fa3Krishnendu Sadhukhan - Sun Microsystems
15db28971f91c98efb449aebf46024ac72779fa3Krishnendu Sadhukhan - Sun Microsystems/*
15db28971f91c98efb449aebf46024ac72779fa3Krishnendu Sadhukhan - Sun Microsystems * Log timestamp when a thread is put on a dispatch queue and becomes runnable.
15db28971f91c98efb449aebf46024ac72779fa3Krishnendu Sadhukhan - Sun Microsystems */
15db28971f91c98efb449aebf46024ac72779fa3Krishnendu Sadhukhan - Sun Microsystemssched:::enqueue
15db28971f91c98efb449aebf46024ac72779fa3Krishnendu Sadhukhan - Sun Microsystems/lt_timestamps[args[1]->pr_pid, args[0]->pr_lwpid] != 0/
15db28971f91c98efb449aebf46024ac72779fa3Krishnendu Sadhukhan - Sun Microsystems{
15db28971f91c98efb449aebf46024ac72779fa3Krishnendu Sadhukhan - Sun Microsystems lt_timestamps[args[1]->pr_pid, args[0]->pr_lwpid] = timestamp;
15db28971f91c98efb449aebf46024ac72779fa3Krishnendu Sadhukhan - Sun Microsystems}
15db28971f91c98efb449aebf46024ac72779fa3Krishnendu Sadhukhan - Sun Microsystems
15db28971f91c98efb449aebf46024ac72779fa3Krishnendu Sadhukhan - Sun Microsystems/*
15db28971f91c98efb449aebf46024ac72779fa3Krishnendu Sadhukhan - Sun Microsystems * Calculate latency when the thread is actually on the CPU.
15db28971f91c98efb449aebf46024ac72779fa3Krishnendu Sadhukhan - Sun Microsystems * This is necessary in order to get the right stack.
15db28971f91c98efb449aebf46024ac72779fa3Krishnendu Sadhukhan - Sun Microsystems */
15db28971f91c98efb449aebf46024ac72779fa3Krishnendu Sadhukhan - Sun Microsystemsthis unsigned long long end;
15db28971f91c98efb449aebf46024ac72779fa3Krishnendu Sadhukhan - Sun Microsystemsthis unsigned long long now;
15db28971f91c98efb449aebf46024ac72779fa3Krishnendu Sadhukhan - Sun Microsystemssched::resume:on-cpu
15db28971f91c98efb449aebf46024ac72779fa3Krishnendu Sadhukhan - Sun Microsystems/self->lt_sleep_start != 0/
15db28971f91c98efb449aebf46024ac72779fa3Krishnendu Sadhukhan - Sun Microsystems{
15db28971f91c98efb449aebf46024ac72779fa3Krishnendu Sadhukhan - Sun Microsystems this->end = lt_timestamps[curpsinfo->pr_pid, curlwpsinfo->pr_lwpid];
15db28971f91c98efb449aebf46024ac72779fa3Krishnendu Sadhukhan - Sun Microsystems this->now = timestamp;
15db28971f91c98efb449aebf46024ac72779fa3Krishnendu Sadhukhan - Sun Microsystems lt_timestamps[curpsinfo->pr_pid, curlwpsinfo->pr_lwpid] = 0;
15db28971f91c98efb449aebf46024ac72779fa3Krishnendu Sadhukhan - Sun Microsystems this->end = (this->end != 0 && this->end != self->lt_sleep_start)
15db28971f91c98efb449aebf46024ac72779fa3Krishnendu Sadhukhan - Sun Microsystems ? this->end : this->now;
15db28971f91c98efb449aebf46024ac72779fa3Krishnendu Sadhukhan - Sun Microsystems
15db28971f91c98efb449aebf46024ac72779fa3Krishnendu Sadhukhan - Sun Microsystems self->lt_sch_delay = this->now - this->end;
15db28971f91c98efb449aebf46024ac72779fa3Krishnendu Sadhukhan - Sun Microsystems self->lt_sleep_duration = this->end - self->lt_sleep_start;
15db28971f91c98efb449aebf46024ac72779fa3Krishnendu Sadhukhan - Sun Microsystems self->lt_sleep_start = 0;
15db28971f91c98efb449aebf46024ac72779fa3Krishnendu Sadhukhan - Sun Microsystems}
15db28971f91c98efb449aebf46024ac72779fa3Krishnendu Sadhukhan - Sun Microsystems
15db28971f91c98efb449aebf46024ac72779fa3Krishnendu Sadhukhan - Sun Microsystems/*
15db28971f91c98efb449aebf46024ac72779fa3Krishnendu Sadhukhan - Sun Microsystems * Filter: drop all "large" latency when it is interruptible, i.e., sleep()
15db28971f91c98efb449aebf46024ac72779fa3Krishnendu Sadhukhan - Sun Microsystems * etc.
15db28971f91c98efb449aebf46024ac72779fa3Krishnendu Sadhukhan - Sun Microsystems */
15db28971f91c98efb449aebf46024ac72779fa3Krishnendu Sadhukhan - Sun Microsystems#if defined(ENABLE_FILTER)
15db28971f91c98efb449aebf46024ac72779fa3Krishnendu Sadhukhan - Sun Microsystemssched::resume:on-cpu
15db28971f91c98efb449aebf46024ac72779fa3Krishnendu Sadhukhan - Sun Microsystems/self->lt_sleep_duration > FILTER_THRESHOLD &&
15db28971f91c98efb449aebf46024ac72779fa3Krishnendu Sadhukhan - Sun Microsystems self->lt_is_block_wakeable != 0/
15db28971f91c98efb449aebf46024ac72779fa3Krishnendu Sadhukhan - Sun Microsystems{
15db28971f91c98efb449aebf46024ac72779fa3Krishnendu Sadhukhan - Sun Microsystems self->lt_sch_delay = 0;
15db28971f91c98efb449aebf46024ac72779fa3Krishnendu Sadhukhan - Sun Microsystems self->lt_sleep_duration = 0;
15db28971f91c98efb449aebf46024ac72779fa3Krishnendu Sadhukhan - Sun Microsystems self->lt_is_block_wakeable = 0;
15db28971f91c98efb449aebf46024ac72779fa3Krishnendu Sadhukhan - Sun Microsystems}
15db28971f91c98efb449aebf46024ac72779fa3Krishnendu Sadhukhan - Sun Microsystems#endif /* defined(ENABLE_FILTER) */
15db28971f91c98efb449aebf46024ac72779fa3Krishnendu Sadhukhan - Sun Microsystems
15db28971f91c98efb449aebf46024ac72779fa3Krishnendu Sadhukhan - Sun Microsystems/*
15db28971f91c98efb449aebf46024ac72779fa3Krishnendu Sadhukhan - Sun Microsystems * Write sleep time to the aggregation.
15db28971f91c98efb449aebf46024ac72779fa3Krishnendu Sadhukhan - Sun Microsystems * lt_sleep_duration is the duration between the time when a thread is taken
15db28971f91c98efb449aebf46024ac72779fa3Krishnendu Sadhukhan - Sun Microsystems * off the CPU and the time when it is enqueued again.
15db28971f91c98efb449aebf46024ac72779fa3Krishnendu Sadhukhan - Sun Microsystems */
15db28971f91c98efb449aebf46024ac72779fa3Krishnendu Sadhukhan - Sun Microsystemssched::resume:on-cpu
15db28971f91c98efb449aebf46024ac72779fa3Krishnendu Sadhukhan - Sun Microsystems/self->lt_sleep_duration != 0/
15db28971f91c98efb449aebf46024ac72779fa3Krishnendu Sadhukhan - Sun Microsystems{
15db28971f91c98efb449aebf46024ac72779fa3Krishnendu Sadhukhan - Sun Microsystems this->cause = self->lt_stackp > 0 ?
15db28971f91c98efb449aebf46024ac72779fa3Krishnendu Sadhukhan - Sun Microsystems self->lt_cause[self->lt_stackp - 1] : "";
15db28971f91c98efb449aebf46024ac72779fa3Krishnendu Sadhukhan - Sun Microsystems this->priority = self->lt_stackp > 0 ?
15db28971f91c98efb449aebf46024ac72779fa3Krishnendu Sadhukhan - Sun Microsystems self->lt_prio[self->lt_stackp - 1] : 0;
15db28971f91c98efb449aebf46024ac72779fa3Krishnendu Sadhukhan - Sun Microsystems
15db28971f91c98efb449aebf46024ac72779fa3Krishnendu Sadhukhan - Sun Microsystems @lt_call_count[pid, tid, stack(), this->cause,
15db28971f91c98efb449aebf46024ac72779fa3Krishnendu Sadhukhan - Sun Microsystems this->priority] = count();
15db28971f91c98efb449aebf46024ac72779fa3Krishnendu Sadhukhan - Sun Microsystems @lt_call_sum[pid, tid, stack(), this->cause,
15db28971f91c98efb449aebf46024ac72779fa3Krishnendu Sadhukhan - Sun Microsystems this->priority] = sum(self->lt_sleep_duration);
15db28971f91c98efb449aebf46024ac72779fa3Krishnendu Sadhukhan - Sun Microsystems @lt_call_max[pid, tid, stack(), this->cause,
15db28971f91c98efb449aebf46024ac72779fa3Krishnendu Sadhukhan - Sun Microsystems this->priority] = max(self->lt_sleep_duration);
15db28971f91c98efb449aebf46024ac72779fa3Krishnendu Sadhukhan - Sun Microsystems
15db28971f91c98efb449aebf46024ac72779fa3Krishnendu Sadhukhan - Sun Microsystems self->lt_is_block_wakeable = 0; /* Clear the flag to avoid leak */
15db28971f91c98efb449aebf46024ac72779fa3Krishnendu Sadhukhan - Sun Microsystems self->lt_sleep_duration = 0;
15db28971f91c98efb449aebf46024ac72779fa3Krishnendu Sadhukhan - Sun Microsystems}
15db28971f91c98efb449aebf46024ac72779fa3Krishnendu Sadhukhan - Sun Microsystems
15db28971f91c98efb449aebf46024ac72779fa3Krishnendu Sadhukhan - Sun Microsystems/*
15db28971f91c98efb449aebf46024ac72779fa3Krishnendu Sadhukhan - Sun Microsystems * Write time spent in queue to the aggregation.
15db28971f91c98efb449aebf46024ac72779fa3Krishnendu Sadhukhan - Sun Microsystems * lt_sch_delay is the interval between the time when a thread becomes
15db28971f91c98efb449aebf46024ac72779fa3Krishnendu Sadhukhan - Sun Microsystems * runnable and the time when it is actually on the CPU.
15db28971f91c98efb449aebf46024ac72779fa3Krishnendu Sadhukhan - Sun Microsystems */
15db28971f91c98efb449aebf46024ac72779fa3Krishnendu Sadhukhan - Sun Microsystemssched::resume:on-cpu
15db28971f91c98efb449aebf46024ac72779fa3Krishnendu Sadhukhan - Sun Microsystems/self->lt_sch_delay != 0/
15db28971f91c98efb449aebf46024ac72779fa3Krishnendu Sadhukhan - Sun Microsystems{
15db28971f91c98efb449aebf46024ac72779fa3Krishnendu Sadhukhan - Sun Microsystems @lt_named_count[pid, tid, "Wait for available CPU"] = count();
15db28971f91c98efb449aebf46024ac72779fa3Krishnendu Sadhukhan - Sun Microsystems @lt_named_sum[pid, tid, "Wait for available CPU"] =
15db28971f91c98efb449aebf46024ac72779fa3Krishnendu Sadhukhan - Sun Microsystems sum(self->lt_sch_delay);
15db28971f91c98efb449aebf46024ac72779fa3Krishnendu Sadhukhan - Sun Microsystems @lt_named_max[pid, tid, "Wait for available CPU"] =
15db28971f91c98efb449aebf46024ac72779fa3Krishnendu Sadhukhan - Sun Microsystems max(self->lt_sch_delay);
15db28971f91c98efb449aebf46024ac72779fa3Krishnendu Sadhukhan - Sun Microsystems
15db28971f91c98efb449aebf46024ac72779fa3Krishnendu Sadhukhan - Sun Microsystems self->lt_sch_delay = 0;
15db28971f91c98efb449aebf46024ac72779fa3Krishnendu Sadhukhan - Sun Microsystems}
15db28971f91c98efb449aebf46024ac72779fa3Krishnendu Sadhukhan - Sun Microsystems
15db28971f91c98efb449aebf46024ac72779fa3Krishnendu Sadhukhan - Sun Microsystems/*
15db28971f91c98efb449aebf46024ac72779fa3Krishnendu Sadhukhan - Sun Microsystems * Probes to track latency caused by spinning on a lock.
15db28971f91c98efb449aebf46024ac72779fa3Krishnendu Sadhukhan - Sun Microsystems */
15db28971f91c98efb449aebf46024ac72779fa3Krishnendu Sadhukhan - Sun Microsystemslockstat:::adaptive-spin
15db28971f91c98efb449aebf46024ac72779fa3Krishnendu Sadhukhan - Sun MicrosystemsTRACE_FILTER
15db28971f91c98efb449aebf46024ac72779fa3Krishnendu Sadhukhan - Sun Microsystems{
15db28971f91c98efb449aebf46024ac72779fa3Krishnendu Sadhukhan - Sun Microsystems @lt_named_count[pid, tid, "Adapt. lock spin"] = count();
15db28971f91c98efb449aebf46024ac72779fa3Krishnendu Sadhukhan - Sun Microsystems @lt_named_sum[pid, tid, "Adapt. lock spin"] = sum(arg1);
15db28971f91c98efb449aebf46024ac72779fa3Krishnendu Sadhukhan - Sun Microsystems @lt_named_max[pid, tid, "Adapt. lock spin"] = max(arg1);
15db28971f91c98efb449aebf46024ac72779fa3Krishnendu Sadhukhan - Sun Microsystems}
15db28971f91c98efb449aebf46024ac72779fa3Krishnendu Sadhukhan - Sun Microsystems
15db28971f91c98efb449aebf46024ac72779fa3Krishnendu Sadhukhan - Sun Microsystemslockstat:::spin-spin
15db28971f91c98efb449aebf46024ac72779fa3Krishnendu Sadhukhan - Sun MicrosystemsTRACE_FILTER
15db28971f91c98efb449aebf46024ac72779fa3Krishnendu Sadhukhan - Sun Microsystems{
15db28971f91c98efb449aebf46024ac72779fa3Krishnendu Sadhukhan - Sun Microsystems @lt_named_count[pid, tid, "Spinlock spin"] = count();
15db28971f91c98efb449aebf46024ac72779fa3Krishnendu Sadhukhan - Sun Microsystems @lt_named_sum[pid, tid, "Spinlock spin"] = sum(arg1);
15db28971f91c98efb449aebf46024ac72779fa3Krishnendu Sadhukhan - Sun Microsystems @lt_named_max[pid, tid, "Spinlock spin"] = max(arg1);
15db28971f91c98efb449aebf46024ac72779fa3Krishnendu Sadhukhan - Sun Microsystems}
15db28971f91c98efb449aebf46024ac72779fa3Krishnendu Sadhukhan - Sun Microsystems
15db28971f91c98efb449aebf46024ac72779fa3Krishnendu Sadhukhan - Sun Microsystems/*
15db28971f91c98efb449aebf46024ac72779fa3Krishnendu Sadhukhan - Sun Microsystems * Probes to track latency caused by blocking on a lock.
15db28971f91c98efb449aebf46024ac72779fa3Krishnendu Sadhukhan - Sun Microsystems */
15db28971f91c98efb449aebf46024ac72779fa3Krishnendu Sadhukhan - Sun Microsystemslockstat:::adaptive-block
15db28971f91c98efb449aebf46024ac72779fa3Krishnendu Sadhukhan - Sun MicrosystemsTRACE_FILTER
15db28971f91c98efb449aebf46024ac72779fa3Krishnendu Sadhukhan - Sun Microsystems{
15db28971f91c98efb449aebf46024ac72779fa3Krishnendu Sadhukhan - Sun Microsystems @lt_named_count[pid, tid, "#Adapt. lock block"] = count();
15db28971f91c98efb449aebf46024ac72779fa3Krishnendu Sadhukhan - Sun Microsystems @lt_named_sum[pid, tid, "#Adapt. lock block"] = sum(arg1);
15db28971f91c98efb449aebf46024ac72779fa3Krishnendu Sadhukhan - Sun Microsystems @lt_named_max[pid, tid, "#Adapt. lock block"] = max(arg1);
15db28971f91c98efb449aebf46024ac72779fa3Krishnendu Sadhukhan - Sun Microsystems}
15db28971f91c98efb449aebf46024ac72779fa3Krishnendu Sadhukhan - Sun Microsystems
15db28971f91c98efb449aebf46024ac72779fa3Krishnendu Sadhukhan - Sun Microsystemslockstat:::rw-block
15db28971f91c98efb449aebf46024ac72779fa3Krishnendu Sadhukhan - Sun MicrosystemsTRACE_FILTER
15db28971f91c98efb449aebf46024ac72779fa3Krishnendu Sadhukhan - Sun Microsystems{
15db28971f91c98efb449aebf46024ac72779fa3Krishnendu Sadhukhan - Sun Microsystems @lt_named_count[pid, tid, "#RW. lock block"] = count();
15db28971f91c98efb449aebf46024ac72779fa3Krishnendu Sadhukhan - Sun Microsystems @lt_named_sum[pid, tid, "#RW. lock block"] = sum(arg1);
15db28971f91c98efb449aebf46024ac72779fa3Krishnendu Sadhukhan - Sun Microsystems @lt_named_max[pid, tid, "#RW. lock block"] = max(arg1);
15db28971f91c98efb449aebf46024ac72779fa3Krishnendu Sadhukhan - Sun Microsystems}
15db28971f91c98efb449aebf46024ac72779fa3Krishnendu Sadhukhan - Sun Microsystems
15db28971f91c98efb449aebf46024ac72779fa3Krishnendu Sadhukhan - Sun Microsystems#if defined(ENABLE_SYNCOBJ)
15db28971f91c98efb449aebf46024ac72779fa3Krishnendu Sadhukhan - Sun Microsystems/*
15db28971f91c98efb449aebf46024ac72779fa3Krishnendu Sadhukhan - Sun Microsystems * Probes to track latency caused by synchronization objects.
15db28971f91c98efb449aebf46024ac72779fa3Krishnendu Sadhukhan - Sun Microsystems */
15db28971f91c98efb449aebf46024ac72779fa3Krishnendu Sadhukhan - Sun Microsystemsthis int stype;
15db28971f91c98efb449aebf46024ac72779fa3Krishnendu Sadhukhan - Sun Microsystemsthis unsigned long long wchan;
15db28971f91c98efb449aebf46024ac72779fa3Krishnendu Sadhukhan - Sun Microsystemsthis unsigned long long wtime;
15db28971f91c98efb449aebf46024ac72779fa3Krishnendu Sadhukhan - Sun Microsystems
15db28971f91c98efb449aebf46024ac72779fa3Krishnendu Sadhukhan - Sun Microsystemssched:::wakeup
15db28971f91c98efb449aebf46024ac72779fa3Krishnendu Sadhukhan - Sun Microsystems/*
15db28971f91c98efb449aebf46024ac72779fa3Krishnendu Sadhukhan - Sun Microsystems * Currently we are unable to track wakeup from sched, because all its LWP IDs
15db28971f91c98efb449aebf46024ac72779fa3Krishnendu Sadhukhan - Sun Microsystems * are zero when we trace it and that makes lt_timestamps unusable.
15db28971f91c98efb449aebf46024ac72779fa3Krishnendu Sadhukhan - Sun Microsystems */
15db28971f91c98efb449aebf46024ac72779fa3Krishnendu Sadhukhan - Sun Microsystems/args[1]->pr_pid != 0 &&
15db28971f91c98efb449aebf46024ac72779fa3Krishnendu Sadhukhan - Sun Microsystems lt_timestamps[args[1]->pr_pid, args[0]->pr_lwpid] != 0/
15db28971f91c98efb449aebf46024ac72779fa3Krishnendu Sadhukhan - Sun Microsystems{
15db28971f91c98efb449aebf46024ac72779fa3Krishnendu Sadhukhan - Sun Microsystems this->stype = args[0]->pr_stype;
15db28971f91c98efb449aebf46024ac72779fa3Krishnendu Sadhukhan - Sun Microsystems this->wchan = args[0]->pr_wchan;
15db28971f91c98efb449aebf46024ac72779fa3Krishnendu Sadhukhan - Sun Microsystems /*
15db28971f91c98efb449aebf46024ac72779fa3Krishnendu Sadhukhan - Sun Microsystems * We can use lt_timestamps[] here, because
15db28971f91c98efb449aebf46024ac72779fa3Krishnendu Sadhukhan - Sun Microsystems * wakeup is always fired before enqueue.
15db28971f91c98efb449aebf46024ac72779fa3Krishnendu Sadhukhan - Sun Microsystems * After enqueue, lt_timestamps[] will be overwritten.
15db28971f91c98efb449aebf46024ac72779fa3Krishnendu Sadhukhan - Sun Microsystems */
15db28971f91c98efb449aebf46024ac72779fa3Krishnendu Sadhukhan - Sun Microsystems this->wtime = timestamp - lt_timestamps[args[1]->pr_pid,
15db28971f91c98efb449aebf46024ac72779fa3Krishnendu Sadhukhan - Sun Microsystems args[0]->pr_lwpid];
15db28971f91c98efb449aebf46024ac72779fa3Krishnendu Sadhukhan - Sun Microsystems
15db28971f91c98efb449aebf46024ac72779fa3Krishnendu Sadhukhan - Sun Microsystems @lt_sync_count[args[1]->pr_pid, args[0]->pr_lwpid, this->stype,
15db28971f91c98efb449aebf46024ac72779fa3Krishnendu Sadhukhan - Sun Microsystems this->wchan] = count();
15db28971f91c98efb449aebf46024ac72779fa3Krishnendu Sadhukhan - Sun Microsystems @lt_sync_sum[args[1]->pr_pid, args[0]->pr_lwpid, this->stype,
15db28971f91c98efb449aebf46024ac72779fa3Krishnendu Sadhukhan - Sun Microsystems this->wchan] = sum(this->wtime);
15db28971f91c98efb449aebf46024ac72779fa3Krishnendu Sadhukhan - Sun Microsystems @lt_sync_max[args[1]->pr_pid, args[0]->pr_lwpid, this->stype,
15db28971f91c98efb449aebf46024ac72779fa3Krishnendu Sadhukhan - Sun Microsystems this->wchan] = max(this->wtime);
15db28971f91c98efb449aebf46024ac72779fa3Krishnendu Sadhukhan - Sun Microsystems}
15db28971f91c98efb449aebf46024ac72779fa3Krishnendu Sadhukhan - Sun Microsystems#endif /* defined(ENABLE_SYNCOBJ) */
15db28971f91c98efb449aebf46024ac72779fa3Krishnendu Sadhukhan - Sun Microsystems
15db28971f91c98efb449aebf46024ac72779fa3Krishnendu Sadhukhan - Sun Microsystems#else /* !defined(ENABLE_LOW_OVERHEAD) */
15db28971f91c98efb449aebf46024ac72779fa3Krishnendu Sadhukhan - Sun Microsystems
15db28971f91c98efb449aebf46024ac72779fa3Krishnendu Sadhukhan - Sun Microsystems/*
15db28971f91c98efb449aebf46024ac72779fa3Krishnendu Sadhukhan - Sun Microsystems * This is the low overhead mode.
15db28971f91c98efb449aebf46024ac72779fa3Krishnendu Sadhukhan - Sun Microsystems * In order to reduce the number of instructions executed during each
15db28971f91c98efb449aebf46024ac72779fa3Krishnendu Sadhukhan - Sun Microsystems * off-cpu and on-cpu event, we do the following:
15db28971f91c98efb449aebf46024ac72779fa3Krishnendu Sadhukhan - Sun Microsystems *
15db28971f91c98efb449aebf46024ac72779fa3Krishnendu Sadhukhan - Sun Microsystems * 1. Use sampling and update aggregations only roughly 1/100 times
15db28971f91c98efb449aebf46024ac72779fa3Krishnendu Sadhukhan - Sun Microsystems * (SAMPLE_TIMES).
15db28971f91c98efb449aebf46024ac72779fa3Krishnendu Sadhukhan - Sun Microsystems * 2. Do not track anything other than what is needed for "main" window.
15db28971f91c98efb449aebf46024ac72779fa3Krishnendu Sadhukhan - Sun Microsystems * 3. Use as few thread local variables as possible.
15db28971f91c98efb449aebf46024ac72779fa3Krishnendu Sadhukhan - Sun Microsystems */
15db28971f91c98efb449aebf46024ac72779fa3Krishnendu Sadhukhan - Sun Microsystems
15db28971f91c98efb449aebf46024ac72779fa3Krishnendu Sadhukhan - Sun Microsystems#define SAMPLE_TIMES 100
15db28971f91c98efb449aebf46024ac72779fa3Krishnendu Sadhukhan - Sun Microsystems#define SAMPLE_THRESHOLD 50000000
15db28971f91c98efb449aebf46024ac72779fa3Krishnendu Sadhukhan - Sun Microsystems
15db28971f91c98efb449aebf46024ac72779fa3Krishnendu Sadhukhan - Sun Microsystems/*
15db28971f91c98efb449aebf46024ac72779fa3Krishnendu Sadhukhan - Sun Microsystems * Log timestamp when a thread is off CPU.
15db28971f91c98efb449aebf46024ac72779fa3Krishnendu Sadhukhan - Sun Microsystems */
15db28971f91c98efb449aebf46024ac72779fa3Krishnendu Sadhukhan - Sun Microsystemssched::resume:off-cpu
15db28971f91c98efb449aebf46024ac72779fa3Krishnendu Sadhukhan - Sun MicrosystemsTRACE_FILTER_COND(curlwpsinfo->pr_state == SSLEEP)
15db28971f91c98efb449aebf46024ac72779fa3Krishnendu Sadhukhan - Sun Microsystems{
15db28971f91c98efb449aebf46024ac72779fa3Krishnendu Sadhukhan - Sun Microsystems self->lt_timestamp = timestamp;
15db28971f91c98efb449aebf46024ac72779fa3Krishnendu Sadhukhan - Sun Microsystems#if defined(ENABLE_FILTER)
15db28971f91c98efb449aebf46024ac72779fa3Krishnendu Sadhukhan - Sun Microsystems self->lt_is_block_wakeable = curthread->t_flag & T_WAKEABLE;
15db28971f91c98efb449aebf46024ac72779fa3Krishnendu Sadhukhan - Sun Microsystems#endif /* defined(ENABLE_FILTER) */
15db28971f91c98efb449aebf46024ac72779fa3Krishnendu Sadhukhan - Sun Microsystems}
15db28971f91c98efb449aebf46024ac72779fa3Krishnendu Sadhukhan - Sun Microsystems
15db28971f91c98efb449aebf46024ac72779fa3Krishnendu Sadhukhan - Sun Microsystems/*
15db28971f91c98efb449aebf46024ac72779fa3Krishnendu Sadhukhan - Sun Microsystems * Calculate latency when a thread is actually on the CPU.
15db28971f91c98efb449aebf46024ac72779fa3Krishnendu Sadhukhan - Sun Microsystems */
15db28971f91c98efb449aebf46024ac72779fa3Krishnendu Sadhukhan - Sun Microsystemsthis int need_skip;
15db28971f91c98efb449aebf46024ac72779fa3Krishnendu Sadhukhan - Sun Microsystemssched::resume:on-cpu
15db28971f91c98efb449aebf46024ac72779fa3Krishnendu Sadhukhan - Sun Microsystems/self->lt_timestamp != 0/
15db28971f91c98efb449aebf46024ac72779fa3Krishnendu Sadhukhan - Sun Microsystems{
15db28971f91c98efb449aebf46024ac72779fa3Krishnendu Sadhukhan - Sun Microsystems self->lt_timestamp = timestamp - self->lt_timestamp;
15db28971f91c98efb449aebf46024ac72779fa3Krishnendu Sadhukhan - Sun Microsystems
15db28971f91c98efb449aebf46024ac72779fa3Krishnendu Sadhukhan - Sun Microsystems#if defined(ENABLE_FILTER)
15db28971f91c98efb449aebf46024ac72779fa3Krishnendu Sadhukhan - Sun Microsystems self->lt_timestamp =
15db28971f91c98efb449aebf46024ac72779fa3Krishnendu Sadhukhan - Sun Microsystems (self->lt_timestamp > FILTER_THRESHOLD &&
15db28971f91c98efb449aebf46024ac72779fa3Krishnendu Sadhukhan - Sun Microsystems self->lt_is_block_wakeable != 0) ? 0 : self->lt_timestamp;
15db28971f91c98efb449aebf46024ac72779fa3Krishnendu Sadhukhan - Sun Microsystems self->lt_is_block_wakeable = 0;
15db28971f91c98efb449aebf46024ac72779fa3Krishnendu Sadhukhan - Sun Microsystems#endif /* defined(ENABLE_FILTER) */
15db28971f91c98efb449aebf46024ac72779fa3Krishnendu Sadhukhan - Sun Microsystems
15db28971f91c98efb449aebf46024ac72779fa3Krishnendu Sadhukhan - Sun Microsystems this->need_skip = (self->lt_counter < (SAMPLE_TIMES - 1) &&
15db28971f91c98efb449aebf46024ac72779fa3Krishnendu Sadhukhan - Sun Microsystems self->lt_timestamp <= SAMPLE_THRESHOLD) ? 1 : 0;
15db28971f91c98efb449aebf46024ac72779fa3Krishnendu Sadhukhan - Sun Microsystems self->lt_timestamp = this->need_skip ? 0 : self->lt_timestamp;
15db28971f91c98efb449aebf46024ac72779fa3Krishnendu Sadhukhan - Sun Microsystems self->lt_counter += this->need_skip;
15db28971f91c98efb449aebf46024ac72779fa3Krishnendu Sadhukhan - Sun Microsystems}
15db28971f91c98efb449aebf46024ac72779fa3Krishnendu Sadhukhan - Sun Microsystems
15db28971f91c98efb449aebf46024ac72779fa3Krishnendu Sadhukhan - Sun Microsystems/*
15db28971f91c98efb449aebf46024ac72779fa3Krishnendu Sadhukhan - Sun Microsystems * Track large latency first.
15db28971f91c98efb449aebf46024ac72779fa3Krishnendu Sadhukhan - Sun Microsystems */
15db28971f91c98efb449aebf46024ac72779fa3Krishnendu Sadhukhan - Sun Microsystemssched::resume:on-cpu
15db28971f91c98efb449aebf46024ac72779fa3Krishnendu Sadhukhan - Sun Microsystems/self->lt_timestamp > SAMPLE_THRESHOLD/
15db28971f91c98efb449aebf46024ac72779fa3Krishnendu Sadhukhan - Sun Microsystems{
15db28971f91c98efb449aebf46024ac72779fa3Krishnendu Sadhukhan - Sun Microsystems this->cause = self->lt_stackp > 0 ?
15db28971f91c98efb449aebf46024ac72779fa3Krishnendu Sadhukhan - Sun Microsystems self->lt_cause[self->lt_stackp - 1] : "";
15db28971f91c98efb449aebf46024ac72779fa3Krishnendu Sadhukhan - Sun Microsystems this->priority = self->lt_stackp > 0 ?
15db28971f91c98efb449aebf46024ac72779fa3Krishnendu Sadhukhan - Sun Microsystems self->lt_prio[self->lt_stackp - 1] : 0;
15db28971f91c98efb449aebf46024ac72779fa3Krishnendu Sadhukhan - Sun Microsystems
15db28971f91c98efb449aebf46024ac72779fa3Krishnendu Sadhukhan - Sun Microsystems @lt_call_count[pid, tid, stack(), this->cause,
15db28971f91c98efb449aebf46024ac72779fa3Krishnendu Sadhukhan - Sun Microsystems this->priority] = sum(1);
15db28971f91c98efb449aebf46024ac72779fa3Krishnendu Sadhukhan - Sun Microsystems @lt_call_sum[pid, tid, stack(), this->cause,
15db28971f91c98efb449aebf46024ac72779fa3Krishnendu Sadhukhan - Sun Microsystems this->priority] = sum(self->lt_timestamp);
15db28971f91c98efb449aebf46024ac72779fa3Krishnendu Sadhukhan - Sun Microsystems @lt_call_max[pid, tid, stack(), this->cause,
15db28971f91c98efb449aebf46024ac72779fa3Krishnendu Sadhukhan - Sun Microsystems this->priority] = max(self->lt_timestamp);
15db28971f91c98efb449aebf46024ac72779fa3Krishnendu Sadhukhan - Sun Microsystems
15db28971f91c98efb449aebf46024ac72779fa3Krishnendu Sadhukhan - Sun Microsystems self->lt_timestamp = 0;
15db28971f91c98efb449aebf46024ac72779fa3Krishnendu Sadhukhan - Sun Microsystems}
15db28971f91c98efb449aebf46024ac72779fa3Krishnendu Sadhukhan - Sun Microsystems
15db28971f91c98efb449aebf46024ac72779fa3Krishnendu Sadhukhan - Sun Microsystems/*
15db28971f91c98efb449aebf46024ac72779fa3Krishnendu Sadhukhan - Sun Microsystems * If we fall back to this probe, that means the latency is small and counter
15db28971f91c98efb449aebf46024ac72779fa3Krishnendu Sadhukhan - Sun Microsystems * has reached SAMPLE_TIMES.
15db28971f91c98efb449aebf46024ac72779fa3Krishnendu Sadhukhan - Sun Microsystems */
15db28971f91c98efb449aebf46024ac72779fa3Krishnendu Sadhukhan - Sun Microsystemssched::resume:on-cpu
15db28971f91c98efb449aebf46024ac72779fa3Krishnendu Sadhukhan - Sun Microsystems/self->lt_timestamp != 0/
15db28971f91c98efb449aebf46024ac72779fa3Krishnendu Sadhukhan - Sun Microsystems{
15db28971f91c98efb449aebf46024ac72779fa3Krishnendu Sadhukhan - Sun Microsystems this->cause = self->lt_stackp > 0 ?
15db28971f91c98efb449aebf46024ac72779fa3Krishnendu Sadhukhan - Sun Microsystems self->lt_cause[self->lt_stackp - 1] : "";
15db28971f91c98efb449aebf46024ac72779fa3Krishnendu Sadhukhan - Sun Microsystems this->priority = self->lt_stackp > 0 ?
15db28971f91c98efb449aebf46024ac72779fa3Krishnendu Sadhukhan - Sun Microsystems self->lt_prio[self->lt_stackp - 1] : 0;
15db28971f91c98efb449aebf46024ac72779fa3Krishnendu Sadhukhan - Sun Microsystems
15db28971f91c98efb449aebf46024ac72779fa3Krishnendu Sadhukhan - Sun Microsystems /* Need +1 because lt_counter has not been updated in this cycle. */
15db28971f91c98efb449aebf46024ac72779fa3Krishnendu Sadhukhan - Sun Microsystems @lt_call_count[pid, tid, stack(), this->cause,
15db28971f91c98efb449aebf46024ac72779fa3Krishnendu Sadhukhan - Sun Microsystems this->priority] = sum(self->lt_counter + 1);
15db28971f91c98efb449aebf46024ac72779fa3Krishnendu Sadhukhan - Sun Microsystems @lt_call_sum[pid, tid, stack(), this->cause,
15db28971f91c98efb449aebf46024ac72779fa3Krishnendu Sadhukhan - Sun Microsystems this->priority] = sum((self->lt_counter + 1) * self->lt_timestamp);
15db28971f91c98efb449aebf46024ac72779fa3Krishnendu Sadhukhan - Sun Microsystems @lt_call_max[pid, tid, stack(), this->cause,
15db28971f91c98efb449aebf46024ac72779fa3Krishnendu Sadhukhan - Sun Microsystems this->priority] = max(self->lt_timestamp);
15db28971f91c98efb449aebf46024ac72779fa3Krishnendu Sadhukhan - Sun Microsystems
15db28971f91c98efb449aebf46024ac72779fa3Krishnendu Sadhukhan - Sun Microsystems self->lt_timestamp = 0;
15db28971f91c98efb449aebf46024ac72779fa3Krishnendu Sadhukhan - Sun Microsystems self->lt_counter = 0;
15db28971f91c98efb449aebf46024ac72779fa3Krishnendu Sadhukhan - Sun Microsystems}
15db28971f91c98efb449aebf46024ac72779fa3Krishnendu Sadhukhan - Sun Microsystems
15db28971f91c98efb449aebf46024ac72779fa3Krishnendu Sadhukhan - Sun Microsystems#endif /* !defined(ENABLE_LOW_OVERHEAD) */
15db28971f91c98efb449aebf46024ac72779fa3Krishnendu Sadhukhan - Sun Microsystems
15db28971f91c98efb449aebf46024ac72779fa3Krishnendu Sadhukhan - Sun Microsystems#define TRANSLATE(entryprobe, returnprobe, cause, priority) \
15db28971f91c98efb449aebf46024ac72779fa3Krishnendu Sadhukhan - Sun Microsystemsentryprobe \
15db28971f91c98efb449aebf46024ac72779fa3Krishnendu Sadhukhan - Sun MicrosystemsTRACE_FILTER_COND(self->lt_stackp == 0 || \
15db28971f91c98efb449aebf46024ac72779fa3Krishnendu Sadhukhan - Sun Microsystems (self->lt_stackp < MAX_TAG && \
15db28971f91c98efb449aebf46024ac72779fa3Krishnendu Sadhukhan - Sun Microsystems self->lt_prio[self->lt_stackp - 1] <= priority) ) \
15db28971f91c98efb449aebf46024ac72779fa3Krishnendu Sadhukhan - Sun Microsystems{ \
15db28971f91c98efb449aebf46024ac72779fa3Krishnendu Sadhukhan - Sun Microsystems self->lt_prio[self->lt_stackp] = priority; \
15db28971f91c98efb449aebf46024ac72779fa3Krishnendu Sadhukhan - Sun Microsystems self->lt_cause[self->lt_stackp] = cause; \
15db28971f91c98efb449aebf46024ac72779fa3Krishnendu Sadhukhan - Sun Microsystems ++self->lt_stackp; \
15db28971f91c98efb449aebf46024ac72779fa3Krishnendu Sadhukhan - Sun Microsystems} \
15db28971f91c98efb449aebf46024ac72779fa3Krishnendu Sadhukhan - Sun Microsystemsreturnprobe \
15db28971f91c98efb449aebf46024ac72779fa3Krishnendu Sadhukhan - Sun MicrosystemsTRACE_FILTER_COND(self->lt_stackp > 0 && \
15db28971f91c98efb449aebf46024ac72779fa3Krishnendu Sadhukhan - Sun Microsystems self->lt_cause[self->lt_stackp - 1] == cause) \
15db28971f91c98efb449aebf46024ac72779fa3Krishnendu Sadhukhan - Sun Microsystems{ \
15db28971f91c98efb449aebf46024ac72779fa3Krishnendu Sadhukhan - Sun Microsystems --self->lt_stackp; \
15db28971f91c98efb449aebf46024ac72779fa3Krishnendu Sadhukhan - Sun Microsystems self->lt_cause[self->lt_stackp] = NULL; \
15db28971f91c98efb449aebf46024ac72779fa3Krishnendu Sadhukhan - Sun Microsystems}
15db28971f91c98efb449aebf46024ac72779fa3Krishnendu Sadhukhan - Sun Microsystems
15db28971f91c98efb449aebf46024ac72779fa3Krishnendu Sadhukhan - Sun Microsystems/*
15db28971f91c98efb449aebf46024ac72779fa3Krishnendu Sadhukhan - Sun Microsystems * Syscalls have a priority of 10. This is to make sure that latency is
15db28971f91c98efb449aebf46024ac72779fa3Krishnendu Sadhukhan - Sun Microsystems * traced to one of the syscalls only if nothing else matches.
15db28971f91c98efb449aebf46024ac72779fa3Krishnendu Sadhukhan - Sun Microsystems * We put this special probe here because it uses "probefunc" variable instead
15db28971f91c98efb449aebf46024ac72779fa3Krishnendu Sadhukhan - Sun Microsystems * of a constant string.
15db28971f91c98efb449aebf46024ac72779fa3Krishnendu Sadhukhan - Sun Microsystems */
15db28971f91c98efb449aebf46024ac72779fa3Krishnendu Sadhukhan - Sun Microsystems
15db28971f91c98efb449aebf46024ac72779fa3Krishnendu Sadhukhan - Sun MicrosystemsTRANSLATE(syscall:::entry, syscall:::return, probefunc, 10)