static int zh_read (void) { gauge_t arc_hits, arc_misses, l2_hits, l2_misses; value_t zfs_io[2]; kstat_t *ksp = NULL; get_kstat (&ksp, "unix", 0, "vopstats_zfs"); if (ksp == NULL) { ERROR ("zfs_health plugin: Cannot find unix:0:vopstats_zfs kstat."); return (-1); } /* Sizes */ /* zh_read_gauge (ksp, "size", "cache_size", "arc"); * zh_read_gauge (ksp, "l2_size", "cache_size", "L2"); */ /* Operations */ /* zh_read_derive (ksp, "allocated","cache_operation", "allocated"); * zh_read_derive (ksp, "deleted", "cache_operation", "deleted"); * zh_read_derive (ksp, "stolen", "cache_operation", "stolen"); */ /* I/O */ zfs_io[0].derive = get_kstat_value(ksp, "read_bytes"); zfs_io[1].derive = get_kstat_value(ksp, "write_bytes"); zh_submit ("io_octets", "ZFS", zfs_io, /* num values = */ 2); return (0); } /* int zh_read */
static int memory_init(void) { #if HAVE_HOST_STATISTICS port_host = mach_host_self(); host_page_size(port_host, &pagesize); /* #endif HAVE_HOST_STATISTICS */ #elif HAVE_SYSCTLBYNAME /* no init stuff */ /* #endif HAVE_SYSCTLBYNAME */ #elif defined(KERNEL_LINUX) /* no init stuff */ /* #endif KERNEL_LINUX */ #elif defined(HAVE_LIBKSTAT) /* getpagesize(3C) tells me this does not fail.. */ pagesize = getpagesize(); if (get_kstat(&ksp, "unix", 0, "system_pages") != 0) { ksp = NULL; return -1; } if (get_kstat(&ksz, "zfs", 0, "arcstats") != 0) { ksz = NULL; return -1; } /* #endif HAVE_LIBKSTAT */ #elif HAVE_SYSCTL pagesize = getpagesize(); if (pagesize <= 0) { ERROR("memory plugin: Invalid pagesize: %i", pagesize); return -1; } /* #endif HAVE_SYSCTL */ #elif HAVE_LIBSTATGRAB /* no init stuff */ /* #endif HAVE_LIBSTATGRAB */ #elif HAVE_PERFSTAT pagesize = getpagesize(); #endif /* HAVE_PERFSTAT */ return 0; } /* int memory_init */
static int za_read (void) { gauge_t arcsize, targetsize, minlimit, maxlimit, hits, misses, l2_size, l2_hits, l2_misses; counter_t demand_data_hits, demand_metadata_hits, prefetch_data_hits, prefetch_metadata_hits; counter_t demand_data_misses, demand_metadata_misses, prefetch_data_misses, prefetch_metadata_misses; counter_t l2_read_bytes, l2_write_bytes; get_kstat (&ksp, "zfs", 0, "arcstats"); if (ksp == NULL) { ERROR ("zfs_arc plugin: Cannot find zfs:0:arcstats kstat."); return (-1); } arcsize = get_kstat_value(ksp, "size"); targetsize = get_kstat_value(ksp, "c"); minlimit = get_kstat_value(ksp, "c_min"); maxlimit = get_kstat_value(ksp, "c_max"); demand_data_hits = get_kstat_value(ksp, "demand_data_hits"); demand_metadata_hits = get_kstat_value(ksp, "demand_metadata_hits"); prefetch_data_hits = get_kstat_value(ksp, "prefetch_data_hits"); prefetch_metadata_hits = get_kstat_value(ksp, "prefetch_metadata_hits"); demand_data_misses = get_kstat_value(ksp, "demand_data_misses"); demand_metadata_misses = get_kstat_value(ksp, "demand_metadata_misses"); prefetch_data_misses = get_kstat_value(ksp, "prefetch_data_misses"); prefetch_metadata_misses = get_kstat_value(ksp, "prefetch_metadata_misses"); hits = get_kstat_value(ksp, "hits"); misses = get_kstat_value(ksp, "misses"); l2_size = get_kstat_value(ksp, "l2_size"); l2_read_bytes = get_kstat_value(ksp, "l2_read_bytes"); l2_write_bytes = get_kstat_value(ksp, "l2_write_bytes"); l2_hits = get_kstat_value(ksp, "l2_hits"); l2_misses = get_kstat_value(ksp, "l2_misses"); za_submit_size (arcsize, targetsize, minlimit, maxlimit); za_submit_gauge ("arc_l2_size", "", l2_size); za_submit_counts ("hits", demand_data_hits, demand_metadata_hits, prefetch_data_hits, prefetch_metadata_hits); za_submit_counts ("misses", demand_data_misses, demand_metadata_misses, prefetch_data_misses, prefetch_metadata_misses); za_submit_gauge ("arc_ratio", "L1", hits / (hits + misses)); za_submit_gauge ("arc_ratio", "L2", l2_hits / (l2_hits + l2_misses)); za_submit_bytes (l2_read_bytes, l2_write_bytes); return (0); }
static int swap_init (void) { #if KERNEL_LINUX /* No init stuff */ /* #endif KERNEL_LINUX */ #elif HAVE_LIBKSTAT /* getpagesize(3C) tells me this does not fail.. */ pagesize = (derive_t) getpagesize (); if (get_kstat (&ksp, "unix", 0, "system_pages")) ksp = NULL; /* #endif HAVE_LIBKSTAT */ #elif HAVE_SWAPCTL /* No init stuff */ /* #endif HAVE_SWAPCTL */ #elif defined(VM_SWAPUSAGE) /* No init stuff */ /* #endif defined(VM_SWAPUSAGE) */ #elif HAVE_LIBKVM_GETSWAPINFO if (kvm_obj != NULL) { kvm_close (kvm_obj); kvm_obj = NULL; } kvm_pagesize = getpagesize (); if ((kvm_obj = kvm_open (NULL, /* execfile */ NULL, /* corefile */ NULL, /* swapfile */ O_RDONLY, /* flags */ NULL)) /* errstr */ == NULL) { ERROR ("swap plugin: kvm_open failed."); return (-1); } /* #endif HAVE_LIBKVM_GETSWAPINFO */ #elif HAVE_LIBSTATGRAB /* No init stuff */ /* #endif HAVE_LIBSTATGRAB */ #elif HAVE_PERFSTAT pagesize = getpagesize(); #endif /* HAVE_PERFSTAT */ return (0); }
static int get_root_array(char * page, int type, char **start, off_t offset, int length) { switch (type) { case PROC_LOADAVG: return get_loadavg(page); case PROC_UPTIME: return get_uptime(page); case PROC_MEMINFO: return get_meminfo(page); #ifdef CONFIG_PCI case PROC_PCI: return get_pci_list(page); #endif case PROC_CPUINFO: return get_cpuinfo(page); case PROC_VERSION: return get_version(page); #ifdef CONFIG_DEBUG_MALLOC case PROC_MALLOC: return get_malloc(page); #endif #ifdef CONFIG_MODULES case PROC_MODULES: return get_module_list(page); case PROC_KSYMS: return get_ksyms_list(page, start, offset, length); #endif case PROC_STAT: return get_kstat(page); case PROC_DEVICES: return get_device_list(page); case PROC_INTERRUPTS: return get_irq_list(page); case PROC_FILESYSTEMS: return get_filesystem_list(page); case PROC_DMA: return get_dma_list(page); case PROC_IOPORTS: return get_ioport_list(page); #ifdef CONFIG_BLK_DEV_MD case PROC_MD: return get_md_status(page); #endif #ifdef __SMP_PROF__ case PROC_SMP_PROF: return get_smp_prof_list(page); #endif case PROC_CMDLINE: return get_cmdline(page); case PROC_MTAB: return get_filesystem_info( page ); #ifdef CONFIG_RTC case PROC_RTC: return get_rtc_status(page); #endif case PROC_LOCKS: return get_locks_status(page); } return -EBADF; }
static int array_read(struct inode * inode, struct file * file,char * buf, int count) { char * page; int length; int end; unsigned int type, pid; if (count < 0) return -EINVAL; if (!(page = (char*) __get_free_page(GFP_KERNEL))) return -ENOMEM; type = inode->i_ino; pid = type >> 16; type &= 0x0000ffff; switch (type) { case 2: length = get_loadavg(page); break; case 3: length = get_uptime(page); break; case 4: length = get_meminfo(page); break; case 6: length = get_version(page); break; case 9: length = get_env(pid, page); break; case 10: length = get_arg(pid, page); break; case 11: length = get_stat(pid, page); break; case 12: length = get_statm(pid, page); break; #ifdef CONFIG_DEBUG_MALLOC case 13: length = get_malloc(page); break; #endif case 14: free_page((unsigned long) page); return read_core(inode, file, buf, count); case 15: length = get_maps(pid, page); break; case 16: length = get_module_list(page); break; case 17: length = get_kstat(page); break; default: free_page((unsigned long) page); return -EBADF; } if (file->f_pos >= length) { free_page((unsigned long) page); return 0; } if (count + file->f_pos > length) count = length - file->f_pos; end = count + file->f_pos; memcpy_tofs(buf, page + file->f_pos, count); free_page((unsigned long) page); file->f_pos = end; return count; }