X-Git-Url: https://git.octo.it/?a=blobdiff_plain;f=src%2Fswap.c;h=46d3534fcae818cd6fc286cd448d824ad22ccad8;hb=96e0f2341bace029acefe0a88bab96ae326c0ff5;hp=397969eff0ce0ea7a4eb48762bdef9d0e019bbd6;hpb=a60550f0b85d413957654546a87f00a95e59a26c;p=collectd.git diff --git a/src/swap.c b/src/swap.c index 397969ef..46d3534f 100644 --- a/src/swap.c +++ b/src/swap.c @@ -1,6 +1,6 @@ /** * collectd - src/swap.c - * Copyright (C) 2005-2010 Florian octo Forster + * Copyright (C) 2005-2012 Florian octo Forster * Copyright (C) 2009 Stefan Völkel * Copyright (C) 2009 Manuel Sanmartin * Copyright (C) 2010 Aurélien Reynaud @@ -70,13 +70,16 @@ #define MAX(x,y) ((x) > (y) ? (x) : (y)) #if KERNEL_LINUX -# define SWAP_HAVE_CONFIG 1 -/* No global variables */ +# define SWAP_HAVE_REPORT_BY_DEVICE 1 +static derive_t pagesize; +static _Bool report_bytes = 0; +static _Bool report_by_device = 0; /* #endif KERNEL_LINUX */ #elif HAVE_SWAPCTL && HAVE_SWAPCTL_TWO_ARGS -# define SWAP_HAVE_CONFIG 1 +# define SWAP_HAVE_REPORT_BY_DEVICE 1 static derive_t pagesize; +static _Bool report_by_device = 0; /* #endif HAVE_SWAPCTL && HAVE_SWAPCTL_TWO_ARGS */ #elif defined(VM_SWAPUSAGE) @@ -101,23 +104,37 @@ static perfstat_memory_total_t pmemory; # error "No applicable input method." #endif /* HAVE_LIBSTATGRAB */ -#if SWAP_HAVE_CONFIG static const char *config_keys[] = { + "ReportBytes", "ReportByDevice" }; static int config_keys_num = STATIC_ARRAY_SIZE (config_keys); -static _Bool report_by_device = 0; - static int swap_config (const char *key, const char *value) /* {{{ */ { - if (strcasecmp ("ReportByDevice", key) == 0) + if (strcasecmp ("ReportBytes", key) == 0) + { +#if KERNEL_LINUX + report_bytes = IS_TRUE (value) ? 1 : 0; +#else + WARNING ("swap plugin: The \"ReportBytes\" option is only " + "valid under Linux. " + "The option is going to be ignored."); +#endif + } + else if (strcasecmp ("ReportByDevice", key) == 0) { +#if SWAP_HAVE_REPORT_BY_DEVICE if (IS_TRUE (value)) report_by_device = 1; else report_by_device = 0; +#else + WARNING ("swap plugin: The \"ReportByDevice\" option is not " + "supported on this platform. " + "The option is going to be ignored."); +#endif /* SWAP_HAVE_REPORT_BY_DEVICE */ } else { @@ -126,12 +143,11 @@ static int swap_config (const char *key, const char *value) /* {{{ */ return (0); } /* }}} int swap_config */ -#endif /* SWAP_HAVE_CONFIG */ static int swap_init (void) /* {{{ */ { #if KERNEL_LINUX - /* No init stuff */ + pagesize = (derive_t) sysconf (_SC_PAGESIZE); /* #endif KERNEL_LINUX */ #elif HAVE_SWAPCTL && HAVE_SWAPCTL_TWO_ARGS @@ -205,7 +221,7 @@ static void swap_submit_gauge (const char *plugin_instance, /* {{{ */ swap_submit (plugin_instance, "swap", type_instance, v); } /* }}} void swap_submit_gauge */ -#if KERNEL_LINUX +#if KERNEL_LINUX || HAVE_PERFSTAT static void swap_submit_derive (const char *plugin_instance, /* {{{ */ const char *type_instance, derive_t value) { @@ -214,7 +230,9 @@ static void swap_submit_derive (const char *plugin_instance, /* {{{ */ v.derive = value; swap_submit (plugin_instance, "swap_io", type_instance, v); } /* }}} void swap_submit_derive */ +#endif +#if KERNEL_LINUX static int swap_read_separate (void) /* {{{ */ { FILE *fh; @@ -406,6 +424,12 @@ static int swap_read_io (void) /* {{{ */ if (have_data != 0x03) return (ENOENT); + if (report_bytes) + { + swap_in = swap_in * pagesize; + swap_out = swap_out * pagesize; + } + swap_submit_derive (NULL, "in", swap_in); swap_submit_derive (NULL, "out", swap_out); @@ -764,8 +788,12 @@ static int swap_read (void) /* {{{ */ sstrerror (errno, errbuf, sizeof (errbuf))); return (-1); } + swap_submit_gauge (NULL, "used", (gauge_t) (pmemory.pgsp_total - pmemory.pgsp_free) * pagesize); swap_submit_gauge (NULL, "free", (gauge_t) pmemory.pgsp_free * pagesize ); + swap_submit_gauge (NULL, "reserved", (gauge_t) pmemory.pgsp_rsvd * pagesize); + swap_submit_derive (NULL, "in", (derive_t) pmemory.pgspins * pagesize); + swap_submit_derive (NULL, "out", (derive_t) pmemory.pgspouts * pagesize); return (0); } /* }}} int swap_read */ @@ -773,9 +801,8 @@ static int swap_read (void) /* {{{ */ void module_register (void) { -#if SWAP_HAVE_CONFIG - plugin_register_config ("swap", swap_config, config_keys, config_keys_num); -#endif + plugin_register_config ("swap", swap_config, + config_keys, config_keys_num); plugin_register_init ("swap", swap_init); plugin_register_read ("swap", swap_read); } /* void module_register */