xref: /onnv-gate/usr/src/cmd/latencytop/common/latencytop.h (revision 11789:6c7658a179ca)
110673SKrishnendu.Sadhukhan@Sun.COM /*
210673SKrishnendu.Sadhukhan@Sun.COM  * CDDL HEADER START
310673SKrishnendu.Sadhukhan@Sun.COM  *
410673SKrishnendu.Sadhukhan@Sun.COM  * The contents of this file are subject to the terms of the
510673SKrishnendu.Sadhukhan@Sun.COM  * Common Development and Distribution License (the "License").
610673SKrishnendu.Sadhukhan@Sun.COM  * You may not use this file except in compliance with the License.
710673SKrishnendu.Sadhukhan@Sun.COM  *
810673SKrishnendu.Sadhukhan@Sun.COM  * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
910673SKrishnendu.Sadhukhan@Sun.COM  * or http://www.opensolaris.org/os/licensing.
1010673SKrishnendu.Sadhukhan@Sun.COM  * See the License for the specific language governing permissions
1110673SKrishnendu.Sadhukhan@Sun.COM  * and limitations under the License.
1210673SKrishnendu.Sadhukhan@Sun.COM  *
1310673SKrishnendu.Sadhukhan@Sun.COM  * When distributing Covered Code, include this CDDL HEADER in each
1410673SKrishnendu.Sadhukhan@Sun.COM  * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
1510673SKrishnendu.Sadhukhan@Sun.COM  * If applicable, add the following below this CDDL HEADER, with the
1610673SKrishnendu.Sadhukhan@Sun.COM  * fields enclosed by brackets "[]" replaced with your own identifying
1710673SKrishnendu.Sadhukhan@Sun.COM  * information: Portions Copyright [yyyy] [name of copyright owner]
1810673SKrishnendu.Sadhukhan@Sun.COM  *
1910673SKrishnendu.Sadhukhan@Sun.COM  * CDDL HEADER END
2010673SKrishnendu.Sadhukhan@Sun.COM  */
2110673SKrishnendu.Sadhukhan@Sun.COM /*
2210673SKrishnendu.Sadhukhan@Sun.COM  * Copyright (c) 2008-2009, Intel Corporation.
2310673SKrishnendu.Sadhukhan@Sun.COM  * All Rights Reserved.
2410673SKrishnendu.Sadhukhan@Sun.COM  */
2510673SKrishnendu.Sadhukhan@Sun.COM 
2610673SKrishnendu.Sadhukhan@Sun.COM #ifndef _LATENCYTOP_H
2710673SKrishnendu.Sadhukhan@Sun.COM #define	_LATENCYTOP_H
2810673SKrishnendu.Sadhukhan@Sun.COM 
2910673SKrishnendu.Sadhukhan@Sun.COM #include <sys/types.h>
3010673SKrishnendu.Sadhukhan@Sun.COM 
3110673SKrishnendu.Sadhukhan@Sun.COM #include <glib.h>
3210673SKrishnendu.Sadhukhan@Sun.COM 
3310673SKrishnendu.Sadhukhan@Sun.COM #ifdef	__cplusplus
3410673SKrishnendu.Sadhukhan@Sun.COM extern "C" {
3510673SKrishnendu.Sadhukhan@Sun.COM #endif
3610673SKrishnendu.Sadhukhan@Sun.COM 
3710673SKrishnendu.Sadhukhan@Sun.COM /*
3810673SKrishnendu.Sadhukhan@Sun.COM  * Without this lint seems to be confused by glib header file.
3910673SKrishnendu.Sadhukhan@Sun.COM  */
4010673SKrishnendu.Sadhukhan@Sun.COM #ifdef __lint
4110673SKrishnendu.Sadhukhan@Sun.COM #undef g_assert
4210673SKrishnendu.Sadhukhan@Sun.COM #define	g_assert(x)	((void)(x))
4310673SKrishnendu.Sadhukhan@Sun.COM #undef TRUE
4410673SKrishnendu.Sadhukhan@Sun.COM #define	TRUE		1
4510673SKrishnendu.Sadhukhan@Sun.COM #endif
4610673SKrishnendu.Sadhukhan@Sun.COM 
4710673SKrishnendu.Sadhukhan@Sun.COM /*
4810673SKrishnendu.Sadhukhan@Sun.COM  * We define our own conversions in order to avoid compiler warnings.
4910673SKrishnendu.Sadhukhan@Sun.COM  */
5010673SKrishnendu.Sadhukhan@Sun.COM #define	LT_INT_TO_POINTER(a)	((void *)(unsigned long)(a))
5110673SKrishnendu.Sadhukhan@Sun.COM 
5210673SKrishnendu.Sadhukhan@Sun.COM #define	TITLE			"LatencyTOP for OpenSolaris, version 1.0"
5310673SKrishnendu.Sadhukhan@Sun.COM #define	COPYRIGHT		"Copyright (c) 2008-2009, Intel Corporation."
5410673SKrishnendu.Sadhukhan@Sun.COM #define	DEFAULT_KLOG_FILE	"/var/log/latencytop.log"
5510673SKrishnendu.Sadhukhan@Sun.COM 
5610673SKrishnendu.Sadhukhan@Sun.COM #define	INVALID_PID		(~0)
5710673SKrishnendu.Sadhukhan@Sun.COM #define	INVALID_TID		(~0)
5810673SKrishnendu.Sadhukhan@Sun.COM #define	PID_SYS_GLOBAL		INVALID_PID
5910673SKrishnendu.Sadhukhan@Sun.COM #define	INVALID_CAUSE		0
6010673SKrishnendu.Sadhukhan@Sun.COM #define	HIGHER_PRIORITY(a, b)	((a) > (b))
6110673SKrishnendu.Sadhukhan@Sun.COM 
6210673SKrishnendu.Sadhukhan@Sun.COM #ifdef EMBED_CONFIGS
6310673SKrishnendu.Sadhukhan@Sun.COM /*
6410673SKrishnendu.Sadhukhan@Sun.COM  * LatencyTOP configuration is embedded in the binary.
6510673SKrishnendu.Sadhukhan@Sun.COM  * Array will be generated by elfwrap.
6610673SKrishnendu.Sadhukhan@Sun.COM  */
6710673SKrishnendu.Sadhukhan@Sun.COM extern char latencytop_d_start;
6810673SKrishnendu.Sadhukhan@Sun.COM extern char latencytop_d_end;
6910673SKrishnendu.Sadhukhan@Sun.COM extern char latencytop_trans_start;
7010673SKrishnendu.Sadhukhan@Sun.COM extern char latencytop_trans_end;
7110673SKrishnendu.Sadhukhan@Sun.COM #else
7210673SKrishnendu.Sadhukhan@Sun.COM /*
7310673SKrishnendu.Sadhukhan@Sun.COM  * LatencyTOP configuration is provided externally by user.
7410673SKrishnendu.Sadhukhan@Sun.COM  */
7510673SKrishnendu.Sadhukhan@Sun.COM #define	DEFAULT_CONFIG_NAME	"./latencytop.trans"
7610673SKrishnendu.Sadhukhan@Sun.COM #define	DEFAULT_D_SCRIPT_NAME   "./latencytop.d"
7710673SKrishnendu.Sadhukhan@Sun.COM #endif
7810673SKrishnendu.Sadhukhan@Sun.COM 
7910673SKrishnendu.Sadhukhan@Sun.COM typedef enum {
8010673SKrishnendu.Sadhukhan@Sun.COM 	LT_STAT_COUNT,
8110673SKrishnendu.Sadhukhan@Sun.COM 	LT_STAT_MAX,
8210673SKrishnendu.Sadhukhan@Sun.COM 	LT_STAT_SUM,
8310673SKrishnendu.Sadhukhan@Sun.COM } lt_stat_type_t;
8410673SKrishnendu.Sadhukhan@Sun.COM 
8510673SKrishnendu.Sadhukhan@Sun.COM #define	LT_KLOG_LEVEL_NONE	0	/* Log nothing */
8610673SKrishnendu.Sadhukhan@Sun.COM #define	LT_KLOG_LEVEL_UNMAPPED	1	/* Log only stacks not mapped */
8710673SKrishnendu.Sadhukhan@Sun.COM #define	LT_KLOG_LEVEL_MAPPED	2	/* Log only stacks mapped */
8810673SKrishnendu.Sadhukhan@Sun.COM #define	LT_KLOG_LEVEL_ALL	3	/* Log all stacks, mapped or not */
8910673SKrishnendu.Sadhukhan@Sun.COM 
9010673SKrishnendu.Sadhukhan@Sun.COM typedef enum {
9110673SKrishnendu.Sadhukhan@Sun.COM 	LT_LEVEL_GLOBAL,	/* System wide statistics */
9210673SKrishnendu.Sadhukhan@Sun.COM 	LT_LEVEL_PROCESS,	/* Per-process statistics */
9310673SKrishnendu.Sadhukhan@Sun.COM 	LT_LEVEL_THREAD,	/* Per-thread statistics */
9410673SKrishnendu.Sadhukhan@Sun.COM } lt_stat_level_t;
9510673SKrishnendu.Sadhukhan@Sun.COM 
9610673SKrishnendu.Sadhukhan@Sun.COM typedef enum {
9710673SKrishnendu.Sadhukhan@Sun.COM 	LT_SORT_TOTAL,
9810673SKrishnendu.Sadhukhan@Sun.COM 	LT_SORT_MAX,
9910673SKrishnendu.Sadhukhan@Sun.COM 	LT_SORT_AVG,
10010673SKrishnendu.Sadhukhan@Sun.COM 	LT_SORT_COUNT,
10110673SKrishnendu.Sadhukhan@Sun.COM } lt_sort_t;
10210673SKrishnendu.Sadhukhan@Sun.COM 
10310673SKrishnendu.Sadhukhan@Sun.COM typedef enum {
10410673SKrishnendu.Sadhukhan@Sun.COM 	LT_FIELD_FNAME,
10510673SKrishnendu.Sadhukhan@Sun.COM 	LT_FIELD_PSARGS,
10610673SKrishnendu.Sadhukhan@Sun.COM } lt_field_t;
10710673SKrishnendu.Sadhukhan@Sun.COM 
10810673SKrishnendu.Sadhukhan@Sun.COM typedef enum {
10910673SKrishnendu.Sadhukhan@Sun.COM 	LT_LIST_CAUSE,		/* List latency by causes (default) */
11010673SKrishnendu.Sadhukhan@Sun.COM 	LT_LIST_SPECIALS,	/* List only "special" causes */
11110673SKrishnendu.Sadhukhan@Sun.COM 	LT_LIST_SOBJ		/* List synchronization objects */
11210673SKrishnendu.Sadhukhan@Sun.COM } lt_list_type_t;
11310673SKrishnendu.Sadhukhan@Sun.COM 
11410673SKrishnendu.Sadhukhan@Sun.COM /*
11510673SKrishnendu.Sadhukhan@Sun.COM  * Data structure which contains statistics.
11610673SKrishnendu.Sadhukhan@Sun.COM  */
11710673SKrishnendu.Sadhukhan@Sun.COM typedef struct {
11810673SKrishnendu.Sadhukhan@Sun.COM 	uint64_t lt_s_count;
11910673SKrishnendu.Sadhukhan@Sun.COM 	uint64_t lt_s_total;
12010673SKrishnendu.Sadhukhan@Sun.COM 	uint64_t lt_s_max;
12110673SKrishnendu.Sadhukhan@Sun.COM } lt_stat_data_t;
12210673SKrishnendu.Sadhukhan@Sun.COM 
12310673SKrishnendu.Sadhukhan@Sun.COM /*
12410673SKrishnendu.Sadhukhan@Sun.COM  * Data structure that stores statistics along with the name.
12510673SKrishnendu.Sadhukhan@Sun.COM  */
12610673SKrishnendu.Sadhukhan@Sun.COM typedef struct {
12710673SKrishnendu.Sadhukhan@Sun.COM 	enum {
12810673SKrishnendu.Sadhukhan@Sun.COM 		STAT_CAUSE,
12910673SKrishnendu.Sadhukhan@Sun.COM 		STAT_SOBJ
13010673SKrishnendu.Sadhukhan@Sun.COM 	} lt_se_type;
13110673SKrishnendu.Sadhukhan@Sun.COM 	const char *lt_se_string;
13210673SKrishnendu.Sadhukhan@Sun.COM 	lt_stat_data_t lt_se_data;
13310673SKrishnendu.Sadhukhan@Sun.COM 	union {
13410673SKrishnendu.Sadhukhan@Sun.COM 		struct {
13510673SKrishnendu.Sadhukhan@Sun.COM 			int lt_se_c_id;
13610673SKrishnendu.Sadhukhan@Sun.COM 			int lt_se_c_flags;
13710673SKrishnendu.Sadhukhan@Sun.COM 		} lt_se_t_cause;
13810673SKrishnendu.Sadhukhan@Sun.COM 		struct {
13910673SKrishnendu.Sadhukhan@Sun.COM 			int lt_se_s_id;
14010673SKrishnendu.Sadhukhan@Sun.COM 		} lt_se_t_sobj;
14110673SKrishnendu.Sadhukhan@Sun.COM 	} lt_se_tsdata;	/* type specific data */
14210673SKrishnendu.Sadhukhan@Sun.COM } lt_stat_entry_t;
14310673SKrishnendu.Sadhukhan@Sun.COM 
14410673SKrishnendu.Sadhukhan@Sun.COM typedef struct {
14510673SKrishnendu.Sadhukhan@Sun.COM 	int lt_cfg_enable_filter;
14610673SKrishnendu.Sadhukhan@Sun.COM 	int lt_cfg_trace_sched;
14710673SKrishnendu.Sadhukhan@Sun.COM 	int lt_cfg_trace_syncobj;
14810673SKrishnendu.Sadhukhan@Sun.COM 	int lt_cfg_low_overhead_mode;
14910673SKrishnendu.Sadhukhan@Sun.COM 	int lt_cfg_snap_interval;
15010673SKrishnendu.Sadhukhan@Sun.COM 	char *lt_cfg_config_name;
151*11789SKrishnendu.Sadhukhan@Sun.COM 	unsigned int lt_cfg_trace_pid;
152*11789SKrishnendu.Sadhukhan@Sun.COM 	unsigned int lt_cfg_trace_pgid;
15310673SKrishnendu.Sadhukhan@Sun.COM } lt_config_t;
15410673SKrishnendu.Sadhukhan@Sun.COM 
15510673SKrishnendu.Sadhukhan@Sun.COM extern lt_config_t g_config;	/* The global settings */
15610673SKrishnendu.Sadhukhan@Sun.COM 
15710673SKrishnendu.Sadhukhan@Sun.COM /*
15810673SKrishnendu.Sadhukhan@Sun.COM  * Causes can be disabled through the configuration file.
15910673SKrishnendu.Sadhukhan@Sun.COM  * When disabled, though D script will continue to capture causes, they will
16010673SKrishnendu.Sadhukhan@Sun.COM  * not be counted by LatencyTOP.
16110673SKrishnendu.Sadhukhan@Sun.COM  */
16210673SKrishnendu.Sadhukhan@Sun.COM #define	CAUSE_FLAG_DISABLED		1
16310673SKrishnendu.Sadhukhan@Sun.COM /*
16410673SKrishnendu.Sadhukhan@Sun.COM  * This flag will not show and count causes as part of summary in
16510673SKrishnendu.Sadhukhan@Sun.COM  * "kstack window".
16610673SKrishnendu.Sadhukhan@Sun.COM  */
16710673SKrishnendu.Sadhukhan@Sun.COM #define	CAUSE_FLAG_HIDE_IN_SUMMARY	2
16810673SKrishnendu.Sadhukhan@Sun.COM /*
16910673SKrishnendu.Sadhukhan@Sun.COM  * This is generated from D script (named cause), and is "special".
17010673SKrishnendu.Sadhukhan@Sun.COM  */
17110673SKrishnendu.Sadhukhan@Sun.COM #define	CAUSE_FLAG_SPECIAL		4
17210673SKrishnendu.Sadhukhan@Sun.COM #define	CAUSE_ALL_FLAGS			0xffffffff
17310673SKrishnendu.Sadhukhan@Sun.COM 
17410883SKrishnendu.Sadhukhan@Sun.COM extern boolean_t lt_drop_detected;
17510883SKrishnendu.Sadhukhan@Sun.COM 
17610673SKrishnendu.Sadhukhan@Sun.COM /*
17710673SKrishnendu.Sadhukhan@Sun.COM  * These functions collect statistics using DTrace.
17810673SKrishnendu.Sadhukhan@Sun.COM  */
17910673SKrishnendu.Sadhukhan@Sun.COM extern int lt_dtrace_init(void);
18010673SKrishnendu.Sadhukhan@Sun.COM extern int lt_dtrace_work(int);
18110673SKrishnendu.Sadhukhan@Sun.COM extern int lt_dtrace_collect(void);
18210883SKrishnendu.Sadhukhan@Sun.COM extern int lt_dtrace_deinit(void);
18310673SKrishnendu.Sadhukhan@Sun.COM 
18410673SKrishnendu.Sadhukhan@Sun.COM /*
18510673SKrishnendu.Sadhukhan@Sun.COM  * These functions maintain configuration, e.g. symbol to cause mapping.
18610673SKrishnendu.Sadhukhan@Sun.COM  */
18710673SKrishnendu.Sadhukhan@Sun.COM extern int lt_table_init(void);
18810673SKrishnendu.Sadhukhan@Sun.COM extern int lt_table_cause_from_stack(const char *, int *, int *);
18910673SKrishnendu.Sadhukhan@Sun.COM extern const char *lt_table_get_cause_name(int);
19010673SKrishnendu.Sadhukhan@Sun.COM extern int lt_table_get_cause_flag(int, int);
19110673SKrishnendu.Sadhukhan@Sun.COM extern int lt_table_cause_from_name(char *, int, int);
19210673SKrishnendu.Sadhukhan@Sun.COM extern int lt_table_append_trans(FILE *fp);
19310673SKrishnendu.Sadhukhan@Sun.COM extern void lt_table_deinit(void);
19410673SKrishnendu.Sadhukhan@Sun.COM 
19510673SKrishnendu.Sadhukhan@Sun.COM /*
19610673SKrishnendu.Sadhukhan@Sun.COM  * These functions update statistic of all causes of latency, collected
19710673SKrishnendu.Sadhukhan@Sun.COM  * from DTrace.
19810673SKrishnendu.Sadhukhan@Sun.COM  */
19910673SKrishnendu.Sadhukhan@Sun.COM extern void lt_stat_update(pid_t, id_t, char *, char *, unsigned int,
20010673SKrishnendu.Sadhukhan@Sun.COM     lt_stat_type_t, uint64_t);
20110673SKrishnendu.Sadhukhan@Sun.COM extern void lt_stat_update_cause(pid_t, id_t, int, lt_stat_type_t, uint64_t);
20210673SKrishnendu.Sadhukhan@Sun.COM extern void lt_stat_update_sobj(pid_t, id_t, int, unsigned long long,
20310673SKrishnendu.Sadhukhan@Sun.COM     lt_stat_type_t, uint64_t);
20410673SKrishnendu.Sadhukhan@Sun.COM extern void lt_stat_clear_all(void);
20510673SKrishnendu.Sadhukhan@Sun.COM extern void lt_stat_free_all(void);
20610673SKrishnendu.Sadhukhan@Sun.COM 
20710673SKrishnendu.Sadhukhan@Sun.COM /*
20810673SKrishnendu.Sadhukhan@Sun.COM  * These functions produce lists for display panes.
20910673SKrishnendu.Sadhukhan@Sun.COM  * Note: after a call to lt_stat_update_*, the old lists will become invalid.
21010673SKrishnendu.Sadhukhan@Sun.COM  */
21110673SKrishnendu.Sadhukhan@Sun.COM extern void *lt_stat_list_create(lt_list_type_t, lt_stat_level_t,
21210673SKrishnendu.Sadhukhan@Sun.COM     pid_t, id_t, int, lt_sort_t);
21310673SKrishnendu.Sadhukhan@Sun.COM extern int lt_stat_list_has_item(void *, int);
21410673SKrishnendu.Sadhukhan@Sun.COM extern const char *lt_stat_list_get_reason(void *, int);
21510673SKrishnendu.Sadhukhan@Sun.COM extern uint64_t lt_stat_list_get_max(void *, int);
21610673SKrishnendu.Sadhukhan@Sun.COM extern uint64_t lt_stat_list_get_sum(void *, int);
21710673SKrishnendu.Sadhukhan@Sun.COM extern uint64_t lt_stat_list_get_count(void *, int);
21810673SKrishnendu.Sadhukhan@Sun.COM extern uint64_t lt_stat_list_get_gtotal(void *);
21910673SKrishnendu.Sadhukhan@Sun.COM extern void lt_stat_list_free(void *);
22010673SKrishnendu.Sadhukhan@Sun.COM 
22110673SKrishnendu.Sadhukhan@Sun.COM /*
22210673SKrishnendu.Sadhukhan@Sun.COM  * These functions produce the process list and the thread list.
22310673SKrishnendu.Sadhukhan@Sun.COM  */
22410673SKrishnendu.Sadhukhan@Sun.COM extern int lt_stat_proc_list_create(pid_t **, id_t **);
22510673SKrishnendu.Sadhukhan@Sun.COM extern void lt_stat_proc_list_free(pid_t *, id_t *);
22610673SKrishnendu.Sadhukhan@Sun.COM extern const char *lt_stat_proc_get_name(pid_t);
22710673SKrishnendu.Sadhukhan@Sun.COM extern int lt_stat_proc_get_nthreads(pid_t);
22810673SKrishnendu.Sadhukhan@Sun.COM 
22910673SKrishnendu.Sadhukhan@Sun.COM /*
23010673SKrishnendu.Sadhukhan@Sun.COM  * These functions use ncurses to create console-based display.
23110673SKrishnendu.Sadhukhan@Sun.COM  */
23210673SKrishnendu.Sadhukhan@Sun.COM extern void lt_display_init(void);
23310673SKrishnendu.Sadhukhan@Sun.COM extern int lt_display_loop(int);
23410673SKrishnendu.Sadhukhan@Sun.COM extern void lt_display_error(const char *, ...);
23510673SKrishnendu.Sadhukhan@Sun.COM extern void lt_display_deinit(void);
23610673SKrishnendu.Sadhukhan@Sun.COM 
23710673SKrishnendu.Sadhukhan@Sun.COM /*
23810673SKrishnendu.Sadhukhan@Sun.COM  * Write statistics to log file - useful for debugging and offline analysis.
23910673SKrishnendu.Sadhukhan@Sun.COM  */
24010673SKrishnendu.Sadhukhan@Sun.COM extern void lt_klog_init(void);
24110673SKrishnendu.Sadhukhan@Sun.COM extern void lt_klog_deinit(void);
24210673SKrishnendu.Sadhukhan@Sun.COM extern int lt_klog_set_log_file(const char *);
24310673SKrishnendu.Sadhukhan@Sun.COM extern int lt_klog_set_log_level(int);
24410673SKrishnendu.Sadhukhan@Sun.COM extern void lt_klog_write(void);
24510673SKrishnendu.Sadhukhan@Sun.COM extern void lt_klog_log(int, pid_t, char *, lt_stat_type_t,
24610673SKrishnendu.Sadhukhan@Sun.COM     uint64_t);
24710673SKrishnendu.Sadhukhan@Sun.COM 
24810673SKrishnendu.Sadhukhan@Sun.COM /*
24910673SKrishnendu.Sadhukhan@Sun.COM  * Utility functions.
25010673SKrishnendu.Sadhukhan@Sun.COM  */
25110673SKrishnendu.Sadhukhan@Sun.COM extern uint64_t lt_millisecond(void);
25210673SKrishnendu.Sadhukhan@Sun.COM extern void *lt_malloc(size_t);
25310673SKrishnendu.Sadhukhan@Sun.COM extern void *lt_zalloc(size_t);
25410673SKrishnendu.Sadhukhan@Sun.COM extern char *lt_strdup(const char *);
25510673SKrishnendu.Sadhukhan@Sun.COM extern void lt_check_null(void *);
25610673SKrishnendu.Sadhukhan@Sun.COM extern void lt_time_str(char *, int);
25710673SKrishnendu.Sadhukhan@Sun.COM extern char *lt_get_proc_field(pid_t, lt_field_t);
25810673SKrishnendu.Sadhukhan@Sun.COM extern void lt_update_stat_value(lt_stat_data_t *, lt_stat_type_t, uint64_t);
25910673SKrishnendu.Sadhukhan@Sun.COM extern int lt_sort_by_total_desc(lt_stat_entry_t *, lt_stat_entry_t *);
26010673SKrishnendu.Sadhukhan@Sun.COM extern int lt_sort_by_max_desc(lt_stat_entry_t *, lt_stat_entry_t *);
26110673SKrishnendu.Sadhukhan@Sun.COM extern int lt_sort_by_count_desc(lt_stat_entry_t *, lt_stat_entry_t *);
26210673SKrishnendu.Sadhukhan@Sun.COM extern int lt_sort_by_avg_desc(lt_stat_entry_t *, lt_stat_entry_t *);
26310673SKrishnendu.Sadhukhan@Sun.COM extern void lt_gpipe_init(void);
26410673SKrishnendu.Sadhukhan@Sun.COM extern void lt_gpipe_deinit(void);
26510673SKrishnendu.Sadhukhan@Sun.COM extern void lt_gpipe_break(const char *);
26610673SKrishnendu.Sadhukhan@Sun.COM extern int lt_gpipe_readfd(void);
26710673SKrishnendu.Sadhukhan@Sun.COM extern int lt_file_exist(const char *);
26810673SKrishnendu.Sadhukhan@Sun.COM 
26910673SKrishnendu.Sadhukhan@Sun.COM #ifdef	__cplusplus
27010673SKrishnendu.Sadhukhan@Sun.COM }
27110673SKrishnendu.Sadhukhan@Sun.COM #endif
27210673SKrishnendu.Sadhukhan@Sun.COM 
27310673SKrishnendu.Sadhukhan@Sun.COM #endif	/* _LATENCYTOP_H */
274