* cluster map * CL_SYSCTL simple sysctl() metrics, either one metric per mib, or * one struct per mib * CL_SPECIAL trickier sysctl() metrics involving synthesis or arithmetic * or other methods * CL_DISK disk metrics * CL_CPUTIME percpu cpu time metrics * CL_NETIF network interface metrics * CL_FILESYS filesys metrics * CL_VM_UVMEXP vm stats */ static pmdaMetric metrictab[] = { { (void *)"hinv.ncpu", { PMDA_PMID(CL_SYSCTL,0), PM_TYPE_U32, PM_INDOM_NULL, PM_SEM_DISCRETE, PMDA_PMUNITS(0,0,0,0,0,0) } }, { (void *)"hinv.physmem", { PMDA_PMID(CL_SYSCTL,1), PM_TYPE_U64, PM_INDOM_NULL, PM_SEM_DISCRETE, PMDA_PMUNITS(1,0,0,PM_SPACE_MBYTE,0,0) } }, { NULL, /* kernel.all.load */ { PMDA_PMID(CL_SPECIAL,2), PM_TYPE_FLOAT, LOADAV_INDOM, PM_SEM_INSTANT, PMDA_PMUNITS(0,0,0,0,0,0) } }, { (void *)"kernel.all.cpu.user", { PMDA_PMID(CL_SYSCTL,3), PM_TYPE_U64, PM_INDOM_NULL, PM_SEM_COUNTER, PMDA_PMUNITS(0,1,0,0,PM_TIME_MSEC,0) } }, { (void *)"kernel.all.cpu.nice", { PMDA_PMID(CL_SYSCTL,4), PM_TYPE_U64, PM_INDOM_NULL, PM_SEM_COUNTER, PMDA_PMUNITS(0,1,0,0,PM_TIME_MSEC,0) } }, { (void *)"kernel.all.cpu.sys", { PMDA_PMID(CL_SYSCTL,5), PM_TYPE_U64, PM_INDOM_NULL, PM_SEM_COUNTER, PMDA_PMUNITS(0,1,0,0,PM_TIME_MSEC,0) } },
can filter event records for that context. */ static int uid_gid_filter_p = 1; struct uid_gid_tuple { char wildcard_p; /* do not filter for this context. */ char uid_p; char gid_p; /* uid/gid received flags. */ int uid; int gid; }; /* uid/gid received from PCP_ATTR_* */ static struct uid_gid_tuple *ctxtab = NULL; int ctxtab_size = 0; static pmdaMetric metrictab[] = { /* numclients */ #define METRICTAB_NUMCLIENTS_PMID metrictab[0].m_desc.pmid { NULL, { PMDA_PMID(0,0), PM_TYPE_U32, PM_INDOM_NULL, PM_SEM_INSTANT, PMDA_PMUNITS(0,0,1,0,0,PM_COUNT_ONE) }, }, /* maxmem */ #define METRICTAB_MAXMEM_PMID metrictab[1].m_desc.pmid { NULL, { PMDA_PMID(0,1), PM_TYPE_U32, PM_INDOM_NULL, PM_SEM_INSTANT, PMDA_PMUNITS(1,0,0,PM_SPACE_BYTE,0,0) }, }, /* journal.field.cursor */ #define METRICTAB_JOURNAL_CURSOR_PMID metrictab[2].m_desc.pmid { NULL, { PMDA_PMID(1,0), PM_TYPE_STRING, PM_INDOM_NULL, PM_SEM_INSTANT, PMDA_PMUNITS(0,0,0,0,0,0) }, }, /* journal.field.string */ #define METRICTAB_JOURNAL_STRING_PMID metrictab[3].m_desc.pmid { NULL, { PMDA_PMID(1,1), PM_TYPE_STRING, PM_INDOM_NULL, PM_SEM_INSTANT, PMDA_PMUNITS(0,0,0,0,0,0) }, },
CLUSTER_FILESYS, /* 5 = mounted filesystems */ CLUSTER_CPULOAD, /* 6 = number of ticks in state */ CLUSTER_DISK, /* 7 = disk device statistics */ CLUSTER_CPU, /* 8 = per-cpu statistics */ CLUSTER_UPTIME, /* 9 = system uptime in seconds */ CLUSTER_NETWORK, /* 10 = networking statistics */ CLUSTER_NFS, /* 11 = nfs filesystem statistics */ NUM_CLUSTERS /* total number of clusters */ }; static pmdaMetric metrictab[] = { /* hinv.pagesize */ { &mach_page_size, { PMDA_PMID(CLUSTER_INIT,0), PM_TYPE_U64, PM_INDOM_NULL, PM_SEM_DISCRETE, PMDA_PMUNITS(1,0,0,PM_SPACE_BYTE,0,0) }, }, /* kernel.all.hz */ { &mach_hertz, { PMDA_PMID(CLUSTER_INIT,1), PM_TYPE_U32, PM_INDOM_NULL, PM_SEM_DISCRETE, PMDA_PMUNITS(0,-1,1,0,PM_TIME_SEC,PM_COUNT_ONE) }, }, /* hinv.machine */ { &hw_model, { PMDA_PMID(CLUSTER_INIT,2), PM_TYPE_STRING, PM_INDOM_NULL, PM_SEM_DISCRETE, PMDA_PMUNITS(0,0,0,0,0,0) }, }, /* hinv.physmem */ { NULL, { PMDA_PMID(CLUSTER_VMSTAT,2), PM_TYPE_U32, PM_INDOM_NULL, PM_SEM_DISCRETE, PMDA_PMUNITS(1,0,0,PM_SPACE_MBYTE,0,0) }, }, /* mem.physmem */ { NULL,
#else #define MOUNT_FILE "/proc/mounts" #endif static pmdaInstid *mounts; static pmdaIndom indomtab[] = { #define MOUNTS_INDOM 0 { MOUNTS_INDOM, 0, NULL } }; static pmdaMetric metrictab[] = { /* mounts.device */ { NULL, { PMDA_PMID(0,0), PM_TYPE_STRING, MOUNTS_INDOM, PM_SEM_INSTANT, PMDA_PMUNITS(0,0,0,0,0,0) }, }, /* mounts.type */ { NULL, { PMDA_PMID(0,1), PM_TYPE_STRING, MOUNTS_INDOM, PM_SEM_INSTANT, PMDA_PMUNITS(0,0,0,0,0,0) }, }, /* mounts.options */ { NULL, { PMDA_PMID(0,2), PM_TYPE_STRING, MOUNTS_INDOM, PM_SEM_INSTANT, PMDA_PMUNITS(0,0,0,0,0,0) }, }, /* mounts.up */ { NULL, { PMDA_PMID(0,3), PM_TYPE_DOUBLE, MOUNTS_INDOM, PM_SEM_INSTANT, PMDA_PMUNITS(0,0,0,0,0,0) }, }, }; typedef struct {
static int papi_desc(pmID pmid, pmDesc *desc, pmdaExt *pmda) { int sts = PM_ERR_PMID; // presume fail; switch statements fall through to this __pmID_int *idp = (__pmID_int *)&(pmid); switch (idp->cluster) { case CLUSTER_PAPI: desc->pmid = pmid; desc->type = PM_TYPE_64; desc->indom = PM_INDOM_NULL; desc->sem = PM_SEM_COUNTER; desc->units = (pmUnits) PMDA_PMUNITS(0,0,1,0,0,PM_COUNT_ONE); sts = 0; break; case CLUSTER_CONTROL: switch (idp->item) { case CONTROL_ENABLE: case CONTROL_RESET: case CONTROL_DISABLE: case CONTROL_STATUS: desc->pmid = pmid; desc->type = PM_TYPE_STRING; desc->indom = PM_INDOM_NULL; desc->sem = PM_SEM_INSTANT; desc->units = (pmUnits) PMDA_PMUNITS(0,0,0,0,0,0); sts = 0; break; case CONTROL_AUTO_ENABLE: desc->pmid = pmid; desc->type = PM_TYPE_U32; desc->indom = PM_INDOM_NULL; desc->sem = PM_SEM_DISCRETE; desc->units = (pmUnits) PMDA_PMUNITS(0,1,0,0,PM_TIME_SEC,0); sts = 0; break; case CONTROL_MULTIPLEX: desc->pmid = pmid; desc->type = PM_TYPE_U32; desc->indom = PM_INDOM_NULL; desc->sem = PM_SEM_DISCRETE; desc->units = (pmUnits) PMDA_PMUNITS(0,0,0,0,0,0); sts = 0; break; } break; case CLUSTER_AVAILABLE: switch (idp->item) { case AVAILABLE_NUM_COUNTERS: desc->pmid = pmid; desc->type = PM_TYPE_U32; desc->indom = PM_INDOM_NULL; desc->sem = PM_SEM_DISCRETE; desc->units = (pmUnits) PMDA_PMUNITS(0,0,1,0,0,PM_COUNT_ONE); sts = 0; break; case AVAILABLE_VERSION: desc->pmid = pmid; desc->type = PM_TYPE_STRING; desc->indom = PM_INDOM_NULL; desc->sem = PM_SEM_INSTANT; desc->units = (pmUnits) PMDA_PMUNITS(0,0,0,0,0,0); sts = 0; break; } break; } return sts; }
* * Metrics * generic.systack - Trigger to collect kernel/app stacks using perf and display via flamegraph. * generic.jstack - Trigger to process java stacks using jstack and display via flamegraph. * generic.heatmap - Trigger to collect block layer latency using perf and display via heatmap. */ /* * all metrics supported in this PMDA - one table entry for each */ static pmdaMetric metrictab[] = { /* systack */ { NULL, { PMDA_PMID(0,1), PM_TYPE_U32, PM_INDOM_NULL, PM_SEM_COUNTER, PMDA_PMUNITS(0, 1, 0, 0, PM_TIME_SEC, 0) } }, /* jstack */ { NULL, { PMDA_PMID(0,2), PM_TYPE_U32, PM_INDOM_NULL, PM_SEM_COUNTER, PMDA_PMUNITS(0, 1, 0, 0, PM_TIME_SEC, 0) } }, /* heatmap */ { NULL, { PMDA_PMID(0,3), PM_TYPE_U32, PM_INDOM_NULL, PM_SEM_COUNTER, PMDA_PMUNITS(0, 1, 0, 0, PM_TIME_SEC, 0) } }, }; //static char *username = "******"; static char *username; static char mypath[MAXPATHLEN]; static int isDSO = 1; /* ==0 if I am a daemon */
/* * list of instance domains */ static pmdaIndom indomtab[] = { #define DELAY_INDOM 0 { DELAY_INDOM, 0, NULL }, }; /* * all metrics supported in this PMDA - one table entry for each */ static pmdaMetric metrictab[] = { /* length */ { NULL, { PMDA_PMID(0,0), PM_TYPE_U32, PM_INDOM_NULL, PM_SEM_INSTANT, PMDA_PMUNITS(0,0,1,0,0,PM_COUNT_ONE) }, }, /* deferred */ { NULL, { PMDA_PMID(0,1), PM_TYPE_U32, DELAY_INDOM, PM_SEM_INSTANT, PMDA_PMUNITS(0,0,1,0,0,PM_COUNT_ONE) }, }, }; static int mailq_histogram(char *option) { struct timeval tv; char *errmsg; char *q; int sts; q = strtok(option, ",");