diff options
author | Igor Pashev <pashev.igor@gmail.com> | 2014-10-26 12:33:50 +0400 |
---|---|---|
committer | Igor Pashev <pashev.igor@gmail.com> | 2014-10-26 12:33:50 +0400 |
commit | 47e6e7c84f008a53061e661f31ae96629bc694ef (patch) | |
tree | 648a07f3b5b9d67ce19b0fd72e8caa1175c98f1a /src/pmdas/linux/pmda.c | |
download | pcp-debian.tar.gz |
Debian 3.9.10debian/3.9.10debian
Diffstat (limited to 'src/pmdas/linux/pmda.c')
-rw-r--r-- | src/pmdas/linux/pmda.c | 5807 |
1 files changed, 5807 insertions, 0 deletions
diff --git a/src/pmdas/linux/pmda.c b/src/pmdas/linux/pmda.c new file mode 100644 index 0000000..73d961a --- /dev/null +++ b/src/pmdas/linux/pmda.c @@ -0,0 +1,5807 @@ +/* + * Linux PMDA + * + * Copyright (c) 2012-2014 Red Hat. + * Copyright (c) 2007-2011 Aconex. All Rights Reserved. + * Copyright (c) 2002 International Business Machines Corp. + * Copyright (c) 2000,2004,2007-2008 Silicon Graphics, Inc. All Rights Reserved. + * + * This program is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License as published by the + * Free Software Foundation; either version 2 of the License, or (at your + * option) any later version. + * + * This program is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY + * or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * for more details. + */ + +#include "pmapi.h" +#include "impl.h" +#include "pmda.h" +#undef LINUX /* defined in NSS/NSPR headers as something different, which we do not need. */ +#include "domain.h" + +#include <ctype.h> +#include <sys/vfs.h> +#include <sys/stat.h> +#include <sys/times.h> +#include <sys/utsname.h> +#include <utmp.h> +#include <pwd.h> +#include <grp.h> + +#include "convert.h" +#include "clusters.h" +#include "indom.h" + +#include "proc_cpuinfo.h" +#include "proc_stat.h" +#include "proc_meminfo.h" +#include "proc_loadavg.h" +#include "proc_net_dev.h" +#include "filesys.h" +#include "swapdev.h" +#include "getinfo.h" +#include "proc_net_rpc.h" +#include "proc_net_sockstat.h" +#include "proc_net_tcp.h" +#include "proc_partitions.h" +#include "proc_net_netstat.h" +#include "proc_net_snmp.h" +#include "proc_scsi.h" +#include "proc_slabinfo.h" +#include "proc_uptime.h" +#include "sem_limits.h" +#include "msg_limits.h" +#include "shm_limits.h" +#include "proc_sys_fs.h" +#include "proc_vmstat.h" +#include "sysfs_kernel.h" +#include "linux_table.h" +#include "numa_meminfo.h" +#include "interrupts.h" +#include "devmapper.h" + +static proc_stat_t proc_stat; +static proc_meminfo_t proc_meminfo; +static proc_loadavg_t proc_loadavg; +static proc_net_rpc_t proc_net_rpc; +static proc_net_tcp_t proc_net_tcp; +static proc_net_sockstat_t proc_net_sockstat; +static struct utsname kernel_uname; +static char uname_string[sizeof(kernel_uname)]; +static proc_scsi_t proc_scsi; +static dev_mapper_t dev_mapper; +static proc_cpuinfo_t proc_cpuinfo; +static proc_slabinfo_t proc_slabinfo; +static sem_limits_t sem_limits; +static msg_limits_t msg_limits; +static shm_limits_t shm_limits; +static proc_uptime_t proc_uptime; +static proc_sys_fs_t proc_sys_fs; +static sysfs_kernel_t sysfs_kernel; +static numa_meminfo_t numa_meminfo; + +static int _isDSO = 1; /* =0 I am a daemon */ +static char *username; + +/* globals */ +size_t _pm_system_pagesize; /* for hinv.pagesize and used elsewhere */ +int _pm_have_proc_vmstat; /* if /proc/vmstat is available */ +int _pm_intr_size; /* size in bytes of interrupt sum count metric */ +int _pm_ctxt_size; /* size in bytes of context switch count metric */ +int _pm_cputime_size; /* size in bytes of most of the cputime metrics */ +int _pm_idletime_size; /* size in bytes of the idle cputime metric */ +proc_vmstat_t _pm_proc_vmstat; +proc_net_snmp_t _pm_proc_net_snmp; +pmdaInstid _pm_proc_net_snmp_indom_id[NR_ICMPMSG_COUNTERS]; +proc_net_netstat_t _pm_proc_net_netstat; + +/* + * Metric Instance Domains (statically initialized ones only) + */ +static pmdaInstid loadavg_indom_id[] = { + { 1, "1 minute" }, { 5, "5 minute" }, { 15, "15 minute" } +}; + +static pmdaInstid nfs_indom_id[] = { + { 0, "null" }, + { 1, "getattr" }, + { 2, "setattr" }, + { 3, "root" }, + { 4, "lookup" }, + { 5, "readlink" }, + { 6, "read" }, + { 7, "wrcache" }, + { 8, "write" }, + { 9, "create" }, + { 10, "remove" }, + { 11, "rename" }, + { 12, "link" }, + { 13, "symlink" }, + { 14, "mkdir" }, + { 15, "rmdir" }, + { 16, "readdir" }, + { 17, "statfs" } +}; + +static pmdaInstid nfs3_indom_id[] = { + { 0, "null" }, + { 1, "getattr" }, + { 2, "setattr" }, + { 3, "lookup" }, + { 4, "access" }, + { 5, "readlink" }, + { 6, "read" }, + { 7, "write" }, + { 8, "create" }, + { 9, "mkdir" }, + { 10, "symlink" }, + { 11, "mknod" }, + { 12, "remove" }, + { 13, "rmdir" }, + { 14, "rename" }, + { 15, "link" }, + { 16, "readdir" }, + { 17, "readdir+" }, + { 18, "statfs" }, + { 19, "fsinfo" }, + { 20, "pathconf" }, + { 21, "commit" } +}; + +static pmdaInstid nfs4_cli_indom_id[] = { + { 0, "null" }, + { 1, "read" }, + { 2, "write" }, + { 3, "commit" }, + { 4, "open" }, + { 5, "open_conf" }, + { 6, "open_noat" }, + { 7, "open_dgrd" }, + { 8, "close" }, + { 9, "setattr" }, + { 10, "fsinfo" }, + { 11, "renew" }, + { 12, "setclntid" }, + { 13, "confirm" }, + { 14, "lock" }, + { 15, "lockt" }, + { 16, "locku" }, + { 17, "access" }, + { 18, "getattr" }, + { 19, "lookup" }, + { 20, "lookup_root" }, + { 21, "remove" }, + { 22, "rename" }, + { 23, "link" }, + { 24, "symlink" }, + { 25, "create" }, + { 26, "pathconf" }, + { 27, "statfs" }, + { 28, "readlink" }, + { 29, "readdir" }, + { 30, "server_caps" }, + { 31, "delegreturn" }, + { 32, "getacl" }, + { 33, "setacl" }, + { 34, "fs_locatns" }, +}; + +static pmdaInstid nfs4_svr_indom_id[] = { + { 0, "null" }, + { 1, "op0-unused" }, + { 2, "op1-unused"}, + { 3, "minorversion"}, /* future use */ + { 4, "access" }, + { 5, "close" }, + { 6, "commit" }, + { 7, "create" }, + { 8, "delegpurge" }, + { 9, "delegreturn" }, + { 10, "getattr" }, + { 11, "getfh" }, + { 12, "link" }, + { 13, "lock" }, + { 14, "lockt" }, + { 15, "locku" }, + { 16, "lookup" }, + { 17, "lookup_root" }, + { 18, "nverify" }, + { 19, "open" }, + { 20, "openattr" }, + { 21, "open_conf" }, + { 22, "open_dgrd" }, + { 23, "putfh" }, + { 24, "putpubfh" }, + { 25, "putrootfh" }, + { 26, "read" }, + { 27, "readdir" }, + { 28, "readlink" }, + { 29, "remove" }, + { 30, "rename" }, + { 31, "renew" }, + { 32, "restorefh" }, + { 33, "savefh" }, + { 34, "secinfo" }, + { 35, "setattr" }, + { 36, "setcltid" }, + { 37, "setcltidconf" }, + { 38, "verify" }, + { 39, "write" }, + { 40, "rellockowner" }, +}; + +static pmdaIndom indomtab[] = { + { CPU_INDOM, 0, NULL }, + { DISK_INDOM, 0, NULL }, /* cached */ + { LOADAVG_INDOM, 3, loadavg_indom_id }, + { NET_DEV_INDOM, 0, NULL }, + { PROC_INTERRUPTS_INDOM, 0, NULL }, /* deprecated */ + { FILESYS_INDOM, 0, NULL }, + { SWAPDEV_INDOM, 0, NULL }, + { NFS_INDOM, NR_RPC_COUNTERS, nfs_indom_id }, + { NFS3_INDOM, NR_RPC3_COUNTERS, nfs3_indom_id }, + { PROC_PROC_INDOM, 0, NULL }, /* migrated to the proc PMDA */ + { PARTITIONS_INDOM, 0, NULL }, /* cached */ + { SCSI_INDOM, 0, NULL }, + { SLAB_INDOM, 0, NULL }, + { STRINGS_INDOM, 0, NULL }, + { NFS4_CLI_INDOM, NR_RPC4_CLI_COUNTERS, nfs4_cli_indom_id }, + { NFS4_SVR_INDOM, NR_RPC4_SVR_COUNTERS, nfs4_svr_indom_id }, + { QUOTA_PRJ_INDOM, 0, NULL }, /* migrated to the xfs PMDA */ + { NET_ADDR_INDOM, 0, NULL }, + { TMPFS_INDOM, 0, NULL }, + { NODE_INDOM, 0, NULL }, + { PROC_CGROUP_SUBSYS_INDOM, 0, NULL }, + { PROC_CGROUP_MOUNTS_INDOM, 0, NULL }, + { LV_INDOM, 0, NULL }, + { ICMPMSG_INDOM, NR_ICMPMSG_COUNTERS, _pm_proc_net_snmp_indom_id }, + { DM_INDOM, 0, NULL }, /* cached */ +}; + + +/* + * all metrics supported in this PMDA - one table entry for each + */ + +static pmdaMetric metrictab[] = { + +/* + * /proc/stat cluster + */ + +/* kernel.percpu.cpu.user */ + { NULL, + { PMDA_PMID(CLUSTER_STAT,0), KERNEL_UTYPE, CPU_INDOM, PM_SEM_COUNTER, + PMDA_PMUNITS(0,1,0,0,PM_TIME_MSEC,0) }, }, + +/* kernel.percpu.cpu.nice */ + { NULL, + { PMDA_PMID(CLUSTER_STAT,1), KERNEL_UTYPE, CPU_INDOM, PM_SEM_COUNTER, + PMDA_PMUNITS(0,1,0,0,PM_TIME_MSEC,0) }, }, + +/* kernel.percpu.cpu.sys */ + { NULL, + { PMDA_PMID(CLUSTER_STAT,2), KERNEL_UTYPE, CPU_INDOM, PM_SEM_COUNTER, + PMDA_PMUNITS(0,1,0,0,PM_TIME_MSEC,0) }, }, + +/* kernel.percpu.cpu.idle */ + { NULL, + { PMDA_PMID(CLUSTER_STAT,3), KERNEL_UTYPE, CPU_INDOM, PM_SEM_COUNTER, + PMDA_PMUNITS(0,1,0,0,PM_TIME_MSEC,0) }, }, + +/* kernel.percpu.cpu.wait.total */ + { NULL, + { PMDA_PMID(CLUSTER_STAT,30), KERNEL_UTYPE, CPU_INDOM, PM_SEM_COUNTER, + PMDA_PMUNITS(0,1,0,0,PM_TIME_MSEC,0) }, }, + +/* kernel.percpu.cpu.intr */ + { NULL, + { PMDA_PMID(CLUSTER_STAT,31), KERNEL_UTYPE, CPU_INDOM, PM_SEM_COUNTER, + PMDA_PMUNITS(0,1,0,0,PM_TIME_MSEC,0) }, }, + +/* kernel.percpu.cpu.irq.soft */ + { NULL, + { PMDA_PMID(CLUSTER_STAT,56), KERNEL_UTYPE, CPU_INDOM, PM_SEM_COUNTER, + PMDA_PMUNITS(0,1,0,0,PM_TIME_MSEC,0) }, }, + +/* kernel.percpu.cpu.irq.hard */ + { NULL, + { PMDA_PMID(CLUSTER_STAT,57), KERNEL_UTYPE, CPU_INDOM, PM_SEM_COUNTER, + PMDA_PMUNITS(0,1,0,0,PM_TIME_MSEC,0) }, }, + +/* kernel.percpu.cpu.steal */ + { NULL, + { PMDA_PMID(CLUSTER_STAT,58), KERNEL_UTYPE, CPU_INDOM, PM_SEM_COUNTER, + PMDA_PMUNITS(0,1,0,0,PM_TIME_MSEC,0) }, }, + +/* kernel.percpu.cpu.guest */ + { NULL, + { PMDA_PMID(CLUSTER_STAT,61), KERNEL_UTYPE, CPU_INDOM, PM_SEM_COUNTER, + PMDA_PMUNITS(0,1,0,0,PM_TIME_MSEC,0) }, }, + +/* kernel.percpu.cpu.vuser */ + { NULL, + { PMDA_PMID(CLUSTER_STAT,76), KERNEL_UTYPE, CPU_INDOM, PM_SEM_COUNTER, + PMDA_PMUNITS(0,1,0,0,PM_TIME_MSEC,0) }, }, + + +/* kernel.pernode.cpu.user */ + { NULL, + { PMDA_PMID(CLUSTER_STAT,62), KERNEL_UTYPE, NODE_INDOM, PM_SEM_COUNTER, + PMDA_PMUNITS(0,1,0,0,PM_TIME_MSEC,0) }, }, + +/* kernel.pernode.cpu.nice */ + { NULL, + { PMDA_PMID(CLUSTER_STAT,63), KERNEL_UTYPE, NODE_INDOM, PM_SEM_COUNTER, + PMDA_PMUNITS(0,1,0,0,PM_TIME_MSEC,0) }, }, + +/* kernel.pernode.cpu.sys */ + { NULL, + { PMDA_PMID(CLUSTER_STAT,64), KERNEL_UTYPE, NODE_INDOM, PM_SEM_COUNTER, + PMDA_PMUNITS(0,1,0,0,PM_TIME_MSEC,0) }, }, + +/* kernel.pernode.cpu.idle */ + { NULL, + { PMDA_PMID(CLUSTER_STAT,65), KERNEL_UTYPE, NODE_INDOM, PM_SEM_COUNTER, + PMDA_PMUNITS(0,1,0,0,PM_TIME_MSEC,0) }, }, + +/* kernel.pernode.cpu.wait.total */ + { NULL, + { PMDA_PMID(CLUSTER_STAT,69), KERNEL_UTYPE, NODE_INDOM, PM_SEM_COUNTER, + PMDA_PMUNITS(0,1,0,0,PM_TIME_MSEC,0) }, }, + +/* kernel.pernode.cpu.intr */ + { NULL, + { PMDA_PMID(CLUSTER_STAT,66), KERNEL_UTYPE, NODE_INDOM, PM_SEM_COUNTER, + PMDA_PMUNITS(0,1,0,0,PM_TIME_MSEC,0) }, }, + +/* kernel.pernode.cpu.irq.soft */ + { NULL, + { PMDA_PMID(CLUSTER_STAT,70), KERNEL_UTYPE, NODE_INDOM, PM_SEM_COUNTER, + PMDA_PMUNITS(0,1,0,0,PM_TIME_MSEC,0) }, }, + +/* kernel.pernode.cpu.irq.hard */ + { NULL, + { PMDA_PMID(CLUSTER_STAT,71), KERNEL_UTYPE, NODE_INDOM, PM_SEM_COUNTER, + PMDA_PMUNITS(0,1,0,0,PM_TIME_MSEC,0) }, }, + +/* kernel.pernode.cpu.steal */ + { NULL, + { PMDA_PMID(CLUSTER_STAT,67), KERNEL_UTYPE, NODE_INDOM, PM_SEM_COUNTER, + PMDA_PMUNITS(0,1,0,0,PM_TIME_MSEC,0) }, }, + +/* kernel.pernode.cpu.guest */ + { NULL, + { PMDA_PMID(CLUSTER_STAT,68), KERNEL_UTYPE, NODE_INDOM, PM_SEM_COUNTER, + PMDA_PMUNITS(0,1,0,0,PM_TIME_MSEC,0) }, }, + +/* kernel.pernode.cpu.vuser */ + { NULL, + { PMDA_PMID(CLUSTER_STAT,77), KERNEL_UTYPE, NODE_INDOM, PM_SEM_COUNTER, + PMDA_PMUNITS(0,1,0,0,PM_TIME_MSEC,0) }, }, + +/* disk.dev.read */ + { NULL, + { PMDA_PMID(CLUSTER_STAT,4), KERNEL_ULONG, DISK_INDOM, PM_SEM_COUNTER, + PMDA_PMUNITS(0,0,1,0,0,PM_COUNT_ONE) }, }, + +/* disk.dev.write */ + { NULL, + { PMDA_PMID(CLUSTER_STAT,5), KERNEL_ULONG, DISK_INDOM, PM_SEM_COUNTER, + PMDA_PMUNITS(0,0,1,0,0,PM_COUNT_ONE) }, }, + +/* disk.dev.blkread */ + { NULL, + { PMDA_PMID(CLUSTER_STAT,6), PM_TYPE_U64, DISK_INDOM, PM_SEM_COUNTER, + PMDA_PMUNITS(0,0,1,0,0,PM_COUNT_ONE) }, }, + +/* disk.dev.blkwrite */ + { NULL, + { PMDA_PMID(CLUSTER_STAT,7), PM_TYPE_U64, DISK_INDOM, PM_SEM_COUNTER, + PMDA_PMUNITS(0,0,1,0,0,PM_COUNT_ONE) }, }, + +/* disk.dev.avactive */ + { NULL, + { PMDA_PMID(CLUSTER_STAT,46), PM_TYPE_U32, DISK_INDOM, PM_SEM_COUNTER, + PMDA_PMUNITS(0,1,0,0,PM_TIME_MSEC,0) }, }, + +/* disk.dev.aveq */ + { NULL, + { PMDA_PMID(CLUSTER_STAT,47), PM_TYPE_U32, DISK_INDOM, PM_SEM_COUNTER, + PMDA_PMUNITS(0,1,0,0,PM_TIME_MSEC,0) }, }, + +/* disk.dev.read_merge */ + { NULL, + { PMDA_PMID(CLUSTER_STAT,49), KERNEL_ULONG, DISK_INDOM, PM_SEM_COUNTER, + PMDA_PMUNITS(0,0,1,0,0,PM_COUNT_ONE) }, }, + +/* disk.dev.write_merge */ + { NULL, + { PMDA_PMID(CLUSTER_STAT,50), KERNEL_ULONG, DISK_INDOM, PM_SEM_COUNTER, + PMDA_PMUNITS(0,0,1,0,0,PM_COUNT_ONE) }, }, + +/* disk.dev.scheduler */ + { NULL, + { PMDA_PMID(CLUSTER_STAT,59), PM_TYPE_STRING, DISK_INDOM, + PM_SEM_INSTANT, PMDA_PMUNITS(0,0,0,0,0,0) }, }, + +/* disk.dev.read_rawactive */ + { NULL, + { PMDA_PMID(CLUSTER_STAT,72), PM_TYPE_U32, DISK_INDOM, PM_SEM_COUNTER, + PMDA_PMUNITS(0,1,0,0,PM_TIME_MSEC,0) }, }, + +/* disk.dev.write_rawactive */ + { NULL, + { PMDA_PMID(CLUSTER_STAT,73), PM_TYPE_U32, DISK_INDOM, PM_SEM_COUNTER, + PMDA_PMUNITS(0,1,0,0,PM_TIME_MSEC,0) }, }, + +/* disk.all.avactive */ + { NULL, + { PMDA_PMID(CLUSTER_STAT,44), PM_TYPE_U64, PM_INDOM_NULL, PM_SEM_COUNTER, + PMDA_PMUNITS(0,1,0,0,PM_TIME_MSEC,0) }, }, + +/* disk.all.aveq */ + { NULL, + { PMDA_PMID(CLUSTER_STAT,45), PM_TYPE_U64, PM_INDOM_NULL, PM_SEM_COUNTER, + PMDA_PMUNITS(0,1,0,0,PM_TIME_MSEC,0) }, }, + +/* disk.all.read_merge */ + { NULL, + { PMDA_PMID(CLUSTER_STAT,51), PM_TYPE_U64, PM_INDOM_NULL, PM_SEM_COUNTER, + PMDA_PMUNITS(0,0,1,0,0,PM_COUNT_ONE) }, }, + +/* disk.all.write_merge */ + { NULL, + { PMDA_PMID(CLUSTER_STAT,52), PM_TYPE_U64, PM_INDOM_NULL, PM_SEM_COUNTER, + PMDA_PMUNITS(0,0,1,0,0,PM_COUNT_ONE) }, }, + +/* disk.all.read_rawactive */ + { NULL, + { PMDA_PMID(CLUSTER_STAT,74), PM_TYPE_U64, PM_INDOM_NULL, PM_SEM_COUNTER, + PMDA_PMUNITS(0,1,0,0,PM_TIME_MSEC,0) }, }, + +/* disk.all.read_rawactive */ + { NULL, + { PMDA_PMID(CLUSTER_STAT,75), PM_TYPE_U64, PM_INDOM_NULL, PM_SEM_COUNTER, + PMDA_PMUNITS(0,1,0,0,PM_TIME_MSEC,0) }, }, + +/* swap.pagesin */ + { NULL, + { PMDA_PMID(CLUSTER_STAT,8), PM_TYPE_U32, PM_INDOM_NULL, PM_SEM_COUNTER, + PMDA_PMUNITS(0,0,1,0,0,PM_COUNT_ONE) }, }, + +/* swap.pagesout */ + { NULL, + { PMDA_PMID(CLUSTER_STAT,9), PM_TYPE_U32, PM_INDOM_NULL, PM_SEM_COUNTER, + PMDA_PMUNITS(0,0,1,0,0,PM_COUNT_ONE) }, }, + +/* swap.in */ + { NULL, + { PMDA_PMID(CLUSTER_STAT,10), PM_TYPE_U32, PM_INDOM_NULL, PM_SEM_COUNTER, + PMDA_PMUNITS(0,0,1,0,0,PM_COUNT_ONE) }, }, + +/* swap.out */ + { NULL, + { PMDA_PMID(CLUSTER_STAT,11), PM_TYPE_U32, PM_INDOM_NULL, PM_SEM_COUNTER, + PMDA_PMUNITS(0,0,1,0,0,PM_COUNT_ONE) }, }, + +/* kernel.all.intr */ + { NULL, + { PMDA_PMID(CLUSTER_STAT,12), KERNEL_UTYPE, PM_INDOM_NULL, PM_SEM_COUNTER, + PMDA_PMUNITS(0,0,1,0,0,PM_COUNT_ONE) }, }, + +/* kernel.all.pswitch */ + { NULL, + { PMDA_PMID(CLUSTER_STAT,13), KERNEL_UTYPE, PM_INDOM_NULL, PM_SEM_COUNTER, + PMDA_PMUNITS(0,0,1,0,0,PM_COUNT_ONE) }, }, + +/* kernel.all.sysfork */ + { NULL, + { PMDA_PMID(CLUSTER_STAT,14), KERNEL_ULONG, PM_INDOM_NULL, PM_SEM_COUNTER, + PMDA_PMUNITS(0,0,1,0,0,PM_COUNT_ONE) }, }, + +/* kernel.all.cpu.user */ + { NULL, + { PMDA_PMID(CLUSTER_STAT,20), KERNEL_UTYPE, PM_INDOM_NULL, PM_SEM_COUNTER, + PMDA_PMUNITS(0,1,0,0,PM_TIME_MSEC,0) }, }, + +/* kernel.all.cpu.nice */ + { NULL, + { PMDA_PMID(CLUSTER_STAT,21), KERNEL_UTYPE, PM_INDOM_NULL, PM_SEM_COUNTER, + PMDA_PMUNITS(0,1,0,0,PM_TIME_MSEC,0) }, }, + +/* kernel.all.cpu.sys */ + { NULL, + { PMDA_PMID(CLUSTER_STAT,22), KERNEL_UTYPE, PM_INDOM_NULL, PM_SEM_COUNTER, + PMDA_PMUNITS(0,1,0,0,PM_TIME_MSEC,0) }, }, + +/* kernel.all.cpu.idle */ + { NULL, + { PMDA_PMID(CLUSTER_STAT,23), KERNEL_UTYPE, PM_INDOM_NULL, PM_SEM_COUNTER, + PMDA_PMUNITS(0,1,0,0,PM_TIME_MSEC,0) }, }, + +/* kernel.all.cpu.intr */ + { NULL, + { PMDA_PMID(CLUSTER_STAT,34), KERNEL_UTYPE, PM_INDOM_NULL, PM_SEM_COUNTER, + PMDA_PMUNITS(0,1,0,0,PM_TIME_MSEC,0) }, }, + +/* kernel.all.cpu.wait.total */ + { NULL, + { PMDA_PMID(CLUSTER_STAT,35), KERNEL_UTYPE, PM_INDOM_NULL, PM_SEM_COUNTER, + PMDA_PMUNITS(0,1,0,0,PM_TIME_MSEC,0) }, }, + +/* kernel.all.cpu.irq.soft */ + { NULL, + { PMDA_PMID(CLUSTER_STAT,53), KERNEL_UTYPE, PM_INDOM_NULL, PM_SEM_COUNTER, + PMDA_PMUNITS(0,1,0,0,PM_TIME_MSEC,0) }, }, + +/* kernel.all.cpu.irq.hard */ + { NULL, + { PMDA_PMID(CLUSTER_STAT,54), KERNEL_UTYPE, PM_INDOM_NULL, PM_SEM_COUNTER, + PMDA_PMUNITS(0,1,0,0,PM_TIME_MSEC,0) }, }, + +/* kernel.all.cpu.steal */ + { NULL, + { PMDA_PMID(CLUSTER_STAT,55), KERNEL_UTYPE, PM_INDOM_NULL, PM_SEM_COUNTER, + PMDA_PMUNITS(0,1,0,0,PM_TIME_MSEC,0) }, }, + +/* kernel.all.cpu.guest */ + { NULL, + { PMDA_PMID(CLUSTER_STAT,60), KERNEL_UTYPE, PM_INDOM_NULL, PM_SEM_COUNTER, + PMDA_PMUNITS(0,1,0,0,PM_TIME_MSEC,0) }, }, + +/* kernel.all.cpu.vuser */ + { NULL, + { PMDA_PMID(CLUSTER_STAT,78), KERNEL_UTYPE, PM_INDOM_NULL, PM_SEM_COUNTER, + PMDA_PMUNITS(0,1,0,0,PM_TIME_MSEC,0) }, }, + +/* disk.all.read */ + { NULL, + { PMDA_PMID(CLUSTER_STAT,24), PM_TYPE_U64, PM_INDOM_NULL, PM_SEM_COUNTER, + PMDA_PMUNITS(0,0,1,0,0,PM_COUNT_ONE) }, }, + +/* disk.all.write */ + { NULL, + { PMDA_PMID(CLUSTER_STAT,25), PM_TYPE_U64, PM_INDOM_NULL, PM_SEM_COUNTER, + PMDA_PMUNITS(0,0,1,0,0,PM_COUNT_ONE) }, }, + +/* disk.all.blkread */ + { NULL, + { PMDA_PMID(CLUSTER_STAT,26), PM_TYPE_U64, PM_INDOM_NULL, PM_SEM_COUNTER, + PMDA_PMUNITS(0,0,1,0,0,PM_COUNT_ONE) }, }, + +/* disk.all.blkwrite */ + { NULL, + { PMDA_PMID(CLUSTER_STAT,27), PM_TYPE_U64, PM_INDOM_NULL, PM_SEM_COUNTER, + PMDA_PMUNITS(0,0,1,0,0,PM_COUNT_ONE) }, }, + +/* disk.dev.total */ + { NULL, + { PMDA_PMID(CLUSTER_STAT,28), PM_TYPE_U64, DISK_INDOM, PM_SEM_COUNTER, + PMDA_PMUNITS(0,0,1,0,0,PM_COUNT_ONE) }, }, + +/* disk.dev.blktotal */ + { NULL, + { PMDA_PMID(CLUSTER_STAT,36), PM_TYPE_U64, DISK_INDOM, PM_SEM_COUNTER, + PMDA_PMUNITS(0,0,1,0,0,PM_COUNT_ONE) }, }, + +/* disk.all.total */ + { NULL, + { PMDA_PMID(CLUSTER_STAT,29), PM_TYPE_U64, PM_INDOM_NULL, PM_SEM_COUNTER, + PMDA_PMUNITS(0,0,1,0,0,PM_COUNT_ONE) }, }, + +/* disk.all.blktotal */ + { NULL, + { PMDA_PMID(CLUSTER_STAT,37), PM_TYPE_U64, PM_INDOM_NULL, PM_SEM_COUNTER, + PMDA_PMUNITS(0,0,1,0,0,PM_COUNT_ONE) }, }, + +/* hinv.ncpu */ + { NULL, + { PMDA_PMID(CLUSTER_STAT,32), PM_TYPE_U32, PM_INDOM_NULL, PM_SEM_DISCRETE, + PMDA_PMUNITS(0,0,0,0,0,0) }, }, + +/* hinv.ndisk */ + { NULL, + { PMDA_PMID(CLUSTER_STAT,33), PM_TYPE_U32, PM_INDOM_NULL, PM_SEM_DISCRETE, + PMDA_PMUNITS(0,0,0,0,0,0) }, }, + +/* hinv.nnode */ + { NULL, + { PMDA_PMID(CLUSTER_STAT,19), PM_TYPE_U32, PM_INDOM_NULL, PM_SEM_DISCRETE, + PMDA_PMUNITS(0,0,0,0,0,0) }, }, + +/* kernel.all.hz */ + { NULL, + { PMDA_PMID(CLUSTER_STAT,48), PM_TYPE_U32, PM_INDOM_NULL, PM_SEM_DISCRETE, + PMDA_PMUNITS(0,-1,1,0,PM_TIME_SEC,PM_COUNT_ONE) }, }, + +/* + * /proc/uptime cluster + * Uptime modified and idletime added by Mike Mason <mmlnx@us.ibm.com> + */ + +/* kernel.all.uptime */ + { NULL, + { PMDA_PMID(CLUSTER_UPTIME,0), PM_TYPE_U32, PM_INDOM_NULL, PM_SEM_INSTANT, + PMDA_PMUNITS(0,1,0,0,PM_TIME_SEC,0) }, }, + +/* kernel.all.idletime */ + { NULL, + { PMDA_PMID(CLUSTER_UPTIME,1), PM_TYPE_U32, PM_INDOM_NULL, PM_SEM_INSTANT, + PMDA_PMUNITS(0,1,0,0,PM_TIME_SEC,0) }, }, + +/* + * /proc/meminfo cluster + */ + +/* mem.physmem */ + { NULL, + { PMDA_PMID(CLUSTER_MEMINFO,0), PM_TYPE_U64, PM_INDOM_NULL, PM_SEM_DISCRETE, + PMDA_PMUNITS(1,0,0,PM_SPACE_KBYTE,0,0) }, }, + +/* mem.util.used */ + { NULL, + { PMDA_PMID(CLUSTER_MEMINFO,1), PM_TYPE_U64, PM_INDOM_NULL, PM_SEM_INSTANT, + PMDA_PMUNITS(1,0,0,PM_SPACE_KBYTE,0,0) }, }, + +/* mem.util.free */ + { NULL, + { PMDA_PMID(CLUSTER_MEMINFO,2), PM_TYPE_U64, PM_INDOM_NULL, PM_SEM_INSTANT, + PMDA_PMUNITS(1,0,0,PM_SPACE_KBYTE,0,0) }, }, + +/* mem.util.shared */ + { NULL, + { PMDA_PMID(CLUSTER_MEMINFO,3), PM_TYPE_U64, PM_INDOM_NULL, PM_SEM_INSTANT, + PMDA_PMUNITS(1,0,0,PM_SPACE_KBYTE,0,0) }, }, + +/* mem.util.bufmem */ + { NULL, + { PMDA_PMID(CLUSTER_MEMINFO,4), PM_TYPE_U64, PM_INDOM_NULL, PM_SEM_INSTANT, + PMDA_PMUNITS(1,0,0,PM_SPACE_KBYTE,0,0) }, }, + +/* mem.util.cached */ + { NULL, + { PMDA_PMID(CLUSTER_MEMINFO,5), PM_TYPE_U64, PM_INDOM_NULL, PM_SEM_INSTANT, + PMDA_PMUNITS(1,0,0,PM_SPACE_KBYTE,0,0) }, }, + +/* mem.util.active */ + { NULL, + { PMDA_PMID(CLUSTER_MEMINFO,14), PM_TYPE_U64, PM_INDOM_NULL, PM_SEM_INSTANT, + PMDA_PMUNITS(1,0,0,PM_SPACE_KBYTE,0,0) }, }, + +/* mem.util.inactive */ + { NULL, + { PMDA_PMID(CLUSTER_MEMINFO,15), PM_TYPE_U64, PM_INDOM_NULL, PM_SEM_INSTANT, + PMDA_PMUNITS(1,0,0,PM_SPACE_KBYTE,0,0) }, }, + +/* mem.util.swapCached */ + { NULL, + { PMDA_PMID(CLUSTER_MEMINFO,13), PM_TYPE_U64, PM_INDOM_NULL, PM_SEM_INSTANT, + PMDA_PMUNITS(1,0,0,PM_SPACE_KBYTE,0,0) }, }, + +/* mem.util.highTotal */ + { NULL, + { PMDA_PMID(CLUSTER_MEMINFO,16), PM_TYPE_U64, PM_INDOM_NULL, PM_SEM_INSTANT, + PMDA_PMUNITS(1,0,0,PM_SPACE_KBYTE,0,0) }, }, + +/* mem.util.highFree */ + { NULL, + { PMDA_PMID(CLUSTER_MEMINFO,17), PM_TYPE_U64, PM_INDOM_NULL, PM_SEM_INSTANT, + PMDA_PMUNITS(1,0,0,PM_SPACE_KBYTE,0,0) }, }, + +/* mem.util.lowTotal */ + { NULL, + { PMDA_PMID(CLUSTER_MEMINFO,18), PM_TYPE_U64, PM_INDOM_NULL, PM_SEM_INSTANT, + PMDA_PMUNITS(1,0,0,PM_SPACE_KBYTE,0,0) }, }, + +/* mem.util.lowFree */ + { NULL, + { PMDA_PMID(CLUSTER_MEMINFO,19), PM_TYPE_U64, PM_INDOM_NULL, PM_SEM_INSTANT, + PMDA_PMUNITS(1,0,0,PM_SPACE_KBYTE,0,0) }, }, + +/* mem.util.swapTotal */ + { NULL, + { PMDA_PMID(CLUSTER_MEMINFO,20), PM_TYPE_U64, PM_INDOM_NULL, PM_SEM_INSTANT, + PMDA_PMUNITS(1,0,0,PM_SPACE_KBYTE,0,0) }, }, + +/* mem.util.swapFree */ + { NULL, + { PMDA_PMID(CLUSTER_MEMINFO,21), PM_TYPE_U64, PM_INDOM_NULL, PM_SEM_INSTANT, + PMDA_PMUNITS(1,0,0,PM_SPACE_KBYTE,0,0) }, }, + +/* mem.util.dirty */ + { NULL, + { PMDA_PMID(CLUSTER_MEMINFO,22), PM_TYPE_U64, PM_INDOM_NULL, PM_SEM_INSTANT, + PMDA_PMUNITS(1,0,0,PM_SPACE_KBYTE,0,0) }, }, + +/* mem.util.writeback */ + { NULL, + { PMDA_PMID(CLUSTER_MEMINFO,23), PM_TYPE_U64, PM_INDOM_NULL, PM_SEM_INSTANT, + PMDA_PMUNITS(1,0,0,PM_SPACE_KBYTE,0,0) }, }, + +/* mem.util.mapped */ + { NULL, + { PMDA_PMID(CLUSTER_MEMINFO,24), PM_TYPE_U64, PM_INDOM_NULL, PM_SEM_INSTANT, + PMDA_PMUNITS(1,0,0,PM_SPACE_KBYTE,0,0) }, }, + +/* mem.util.slab */ + { NULL, + { PMDA_PMID(CLUSTER_MEMINFO,25), PM_TYPE_U64, PM_INDOM_NULL, PM_SEM_INSTANT, + PMDA_PMUNITS(1,0,0,PM_SPACE_KBYTE,0,0) }, }, + +/* mem.util.committed_AS */ + { NULL, + { PMDA_PMID(CLUSTER_MEMINFO,26), PM_TYPE_U64, PM_INDOM_NULL, PM_SEM_INSTANT, + PMDA_PMUNITS(1,0,0,PM_SPACE_KBYTE,0,0) }, }, + +/* mem.util.pageTables */ + { NULL, + { PMDA_PMID(CLUSTER_MEMINFO,27), PM_TYPE_U64, PM_INDOM_NULL, PM_SEM_INSTANT, + PMDA_PMUNITS(1,0,0,PM_SPACE_KBYTE,0,0) }, }, + +/* mem.util.reverseMaps */ + { NULL, + { PMDA_PMID(CLUSTER_MEMINFO,28), PM_TYPE_U64, PM_INDOM_NULL, PM_SEM_INSTANT, + PMDA_PMUNITS(1,0,0,PM_SPACE_KBYTE,0,0) }, }, + +/* mem.util.cache_clean */ + { NULL, + { PMDA_PMID(CLUSTER_MEMINFO,29), PM_TYPE_U64, PM_INDOM_NULL, PM_SEM_INSTANT, + PMDA_PMUNITS(1,0,0,PM_SPACE_KBYTE,0,0) }, }, + +/* mem.util.anonpages */ + { NULL, + { PMDA_PMID(CLUSTER_MEMINFO,30), PM_TYPE_U64, PM_INDOM_NULL, PM_SEM_INSTANT, + PMDA_PMUNITS(1,0,0,PM_SPACE_KBYTE,0,0) }, }, + +/* mem.util.commitLimit */ + { NULL, + { PMDA_PMID(CLUSTER_MEMINFO,31), PM_TYPE_U64, PM_INDOM_NULL, PM_SEM_INSTANT, + PMDA_PMUNITS(1,0,0,PM_SPACE_KBYTE,0,0) }, }, + +/* mem.util.bounce */ + { NULL, + { PMDA_PMID(CLUSTER_MEMINFO,32), PM_TYPE_U64, PM_INDOM_NULL, PM_SEM_INSTANT, + PMDA_PMUNITS(1,0,0,PM_SPACE_KBYTE,0,0) }, }, + +/* mem.util.NFS_Unstable */ + { NULL, + { PMDA_PMID(CLUSTER_MEMINFO,33), PM_TYPE_U64, PM_INDOM_NULL, PM_SEM_INSTANT, + PMDA_PMUNITS(1,0,0,PM_SPACE_KBYTE,0,0) }, }, + +/* mem.util.slabReclaimable */ + { NULL, + { PMDA_PMID(CLUSTER_MEMINFO,34), PM_TYPE_U64, PM_INDOM_NULL, PM_SEM_INSTANT, + PMDA_PMUNITS(1,0,0,PM_SPACE_KBYTE,0,0) }, }, + +/* mem.util.slabUnreclaimable */ + { NULL, + { PMDA_PMID(CLUSTER_MEMINFO,35), PM_TYPE_U64, PM_INDOM_NULL, PM_SEM_INSTANT, + PMDA_PMUNITS(1,0,0,PM_SPACE_KBYTE,0,0) }, }, + +/* mem.util.active_anon */ + { NULL, + { PMDA_PMID(CLUSTER_MEMINFO,36), PM_TYPE_U64, PM_INDOM_NULL, PM_SEM_INSTANT, + PMDA_PMUNITS(1,0,0,PM_SPACE_KBYTE,0,0) }, }, + +/* mem.util.inactive_anon */ + { NULL, + { PMDA_PMID(CLUSTER_MEMINFO,37), PM_TYPE_U64, PM_INDOM_NULL, PM_SEM_INSTANT, + PMDA_PMUNITS(1,0,0,PM_SPACE_KBYTE,0,0) }, }, + +/* mem.util.active_file */ + { NULL, + { PMDA_PMID(CLUSTER_MEMINFO,38), PM_TYPE_U64, PM_INDOM_NULL, PM_SEM_INSTANT, + PMDA_PMUNITS(1,0,0,PM_SPACE_KBYTE,0,0) }, }, + +/* mem.util.inactive_file */ + { NULL, + { PMDA_PMID(CLUSTER_MEMINFO,39), PM_TYPE_U64, PM_INDOM_NULL, PM_SEM_INSTANT, + PMDA_PMUNITS(1,0,0,PM_SPACE_KBYTE,0,0) }, }, + +/* mem.util.unevictable */ + { NULL, + { PMDA_PMID(CLUSTER_MEMINFO,40), PM_TYPE_U64, PM_INDOM_NULL, PM_SEM_INSTANT, + PMDA_PMUNITS(1,0,0,PM_SPACE_KBYTE,0,0) }, }, + +/* mem.util.mlocked */ + { NULL, + { PMDA_PMID(CLUSTER_MEMINFO,41), PM_TYPE_U64, PM_INDOM_NULL, PM_SEM_INSTANT, + PMDA_PMUNITS(1,0,0,PM_SPACE_KBYTE,0,0) }, }, + +/* mem.util.shmem */ + { NULL, + { PMDA_PMID(CLUSTER_MEMINFO,42), PM_TYPE_U64, PM_INDOM_NULL, PM_SEM_INSTANT, + PMDA_PMUNITS(1,0,0,PM_SPACE_KBYTE,0,0) }, }, + +/* mem.util.kernelStack */ + { NULL, + { PMDA_PMID(CLUSTER_MEMINFO,43), PM_TYPE_U64, PM_INDOM_NULL, PM_SEM_INSTANT, + PMDA_PMUNITS(1,0,0,PM_SPACE_KBYTE,0,0) }, }, + +/* mem.util.hugepagesTotal */ + { NULL, + { PMDA_PMID(CLUSTER_MEMINFO,44), PM_TYPE_U64, PM_INDOM_NULL, PM_SEM_INSTANT, + PMDA_PMUNITS(0,0,1,0,0,PM_COUNT_ONE) }, }, + +/* mem.util.hugepagesFree */ + { NULL, + { PMDA_PMID(CLUSTER_MEMINFO,45), PM_TYPE_U64, PM_INDOM_NULL, PM_SEM_INSTANT, + PMDA_PMUNITS(0,0,1,0,0,PM_COUNT_ONE) }, }, + +/* mem.util.hugepagesRsvd */ + { NULL, + { PMDA_PMID(CLUSTER_MEMINFO,46), PM_TYPE_U64, PM_INDOM_NULL, PM_SEM_INSTANT, + PMDA_PMUNITS(0,0,1,0,0,PM_COUNT_ONE) }, }, + +/* mem.util.hugepagesSurp */ + { NULL, + { PMDA_PMID(CLUSTER_MEMINFO,47), PM_TYPE_U64, PM_INDOM_NULL, PM_SEM_INSTANT, + PMDA_PMUNITS(0,0,1,0,0,PM_COUNT_ONE) }, }, + +/* mem.util.directMap4k */ + { NULL, + { PMDA_PMID(CLUSTER_MEMINFO,48), PM_TYPE_U64, PM_INDOM_NULL, PM_SEM_INSTANT, + PMDA_PMUNITS(1,0,0,PM_SPACE_KBYTE,0,0) }, }, + +/* mem.util.directMap2M */ + { NULL, + { PMDA_PMID(CLUSTER_MEMINFO,49), PM_TYPE_U64, PM_INDOM_NULL, PM_SEM_INSTANT, + PMDA_PMUNITS(1,0,0,PM_SPACE_KBYTE,0,0) }, }, + +/* mem.util.vmallocTotal */ + { NULL, + { PMDA_PMID(CLUSTER_MEMINFO,50), PM_TYPE_U64, PM_INDOM_NULL, PM_SEM_INSTANT, + PMDA_PMUNITS(1,0,0,PM_SPACE_KBYTE,0,0) }, }, + +/* mem.util.vmallocUsed */ + { NULL, + { PMDA_PMID(CLUSTER_MEMINFO,51), PM_TYPE_U64, PM_INDOM_NULL, PM_SEM_INSTANT, + PMDA_PMUNITS(1,0,0,PM_SPACE_KBYTE,0,0) }, }, + +/* mem.util.vmallocChunk */ + { NULL, + { PMDA_PMID(CLUSTER_MEMINFO,52), PM_TYPE_U64, PM_INDOM_NULL, PM_SEM_INSTANT, + PMDA_PMUNITS(1,0,0,PM_SPACE_KBYTE,0,0) }, }, + +/* mem.util.mmap_copy */ + { NULL, + { PMDA_PMID(CLUSTER_MEMINFO,53), PM_TYPE_U64, PM_INDOM_NULL, PM_SEM_INSTANT, + PMDA_PMUNITS(1,0,0,PM_SPACE_KBYTE,0,0) }, }, + +/* mem.util.quicklists */ + { NULL, + { PMDA_PMID(CLUSTER_MEMINFO,54), PM_TYPE_U64, PM_INDOM_NULL, PM_SEM_INSTANT, + PMDA_PMUNITS(1,0,0,PM_SPACE_KBYTE,0,0) }, }, + +/* mem.util.corrupthardware */ + { NULL, + { PMDA_PMID(CLUSTER_MEMINFO,55), PM_TYPE_U64, PM_INDOM_NULL, PM_SEM_INSTANT, + PMDA_PMUNITS(1,0,0,PM_SPACE_KBYTE,0,0) }, }, + +/* mem.util.mmap_copy */ + { NULL, + { PMDA_PMID(CLUSTER_MEMINFO,56), PM_TYPE_U64, PM_INDOM_NULL, PM_SEM_INSTANT, + PMDA_PMUNITS(1,0,0,PM_SPACE_KBYTE,0,0) }, }, + +/* mem.util.directMap1G */ + { NULL, + { PMDA_PMID(CLUSTER_MEMINFO,57), PM_TYPE_U64, PM_INDOM_NULL, PM_SEM_INSTANT, + PMDA_PMUNITS(1,0,0,PM_SPACE_KBYTE,0,0) }, }, + +/* mem.util.available */ + { NULL, + { PMDA_PMID(CLUSTER_MEMINFO,58), PM_TYPE_U64, PM_INDOM_NULL, PM_SEM_INSTANT, + PMDA_PMUNITS(1,0,0,PM_SPACE_KBYTE,0,0) }, }, + +/* mem.numa.util.total */ + { NULL, + { PMDA_PMID(CLUSTER_NUMA_MEMINFO,0), PM_TYPE_U64, NODE_INDOM, PM_SEM_INSTANT, + PMDA_PMUNITS(1,0,0,PM_SPACE_KBYTE,0,0) }, }, + +/* mem.numa.util.free */ + { NULL, + { PMDA_PMID(CLUSTER_NUMA_MEMINFO,1), PM_TYPE_U64, NODE_INDOM, PM_SEM_INSTANT, + PMDA_PMUNITS(1,0,0,PM_SPACE_KBYTE,0,0) }, }, + +/* mem.numa.util.used */ + { NULL, + { PMDA_PMID(CLUSTER_NUMA_MEMINFO,2), PM_TYPE_U64, NODE_INDOM, PM_SEM_INSTANT, + PMDA_PMUNITS(1,0,0,PM_SPACE_KBYTE,0,0) }, }, + +/* mem.numa.util.active */ + { NULL, + { PMDA_PMID(CLUSTER_NUMA_MEMINFO,3), PM_TYPE_U64, NODE_INDOM, PM_SEM_INSTANT, + PMDA_PMUNITS(1,0,0,PM_SPACE_KBYTE,0,0) }, }, + +/* mem.numa.util.inactive */ + { NULL, + { PMDA_PMID(CLUSTER_NUMA_MEMINFO,4), PM_TYPE_U64, NODE_INDOM, PM_SEM_INSTANT, + PMDA_PMUNITS(1,0,0,PM_SPACE_KBYTE,0,0) }, }, + +/* mem.numa.util.active_anon */ + { NULL, + { PMDA_PMID(CLUSTER_NUMA_MEMINFO,5), PM_TYPE_U64, NODE_INDOM, PM_SEM_INSTANT, + PMDA_PMUNITS(1,0,0,PM_SPACE_KBYTE,0,0) }, }, + +/* mem.numa.util.inactive_anon */ + { NULL, + { PMDA_PMID(CLUSTER_NUMA_MEMINFO,6), PM_TYPE_U64, NODE_INDOM, PM_SEM_INSTANT, + PMDA_PMUNITS(1,0,0,PM_SPACE_KBYTE,0,0) }, }, + +/* mem.numa.util.active_file */ + { NULL, + { PMDA_PMID(CLUSTER_NUMA_MEMINFO,7), PM_TYPE_U64, NODE_INDOM, PM_SEM_INSTANT, + PMDA_PMUNITS(1,0,0,PM_SPACE_KBYTE,0,0) }, }, + +/* mem.numa.util.inactive_file */ + { NULL, + { PMDA_PMID(CLUSTER_NUMA_MEMINFO,8), PM_TYPE_U64, NODE_INDOM, PM_SEM_INSTANT, + PMDA_PMUNITS(1,0,0,PM_SPACE_KBYTE,0,0) }, }, + +/* mem.numa.util.highTotal */ + { NULL, + { PMDA_PMID(CLUSTER_NUMA_MEMINFO,9), PM_TYPE_U64, NODE_INDOM, PM_SEM_INSTANT, + PMDA_PMUNITS(1,0,0,PM_SPACE_KBYTE,0,0) }, }, + +/* mem.numa.util.highFree */ + { NULL, + { PMDA_PMID(CLUSTER_NUMA_MEMINFO,10), PM_TYPE_U64, NODE_INDOM, PM_SEM_INSTANT, + PMDA_PMUNITS(1,0,0,PM_SPACE_KBYTE,0,0) }, }, + +/* mem.numa.util.lowTotal */ + { NULL, + { PMDA_PMID(CLUSTER_NUMA_MEMINFO,11), PM_TYPE_U64, NODE_INDOM, PM_SEM_INSTANT, + PMDA_PMUNITS(1,0,0,PM_SPACE_KBYTE,0,0) }, }, + +/* mem.numa.util.lowFree */ + { NULL, + { PMDA_PMID(CLUSTER_NUMA_MEMINFO,12), PM_TYPE_U64, NODE_INDOM, PM_SEM_INSTANT, + PMDA_PMUNITS(1,0,0,PM_SPACE_KBYTE,0,0) }, }, + +/* mem.numa.util.unevictable */ + { NULL, + { PMDA_PMID(CLUSTER_NUMA_MEMINFO,13), PM_TYPE_U64, NODE_INDOM, PM_SEM_INSTANT, + PMDA_PMUNITS(1,0,0,PM_SPACE_KBYTE,0,0) }, }, + +/* mem.numa.util.mlocked */ + { NULL, + { PMDA_PMID(CLUSTER_NUMA_MEMINFO,14), PM_TYPE_U64, NODE_INDOM, PM_SEM_INSTANT, + PMDA_PMUNITS(1,0,0,PM_SPACE_KBYTE,0,0) }, }, + +/* mem.numa.util.dirty */ + { NULL, + { PMDA_PMID(CLUSTER_NUMA_MEMINFO,15), PM_TYPE_U64, NODE_INDOM, PM_SEM_INSTANT, + PMDA_PMUNITS(1,0,0,PM_SPACE_KBYTE,0,0) }, }, + +/* mem.numa.util.writeback */ + { NULL, + { PMDA_PMID(CLUSTER_NUMA_MEMINFO,16), PM_TYPE_U64, NODE_INDOM, PM_SEM_INSTANT, + PMDA_PMUNITS(1,0,0,PM_SPACE_KBYTE,0,0) }, }, + +/* mem.numa.util.filePages */ + { NULL, + { PMDA_PMID(CLUSTER_NUMA_MEMINFO,17), PM_TYPE_U64, NODE_INDOM, PM_SEM_INSTANT, + PMDA_PMUNITS(1,0,0,PM_SPACE_KBYTE,0,0) }, }, + +/* mem.numa.util.mapped */ + { NULL, + { PMDA_PMID(CLUSTER_NUMA_MEMINFO,18), PM_TYPE_U64, NODE_INDOM, PM_SEM_INSTANT, + PMDA_PMUNITS(1,0,0,PM_SPACE_KBYTE,0,0) }, }, + +/* mem.numa.util.anonpages */ + { NULL, + { PMDA_PMID(CLUSTER_NUMA_MEMINFO,19), PM_TYPE_U64, NODE_INDOM, PM_SEM_INSTANT, + PMDA_PMUNITS(1,0,0,PM_SPACE_KBYTE,0,0) }, }, + +/* mem.numa.util.shmem */ + { NULL, + { PMDA_PMID(CLUSTER_NUMA_MEMINFO,20), PM_TYPE_U64, NODE_INDOM, PM_SEM_INSTANT, + PMDA_PMUNITS(1,0,0,PM_SPACE_KBYTE,0,0) }, }, + +/* mem.numa.util.kernelStack */ + { NULL, + { PMDA_PMID(CLUSTER_NUMA_MEMINFO,21), PM_TYPE_U64, NODE_INDOM, PM_SEM_INSTANT, + PMDA_PMUNITS(1,0,0,PM_SPACE_KBYTE,0,0) }, }, + +/* mem.numa.util.pageTables */ + { NULL, + { PMDA_PMID(CLUSTER_NUMA_MEMINFO,22), PM_TYPE_U64, NODE_INDOM, PM_SEM_INSTANT, + PMDA_PMUNITS(1,0,0,PM_SPACE_KBYTE,0,0) }, }, + +/* mem.numa.util.NFS_Unstable */ + { NULL, + { PMDA_PMID(CLUSTER_NUMA_MEMINFO,23), PM_TYPE_U64, NODE_INDOM, PM_SEM_INSTANT, + PMDA_PMUNITS(1,0,0,PM_SPACE_KBYTE,0,0) }, }, + +/* mem.numa.util.bounce */ + { NULL, + { PMDA_PMID(CLUSTER_NUMA_MEMINFO,24), PM_TYPE_U64, NODE_INDOM, PM_SEM_INSTANT, + PMDA_PMUNITS(1,0,0,PM_SPACE_KBYTE,0,0) }, }, + +/* mem.numa.util.writebackTmp */ + { NULL, + { PMDA_PMID(CLUSTER_NUMA_MEMINFO,25), PM_TYPE_U64, NODE_INDOM, PM_SEM_INSTANT, + PMDA_PMUNITS(1,0,0,PM_SPACE_KBYTE,0,0) }, }, + +/* mem.numa.util.slab */ + { NULL, + { PMDA_PMID(CLUSTER_NUMA_MEMINFO,26), PM_TYPE_U64, NODE_INDOM, PM_SEM_INSTANT, + PMDA_PMUNITS(1,0,0,PM_SPACE_KBYTE,0,0) }, }, + +/* mem.numa.util.slabReclaimable */ + { NULL, + { PMDA_PMID(CLUSTER_NUMA_MEMINFO,27), PM_TYPE_U64, NODE_INDOM, PM_SEM_INSTANT, + PMDA_PMUNITS(1,0,0,PM_SPACE_KBYTE,0,0) }, }, + +/* mem.numa.util.slabUnreclaimable */ + { NULL, + { PMDA_PMID(CLUSTER_NUMA_MEMINFO,28), PM_TYPE_U64, NODE_INDOM, PM_SEM_INSTANT, + PMDA_PMUNITS(1,0,0,PM_SPACE_KBYTE,0,0) }, }, + +/* mem.numa.util.hugepagesTotal */ + { NULL, + { PMDA_PMID(CLUSTER_NUMA_MEMINFO,29), PM_TYPE_U64, NODE_INDOM, PM_SEM_INSTANT, + PMDA_PMUNITS(0,0,1,0,0,PM_COUNT_ONE) }, }, + +/* mem.numa.util.hugepagesFree */ + { NULL, + { PMDA_PMID(CLUSTER_NUMA_MEMINFO,30), PM_TYPE_U64, NODE_INDOM, PM_SEM_INSTANT, + PMDA_PMUNITS(0,0,1,0,0,PM_COUNT_ONE) }, }, + +/* mem.numa.util.hugepagesSurp */ + { NULL, + { PMDA_PMID(CLUSTER_NUMA_MEMINFO,31), PM_TYPE_U64, NODE_INDOM, PM_SEM_INSTANT, + PMDA_PMUNITS(0,0,1,0,0,PM_COUNT_ONE) }, }, + +/* mem.numa.alloc.hit */ + { NULL, + { PMDA_PMID(CLUSTER_NUMA_MEMINFO,32), PM_TYPE_U64, NODE_INDOM, PM_SEM_COUNTER, + PMDA_PMUNITS(0,0,1,0,0,PM_COUNT_ONE) }, }, + +/* mem.numa.alloc.miss */ + { NULL, + { PMDA_PMID(CLUSTER_NUMA_MEMINFO,33), PM_TYPE_U64, NODE_INDOM, PM_SEM_COUNTER, + PMDA_PMUNITS(0,0,1,0,0,PM_COUNT_ONE) }, }, + +/* mem.numa.alloc.foreign */ + { NULL, + { PMDA_PMID(CLUSTER_NUMA_MEMINFO,34), PM_TYPE_U64, NODE_INDOM, PM_SEM_COUNTER, + PMDA_PMUNITS(0,0,1,0,0,PM_COUNT_ONE) }, }, + +/* mem.numa.alloc.interleave_hit */ + { NULL, + { PMDA_PMID(CLUSTER_NUMA_MEMINFO,35), PM_TYPE_U64, NODE_INDOM, PM_SEM_COUNTER, + PMDA_PMUNITS(0,0,1,0,0,PM_COUNT_ONE) }, }, + +/* mem.numa.alloc.local_node */ + { NULL, + { PMDA_PMID(CLUSTER_NUMA_MEMINFO,36), PM_TYPE_U64, NODE_INDOM, PM_SEM_COUNTER, + PMDA_PMUNITS(0,0,1,0,0,PM_COUNT_ONE) }, }, + +/* mem.numa.alloc.other_node */ + { NULL, + { PMDA_PMID(CLUSTER_NUMA_MEMINFO,37), PM_TYPE_U64, NODE_INDOM, PM_SEM_COUNTER, + PMDA_PMUNITS(0,0,1,0,0,PM_COUNT_ONE) }, }, + + +/* swap.length */ + { NULL, + { PMDA_PMID(CLUSTER_MEMINFO,6), PM_TYPE_U64, PM_INDOM_NULL, PM_SEM_INSTANT, + PMDA_PMUNITS(1,0,0,PM_SPACE_BYTE,0,0) }, }, + +/* swap.used */ + { NULL, + { PMDA_PMID(CLUSTER_MEMINFO,7), PM_TYPE_U64, PM_INDOM_NULL, PM_SEM_INSTANT, + PMDA_PMUNITS(1,0,0,PM_SPACE_BYTE,0,0) }, }, + +/* swap.free */ + { NULL, + { PMDA_PMID(CLUSTER_MEMINFO,8), PM_TYPE_U64, PM_INDOM_NULL, PM_SEM_INSTANT, + PMDA_PMUNITS(1,0,0,PM_SPACE_BYTE,0,0) }, }, + +/* hinv.physmem */ + { NULL, + { PMDA_PMID(CLUSTER_MEMINFO,9), PM_TYPE_U32, PM_INDOM_NULL, PM_SEM_DISCRETE, + PMDA_PMUNITS(1,0,0,PM_SPACE_MBYTE,0,0) }, }, + +/* mem.freemem */ + { NULL, + { PMDA_PMID(CLUSTER_MEMINFO,10), PM_TYPE_U64, PM_INDOM_NULL, PM_SEM_INSTANT, + PMDA_PMUNITS(1,0,0,PM_SPACE_KBYTE,0,0) }, }, + +/* hinv.pagesize */ + { NULL, + { PMDA_PMID(CLUSTER_MEMINFO,11), PM_TYPE_U32, PM_INDOM_NULL, PM_SEM_DISCRETE, + PMDA_PMUNITS(1,0,0,PM_SPACE_BYTE,0,0) }, }, + +/* mem.util.other */ + { NULL, + { PMDA_PMID(CLUSTER_MEMINFO,12), PM_TYPE_U64, PM_INDOM_NULL, PM_SEM_INSTANT, + PMDA_PMUNITS(1,0,0,PM_SPACE_KBYTE,0,0) }, }, + +/* + * /proc/slabinfo cluster + */ + + /* mem.slabinfo.objects.active */ + { NULL, + { PMDA_PMID(CLUSTER_SLAB,0), PM_TYPE_U64, SLAB_INDOM, PM_SEM_INSTANT, + PMDA_PMUNITS(0,0,0,0,0,0) } }, + + /* mem.slabinfo.objects.total */ + { NULL, + { PMDA_PMID(CLUSTER_SLAB,1), PM_TYPE_U64, SLAB_INDOM, PM_SEM_INSTANT, + PMDA_PMUNITS(0,0,0,0,0,0) } }, + + /* mem.slabinfo.objects.size */ + { NULL, + { PMDA_PMID(CLUSTER_SLAB,2), PM_TYPE_U32, SLAB_INDOM, PM_SEM_INSTANT, + PMDA_PMUNITS(1,0,0,PM_SPACE_BYTE,0,0) }, }, + + /* mem.slabinfo.slabs.active */ + { NULL, + { PMDA_PMID(CLUSTER_SLAB,3), PM_TYPE_U32, SLAB_INDOM, PM_SEM_INSTANT, + PMDA_PMUNITS(0,0,0,0,0,0) } }, + + /* mem.slabinfo.slabs.total */ + { NULL, + { PMDA_PMID(CLUSTER_SLAB,4), PM_TYPE_U32, SLAB_INDOM, PM_SEM_INSTANT, + PMDA_PMUNITS(0,0,0,0,0,0) } }, + + /* mem.slabinfo.slabs.pages_per_slab */ + { NULL, + { PMDA_PMID(CLUSTER_SLAB,5), PM_TYPE_U32, SLAB_INDOM, PM_SEM_INSTANT, + PMDA_PMUNITS(0,0,0,0,0,0) } }, + + /* mem.slabinfo.slabs.objects_per_slab */ + { NULL, + { PMDA_PMID(CLUSTER_SLAB,6), PM_TYPE_U32, SLAB_INDOM, PM_SEM_INSTANT, + PMDA_PMUNITS(0,0,0,0,0,0) } }, + + /* mem.slabinfo.slabs.total_size */ + { NULL, + { PMDA_PMID(CLUSTER_SLAB,7), PM_TYPE_U64, SLAB_INDOM, PM_SEM_INSTANT, + PMDA_PMUNITS(1,0,0,PM_SPACE_BYTE,0,0) }, }, + +/* + * /proc/loadavg cluster + */ + + /* kernel.all.load */ + { NULL, + { PMDA_PMID(CLUSTER_LOADAVG,0), PM_TYPE_FLOAT, LOADAVG_INDOM, PM_SEM_INSTANT, + PMDA_PMUNITS(0,0,0,0,0,0) } }, + + /* kernel.all.lastpid -- added by Mike Mason <mmlnx@us.ibm.com> */ + { NULL, + { PMDA_PMID(CLUSTER_LOADAVG, 1), PM_TYPE_U32, PM_INDOM_NULL, PM_SEM_INSTANT, + PMDA_PMUNITS(0,0,0,0,0,0) } }, + + /* kernel.all.runnable */ + { NULL, + { PMDA_PMID(CLUSTER_LOADAVG, 2), PM_TYPE_U32, PM_INDOM_NULL, PM_SEM_INSTANT, + PMDA_PMUNITS(0,0,0,0,0,0) } }, + + /* kernel.all.nprocs */ + { NULL, + { PMDA_PMID(CLUSTER_LOADAVG, 3), PM_TYPE_U32, PM_INDOM_NULL, PM_SEM_INSTANT, + PMDA_PMUNITS(0,0,0,0,0,0) } }, + +/* + * /proc/net/dev cluster + */ + +/* network.interface.in.bytes */ + { NULL, + { PMDA_PMID(CLUSTER_NET_DEV,0), PM_TYPE_U64, NET_DEV_INDOM, PM_SEM_COUNTER, + PMDA_PMUNITS(1,0,0,PM_SPACE_BYTE,0,0) }, }, + +/* network.interface.in.packets */ + { NULL, + { PMDA_PMID(CLUSTER_NET_DEV,1), PM_TYPE_U64, NET_DEV_INDOM, PM_SEM_COUNTER, + PMDA_PMUNITS(0,0,1,0,0,PM_COUNT_ONE) }, }, + +/* network.interface.in.errors */ + { NULL, + { PMDA_PMID(CLUSTER_NET_DEV,2), PM_TYPE_U64, NET_DEV_INDOM, PM_SEM_COUNTER, + PMDA_PMUNITS(0,0,1,0,0,PM_COUNT_ONE) }, }, + +/* network.interface.in.drops */ + { NULL, + { PMDA_PMID(CLUSTER_NET_DEV,3), PM_TYPE_U64, NET_DEV_INDOM, PM_SEM_COUNTER, + PMDA_PMUNITS(0,0,1,0,0,PM_COUNT_ONE) }, }, + +/* network.interface.in.fifo */ + { NULL, + { PMDA_PMID(CLUSTER_NET_DEV,4), PM_TYPE_U64, NET_DEV_INDOM, PM_SEM_COUNTER, + PMDA_PMUNITS(0,0,1,0,0,PM_COUNT_ONE) }, }, + +/* network.interface.in.frame */ + { NULL, + { PMDA_PMID(CLUSTER_NET_DEV,5), PM_TYPE_U64, NET_DEV_INDOM, PM_SEM_COUNTER, + PMDA_PMUNITS(0,0,1,0,0,PM_COUNT_ONE) }, }, + +/* network.interface.in.compressed */ + { NULL, + { PMDA_PMID(CLUSTER_NET_DEV,6), PM_TYPE_U64, NET_DEV_INDOM, PM_SEM_COUNTER, + PMDA_PMUNITS(0,0,1,0,0,PM_COUNT_ONE) }, }, + +/* network.interface.in.mcasts */ + { NULL, + { PMDA_PMID(CLUSTER_NET_DEV,7), PM_TYPE_U64, NET_DEV_INDOM, PM_SEM_COUNTER, + PMDA_PMUNITS(0,0,1,0,0,PM_COUNT_ONE) }, }, + +/* network.interface.out.bytes */ + { NULL, + { PMDA_PMID(CLUSTER_NET_DEV,8), PM_TYPE_U64, NET_DEV_INDOM, PM_SEM_COUNTER, + PMDA_PMUNITS(1,0,0,PM_SPACE_BYTE,0,0) }, }, + +/* network.interface.out.packets */ + { NULL, + { PMDA_PMID(CLUSTER_NET_DEV,9), PM_TYPE_U64, NET_DEV_INDOM, PM_SEM_COUNTER, + PMDA_PMUNITS(0,0,1,0,0,PM_COUNT_ONE) }, }, + +/* network.interface.out.errors */ + { NULL, + { PMDA_PMID(CLUSTER_NET_DEV,10), PM_TYPE_U64, NET_DEV_INDOM, PM_SEM_COUNTER, + PMDA_PMUNITS(0,0,1,0,0,PM_COUNT_ONE) }, }, + +/* network.interface.out.drops */ + { NULL, + { PMDA_PMID(CLUSTER_NET_DEV,11), PM_TYPE_U64, NET_DEV_INDOM, PM_SEM_COUNTER, + PMDA_PMUNITS(0,0,1,0,0,PM_COUNT_ONE) }, }, + +/* network.interface.out.fifo */ + { NULL, + { PMDA_PMID(CLUSTER_NET_DEV,12), PM_TYPE_U64, NET_DEV_INDOM, PM_SEM_COUNTER, + PMDA_PMUNITS(0,0,1,0,0,PM_COUNT_ONE) }, }, + +/* network.interface.collisions */ + { NULL, + { PMDA_PMID(CLUSTER_NET_DEV,13), PM_TYPE_U64, NET_DEV_INDOM, PM_SEM_COUNTER, + PMDA_PMUNITS(0,0,1,0,0,PM_COUNT_ONE) }, }, + +/* network.interface.out.carrier */ + { NULL, + { PMDA_PMID(CLUSTER_NET_DEV,14), PM_TYPE_U64, NET_DEV_INDOM, PM_SEM_COUNTER, + PMDA_PMUNITS(0,0,1,0,0,PM_COUNT_ONE) }, }, + +/* network.interface.out.compressed */ + { NULL, + { PMDA_PMID(CLUSTER_NET_DEV,15), PM_TYPE_U64, NET_DEV_INDOM, PM_SEM_COUNTER, + PMDA_PMUNITS(0,0,1,0,0,PM_COUNT_ONE) }, }, + +/* network.interface.total.bytes */ + { NULL, + { PMDA_PMID(CLUSTER_NET_DEV,16), PM_TYPE_U64, NET_DEV_INDOM, PM_SEM_COUNTER, + PMDA_PMUNITS(1,0,0,0,PM_SPACE_BYTE,0) }, }, + +/* network.interface.total.packets */ + { NULL, + { PMDA_PMID(CLUSTER_NET_DEV,17), PM_TYPE_U64, NET_DEV_INDOM, PM_SEM_COUNTER, + PMDA_PMUNITS(0,0,1,0,0,PM_COUNT_ONE) }, }, + +/* network.interface.total.errors */ + { NULL, + { PMDA_PMID(CLUSTER_NET_DEV,18), PM_TYPE_U64, NET_DEV_INDOM, PM_SEM_COUNTER, + PMDA_PMUNITS(0,0,1,0,0,PM_COUNT_ONE) }, }, + +/* network.interface.total.drops */ + { NULL, + { PMDA_PMID(CLUSTER_NET_DEV,19), PM_TYPE_U64, NET_DEV_INDOM, PM_SEM_COUNTER, + PMDA_PMUNITS(0,0,1,0,0,PM_COUNT_ONE) }, }, + +/* network.interface.total.mcasts */ + { NULL, + { PMDA_PMID(CLUSTER_NET_DEV,20), PM_TYPE_U64, NET_DEV_INDOM, PM_SEM_COUNTER, + PMDA_PMUNITS(0,0,1,0,0,PM_COUNT_ONE) }, }, + +/* network.interface.mtu */ + { NULL, + { PMDA_PMID(CLUSTER_NET_DEV,21), PM_TYPE_U32, NET_DEV_INDOM, PM_SEM_INSTANT, + PMDA_PMUNITS(1,0,0,0,PM_SPACE_BYTE,0) }, }, + +/* network.interface.speed */ + { NULL, + { PMDA_PMID(CLUSTER_NET_DEV,22), PM_TYPE_FLOAT, NET_DEV_INDOM, PM_SEM_DISCRETE, + PMDA_PMUNITS(1,-1,0,PM_SPACE_MBYTE,PM_TIME_SEC,0) }, }, + +/* network.interface.baudrate */ + { NULL, + { PMDA_PMID(CLUSTER_NET_DEV,23), PM_TYPE_U32, NET_DEV_INDOM, PM_SEM_DISCRETE, + PMDA_PMUNITS(1,-1,0,PM_SPACE_BYTE,PM_TIME_SEC,0) }, }, + +/* network.interface.duplex */ + { NULL, + { PMDA_PMID(CLUSTER_NET_DEV,24), PM_TYPE_U32, NET_DEV_INDOM, PM_SEM_DISCRETE, + PMDA_PMUNITS(0,0,0,0,0,0) }, }, + +/* network.interface.up */ + { NULL, + { PMDA_PMID(CLUSTER_NET_DEV,25), PM_TYPE_U32, NET_DEV_INDOM, PM_SEM_INSTANT, + PMDA_PMUNITS(0,0,0,0,0,0) }, }, + +/* network.interface.running */ + { NULL, + { PMDA_PMID(CLUSTER_NET_DEV,26), PM_TYPE_U32, NET_DEV_INDOM, PM_SEM_INSTANT, + PMDA_PMUNITS(0,0,0,0,0,0) }, }, + +/* hinv.ninterface */ + { NULL, + { PMDA_PMID(CLUSTER_NET_DEV,27), PM_TYPE_U32, PM_INDOM_NULL, PM_SEM_DISCRETE, + PMDA_PMUNITS(0,0,0,0,0,0) }, }, + +/* network.interface.inet_addr */ + { NULL, + { PMDA_PMID(CLUSTER_NET_ADDR,0), PM_TYPE_STRING, NET_ADDR_INDOM, PM_SEM_INSTANT, + PMDA_PMUNITS(0,0,0,0,0,0) }, }, + +/* network.interface.ipv6_addr */ + { NULL, + { PMDA_PMID(CLUSTER_NET_ADDR,1), PM_TYPE_STRING, NET_ADDR_INDOM, PM_SEM_INSTANT, + PMDA_PMUNITS(0,0,0,0,0,0) }, }, + +/* network.interface.ipv6_scope */ + { NULL, + { PMDA_PMID(CLUSTER_NET_ADDR,2), PM_TYPE_STRING, NET_ADDR_INDOM, PM_SEM_INSTANT, + PMDA_PMUNITS(0,0,0,0,0,0) }, }, + +/* network.interface.hw_addr */ + { NULL, + { PMDA_PMID(CLUSTER_NET_ADDR,3), PM_TYPE_STRING, NET_ADDR_INDOM, PM_SEM_INSTANT, + PMDA_PMUNITS(0,0,0,0,0,0) }, }, + +/* + * filesys cluster + */ + +/* hinv.nmounts */ + { NULL, + { PMDA_PMID(CLUSTER_FILESYS,0), PM_TYPE_U32, PM_INDOM_NULL, PM_SEM_DISCRETE, + PMDA_PMUNITS(0,0,1,0,0,PM_COUNT_ONE) } }, + +/* filesys.capacity */ + { NULL, + { PMDA_PMID(CLUSTER_FILESYS,1), PM_TYPE_U64, FILESYS_INDOM, PM_SEM_DISCRETE, + PMDA_PMUNITS(1,0,0,PM_SPACE_KBYTE,0,0) } }, + +/* filesys.used */ + { NULL, + { PMDA_PMID(CLUSTER_FILESYS,2), PM_TYPE_U64, FILESYS_INDOM, PM_SEM_INSTANT, + PMDA_PMUNITS(1,0,0,PM_SPACE_KBYTE,0,0) } }, + +/* filesys.free */ + { NULL, + { PMDA_PMID(CLUSTER_FILESYS,3), PM_TYPE_U64, FILESYS_INDOM, PM_SEM_INSTANT, + PMDA_PMUNITS(1,0,0,PM_SPACE_KBYTE,0,0) } }, + +/* filesys.maxfiles */ + { NULL, + { PMDA_PMID(CLUSTER_FILESYS,4), PM_TYPE_U32, FILESYS_INDOM, PM_SEM_DISCRETE, + PMDA_PMUNITS(0,0,0,0,0,0) } }, + +/* filesys.usedfiles */ + { NULL, + { PMDA_PMID(CLUSTER_FILESYS,5), PM_TYPE_U32, FILESYS_INDOM, PM_SEM_INSTANT, + PMDA_PMUNITS(0,0,0,0,0,0) } }, + +/* filesys.freefiles */ + { NULL, + { PMDA_PMID(CLUSTER_FILESYS,6), PM_TYPE_U32, FILESYS_INDOM, PM_SEM_INSTANT, + PMDA_PMUNITS(0,0,0,0,0,0) } }, + +/* filesys.mountdir */ + { NULL, + { PMDA_PMID(CLUSTER_FILESYS,7), PM_TYPE_STRING, FILESYS_INDOM, PM_SEM_DISCRETE, + PMDA_PMUNITS(0,0,0,0,0,0) } }, + +/* filesys.full */ + { NULL, + { PMDA_PMID(CLUSTER_FILESYS,8), PM_TYPE_DOUBLE, FILESYS_INDOM, PM_SEM_INSTANT, + PMDA_PMUNITS(0,0,0,0,0,0) } }, + +/* filesys.blocksize */ + { NULL, + { PMDA_PMID(CLUSTER_FILESYS,9), PM_TYPE_U32, FILESYS_INDOM, PM_SEM_INSTANT, + PMDA_PMUNITS(1,0,0,PM_SPACE_BYTE,0,0) } }, + +/* filesys.avail */ + { NULL, + { PMDA_PMID(CLUSTER_FILESYS,10), PM_TYPE_U64, FILESYS_INDOM, PM_SEM_INSTANT, + PMDA_PMUNITS(1,0,0,PM_SPACE_KBYTE,0,0) } }, + +/* filesys.readonly */ + { NULL, + { PMDA_PMID(CLUSTER_FILESYS,11), PM_TYPE_U32, FILESYS_INDOM, PM_SEM_INSTANT, + PMDA_PMUNITS(0,0,0,0,0,0) } }, + +/* + * tmpfs filesystem cluster + */ + +/* tmpfs.capacity */ + { NULL, + { PMDA_PMID(CLUSTER_TMPFS,1), PM_TYPE_U64, TMPFS_INDOM, PM_SEM_DISCRETE, + PMDA_PMUNITS(1,0,0,PM_SPACE_KBYTE,0,0) } }, + +/* tmpfs.used */ + { NULL, + { PMDA_PMID(CLUSTER_TMPFS,2), PM_TYPE_U64, TMPFS_INDOM, PM_SEM_INSTANT, + PMDA_PMUNITS(1,0,0,PM_SPACE_KBYTE,0,0) } }, + +/* tmpfs.free */ + { NULL, + { PMDA_PMID(CLUSTER_TMPFS,3), PM_TYPE_U64, TMPFS_INDOM, PM_SEM_INSTANT, + PMDA_PMUNITS(1,0,0,PM_SPACE_KBYTE,0,0) } }, + +/* tmpfs.maxfiles */ + { NULL, + { PMDA_PMID(CLUSTER_TMPFS,4), PM_TYPE_U32, TMPFS_INDOM, PM_SEM_DISCRETE, + PMDA_PMUNITS(0,0,0,0,0,0) } }, + +/* tmpfs.usedfiles */ + { NULL, + { PMDA_PMID(CLUSTER_TMPFS,5), PM_TYPE_U32, TMPFS_INDOM, PM_SEM_INSTANT, + PMDA_PMUNITS(0,0,0,0,0,0) } }, + +/* tmpfs.freefiles */ + { NULL, + { PMDA_PMID(CLUSTER_TMPFS,6), PM_TYPE_U32, TMPFS_INDOM, PM_SEM_INSTANT, + PMDA_PMUNITS(0,0,0,0,0,0) } }, + +/* tmpfs.full */ + { NULL, + { PMDA_PMID(CLUSTER_TMPFS,7), PM_TYPE_DOUBLE, TMPFS_INDOM, PM_SEM_INSTANT, + PMDA_PMUNITS(0,0,0,0,0,0) } }, + +/* + * swapdev cluster + */ + +/* swapdev.free */ + { NULL, + { PMDA_PMID(CLUSTER_SWAPDEV,0), PM_TYPE_U32, SWAPDEV_INDOM, PM_SEM_INSTANT, + PMDA_PMUNITS(1,0,0,PM_SPACE_KBYTE,0,0) } }, + +/* swapdev.length */ + { NULL, + { PMDA_PMID(CLUSTER_SWAPDEV,1), PM_TYPE_U32, SWAPDEV_INDOM, PM_SEM_DISCRETE, + PMDA_PMUNITS(1,0,0,PM_SPACE_KBYTE,0,0) } }, + +/* swapdev.maxswap */ + { NULL, + { PMDA_PMID(CLUSTER_SWAPDEV,2), PM_TYPE_U32, SWAPDEV_INDOM, PM_SEM_DISCRETE, + PMDA_PMUNITS(1,0,0,PM_SPACE_KBYTE,0,0) } }, + +/* swapdev.vlength */ + { NULL, + { PMDA_PMID(CLUSTER_SWAPDEV,3), PM_TYPE_U32, SWAPDEV_INDOM, PM_SEM_DISCRETE, + PMDA_PMUNITS(1,0,0,PM_SPACE_KBYTE,0,0) } }, + +/* swapdev.priority */ + { NULL, + { PMDA_PMID(CLUSTER_SWAPDEV,4), PM_TYPE_32, SWAPDEV_INDOM, PM_SEM_INSTANT, + PMDA_PMUNITS(0,0,1,0,0,PM_COUNT_ONE) } }, + +/* + * socket stat cluster + */ + +/* network.sockstat.tcp.inuse */ + { &proc_net_sockstat.tcp[_PM_SOCKSTAT_INUSE], + { PMDA_PMID(CLUSTER_NET_SOCKSTAT,0), PM_TYPE_32, PM_INDOM_NULL, PM_SEM_INSTANT, + PMDA_PMUNITS(0,0,1,0,0,PM_COUNT_ONE) } }, + +/* network.sockstat.tcp.highest */ + { &proc_net_sockstat.tcp[_PM_SOCKSTAT_HIGHEST], + { PMDA_PMID(CLUSTER_NET_SOCKSTAT,1), PM_TYPE_32, PM_INDOM_NULL, PM_SEM_INSTANT, + PMDA_PMUNITS(0,0,1,0,0,PM_COUNT_ONE) } }, + +/* network.sockstat.tcp.util */ + { &proc_net_sockstat.tcp[_PM_SOCKSTAT_UTIL], + { PMDA_PMID(CLUSTER_NET_SOCKSTAT,2), PM_TYPE_32, PM_INDOM_NULL, PM_SEM_INSTANT, + PMDA_PMUNITS(0,0,0,0,0,0) } }, + +/* network.sockstat.udp.inuse */ + { &proc_net_sockstat.udp[_PM_SOCKSTAT_INUSE], + { PMDA_PMID(CLUSTER_NET_SOCKSTAT,3), PM_TYPE_32, PM_INDOM_NULL, PM_SEM_INSTANT, + PMDA_PMUNITS(0,0,1,0,0,PM_COUNT_ONE) } }, + +/* network.sockstat.udp.highest */ + { &proc_net_sockstat.udp[_PM_SOCKSTAT_HIGHEST], + { PMDA_PMID(CLUSTER_NET_SOCKSTAT,4), PM_TYPE_32, PM_INDOM_NULL, PM_SEM_INSTANT, + PMDA_PMUNITS(0,0,1,0,0,PM_COUNT_ONE) } }, + +/* network.sockstat.udp.util */ + { &proc_net_sockstat.udp[_PM_SOCKSTAT_UTIL], + { PMDA_PMID(CLUSTER_NET_SOCKSTAT,5), PM_TYPE_32, PM_INDOM_NULL, PM_SEM_INSTANT, + PMDA_PMUNITS(0,0,0,0,0,0) } }, + +/* network.sockstat.raw.inuse */ + { &proc_net_sockstat.raw[_PM_SOCKSTAT_INUSE], + { PMDA_PMID(CLUSTER_NET_SOCKSTAT,6), PM_TYPE_32, PM_INDOM_NULL, PM_SEM_INSTANT, + PMDA_PMUNITS(0,0,1,0,0,PM_COUNT_ONE) } }, + +/* network.sockstat.raw.highest */ + { &proc_net_sockstat.raw[_PM_SOCKSTAT_HIGHEST], + { PMDA_PMID(CLUSTER_NET_SOCKSTAT,7), PM_TYPE_32, PM_INDOM_NULL, PM_SEM_INSTANT, + PMDA_PMUNITS(0,0,1,0,0,PM_COUNT_ONE) } }, + +/* network.sockstat.raw.util */ + { &proc_net_sockstat.raw[_PM_SOCKSTAT_UTIL], + { PMDA_PMID(CLUSTER_NET_SOCKSTAT,8), PM_TYPE_32, PM_INDOM_NULL, PM_SEM_INSTANT, + PMDA_PMUNITS(0,0,0,0,0,0) } }, + +/* + * nfs cluster + */ + +/* nfs.client.calls */ + { NULL, + { PMDA_PMID(CLUSTER_NET_NFS,1), PM_TYPE_U32, PM_INDOM_NULL, PM_SEM_COUNTER, + PMDA_PMUNITS(0,0,1,0,0,PM_COUNT_ONE) } }, + +/* nfs.client.reqs */ + { NULL, + { PMDA_PMID(CLUSTER_NET_NFS,4), PM_TYPE_U32, NFS_INDOM, PM_SEM_COUNTER, + PMDA_PMUNITS(0,0,1,0,0,PM_COUNT_ONE) } }, + +/* nfs.server.calls */ + { NULL, + { PMDA_PMID(CLUSTER_NET_NFS,50), PM_TYPE_U32, PM_INDOM_NULL, PM_SEM_COUNTER, + PMDA_PMUNITS(0,0,1,0,0,PM_COUNT_ONE) } }, + +/* nfs.server.reqs */ + { NULL, + { PMDA_PMID(CLUSTER_NET_NFS,12), PM_TYPE_U32, NFS_INDOM, PM_SEM_COUNTER, + PMDA_PMUNITS(0,0,1,0,0,PM_COUNT_ONE) } }, + +/* nfs3.client.calls */ + { NULL, + { PMDA_PMID(CLUSTER_NET_NFS,60), PM_TYPE_U32, PM_INDOM_NULL, PM_SEM_COUNTER, + PMDA_PMUNITS(0,0,1,0,0,PM_COUNT_ONE) } }, + +/* nfs3.client.reqs */ + { NULL, + { PMDA_PMID(CLUSTER_NET_NFS,61), PM_TYPE_U32, NFS3_INDOM, PM_SEM_COUNTER, + PMDA_PMUNITS(0,0,1,0,0,PM_COUNT_ONE) } }, + +/* nfs3.server.calls */ + { NULL, + { PMDA_PMID(CLUSTER_NET_NFS,62), PM_TYPE_U32, PM_INDOM_NULL, PM_SEM_COUNTER, + PMDA_PMUNITS(0,0,1,0,0,PM_COUNT_ONE) } }, + +/* nfs3.server.reqs */ + { NULL, + { PMDA_PMID(CLUSTER_NET_NFS,63), PM_TYPE_U32, NFS3_INDOM, PM_SEM_COUNTER, + PMDA_PMUNITS(0,0,1,0,0,PM_COUNT_ONE) } }, + +/* nfs4.client.calls */ + { NULL, + { PMDA_PMID(CLUSTER_NET_NFS,64), PM_TYPE_U32, PM_INDOM_NULL, PM_SEM_COUNTER, + PMDA_PMUNITS(0,0,1,0,0,PM_COUNT_ONE) } }, + +/* nfs4.client.reqs */ + { NULL, + { PMDA_PMID(CLUSTER_NET_NFS,65), PM_TYPE_U32, NFS4_CLI_INDOM, PM_SEM_COUNTER, + PMDA_PMUNITS(0,0,1,0,0,PM_COUNT_ONE) } }, + +/* nfs4.server.calls */ + { NULL, + { PMDA_PMID(CLUSTER_NET_NFS,66), PM_TYPE_U32, PM_INDOM_NULL, PM_SEM_COUNTER, + PMDA_PMUNITS(0,0,1,0,0,PM_COUNT_ONE) } }, + +/* nfs4.server.reqs */ + { NULL, + { PMDA_PMID(CLUSTER_NET_NFS,67), PM_TYPE_U32, NFS4_SVR_INDOM, PM_SEM_COUNTER, + PMDA_PMUNITS(0,0,1,0,0,PM_COUNT_ONE) } }, + +/* rpc.client.rpccnt */ + { &proc_net_rpc.client.rpccnt, + { PMDA_PMID(CLUSTER_NET_NFS,20), PM_TYPE_U32, PM_INDOM_NULL, PM_SEM_COUNTER, + PMDA_PMUNITS(0,0,1,0,0,PM_COUNT_ONE) } }, + +/* rpc.client.rpcretrans */ + { &proc_net_rpc.client.rpcretrans, + { PMDA_PMID(CLUSTER_NET_NFS,21), PM_TYPE_U32, PM_INDOM_NULL, PM_SEM_COUNTER, + PMDA_PMUNITS(0,0,1,0,0,PM_COUNT_ONE) } }, + +/* rpc.client.rpcauthrefresh */ + { &proc_net_rpc.client.rpcauthrefresh, + { PMDA_PMID(CLUSTER_NET_NFS,22), PM_TYPE_U32, PM_INDOM_NULL, PM_SEM_COUNTER, + PMDA_PMUNITS(0,0,1,0,0,PM_COUNT_ONE) } }, + +/* rpc.client.netcnt */ + { &proc_net_rpc.client.netcnt, + { PMDA_PMID(CLUSTER_NET_NFS,24), PM_TYPE_U32, PM_INDOM_NULL, PM_SEM_COUNTER, + PMDA_PMUNITS(0,0,1,0,0,PM_COUNT_ONE) } }, + +/* rpc.client.netudpcnt */ + { &proc_net_rpc.client.netudpcnt, + { PMDA_PMID(CLUSTER_NET_NFS,25), PM_TYPE_U32, PM_INDOM_NULL, PM_SEM_COUNTER, + PMDA_PMUNITS(0,0,1,0,0,PM_COUNT_ONE) } }, + +/* rpc.client.nettcpcnt */ + { &proc_net_rpc.client.nettcpcnt, + { PMDA_PMID(CLUSTER_NET_NFS,26), PM_TYPE_U32, PM_INDOM_NULL, PM_SEM_COUNTER, + PMDA_PMUNITS(0,0,1,0,0,PM_COUNT_ONE) } }, + +/* rpc.client.nettcpconn */ + { &proc_net_rpc.client.nettcpconn, + { PMDA_PMID(CLUSTER_NET_NFS,27), PM_TYPE_U32, PM_INDOM_NULL, PM_SEM_COUNTER, + PMDA_PMUNITS(0,0,1,0,0,PM_COUNT_ONE) } }, + +/* rpc.server.rpccnt */ + { &proc_net_rpc.server.rpccnt, + { PMDA_PMID(CLUSTER_NET_NFS,30), PM_TYPE_U32, PM_INDOM_NULL, PM_SEM_COUNTER, + PMDA_PMUNITS(0,0,1,0,0,PM_COUNT_ONE) } }, + +/* rpc.server.rpcerr */ + { &proc_net_rpc.server.rpcerr, + { PMDA_PMID(CLUSTER_NET_NFS,31), PM_TYPE_U32, PM_INDOM_NULL, PM_SEM_COUNTER, + PMDA_PMUNITS(0,0,1,0,0,PM_COUNT_ONE) } }, + +/* rpc.server.rpcbadfmt */ + { &proc_net_rpc.server.rpcbadfmt, + { PMDA_PMID(CLUSTER_NET_NFS,32), PM_TYPE_U32, PM_INDOM_NULL, PM_SEM_COUNTER, + PMDA_PMUNITS(0,0,1,0,0,PM_COUNT_ONE) } }, + +/* rpc.server.rpcbadauth */ + { &proc_net_rpc.server.rpcbadauth, + { PMDA_PMID(CLUSTER_NET_NFS,33), PM_TYPE_U32, PM_INDOM_NULL, PM_SEM_COUNTER, + PMDA_PMUNITS(0,0,1,0,0,PM_COUNT_ONE) } }, + +/* rpc.server.rpcbadclnt */ + { &proc_net_rpc.server.rpcbadclnt, + { PMDA_PMID(CLUSTER_NET_NFS,34), PM_TYPE_U32, PM_INDOM_NULL, PM_SEM_COUNTER, + PMDA_PMUNITS(0,0,1,0,0,PM_COUNT_ONE) } }, + +/* rpc.server.rchits */ + { &proc_net_rpc.server.rchits, + { PMDA_PMID(CLUSTER_NET_NFS,35), PM_TYPE_U32, PM_INDOM_NULL, PM_SEM_COUNTER, + PMDA_PMUNITS(0,0,1,0,0,PM_COUNT_ONE) } }, + +/* rpc.server.rcmisses */ + { &proc_net_rpc.server.rcmisses, + { PMDA_PMID(CLUSTER_NET_NFS,36), PM_TYPE_U32, PM_INDOM_NULL, PM_SEM_COUNTER, + PMDA_PMUNITS(0,0,1,0,0,PM_COUNT_ONE) } }, + +/* rpc.server.rcnocache */ + { &proc_net_rpc.server.rcnocache, + { PMDA_PMID(CLUSTER_NET_NFS,37), PM_TYPE_U32, PM_INDOM_NULL, PM_SEM_COUNTER, + PMDA_PMUNITS(0,0,1,0,0,PM_COUNT_ONE) } }, + +/* rpc.server.fh_cached */ + { &proc_net_rpc.server.fh_cached, + { PMDA_PMID(CLUSTER_NET_NFS,38), PM_TYPE_U32, PM_INDOM_NULL, PM_SEM_COUNTER, + PMDA_PMUNITS(0,0,1,0,0,PM_COUNT_ONE) } }, + +/* rpc.server.fh_valid */ + { &proc_net_rpc.server.fh_valid, + { PMDA_PMID(CLUSTER_NET_NFS,39), PM_TYPE_U32, PM_INDOM_NULL, PM_SEM_COUNTER, + PMDA_PMUNITS(0,0,1,0,0,PM_COUNT_ONE) } }, + +/* rpc.server.fh_fixup */ + { &proc_net_rpc.server.fh_fixup, + { PMDA_PMID(CLUSTER_NET_NFS,40), PM_TYPE_U32, PM_INDOM_NULL, PM_SEM_COUNTER, + PMDA_PMUNITS(0,0,1,0,0,PM_COUNT_ONE) } }, + +/* rpc.server.fh_lookup */ + { &proc_net_rpc.server.fh_lookup, + { PMDA_PMID(CLUSTER_NET_NFS,41), PM_TYPE_U32, PM_INDOM_NULL, PM_SEM_COUNTER, + PMDA_PMUNITS(0,0,1,0,0,PM_COUNT_ONE) } }, + +/* rpc.server.fh_stale */ + { &proc_net_rpc.server.fh_stale, + { PMDA_PMID(CLUSTER_NET_NFS,42), PM_TYPE_U32, PM_INDOM_NULL, PM_SEM_COUNTER, + PMDA_PMUNITS(0,0,1,0,0,PM_COUNT_ONE) } }, + +/* rpc.server.fh_concurrent */ + { &proc_net_rpc.server.fh_concurrent, + { PMDA_PMID(CLUSTER_NET_NFS,43), PM_TYPE_U32, PM_INDOM_NULL, PM_SEM_COUNTER, + PMDA_PMUNITS(0,0,1,0,0,PM_COUNT_ONE) } }, + +/* rpc.server.netcnt */ + { &proc_net_rpc.server.netcnt, + { PMDA_PMID(CLUSTER_NET_NFS,44), PM_TYPE_U32, PM_INDOM_NULL, PM_SEM_COUNTER, + PMDA_PMUNITS(0,0,1,0,0,PM_COUNT_ONE) } }, + +/* rpc.server.netudpcnt */ + { &proc_net_rpc.server.netudpcnt, + { PMDA_PMID(CLUSTER_NET_NFS,45), PM_TYPE_U32, PM_INDOM_NULL, PM_SEM_COUNTER, + PMDA_PMUNITS(0,0,1,0,0,PM_COUNT_ONE) } }, + +/* rpc.server.nettcpcnt */ + { &proc_net_rpc.server.nettcpcnt, + { PMDA_PMID(CLUSTER_NET_NFS,46), PM_TYPE_U32, PM_INDOM_NULL, PM_SEM_COUNTER, + PMDA_PMUNITS(0,0,1,0,0,PM_COUNT_ONE) } }, + +/* rpc.server.nettcpconn */ + { &proc_net_rpc.server.nettcpcnt, + { PMDA_PMID(CLUSTER_NET_NFS,47), PM_TYPE_U32, PM_INDOM_NULL, PM_SEM_COUNTER, + PMDA_PMUNITS(0,0,1,0,0,PM_COUNT_ONE) } }, + +/* rpc.server.fh_anon */ + { &proc_net_rpc.server.fh_anon, + { PMDA_PMID(CLUSTER_NET_NFS,51), PM_TYPE_U32, PM_INDOM_NULL, PM_SEM_COUNTER, + PMDA_PMUNITS(0,0,1,0,0,PM_COUNT_ONE) } }, + +/* rpc.server.fh_nocache_dir */ + { &proc_net_rpc.server.fh_nocache_dir, + { PMDA_PMID(CLUSTER_NET_NFS,52), PM_TYPE_U32, PM_INDOM_NULL, PM_SEM_COUNTER, + PMDA_PMUNITS(0,0,1,0,0,PM_COUNT_ONE) } }, + +/* rpc.server.fh_nocache_nondir */ + { &proc_net_rpc.server.fh_nocache_nondir, + { PMDA_PMID(CLUSTER_NET_NFS,53), PM_TYPE_U32, PM_INDOM_NULL, PM_SEM_COUNTER, + PMDA_PMUNITS(0,0,1,0,0,PM_COUNT_ONE) } }, + +/* rpc.server.io_read */ + { &proc_net_rpc.server.io_read, + { PMDA_PMID(CLUSTER_NET_NFS,54), PM_TYPE_U32, PM_INDOM_NULL, PM_SEM_COUNTER, + PMDA_PMUNITS(1,0,0,PM_SPACE_BYTE,0,0) } }, + +/* rpc.server.io_write */ + { &proc_net_rpc.server.io_write, + { PMDA_PMID(CLUSTER_NET_NFS,55), PM_TYPE_U32, PM_INDOM_NULL, PM_SEM_COUNTER, + PMDA_PMUNITS(1,0,0,PM_SPACE_BYTE,0,0) } }, + +/* rpc.server.th_cnt */ + { &proc_net_rpc.server.th_cnt, + { PMDA_PMID(CLUSTER_NET_NFS,56), PM_TYPE_U32, PM_INDOM_NULL, PM_SEM_INSTANT, + PMDA_PMUNITS(0,0,1,0,0,PM_COUNT_ONE) } }, + +/* rpc.server.th_fullcnt */ + { &proc_net_rpc.server.th_fullcnt, + { PMDA_PMID(CLUSTER_NET_NFS,57), PM_TYPE_U32, PM_INDOM_NULL, PM_SEM_COUNTER, + PMDA_PMUNITS(0,0,1,0,0,PM_COUNT_ONE) } }, + +/* + * /proc/partitions cluster + */ + +/* disk.partitions.read */ + { NULL, + { PMDA_PMID(CLUSTER_PARTITIONS,0), PM_TYPE_U32, PARTITIONS_INDOM, PM_SEM_COUNTER, + PMDA_PMUNITS(0,0,1,0,0,PM_COUNT_ONE) }, }, + +/* disk.partitions.write */ + { NULL, + { PMDA_PMID(CLUSTER_PARTITIONS,1), PM_TYPE_U32, PARTITIONS_INDOM, PM_SEM_COUNTER, + PMDA_PMUNITS(0,0,1,0,0,PM_COUNT_ONE) }, }, + +/* disk.partitions.total */ + { NULL, + { PMDA_PMID(CLUSTER_PARTITIONS,2), PM_TYPE_U32, PARTITIONS_INDOM, PM_SEM_COUNTER, + PMDA_PMUNITS(0,0,1,0,0,PM_COUNT_ONE) }, }, + +/* disk.partitions.blkread */ + { NULL, + { PMDA_PMID(CLUSTER_PARTITIONS,3), PM_TYPE_U32, PARTITIONS_INDOM, PM_SEM_COUNTER, + PMDA_PMUNITS(0,0,1,0,0,PM_COUNT_ONE) }, }, + +/* disk.partitions.blkwrite */ + { NULL, + { PMDA_PMID(CLUSTER_PARTITIONS,4), PM_TYPE_U32, PARTITIONS_INDOM, PM_SEM_COUNTER, + PMDA_PMUNITS(0,0,1,0,0,PM_COUNT_ONE) }, }, + +/* disk.partitions.blktotal */ + { NULL, + { PMDA_PMID(CLUSTER_PARTITIONS,5), PM_TYPE_U32, PARTITIONS_INDOM, PM_SEM_COUNTER, + PMDA_PMUNITS(0,0,1,0,0,PM_COUNT_ONE) }, }, + +/* disk.partitions.read_bytes */ + { NULL, + { PMDA_PMID(CLUSTER_PARTITIONS,6), PM_TYPE_U32, PARTITIONS_INDOM, PM_SEM_COUNTER, + PMDA_PMUNITS(1,0,0,PM_SPACE_KBYTE,0,0) }, }, + +/* disk.partitions.write_bytes */ + { NULL, + { PMDA_PMID(CLUSTER_PARTITIONS,7), PM_TYPE_U32, PARTITIONS_INDOM, PM_SEM_COUNTER, + PMDA_PMUNITS(1,0,0,PM_SPACE_KBYTE,0,0) }, }, + +/* disk.partitions.total_bytes */ + { NULL, + { PMDA_PMID(CLUSTER_PARTITIONS,8), PM_TYPE_U32, PARTITIONS_INDOM, PM_SEM_COUNTER, + PMDA_PMUNITS(1,0,0,PM_SPACE_KBYTE,0,0) }, }, + + +/* disk.dev.read_bytes */ + { NULL, + { PMDA_PMID(CLUSTER_STAT,38), PM_TYPE_U32, DISK_INDOM, PM_SEM_COUNTER, + PMDA_PMUNITS(1,0,0,PM_SPACE_KBYTE,0,0) }, }, + +/* disk.dev.write_bytes */ + { NULL, + { PMDA_PMID(CLUSTER_STAT,39), PM_TYPE_U32, DISK_INDOM, PM_SEM_COUNTER, + PMDA_PMUNITS(1,0,0,PM_SPACE_KBYTE,0,0) }, }, + +/* disk.dev.total_bytes */ + { NULL, + { PMDA_PMID(CLUSTER_STAT,40), PM_TYPE_U32, DISK_INDOM, PM_SEM_COUNTER, + PMDA_PMUNITS(1,0,0,PM_SPACE_KBYTE,0,0) }, }, + +/* disk.all.read_bytes */ + { NULL, + { PMDA_PMID(CLUSTER_STAT,41), PM_TYPE_U32, PM_INDOM_NULL, PM_SEM_COUNTER, + PMDA_PMUNITS(1,0,0,PM_SPACE_KBYTE,0,0) }, }, + +/* disk.all.write_bytes */ + { NULL, + { PMDA_PMID(CLUSTER_STAT,42), PM_TYPE_U32, PM_INDOM_NULL, PM_SEM_COUNTER, + PMDA_PMUNITS(1,0,0,PM_SPACE_KBYTE,0,0) }, }, + +/* disk.all.total_bytes */ + { NULL, + { PMDA_PMID(CLUSTER_STAT,43), PM_TYPE_U32, PM_INDOM_NULL, PM_SEM_COUNTER, + PMDA_PMUNITS(1,0,0,PM_SPACE_KBYTE,0,0) }, }, + +/* + * kernel_uname cluster + */ + +/* kernel.uname.release */ + { kernel_uname.release, + { PMDA_PMID(CLUSTER_KERNEL_UNAME, 0), PM_TYPE_STRING, PM_INDOM_NULL, PM_SEM_INSTANT, + PMDA_PMUNITS(0,0,0,0,0,0) } }, + +/* kernel.uname.version */ + { kernel_uname.version, + { PMDA_PMID(CLUSTER_KERNEL_UNAME, 1), PM_TYPE_STRING, PM_INDOM_NULL, PM_SEM_INSTANT, + PMDA_PMUNITS(0,0,0,0,0,0) } }, + +/* kernel.uname.sysname */ + { kernel_uname.sysname, + { PMDA_PMID(CLUSTER_KERNEL_UNAME, 2), PM_TYPE_STRING, PM_INDOM_NULL, PM_SEM_INSTANT, + PMDA_PMUNITS(0,0,0,0,0,0) } }, + +/* kernel.uname.machine */ + { kernel_uname.machine, + { PMDA_PMID(CLUSTER_KERNEL_UNAME, 3), PM_TYPE_STRING, PM_INDOM_NULL, PM_SEM_DISCRETE, + PMDA_PMUNITS(0,0,0,0,0,0) } }, + +/* kernel.uname.nodename */ + { kernel_uname.nodename, + { PMDA_PMID(CLUSTER_KERNEL_UNAME, 4), PM_TYPE_STRING, PM_INDOM_NULL, PM_SEM_INSTANT, + PMDA_PMUNITS(0,0,0,0,0,0) } }, + +/* pmda.uname */ + { NULL, + { PMDA_PMID(CLUSTER_KERNEL_UNAME, 5), PM_TYPE_STRING, PM_INDOM_NULL, PM_SEM_INSTANT, + PMDA_PMUNITS(0,0,0,0,0,0) } }, + +/* pmda.version */ + { NULL, + { PMDA_PMID(CLUSTER_KERNEL_UNAME, 6), PM_TYPE_STRING, PM_INDOM_NULL, PM_SEM_INSTANT, + PMDA_PMUNITS(0,0,0,0,0,0) } }, + +/* kernel.uname.distro */ + { NULL, + { PMDA_PMID(CLUSTER_KERNEL_UNAME, 7), PM_TYPE_STRING, PM_INDOM_NULL, PM_SEM_INSTANT, + PMDA_PMUNITS(0,0,0,0,0,0) } }, + +/* + * network snmp cluster + */ + +/* network.ip.forwarding */ + { &_pm_proc_net_snmp.ip[_PM_SNMP_IP_FORWARDING], + { PMDA_PMID(CLUSTER_NET_SNMP,0), PM_TYPE_U64, PM_INDOM_NULL, PM_SEM_COUNTER, + PMDA_PMUNITS(0,0,1,0,0,PM_COUNT_ONE) } }, + +/* network.ip.defaultttl */ + { &_pm_proc_net_snmp.ip[_PM_SNMP_IP_DEFAULTTTL], + { PMDA_PMID(CLUSTER_NET_SNMP,1), PM_TYPE_U64, PM_INDOM_NULL, PM_SEM_COUNTER, + PMDA_PMUNITS(0,0,1,0,0,PM_COUNT_ONE) } }, + +/* network.ip.inreceives */ + { &_pm_proc_net_snmp.ip[_PM_SNMP_IP_INRECEIVES], + { PMDA_PMID(CLUSTER_NET_SNMP,2), PM_TYPE_U64, PM_INDOM_NULL, PM_SEM_COUNTER, + PMDA_PMUNITS(0,0,1,0,0,PM_COUNT_ONE) } }, + +/* network.ip.inhdrerrors */ + { &_pm_proc_net_snmp.ip[_PM_SNMP_IP_INHDRERRORS], + { PMDA_PMID(CLUSTER_NET_SNMP,3), PM_TYPE_U64, PM_INDOM_NULL, PM_SEM_COUNTER, + PMDA_PMUNITS(0,0,1,0,0,PM_COUNT_ONE) } }, + +/* network.ip.inaddrerrors */ + { &_pm_proc_net_snmp.ip[_PM_SNMP_IP_INADDRERRORS], + { PMDA_PMID(CLUSTER_NET_SNMP,4), PM_TYPE_U64, PM_INDOM_NULL, PM_SEM_COUNTER, + PMDA_PMUNITS(0,0,1,0,0,PM_COUNT_ONE) } }, + +/* network.ip.forwdatagrams */ + { &_pm_proc_net_snmp.ip[_PM_SNMP_IP_FORWDATAGRAMS], + { PMDA_PMID(CLUSTER_NET_SNMP,5), PM_TYPE_U64, PM_INDOM_NULL, PM_SEM_COUNTER, + PMDA_PMUNITS(0,0,1,0,0,PM_COUNT_ONE) } }, + +/* network.ip.inunknownprotos */ + { &_pm_proc_net_snmp.ip[_PM_SNMP_IP_INUNKNOWNPROTOS], + { PMDA_PMID(CLUSTER_NET_SNMP,6), PM_TYPE_U64, PM_INDOM_NULL, PM_SEM_COUNTER, + PMDA_PMUNITS(0,0,1,0,0,PM_COUNT_ONE) } }, + +/* network.ip.indiscards */ + { &_pm_proc_net_snmp.ip[_PM_SNMP_IP_INDISCARDS], + { PMDA_PMID(CLUSTER_NET_SNMP,7), PM_TYPE_U64, PM_INDOM_NULL, PM_SEM_COUNTER, + PMDA_PMUNITS(0,0,1,0,0,PM_COUNT_ONE) } }, + +/* network.ip.indelivers */ + { &_pm_proc_net_snmp.ip[_PM_SNMP_IP_INDELIVERS], + { PMDA_PMID(CLUSTER_NET_SNMP,8), PM_TYPE_U64, PM_INDOM_NULL, PM_SEM_COUNTER, + PMDA_PMUNITS(0,0,1,0,0,PM_COUNT_ONE) } }, + +/* network.ip.outrequests */ + { &_pm_proc_net_snmp.ip[_PM_SNMP_IP_OUTREQUESTS], + { PMDA_PMID(CLUSTER_NET_SNMP,9), PM_TYPE_U64, PM_INDOM_NULL, PM_SEM_COUNTER, + PMDA_PMUNITS(0,0,1,0,0,PM_COUNT_ONE) } }, + +/* network.ip.outdiscards */ + { &_pm_proc_net_snmp.ip[_PM_SNMP_IP_OUTDISCARDS], + { PMDA_PMID(CLUSTER_NET_SNMP,10), PM_TYPE_U64, PM_INDOM_NULL, PM_SEM_COUNTER, + PMDA_PMUNITS(0,0,1,0,0,PM_COUNT_ONE) } }, + +/* network.ip.outnoroutes */ + { &_pm_proc_net_snmp.ip[_PM_SNMP_IP_OUTNOROUTES], + { PMDA_PMID(CLUSTER_NET_SNMP,11), PM_TYPE_U64, PM_INDOM_NULL, PM_SEM_COUNTER, + PMDA_PMUNITS(0,0,1,0,0,PM_COUNT_ONE) } }, + +/* network.ip.reasmtimeout */ + { &_pm_proc_net_snmp.ip[_PM_SNMP_IP_REASMTIMEOUT], + { PMDA_PMID(CLUSTER_NET_SNMP,12), PM_TYPE_U64, PM_INDOM_NULL, PM_SEM_COUNTER, + PMDA_PMUNITS(0,0,1,0,0,PM_COUNT_ONE) } }, + +/* network.ip.reasmreqds */ + { &_pm_proc_net_snmp.ip[_PM_SNMP_IP_REASMREQDS], + { PMDA_PMID(CLUSTER_NET_SNMP,13), PM_TYPE_U64, PM_INDOM_NULL, PM_SEM_COUNTER, + PMDA_PMUNITS(0,0,1,0,0,PM_COUNT_ONE) } }, + +/* network.ip.reasmoks */ + { &_pm_proc_net_snmp.ip[_PM_SNMP_IP_REASMOKS], + { PMDA_PMID(CLUSTER_NET_SNMP,14), PM_TYPE_U64, PM_INDOM_NULL, PM_SEM_COUNTER, + PMDA_PMUNITS(0,0,1,0,0,PM_COUNT_ONE) } }, + +/* network.ip.reasmfails */ + { &_pm_proc_net_snmp.ip[_PM_SNMP_IP_REASMFAILS], + { PMDA_PMID(CLUSTER_NET_SNMP,15), PM_TYPE_U64, PM_INDOM_NULL, PM_SEM_COUNTER, + PMDA_PMUNITS(0,0,1,0,0,PM_COUNT_ONE) } }, + +/* network.ip.fragoks */ + { &_pm_proc_net_snmp.ip[_PM_SNMP_IP_FRAGOKS], + { PMDA_PMID(CLUSTER_NET_SNMP,16), PM_TYPE_U64, PM_INDOM_NULL, PM_SEM_COUNTER, + PMDA_PMUNITS(0,0,1,0,0,PM_COUNT_ONE) } }, + +/* network.ip.fragfails */ + { &_pm_proc_net_snmp.ip[_PM_SNMP_IP_FRAGFAILS], + { PMDA_PMID(CLUSTER_NET_SNMP,17), PM_TYPE_U64, PM_INDOM_NULL, PM_SEM_COUNTER, + PMDA_PMUNITS(0,0,1,0,0,PM_COUNT_ONE) } }, + +/* network.ip.fragcreates */ + { &_pm_proc_net_snmp.ip[_PM_SNMP_IP_FRAGCREATES], + { PMDA_PMID(CLUSTER_NET_SNMP,18), PM_TYPE_U64, PM_INDOM_NULL, PM_SEM_COUNTER, + PMDA_PMUNITS(0,0,1,0,0,PM_COUNT_ONE) } }, + + +/* network.icmp.inmsgs */ + { &_pm_proc_net_snmp.icmp[_PM_SNMP_ICMP_INMSGS], + { PMDA_PMID(CLUSTER_NET_SNMP,20), PM_TYPE_U64, PM_INDOM_NULL, PM_SEM_COUNTER, + PMDA_PMUNITS(0,0,1,0,0,PM_COUNT_ONE) } }, + +/* network.icmp.inerrors */ + { &_pm_proc_net_snmp.icmp[_PM_SNMP_ICMP_INERRORS], + { PMDA_PMID(CLUSTER_NET_SNMP,21), PM_TYPE_U64, PM_INDOM_NULL, PM_SEM_COUNTER, + PMDA_PMUNITS(0,0,1,0,0,PM_COUNT_ONE) } }, + +/* network.icmp.indestunreachs */ + { &_pm_proc_net_snmp.icmp[_PM_SNMP_ICMP_INDESTUNREACHS], + { PMDA_PMID(CLUSTER_NET_SNMP,22), PM_TYPE_U64, PM_INDOM_NULL, PM_SEM_COUNTER, + PMDA_PMUNITS(0,0,1,0,0,PM_COUNT_ONE) } }, + +/* network.icmp.intimeexcds */ + { &_pm_proc_net_snmp.icmp[_PM_SNMP_ICMP_INTIMEEXCDS], + { PMDA_PMID(CLUSTER_NET_SNMP,23), PM_TYPE_U64, PM_INDOM_NULL, PM_SEM_COUNTER, + PMDA_PMUNITS(0,0,1,0,0,PM_COUNT_ONE) } }, + +/* network.icmp.inparmprobs */ + { &_pm_proc_net_snmp.icmp[_PM_SNMP_ICMP_INPARMPROBS], + { PMDA_PMID(CLUSTER_NET_SNMP,24), PM_TYPE_U64, PM_INDOM_NULL, PM_SEM_COUNTER, + PMDA_PMUNITS(0,0,1,0,0,PM_COUNT_ONE) } }, + +/* network.icmp.insrcquenchs */ + { &_pm_proc_net_snmp.icmp[_PM_SNMP_ICMP_INSRCQUENCHS], + { PMDA_PMID(CLUSTER_NET_SNMP,25), PM_TYPE_U64, PM_INDOM_NULL, PM_SEM_COUNTER, + PMDA_PMUNITS(0,0,1,0,0,PM_COUNT_ONE) } }, + +/* network.icmp.inredirects */ + { &_pm_proc_net_snmp.icmp[_PM_SNMP_ICMP_INREDIRECTS], + { PMDA_PMID(CLUSTER_NET_SNMP,26), PM_TYPE_U64, PM_INDOM_NULL, PM_SEM_COUNTER, + PMDA_PMUNITS(0,0,1,0,0,PM_COUNT_ONE) } }, + +/* network.icmp.inechos */ + { &_pm_proc_net_snmp.icmp[_PM_SNMP_ICMP_INECHOS], + { PMDA_PMID(CLUSTER_NET_SNMP,27), PM_TYPE_U64, PM_INDOM_NULL, PM_SEM_COUNTER, + PMDA_PMUNITS(0,0,1,0,0,PM_COUNT_ONE) } }, + +/* network.icmp.inechoreps */ + { &_pm_proc_net_snmp.icmp[_PM_SNMP_ICMP_INECHOREPS], + { PMDA_PMID(CLUSTER_NET_SNMP,28), PM_TYPE_U64, PM_INDOM_NULL, PM_SEM_COUNTER, + PMDA_PMUNITS(0,0,1,0,0,PM_COUNT_ONE) } }, + +/* network.icmp.intimestamps */ + { &_pm_proc_net_snmp.icmp[_PM_SNMP_ICMP_INTIMESTAMPS], + { PMDA_PMID(CLUSTER_NET_SNMP,29), PM_TYPE_U64, PM_INDOM_NULL, PM_SEM_COUNTER, + PMDA_PMUNITS(0,0,1,0,0,PM_COUNT_ONE) } }, + +/* network.icmp.intimestampreps */ + { &_pm_proc_net_snmp.icmp[_PM_SNMP_ICMP_INTIMESTAMPREPS], + { PMDA_PMID(CLUSTER_NET_SNMP,30), PM_TYPE_U64, PM_INDOM_NULL, PM_SEM_COUNTER, + PMDA_PMUNITS(0,0,1,0,0,PM_COUNT_ONE) } }, + +/* network.icmp.inaddrmasks */ + { &_pm_proc_net_snmp.icmp[_PM_SNMP_ICMP_INADDRMASKS], + { PMDA_PMID(CLUSTER_NET_SNMP,31), PM_TYPE_U64, PM_INDOM_NULL, PM_SEM_COUNTER, + PMDA_PMUNITS(0,0,1,0,0,PM_COUNT_ONE) } }, + +/* network.icmp.inaddrmaskreps */ + { &_pm_proc_net_snmp.icmp[_PM_SNMP_ICMP_INADDRMASKREPS], + { PMDA_PMID(CLUSTER_NET_SNMP,32), PM_TYPE_U64, PM_INDOM_NULL, PM_SEM_COUNTER, + PMDA_PMUNITS(0,0,1,0,0,PM_COUNT_ONE) } }, + +/* network.icmp.outmsgs */ + { &_pm_proc_net_snmp.icmp[_PM_SNMP_ICMP_OUTMSGS], + { PMDA_PMID(CLUSTER_NET_SNMP,33), PM_TYPE_U64, PM_INDOM_NULL, PM_SEM_COUNTER, + PMDA_PMUNITS(0,0,1,0,0,PM_COUNT_ONE) } }, + +/* network.icmp.outerrors */ + { &_pm_proc_net_snmp.icmp[_PM_SNMP_ICMP_OUTERRORS], + { PMDA_PMID(CLUSTER_NET_SNMP,34), PM_TYPE_U64, PM_INDOM_NULL, PM_SEM_COUNTER, + PMDA_PMUNITS(0,0,1,0,0,PM_COUNT_ONE) } }, + +/* network.icmp.outdestunreachs */ + { &_pm_proc_net_snmp.icmp[_PM_SNMP_ICMP_OUTDESTUNREACHS], + { PMDA_PMID(CLUSTER_NET_SNMP,35), PM_TYPE_U64, PM_INDOM_NULL, PM_SEM_COUNTER, + PMDA_PMUNITS(0,0,1,0,0,PM_COUNT_ONE) } }, + +/* network.icmp.outtimeexcds */ + { &_pm_proc_net_snmp.icmp[_PM_SNMP_ICMP_OUTTIMEEXCDS], + { PMDA_PMID(CLUSTER_NET_SNMP,36), PM_TYPE_U64, PM_INDOM_NULL, PM_SEM_COUNTER, + PMDA_PMUNITS(0,0,1,0,0,PM_COUNT_ONE) } }, + +/* network.icmp.outparmprobs */ + { &_pm_proc_net_snmp.icmp[_PM_SNMP_ICMP_OUTPARMPROBS], + { PMDA_PMID(CLUSTER_NET_SNMP,37), PM_TYPE_U64, PM_INDOM_NULL, PM_SEM_COUNTER, + PMDA_PMUNITS(0,0,1,0,0,PM_COUNT_ONE) } }, + +/* network.icmp.outsrcquenchs */ + { &_pm_proc_net_snmp.icmp[_PM_SNMP_ICMP_OUTSRCQUENCHS], + { PMDA_PMID(CLUSTER_NET_SNMP,38), PM_TYPE_U64, PM_INDOM_NULL, PM_SEM_COUNTER, + PMDA_PMUNITS(0,0,1,0,0,PM_COUNT_ONE) } }, + +/* network.icmp.outredirects */ + { &_pm_proc_net_snmp.icmp[_PM_SNMP_ICMP_OUTREDIRECTS], + { PMDA_PMID(CLUSTER_NET_SNMP,39), PM_TYPE_U64, PM_INDOM_NULL, PM_SEM_COUNTER, + PMDA_PMUNITS(0,0,1,0,0,PM_COUNT_ONE) } }, + +/* network.icmp.outechos */ + { &_pm_proc_net_snmp.icmp[_PM_SNMP_ICMP_OUTECHOS], + { PMDA_PMID(CLUSTER_NET_SNMP,40), PM_TYPE_U64, PM_INDOM_NULL, PM_SEM_COUNTER, + PMDA_PMUNITS(0,0,1,0,0,PM_COUNT_ONE) } }, + +/* network.icmp.outechoreps */ + { &_pm_proc_net_snmp.icmp[_PM_SNMP_ICMP_OUTECHOREPS], + { PMDA_PMID(CLUSTER_NET_SNMP,41), PM_TYPE_U64, PM_INDOM_NULL, PM_SEM_COUNTER, + PMDA_PMUNITS(0,0,1,0,0,PM_COUNT_ONE) } }, + +/* network.icmp.outtimestamps */ + { &_pm_proc_net_snmp.icmp[_PM_SNMP_ICMP_OUTTIMESTAMPS], + { PMDA_PMID(CLUSTER_NET_SNMP,42), PM_TYPE_U64, PM_INDOM_NULL, PM_SEM_COUNTER, + PMDA_PMUNITS(0,0,1,0,0,PM_COUNT_ONE) } }, + +/* network.icmp.outtimestampreps */ + { &_pm_proc_net_snmp.icmp[_PM_SNMP_ICMP_OUTTIMESTAMPREPS], + { PMDA_PMID(CLUSTER_NET_SNMP,43), PM_TYPE_U64, PM_INDOM_NULL, PM_SEM_COUNTER, + PMDA_PMUNITS(0,0,1,0,0,PM_COUNT_ONE) } }, + +/* network.icmp.outaddrmasks */ + { &_pm_proc_net_snmp.icmp[_PM_SNMP_ICMP_OUTADDRMASKS], + { PMDA_PMID(CLUSTER_NET_SNMP,44), PM_TYPE_U64, PM_INDOM_NULL, PM_SEM_COUNTER, + PMDA_PMUNITS(0,0,1,0,0,PM_COUNT_ONE) } }, + +/* network.icmp.outaddrmaskreps */ + { &_pm_proc_net_snmp.icmp[_PM_SNMP_ICMP_OUTADDRMASKREPS], + { PMDA_PMID(CLUSTER_NET_SNMP,45), PM_TYPE_U64, PM_INDOM_NULL, PM_SEM_COUNTER, + PMDA_PMUNITS(0,0,1,0,0,PM_COUNT_ONE) } }, + +/* network.icmp.incsumerrors */ + { &_pm_proc_net_snmp.icmp[_PM_SNMP_ICMP_INCSUMERRORS], + { PMDA_PMID(CLUSTER_NET_SNMP,46), PM_TYPE_U64, PM_INDOM_NULL, PM_SEM_COUNTER, + PMDA_PMUNITS(0,0,1,0,0,PM_COUNT_ONE) } }, + + +/* network.tcp.rtoalgorithm */ + { &_pm_proc_net_snmp.tcp[_PM_SNMP_TCP_RTOALGORITHM], + { PMDA_PMID(CLUSTER_NET_SNMP,50), PM_TYPE_U64, PM_INDOM_NULL, PM_SEM_COUNTER, + PMDA_PMUNITS(0,0,1,0,0,PM_COUNT_ONE) } }, + +/* network.tcp.rtomin */ + { &_pm_proc_net_snmp.tcp[_PM_SNMP_TCP_RTOMIN], + { PMDA_PMID(CLUSTER_NET_SNMP,51), PM_TYPE_U64, PM_INDOM_NULL, PM_SEM_COUNTER, + PMDA_PMUNITS(0,0,1,0,0,PM_COUNT_ONE) } }, + +/* network.tcp.rtomax */ + { &_pm_proc_net_snmp.tcp[_PM_SNMP_TCP_RTOMAX], + { PMDA_PMID(CLUSTER_NET_SNMP,52), PM_TYPE_U64, PM_INDOM_NULL, PM_SEM_COUNTER, + PMDA_PMUNITS(0,0,1,0,0,PM_COUNT_ONE) } }, + +/* network.tcp.maxconn */ + { &_pm_proc_net_snmp.tcp[_PM_SNMP_TCP_MAXCONN], + { PMDA_PMID(CLUSTER_NET_SNMP,53), PM_TYPE_U64, PM_INDOM_NULL, PM_SEM_COUNTER, + PMDA_PMUNITS(0,0,1,0,0,PM_COUNT_ONE) } }, + +/* network.tcpconn.established */ + { &proc_net_tcp.stat[_PM_TCP_ESTABLISHED], + { PMDA_PMID(CLUSTER_NET_TCP, 1), PM_TYPE_U32, PM_INDOM_NULL, PM_SEM_INSTANT, + PMDA_PMUNITS(0,0,1,0,0,PM_COUNT_ONE) } }, + +/* network.tcpconn.syn_sent */ + { &proc_net_tcp.stat[_PM_TCP_SYN_SENT], + { PMDA_PMID(CLUSTER_NET_TCP, 2), PM_TYPE_U32, PM_INDOM_NULL, PM_SEM_INSTANT, + PMDA_PMUNITS(0,0,1,0,0,PM_COUNT_ONE) } }, + +/* network.tcpconn.syn_recv */ + { &proc_net_tcp.stat[_PM_TCP_SYN_RECV], + { PMDA_PMID(CLUSTER_NET_TCP, 3), PM_TYPE_U32, PM_INDOM_NULL, PM_SEM_INSTANT, + PMDA_PMUNITS(0,0,1,0,0,PM_COUNT_ONE) } }, + +/* network.tcpconn.fin_wait1 */ + { &proc_net_tcp.stat[_PM_TCP_FIN_WAIT1], + { PMDA_PMID(CLUSTER_NET_TCP, 4), PM_TYPE_U32, PM_INDOM_NULL, PM_SEM_INSTANT, + PMDA_PMUNITS(0,0,1,0,0,PM_COUNT_ONE) } }, + +/* network.tcpconn.fin_wait2 */ + { &proc_net_tcp.stat[_PM_TCP_FIN_WAIT2], + { PMDA_PMID(CLUSTER_NET_TCP, 5), PM_TYPE_U32, PM_INDOM_NULL, PM_SEM_INSTANT, + PMDA_PMUNITS(0,0,1,0,0,PM_COUNT_ONE) } }, + +/* network.tcpconn.time_wait */ + { &proc_net_tcp.stat[_PM_TCP_TIME_WAIT], + { PMDA_PMID(CLUSTER_NET_TCP, 6), PM_TYPE_U32, PM_INDOM_NULL, PM_SEM_INSTANT, + PMDA_PMUNITS(0,0,1,0,0,PM_COUNT_ONE) } }, + +/* network.tcpconn.close */ + { &proc_net_tcp.stat[_PM_TCP_CLOSE], + { PMDA_PMID(CLUSTER_NET_TCP, 7), PM_TYPE_U32, PM_INDOM_NULL, PM_SEM_INSTANT, + PMDA_PMUNITS(0,0,1,0,0,PM_COUNT_ONE) } }, + +/* network.tcpconn.close_wait */ + { &proc_net_tcp.stat[_PM_TCP_CLOSE_WAIT], + { PMDA_PMID(CLUSTER_NET_TCP, 8), PM_TYPE_U32, PM_INDOM_NULL, PM_SEM_INSTANT, + PMDA_PMUNITS(0,0,1,0,0,PM_COUNT_ONE) } }, + +/* network.tcpconn.last_ack */ + { &proc_net_tcp.stat[_PM_TCP_LAST_ACK], + { PMDA_PMID(CLUSTER_NET_TCP, 9), PM_TYPE_U32, PM_INDOM_NULL, PM_SEM_INSTANT, + PMDA_PMUNITS(0,0,1,0,0,PM_COUNT_ONE) } }, + +/* network.tcpconn.listen */ + { &proc_net_tcp.stat[_PM_TCP_LISTEN], + { PMDA_PMID(CLUSTER_NET_TCP, 10), PM_TYPE_U32, PM_INDOM_NULL, PM_SEM_INSTANT, + PMDA_PMUNITS(0,0,1,0,0,PM_COUNT_ONE) } }, + +/* network.tcpconn.closing */ + { &proc_net_tcp.stat[_PM_TCP_CLOSING], + { PMDA_PMID(CLUSTER_NET_TCP, 11), PM_TYPE_U32, PM_INDOM_NULL, PM_SEM_INSTANT, + PMDA_PMUNITS(0,0,1,0,0,PM_COUNT_ONE) } }, + +/* network.tcp.activeopens */ + { &_pm_proc_net_snmp.tcp[_PM_SNMP_TCP_ACTIVEOPENS], + { PMDA_PMID(CLUSTER_NET_SNMP,54), PM_TYPE_U64, PM_INDOM_NULL, PM_SEM_COUNTER, + PMDA_PMUNITS(0,0,1,0,0,PM_COUNT_ONE) } }, + +/* network.tcp.passiveopens */ + { &_pm_proc_net_snmp.tcp[_PM_SNMP_TCP_PASSIVEOPENS], + { PMDA_PMID(CLUSTER_NET_SNMP,55), PM_TYPE_U64, PM_INDOM_NULL, PM_SEM_COUNTER, + PMDA_PMUNITS(0,0,1,0,0,PM_COUNT_ONE) } }, + +/* network.tcp.attemptfails */ + { &_pm_proc_net_snmp.tcp[_PM_SNMP_TCP_ATTEMPTFAILS], + { PMDA_PMID(CLUSTER_NET_SNMP,56), PM_TYPE_U64, PM_INDOM_NULL, PM_SEM_COUNTER, + PMDA_PMUNITS(0,0,1,0,0,PM_COUNT_ONE) } }, + +/* network.tcp.estabresets */ + { &_pm_proc_net_snmp.tcp[_PM_SNMP_TCP_ESTABRESETS], + { PMDA_PMID(CLUSTER_NET_SNMP,57), PM_TYPE_U64, PM_INDOM_NULL, PM_SEM_COUNTER, + PMDA_PMUNITS(0,0,1,0,0,PM_COUNT_ONE) } }, + +/* network.tcp.currestab */ + { &_pm_proc_net_snmp.tcp[_PM_SNMP_TCP_CURRESTAB], + { PMDA_PMID(CLUSTER_NET_SNMP,58), PM_TYPE_U64, PM_INDOM_NULL, PM_SEM_COUNTER, + PMDA_PMUNITS(0,0,1,0,0,PM_COUNT_ONE) } }, + +/* network.tcp.insegs */ + { &_pm_proc_net_snmp.tcp[_PM_SNMP_TCP_INSEGS], + { PMDA_PMID(CLUSTER_NET_SNMP,59), PM_TYPE_U64, PM_INDOM_NULL, PM_SEM_COUNTER, + PMDA_PMUNITS(0,0,1,0,0,PM_COUNT_ONE) } }, + +/* network.tcp.outsegs */ + { &_pm_proc_net_snmp.tcp[_PM_SNMP_TCP_OUTSEGS], + { PMDA_PMID(CLUSTER_NET_SNMP,60), PM_TYPE_U64, PM_INDOM_NULL, PM_SEM_COUNTER, + PMDA_PMUNITS(0,0,1,0,0,PM_COUNT_ONE) } }, + +/* network.tcp.retranssegs */ + { &_pm_proc_net_snmp.tcp[_PM_SNMP_TCP_RETRANSSEGS], + { PMDA_PMID(CLUSTER_NET_SNMP,61), PM_TYPE_U64, PM_INDOM_NULL, PM_SEM_COUNTER, + PMDA_PMUNITS(0,0,1,0,0,PM_COUNT_ONE) } }, + +/* network.tcp.inerrs */ + { &_pm_proc_net_snmp.tcp[_PM_SNMP_TCP_INERRS], + { PMDA_PMID(CLUSTER_NET_SNMP,62), PM_TYPE_U64, PM_INDOM_NULL, PM_SEM_COUNTER, + PMDA_PMUNITS(0,0,1,0,0,PM_COUNT_ONE) } }, + +/* network.tcp.outrsts */ + { &_pm_proc_net_snmp.tcp[_PM_SNMP_TCP_OUTRSTS], + { PMDA_PMID(CLUSTER_NET_SNMP,63), PM_TYPE_U64, PM_INDOM_NULL, PM_SEM_COUNTER, + PMDA_PMUNITS(0,0,1,0,0,PM_COUNT_ONE) } }, + +/* network.tcp.incsumerrors */ + { &_pm_proc_net_snmp.tcp[_PM_SNMP_TCP_INCSUMERRORS], + { PMDA_PMID(CLUSTER_NET_SNMP,64), PM_TYPE_U64, PM_INDOM_NULL, PM_SEM_COUNTER, + PMDA_PMUNITS(0,0,1,0,0,PM_COUNT_ONE) } }, + +/* network.udp.indatagrams */ + { &_pm_proc_net_snmp.udp[_PM_SNMP_UDP_INDATAGRAMS], + { PMDA_PMID(CLUSTER_NET_SNMP,70), PM_TYPE_U64, PM_INDOM_NULL, PM_SEM_COUNTER, + PMDA_PMUNITS(0,0,1,0,0,PM_COUNT_ONE) } }, + +/* network.udp.noports */ + { &_pm_proc_net_snmp.udp[_PM_SNMP_UDP_NOPORTS], + { PMDA_PMID(CLUSTER_NET_SNMP,71), PM_TYPE_U64, PM_INDOM_NULL, PM_SEM_COUNTER, + PMDA_PMUNITS(0,0,1,0,0,PM_COUNT_ONE) } }, + +/* network.udp.inerrors */ + { &_pm_proc_net_snmp.udp[_PM_SNMP_UDP_INERRORS], + { PMDA_PMID(CLUSTER_NET_SNMP,72), PM_TYPE_U64, PM_INDOM_NULL, PM_SEM_COUNTER, + PMDA_PMUNITS(0,0,1,0,0,PM_COUNT_ONE) } }, + +/* network.udp.outdatagrams */ + { &_pm_proc_net_snmp.udp[_PM_SNMP_UDP_OUTDATAGRAMS], + { PMDA_PMID(CLUSTER_NET_SNMP,74), PM_TYPE_U64, PM_INDOM_NULL, PM_SEM_COUNTER, + PMDA_PMUNITS(0,0,1,0,0,PM_COUNT_ONE) } }, + +/* network.udp.recvbuferrors */ + { &_pm_proc_net_snmp.udp[_PM_SNMP_UDP_RECVBUFERRORS], + { PMDA_PMID(CLUSTER_NET_SNMP,75), PM_TYPE_U64, PM_INDOM_NULL, PM_SEM_COUNTER, + PMDA_PMUNITS(0,0,1,0,0,PM_COUNT_ONE) } }, + +/* network.udp.sndbuferrors */ + { &_pm_proc_net_snmp.udp[_PM_SNMP_UDP_SNDBUFERRORS], + { PMDA_PMID(CLUSTER_NET_SNMP,76), PM_TYPE_U64, PM_INDOM_NULL, PM_SEM_COUNTER, + PMDA_PMUNITS(0,0,1,0,0,PM_COUNT_ONE) } }, + +/* network.udp.incsumerrors */ + { &_pm_proc_net_snmp.udp[_PM_SNMP_UDP_INCSUMERRORS], + { PMDA_PMID(CLUSTER_NET_SNMP,83), PM_TYPE_U64, PM_INDOM_NULL, PM_SEM_COUNTER, + PMDA_PMUNITS(0,0,1,0,0,PM_COUNT_ONE) } }, + +/* network.udplite.indatagrams */ + { &_pm_proc_net_snmp.udplite[_PM_SNMP_UDPLITE_INDATAGRAMS], + { PMDA_PMID(CLUSTER_NET_SNMP,77), PM_TYPE_U64, PM_INDOM_NULL, PM_SEM_COUNTER, + PMDA_PMUNITS(0,0,1,0,0,PM_COUNT_ONE) } }, + +/* network.udplite.noports */ + { &_pm_proc_net_snmp.udplite[_PM_SNMP_UDPLITE_NOPORTS], + { PMDA_PMID(CLUSTER_NET_SNMP,78), PM_TYPE_U64, PM_INDOM_NULL, PM_SEM_COUNTER, + PMDA_PMUNITS(0,0,1,0,0,PM_COUNT_ONE) } }, + +/* network.udplite.inerrors */ + { &_pm_proc_net_snmp.udplite[_PM_SNMP_UDPLITE_INERRORS], + { PMDA_PMID(CLUSTER_NET_SNMP,79), PM_TYPE_U64, PM_INDOM_NULL, PM_SEM_COUNTER, + PMDA_PMUNITS(0,0,1,0,0,PM_COUNT_ONE) } }, + +/* network.udplite.outdatagrams */ + { &_pm_proc_net_snmp.udplite[_PM_SNMP_UDPLITE_OUTDATAGRAMS], + { PMDA_PMID(CLUSTER_NET_SNMP,80), PM_TYPE_U64, PM_INDOM_NULL, PM_SEM_COUNTER, + PMDA_PMUNITS(0,0,1,0,0,PM_COUNT_ONE) } }, + +/* network.udplite.recvbuferrors */ + { &_pm_proc_net_snmp.udplite[_PM_SNMP_UDPLITE_RECVBUFERRORS], + { PMDA_PMID(CLUSTER_NET_SNMP,81), PM_TYPE_U64, PM_INDOM_NULL, PM_SEM_COUNTER, + PMDA_PMUNITS(0,0,1,0,0,PM_COUNT_ONE) } }, + +/* network.udplite.sndbuferrors */ + { &_pm_proc_net_snmp.udplite[_PM_SNMP_UDPLITE_SNDBUFERRORS], + { PMDA_PMID(CLUSTER_NET_SNMP,82), PM_TYPE_U64, PM_INDOM_NULL, PM_SEM_COUNTER, + PMDA_PMUNITS(0,0,1,0,0,PM_COUNT_ONE) } }, + +/* network.udplite.incsumerrors */ + { &_pm_proc_net_snmp.udplite[_PM_SNMP_UDPLITE_INCSUMERRORS], + { PMDA_PMID(CLUSTER_NET_SNMP,84), PM_TYPE_U64, PM_INDOM_NULL, PM_SEM_COUNTER, + PMDA_PMUNITS(0,0,1,0,0,PM_COUNT_ONE) } }, + +/* network.icmpmsg.intype */ + { &_pm_proc_net_snmp.icmpmsg[_PM_SNMP_ICMPMSG_INTYPE], + { PMDA_PMID(CLUSTER_NET_SNMP,88), PM_TYPE_U64, ICMPMSG_INDOM, PM_SEM_COUNTER, + PMDA_PMUNITS(0,0,1,0,0,PM_COUNT_ONE) } }, + +/* network.icmpmsg.outtype */ + { &_pm_proc_net_snmp.icmpmsg[_PM_SNMP_ICMPMSG_OUTTYPE], + { PMDA_PMID(CLUSTER_NET_SNMP,89), PM_TYPE_U64, ICMPMSG_INDOM, PM_SEM_COUNTER, + PMDA_PMUNITS(0,0,1,0,0,PM_COUNT_ONE) } }, + +/* + * network netstat cluster + */ + +/* network.ip.innoroutes */ + { &_pm_proc_net_netstat.ip[_PM_NETSTAT_IPEXT_INNOROUTES], + { PMDA_PMID(CLUSTER_NET_NETSTAT,0), PM_TYPE_U64, PM_INDOM_NULL, PM_SEM_COUNTER, + PMDA_PMUNITS(0,0,1,0,0,PM_COUNT_ONE) } }, + +/* network.ip.intruncatedpkts */ + { &_pm_proc_net_netstat.ip[_PM_NETSTAT_IPEXT_INTRUNCATEDPKTS], + { PMDA_PMID(CLUSTER_NET_NETSTAT,1), PM_TYPE_U64, PM_INDOM_NULL, PM_SEM_COUNTER, + PMDA_PMUNITS(0,0,1,0,0,PM_COUNT_ONE) } }, + +/* network.ip.inmcastpkts */ + { &_pm_proc_net_netstat.ip[_PM_NETSTAT_IPEXT_INMCASTPKTS], + { PMDA_PMID(CLUSTER_NET_NETSTAT,2), PM_TYPE_U64, PM_INDOM_NULL, PM_SEM_COUNTER, + PMDA_PMUNITS(0,0,1,0,0,PM_COUNT_ONE) } }, + +/* network.ip.outmcastpkts */ + { &_pm_proc_net_netstat.ip[_PM_NETSTAT_IPEXT_OUTMCASTPKTS], + { PMDA_PMID(CLUSTER_NET_NETSTAT,3), PM_TYPE_U64, PM_INDOM_NULL, PM_SEM_COUNTER, + PMDA_PMUNITS(0,0,1,0,0,PM_COUNT_ONE) } }, + +/* network.ip.inbcastpkts */ + { &_pm_proc_net_netstat.ip[_PM_NETSTAT_IPEXT_INBCASTPKTS], + { PMDA_PMID(CLUSTER_NET_NETSTAT,4), PM_TYPE_U64, PM_INDOM_NULL, PM_SEM_COUNTER, + PMDA_PMUNITS(0,0,1,0,0,PM_COUNT_ONE) } }, + +/* network.ip.outbcastpkts */ + { &_pm_proc_net_netstat.ip[_PM_NETSTAT_IPEXT_OUTBCASTPKTS], + { PMDA_PMID(CLUSTER_NET_NETSTAT,5), PM_TYPE_U64, PM_INDOM_NULL, PM_SEM_COUNTER, + PMDA_PMUNITS(0,0,1,0,0,PM_COUNT_ONE) } }, + +/* network.ip.inoctets */ + { &_pm_proc_net_netstat.ip[_PM_NETSTAT_IPEXT_INOCTETS], + { PMDA_PMID(CLUSTER_NET_NETSTAT,6), PM_TYPE_U64, PM_INDOM_NULL, PM_SEM_COUNTER, + PMDA_PMUNITS(0,0,1,0,0,PM_COUNT_ONE) } }, + +/* network.ip.outoctets */ + { &_pm_proc_net_netstat.ip[_PM_NETSTAT_IPEXT_OUTOCTETS], + { PMDA_PMID(CLUSTER_NET_NETSTAT,7), PM_TYPE_U64, PM_INDOM_NULL, PM_SEM_COUNTER, + PMDA_PMUNITS(0,0,1,0,0,PM_COUNT_ONE) } }, + +/* network.ip.inmcastoctets */ + { &_pm_proc_net_netstat.ip[_PM_NETSTAT_IPEXT_INMCASTOCTETS], + { PMDA_PMID(CLUSTER_NET_NETSTAT,8), PM_TYPE_U64, PM_INDOM_NULL, PM_SEM_COUNTER, + PMDA_PMUNITS(0,0,1,0,0,PM_COUNT_ONE) } }, + +/* network.ip.outmcastoctets */ + { &_pm_proc_net_netstat.ip[_PM_NETSTAT_IPEXT_OUTMCASTOCTETS], + { PMDA_PMID(CLUSTER_NET_NETSTAT,9), PM_TYPE_U64, PM_INDOM_NULL, PM_SEM_COUNTER, + PMDA_PMUNITS(0,0,1,0,0,PM_COUNT_ONE) } }, + +/* network.ip.inbcastoctets */ + { &_pm_proc_net_netstat.ip[_PM_NETSTAT_IPEXT_INBCASTOCTETS], + { PMDA_PMID(CLUSTER_NET_NETSTAT,10), PM_TYPE_U64, PM_INDOM_NULL, PM_SEM_COUNTER, + PMDA_PMUNITS(0,0,1,0,0,PM_COUNT_ONE) } }, + +/* network.ip.outbcastoctets */ + { &_pm_proc_net_netstat.ip[_PM_NETSTAT_IPEXT_OUTBCASTOCTETS], + { PMDA_PMID(CLUSTER_NET_NETSTAT,11), PM_TYPE_U64, PM_INDOM_NULL, PM_SEM_COUNTER, + PMDA_PMUNITS(0,0,1,0,0,PM_COUNT_ONE) } }, + +/* network.ip.csumerrors */ + { &_pm_proc_net_netstat.ip[_PM_NETSTAT_IPEXT_CSUMERRORS], + { PMDA_PMID(CLUSTER_NET_NETSTAT,12), PM_TYPE_U64, PM_INDOM_NULL, PM_SEM_COUNTER, + PMDA_PMUNITS(0,0,1,0,0,PM_COUNT_ONE) } }, + +/* network.ip.noectpkts */ + { &_pm_proc_net_netstat.ip[_PM_NETSTAT_IPEXT_NOECTPKTS], + { PMDA_PMID(CLUSTER_NET_NETSTAT,13), PM_TYPE_U64, PM_INDOM_NULL, PM_SEM_COUNTER, + PMDA_PMUNITS(0,0,1,0,0,PM_COUNT_ONE) } }, + +/* network.ip.ect1pkts */ + { &_pm_proc_net_netstat.ip[_PM_NETSTAT_IPEXT_ECT1PKTS], + { PMDA_PMID(CLUSTER_NET_NETSTAT,14), PM_TYPE_U64, PM_INDOM_NULL, PM_SEM_COUNTER, + PMDA_PMUNITS(0,0,1,0,0,PM_COUNT_ONE) } }, + +/* network.ip.ect0pkts */ + { &_pm_proc_net_netstat.ip[_PM_NETSTAT_IPEXT_ECT0PKTS], + { PMDA_PMID(CLUSTER_NET_NETSTAT,15), PM_TYPE_U64, PM_INDOM_NULL, PM_SEM_COUNTER, + PMDA_PMUNITS(0,0,1,0,0,PM_COUNT_ONE) } }, + +/* network.ip.cepkts */ + { &_pm_proc_net_netstat.ip[_PM_NETSTAT_IPEXT_CEPKTS], + { PMDA_PMID(CLUSTER_NET_NETSTAT,16), PM_TYPE_U64, PM_INDOM_NULL, PM_SEM_COUNTER, + PMDA_PMUNITS(0,0,1,0,0,PM_COUNT_ONE) } }, + +/* network.tcp.syncookiessent */ + { &_pm_proc_net_netstat.tcp[_PM_NETSTAT_TCPEXT_SYNCOOKIESSENT], + { PMDA_PMID(CLUSTER_NET_NETSTAT,17), PM_TYPE_U64, PM_INDOM_NULL, PM_SEM_COUNTER, + PMDA_PMUNITS(0,0,1,0,0,PM_COUNT_ONE) } }, + +/* network.tcp.syncookiesrecv */ + { &_pm_proc_net_netstat.tcp[_PM_NETSTAT_TCPEXT_SYNCOOKIESRECV], + { PMDA_PMID(CLUSTER_NET_NETSTAT,18), PM_TYPE_U64, PM_INDOM_NULL, PM_SEM_COUNTER, + PMDA_PMUNITS(0,0,1,0,0,PM_COUNT_ONE) } }, + +/* network.tcp.syncookiesfailed */ + { &_pm_proc_net_netstat.tcp[_PM_NETSTAT_TCPEXT_SYNCOOKIESFAILED], + { PMDA_PMID(CLUSTER_NET_NETSTAT,19), PM_TYPE_U64, PM_INDOM_NULL, PM_SEM_COUNTER, + PMDA_PMUNITS(0,0,1,0,0,PM_COUNT_ONE) } }, + +/* network.tcp.embryonicrsts */ + { &_pm_proc_net_netstat.tcp[_PM_NETSTAT_TCPEXT_EMBRYONICRSTS], + { PMDA_PMID(CLUSTER_NET_NETSTAT,20), PM_TYPE_U64, PM_INDOM_NULL, PM_SEM_COUNTER, + PMDA_PMUNITS(0,0,1,0,0,PM_COUNT_ONE) } }, + +/* network.tcp.prunecalled */ + { &_pm_proc_net_netstat.tcp[_PM_NETSTAT_TCPEXT_PRUNECALLED], + { PMDA_PMID(CLUSTER_NET_NETSTAT,21), PM_TYPE_U64, PM_INDOM_NULL, PM_SEM_COUNTER, + PMDA_PMUNITS(0,0,1,0,0,PM_COUNT_ONE) } }, + +/* network.tcp.rcvpruned */ + { &_pm_proc_net_netstat.tcp[_PM_NETSTAT_TCPEXT_RCVPRUNED], + { PMDA_PMID(CLUSTER_NET_NETSTAT,22), PM_TYPE_U64, PM_INDOM_NULL, PM_SEM_COUNTER, + PMDA_PMUNITS(0,0,1,0,0,PM_COUNT_ONE) } }, + +/* network.tcp.ofopruned */ + { &_pm_proc_net_netstat.tcp[_PM_NETSTAT_TCPEXT_OFOPRUNED], + { PMDA_PMID(CLUSTER_NET_NETSTAT,23), PM_TYPE_U64, PM_INDOM_NULL, PM_SEM_COUNTER, + PMDA_PMUNITS(0,0,1,0,0,PM_COUNT_ONE) } }, + +/* network.tcp.outofwindowicmps */ + { &_pm_proc_net_netstat.tcp[_PM_NETSTAT_TCPEXT_OUTOFWINDOWICMPS], + { PMDA_PMID(CLUSTER_NET_NETSTAT,24), PM_TYPE_U64, PM_INDOM_NULL, PM_SEM_COUNTER, + PMDA_PMUNITS(0,0,1,0,0,PM_COUNT_ONE) } }, + +/* network.tcp.lockdroppedicmps */ + { &_pm_proc_net_netstat.tcp[_PM_NETSTAT_TCPEXT_LOCKDROPPEDICMPS], + { PMDA_PMID(CLUSTER_NET_NETSTAT,25), PM_TYPE_U64, PM_INDOM_NULL, PM_SEM_COUNTER, + PMDA_PMUNITS(0,0,1,0,0,PM_COUNT_ONE) } }, + +/* network.tcp.arpfilter */ + { &_pm_proc_net_netstat.tcp[_PM_NETSTAT_TCPEXT_ARPFILTER], + { PMDA_PMID(CLUSTER_NET_NETSTAT,26), PM_TYPE_U64, PM_INDOM_NULL, PM_SEM_COUNTER, + PMDA_PMUNITS(0,0,1,0,0,PM_COUNT_ONE) } }, + +/* network.tcp.timewaited */ + { &_pm_proc_net_netstat.tcp[_PM_NETSTAT_TCPEXT_TIMEWAITED], + { PMDA_PMID(CLUSTER_NET_NETSTAT,27), PM_TYPE_U64, PM_INDOM_NULL, PM_SEM_COUNTER, + PMDA_PMUNITS(0,0,1,0,0,PM_COUNT_ONE) } }, + +/* network.tcp.timewaitrecycled */ + { &_pm_proc_net_netstat.tcp[_PM_NETSTAT_TCPEXT_TIMEWAITRECYCLED], + { PMDA_PMID(CLUSTER_NET_NETSTAT,28), PM_TYPE_U64, PM_INDOM_NULL, PM_SEM_COUNTER, + PMDA_PMUNITS(0,0,1,0,0,PM_COUNT_ONE) } }, + +/* network.tcp.timewaitkilled */ + { &_pm_proc_net_netstat.tcp[_PM_NETSTAT_TCPEXT_TIMEWAITKILLED], + { PMDA_PMID(CLUSTER_NET_NETSTAT,29), PM_TYPE_U64, PM_INDOM_NULL, PM_SEM_COUNTER, + PMDA_PMUNITS(0,0,1,0,0,PM_COUNT_ONE) } }, + +/* network.tcp.pawspassiverejected */ + { &_pm_proc_net_netstat.tcp[_PM_NETSTAT_TCPEXT_PAWSPASSIVEREJECTED], + { PMDA_PMID(CLUSTER_NET_NETSTAT,30), PM_TYPE_U64, PM_INDOM_NULL, PM_SEM_COUNTER, + PMDA_PMUNITS(0,0,1,0,0,PM_COUNT_ONE) } }, + +/* network.tcp.pawsactiverejected */ + { &_pm_proc_net_netstat.tcp[_PM_NETSTAT_TCPEXT_PAWSACTIVEREJECTED], + { PMDA_PMID(CLUSTER_NET_NETSTAT,31), PM_TYPE_U64, PM_INDOM_NULL, PM_SEM_COUNTER, + PMDA_PMUNITS(0,0,1,0,0,PM_COUNT_ONE) } }, + +/* network.tcp.pawsestabrejected */ + { &_pm_proc_net_netstat.tcp[_PM_NETSTAT_TCPEXT_PAWSESTABREJECTED], + { PMDA_PMID(CLUSTER_NET_NETSTAT,32), PM_TYPE_U64, PM_INDOM_NULL, PM_SEM_COUNTER, + PMDA_PMUNITS(0,0,1,0,0,PM_COUNT_ONE) } }, + +/* network.tcp.delayedacks */ + { &_pm_proc_net_netstat.tcp[_PM_NETSTAT_TCPEXT_DELAYEDACKS], + { PMDA_PMID(CLUSTER_NET_NETSTAT,33), PM_TYPE_U64, PM_INDOM_NULL, PM_SEM_COUNTER, + PMDA_PMUNITS(0,0,1,0,0,PM_COUNT_ONE) } }, + +/* network.tcp.delayedacklocked */ + { &_pm_proc_net_netstat.tcp[_PM_NETSTAT_TCPEXT_DELAYEDACKLOCKED], + { PMDA_PMID(CLUSTER_NET_NETSTAT,34), PM_TYPE_U64, PM_INDOM_NULL, PM_SEM_COUNTER, + PMDA_PMUNITS(0,0,1,0,0,PM_COUNT_ONE) } }, + +/* network.tcp.delayedacklost */ + { &_pm_proc_net_netstat.tcp[_PM_NETSTAT_TCPEXT_DELAYEDACKLOST], + { PMDA_PMID(CLUSTER_NET_NETSTAT,35), PM_TYPE_U64, PM_INDOM_NULL, PM_SEM_COUNTER, + PMDA_PMUNITS(0,0,1,0,0,PM_COUNT_ONE) } }, + +/* network.tcp.listenoverflows */ + { &_pm_proc_net_netstat.tcp[_PM_NETSTAT_TCPEXT_LISTENOVERFLOWS], + { PMDA_PMID(CLUSTER_NET_NETSTAT,36), PM_TYPE_U64, PM_INDOM_NULL, PM_SEM_COUNTER, + PMDA_PMUNITS(0,0,1,0,0,PM_COUNT_ONE) } }, + +/* network.tcp.listendrops */ + { &_pm_proc_net_netstat.tcp[_PM_NETSTAT_TCPEXT_LISTENDROPS], + { PMDA_PMID(CLUSTER_NET_NETSTAT,37), PM_TYPE_U64, PM_INDOM_NULL, PM_SEM_COUNTER, + PMDA_PMUNITS(0,0,1,0,0,PM_COUNT_ONE) } }, + +/* network.tcp.prequeued */ + { &_pm_proc_net_netstat.tcp[_PM_NETSTAT_TCPEXT_TCPPREQUEUED], + { PMDA_PMID(CLUSTER_NET_NETSTAT,38), PM_TYPE_U64, PM_INDOM_NULL, PM_SEM_COUNTER, + PMDA_PMUNITS(0,0,1,0,0,PM_COUNT_ONE) } }, + +/* network.tcp.directcopyfrombacklog */ + { &_pm_proc_net_netstat.tcp[_PM_NETSTAT_TCPEXT_TCPDIRECTCOPYFROMBACKLOG], + { PMDA_PMID(CLUSTER_NET_NETSTAT,39), PM_TYPE_U64, PM_INDOM_NULL, PM_SEM_COUNTER, + PMDA_PMUNITS(0,0,1,0,0,PM_COUNT_ONE) } }, + +/* network.tcp.directcopyfromprequeue */ + { &_pm_proc_net_netstat.tcp[_PM_NETSTAT_TCPEXT_TCPDIRECTCOPYFROMPREQUEUE], + { PMDA_PMID(CLUSTER_NET_NETSTAT,40), PM_TYPE_U64, PM_INDOM_NULL, PM_SEM_COUNTER, + PMDA_PMUNITS(0,0,1,0,0,PM_COUNT_ONE) } }, + +/* network.tcp.prequeuedropped */ + { &_pm_proc_net_netstat.tcp[_PM_NETSTAT_TCPEXT_TCPPREQUEUEDROPPED], + { PMDA_PMID(CLUSTER_NET_NETSTAT,41), PM_TYPE_U64, PM_INDOM_NULL, PM_SEM_COUNTER, + PMDA_PMUNITS(0,0,1,0,0,PM_COUNT_ONE) } }, + +/* network.tcp.hphits*/ + { &_pm_proc_net_netstat.tcp[_PM_NETSTAT_TCPEXT_TCPHPHITS], + { PMDA_PMID(CLUSTER_NET_NETSTAT,42), PM_TYPE_U64, PM_INDOM_NULL, PM_SEM_COUNTER, + PMDA_PMUNITS(0,0,1,0,0,PM_COUNT_ONE) } }, + +/* network.tcp.hphitstouser */ + { &_pm_proc_net_netstat.tcp[_PM_NETSTAT_TCPEXT_TCPHPHITSTOUSER], + { PMDA_PMID(CLUSTER_NET_NETSTAT,43), PM_TYPE_U64, PM_INDOM_NULL, PM_SEM_COUNTER, + PMDA_PMUNITS(0,0,1,0,0,PM_COUNT_ONE) } }, + +/* network.tcp.pureacks */ + { &_pm_proc_net_netstat.tcp[_PM_NETSTAT_TCPEXT_TCPPUREACKS], + { PMDA_PMID(CLUSTER_NET_NETSTAT,44), PM_TYPE_U64, PM_INDOM_NULL, PM_SEM_COUNTER, + PMDA_PMUNITS(0,0,1,0,0,PM_COUNT_ONE) } }, + +/* network.tcp.hpacks */ + { &_pm_proc_net_netstat.tcp[_PM_NETSTAT_TCPEXT_TCPHPACKS], + { PMDA_PMID(CLUSTER_NET_NETSTAT,45), PM_TYPE_U64, PM_INDOM_NULL, PM_SEM_COUNTER, + PMDA_PMUNITS(0,0,1,0,0,PM_COUNT_ONE) } }, + +/* network.tcp.renorecovery */ + { &_pm_proc_net_netstat.tcp[_PM_NETSTAT_TCPEXT_TCPRENORECOVERY], + { PMDA_PMID(CLUSTER_NET_NETSTAT,46), PM_TYPE_U64, PM_INDOM_NULL, PM_SEM_COUNTER, + PMDA_PMUNITS(0,0,1,0,0,PM_COUNT_ONE) } }, + +/* network.tcp.sackrecovery */ + { &_pm_proc_net_netstat.tcp[_PM_NETSTAT_TCPEXT_TCPSACKRECOVERY], + { PMDA_PMID(CLUSTER_NET_NETSTAT,47), PM_TYPE_U64, PM_INDOM_NULL, PM_SEM_COUNTER, + PMDA_PMUNITS(0,0,1,0,0,PM_COUNT_ONE) } }, + +/* network.tcp.sackreneging */ + { &_pm_proc_net_netstat.tcp[_PM_NETSTAT_TCPEXT_TCPSACKRENEGING], + { PMDA_PMID(CLUSTER_NET_NETSTAT,48), PM_TYPE_U64, PM_INDOM_NULL, PM_SEM_COUNTER, + PMDA_PMUNITS(0,0,1,0,0,PM_COUNT_ONE) } }, + +/* network.tcp.fackreorder */ + { &_pm_proc_net_netstat.tcp[_PM_NETSTAT_TCPEXT_TCPFACKREORDER], + { PMDA_PMID(CLUSTER_NET_NETSTAT,49), PM_TYPE_U64, PM_INDOM_NULL, PM_SEM_COUNTER, + PMDA_PMUNITS(0,0,1,0,0,PM_COUNT_ONE) } }, + +/* network.tcp.sackreorder */ + { &_pm_proc_net_netstat.tcp[_PM_NETSTAT_TCPEXT_TCPSACKREORDER], + { PMDA_PMID(CLUSTER_NET_NETSTAT,50), PM_TYPE_U64, PM_INDOM_NULL, PM_SEM_COUNTER, + PMDA_PMUNITS(0,0,1,0,0,PM_COUNT_ONE) } }, + +/* network.tcp.renoreorder */ + { &_pm_proc_net_netstat.tcp[_PM_NETSTAT_TCPEXT_TCPRENOREORDER], + { PMDA_PMID(CLUSTER_NET_NETSTAT,51), PM_TYPE_U64, PM_INDOM_NULL, PM_SEM_COUNTER, + PMDA_PMUNITS(0,0,1,0,0,PM_COUNT_ONE) } }, + +/* network.tcp.tsreorder */ + { &_pm_proc_net_netstat.tcp[_PM_NETSTAT_TCPEXT_TCPTSREORDER], + { PMDA_PMID(CLUSTER_NET_NETSTAT,52), PM_TYPE_U64, PM_INDOM_NULL, PM_SEM_COUNTER, + PMDA_PMUNITS(0,0,1,0,0,PM_COUNT_ONE) } }, + +/* network.tcp.fullundo */ + { &_pm_proc_net_netstat.tcp[_PM_NETSTAT_TCPEXT_TCPFULLUNDO], + { PMDA_PMID(CLUSTER_NET_NETSTAT,53), PM_TYPE_U64, PM_INDOM_NULL, PM_SEM_COUNTER, + PMDA_PMUNITS(0,0,1,0,0,PM_COUNT_ONE) } }, + +/* network.tcp.partialundo */ + { &_pm_proc_net_netstat.tcp[_PM_NETSTAT_TCPEXT_TCPPARTIALUNDO], + { PMDA_PMID(CLUSTER_NET_NETSTAT,54), PM_TYPE_U64, PM_INDOM_NULL, PM_SEM_COUNTER, + PMDA_PMUNITS(0,0,1,0,0,PM_COUNT_ONE) } }, + +/* network.tcp.dsackundo */ + { &_pm_proc_net_netstat.tcp[_PM_NETSTAT_TCPEXT_TCPDSACKUNDO], + { PMDA_PMID(CLUSTER_NET_NETSTAT,55), PM_TYPE_U64, PM_INDOM_NULL, PM_SEM_COUNTER, + PMDA_PMUNITS(0,0,1,0,0,PM_COUNT_ONE) } }, + +/* network.tcp.lossundo */ + { &_pm_proc_net_netstat.tcp[_PM_NETSTAT_TCPEXT_TCPLOSSUNDO], + { PMDA_PMID(CLUSTER_NET_NETSTAT,56), PM_TYPE_U64, PM_INDOM_NULL, PM_SEM_COUNTER, + PMDA_PMUNITS(0,0,1,0,0,PM_COUNT_ONE) } }, + +/* network.tcp.lostretransmit */ + { &_pm_proc_net_netstat.tcp[_PM_NETSTAT_TCPEXT_TCPLOSTRETRANSMIT], + { PMDA_PMID(CLUSTER_NET_NETSTAT,57), PM_TYPE_U64, PM_INDOM_NULL, PM_SEM_COUNTER, + PMDA_PMUNITS(0,0,1,0,0,PM_COUNT_ONE) } }, + +/* network.tcp.renofailures */ + { &_pm_proc_net_netstat.tcp[_PM_NETSTAT_TCPEXT_TCPRENOFAILURES], + { PMDA_PMID(CLUSTER_NET_NETSTAT,58), PM_TYPE_U64, PM_INDOM_NULL, PM_SEM_COUNTER, + PMDA_PMUNITS(0,0,1,0,0,PM_COUNT_ONE) } }, + +/* network.tcp.sackfailures */ + { &_pm_proc_net_netstat.tcp[_PM_NETSTAT_TCPEXT_TCPSACKFAILURES], + { PMDA_PMID(CLUSTER_NET_NETSTAT,59), PM_TYPE_U64, PM_INDOM_NULL, PM_SEM_COUNTER, + PMDA_PMUNITS(0,0,1,0,0,PM_COUNT_ONE) } }, + +/* network.tcp.lossfailures */ + { &_pm_proc_net_netstat.tcp[_PM_NETSTAT_TCPEXT_TCPLOSSFAILURES], + { PMDA_PMID(CLUSTER_NET_NETSTAT,60), PM_TYPE_U64, PM_INDOM_NULL, PM_SEM_COUNTER, + PMDA_PMUNITS(0,0,1,0,0,PM_COUNT_ONE) } }, + +/* network.tcp.fastretrans */ + { &_pm_proc_net_netstat.tcp[_PM_NETSTAT_TCPEXT_TCPFASTRETRANS], + { PMDA_PMID(CLUSTER_NET_NETSTAT,61), PM_TYPE_U64, PM_INDOM_NULL, PM_SEM_COUNTER, + PMDA_PMUNITS(0,0,1,0,0,PM_COUNT_ONE) } }, + +/* network.tcp.forwardretrans */ + { &_pm_proc_net_netstat.tcp[_PM_NETSTAT_TCPEXT_TCPFORWARDRETRANS], + { PMDA_PMID(CLUSTER_NET_NETSTAT,62), PM_TYPE_U64, PM_INDOM_NULL, PM_SEM_COUNTER, + PMDA_PMUNITS(0,0,1,0,0,PM_COUNT_ONE) } }, + +/* network.tcp.slowstartretrans */ + { &_pm_proc_net_netstat.tcp[_PM_NETSTAT_TCPEXT_TCPSLOWSTARTRETRANS], + { PMDA_PMID(CLUSTER_NET_NETSTAT,63), PM_TYPE_U64, PM_INDOM_NULL, PM_SEM_COUNTER, + PMDA_PMUNITS(0,0,1,0,0,PM_COUNT_ONE) } }, + +/* network.tcp.timeouts */ + { &_pm_proc_net_netstat.tcp[_PM_NETSTAT_TCPEXT_TCPTIMEOUTS], + { PMDA_PMID(CLUSTER_NET_NETSTAT,64), PM_TYPE_U64, PM_INDOM_NULL, PM_SEM_COUNTER, + PMDA_PMUNITS(0,0,1,0,0,PM_COUNT_ONE) } }, + +/* network.tcp.lossprobes */ + { &_pm_proc_net_netstat.tcp[_PM_NETSTAT_TCPEXT_TCPLOSSPROBES], + { PMDA_PMID(CLUSTER_NET_NETSTAT,65), PM_TYPE_U64, PM_INDOM_NULL, PM_SEM_COUNTER, + PMDA_PMUNITS(0,0,1,0,0,PM_COUNT_ONE) } }, + +/* network.tcp.lossproberecovery */ + { &_pm_proc_net_netstat.tcp[_PM_NETSTAT_TCPEXT_TCPLOSSPROBERECOVERY], + { PMDA_PMID(CLUSTER_NET_NETSTAT,66), PM_TYPE_U64, PM_INDOM_NULL, PM_SEM_COUNTER, + PMDA_PMUNITS(0,0,1,0,0,PM_COUNT_ONE) } }, + +/* network.tcp.renorecoveryfail */ + { &_pm_proc_net_netstat.tcp[_PM_NETSTAT_TCPEXT_TCPRENORECOVERYFAIL], + { PMDA_PMID(CLUSTER_NET_NETSTAT,67), PM_TYPE_U64, PM_INDOM_NULL, PM_SEM_COUNTER, + PMDA_PMUNITS(0,0,1,0,0,PM_COUNT_ONE) } }, + +/* network.tcp.sackrecoveryfail */ + { &_pm_proc_net_netstat.tcp[_PM_NETSTAT_TCPEXT_TCPSACKRECOVERYFAIL], + { PMDA_PMID(CLUSTER_NET_NETSTAT,68), PM_TYPE_U64, PM_INDOM_NULL, PM_SEM_COUNTER, + PMDA_PMUNITS(0,0,1,0,0,PM_COUNT_ONE) } }, + +/* network.tcp.schedulerfailed */ + { &_pm_proc_net_netstat.tcp[_PM_NETSTAT_TCPEXT_TCPSCHEDULERFAILED], + { PMDA_PMID(CLUSTER_NET_NETSTAT,69), PM_TYPE_U64, PM_INDOM_NULL, PM_SEM_COUNTER, + PMDA_PMUNITS(0,0,1,0,0,PM_COUNT_ONE) } }, + +/* network.tcp.rcvcollapsed */ + { &_pm_proc_net_netstat.tcp[_PM_NETSTAT_TCPEXT_TCPRCVCOLLAPSED], + { PMDA_PMID(CLUSTER_NET_NETSTAT,70), PM_TYPE_U64, PM_INDOM_NULL, PM_SEM_COUNTER, + PMDA_PMUNITS(0,0,1,0,0,PM_COUNT_ONE) } }, + +/* network.tcp.dsackoldsent */ + { &_pm_proc_net_netstat.tcp[_PM_NETSTAT_TCPEXT_TCPDSACKOLDSENT], + { PMDA_PMID(CLUSTER_NET_NETSTAT,71), PM_TYPE_U64, PM_INDOM_NULL, PM_SEM_COUNTER, + PMDA_PMUNITS(0,0,1,0,0,PM_COUNT_ONE) } }, + +/* network.tcp.dsackofosent */ + { &_pm_proc_net_netstat.tcp[_PM_NETSTAT_TCPEXT_TCPDSACKOFOSENT], + { PMDA_PMID(CLUSTER_NET_NETSTAT,72), PM_TYPE_U64, PM_INDOM_NULL, PM_SEM_COUNTER, + PMDA_PMUNITS(0,0,1,0,0,PM_COUNT_ONE) } }, + +/* network.tcp.dsackrecv */ + { &_pm_proc_net_netstat.tcp[_PM_NETSTAT_TCPEXT_TCPDSACKRECV], + { PMDA_PMID(CLUSTER_NET_NETSTAT,73), PM_TYPE_U64, PM_INDOM_NULL, PM_SEM_COUNTER, + PMDA_PMUNITS(0,0,1,0,0,PM_COUNT_ONE) } }, + +/* network.tcp.dsackoforecv */ + { &_pm_proc_net_netstat.tcp[_PM_NETSTAT_TCPEXT_TCPDSACKOFORECV], + { PMDA_PMID(CLUSTER_NET_NETSTAT,74), PM_TYPE_U64, PM_INDOM_NULL, PM_SEM_COUNTER, + PMDA_PMUNITS(0,0,1,0,0,PM_COUNT_ONE) } }, + +/* network.tcp.abortondata */ + { &_pm_proc_net_netstat.tcp[_PM_NETSTAT_TCPEXT_TCPABORTONDATA], + { PMDA_PMID(CLUSTER_NET_NETSTAT,75), PM_TYPE_U64, PM_INDOM_NULL, PM_SEM_COUNTER, + PMDA_PMUNITS(0,0,1,0,0,PM_COUNT_ONE) } }, + +/* network.tcp.abortonclose */ + { &_pm_proc_net_netstat.tcp[_PM_NETSTAT_TCPEXT_TCPABORTONCLOSE], + { PMDA_PMID(CLUSTER_NET_NETSTAT,76), PM_TYPE_U64, PM_INDOM_NULL, PM_SEM_COUNTER, + PMDA_PMUNITS(0,0,1,0,0,PM_COUNT_ONE) } }, + +/* network.tcp.abortonmemory */ + { &_pm_proc_net_netstat.tcp[_PM_NETSTAT_TCPEXT_TCPABORTONMEMORY], + { PMDA_PMID(CLUSTER_NET_NETSTAT,77), PM_TYPE_U64, PM_INDOM_NULL, PM_SEM_COUNTER, + PMDA_PMUNITS(0,0,1,0,0,PM_COUNT_ONE) } }, + +/* network.tcp.abortontimeout */ + { &_pm_proc_net_netstat.tcp[_PM_NETSTAT_TCPEXT_TCPABORTONTIMEOUT], + { PMDA_PMID(CLUSTER_NET_NETSTAT,78), PM_TYPE_U64, PM_INDOM_NULL, PM_SEM_COUNTER, + PMDA_PMUNITS(0,0,1,0,0,PM_COUNT_ONE) } }, + +/* network.tcp.abortonlinger */ + { &_pm_proc_net_netstat.tcp[_PM_NETSTAT_TCPEXT_TCPABORTONLINGER], + { PMDA_PMID(CLUSTER_NET_NETSTAT,79), PM_TYPE_U64, PM_INDOM_NULL, PM_SEM_COUNTER, + PMDA_PMUNITS(0,0,1,0,0,PM_COUNT_ONE) } }, + +/* network.tcp.abortfailed */ + { &_pm_proc_net_netstat.tcp[_PM_NETSTAT_TCPEXT_TCPABORTFAILED], + { PMDA_PMID(CLUSTER_NET_NETSTAT,80), PM_TYPE_U64, PM_INDOM_NULL, PM_SEM_COUNTER, + PMDA_PMUNITS(0,0,1,0,0,PM_COUNT_ONE) } }, + +/* network.tcp.memorypressures */ + { &_pm_proc_net_netstat.tcp[_PM_NETSTAT_TCPEXT_TCPMEMORYPRESSURES], + { PMDA_PMID(CLUSTER_NET_NETSTAT,81), PM_TYPE_U64, PM_INDOM_NULL, PM_SEM_COUNTER, + PMDA_PMUNITS(0,0,1,0,0,PM_COUNT_ONE) } }, + +/* network.tcp.sackdiscard */ + { &_pm_proc_net_netstat.tcp[_PM_NETSTAT_TCPEXT_TCPSACKDISCARD], + { PMDA_PMID(CLUSTER_NET_NETSTAT,82), PM_TYPE_U64, PM_INDOM_NULL, PM_SEM_COUNTER, + PMDA_PMUNITS(0,0,1,0,0,PM_COUNT_ONE) } }, + +/* network.tcp.dsackignoredold */ + { &_pm_proc_net_netstat.tcp[_PM_NETSTAT_TCPEXT_TCPDSACKIGNOREDOLD], + { PMDA_PMID(CLUSTER_NET_NETSTAT,83), PM_TYPE_U64, PM_INDOM_NULL, PM_SEM_COUNTER, + PMDA_PMUNITS(0,0,1,0,0,PM_COUNT_ONE) } }, + +/* network.tcp.dsackignorednoundo */ + { &_pm_proc_net_netstat.tcp[_PM_NETSTAT_TCPEXT_TCPDSACKIGNOREDNOUNDO], + { PMDA_PMID(CLUSTER_NET_NETSTAT,84), PM_TYPE_U64, PM_INDOM_NULL, PM_SEM_COUNTER, + PMDA_PMUNITS(0,0,1,0,0,PM_COUNT_ONE) } }, + +/* network.tcp.spuriousrtos */ + { &_pm_proc_net_netstat.tcp[_PM_NETSTAT_TCPEXT_TCPSPURIOUSRTOS], + { PMDA_PMID(CLUSTER_NET_NETSTAT,85), PM_TYPE_U64, PM_INDOM_NULL, PM_SEM_COUNTER, + PMDA_PMUNITS(0,0,1,0,0,PM_COUNT_ONE) } }, + +/* network.tcp.md5notfound */ + { &_pm_proc_net_netstat.tcp[_PM_NETSTAT_TCPEXT_TCPMD5NOTFOUND], + { PMDA_PMID(CLUSTER_NET_NETSTAT,86), PM_TYPE_U64, PM_INDOM_NULL, PM_SEM_COUNTER, + PMDA_PMUNITS(0,0,1,0,0,PM_COUNT_ONE) } }, + +/* network.tcp.md5unexpected */ + { &_pm_proc_net_netstat.tcp[_PM_NETSTAT_TCPEXT_TCPMD5UNEXPECTED], + { PMDA_PMID(CLUSTER_NET_NETSTAT,87), PM_TYPE_U64, PM_INDOM_NULL, PM_SEM_COUNTER, + PMDA_PMUNITS(0,0,1,0,0,PM_COUNT_ONE) } }, + +/* network.tcp.sackshifted */ + { &_pm_proc_net_netstat.tcp[_PM_NETSTAT_TCPEXT_SACKSHIFTED], + { PMDA_PMID(CLUSTER_NET_NETSTAT,88), PM_TYPE_U64, PM_INDOM_NULL, PM_SEM_COUNTER, + PMDA_PMUNITS(0,0,1,0,0,PM_COUNT_ONE) } }, + +/* network.tcp.sackmerged */ + { &_pm_proc_net_netstat.tcp[_PM_NETSTAT_TCPEXT_SACKMERGED], + { PMDA_PMID(CLUSTER_NET_NETSTAT,89), PM_TYPE_U64, PM_INDOM_NULL, PM_SEM_COUNTER, + PMDA_PMUNITS(0,0,1,0,0,PM_COUNT_ONE) } }, + +/* network.tcp.sackshiftfallback */ + { &_pm_proc_net_netstat.tcp[_PM_NETSTAT_TCPEXT_SACKSHIFTFALLBACK], + { PMDA_PMID(CLUSTER_NET_NETSTAT,90), PM_TYPE_U64, PM_INDOM_NULL, PM_SEM_COUNTER, + PMDA_PMUNITS(0,0,1,0,0,PM_COUNT_ONE) } }, + +/* network.tcp.backlogdrop */ + { &_pm_proc_net_netstat.tcp[_PM_NETSTAT_TCPEXT_TCPBACKLOGDROP], + { PMDA_PMID(CLUSTER_NET_NETSTAT,91), PM_TYPE_U64, PM_INDOM_NULL, PM_SEM_COUNTER, + PMDA_PMUNITS(0,0,1,0,0,PM_COUNT_ONE) } }, + +/* network.tcp.minttldrop */ + { &_pm_proc_net_netstat.tcp[_PM_NETSTAT_TCPEXT_TCPMINTTLDROP], + { PMDA_PMID(CLUSTER_NET_NETSTAT,92), PM_TYPE_U64, PM_INDOM_NULL, PM_SEM_COUNTER, + PMDA_PMUNITS(0,0,1,0,0,PM_COUNT_ONE) } }, + +/* network.tcp.deferacceptdrop */ + { &_pm_proc_net_netstat.tcp[_PM_NETSTAT_TCPEXT_TCPDEFERACCEPTDROP], + { PMDA_PMID(CLUSTER_NET_NETSTAT,93), PM_TYPE_U64, PM_INDOM_NULL, PM_SEM_COUNTER, + PMDA_PMUNITS(0,0,1,0,0,PM_COUNT_ONE) } }, + +/* network.tcp.iprpfilter */ + { &_pm_proc_net_netstat.tcp[_PM_NETSTAT_TCPEXT_IPRPFILTER], + { PMDA_PMID(CLUSTER_NET_NETSTAT,94), PM_TYPE_U64, PM_INDOM_NULL, PM_SEM_COUNTER, + PMDA_PMUNITS(0,0,1,0,0,PM_COUNT_ONE) } }, + +/* network.tcp.timewaitoverflow */ + { &_pm_proc_net_netstat.tcp[_PM_NETSTAT_TCPEXT_TCPTIMEWAITOVERFLOW], + { PMDA_PMID(CLUSTER_NET_NETSTAT,95), PM_TYPE_U64, PM_INDOM_NULL, PM_SEM_COUNTER, + PMDA_PMUNITS(0,0,1,0,0,PM_COUNT_ONE) } }, + +/* network.tcp.reqqfulldocookies */ + { &_pm_proc_net_netstat.tcp[_PM_NETSTAT_TCPEXT_TCPREQQFULLDOCOOKIES], + { PMDA_PMID(CLUSTER_NET_NETSTAT,96), PM_TYPE_U64, PM_INDOM_NULL, PM_SEM_COUNTER, + PMDA_PMUNITS(0,0,1,0,0,PM_COUNT_ONE) } }, + +/* network.tcp.reqqfulldrop */ + { &_pm_proc_net_netstat.tcp[_PM_NETSTAT_TCPEXT_TCPREQQFULLDROP], + { PMDA_PMID(CLUSTER_NET_NETSTAT,97), PM_TYPE_U64, PM_INDOM_NULL, PM_SEM_COUNTER, + PMDA_PMUNITS(0,0,1,0,0,PM_COUNT_ONE) } }, + +/* network.tcp.retransfail */ + { &_pm_proc_net_netstat.tcp[_PM_NETSTAT_TCPEXT_TCPRETRANSFAIL], + { PMDA_PMID(CLUSTER_NET_NETSTAT,98), PM_TYPE_U64, PM_INDOM_NULL, PM_SEM_COUNTER, + PMDA_PMUNITS(0,0,1,0,0,PM_COUNT_ONE) } }, + +/* network.tcp.rcvcoalesce */ + { &_pm_proc_net_netstat.tcp[_PM_NETSTAT_TCPEXT_TCPRCVCOALESCE], + { PMDA_PMID(CLUSTER_NET_NETSTAT,99), PM_TYPE_U64, PM_INDOM_NULL, PM_SEM_COUNTER, + PMDA_PMUNITS(0,0,1,0,0,PM_COUNT_ONE) } }, + +/* network.tcp.ofoqueue */ + { &_pm_proc_net_netstat.tcp[_PM_NETSTAT_TCPEXT_TCPOFOQUEUE], + { PMDA_PMID(CLUSTER_NET_NETSTAT,100), PM_TYPE_U64, PM_INDOM_NULL, PM_SEM_COUNTER, + PMDA_PMUNITS(0,0,1,0,0,PM_COUNT_ONE) } }, + +/* network.tcp.ofodrop */ + { &_pm_proc_net_netstat.tcp[_PM_NETSTAT_TCPEXT_TCPOFODROP], + { PMDA_PMID(CLUSTER_NET_NETSTAT,101), PM_TYPE_U64, PM_INDOM_NULL, PM_SEM_COUNTER, + PMDA_PMUNITS(0,0,1,0,0,PM_COUNT_ONE) } }, + +/* network.tcp.ofomerge */ + { &_pm_proc_net_netstat.tcp[_PM_NETSTAT_TCPEXT_TCPOFOMERGE], + { PMDA_PMID(CLUSTER_NET_NETSTAT,102), PM_TYPE_U64, PM_INDOM_NULL, PM_SEM_COUNTER, + PMDA_PMUNITS(0,0,1,0,0,PM_COUNT_ONE) } }, + +/* network.tcp.challengeack */ + { &_pm_proc_net_netstat.tcp[_PM_NETSTAT_TCPEXT_TCPCHALLENGEACK], + { PMDA_PMID(CLUSTER_NET_NETSTAT,103), PM_TYPE_U64, PM_INDOM_NULL, PM_SEM_COUNTER, + PMDA_PMUNITS(0,0,1,0,0,PM_COUNT_ONE) } }, + +/* network.tcp.synchallenge */ + { &_pm_proc_net_netstat.tcp[_PM_NETSTAT_TCPEXT_TCPSYNCHALLENGE], + { PMDA_PMID(CLUSTER_NET_NETSTAT,104), PM_TYPE_U64, PM_INDOM_NULL, PM_SEM_COUNTER, + PMDA_PMUNITS(0,0,1,0,0,PM_COUNT_ONE) } }, + +/* network.tcp.fastopenactive */ + { &_pm_proc_net_netstat.tcp[_PM_NETSTAT_TCPEXT_TCPFASTOPENACTIVE], + { PMDA_PMID(CLUSTER_NET_NETSTAT,105), PM_TYPE_U64, PM_INDOM_NULL, PM_SEM_COUNTER, + PMDA_PMUNITS(0,0,1,0,0,PM_COUNT_ONE) } }, + +/* network.tcp.fastopenactivefail */ + { &_pm_proc_net_netstat.tcp[_PM_NETSTAT_TCPEXT_TCPFASTOPENACTIVEFAIL], + { PMDA_PMID(CLUSTER_NET_NETSTAT,106), PM_TYPE_U64, PM_INDOM_NULL, PM_SEM_COUNTER, + PMDA_PMUNITS(0,0,1,0,0,PM_COUNT_ONE) } }, + +/* network.tcp.fastopenpassive */ + { &_pm_proc_net_netstat.tcp[_PM_NETSTAT_TCPEXT_TCPFASTOPENPASSIVE], + { PMDA_PMID(CLUSTER_NET_NETSTAT,107), PM_TYPE_U64, PM_INDOM_NULL, PM_SEM_COUNTER, + PMDA_PMUNITS(0,0,1,0,0,PM_COUNT_ONE) } }, + +/* network.tcp.fastopenpassivefail */ + { &_pm_proc_net_netstat.tcp[_PM_NETSTAT_TCPEXT_TCPFASTOPENPASSIVEFAIL], + { PMDA_PMID(CLUSTER_NET_NETSTAT,108), PM_TYPE_U64, PM_INDOM_NULL, PM_SEM_COUNTER, + PMDA_PMUNITS(0,0,1,0,0,PM_COUNT_ONE) } }, + +/* network.tcp.fastopenlistenoverflow */ + { &_pm_proc_net_netstat.tcp[_PM_NETSTAT_TCPEXT_TCPFASTOPENLISTENOVERFLOW], + { PMDA_PMID(CLUSTER_NET_NETSTAT,109), PM_TYPE_U64, PM_INDOM_NULL, PM_SEM_COUNTER, + PMDA_PMUNITS(0,0,1,0,0,PM_COUNT_ONE) } }, + +/* network.tcp.fastopencookiereqd */ + { &_pm_proc_net_netstat.tcp[_PM_NETSTAT_TCPEXT_TCPFASTOPENCOOKIEREQD], + { PMDA_PMID(CLUSTER_NET_NETSTAT,110), PM_TYPE_U64, PM_INDOM_NULL, PM_SEM_COUNTER, + PMDA_PMUNITS(0,0,1,0,0,PM_COUNT_ONE) } }, + +/* network.tcp.spuriousrtxhostqueues */ + { &_pm_proc_net_netstat.tcp[_PM_NETSTAT_TCPEXT_TCPSPURIOUS_RTX_HOSTQUEUES], + { PMDA_PMID(CLUSTER_NET_NETSTAT,111), PM_TYPE_U64, PM_INDOM_NULL, PM_SEM_COUNTER, + PMDA_PMUNITS(0,0,1,0,0,PM_COUNT_ONE) } }, + +/* network.tcp.busypollrxpackets */ + { &_pm_proc_net_netstat.tcp[_PM_NETSTAT_TCPEXT_BUSYPOLLRXPACKETS], + { PMDA_PMID(CLUSTER_NET_NETSTAT,112), PM_TYPE_U64, PM_INDOM_NULL, PM_SEM_COUNTER, + PMDA_PMUNITS(0,0,1,0,0,PM_COUNT_ONE) } }, + +/* network.tcp.autocorking */ + { &_pm_proc_net_netstat.tcp[_PM_NETSTAT_TCPEXT_TCPAUTOCORKING], + { PMDA_PMID(CLUSTER_NET_NETSTAT,113), PM_TYPE_U64, PM_INDOM_NULL, PM_SEM_COUNTER, + PMDA_PMUNITS(0,0,1,0,0,PM_COUNT_ONE) } }, + +/* network.tcp.fromzerowindowadv */ + { &_pm_proc_net_netstat.tcp[_PM_NETSTAT_TCPEXT_TCPFROMZEROWINDOWADV], + { PMDA_PMID(CLUSTER_NET_NETSTAT,114), PM_TYPE_U64, PM_INDOM_NULL, PM_SEM_COUNTER, + PMDA_PMUNITS(0,0,1,0,0,PM_COUNT_ONE) } }, + +/* network.tcp.tozerowindowadv */ + { &_pm_proc_net_netstat.tcp[_PM_NETSTAT_TCPEXT_TCPTOZEROWINDOWADV], + { PMDA_PMID(CLUSTER_NET_NETSTAT,115), PM_TYPE_U64, PM_INDOM_NULL, PM_SEM_COUNTER, + PMDA_PMUNITS(0,0,1,0,0,PM_COUNT_ONE) } }, + +/* network.tcp.wantzerowindowadv */ + { &_pm_proc_net_netstat.tcp[_PM_NETSTAT_TCPEXT_TCPWANTZEROWINDOWADV], + { PMDA_PMID(CLUSTER_NET_NETSTAT,116), PM_TYPE_U64, PM_INDOM_NULL, PM_SEM_COUNTER, + PMDA_PMUNITS(0,0,1,0,0,PM_COUNT_ONE) } }, + +/* network.tcp.synretrans */ + { &_pm_proc_net_netstat.tcp[_PM_NETSTAT_TCPEXT_TCPSYNRETRANS], + { PMDA_PMID(CLUSTER_NET_NETSTAT,117), PM_TYPE_U64, PM_INDOM_NULL, PM_SEM_COUNTER, + PMDA_PMUNITS(0,0,1,0,0,PM_COUNT_ONE) } }, + +/* network.tcp.origdatasent */ + { &_pm_proc_net_netstat.tcp[_PM_NETSTAT_TCPEXT_TCPORIGDATASENT], + { PMDA_PMID(CLUSTER_NET_NETSTAT,118), PM_TYPE_U64, PM_INDOM_NULL, PM_SEM_COUNTER, + PMDA_PMUNITS(0,0,1,0,0,PM_COUNT_ONE) } }, + +/* hinv.map.scsi */ + { NULL, + { PMDA_PMID(CLUSTER_SCSI,0), PM_TYPE_STRING, SCSI_INDOM, PM_SEM_DISCRETE, + PMDA_PMUNITS(0,0,0,0,0,0) }, }, + +/* hinv.map.lvname */ + { NULL, + { PMDA_PMID(CLUSTER_LV,0), PM_TYPE_STRING, LV_INDOM, PM_SEM_DISCRETE, + PMDA_PMUNITS(0,0,0,0,0,0) }, }, + +/* hinv.nlv */ + { NULL, + { PMDA_PMID(CLUSTER_LV,1), PM_TYPE_U32, LV_INDOM, PM_SEM_DISCRETE, + PMDA_PMUNITS(0,0,0,0,0,0) }, }, + +/* + * /proc/cpuinfo cluster (cpu indom) + */ + +/* hinv.cpu.clock */ + { NULL, + { PMDA_PMID(CLUSTER_CPUINFO, 0), PM_TYPE_FLOAT, CPU_INDOM, PM_SEM_DISCRETE, + PMDA_PMUNITS(0,0,1,0,-6,0) } }, + +/* hinv.cpu.vendor */ + { NULL, + { PMDA_PMID(CLUSTER_CPUINFO, 1), PM_TYPE_STRING, CPU_INDOM, PM_SEM_DISCRETE, + PMDA_PMUNITS(0,0,0,0,0,0) } }, + +/* hinv.cpu.model */ + { NULL, + { PMDA_PMID(CLUSTER_CPUINFO, 2), PM_TYPE_STRING, CPU_INDOM, PM_SEM_DISCRETE, + PMDA_PMUNITS(0,0,0,0,0,0) } }, + +/* hinv.cpu.stepping */ + { NULL, + { PMDA_PMID(CLUSTER_CPUINFO, 3), PM_TYPE_STRING, CPU_INDOM, PM_SEM_DISCRETE, + PMDA_PMUNITS(0,0,0,0,0,0) } }, + +/* hinv.cpu.cache */ + { NULL, + { PMDA_PMID(CLUSTER_CPUINFO, 4), PM_TYPE_U32, CPU_INDOM, PM_SEM_DISCRETE, + PMDA_PMUNITS(0,0,0,PM_SPACE_KBYTE,0,0) } }, + +/* hinv.cpu.bogomips */ + { NULL, + { PMDA_PMID(CLUSTER_CPUINFO, 5), PM_TYPE_FLOAT, CPU_INDOM, PM_SEM_DISCRETE, + PMDA_PMUNITS(0,0,0,0,0,0) } }, + +/* hinv.map.cpu_num */ + { NULL, + { PMDA_PMID(CLUSTER_CPUINFO, 6), PM_TYPE_U32, CPU_INDOM, PM_SEM_DISCRETE, + PMDA_PMUNITS(0,0,0,0,0,0) } }, + +/* hinv.machine */ + { NULL, + { PMDA_PMID(CLUSTER_CPUINFO, 7), PM_TYPE_STRING, PM_INDOM_NULL, PM_SEM_DISCRETE, + PMDA_PMUNITS(0,0,0,0,0,0) } }, + +/* hinv.map.cpu_node */ + { NULL, + { PMDA_PMID(CLUSTER_CPUINFO, 8), PM_TYPE_U32, CPU_INDOM, PM_SEM_DISCRETE, + PMDA_PMUNITS(0,0,0,0,0,0) } }, + +/* hinv.cpu.model_name */ + { NULL, + { PMDA_PMID(CLUSTER_CPUINFO, 9), PM_TYPE_STRING, CPU_INDOM, PM_SEM_DISCRETE, + PMDA_PMUNITS(0,0,0,0,0,0) } }, + +/* hinv.cpu.flags */ + { NULL, + { PMDA_PMID(CLUSTER_CPUINFO, 10), PM_TYPE_STRING, CPU_INDOM, PM_SEM_DISCRETE, + PMDA_PMUNITS(0,0,0,0,0,0) } }, + +/* hinv.cpu.cache_alignment */ + { NULL, + { PMDA_PMID(CLUSTER_CPUINFO, 11), PM_TYPE_U32, CPU_INDOM, PM_SEM_DISCRETE, + PMDA_PMUNITS(0,0,0,PM_SPACE_BYTE,0,0) } }, + +/* + * semaphore limits cluster + * Cluster added by Mike Mason <mmlnx@us.ibm.com> + */ + +/* ipc.sem.max_semmap */ + { NULL, + { PMDA_PMID(CLUSTER_SEM_LIMITS, 0), PM_TYPE_U32, PM_INDOM_NULL, PM_SEM_DISCRETE, + PMDA_PMUNITS(0,0,0,0,0,0)}}, + +/* ipc.sem.max_semid */ + { NULL, + { PMDA_PMID(CLUSTER_SEM_LIMITS, 1), PM_TYPE_U32, PM_INDOM_NULL, PM_SEM_DISCRETE, + PMDA_PMUNITS(0,0,0,0,0,0)}}, + +/* ipc.sem.max_sem */ + { NULL, + { PMDA_PMID(CLUSTER_SEM_LIMITS, 2), PM_TYPE_U32, PM_INDOM_NULL, PM_SEM_DISCRETE, + PMDA_PMUNITS(0,0,0,0,0,0)}}, + +/* ipc.sem.num_undo */ + { NULL, + { PMDA_PMID(CLUSTER_SEM_LIMITS, 3), PM_TYPE_U32, PM_INDOM_NULL, PM_SEM_DISCRETE, + PMDA_PMUNITS(0,0,0,0,0,0)}}, + +/* ipc.sem.max_perid */ + { NULL, + { PMDA_PMID(CLUSTER_SEM_LIMITS, 4), PM_TYPE_U32, PM_INDOM_NULL, PM_SEM_DISCRETE, + PMDA_PMUNITS(0,0,0,0,0,0)}}, + +/* ipc.sem.max_ops */ + { NULL, + { PMDA_PMID(CLUSTER_SEM_LIMITS, 5), PM_TYPE_U32, PM_INDOM_NULL, PM_SEM_DISCRETE, + PMDA_PMUNITS(0,0,0,0,0,0)}}, + +/* ipc.sem.max_undoent */ + { NULL, + { PMDA_PMID(CLUSTER_SEM_LIMITS, 6), PM_TYPE_U32, PM_INDOM_NULL, PM_SEM_DISCRETE, + PMDA_PMUNITS(0,0,0,0,0,0)}}, + +/* ipc.sem.sz_semundo */ + { NULL, + { PMDA_PMID(CLUSTER_SEM_LIMITS, 7), PM_TYPE_U32, PM_INDOM_NULL, PM_SEM_DISCRETE, + PMDA_PMUNITS(0,0,0,0,0,0)}}, + +/* ipc.sem.max_semval */ + { NULL, + { PMDA_PMID(CLUSTER_SEM_LIMITS, 8), PM_TYPE_U32, PM_INDOM_NULL, PM_SEM_DISCRETE, + PMDA_PMUNITS(0,0,0,0,0,0)}}, + +/* ipc.sem.max_exit */ + { NULL, + { PMDA_PMID(CLUSTER_SEM_LIMITS, 9), PM_TYPE_U32, PM_INDOM_NULL, PM_SEM_DISCRETE, + PMDA_PMUNITS(0,0,0,0,0,0)}}, + +/* + * message limits cluster + * Cluster added by Mike Mason <mmlnx@us.ibm.com> + */ + +/* ipc.msg.sz_pool */ + { NULL, + { PMDA_PMID(CLUSTER_MSG_LIMITS, 0), PM_TYPE_U32, PM_INDOM_NULL, PM_SEM_DISCRETE, + PMDA_PMUNITS(1,0,0, PM_SPACE_KBYTE,0,0)}}, + +/* ipc.msg.mapent */ + { NULL, + { PMDA_PMID(CLUSTER_MSG_LIMITS, 1), PM_TYPE_U32, PM_INDOM_NULL, PM_SEM_DISCRETE, + PMDA_PMUNITS(0,0,0,0,0,0)}}, + +/* ipc.msg.max_msgsz */ + { NULL, + { PMDA_PMID(CLUSTER_MSG_LIMITS, 2), PM_TYPE_U32, PM_INDOM_NULL, PM_SEM_DISCRETE, + PMDA_PMUNITS(0,0,0,0,0,0)}}, + +/* ipc.msg.max_defmsgq */ + { NULL, + { PMDA_PMID(CLUSTER_MSG_LIMITS, 3), PM_TYPE_U32, PM_INDOM_NULL, PM_SEM_DISCRETE, + PMDA_PMUNITS(0,0,0,0,0,0)}}, + +/* ipc.msg.max_msgqid */ + { NULL, + { PMDA_PMID(CLUSTER_MSG_LIMITS, 4), PM_TYPE_U32, PM_INDOM_NULL, PM_SEM_DISCRETE, + PMDA_PMUNITS(0,0,0,0,0,0)}}, + +/* ipc.msg.max_msgseg */ + { NULL, + { PMDA_PMID(CLUSTER_MSG_LIMITS, 5), PM_TYPE_U32, PM_INDOM_NULL, PM_SEM_DISCRETE, + PMDA_PMUNITS(0,0,0, 0,0,0)}}, + +/* ipc.msg.max_smsghdr */ + { NULL, + { PMDA_PMID(CLUSTER_MSG_LIMITS, 6), PM_TYPE_U32, PM_INDOM_NULL, PM_SEM_DISCRETE, + PMDA_PMUNITS(0,0,0,0,0,0)}}, + +/* ipc.msg.max_seg */ + { NULL, + { PMDA_PMID(CLUSTER_MSG_LIMITS, 7), PM_TYPE_U32, PM_INDOM_NULL, PM_SEM_DISCRETE, + PMDA_PMUNITS(0,0,0,0,0,0)}}, + +/* + * shared memory limits cluster + * Cluster added by Mike Mason <mmlnx@us.ibm.com> + */ + +/* ipc.shm.max_segsz */ + { NULL, + { PMDA_PMID(CLUSTER_SHM_LIMITS, 0), PM_TYPE_U32, PM_INDOM_NULL, PM_SEM_DISCRETE, + PMDA_PMUNITS(1,0,0,PM_SPACE_BYTE,0,0)}}, + +/* ipc.shm.min_segsz */ + { NULL, + { PMDA_PMID(CLUSTER_SHM_LIMITS, 1), PM_TYPE_U32, PM_INDOM_NULL, PM_SEM_DISCRETE, + PMDA_PMUNITS(1,0,0,PM_SPACE_BYTE,0,0)}}, + +/* ipc.shm.max_seg */ + { NULL, + { PMDA_PMID(CLUSTER_SHM_LIMITS, 2), PM_TYPE_U32, PM_INDOM_NULL, PM_SEM_DISCRETE, + PMDA_PMUNITS(0,0,0,0,0,0)}}, + +/* ipc.shm.max_segproc */ + { NULL, + { PMDA_PMID(CLUSTER_SHM_LIMITS, 3), PM_TYPE_U32, PM_INDOM_NULL, PM_SEM_DISCRETE, + PMDA_PMUNITS(0,0,0,0,0,0)}}, + +/* ipc.shm.max_shmsys */ + { NULL, + { PMDA_PMID(CLUSTER_SHM_LIMITS, 4), PM_TYPE_U32, PM_INDOM_NULL, PM_SEM_DISCRETE, + PMDA_PMUNITS(0,0,0,0,0,0)}}, + +/* + * number of users cluster + */ + +/* kernel.all.nusers */ + { NULL, + { PMDA_PMID(CLUSTER_NUSERS, 0), PM_TYPE_U32, PM_INDOM_NULL, PM_SEM_INSTANT, + PMDA_PMUNITS(0,0,0,0,0,0)}}, + +/* + * /proc/sys/fs vfs cluster + */ + +/* vfs.files */ + { &proc_sys_fs.fs_files_count, + { PMDA_PMID(CLUSTER_VFS,0), PM_TYPE_32, PM_INDOM_NULL, PM_SEM_INSTANT, + PMDA_PMUNITS(0,0,0,0,0,0) }, }, + { &proc_sys_fs.fs_files_free, + { PMDA_PMID(CLUSTER_VFS,1), PM_TYPE_32, PM_INDOM_NULL, PM_SEM_INSTANT, + PMDA_PMUNITS(0,0,0,0,0,0) }, }, + { &proc_sys_fs.fs_files_max, + { PMDA_PMID(CLUSTER_VFS,2), PM_TYPE_32, PM_INDOM_NULL, PM_SEM_INSTANT, + PMDA_PMUNITS(0,0,0,0,0,0) }, }, + { &proc_sys_fs.fs_inodes_count, + { PMDA_PMID(CLUSTER_VFS,3), PM_TYPE_32, PM_INDOM_NULL, PM_SEM_INSTANT, + PMDA_PMUNITS(0,0,0,0,0,0) }, }, + { &proc_sys_fs.fs_inodes_free, + { PMDA_PMID(CLUSTER_VFS,4), PM_TYPE_32, PM_INDOM_NULL, PM_SEM_INSTANT, + PMDA_PMUNITS(0,0,0,0,0,0) }, }, + { &proc_sys_fs.fs_dentry_count, + { PMDA_PMID(CLUSTER_VFS,5), PM_TYPE_32, PM_INDOM_NULL, PM_SEM_INSTANT, + PMDA_PMUNITS(0,0,0,0,0,0) }, }, + { &proc_sys_fs.fs_dentry_free, + { PMDA_PMID(CLUSTER_VFS,6), PM_TYPE_32, PM_INDOM_NULL, PM_SEM_INSTANT, + PMDA_PMUNITS(0,0,0,0,0,0) }, }, + + /* + * mem.vmstat cluster + */ + + /* mem.vmstat.nr_dirty */ + { &_pm_proc_vmstat.nr_dirty, + {PMDA_PMID(28,0), PM_TYPE_U64, PM_INDOM_NULL, PM_SEM_INSTANT, + PMDA_PMUNITS(0,0,0,0,0,0) }, }, + + /* mem.vmstat.nr_writeback */ + { &_pm_proc_vmstat.nr_writeback, + {PMDA_PMID(28,1), PM_TYPE_U64, PM_INDOM_NULL, PM_SEM_INSTANT, + PMDA_PMUNITS(0,0,0,0,0,0) }, }, + + /* mem.vmstat.nr_unstable */ + { &_pm_proc_vmstat.nr_unstable, + {PMDA_PMID(28,2), PM_TYPE_U64, PM_INDOM_NULL, PM_SEM_INSTANT, + PMDA_PMUNITS(0,0,0,0,0,0) }, }, + + /* mem.vmstat.nr_page_table_pages */ + { &_pm_proc_vmstat.nr_page_table_pages, + {PMDA_PMID(28,3), PM_TYPE_U64, PM_INDOM_NULL, PM_SEM_INSTANT, + PMDA_PMUNITS(0,0,0,0,0,0) }, }, + + /* mem.vmstat.nr_mapped */ + { &_pm_proc_vmstat.nr_mapped, + {PMDA_PMID(28,4), PM_TYPE_U64, PM_INDOM_NULL, PM_SEM_INSTANT, + PMDA_PMUNITS(0,0,0,0,0,0) }, }, + + /* mem.vmstat.nr_slab */ + { &_pm_proc_vmstat.nr_slab, + {PMDA_PMID(28,5), PM_TYPE_U64, PM_INDOM_NULL, PM_SEM_INSTANT, + PMDA_PMUNITS(0,0,0,0,0,0) }, }, + + /* mem.vmstat.pgpgin */ + { &_pm_proc_vmstat.pgpgin, + {PMDA_PMID(28,6), PM_TYPE_U64, PM_INDOM_NULL, PM_SEM_COUNTER, + PMDA_PMUNITS(0,0,1,0,0,PM_COUNT_ONE) }, }, + + /* mem.vmstat.pgpgout */ + { &_pm_proc_vmstat.pgpgout, + {PMDA_PMID(28,7), PM_TYPE_U64, PM_INDOM_NULL, PM_SEM_COUNTER, + PMDA_PMUNITS(0,0,1,0,0,PM_COUNT_ONE) }, }, + + /* mem.vmstat.pswpin */ + { &_pm_proc_vmstat.pswpin, + {PMDA_PMID(28,8), PM_TYPE_U64, PM_INDOM_NULL, PM_SEM_COUNTER, + PMDA_PMUNITS(0,0,1,0,0,PM_COUNT_ONE) }, }, + + /* mem.vmstat.pswpout */ + { &_pm_proc_vmstat.pswpout, + {PMDA_PMID(28,9), PM_TYPE_U64, PM_INDOM_NULL, PM_SEM_COUNTER, + PMDA_PMUNITS(0,0,1,0,0,PM_COUNT_ONE) }, }, + + /* mem.vmstat.pgalloc_high */ + { &_pm_proc_vmstat.pgalloc_high, + {PMDA_PMID(28,10), PM_TYPE_U64, PM_INDOM_NULL, PM_SEM_COUNTER, + PMDA_PMUNITS(0,0,1,0,0,PM_COUNT_ONE) }, }, + + /* mem.vmstat.pgalloc_normal */ + { &_pm_proc_vmstat.pgalloc_normal, + {PMDA_PMID(28,11), PM_TYPE_U64, PM_INDOM_NULL, PM_SEM_COUNTER, + PMDA_PMUNITS(0,0,1,0,0,PM_COUNT_ONE) }, }, + + /* mem.vmstat.pgalloc_dma */ + { &_pm_proc_vmstat.pgalloc_dma, + {PMDA_PMID(28,12), PM_TYPE_U64, PM_INDOM_NULL, PM_SEM_COUNTER, + PMDA_PMUNITS(0,0,1,0,0,PM_COUNT_ONE) }, }, + + /* mem.vmstat.pgfree */ + { &_pm_proc_vmstat.pgfree, + {PMDA_PMID(28,13), PM_TYPE_U64, PM_INDOM_NULL, PM_SEM_COUNTER, + PMDA_PMUNITS(0,0,1,0,0,PM_COUNT_ONE) }, }, + + /* mem.vmstat.pgactivate */ + { &_pm_proc_vmstat.pgactivate, + {PMDA_PMID(28,14), PM_TYPE_U64, PM_INDOM_NULL, PM_SEM_COUNTER, + PMDA_PMUNITS(0,0,1,0,0,PM_COUNT_ONE) }, }, + + /* mem.vmstat.pgdeactivate */ + { &_pm_proc_vmstat.pgdeactivate, + {PMDA_PMID(28,15), PM_TYPE_U64, PM_INDOM_NULL, PM_SEM_COUNTER, + PMDA_PMUNITS(0,0,1,0,0,PM_COUNT_ONE) }, }, + + /* mem.vmstat.pgfault */ + { &_pm_proc_vmstat.pgfault, + {PMDA_PMID(28,16), PM_TYPE_U64, PM_INDOM_NULL, PM_SEM_COUNTER, + PMDA_PMUNITS(0,0,1,0,0,PM_COUNT_ONE) }, }, + + /* mem.vmstat.pgmajfault */ + { &_pm_proc_vmstat.pgmajfault, + {PMDA_PMID(28,17), PM_TYPE_U64, PM_INDOM_NULL, PM_SEM_COUNTER, + PMDA_PMUNITS(0,0,1,0,0,PM_COUNT_ONE) }, }, + + /* mem.vmstat.pgrefill_high */ + { &_pm_proc_vmstat.pgrefill_high, + {PMDA_PMID(28,18), PM_TYPE_U64, PM_INDOM_NULL, PM_SEM_COUNTER, + PMDA_PMUNITS(0,0,1,0,0,PM_COUNT_ONE) }, }, + + /* mem.vmstat.pgrefill_normal */ + { &_pm_proc_vmstat.pgrefill_normal, + {PMDA_PMID(28,19), PM_TYPE_U64, PM_INDOM_NULL, PM_SEM_COUNTER, + PMDA_PMUNITS(0,0,1,0,0,PM_COUNT_ONE) }, }, + + /* mem.vmstat.pgrefill_dma */ + { &_pm_proc_vmstat.pgrefill_dma, + {PMDA_PMID(28,20), PM_TYPE_U64, PM_INDOM_NULL, PM_SEM_COUNTER, + PMDA_PMUNITS(0,0,1,0,0,PM_COUNT_ONE) }, }, + + /* mem.vmstat.pgsteal_high */ + { &_pm_proc_vmstat.pgsteal_high, + {PMDA_PMID(28,21), PM_TYPE_U64, PM_INDOM_NULL, PM_SEM_COUNTER, + PMDA_PMUNITS(0,0,1,0,0,PM_COUNT_ONE) }, }, + + /* mem.vmstat.pgsteal_normal */ + { &_pm_proc_vmstat.pgsteal_normal, + {PMDA_PMID(28,22), PM_TYPE_U64, PM_INDOM_NULL, PM_SEM_COUNTER, + PMDA_PMUNITS(0,0,1,0,0,PM_COUNT_ONE) }, }, + + /* mem.vmstat.pgsteal_dma */ + { &_pm_proc_vmstat.pgsteal_dma, + {PMDA_PMID(28,23), PM_TYPE_U64, PM_INDOM_NULL, PM_SEM_COUNTER, + PMDA_PMUNITS(0,0,1,0,0,PM_COUNT_ONE) }, }, + + /* mem.vmstat.pgscan_kswapd_high */ + { &_pm_proc_vmstat.pgscan_kswapd_high, + {PMDA_PMID(28,24), PM_TYPE_U64, PM_INDOM_NULL, PM_SEM_COUNTER, + PMDA_PMUNITS(0,0,1,0,0,PM_COUNT_ONE) }, }, + + /* mem.vmstat.pgscan_kswapd_normal */ + { &_pm_proc_vmstat.pgscan_kswapd_normal, + {PMDA_PMID(28,25), PM_TYPE_U64, PM_INDOM_NULL, PM_SEM_COUNTER, + PMDA_PMUNITS(0,0,1,0,0,PM_COUNT_ONE) }, }, + + /* mem.vmstat.pgscan_kswapd_dma */ + { &_pm_proc_vmstat.pgscan_kswapd_dma, + {PMDA_PMID(28,26), PM_TYPE_U64, PM_INDOM_NULL, PM_SEM_COUNTER, + PMDA_PMUNITS(0,0,1,0,0,PM_COUNT_ONE) }, }, + + /* mem.vmstat.pgscan_direct_high */ + { &_pm_proc_vmstat.pgscan_direct_high, + {PMDA_PMID(28,27), PM_TYPE_U64, PM_INDOM_NULL, PM_SEM_COUNTER, + PMDA_PMUNITS(0,0,1,0,0,PM_COUNT_ONE) }, }, + + /* mem.vmstat.pgscan_direct_normal */ + { &_pm_proc_vmstat.pgscan_direct_normal, + {PMDA_PMID(28,28), PM_TYPE_U64, PM_INDOM_NULL, PM_SEM_COUNTER, + PMDA_PMUNITS(0,0,1,0,0,PM_COUNT_ONE) }, }, + + /* mem.vmstat.pgscan_direct_dma */ + { &_pm_proc_vmstat.pgscan_direct_dma, + {PMDA_PMID(28,29), PM_TYPE_U64, PM_INDOM_NULL, PM_SEM_COUNTER, + PMDA_PMUNITS(0,0,1,0,0,PM_COUNT_ONE) }, }, + + /* mem.vmstat.pginodesteal */ + { &_pm_proc_vmstat.pginodesteal, + {PMDA_PMID(28,30), PM_TYPE_U64, PM_INDOM_NULL, PM_SEM_COUNTER, + PMDA_PMUNITS(0,0,1,0,0,PM_COUNT_ONE) }, }, + + /* mem.vmstat.slabs_scanned */ + { &_pm_proc_vmstat.slabs_scanned, + {PMDA_PMID(28,31), PM_TYPE_U64, PM_INDOM_NULL, PM_SEM_COUNTER, + PMDA_PMUNITS(0,0,1,0,0,PM_COUNT_ONE) }, }, + + /* mem.vmstat.kswapd_steal */ + { &_pm_proc_vmstat.kswapd_steal, + {PMDA_PMID(28,32), PM_TYPE_U64, PM_INDOM_NULL, PM_SEM_COUNTER, + PMDA_PMUNITS(0,0,1,0,0,PM_COUNT_ONE) }, }, + + /* mem.vmstat.kswapd_inodesteal */ + { &_pm_proc_vmstat.kswapd_inodesteal, + {PMDA_PMID(28,33), PM_TYPE_U64, PM_INDOM_NULL, PM_SEM_COUNTER, + PMDA_PMUNITS(0,0,1,0,0,PM_COUNT_ONE) }, }, + + /* mem.vmstat.pageoutrun */ + { &_pm_proc_vmstat.pageoutrun, + {PMDA_PMID(28,34), PM_TYPE_U64, PM_INDOM_NULL, PM_SEM_COUNTER, + PMDA_PMUNITS(0,0,1,0,0,PM_COUNT_ONE) }, }, + + /* mem.vmstat.allocstall */ + { &_pm_proc_vmstat.allocstall, + {PMDA_PMID(28,35), PM_TYPE_U64, PM_INDOM_NULL, PM_SEM_COUNTER, + PMDA_PMUNITS(0,0,1,0,0,PM_COUNT_ONE) }, }, + + /* mem.vmstat.pgrotated */ + { &_pm_proc_vmstat.pgrotated, + {PMDA_PMID(28,36), PM_TYPE_U64, PM_INDOM_NULL, PM_SEM_COUNTER, + PMDA_PMUNITS(0,0,1,0,0,PM_COUNT_ONE) }, }, + + /* mem.vmstat.nr_slab_reclaimable */ + { &_pm_proc_vmstat.nr_slab_reclaimable, + {PMDA_PMID(28,37), PM_TYPE_U64, PM_INDOM_NULL, PM_SEM_INSTANT, + PMDA_PMUNITS(0,0,0,0,0,0) }, }, + + /* mem.vmstat.nr_slab_unreclaimable */ + { &_pm_proc_vmstat.nr_slab_unreclaimable, + {PMDA_PMID(28,38), PM_TYPE_U64, PM_INDOM_NULL, PM_SEM_INSTANT, + PMDA_PMUNITS(0,0,0,0,0,0) }, }, + + /* mem.vmstat.nr_anon_pages */ + { &_pm_proc_vmstat.nr_anon_pages, + {PMDA_PMID(28,39), PM_TYPE_U64, PM_INDOM_NULL, PM_SEM_INSTANT, + PMDA_PMUNITS(0,0,0,0,0,0) }, }, + + /* mem.vmstat.nr_bounce */ + { &_pm_proc_vmstat.nr_bounce, + {PMDA_PMID(28,40), PM_TYPE_U64, PM_INDOM_NULL, PM_SEM_INSTANT, + PMDA_PMUNITS(0,0,0,0,0,0) }, }, + + /* mem.vmstat.nr_file_pages */ + { &_pm_proc_vmstat.nr_file_pages, + {PMDA_PMID(28,41), PM_TYPE_U64, PM_INDOM_NULL, PM_SEM_INSTANT, + PMDA_PMUNITS(0,0,0,0,0,0) }, }, + + /* mem.vmstat.nr_vmscan_write */ + { &_pm_proc_vmstat.nr_vmscan_write, + {PMDA_PMID(28,42), PM_TYPE_U64, PM_INDOM_NULL, PM_SEM_COUNTER, + PMDA_PMUNITS(0,0,1,0,0,PM_COUNT_ONE) }, }, + + /* mem.vmstat.htlb_buddy_alloc_fail */ + { &_pm_proc_vmstat.htlb_buddy_alloc_fail, + {PMDA_PMID(28,43), PM_TYPE_U64, PM_INDOM_NULL, PM_SEM_COUNTER, + PMDA_PMUNITS(0,0,1,0,0,PM_COUNT_ONE) }, }, + + /* mem.vmstat.htlb_buddy_alloc_success */ + { &_pm_proc_vmstat.htlb_buddy_alloc_success, + {PMDA_PMID(28,44), PM_TYPE_U64, PM_INDOM_NULL, PM_SEM_COUNTER, + PMDA_PMUNITS(0,0,1,0,0,PM_COUNT_ONE) }, }, + + /* mem.vmstat.nr_active_anon */ + { &_pm_proc_vmstat.nr_active_anon, + {PMDA_PMID(28,45), PM_TYPE_U64, PM_INDOM_NULL, PM_SEM_INSTANT, + PMDA_PMUNITS(0,0,1,0,0,PM_COUNT_ONE) }, }, + + /* mem.vmstat.nr_active_file */ + { &_pm_proc_vmstat.nr_active_file, + {PMDA_PMID(28,46), PM_TYPE_U64, PM_INDOM_NULL, PM_SEM_INSTANT, + PMDA_PMUNITS(0,0,1,0,0,PM_COUNT_ONE) }, }, + + /* mem.vmstat.nr_free_pages */ + { &_pm_proc_vmstat.nr_free_pages, + {PMDA_PMID(28,47), PM_TYPE_U64, PM_INDOM_NULL, PM_SEM_INSTANT, + PMDA_PMUNITS(0,0,1,0,0,PM_COUNT_ONE) }, }, + + /* mem.vmstat.nr_inactive_anon */ + { &_pm_proc_vmstat.nr_inactive_anon, + {PMDA_PMID(28,48), PM_TYPE_U64, PM_INDOM_NULL, PM_SEM_INSTANT, + PMDA_PMUNITS(0,0,1,0,0,PM_COUNT_ONE) }, }, + + /* mem.vmstat.nr_inactive_file */ + { &_pm_proc_vmstat.nr_inactive_file, + {PMDA_PMID(28,49), PM_TYPE_U64, PM_INDOM_NULL, PM_SEM_INSTANT, + PMDA_PMUNITS(0,0,1,0,0,PM_COUNT_ONE) }, }, + + /* mem.vmstat.nr_isolated_anon */ + { &_pm_proc_vmstat.nr_isolated_anon, + {PMDA_PMID(28,50), PM_TYPE_U64, PM_INDOM_NULL, PM_SEM_INSTANT, + PMDA_PMUNITS(0,0,1,0,0,PM_COUNT_ONE) }, }, + + /* mem.vmstat.nr_isolated_file */ + { &_pm_proc_vmstat.nr_isolated_file, + {PMDA_PMID(28,51), PM_TYPE_U64, PM_INDOM_NULL, PM_SEM_INSTANT, + PMDA_PMUNITS(0,0,1,0,0,PM_COUNT_ONE) }, }, + + /* mem.vmstat.nr_kernel_stack */ + { &_pm_proc_vmstat.nr_kernel_stack, + {PMDA_PMID(28,52), PM_TYPE_U64, PM_INDOM_NULL, PM_SEM_INSTANT, + PMDA_PMUNITS(0,0,1,0,0,PM_COUNT_ONE) }, }, + + /* mem.vmstat.nr_mlock */ + { &_pm_proc_vmstat.nr_mlock, + {PMDA_PMID(28,53), PM_TYPE_U64, PM_INDOM_NULL, PM_SEM_INSTANT, + PMDA_PMUNITS(0,0,1,0,0,PM_COUNT_ONE) }, }, + + /* mem.vmstat.nr_shmem */ + { &_pm_proc_vmstat.nr_shmem, + {PMDA_PMID(28,54), PM_TYPE_U64, PM_INDOM_NULL, PM_SEM_INSTANT, + PMDA_PMUNITS(0,0,1,0,0,PM_COUNT_ONE) }, }, + + /* mem.vmstat.nr_unevictable */ + { &_pm_proc_vmstat.nr_unevictable, + {PMDA_PMID(28,55), PM_TYPE_U64, PM_INDOM_NULL, PM_SEM_INSTANT, + PMDA_PMUNITS(0,0,1,0,0,PM_COUNT_ONE) }, }, + + /* mem.vmstat.nr_writeback_temp */ + { &_pm_proc_vmstat.nr_writeback_temp, + {PMDA_PMID(28,56), PM_TYPE_U64, PM_INDOM_NULL, PM_SEM_INSTANT, + PMDA_PMUNITS(0,0,1,0,0,PM_COUNT_ONE) }, }, + + /* mem.vmstat.compact_blocks_moved */ + { &_pm_proc_vmstat.compact_blocks_moved, + {PMDA_PMID(28,57), PM_TYPE_U64, PM_INDOM_NULL, PM_SEM_COUNTER, + PMDA_PMUNITS(0,0,1,0,0,PM_COUNT_ONE) }, }, + + /* mem.vmstat.compact_fail */ + { &_pm_proc_vmstat.compact_fail, + {PMDA_PMID(28,58), PM_TYPE_U64, PM_INDOM_NULL, PM_SEM_COUNTER, + PMDA_PMUNITS(0,0,1,0,0,PM_COUNT_ONE) }, }, + + /* mem.vmstat.compact_pagemigrate_failed */ + { &_pm_proc_vmstat.compact_pagemigrate_failed, + {PMDA_PMID(28,59), PM_TYPE_U64, PM_INDOM_NULL, PM_SEM_COUNTER, + PMDA_PMUNITS(0,0,1,0,0,PM_COUNT_ONE) }, }, + + /* mem.vmstat.compact_pages_moved */ + { &_pm_proc_vmstat.compact_pages_moved, + {PMDA_PMID(28,60), PM_TYPE_U64, PM_INDOM_NULL, PM_SEM_COUNTER, + PMDA_PMUNITS(0,0,1,0,0,PM_COUNT_ONE) }, }, + + /* mem.vmstat.compact_stall */ + { &_pm_proc_vmstat.compact_stall, + {PMDA_PMID(28,61), PM_TYPE_U64, PM_INDOM_NULL, PM_SEM_COUNTER, + PMDA_PMUNITS(0,0,1,0,0,PM_COUNT_ONE) }, }, + + /* mem.vmstat.compact_success */ + { &_pm_proc_vmstat.compact_success, + {PMDA_PMID(28,62), PM_TYPE_U64, PM_INDOM_NULL, PM_SEM_COUNTER, + PMDA_PMUNITS(0,0,1,0,0,PM_COUNT_ONE) }, }, + + /* mem.vmstat.pgalloc_dma32 */ + { &_pm_proc_vmstat.pgalloc_dma32, + {PMDA_PMID(28,63), PM_TYPE_U64, PM_INDOM_NULL, PM_SEM_COUNTER, + PMDA_PMUNITS(0,0,1,0,0,PM_COUNT_ONE) }, }, + + /* mem.vmstat.pgalloc_movable */ + { &_pm_proc_vmstat.pgalloc_movable, + {PMDA_PMID(28,64), PM_TYPE_U64, PM_INDOM_NULL, PM_SEM_COUNTER, + PMDA_PMUNITS(0,0,1,0,0,PM_COUNT_ONE) }, }, + + /* mem.vmstat.pgrefill_dma32 */ + { &_pm_proc_vmstat.pgrefill_dma32, + {PMDA_PMID(28,65), PM_TYPE_U64, PM_INDOM_NULL, PM_SEM_COUNTER, + PMDA_PMUNITS(0,0,1,0,0,PM_COUNT_ONE) }, }, + + /* mem.vmstat.pgrefill_movable */ + { &_pm_proc_vmstat.pgrefill_movable, + {PMDA_PMID(28,66), PM_TYPE_U64, PM_INDOM_NULL, PM_SEM_COUNTER, + PMDA_PMUNITS(0,0,1,0,0,PM_COUNT_ONE) }, }, + + /* mem.vmstat.pgscan_direct_dma32 */ + { &_pm_proc_vmstat.pgscan_direct_dma32, + {PMDA_PMID(28,67), PM_TYPE_U64, PM_INDOM_NULL, PM_SEM_COUNTER, + PMDA_PMUNITS(0,0,1,0,0,PM_COUNT_ONE) }, }, + + /* mem.vmstat.pgscan_direct_movable */ + { &_pm_proc_vmstat.pgscan_direct_movable, + {PMDA_PMID(28,68), PM_TYPE_U64, PM_INDOM_NULL, PM_SEM_COUNTER, + PMDA_PMUNITS(0,0,1,0,0,PM_COUNT_ONE) }, }, + + /* mem.vmstat.pgscan_kswapd_dma32 */ + { &_pm_proc_vmstat.pgscan_kswapd_dma32, + {PMDA_PMID(28,69), PM_TYPE_U64, PM_INDOM_NULL, PM_SEM_COUNTER, + PMDA_PMUNITS(0,0,1,0,0,PM_COUNT_ONE) }, }, + + /* mem.vmstat.pgscan_kswapd_movable */ + { &_pm_proc_vmstat.pgscan_kswapd_movable, + {PMDA_PMID(28,70), PM_TYPE_U64, PM_INDOM_NULL, PM_SEM_COUNTER, + PMDA_PMUNITS(0,0,1,0,0,PM_COUNT_ONE) }, }, + + /* mem.vmstat.pgsteal_dma32 */ + { &_pm_proc_vmstat.pgsteal_dma32, + {PMDA_PMID(28,71), PM_TYPE_U64, PM_INDOM_NULL, PM_SEM_COUNTER, + PMDA_PMUNITS(0,0,1,0,0,PM_COUNT_ONE) }, }, + + /* mem.vmstat.pgsteal_movable */ + { &_pm_proc_vmstat.pgsteal_movable, + {PMDA_PMID(28,72), PM_TYPE_U64, PM_INDOM_NULL, PM_SEM_COUNTER, + PMDA_PMUNITS(0,0,1,0,0,PM_COUNT_ONE) }, }, + + /* mem.vmstat.thp_fault_alloc */ + { &_pm_proc_vmstat.thp_fault_alloc, + {PMDA_PMID(28,73), PM_TYPE_U64, PM_INDOM_NULL, PM_SEM_COUNTER, + PMDA_PMUNITS(0,0,1,0,0,PM_COUNT_ONE) }, }, + + /* mem.vmstat.thp_fault_fallback */ + { &_pm_proc_vmstat.thp_fault_fallback, + {PMDA_PMID(28,74), PM_TYPE_U64, PM_INDOM_NULL, PM_SEM_COUNTER, + PMDA_PMUNITS(0,0,1,0,0,PM_COUNT_ONE) }, }, + + /* mem.vmstat.thp_collapse_alloc */ + { &_pm_proc_vmstat.thp_collapse_alloc, + {PMDA_PMID(28,75), PM_TYPE_U64, PM_INDOM_NULL, PM_SEM_COUNTER, + PMDA_PMUNITS(0,0,1,0,0,PM_COUNT_ONE) }, }, + + /* mem.vmstat.thp_collapse_alloc_failed */ + { &_pm_proc_vmstat.thp_collapse_alloc_failed, + {PMDA_PMID(28,76), PM_TYPE_U64, PM_INDOM_NULL, PM_SEM_COUNTER, + PMDA_PMUNITS(0,0,1,0,0,PM_COUNT_ONE) }, }, + + /* mem.vmstat.thp_split */ + { &_pm_proc_vmstat.thp_split, + {PMDA_PMID(28,77), PM_TYPE_U64, PM_INDOM_NULL, PM_SEM_COUNTER, + PMDA_PMUNITS(0,0,1,0,0,PM_COUNT_ONE) }, }, + + /* mem.vmstat.unevictable_pgs_cleared */ + { &_pm_proc_vmstat.unevictable_pgs_cleared, + {PMDA_PMID(28,78), PM_TYPE_U64, PM_INDOM_NULL, PM_SEM_COUNTER, + PMDA_PMUNITS(0,0,1,0,0,PM_COUNT_ONE) }, }, + + /* mem.vmstat.unevictable_pgs_culled */ + { &_pm_proc_vmstat.unevictable_pgs_culled, + {PMDA_PMID(28,79), PM_TYPE_U64, PM_INDOM_NULL, PM_SEM_COUNTER, + PMDA_PMUNITS(0,0,1,0,0,PM_COUNT_ONE) }, }, + + /* mem.vmstat.unevictable_pgs_mlocked */ + { &_pm_proc_vmstat.unevictable_pgs_mlocked, + {PMDA_PMID(28,80), PM_TYPE_U64, PM_INDOM_NULL, PM_SEM_COUNTER, + PMDA_PMUNITS(0,0,1,0,0,PM_COUNT_ONE) }, }, + + /* mem.vmstat.unevictable_pgs_mlockfreed */ + { &_pm_proc_vmstat.unevictable_pgs_mlockfreed, + {PMDA_PMID(28,81), PM_TYPE_U64, PM_INDOM_NULL, PM_SEM_COUNTER, + PMDA_PMUNITS(0,0,1,0,0,PM_COUNT_ONE) }, }, + + /* mem.vmstat.unevictable_pgs_munlocked */ + { &_pm_proc_vmstat.unevictable_pgs_munlocked, + {PMDA_PMID(28,82), PM_TYPE_U64, PM_INDOM_NULL, PM_SEM_COUNTER, + PMDA_PMUNITS(0,0,1,0,0,PM_COUNT_ONE) }, }, + + /* mem.vmstat.unevictable_pgs_rescued */ + { &_pm_proc_vmstat.unevictable_pgs_rescued, + {PMDA_PMID(28,83), PM_TYPE_U64, PM_INDOM_NULL, PM_SEM_COUNTER, + PMDA_PMUNITS(0,0,1,0,0,PM_COUNT_ONE) }, }, + + /* mem.vmstat.unevictable_pgs_scanned */ + { &_pm_proc_vmstat.unevictable_pgs_scanned, + {PMDA_PMID(28,84), PM_TYPE_U64, PM_INDOM_NULL, PM_SEM_COUNTER, + PMDA_PMUNITS(0,0,1,0,0,PM_COUNT_ONE) }, }, + + /* mem.vmstat.unevictable_pgs_stranded */ + { &_pm_proc_vmstat.unevictable_pgs_stranded, + {PMDA_PMID(28,85), PM_TYPE_U64, PM_INDOM_NULL, PM_SEM_COUNTER, + PMDA_PMUNITS(0,0,1,0,0,PM_COUNT_ONE) }, }, + + /* mem.vmstat.zone_reclaim_failed */ + { &_pm_proc_vmstat.zone_reclaim_failed, + {PMDA_PMID(28,86), PM_TYPE_U64, PM_INDOM_NULL, PM_SEM_COUNTER, + PMDA_PMUNITS(0,0,1,0,0,PM_COUNT_ONE) }, }, + + /* mem.vmstat.kswapd_low_wmark_hit_quickly */ + { &_pm_proc_vmstat.kswapd_low_wmark_hit_quickly, + {PMDA_PMID(28,87), PM_TYPE_U64, PM_INDOM_NULL, PM_SEM_COUNTER, + PMDA_PMUNITS(0,0,1,0,0,PM_COUNT_ONE) }, }, + + /* mem.vmstat.kswapd_high_wmark_hit_quickly */ + { &_pm_proc_vmstat.kswapd_high_wmark_hit_quickly, + {PMDA_PMID(28,88), PM_TYPE_U64, PM_INDOM_NULL, PM_SEM_COUNTER, + PMDA_PMUNITS(0,0,1,0,0,PM_COUNT_ONE) }, }, + + /* mem.vmstat.kswapd_skip_congestion_wait */ + { &_pm_proc_vmstat.kswapd_skip_congestion_wait, + {PMDA_PMID(28,89), PM_TYPE_U64, PM_INDOM_NULL, PM_SEM_COUNTER, + PMDA_PMUNITS(0,0,1,0,0,PM_COUNT_ONE) }, }, + + /* mem.vmstat.nr_anon_transparent_hugepages */ + { &_pm_proc_vmstat.nr_anon_transparent_hugepages, + {PMDA_PMID(28,90), PM_TYPE_U64, PM_INDOM_NULL, PM_SEM_INSTANT, + PMDA_PMUNITS(0,0,1,0,0,PM_COUNT_ONE) }, }, + + /* mem.vmstat.nr_dirtied */ + { &_pm_proc_vmstat.nr_dirtied, + {PMDA_PMID(28,91), PM_TYPE_U64, PM_INDOM_NULL, PM_SEM_COUNTER, + PMDA_PMUNITS(0,0,1,0,0,PM_COUNT_ONE) }, }, + + /* mem.vmstat.nr_dirty_background_threshold */ + { &_pm_proc_vmstat.nr_dirty_background_threshold, + {PMDA_PMID(28,92), PM_TYPE_U64, PM_INDOM_NULL, PM_SEM_INSTANT, + PMDA_PMUNITS(0,0,1,0,0,PM_COUNT_ONE) }, }, + + /* mem.vmstat.nr_dirty_threshold */ + { &_pm_proc_vmstat.nr_dirty_threshold, + {PMDA_PMID(28,93), PM_TYPE_U64, PM_INDOM_NULL, PM_SEM_INSTANT, + PMDA_PMUNITS(0,0,1,0,0,PM_COUNT_ONE) }, }, + + /* mem.vmstat.nr_written */ + { &_pm_proc_vmstat.nr_written, + {PMDA_PMID(28,94), PM_TYPE_U64, PM_INDOM_NULL, PM_SEM_COUNTER, + PMDA_PMUNITS(0,0,1,0,0,PM_COUNT_ONE) }, }, + + /* mem.vmstat.numa_foreign */ + { &_pm_proc_vmstat.numa_foreign, + {PMDA_PMID(28,95), PM_TYPE_U64, PM_INDOM_NULL, PM_SEM_COUNTER, + PMDA_PMUNITS(0,0,1,0,0,PM_COUNT_ONE) }, }, + + /* mem.vmstat.numa_hit */ + { &_pm_proc_vmstat.numa_hit, + {PMDA_PMID(28,96), PM_TYPE_U64, PM_INDOM_NULL, PM_SEM_COUNTER, + PMDA_PMUNITS(0,0,1,0,0,PM_COUNT_ONE) }, }, + + /* mem.vmstat.numa_interleave */ + { &_pm_proc_vmstat.numa_interleave, + {PMDA_PMID(28,97), PM_TYPE_U64, PM_INDOM_NULL, PM_SEM_COUNTER, + PMDA_PMUNITS(0,0,1,0,0,PM_COUNT_ONE) }, }, + + /* mem.vmstat.numa_local */ + { &_pm_proc_vmstat.numa_local, + {PMDA_PMID(28,98), PM_TYPE_U64, PM_INDOM_NULL, PM_SEM_COUNTER, + PMDA_PMUNITS(0,0,1,0,0,PM_COUNT_ONE) }, }, + + /* mem.vmstat.numa_miss */ + { &_pm_proc_vmstat.numa_miss, + {PMDA_PMID(28,99), PM_TYPE_U64, PM_INDOM_NULL, PM_SEM_COUNTER, + PMDA_PMUNITS(0,0,1,0,0,PM_COUNT_ONE) }, }, + + /* mem.vmstat.numa_other */ + { &_pm_proc_vmstat.numa_other, + {PMDA_PMID(28,100), PM_TYPE_U64, PM_INDOM_NULL, PM_SEM_COUNTER, + PMDA_PMUNITS(0,0,1,0,0,PM_COUNT_ONE) }, }, + +/* + * sysfs_kernel cluster + */ + /* sysfs.kernel.uevent_seqnum */ + { &sysfs_kernel.uevent_seqnum, + { PMDA_PMID(CLUSTER_SYSFS_KERNEL,0), PM_TYPE_U64, PM_INDOM_NULL, + PM_SEM_COUNTER, PMDA_PMUNITS(0,0,1,0,0,PM_COUNT_ONE) }, }, + +/* + * /proc/interrupts cluster + */ + /* kernel.all.interrupts.errors */ + { &irq_err_count, + { PMDA_PMID(CLUSTER_INTERRUPTS, 3), PM_TYPE_U32, PM_INDOM_NULL, + PM_SEM_COUNTER, PMDA_PMUNITS(0,0,1,0,0,PM_COUNT_ONE) }, }, + + /* kernel.percpu.interrupts.line[<N>] */ + { NULL, { PMDA_PMID(CLUSTER_INTERRUPT_LINES, 0), PM_TYPE_U32, + CPU_INDOM, PM_SEM_COUNTER, PMDA_PMUNITS(0,0,1,0,0,PM_COUNT_ONE) }, }, + + /* kernel.percpu.interrupts.[<other>] */ + { NULL, { PMDA_PMID(CLUSTER_INTERRUPT_OTHER, 0), PM_TYPE_U32, + CPU_INDOM, PM_SEM_COUNTER, PMDA_PMUNITS(0,0,1,0,0,PM_COUNT_ONE) }, }, + +/* + * disk.dm cluster + */ + /* disk.dm.read */ + { NULL, + { PMDA_PMID(CLUSTER_DM,0), KERNEL_ULONG, DM_INDOM, PM_SEM_COUNTER, + PMDA_PMUNITS(0,0,1,0,0,PM_COUNT_ONE) }, }, + + /* disk.dm.write */ + { NULL, + { PMDA_PMID(CLUSTER_DM,1), KERNEL_ULONG, DM_INDOM, PM_SEM_COUNTER, + PMDA_PMUNITS(0,0,1,0,0,PM_COUNT_ONE) }, }, + + /* disk.dm.total */ + { NULL, + { PMDA_PMID(CLUSTER_DM,2), KERNEL_ULONG, DM_INDOM, PM_SEM_COUNTER, + PMDA_PMUNITS(0,0,1,0,0,PM_COUNT_ONE) }, }, + + /* disk.dm.blkread */ + { NULL, + { PMDA_PMID(CLUSTER_DM,3), PM_TYPE_U64, DM_INDOM, PM_SEM_COUNTER, + PMDA_PMUNITS(0,0,1,0,0,PM_COUNT_ONE) }, }, + + /* disk.dm.blkwrite */ + { NULL, + { PMDA_PMID(CLUSTER_DM,4), PM_TYPE_U64, DM_INDOM, PM_SEM_COUNTER, + PMDA_PMUNITS(0,0,1,0,0,PM_COUNT_ONE) }, }, + + /* disk.dm.blktotal */ + { NULL, + { PMDA_PMID(CLUSTER_DM,5), PM_TYPE_U64, DM_INDOM, PM_SEM_COUNTER, + PMDA_PMUNITS(0,0,1,0,0,PM_COUNT_ONE) }, }, + + /* disk.dm.read_bytes */ + { NULL, + { PMDA_PMID(CLUSTER_DM,6), PM_TYPE_U32, DM_INDOM, PM_SEM_COUNTER, + PMDA_PMUNITS(1,0,0,PM_SPACE_KBYTE,0,0) }, }, + + /* disk.dm.write_bytes */ + { NULL, + { PMDA_PMID(CLUSTER_DM,7), PM_TYPE_U32, DM_INDOM, PM_SEM_COUNTER, + PMDA_PMUNITS(1,0,0,PM_SPACE_KBYTE,0,0) }, }, + + /* disk.dm.total_bytes */ + { NULL, + { PMDA_PMID(CLUSTER_DM,8), PM_TYPE_U32, DM_INDOM, PM_SEM_COUNTER, + PMDA_PMUNITS(1,0,0,PM_SPACE_KBYTE,0,0) }, }, + + /* disk.dm.read_merge */ + { NULL, + { PMDA_PMID(CLUSTER_DM,9), KERNEL_ULONG, DM_INDOM, PM_SEM_COUNTER, + PMDA_PMUNITS(0,0,1,0,0,PM_COUNT_ONE) }, }, + + /* disk.dm.write_merge */ + { NULL, + { PMDA_PMID(CLUSTER_DM,10), KERNEL_ULONG, DM_INDOM, PM_SEM_COUNTER, + PMDA_PMUNITS(0,0,1,0,0,PM_COUNT_ONE) }, }, + + /* disk.dm.avactive */ + { NULL, + { PMDA_PMID(CLUSTER_DM,11), PM_TYPE_U32, DM_INDOM, PM_SEM_COUNTER, + PMDA_PMUNITS(0,1,0,0,PM_TIME_MSEC,0) }, }, + + /* disk.dm.aveq */ + { NULL, + { PMDA_PMID(CLUSTER_DM,12), PM_TYPE_U32, DM_INDOM, PM_SEM_COUNTER, + PMDA_PMUNITS(0,1,0,0,PM_TIME_MSEC,0) }, }, + + /* hinv.map.dmname */ + { NULL, + { PMDA_PMID(CLUSTER_DM,13), PM_TYPE_STRING, DM_INDOM, PM_SEM_DISCRETE, + PMDA_PMUNITS(0,0,0,0,0,0) }, }, + + /* disk.dm.read_rawactive */ + { NULL, + { PMDA_PMID(CLUSTER_DM,14), PM_TYPE_U32, DM_INDOM, PM_SEM_COUNTER, + PMDA_PMUNITS(0,1,0,0,PM_TIME_MSEC,0) }, }, + + /* disk.dm.write_rawactive */ + { NULL, + { PMDA_PMID(CLUSTER_DM,15), PM_TYPE_U32, DM_INDOM, PM_SEM_COUNTER, + PMDA_PMUNITS(0,1,0,0,PM_TIME_MSEC,0) }, }, +}; + +char *linux_statspath = ""; /* optional path prefix for all stats files */ + +FILE * +linux_statsfile(const char *path, char *buffer, int size) +{ + snprintf(buffer, size, "%s%s", linux_statspath, path); + buffer[size-1] = '\0'; + return fopen(buffer, "r"); +} + +static void +linux_refresh(pmdaExt *pmda, int *need_refresh) +{ + int need_refresh_mtab = 0; + + if (need_refresh[CLUSTER_PARTITIONS]) + refresh_proc_partitions(INDOM(DISK_INDOM), INDOM(PARTITIONS_INDOM), INDOM(DM_INDOM)); + + if (need_refresh[CLUSTER_STAT]) + refresh_proc_stat(&proc_cpuinfo, &proc_stat); + + if (need_refresh[CLUSTER_CPUINFO]) + refresh_proc_cpuinfo(&proc_cpuinfo); + + if (need_refresh[CLUSTER_MEMINFO]) + refresh_proc_meminfo(&proc_meminfo); + + if (need_refresh[CLUSTER_NUMA_MEMINFO]) + refresh_numa_meminfo(&numa_meminfo, &proc_cpuinfo, &proc_stat); + + if (need_refresh[CLUSTER_LOADAVG]) + refresh_proc_loadavg(&proc_loadavg); + + if (need_refresh[CLUSTER_NET_DEV]) + refresh_proc_net_dev(INDOM(NET_DEV_INDOM)); + + if (need_refresh[CLUSTER_NET_ADDR]) + refresh_net_dev_addr(INDOM(NET_ADDR_INDOM)); + + if (need_refresh[CLUSTER_FILESYS] || need_refresh[CLUSTER_TMPFS]) + refresh_filesys(INDOM(FILESYS_INDOM), INDOM(TMPFS_INDOM)); + + if (need_refresh[CLUSTER_INTERRUPTS] || + need_refresh[CLUSTER_INTERRUPT_LINES] || + need_refresh[CLUSTER_INTERRUPT_OTHER]) + need_refresh_mtab |= refresh_interrupt_values(); + + if (need_refresh[CLUSTER_SWAPDEV]) + refresh_swapdev(INDOM(SWAPDEV_INDOM)); + + if (need_refresh[CLUSTER_NET_NFS]) + refresh_proc_net_rpc(&proc_net_rpc); + + if (need_refresh[CLUSTER_NET_SOCKSTAT]) + refresh_proc_net_sockstat(&proc_net_sockstat); + + if (need_refresh[CLUSTER_KERNEL_UNAME]) + uname(&kernel_uname); + + if (need_refresh[CLUSTER_NET_SNMP]) + refresh_proc_net_snmp(&_pm_proc_net_snmp); + + if (need_refresh[CLUSTER_SCSI]) + refresh_proc_scsi(&proc_scsi); + + if (need_refresh[CLUSTER_LV]) + refresh_dev_mapper(&dev_mapper); + + if (need_refresh[CLUSTER_NET_TCP]) + refresh_proc_net_tcp(&proc_net_tcp); + + if (need_refresh[CLUSTER_NET_NETSTAT]) + refresh_proc_net_netstat(&_pm_proc_net_netstat); + + if (need_refresh[CLUSTER_SLAB]) + refresh_proc_slabinfo(&proc_slabinfo); + + if (need_refresh[CLUSTER_SEM_LIMITS]) + refresh_sem_limits(&sem_limits); + + if (need_refresh[CLUSTER_MSG_LIMITS]) + refresh_msg_limits(&msg_limits); + + if (need_refresh[CLUSTER_SHM_LIMITS]) + refresh_shm_limits(&shm_limits); + + if (need_refresh[CLUSTER_UPTIME]) + refresh_proc_uptime(&proc_uptime); + + if (need_refresh[CLUSTER_VFS]) + refresh_proc_sys_fs(&proc_sys_fs); + + if (need_refresh[CLUSTER_VMSTAT]) + refresh_proc_vmstat(&_pm_proc_vmstat); + + if (need_refresh[CLUSTER_SYSFS_KERNEL]) + refresh_sysfs_kernel(&sysfs_kernel); + + if (need_refresh_mtab) + pmdaDynamicMetricTable(pmda); +} + +static int +linux_instance(pmInDom indom, int inst, char *name, __pmInResult **result, pmdaExt *pmda) +{ + __pmInDom_int *indomp = (__pmInDom_int *)&indom; + int need_refresh[NUM_CLUSTERS]; + + memset(need_refresh, 0, sizeof(need_refresh)); + switch (indomp->serial) { + case DISK_INDOM: + case PARTITIONS_INDOM: + case DM_INDOM: + need_refresh[CLUSTER_PARTITIONS]++; + break; + case CPU_INDOM: + need_refresh[CLUSTER_STAT]++; + break; + case NODE_INDOM: + need_refresh[CLUSTER_NUMA_MEMINFO]++; + break; + case LOADAVG_INDOM: + need_refresh[CLUSTER_LOADAVG]++; + break; + case NET_DEV_INDOM: + need_refresh[CLUSTER_NET_DEV]++; + break; + case FILESYS_INDOM: + need_refresh[CLUSTER_FILESYS]++; + break; + case TMPFS_INDOM: + need_refresh[CLUSTER_TMPFS]++; + break; + case SWAPDEV_INDOM: + need_refresh[CLUSTER_SWAPDEV]++; + break; + case NFS_INDOM: + case NFS3_INDOM: + case NFS4_CLI_INDOM: + case NFS4_SVR_INDOM: + need_refresh[CLUSTER_NET_NFS]++; + break; + case SCSI_INDOM: + need_refresh[CLUSTER_SCSI]++; + break; + case LV_INDOM: + need_refresh[CLUSTER_LV]++; + break; + case SLAB_INDOM: + need_refresh[CLUSTER_SLAB]++; + break; + case ICMPMSG_INDOM: + need_refresh[CLUSTER_NET_SNMP]++; + break; + /* no default label : pmdaInstance will pick up errors */ + } + + linux_refresh(pmda, need_refresh); + return pmdaInstance(indom, inst, name, result, pmda); +} + +/* + * callback provided to pmdaFetch + */ + +static int +linux_fetchCallBack(pmdaMetric *mdesc, unsigned int inst, pmAtomValue *atom) +{ + __pmID_int *idp = (__pmID_int *)&(mdesc->m_desc.pmid); + int i; + int sts; + long sl; + struct filesys *fs; + net_addr_t *addrp; + net_interface_t *netip; + + if (mdesc->m_user != NULL) { + /* + * The metric value is extracted directly via the address specified + * in metrictab. Note: not all metrics support this - those that + * don't have NULL for the m_user field in their respective + * metrictab slot. + */ + if (idp->cluster == CLUSTER_VMSTAT) { + if (!(_pm_have_proc_vmstat) || + *(__uint64_t *)mdesc->m_user == (__uint64_t)-1) + return 0; /* no value available on this kernel */ + } + else + if (idp->cluster == CLUSTER_NET_SNMP) { + __uint64_t value; + + /* network.icmpmsg has an indom - deal with it now */ + if (idp->item == 88 || idp->item == 89) { + if (inst > NR_ICMPMSG_COUNTERS) + return PM_ERR_INST; + value = *((__uint64_t *)mdesc->m_user + inst); + if (value == (__uint64_t)-1) + return 0; /* no value for this instance */ + atom->ull = value; + return 1; + } + if (*(__uint64_t *)mdesc->m_user == (__uint64_t)-1) + if (idp->item != 53) /* tcp.maxconn is special */ + return 0; /* no value available on this kernel */ + } + else + if (idp->cluster == CLUSTER_NET_NETSTAT) { + if (*(__uint64_t *)mdesc->m_user == (__uint64_t)-1) + return 0; /* no value available on this kernel */ + } + else + if (idp->cluster == CLUSTER_NET_NFS) { + /* + * check if rpc stats are available + */ + if (idp->item >= 20 && idp->item <= 27 && proc_net_rpc.client.errcode != 0) + /* no values available for client rpc/nfs - this is expected <= 2.0.36 */ + return 0; + else + if (idp->item >= 30 && idp->item <= 47 && proc_net_rpc.server.errcode != 0) + /* no values available - expected without /proc/net/rpc/nfsd */ + return 0; /* no values available */ + if (idp->item >= 51 && idp->item <= 57 && proc_net_rpc.server.errcode != 0) + /* no values available - expected without /proc/net/rpc/nfsd */ + return 0; /* no values available */ + } + if (idp->cluster == CLUSTER_SYSFS_KERNEL) { + /* no values available for udev metrics */ + if (idp->item == 0 && !sysfs_kernel.valid_uevent_seqnum) { + return 0; + } + } + + switch (mdesc->m_desc.type) { + case PM_TYPE_32: + atom->l = *(__int32_t *)mdesc->m_user; + break; + case PM_TYPE_U32: + atom->ul = *(__uint32_t *)mdesc->m_user; + break; + case PM_TYPE_64: + atom->ll = *(__int64_t *)mdesc->m_user; + break; + case PM_TYPE_U64: + atom->ull = *(__uint64_t *)mdesc->m_user; + break; + case PM_TYPE_FLOAT: + atom->f = *(float *)mdesc->m_user; + break; + case PM_TYPE_DOUBLE: + atom->d = *(double *)mdesc->m_user; + break; + case PM_TYPE_STRING: + atom->cp = (char *)mdesc->m_user; + break; + default: + return 0; + } + } + else + switch (idp->cluster) { + case CLUSTER_STAT: + /* + * All metrics from /proc/stat + */ + switch (idp->item) { + case 0: /* kernel.percpu.cpu.user */ + _pm_assign_utype(_pm_cputime_size, atom, + 1000 * (double)proc_stat.p_user[inst] / proc_stat.hz); + break; + case 1: /* kernel.percpu.cpu.nice */ + _pm_assign_utype(_pm_cputime_size, atom, + 1000 * (double)proc_stat.p_nice[inst] / proc_stat.hz); + break; + case 2: /* kernel.percpu.cpu.sys */ + _pm_assign_utype(_pm_cputime_size, atom, + 1000 * (double)proc_stat.p_sys[inst] / proc_stat.hz); + break; + case 3: /* kernel.percpu.cpu.idle */ + _pm_assign_utype(_pm_idletime_size, atom, + 1000 * (double)proc_stat.p_idle[inst] / proc_stat.hz); + break; + case 30: /* kernel.percpu.cpu.wait.total */ + _pm_assign_utype(_pm_cputime_size, atom, + 1000 * (double)proc_stat.p_wait[inst] / proc_stat.hz); + break; + case 31: /* kernel.percpu.cpu.intr */ + _pm_assign_utype(_pm_cputime_size, atom, + 1000 * ((double)proc_stat.p_irq[inst] + + (double)proc_stat.p_sirq[inst]) / proc_stat.hz); + break; + case 56: /* kernel.percpu.cpu.irq.soft */ + _pm_assign_utype(_pm_cputime_size, atom, + 1000 * (double)proc_stat.p_sirq[inst] / proc_stat.hz); + break; + case 57: /* kernel.percpu.cpu.irq.hard */ + _pm_assign_utype(_pm_cputime_size, atom, + 1000 * (double)proc_stat.p_irq[inst] / proc_stat.hz); + break; + case 58: /* kernel.percpu.cpu.steal */ + _pm_assign_utype(_pm_cputime_size, atom, + 1000 * (double)proc_stat.p_steal[inst] / proc_stat.hz); + break; + case 61: /* kernel.percpu.cpu.guest */ + _pm_assign_utype(_pm_cputime_size, atom, + 1000 * (double)proc_stat.p_guest[inst] / proc_stat.hz); + break; + case 76: /* kernel.percpu.cpu.vuser */ + _pm_assign_utype(_pm_cputime_size, atom, + 1000 * ((double)proc_stat.p_user[inst] - (double)proc_stat.p_guest[inst]) + / proc_stat.hz); + break; + case 62: /* kernel.pernode.cpu.user */ + _pm_assign_utype(_pm_cputime_size, atom, + 1000 * (double)proc_stat.n_user[inst] / proc_stat.hz); + break; + case 63: /* kernel.pernode.cpu.nice */ + _pm_assign_utype(_pm_cputime_size, atom, + 1000 * (double)proc_stat.n_nice[inst] / proc_stat.hz); + break; + case 64: /* kernel.pernode.cpu.sys */ + _pm_assign_utype(_pm_cputime_size, atom, + 1000 * (double)proc_stat.n_sys[inst] / proc_stat.hz); + break; + case 65: /* kernel.pernode.cpu.idle */ + _pm_assign_utype(_pm_idletime_size, atom, + 1000 * (double)proc_stat.n_idle[inst] / proc_stat.hz); + break; + case 69: /* kernel.pernode.cpu.wait.total */ + _pm_assign_utype(_pm_cputime_size, atom, + 1000 * (double)proc_stat.n_wait[inst] / proc_stat.hz); + break; + case 66: /* kernel.pernode.cpu.intr */ + _pm_assign_utype(_pm_cputime_size, atom, + 1000 * ((double)proc_stat.n_irq[inst] + + (double)proc_stat.n_sirq[inst]) / proc_stat.hz); + break; + case 70: /* kernel.pernode.cpu.irq.soft */ + _pm_assign_utype(_pm_cputime_size, atom, + 1000 * (double)proc_stat.n_sirq[inst] / proc_stat.hz); + break; + case 71: /* kernel.pernode.cpu.irq.hard */ + _pm_assign_utype(_pm_cputime_size, atom, + 1000 * (double)proc_stat.n_irq[inst] / proc_stat.hz); + break; + case 67: /* kernel.pernode.cpu.steal */ + _pm_assign_utype(_pm_cputime_size, atom, + 1000 * (double)proc_stat.n_steal[inst] / proc_stat.hz); + break; + case 68: /* kernel.pernode.cpu.guest */ + _pm_assign_utype(_pm_cputime_size, atom, + 1000 * (double)proc_stat.n_guest[inst] / proc_stat.hz); + break; + case 77: /* kernel.pernode.cpu.guest */ + _pm_assign_utype(_pm_cputime_size, atom, + 1000 * ((double)proc_stat.n_user[inst] - (double)proc_stat.n_guest[inst]) + / proc_stat.hz); + break; + + case 8: /* pagesin */ + if (_pm_have_proc_vmstat) + atom->ul = _pm_proc_vmstat.pswpin; + else + atom->ul = proc_stat.swap[0]; + break; + case 9: /* pagesout */ + if (_pm_have_proc_vmstat) + atom->ul = _pm_proc_vmstat.pswpout; + else + atom->ul = proc_stat.swap[1]; + break; + case 10: /* in */ + if (_pm_have_proc_vmstat) + return PM_ERR_APPVERSION; /* no swap operation counts in 2.6 */ + else + atom->ul = proc_stat.page[0]; + break; + case 11: /* out */ + if (_pm_have_proc_vmstat) + return PM_ERR_APPVERSION; /* no swap operation counts in 2.6 */ + else + atom->ul = proc_stat.page[1]; + break; + case 12: /* intr */ + _pm_assign_utype(_pm_intr_size, atom, proc_stat.intr); + break; + case 13: /* ctxt */ + _pm_assign_utype(_pm_ctxt_size, atom, proc_stat.ctxt); + break; + case 14: /* processes */ + _pm_assign_ulong(atom, proc_stat.processes); + break; + + case 20: /* kernel.all.cpu.user */ + _pm_assign_utype(_pm_cputime_size, atom, + 1000 * (double)proc_stat.user / proc_stat.hz); + break; + case 21: /* kernel.all.cpu.nice */ + _pm_assign_utype(_pm_cputime_size, atom, + 1000 * (double)proc_stat.nice / proc_stat.hz); + break; + case 22: /* kernel.all.cpu.sys */ + _pm_assign_utype(_pm_cputime_size, atom, + 1000 * (double)proc_stat.sys / proc_stat.hz); + break; + case 23: /* kernel.all.cpu.idle */ + _pm_assign_utype(_pm_idletime_size, atom, + 1000 * (double)proc_stat.idle / proc_stat.hz); + break; + case 34: /* kernel.all.cpu.intr */ + _pm_assign_utype(_pm_cputime_size, atom, + 1000 * ((double)proc_stat.irq + + (double)proc_stat.sirq) / proc_stat.hz); + break; + case 35: /* kernel.all.cpu.wait.total */ + _pm_assign_utype(_pm_cputime_size, atom, + 1000 * (double)proc_stat.wait / proc_stat.hz); + break; + case 53: /* kernel.all.cpu.irq.soft */ + _pm_assign_utype(_pm_cputime_size, atom, + 1000 * (double)proc_stat.sirq / proc_stat.hz); + break; + case 54: /* kernel.all.cpu.irq.hard */ + _pm_assign_utype(_pm_cputime_size, atom, + 1000 * (double)proc_stat.irq / proc_stat.hz); + break; + case 55: /* kernel.all.cpu.steal */ + _pm_assign_utype(_pm_cputime_size, atom, + 1000 * (double)proc_stat.steal / proc_stat.hz); + break; + case 60: /* kernel.all.cpu.guest */ + _pm_assign_utype(_pm_cputime_size, atom, + 1000 * (double)proc_stat.guest / proc_stat.hz); + break; + case 78: /* kernel.all.cpu.vuser */ + _pm_assign_utype(_pm_cputime_size, atom, + 1000 * ((double)proc_stat.user - (double)proc_stat.guest) + / proc_stat.hz); + break; + + case 19: /* hinv.nnode */ + atom->ul = indomtab[NODE_INDOM].it_numinst; + break; + case 32: /* hinv.ncpu */ + atom->ul = indomtab[CPU_INDOM].it_numinst; + break; + case 33: /* hinv.ndisk */ + atom->ul = pmdaCacheOp(INDOM(DISK_INDOM), PMDA_CACHE_SIZE_ACTIVE); + break; + + case 48: /* kernel.all.hz */ + atom->ul = proc_stat.hz; + break; + + default: + /* + * Disk metrics used to be fetched from /proc/stat (2.2 kernels) + * but have since moved to /proc/partitions (2.4 kernels) and + * /proc/diskstats (2.6 kernels). We preserve the cluster number + * (middle bits of a PMID) for backward compatibility. + * + * Note that proc_partitions_fetch() will return PM_ERR_PMID + * if we have tried to fetch an unknown metric. + */ + return proc_partitions_fetch(mdesc, inst, atom); + } + break; + + case CLUSTER_UPTIME: /* uptime */ + switch (idp->item) { + case 0: + /* + * kernel.all.uptime (in seconds) + * contributed by "gilly" <gilly@exanet.com> + * modified by Mike Mason" <mmlnx@us.ibm.com> + */ + atom->ul = proc_uptime.uptime; + break; + case 1: + /* + * kernel.all.idletime (in seconds) + * contributed by "Mike Mason" <mmlnx@us.ibm.com> + */ + atom->ul = proc_uptime.idletime; + break; + default: + return PM_ERR_PMID; + } + break; + + case CLUSTER_MEMINFO: /* mem */ + switch (idp->item) { + case 0: /* mem.physmem (in kbytes) */ + if (!MEMINFO_VALID_VALUE(proc_meminfo.MemTotal)) + return 0; /* no values available */ + atom->ull = proc_meminfo.MemTotal >> 10; + break; + case 1: /* mem.util.used (in kbytes) */ + if (!MEMINFO_VALID_VALUE(proc_meminfo.MemTotal) || + !MEMINFO_VALID_VALUE(proc_meminfo.MemFree)) + return 0; /* no values available */ + atom->ull = (proc_meminfo.MemTotal - proc_meminfo.MemFree) >> 10; + break; + case 2: /* mem.util.free (in kbytes) */ + if (!MEMINFO_VALID_VALUE(proc_meminfo.MemFree)) + return 0; /* no values available */ + atom->ull = proc_meminfo.MemFree >> 10; + break; + case 3: /* mem.util.shared (in kbytes) */ + /* + * If this metric is exported by the running kernel, it is always + * zero (deprecated). PCP exports it for compatibility with older + * PCP monitoring tools, e.g. pmgsys running on IRIX(TM). + */ + if (!MEMINFO_VALID_VALUE(proc_meminfo.MemShared)) + return 0; /* no values available */ + atom->ull = proc_meminfo.MemShared >> 10; + break; + case 4: /* mem.util.bufmem (in kbytes) */ + if (!MEMINFO_VALID_VALUE(proc_meminfo.Buffers)) + return 0; /* no values available */ + atom->ull = proc_meminfo.Buffers >> 10; + break; + case 5: /* mem.util.cached (in kbytes) */ + if (!MEMINFO_VALID_VALUE(proc_meminfo.Cached)) + return 0; /* no values available */ + atom->ull = proc_meminfo.Cached >> 10; + break; + case 6: /* swap.length (in bytes) */ + if (!MEMINFO_VALID_VALUE(proc_meminfo.SwapTotal)) + return 0; /* no values available */ + atom->ull = proc_meminfo.SwapTotal; + break; + case 7: /* swap.used (in bytes) */ + if (!MEMINFO_VALID_VALUE(proc_meminfo.SwapTotal) || + !MEMINFO_VALID_VALUE(proc_meminfo.SwapFree)) + return 0; /* no values available */ + atom->ull = proc_meminfo.SwapTotal - proc_meminfo.SwapFree; + break; + case 8: /* swap.free (in bytes) */ + if (!MEMINFO_VALID_VALUE(proc_meminfo.SwapFree)) + return 0; /* no values available */ + atom->ull = proc_meminfo.SwapFree; + break; + case 9: /* hinv.physmem (in mbytes) */ + if (!MEMINFO_VALID_VALUE(proc_meminfo.MemTotal)) + return 0; /* no values available */ + atom->ul = proc_meminfo.MemTotal >> 20; + break; + case 10: /* mem.freemem (in kbytes) */ + if (!MEMINFO_VALID_VALUE(proc_meminfo.MemFree)) + return 0; /* no values available */ + atom->ull = proc_meminfo.MemFree >> 10; + break; + case 11: /* hinv.pagesize (in bytes) */ + atom->ul = _pm_system_pagesize; + break; + case 12: /* mem.util.other (in kbytes) */ + /* other = used - (cached+buffers) */ + if (!MEMINFO_VALID_VALUE(proc_meminfo.MemTotal) || + !MEMINFO_VALID_VALUE(proc_meminfo.MemFree) || + !MEMINFO_VALID_VALUE(proc_meminfo.Cached) || + !MEMINFO_VALID_VALUE(proc_meminfo.Buffers)) + return 0; /* no values available */ + sl = (proc_meminfo.MemTotal - + proc_meminfo.MemFree - + proc_meminfo.Cached - + proc_meminfo.Buffers) >> 10; + atom->ull = sl >= 0 ? sl : 0; + break; + case 13: /* mem.util.swapCached (in kbytes) */ + if (!MEMINFO_VALID_VALUE(proc_meminfo.SwapCached)) + return 0; /* no values available */ + atom->ull = proc_meminfo.SwapCached >> 10; + break; + case 14: /* mem.util.active (in kbytes) */ + if (!MEMINFO_VALID_VALUE(proc_meminfo.Active)) + return 0; /* no values available */ + atom->ull = proc_meminfo.Active >> 10; + break; + case 15: /* mem.util.inactive (in kbytes) */ + if (!MEMINFO_VALID_VALUE(proc_meminfo.Inactive)) + return 0; /* no values available */ + atom->ull = proc_meminfo.Inactive >> 10; + break; + case 16: /* mem.util.highTotal (in kbytes) */ + if (!MEMINFO_VALID_VALUE(proc_meminfo.HighTotal)) + return 0; /* no values available */ + atom->ull = proc_meminfo.HighTotal >> 10; + break; + case 17: /* mem.util.highFree (in kbytes) */ + if (!MEMINFO_VALID_VALUE(proc_meminfo.HighFree)) + return 0; /* no values available */ + atom->ull = proc_meminfo.HighFree >> 10; + break; + case 18: /* mem.util.lowTotal (in kbytes) */ + if (!MEMINFO_VALID_VALUE(proc_meminfo.LowTotal)) + return 0; /* no values available */ + atom->ull = proc_meminfo.LowTotal >> 10; + break; + case 19: /* mem.util.lowFree (in kbytes) */ + if (!MEMINFO_VALID_VALUE(proc_meminfo.LowFree)) + return 0; /* no values available */ + atom->ull = proc_meminfo.LowFree >> 10; + break; + case 20: /* mem.util.swapTotal (in kbytes) */ + if (!MEMINFO_VALID_VALUE(proc_meminfo.SwapTotal)) + return 0; /* no values available */ + atom->ull = proc_meminfo.SwapTotal >> 10; + break; + case 21: /* mem.util.swapFree (in kbytes) */ + if (!MEMINFO_VALID_VALUE(proc_meminfo.SwapFree)) + return 0; /* no values available */ + atom->ull = proc_meminfo.SwapFree >> 10; + break; + case 22: /* mem.util.dirty (in kbytes) */ + if (!MEMINFO_VALID_VALUE(proc_meminfo.Dirty)) + return 0; /* no values available */ + atom->ull = proc_meminfo.Dirty >> 10; + break; + case 23: /* mem.util.writeback (in kbytes) */ + if (!MEMINFO_VALID_VALUE(proc_meminfo.Writeback)) + return 0; /* no values available */ + atom->ull = proc_meminfo.Writeback >> 10; + break; + case 24: /* mem.util.mapped (in kbytes) */ + if (!MEMINFO_VALID_VALUE(proc_meminfo.Mapped)) + return 0; /* no values available */ + atom->ull = proc_meminfo.Mapped >> 10; + break; + case 25: /* mem.util.slab (in kbytes) */ + if (!MEMINFO_VALID_VALUE(proc_meminfo.Slab)) + return 0; /* no values available */ + atom->ull = proc_meminfo.Slab >> 10; + break; + case 26: /* mem.util.committed_AS (in kbytes) */ + if (!MEMINFO_VALID_VALUE(proc_meminfo.Committed_AS)) + return 0; /* no values available */ + atom->ull = proc_meminfo.Committed_AS >> 10; + break; + case 27: /* mem.util.pageTables (in kbytes) */ + if (!MEMINFO_VALID_VALUE(proc_meminfo.PageTables)) + return 0; /* no values available */ + atom->ull = proc_meminfo.PageTables >> 10; + break; + case 28: /* mem.util.reverseMaps (in kbytes) */ + if (!MEMINFO_VALID_VALUE(proc_meminfo.ReverseMaps)) + return 0; /* no values available */ + atom->ull = proc_meminfo.ReverseMaps >> 10; + break; + case 29: /* mem.util.clean_cache (in kbytes) */ + /* clean=cached-(dirty+writeback) */ + if (!MEMINFO_VALID_VALUE(proc_meminfo.Cached) || + !MEMINFO_VALID_VALUE(proc_meminfo.Dirty) || + !MEMINFO_VALID_VALUE(proc_meminfo.Writeback)) + return 0; /* no values available */ + sl = (proc_meminfo.Cached - + proc_meminfo.Dirty - + proc_meminfo.Writeback) >> 10; + atom->ull = sl >= 0 ? sl : 0; + break; + case 30: /* mem.util.anonpages */ + if (!MEMINFO_VALID_VALUE(proc_meminfo.AnonPages)) + return 0; /* no values available */ + atom->ull = proc_meminfo.AnonPages >> 10; + break; + case 31: /* mem.util.commitLimit (in kbytes) */ + if (!MEMINFO_VALID_VALUE(proc_meminfo.CommitLimit)) + return 0; /* no values available */ + atom->ull = proc_meminfo.CommitLimit >> 10; + break; + case 32: /* mem.util.bounce */ + if (!MEMINFO_VALID_VALUE(proc_meminfo.Bounce)) + return 0; /* no values available */ + atom->ull = proc_meminfo.Bounce >> 10; + break; + case 33: /* mem.util.NFS_Unstable */ + if (!MEMINFO_VALID_VALUE(proc_meminfo.NFS_Unstable)) + return 0; /* no values available */ + atom->ull = proc_meminfo.NFS_Unstable >> 10; + break; + case 34: /* mem.util.slabReclaimable */ + if (!MEMINFO_VALID_VALUE(proc_meminfo.SlabReclaimable)) + return 0; /* no values available */ + atom->ull = proc_meminfo.SlabReclaimable >> 10; + break; + case 35: /* mem.util.slabUnreclaimable */ + if (!MEMINFO_VALID_VALUE(proc_meminfo.SlabUnreclaimable)) + return 0; /* no values available */ + atom->ull = proc_meminfo.SlabUnreclaimable >> 10; + break; + case 36: /* mem.util.active_anon */ + if (!MEMINFO_VALID_VALUE(proc_meminfo.Active_anon)) + return 0; /* no values available */ + atom->ull = proc_meminfo.Active_anon >> 10; + break; + case 37: /* mem.util.inactive_anon */ + if (!MEMINFO_VALID_VALUE(proc_meminfo.Inactive_anon)) + return 0; /* no values available */ + atom->ull = proc_meminfo.Inactive_anon >> 10; + break; + case 38: /* mem.util.active_file */ + if (!MEMINFO_VALID_VALUE(proc_meminfo.Active_file)) + return 0; /* no values available */ + atom->ull = proc_meminfo.Active_file >> 10; + break; + case 39: /* mem.util.inactive_file */ + if (!MEMINFO_VALID_VALUE(proc_meminfo.Inactive_file)) + return 0; /* no values available */ + atom->ull = proc_meminfo.Inactive_file >> 10; + break; + case 40: /* mem.util.unevictable */ + if (!MEMINFO_VALID_VALUE(proc_meminfo.Unevictable)) + return 0; /* no values available */ + atom->ull = proc_meminfo.Unevictable >> 10; + break; + case 41: /* mem.util.mlocked */ + if (!MEMINFO_VALID_VALUE(proc_meminfo.Mlocked)) + return 0; /* no values available */ + atom->ull = proc_meminfo.Mlocked >> 10; + break; + case 42: /* mem.util.shmem */ + if (!MEMINFO_VALID_VALUE(proc_meminfo.Shmem)) + return 0; /* no values available */ + atom->ull = proc_meminfo.Shmem >> 10; + break; + case 43: /* mem.util.kernelStack */ + if (!MEMINFO_VALID_VALUE(proc_meminfo.KernelStack)) + return 0; /* no values available */ + atom->ull = proc_meminfo.KernelStack >> 10; + break; + case 44: /* mem.util.hugepagesTotal */ + if (!MEMINFO_VALID_VALUE(proc_meminfo.HugepagesTotal)) + return 0; /* no values available */ + atom->ull = proc_meminfo.HugepagesTotal; + break; + case 45: /* mem.util.hugepagesFree */ + if (!MEMINFO_VALID_VALUE(proc_meminfo.HugepagesFree)) + return 0; /* no values available */ + atom->ull = proc_meminfo.HugepagesFree; + break; + case 46: /* mem.util.hugepagesRsvd */ + if (!MEMINFO_VALID_VALUE(proc_meminfo.HugepagesRsvd)) + return 0; /* no values available */ + atom->ull = proc_meminfo.HugepagesRsvd; + break; + case 47: /* mem.util.hugepagesSurp */ + if (!MEMINFO_VALID_VALUE(proc_meminfo.HugepagesSurp)) + return 0; /* no values available */ + atom->ull = proc_meminfo.HugepagesSurp; + break; + case 48: /* mem.util.directMap4k */ + if (!MEMINFO_VALID_VALUE(proc_meminfo.directMap4k)) + return 0; /* no values available */ + atom->ull = proc_meminfo.directMap4k >> 10; + break; + case 49: /* mem.util.directMap2M */ + if (!MEMINFO_VALID_VALUE(proc_meminfo.directMap2M)) + return 0; /* no values available */ + atom->ull = proc_meminfo.directMap2M >> 10; + break; + case 50: /* mem.util.vmallocTotal */ + if (!MEMINFO_VALID_VALUE(proc_meminfo.VmallocTotal)) + return 0; /* no values available */ + atom->ull = proc_meminfo.VmallocTotal >> 10; + break; + case 51: /* mem.util.vmallocUsed */ + if (!MEMINFO_VALID_VALUE(proc_meminfo.VmallocUsed)) + return 0; /* no values available */ + atom->ull = proc_meminfo.VmallocUsed >> 10; + break; + case 52: /* mem.util.vmallocChunk */ + if (!MEMINFO_VALID_VALUE(proc_meminfo.VmallocChunk)) + return 0; /* no values available */ + atom->ull = proc_meminfo.VmallocChunk >> 10; + break; + case 53: /* mem.util.mmap_copy */ + if (!MEMINFO_VALID_VALUE(proc_meminfo.MmapCopy)) + return 0; /* no values available */ + atom->ull = proc_meminfo.MmapCopy >> 10; + break; + case 54: /* mem.util.quicklists */ + if (!MEMINFO_VALID_VALUE(proc_meminfo.Quicklists)) + return 0; /* no values available */ + atom->ull = proc_meminfo.Quicklists >> 10; + break; + case 55: /* mem.util.corrupthardware */ + if (!MEMINFO_VALID_VALUE(proc_meminfo.HardwareCorrupted)) + return 0; /* no values available */ + atom->ull = proc_meminfo.HardwareCorrupted >> 10; + break; + case 56: /* mem.util.anonhugepages */ + if (!MEMINFO_VALID_VALUE(proc_meminfo.AnonHugePages)) + return 0; /* no values available */ + atom->ull = proc_meminfo.AnonHugePages >> 10; + break; + case 57: /* mem.util.directMap1G */ + if (!MEMINFO_VALID_VALUE(proc_meminfo.directMap1G)) + return 0; /* no values available */ + atom->ull = proc_meminfo.directMap1G >> 10; + break; + case 58: /* mem.util.available */ + if (!MEMINFO_VALID_VALUE(proc_meminfo.MemAvailable)) + return 0; /* no values available */ + atom->ull = proc_meminfo.MemAvailable >> 10; + break; + default: + return PM_ERR_PMID; + } + break; + + case CLUSTER_LOADAVG: + switch(idp->item) { + case 0: /* kernel.all.load */ + if (inst == 1) + atom->f = proc_loadavg.loadavg[0]; + else + if (inst == 5) + atom->f = proc_loadavg.loadavg[1]; + else + if (inst == 15) + atom->f = proc_loadavg.loadavg[2]; + else + return PM_ERR_INST; + break; + case 1: /* kernel.all.lastpid -- added by "Mike Mason" <mmlnx@us.ibm.com> */ + atom->ul = proc_loadavg.lastpid; + break; + case 2: /* kernel.all.runnable */ + atom->ul = proc_loadavg.runnable; + break; + case 3: /* kernel.all.nprocs */ + atom->ul = proc_loadavg.nprocs; + break; + default: + return PM_ERR_PMID; + } + break; + + case CLUSTER_NET_DEV: /* network.interface */ + if (idp->item == 27) { /* hinv.ninterface */ + atom->ul = pmdaCacheOp(INDOM(NET_DEV_INDOM), PMDA_CACHE_SIZE_ACTIVE); + break; + } + sts = pmdaCacheLookup(INDOM(NET_DEV_INDOM), inst, NULL, (void **)&netip); + if (sts < 0) + return sts; + if (idp->item <= 15) { + /* network.interface.{in,out} */ + atom->ull = netip->counters[idp->item]; + } + else + switch (idp->item) { + case 16: /* network.interface.total.bytes */ + atom->ull = netip->counters[0] + netip->counters[8]; + break; + case 17: /* network.interface.total.packets */ + atom->ull = netip->counters[1] + netip->counters[9]; + break; + case 18: /* network.interface.total.errors */ + atom->ull = netip->counters[2] + netip->counters[10]; + break; + case 19: /* network.interface.total.drops */ + atom->ull = netip->counters[3] + netip->counters[11]; + break; + case 20: /* network.interface.total.mcasts */ + /* + * NOTE: there is no network.interface.out.mcasts metric + * so this total only includes network.interface.in.mcasts + */ + atom->ull = netip->counters[7]; + break; + case 21: /* network.interface.mtu */ + if (!netip->ioc.mtu) + return 0; + atom->ul = netip->ioc.mtu; + break; + case 22: /* network.interface.speed */ + if (!netip->ioc.speed) + return 0; + atom->f = ((float)netip->ioc.speed * 1000000) / 8 / 1024 / 1024; + break; + case 23: /* network.interface.baudrate */ + if (!netip->ioc.speed) + return 0; + atom->ul = ((long long)netip->ioc.speed * 1000000 / 8); + break; + case 24: /* network.interface.duplex */ + if (!netip->ioc.duplex) + return 0; + atom->ul = netip->ioc.duplex; + break; + case 25: /* network.interface.up */ + atom->ul = netip->ioc.linkup; + break; + case 26: /* network.interface.running */ + atom->ul = netip->ioc.running; + break; + default: + return PM_ERR_PMID; + } + break; + + case CLUSTER_NET_ADDR: + sts = pmdaCacheLookup(INDOM(NET_ADDR_INDOM), inst, NULL, (void **)&addrp); + if (sts < 0) + return sts; + if (sts != PMDA_CACHE_ACTIVE) + return PM_ERR_INST; + switch (idp->item) { + case 0: /* network.interface.inet_addr */ + if (addrp->has_inet == 0) + return 0; + atom->cp = addrp->inet; + break; + case 1: /* network.interface.ipv6_addr */ + if (addrp->has_ipv6 == 0) + return 0; + atom->cp = addrp->ipv6; + break; + case 2: /* network.interface.ipv6_scope */ + if (addrp->has_ipv6 == 0) + return 0; + atom->cp = lookup_ipv6_scope(addrp->ipv6scope); + break; + case 3: /* network.interface.hw_addr */ + if (addrp->has_hw == 0) + return 0; + atom->cp = addrp->hw_addr; + break; + default: + return PM_ERR_PMID; + } + break; + + case CLUSTER_FILESYS: + if (idp->item == 0) + atom->ul = pmdaCacheOp(INDOM(FILESYS_INDOM), PMDA_CACHE_SIZE_ACTIVE); + else { + struct statfs *sbuf; + __uint64_t ull, used; + + sts = pmdaCacheLookup(INDOM(FILESYS_INDOM), inst, NULL, (void **)&fs); + if (sts < 0) + return sts; + if (sts != PMDA_CACHE_ACTIVE) + return PM_ERR_INST; + + sbuf = &fs->stats; + if (!(fs->flags & FSF_FETCHED)) { + if (statfs(fs->path, sbuf) < 0) + return PM_ERR_INST; + fs->flags |= FSF_FETCHED; + } + + switch (idp->item) { + case 1: /* filesys.capacity */ + ull = (__uint64_t)sbuf->f_blocks; + atom->ull = ull * sbuf->f_bsize / 1024; + break; + case 2: /* filesys.used */ + used = (__uint64_t)(sbuf->f_blocks - sbuf->f_bfree); + atom->ull = used * sbuf->f_bsize / 1024; + break; + case 3: /* filesys.free */ + ull = (__uint64_t)sbuf->f_bfree; + atom->ull = ull * sbuf->f_bsize / 1024; + break; + case 4: /* filesys.maxfiles */ + atom->ul = sbuf->f_files; + break; + case 5: /* filesys.usedfiles */ + atom->ul = sbuf->f_files - sbuf->f_ffree; + break; + case 6: /* filesys.freefiles */ + atom->ul = sbuf->f_ffree; + break; + case 7: /* filesys.mountdir */ + atom->cp = fs->path; + break; + case 8: /* filesys.full */ + used = (__uint64_t)(sbuf->f_blocks - sbuf->f_bfree); + ull = used + (__uint64_t)sbuf->f_bavail; + atom->d = (100.0 * (double)used) / (double)ull; + break; + case 9: /* filesys.blocksize -- added by Mike Mason <mmlnx@us.ibm.com> */ + atom->ul = sbuf->f_bsize; + break; + case 10: /* filesys.avail -- added by Mike Mason <mmlnx@us.ibm.com> */ + ull = (__uint64_t)sbuf->f_bavail; + atom->ull = ull * sbuf->f_bsize / 1024; + break; + case 11: /* filesys.readonly */ + atom->ul = (scan_filesys_options(fs->options, "ro") != NULL); + break; + default: + return PM_ERR_PMID; + } + } + break; + + case CLUSTER_TMPFS: { + struct statfs *sbuf; + __uint64_t ull, used; + + sts = pmdaCacheLookup(INDOM(TMPFS_INDOM), inst, NULL, (void **)&fs); + if (sts < 0) + return sts; + if (sts != PMDA_CACHE_ACTIVE) + return PM_ERR_INST; + + sbuf = &fs->stats; + if (!(fs->flags & FSF_FETCHED)) { + if (statfs(fs->path, sbuf) < 0) + return PM_ERR_INST; + fs->flags |= FSF_FETCHED; + } + + switch (idp->item) { + case 1: /* tmpfs.capacity */ + ull = (__uint64_t)sbuf->f_blocks; + atom->ull = ull * sbuf->f_bsize / 1024; + break; + case 2: /* tmpfs.used */ + used = (__uint64_t)(sbuf->f_blocks - sbuf->f_bfree); + atom->ull = used * sbuf->f_bsize / 1024; + break; + case 3: /* tmpfs.free */ + ull = (__uint64_t)sbuf->f_bfree; + atom->ull = ull * sbuf->f_bsize / 1024; + break; + case 4: /* tmpfs.maxfiles */ + atom->ul = sbuf->f_files; + break; + case 5: /* tmpfs.usedfiles */ + atom->ul = sbuf->f_files - sbuf->f_ffree; + break; + case 6: /* tmpfs.freefiles */ + atom->ul = sbuf->f_ffree; + break; + case 7: /* tmpfs.full */ + used = (__uint64_t)(sbuf->f_blocks - sbuf->f_bfree); + ull = used + (__uint64_t)sbuf->f_bavail; + atom->d = (100.0 * (double)used) / (double)ull; + break; + default: + return PM_ERR_PMID; + } + } + break; + + case CLUSTER_SWAPDEV: { + struct swapdev *swap; + + sts = pmdaCacheLookup(INDOM(SWAPDEV_INDOM), inst, NULL, (void **)&swap); + if (sts < 0) + return sts; + if (sts != PMDA_CACHE_ACTIVE) + return PM_ERR_INST; + + switch (idp->item) { + case 0: /* swapdev.free (kbytes) */ + atom->ul = swap->size - swap->used; + break; + case 1: /* swapdev.length (kbytes) */ + case 2: /* swapdev.maxswap (kbytes) */ + atom->ul = swap->size; + break; + case 3: /* swapdev.vlength (kbytes) */ + atom->ul = 0; + break; + case 4: /* swapdev.priority */ + atom->l = swap->priority; + break; + default: + return PM_ERR_PMID; + } + break; + } + + case CLUSTER_NET_NFS: + switch (idp->item) { + case 1: /* nfs.client.calls */ + if (proc_net_rpc.client.errcode != 0) + return 0; /* no values available */ + for (atom->ul=0, i=0; i < NR_RPC_COUNTERS; i++) { + atom->ul += proc_net_rpc.client.reqcounts[i]; + } + break; + case 50: /* nfs.server.calls */ + if (proc_net_rpc.server.errcode != 0) + return 0; /* no values available */ + for (atom->ul=0, i=0; i < NR_RPC_COUNTERS; i++) { + atom->ul += proc_net_rpc.server.reqcounts[i]; + } + break; + case 4: /* nfs.client.reqs */ + if (proc_net_rpc.client.errcode != 0) + return 0; /* no values available */ + if (inst < NR_RPC_COUNTERS) + atom->ul = proc_net_rpc.client.reqcounts[inst]; + else + return PM_ERR_INST; + break; + + case 12: /* nfs.server.reqs */ + if (proc_net_rpc.server.errcode != 0) + return 0; /* no values available */ + if (inst < NR_RPC_COUNTERS) + atom->ul = proc_net_rpc.server.reqcounts[inst]; + else + return PM_ERR_INST; + break; + + case 60: /* nfs3.client.calls */ + if (proc_net_rpc.client.errcode != 0) + return 0; /* no values available */ + for (atom->ul=0, i=0; i < NR_RPC3_COUNTERS; i++) { + atom->ul += proc_net_rpc.client.reqcounts3[i]; + } + break; + + case 62: /* nfs3.server.calls */ + if (proc_net_rpc.server.errcode != 0) + return 0; /* no values available */ + for (atom->ul=0, i=0; i < NR_RPC3_COUNTERS; i++) { + atom->ul += proc_net_rpc.server.reqcounts3[i]; + } + break; + + case 61: /* nfs3.client.reqs */ + if (proc_net_rpc.client.errcode != 0) + return 0; /* no values available */ + if (inst < NR_RPC3_COUNTERS) + atom->ul = proc_net_rpc.client.reqcounts3[inst]; + else + return PM_ERR_INST; + break; + + case 63: /* nfs3.server.reqs */ + if (proc_net_rpc.server.errcode != 0) + return 0; /* no values available */ + if (inst < NR_RPC3_COUNTERS) + atom->ul = proc_net_rpc.server.reqcounts3[inst]; + else + return PM_ERR_INST; + break; + + case 64: /* nfs4.client.calls */ + if (proc_net_rpc.client.errcode != 0) + return 0; /* no values available */ + for (atom->ul=0, i=0; i < NR_RPC4_CLI_COUNTERS; i++) { + atom->ul += proc_net_rpc.client.reqcounts4[i]; + } + break; + + case 66: /* nfs4.server.calls */ + if (proc_net_rpc.server.errcode != 0) + return 0; /* no values available */ + for (atom->ul=0, i=0; i < NR_RPC4_SVR_COUNTERS; i++) { + atom->ul += proc_net_rpc.server.reqcounts4[i]; + } + break; + + case 65: /* nfs4.client.reqs */ + if (proc_net_rpc.client.errcode != 0) + return 0; /* no values available */ + if (inst < NR_RPC4_CLI_COUNTERS) + atom->ul = proc_net_rpc.client.reqcounts4[inst]; + else + return PM_ERR_INST; + break; + + case 67: /* nfs4.server.reqs */ + if (proc_net_rpc.server.errcode != 0) + return 0; /* no values available */ + if (inst < NR_RPC4_SVR_COUNTERS) + atom->ul = proc_net_rpc.server.reqcounts4[inst]; + else + return PM_ERR_INST; + break; + + /* + * Note: all other rpc metric values are extracted directly via the + * address specified in the metrictab (see above) + */ + default: + return PM_ERR_PMID; + } + break; + + case CLUSTER_SLAB: + if (proc_slabinfo.ncaches == 0) + return 0; /* no values available */ + + if (inst >= proc_slabinfo.ncaches) + return PM_ERR_INST; + + switch(idp->item) { + case 0: /* mem.slabinfo.objects.active */ + atom->ull = proc_slabinfo.caches[inst].num_active_objs; + break; + case 1: /* mem.slabinfo.objects.total */ + atom->ull = proc_slabinfo.caches[inst].total_objs; + break; + case 2: /* mem.slabinfo.objects.size */ + if (proc_slabinfo.caches[inst].seen < 11) /* version 1.1 or later only */ + return 0; + atom->ul = proc_slabinfo.caches[inst].object_size; + break; + case 3: /* mem.slabinfo.slabs.active */ + if (proc_slabinfo.caches[inst].seen < 11) /* version 1.1 or later only */ + return 0; + atom->ul = proc_slabinfo.caches[inst].num_active_slabs; + break; + case 4: /* mem.slabinfo.slabs.total */ + if (proc_slabinfo.caches[inst].seen == 11) /* version 1.1 only */ + return 0; + atom->ul = proc_slabinfo.caches[inst].total_slabs; + break; + case 5: /* mem.slabinfo.slabs.pages_per_slab */ + if (proc_slabinfo.caches[inst].seen < 11) /* version 1.1 or later only */ + return 0; + atom->ul = proc_slabinfo.caches[inst].pages_per_slab; + break; + case 6: /* mem.slabinfo.slabs.objects_per_slab */ + if (proc_slabinfo.caches[inst].seen != 20) /* version 2.0 only */ + return 0; + atom->ul = proc_slabinfo.caches[inst].objects_per_slab; + break; + case 7: /* mem.slabinfo.slabs.total_size */ + if (proc_slabinfo.caches[inst].seen < 11) /* version 1.1 or later only */ + return 0; + atom->ull = proc_slabinfo.caches[inst].total_size; + break; + default: + return PM_ERR_PMID; + } + break; + + case CLUSTER_PARTITIONS: + return proc_partitions_fetch(mdesc, inst, atom); + + case CLUSTER_SCSI: + if (proc_scsi.nscsi == 0) + return 0; /* no values available */ + switch(idp->item) { + case 0: /* hinv.map.scsi */ + atom->cp = (char *)NULL; + for (i=0; i < proc_scsi.nscsi; i++) { + if (proc_scsi.scsi[i].id == inst) { + atom->cp = proc_scsi.scsi[i].dev_name; + break; + } + } + if (i == proc_scsi.nscsi) + return PM_ERR_INST; + break; + default: + return PM_ERR_PMID; + } + break; + + case CLUSTER_LV: + switch(idp->item) { + case 0: /* hinv.map.lvname */ + if (dev_mapper.nlv == 0) + return 0; /* no values available */ + atom->cp = (char *)NULL; + for (i = 0; i < dev_mapper.nlv; i++) { + if (dev_mapper.lv[i].id == inst) { + atom->cp = dev_mapper.lv[i].dev_name; + break; + } + } + if (i == dev_mapper.nlv) + return PM_ERR_INST; + break; + case 1: /* hinv.nlv */ + atom->ul = dev_mapper.nlv; + break; + default: + return PM_ERR_PMID; + } + break; + + case CLUSTER_KERNEL_UNAME: + switch(idp->item) { + case 5: /* pmda.uname */ + sprintf(uname_string, "%s %s %s %s %s", + kernel_uname.sysname, + kernel_uname.nodename, + kernel_uname.release, + kernel_uname.version, + kernel_uname.machine); + atom->cp = uname_string; + break; + + case 6: /* pmda.version */ + atom->cp = pmGetConfig("PCP_VERSION"); + break; + + case 7: /* kernel.uname.distro ... not from uname(2) */ + atom->cp = get_distro_info(); + break; + + default: + return PM_ERR_PMID; + } + break; + + case CLUSTER_CPUINFO: + if (idp->item != 7 && /* hinv.machine is singular */ + (inst >= proc_cpuinfo.cpuindom->it_numinst)) + return PM_ERR_INST; + switch(idp->item) { + case 0: /* hinv.cpu.clock */ + if (proc_cpuinfo.cpuinfo[inst].clock == 0.0) + return 0; + atom->f = proc_cpuinfo.cpuinfo[inst].clock; + break; + case 1: /* hinv.cpu.vendor */ + i = proc_cpuinfo.cpuinfo[inst].vendor; + atom->cp = linux_strings_lookup(i); + if (atom->cp == NULL) + atom->cp = "unknown"; + break; + case 2: /* hinv.cpu.model */ + if ((i = proc_cpuinfo.cpuinfo[inst].model) < 0) + i = proc_cpuinfo.cpuinfo[inst].model_name; + atom->cp = linux_strings_lookup(i); + if (atom->cp == NULL) + atom->cp = "unknown"; + break; + case 3: /* hinv.cpu.stepping */ + i = proc_cpuinfo.cpuinfo[inst].stepping; + atom->cp = linux_strings_lookup(i); + if (atom->cp == NULL) + atom->cp = "unknown"; + break; + case 4: /* hinv.cpu.cache */ + if (!proc_cpuinfo.cpuinfo[inst].cache) + return 0; + atom->ul = proc_cpuinfo.cpuinfo[inst].cache; + break; + case 5: /* hinv.cpu.bogomips */ + if (proc_cpuinfo.cpuinfo[inst].bogomips == 0.0) + return 0; + atom->f = proc_cpuinfo.cpuinfo[inst].bogomips; + break; + case 6: /* hinv.map.cpu_num */ + atom->ul = proc_cpuinfo.cpuinfo[inst].cpu_num; + break; + case 7: /* hinv.machine */ + atom->cp = proc_cpuinfo.machine; + break; + case 8: /* hinv.map.cpu_node */ + atom->ul = proc_cpuinfo.cpuinfo[inst].node; + break; + case 9: /* hinv.cpu.model_name */ + if ((i = proc_cpuinfo.cpuinfo[inst].model_name) < 0) + i = proc_cpuinfo.cpuinfo[inst].model; + atom->cp = linux_strings_lookup(i); + if (atom->cp == NULL) + atom->cp = "unknown"; + break; + case 10: /* hinv.cpu.flags */ + i = proc_cpuinfo.cpuinfo[inst].flags; + atom->cp = linux_strings_lookup(i); + if (atom->cp == NULL) + atom->cp = "unknown"; + break; + case 11: /* hinv.cpu.cache_alignment */ + if (!proc_cpuinfo.cpuinfo[inst].cache_align) + return 0; + atom->ul = proc_cpuinfo.cpuinfo[inst].cache_align; + break; + default: + return PM_ERR_PMID; + } + break; + + /* + * Cluster added by Mike Mason <mmlnx@us.ibm.com> + */ + case CLUSTER_SEM_LIMITS: + switch (idp->item) { + case 0: /* ipc.sem.max_semmap */ + atom->ul = sem_limits.semmap; + break; + case 1: /* ipc.sem.max_semid */ + atom->ul = sem_limits.semmni; + break; + case 2: /* ipc.sem.max_sem */ + atom->ul = sem_limits.semmns; + break; + case 3: /* ipc.sem.num_undo */ + atom->ul = sem_limits.semmnu; + break; + case 4: /* ipc.sem.max_perid */ + atom->ul = sem_limits.semmsl; + break; + case 5: /* ipc.sem.max_ops */ + atom->ul = sem_limits.semopm; + break; + case 6: /* ipc.sem.max_undoent */ + atom->ul = sem_limits.semume; + break; + case 7: /* ipc.sem.sz_semundo */ + atom->ul = sem_limits.semusz; + break; + case 8: /* ipc.sem.max_semval */ + atom->ul = sem_limits.semvmx; + break; + case 9: /* ipc.sem.max_exit */ + atom->ul = sem_limits.semaem; + break; + default: + return PM_ERR_PMID; + } + break; + + /* + * Cluster added by Mike Mason <mmlnx@us.ibm.com> + */ + case CLUSTER_MSG_LIMITS: + switch (idp->item) { + case 0: /* ipc.msg.sz_pool */ + atom->ul = msg_limits.msgpool; + break; + case 1: /* ipc.msg.mapent */ + atom->ul = msg_limits.msgmap; + break; + case 2: /* ipc.msg.max_msgsz */ + atom->ul = msg_limits.msgmax; + break; + case 3: /* ipc.msg.max_defmsgq */ + atom->ul = msg_limits.msgmnb; + break; + case 4: /* ipc.msg.max_msgqid */ + atom->ul = msg_limits.msgmni; + break; + case 5: /* ipc.msg.sz_msgseg */ + atom->ul = msg_limits.msgssz; + break; + case 6: /* ipc.msg.num_smsghdr */ + atom->ul = msg_limits.msgtql; + break; + case 7: /* ipc.msg.max_seg */ + atom->ul = (unsigned long) msg_limits.msgseg; + break; + default: + return PM_ERR_PMID; + } + break; + + /* + * Cluster added by Mike Mason <mmlnx@us.ibm.com> + */ + case CLUSTER_SHM_LIMITS: + switch (idp->item) { + case 0: /* ipc.shm.max_segsz */ + atom->ul = shm_limits.shmmax; + break; + case 1: /* ipc.shm.min_segsz */ + atom->ul = shm_limits.shmmin; + break; + case 2: /* ipc.shm.max_seg */ + atom->ul = shm_limits.shmmni; + break; + case 3: /* ipc.shm.max_segproc */ + atom->ul = shm_limits.shmseg; + break; + case 4: /* ipc.shm.max_shmsys */ + atom->ul = shm_limits.shmall; + break; + default: + return PM_ERR_PMID; + } + break; + + /* + * Cluster added by Mike Mason <mmlnx@us.ibm.com> + */ + case CLUSTER_NUSERS: + { + /* count the number of users */ + struct utmp *ut; + atom->ul = 0; + setutent(); + while ((ut = getutent())) { + if ((ut->ut_type == USER_PROCESS) && (ut->ut_name[0] != '\0')) + atom->ul++; + } + endutent(); + } + break; + + + case CLUSTER_IB: /* deprecated: network.ib, use infiniband PMDA */ + return PM_ERR_APPVERSION; + + case CLUSTER_NUMA_MEMINFO: + /* NUMA memory metrics from /sys/devices/system/node/nodeX */ + if (inst >= numa_meminfo.node_indom->it_numinst) + return PM_ERR_INST; + + switch(idp->item) { + case 0: /* mem.numa.util.total */ + sts = linux_table_lookup("MemTotal:", numa_meminfo.node_info[inst].meminfo, + &atom->ull); + break; + case 1: /* mem.numa.util.free */ + sts = linux_table_lookup("MemFree:", numa_meminfo.node_info[inst].meminfo, + &atom->ull); + break; + + case 2: /* mem.numa.util.used */ + sts = linux_table_lookup("MemUsed:", numa_meminfo.node_info[inst].meminfo, + &atom->ull); + break; + + case 3: /* mem.numa.util.active */ + sts = linux_table_lookup("Active:", numa_meminfo.node_info[inst].meminfo, + &atom->ull); + break; + + case 4: /* mem.numa.util.inactive */ + sts = linux_table_lookup("Inactive:", numa_meminfo.node_info[inst].meminfo, + &atom->ull); + break; + + case 5: /* mem.numa.util.active_anon */ + sts = linux_table_lookup("Active(anon):", numa_meminfo.node_info[inst].meminfo, + &atom->ull); + break; + + case 6: /* mem.numa.util.inactive_anon */ + sts = linux_table_lookup("Inactive(anon):", numa_meminfo.node_info[inst].meminfo, + &atom->ull); + break; + + case 7: /* mem.numa.util.active_file */ + sts = linux_table_lookup("Active(file):", numa_meminfo.node_info[inst].meminfo, + &atom->ull); + break; + + case 8: /* mem.numa.util.inactive_file */ + sts = linux_table_lookup("Inactive(file):", numa_meminfo.node_info[inst].meminfo, + &atom->ull); + break; + + case 9: /* mem.numa.util.highTotal */ + sts = linux_table_lookup("HighTotal:", numa_meminfo.node_info[inst].meminfo, + &atom->ull); + break; + + case 10: /* mem.numa.util.highFree */ + sts = linux_table_lookup("HighFree:", numa_meminfo.node_info[inst].meminfo, + &atom->ull); + break; + + case 11: /* mem.numa.util.lowTotal */ + sts = linux_table_lookup("LowTotal:", numa_meminfo.node_info[inst].meminfo, + &atom->ull); + break; + + case 12: /* mem.numa.util.lowFree */ + sts = linux_table_lookup("LowFree:", numa_meminfo.node_info[inst].meminfo, + &atom->ull); + break; + + case 13: /* mem.numa.util.unevictable */ + sts = linux_table_lookup("Unevictable:", numa_meminfo.node_info[inst].meminfo, + &atom->ull); + break; + + case 14: /* mem.numa.util.mlocked */ + sts = linux_table_lookup("Mlocked:", numa_meminfo.node_info[inst].meminfo, + &atom->ull); + break; + + case 15: /* mem.numa.util.dirty */ + sts = linux_table_lookup("Dirty:", numa_meminfo.node_info[inst].meminfo, + &atom->ull); + break; + + case 16: /* mem.numa.util.writeback */ + sts = linux_table_lookup("Writeback:", numa_meminfo.node_info[inst].meminfo, + &atom->ull); + break; + + case 17: /* mem.numa.util.filePages */ + sts = linux_table_lookup("FilePages:", numa_meminfo.node_info[inst].meminfo, + &atom->ull); + break; + + case 18: /* mem.numa.util.mapped */ + sts = linux_table_lookup("Mapped:", numa_meminfo.node_info[inst].meminfo, + &atom->ull); + break; + + case 19: /* mem.numa.util.anonPages */ + sts = linux_table_lookup("AnonPages:", numa_meminfo.node_info[inst].meminfo, + &atom->ull); + break; + + case 20: /* mem.numa.util.shmem */ + sts = linux_table_lookup("Shmem:", numa_meminfo.node_info[inst].meminfo, + &atom->ull); + break; + + case 21: /* mem.numa.util.kernelStack */ + sts = linux_table_lookup("KernelStack:", numa_meminfo.node_info[inst].meminfo, + &atom->ull); + break; + + case 22: /* mem.numa.util.pageTables */ + sts = linux_table_lookup("PageTables:", numa_meminfo.node_info[inst].meminfo, + &atom->ull); + break; + + case 23: /* mem.numa.util.NFS_Unstable */ + sts = linux_table_lookup("NFS_Unstable:", numa_meminfo.node_info[inst].meminfo, + &atom->ull); + break; + + case 24: /* mem.numa.util.bounce */ + sts = linux_table_lookup("Bounce:", numa_meminfo.node_info[inst].meminfo, + &atom->ull); + break; + + case 25: /* mem.numa.util.writebackTmp */ + sts = linux_table_lookup("WritebackTmp:", numa_meminfo.node_info[inst].meminfo, + &atom->ull); + break; + + case 26: /* mem.numa.util.slab */ + sts = linux_table_lookup("Slab:", numa_meminfo.node_info[inst].meminfo, + &atom->ull); + break; + + case 27: /* mem.numa.util.slabReclaimable */ + sts = linux_table_lookup("SReclaimable:", numa_meminfo.node_info[inst].meminfo, + &atom->ull); + break; + + case 28: /* mem.numa.util.slabUnreclaimable */ + sts = linux_table_lookup("SUnreclaim:", numa_meminfo.node_info[inst].meminfo, + &atom->ull); + break; + + case 29: /* mem.numa.util.hugepagesTotal */ + sts = linux_table_lookup("HugePages_Total:", numa_meminfo.node_info[inst].meminfo, + &atom->ull); + break; + + case 30: /* mem.numa.util.hugepagesFree */ + sts = linux_table_lookup("HugePages_Free:", numa_meminfo.node_info[inst].meminfo, + &atom->ull); + break; + + case 31: /* mem.numa.util.hugepagesSurp */ + sts = linux_table_lookup("HugePages_Surp:", numa_meminfo.node_info[inst].meminfo, + &atom->ull); + break; + + case 32: /* mem.numa.alloc.hit */ + sts = linux_table_lookup("numa_hit", numa_meminfo.node_info[inst].memstat, + &atom->ull); + break; + + case 33: /* mem.numa.alloc.miss */ + sts = linux_table_lookup("numa_miss", numa_meminfo.node_info[inst].memstat, + &atom->ull); + break; + + case 34: /* mem.numa.alloc.foreign */ + sts = linux_table_lookup("numa_foreign", numa_meminfo.node_info[inst].memstat, + &atom->ull); + break; + + case 35: /* mem.numa.alloc.interleave_hit */ + sts = linux_table_lookup("interleave_hit", numa_meminfo.node_info[inst].memstat, + &atom->ull); + break; + + case 36: /* mem.numa.alloc.local_node */ + sts = linux_table_lookup("local_node", numa_meminfo.node_info[inst].memstat, + &atom->ull); + break; + + case 37: /* mem.numa.alloc.other_node */ + sts = linux_table_lookup("other_node", numa_meminfo.node_info[inst].memstat, + &atom->ull); + break; + + default: + return PM_ERR_PMID; + } + return sts; + + case CLUSTER_INTERRUPTS: + switch (idp->item) { + case 3: /* kernel.all.interrupts.error */ + atom->ul = irq_err_count; + break; + default: + return PM_ERR_PMID; + } + break; + + case CLUSTER_INTERRUPT_LINES: + case CLUSTER_INTERRUPT_OTHER: + if (inst >= indomtab[CPU_INDOM].it_numinst) + return PM_ERR_INST; + return interrupts_fetch(idp->cluster, idp->item, inst, atom); + + case CLUSTER_DM: + return proc_partitions_fetch(mdesc, inst, atom); + break; + + default: /* unknown cluster */ + return PM_ERR_PMID; + } + + return 1; +} + + +static int +linux_fetch(int numpmid, pmID pmidlist[], pmResult **resp, pmdaExt *pmda) +{ + int i; + int need_refresh[NUM_CLUSTERS]; + + memset(need_refresh, 0, sizeof(need_refresh)); + for (i=0; i < numpmid; i++) { + __pmID_int *idp = (__pmID_int *)&(pmidlist[i]); + if (idp->cluster < NUM_CLUSTERS) { + need_refresh[idp->cluster]++; + + if ((idp->cluster == CLUSTER_STAT || idp->cluster == CLUSTER_DM) && + need_refresh[CLUSTER_PARTITIONS] == 0 && + is_partitions_metric(pmidlist[i])) + need_refresh[CLUSTER_PARTITIONS]++; + + if (idp->cluster == CLUSTER_CPUINFO || + idp->cluster == CLUSTER_INTERRUPT_LINES || + idp->cluster == CLUSTER_INTERRUPT_OTHER || + idp->cluster == CLUSTER_INTERRUPTS) + need_refresh[CLUSTER_STAT]++; + } + + /* In 2.6 kernels, swap.{pagesin,pagesout} are in /proc/vmstat */ + if (_pm_have_proc_vmstat && idp->cluster == CLUSTER_STAT) { + if (idp->item >= 8 && idp->item <= 11) + need_refresh[CLUSTER_VMSTAT]++; + } + } + + linux_refresh(pmda, need_refresh); + return pmdaFetch(numpmid, pmidlist, resp, pmda); +} + +static int +linux_text(int ident, int type, char **buf, pmdaExt *pmda) +{ + if ((type & PM_TEXT_PMID) == PM_TEXT_PMID) { + int sts = pmdaDynamicLookupText(ident, type, buf, pmda); + if (sts != -ENOENT) + return sts; + } + return pmdaText(ident, type, buf, pmda); +} + +static int +linux_pmid(const char *name, pmID *pmid, pmdaExt *pmda) +{ + pmdaNameSpace *tree = pmdaDynamicLookupName(pmda, name); + return pmdaTreePMID(tree, name, pmid); +} + +static int +linux_name(pmID pmid, char ***nameset, pmdaExt *pmda) +{ + pmdaNameSpace *tree = pmdaDynamicLookupPMID(pmda, pmid); + return pmdaTreeName(tree, pmid, nameset); +} + +static int +linux_children(const char *name, int flag, char ***kids, int **sts, pmdaExt *pmda) +{ + pmdaNameSpace *tree = pmdaDynamicLookupName(pmda, name); + return pmdaTreeChildren(tree, name, flag, kids, sts); +} + +pmInDom +linux_indom(int serial) +{ + return indomtab[serial].it_indom; +} + +pmdaIndom * +linux_pmda_indom(int serial) +{ + return &indomtab[serial]; +} + +/* + * Helper routines for accessing a generic static string dictionary + */ + +char * +linux_strings_lookup(int index) +{ + char *value; + pmInDom dict = INDOM(STRINGS_INDOM); + + if (pmdaCacheLookup(dict, index, &value, NULL) == PMDA_CACHE_ACTIVE) + return value; + return NULL; +} + +int +linux_strings_insert(const char *buf) +{ + pmInDom dict = INDOM(STRINGS_INDOM); + return pmdaCacheStore(dict, PMDA_CACHE_ADD, buf, NULL); +} + +/* + * Initialise the agent (both daemon and DSO). + */ + +void +__PMDA_INIT_CALL +linux_init(pmdaInterface *dp) +{ + int i, major, minor, point; + size_t nmetrics, nindoms; + char *envpath; + __pmID_int *idp; + + _pm_system_pagesize = getpagesize(); + if ((envpath = getenv("LINUX_STATSPATH")) != NULL) + linux_statspath = envpath; + + if (_isDSO) { + char helppath[MAXPATHLEN]; + int sep = __pmPathSeparator(); + snprintf(helppath, sizeof(helppath), "%s%c" "linux" "%c" "help", + pmGetConfig("PCP_PMDAS_DIR"), sep, sep); + pmdaDSO(dp, PMDA_INTERFACE_4, "linux DSO", helppath); + } else { + __pmSetProcessIdentity(username); + } + + if (dp->status != 0) + return; + + dp->version.four.instance = linux_instance; + dp->version.four.fetch = linux_fetch; + dp->version.four.text = linux_text; + dp->version.four.pmid = linux_pmid; + dp->version.four.name = linux_name; + dp->version.four.children = linux_children; + pmdaSetFetchCallBack(dp, linux_fetchCallBack); + + proc_stat.cpu_indom = proc_cpuinfo.cpuindom = &indomtab[CPU_INDOM]; + numa_meminfo.node_indom = proc_cpuinfo.node_indom = &indomtab[NODE_INDOM]; + proc_scsi.scsi_indom = &indomtab[SCSI_INDOM]; + dev_mapper.lv_indom = &indomtab[LV_INDOM]; + proc_slabinfo.indom = &indomtab[SLAB_INDOM]; + + /* + * Figure out kernel version. The precision of certain metrics + * (e.g. percpu time counters) has changed over kernel versions. + * See include/linux/kernel_stat.h for all the various flavours. + */ + uname(&kernel_uname); + _pm_ctxt_size = 8; + _pm_intr_size = 8; + _pm_cputime_size = 8; + _pm_idletime_size = 8; + if (sscanf(kernel_uname.release, "%d.%d.%d", &major, &minor, &point) == 3) { + if (major < 2 || (major == 2 && minor <= 4)) { /* 2.4 and earlier */ + _pm_ctxt_size = 4; + _pm_intr_size = 4; + _pm_cputime_size = 4; + _pm_idletime_size = sizeof(unsigned long); + } + else if (major == 2 && minor == 6 && + point >= 0 && point <= 4) { /* 2.6.0->.4 */ + _pm_cputime_size = 4; + _pm_idletime_size = 4; + } + } + for (i = 0; i < sizeof(metrictab)/sizeof(pmdaMetric); i++) { + idp = (__pmID_int *)&(metrictab[i].m_desc.pmid); + if (idp->cluster == CLUSTER_STAT) { + switch (idp->item) { + case 0: /* kernel.percpu.cpu.user */ + case 1: /* kernel.percpu.cpu.nice */ + case 2: /* kernel.percpu.cpu.sys */ + case 20: /* kernel.all.cpu.user */ + case 21: /* kernel.all.cpu.nice */ + case 22: /* kernel.all.cpu.sys */ + case 30: /* kernel.percpu.cpu.wait.total */ + case 31: /* kernel.percpu.cpu.intr */ + case 34: /* kernel.all.cpu.intr */ + case 35: /* kernel.all.cpu.wait.total */ + case 53: /* kernel.all.cpu.irq.soft */ + case 54: /* kernel.all.cpu.irq.hard */ + case 55: /* kernel.all.cpu.steal */ + case 56: /* kernel.percpu.cpu.irq.soft */ + case 57: /* kernel.percpu.cpu.irq.hard */ + case 58: /* kernel.percpu.cpu.steal */ + case 60: /* kernel.all.cpu.guest */ + case 78: /* kernel.all.cpu.vuser */ + case 61: /* kernel.percpu.cpu.guest */ + case 76: /* kernel.percpu.cpu.vuser */ + case 62: /* kernel.pernode.cpu.user */ + case 63: /* kernel.pernode.cpu.nice */ + case 64: /* kernel.pernode.cpu.sys */ + case 69: /* kernel.pernode.cpu.wait.total */ + case 66: /* kernel.pernode.cpu.intr */ + case 70: /* kernel.pernode.cpu.irq.soft */ + case 71: /* kernel.pernode.cpu.irq.hard */ + case 67: /* kernel.pernode.cpu.steal */ + case 68: /* kernel.pernode.cpu.guest */ + case 77: /* kernel.pernode.cpu.vuser */ + _pm_metric_type(metrictab[i].m_desc.type, _pm_cputime_size); + break; + case 3: /* kernel.percpu.cpu.idle */ + case 23: /* kernel.all.cpu.idle */ + case 65: /* kernel.pernode.cpu.idle */ + _pm_metric_type(metrictab[i].m_desc.type, _pm_idletime_size); + break; + case 12: /* kernel.all.intr */ + _pm_metric_type(metrictab[i].m_desc.type, _pm_intr_size); + break; + case 13: /* kernel.all.pswitch */ + _pm_metric_type(metrictab[i].m_desc.type, _pm_ctxt_size); + break; + } + } + if (metrictab[i].m_desc.type == PM_TYPE_NOSUPPORT) + fprintf(stderr, "Bad kernel metric descriptor type (%u.%u)\n", + idp->cluster, idp->item); + } + + nindoms = sizeof(indomtab)/sizeof(indomtab[0]); + nmetrics = sizeof(metrictab)/sizeof(metrictab[0]); + + proc_vmstat_init(); + interrupts_init(metrictab, nmetrics); + + pmdaSetFlags(dp, PMDA_EXT_FLAG_HASHED); + pmdaInit(dp, indomtab, nindoms, metrictab, nmetrics); + + /* string metrics use the pmdaCache API for value indexing */ + pmdaCacheOp(INDOM(STRINGS_INDOM), PMDA_CACHE_STRINGS); +} + +pmLongOptions longopts[] = { + PMDA_OPTIONS_HEADER("Options"), + PMOPT_DEBUG, + PMDAOPT_DOMAIN, + PMDAOPT_LOGFILE, + PMDAOPT_USERNAME, + PMOPT_HELP, + PMDA_OPTIONS_END +}; + +pmdaOptions opts = { + .short_options = "D:d:l:U:?", + .long_options = longopts, +}; + +/* + * Set up the agent if running as a daemon. + */ +int +main(int argc, char **argv) +{ + int sep = __pmPathSeparator(); + pmdaInterface dispatch; + char helppath[MAXPATHLEN]; + + _isDSO = 0; + __pmSetProgname(argv[0]); + __pmGetUsername(&username); + + snprintf(helppath, sizeof(helppath), "%s%c" "linux" "%c" "help", + pmGetConfig("PCP_PMDAS_DIR"), sep, sep); + pmdaDaemon(&dispatch, PMDA_INTERFACE_4, pmProgname, LINUX, "linux.log", helppath); + + pmdaGetOptions(argc, argv, &opts, &dispatch); + if (opts.errors) { + pmdaUsageMessage(&opts); + exit(1); + } + if (opts.username) + username = opts.username; + + pmdaOpenLog(&dispatch); + linux_init(&dispatch); + pmdaConnect(&dispatch); + pmdaMain(&dispatch); + exit(0); +} |