X-Git-Url: https://arthur.barton.de/gitweb/?a=blobdiff_plain;f=src%2Fglobal_statistics.c;h=17faeaa1f3e829b1b89ff88feded9d1f9b3fb907;hb=c74bc1c7b31358e347cf76d3bb322e6470cc840e;hp=ad89ab5446048396cd6c173a606b461f6594dcdc;hpb=1dfe07df975a513a7761efe179425bfcd4804c71;p=netdata.git diff --git a/src/global_statistics.c b/src/global_statistics.c index ad89ab54..17faeaa1 100644 --- a/src/global_statistics.c +++ b/src/global_statistics.c @@ -25,22 +25,19 @@ void finished_web_request_statistics(uint64_t dt, uint64_t bytes_sent, uint64_t content_size, uint64_t compressed_content_size) { -#ifndef NETDATA_NO_ATOMIC_INSTRUCTIONS +#if defined(HAVE_C___ATOMIC) && !defined(NETDATA_NO_ATOMIC_INSTRUCTIONS) uint64_t old_web_usec_max = global_statistics.web_usec_max; - while(dt > old_web_usec_max) { - if(__sync_bool_compare_and_swap(&global_statistics.web_usec_max, old_web_usec_max, dt)) - old_web_usec_max = dt; - else - old_web_usec_max = global_statistics.web_usec_max; - } - - __sync_fetch_and_add(&global_statistics.web_requests, 1); - __sync_fetch_and_add(&global_statistics.web_usec, dt); - __sync_fetch_and_add(&global_statistics.bytes_received, bytes_received); - __sync_fetch_and_add(&global_statistics.bytes_sent, bytes_sent); - __sync_fetch_and_add(&global_statistics.content_size, content_size); - __sync_fetch_and_add(&global_statistics.compressed_content_size, compressed_content_size); + while(dt > old_web_usec_max) + __atomic_compare_exchange(&global_statistics.web_usec_max, &old_web_usec_max, &dt, 1, __ATOMIC_SEQ_CST, __ATOMIC_SEQ_CST); + + __atomic_fetch_add(&global_statistics.web_requests, 1, __ATOMIC_SEQ_CST); + __atomic_fetch_add(&global_statistics.web_usec, dt, __ATOMIC_SEQ_CST); + __atomic_fetch_add(&global_statistics.bytes_received, bytes_received, __ATOMIC_SEQ_CST); + __atomic_fetch_add(&global_statistics.bytes_sent, bytes_sent, __ATOMIC_SEQ_CST); + __atomic_fetch_add(&global_statistics.content_size, content_size, __ATOMIC_SEQ_CST); + __atomic_fetch_add(&global_statistics.compressed_content_size, compressed_content_size, __ATOMIC_SEQ_CST); #else +#warning NOT using atomic operations - using locks for global statistics if (web_server_mode == WEB_SERVER_MODE_MULTI_THREADED) global_statistics_lock(); @@ -60,8 +57,8 @@ void finished_web_request_statistics(uint64_t dt, } void web_client_connected(void) { -#ifndef NETDATA_NO_ATOMIC_INSTRUCTIONS - __sync_fetch_and_add(&global_statistics.connected_clients, 1); +#if defined(HAVE_C___ATOMIC) && !defined(NETDATA_NO_ATOMIC_INSTRUCTIONS) + __atomic_fetch_add(&global_statistics.connected_clients, 1, __ATOMIC_SEQ_CST); #else if (web_server_mode == WEB_SERVER_MODE_MULTI_THREADED) global_statistics_lock(); @@ -74,8 +71,8 @@ void web_client_connected(void) { } void web_client_disconnected(void) { -#ifndef NETDATA_NO_ATOMIC_INSTRUCTIONS - __sync_fetch_and_sub(&global_statistics.connected_clients, 1); +#if defined(HAVE_C___ATOMIC) && !defined(NETDATA_NO_ATOMIC_INSTRUCTIONS) + __atomic_fetch_sub(&global_statistics.connected_clients, 1, __ATOMIC_SEQ_CST); #else if (web_server_mode == WEB_SERVER_MODE_MULTI_THREADED) global_statistics_lock(); @@ -89,18 +86,21 @@ void web_client_disconnected(void) { inline void global_statistics_copy(struct global_statistics *gs, uint8_t options) { -#ifndef NETDATA_NO_ATOMIC_INSTRUCTIONS - gs->connected_clients = __sync_fetch_and_add(&global_statistics.connected_clients, 0); - gs->web_requests = __sync_fetch_and_add(&global_statistics.web_requests, 0); - gs->web_usec = __sync_fetch_and_add(&global_statistics.web_usec, 0); - gs->web_usec_max = __sync_fetch_and_add(&global_statistics.web_usec_max, 0); - gs->bytes_received = __sync_fetch_and_add(&global_statistics.bytes_received, 0); - gs->bytes_sent = __sync_fetch_and_add(&global_statistics.bytes_sent, 0); - gs->content_size = __sync_fetch_and_add(&global_statistics.content_size, 0); - gs->compressed_content_size = __sync_fetch_and_add(&global_statistics.compressed_content_size, 0); - - if(options & GLOBAL_STATS_RESET_WEB_USEC_MAX) - __sync_bool_compare_and_swap(&global_statistics.web_usec_max, gs->web_usec_max, 0); +#if defined(HAVE_C___ATOMIC) && !defined(NETDATA_NO_ATOMIC_INSTRUCTIONS) + gs->connected_clients = __atomic_fetch_add(&global_statistics.connected_clients, 0, __ATOMIC_SEQ_CST); + gs->web_requests = __atomic_fetch_add(&global_statistics.web_requests, 0, __ATOMIC_SEQ_CST); + gs->web_usec = __atomic_fetch_add(&global_statistics.web_usec, 0, __ATOMIC_SEQ_CST); + gs->web_usec_max = __atomic_fetch_add(&global_statistics.web_usec_max, 0, __ATOMIC_SEQ_CST); + gs->bytes_received = __atomic_fetch_add(&global_statistics.bytes_received, 0, __ATOMIC_SEQ_CST); + gs->bytes_sent = __atomic_fetch_add(&global_statistics.bytes_sent, 0, __ATOMIC_SEQ_CST); + gs->content_size = __atomic_fetch_add(&global_statistics.content_size, 0, __ATOMIC_SEQ_CST); + gs->compressed_content_size = __atomic_fetch_add(&global_statistics.compressed_content_size, 0, __ATOMIC_SEQ_CST); + + if(options & GLOBAL_STATS_RESET_WEB_USEC_MAX) { + uint64_t n = 0; + __atomic_compare_exchange(&global_statistics.web_usec_max, &gs->web_usec_max, &n, 1, __ATOMIC_SEQ_CST, + __ATOMIC_SEQ_CST); + } #else global_statistics_lock(); @@ -129,14 +129,22 @@ void global_statistics_charts(void) { getrusage(RUSAGE_THREAD, &thread); getrusage(RUSAGE_SELF, &me); - if (!stcpu_thread) stcpu_thread = rrdset_find("netdata.plugin_proc_cpu"); +#ifdef __FreeBSD__ + if (!stcpu_thread) stcpu_thread = rrdset_find_localhost("netdata.plugin_freebsd_cpu"); if (!stcpu_thread) { - stcpu_thread = rrdset_create("netdata", "plugin_proc_cpu", NULL, "proc.internal", NULL, - "NetData Proc Plugin CPU usage", "milliseconds/s", 132000, rrd_update_every, - RRDSET_TYPE_STACKED); + stcpu_thread = rrdset_create_localhost("netdata", "plugin_freebsd_cpu", NULL, "freebsd", NULL + , "NetData FreeBSD Plugin CPU usage", "milliseconds/s", 132000 + , localhost->rrd_update_every, RRDSET_TYPE_STACKED); +#else + if (!stcpu_thread) stcpu_thread = rrdset_find_localhost("netdata.plugin_proc_cpu"); + if (!stcpu_thread) { + stcpu_thread = rrdset_create_localhost("netdata", "plugin_proc_cpu", NULL, "proc", NULL + , "NetData Proc Plugin CPU usage", "milliseconds/s", 132000 + , localhost->rrd_update_every, RRDSET_TYPE_STACKED); +#endif - rrddim_add(stcpu_thread, "user", NULL, 1, 1000, RRDDIM_INCREMENTAL); - rrddim_add(stcpu_thread, "system", NULL, 1, 1000, RRDDIM_INCREMENTAL); + rrddim_add(stcpu_thread, "user", NULL, 1, 1000, RRD_ALGORITHM_INCREMENTAL); + rrddim_add(stcpu_thread, "system", NULL, 1, 1000, RRD_ALGORITHM_INCREMENTAL); } else rrdset_next(stcpu_thread); rrddim_set(stcpu_thread, "user", thread.ru_utime.tv_sec * 1000000ULL + thread.ru_utime.tv_usec); @@ -145,13 +153,13 @@ void global_statistics_charts(void) { // ---------------------------------------------------------------- - if (!stcpu) stcpu = rrdset_find("netdata.server_cpu"); + if (!stcpu) stcpu = rrdset_find_localhost("netdata.server_cpu"); if (!stcpu) { - stcpu = rrdset_create("netdata", "server_cpu", NULL, "netdata", NULL, "NetData CPU usage", "milliseconds/s", - 130000, rrd_update_every, RRDSET_TYPE_STACKED); + stcpu = rrdset_create_localhost("netdata", "server_cpu", NULL, "netdata", NULL, "NetData CPU usage" + , "milliseconds/s", 130000, localhost->rrd_update_every, RRDSET_TYPE_STACKED); - rrddim_add(stcpu, "user", NULL, 1, 1000, RRDDIM_INCREMENTAL); - rrddim_add(stcpu, "system", NULL, 1, 1000, RRDDIM_INCREMENTAL); + rrddim_add(stcpu, "user", NULL, 1, 1000, RRD_ALGORITHM_INCREMENTAL); + rrddim_add(stcpu, "system", NULL, 1, 1000, RRD_ALGORITHM_INCREMENTAL); } else rrdset_next(stcpu); rrddim_set(stcpu, "user", me.ru_utime.tv_sec * 1000000ULL + me.ru_utime.tv_usec); @@ -160,12 +168,12 @@ void global_statistics_charts(void) { // ---------------------------------------------------------------- - if (!stclients) stclients = rrdset_find("netdata.clients"); + if (!stclients) stclients = rrdset_find_localhost("netdata.clients"); if (!stclients) { - stclients = rrdset_create("netdata", "clients", NULL, "netdata", NULL, "NetData Web Clients", - "connected clients", 130200, rrd_update_every, RRDSET_TYPE_LINE); + stclients = rrdset_create_localhost("netdata", "clients", NULL, "netdata", NULL, "NetData Web Clients" + , "connected clients", 130200, localhost->rrd_update_every, RRDSET_TYPE_LINE); - rrddim_add(stclients, "clients", NULL, 1, 1, RRDDIM_ABSOLUTE); + rrddim_add(stclients, "clients", NULL, 1, 1, RRD_ALGORITHM_ABSOLUTE); } else rrdset_next(stclients); rrddim_set(stclients, "clients", gs.connected_clients); @@ -173,12 +181,12 @@ void global_statistics_charts(void) { // ---------------------------------------------------------------- - if (!streqs) streqs = rrdset_find("netdata.requests"); + if (!streqs) streqs = rrdset_find_localhost("netdata.requests"); if (!streqs) { - streqs = rrdset_create("netdata", "requests", NULL, "netdata", NULL, "NetData Web Requests", "requests/s", - 130300, rrd_update_every, RRDSET_TYPE_LINE); + streqs = rrdset_create_localhost("netdata", "requests", NULL, "netdata", NULL, "NetData Web Requests" + , "requests/s", 130300, localhost->rrd_update_every, RRDSET_TYPE_LINE); - rrddim_add(streqs, "requests", NULL, 1, 1, RRDDIM_INCREMENTAL); + rrddim_add(streqs, "requests", NULL, 1, 1, RRD_ALGORITHM_INCREMENTAL); } else rrdset_next(streqs); rrddim_set(streqs, "requests", (collected_number) gs.web_requests); @@ -186,13 +194,13 @@ void global_statistics_charts(void) { // ---------------------------------------------------------------- - if (!stbytes) stbytes = rrdset_find("netdata.net"); + if (!stbytes) stbytes = rrdset_find_localhost("netdata.net"); if (!stbytes) { - stbytes = rrdset_create("netdata", "net", NULL, "netdata", NULL, "NetData Network Traffic", "kilobits/s", - 130000, rrd_update_every, RRDSET_TYPE_AREA); + stbytes = rrdset_create_localhost("netdata", "net", NULL, "netdata", NULL, "NetData Network Traffic" + , "kilobits/s", 130000, localhost->rrd_update_every, RRDSET_TYPE_AREA); - rrddim_add(stbytes, "in", NULL, 8, 1024, RRDDIM_INCREMENTAL); - rrddim_add(stbytes, "out", NULL, -8, 1024, RRDDIM_INCREMENTAL); + rrddim_add(stbytes, "in", NULL, 8, 1024, RRD_ALGORITHM_INCREMENTAL); + rrddim_add(stbytes, "out", NULL, -8, 1024, RRD_ALGORITHM_INCREMENTAL); } else rrdset_next(stbytes); rrddim_set(stbytes, "in", (collected_number) gs.bytes_received); @@ -201,13 +209,14 @@ void global_statistics_charts(void) { // ---------------------------------------------------------------- - if (!stduration) stduration = rrdset_find("netdata.response_time"); + if (!stduration) stduration = rrdset_find_localhost("netdata.response_time"); if (!stduration) { - stduration = rrdset_create("netdata", "response_time", NULL, "netdata", NULL, "NetData API Response Time", - "ms/request", 130400, rrd_update_every, RRDSET_TYPE_LINE); + stduration = rrdset_create_localhost("netdata", "response_time", NULL, "netdata", NULL + , "NetData API Response Time", "ms/request", 130400, localhost->rrd_update_every + , RRDSET_TYPE_LINE); - rrddim_add(stduration, "average", NULL, 1, 1000, RRDDIM_ABSOLUTE); - rrddim_add(stduration, "max", NULL, 1, 1000, RRDDIM_ABSOLUTE); + rrddim_add(stduration, "average", NULL, 1, 1000, RRD_ALGORITHM_ABSOLUTE); + rrddim_add(stduration, "max", NULL, 1, 1000, RRD_ALGORITHM_ABSOLUTE); } else rrdset_next(stduration); uint64_t gweb_usec = gs.web_usec; @@ -232,13 +241,13 @@ void global_statistics_charts(void) { // ---------------------------------------------------------------- - if (!stcompression) stcompression = rrdset_find("netdata.compression_ratio"); + if (!stcompression) stcompression = rrdset_find_localhost("netdata.compression_ratio"); if (!stcompression) { - stcompression = rrdset_create("netdata", "compression_ratio", NULL, "netdata", NULL, - "NetData API Responses Compression Savings Ratio", "percentage", 130500, - rrd_update_every, RRDSET_TYPE_LINE); + stcompression = rrdset_create_localhost("netdata", "compression_ratio", NULL, "netdata", NULL + , "NetData API Responses Compression Savings Ratio", "percentage" + , 130500, localhost->rrd_update_every, RRDSET_TYPE_LINE); - rrddim_add(stcompression, "savings", NULL, 1, 1000, RRDDIM_ABSOLUTE); + rrddim_add(stcompression, "savings", NULL, 1, 1000, RRD_ALGORITHM_ABSOLUTE); } else rrdset_next(stcompression); // since we don't lock here to read the global statistics @@ -259,4 +268,4 @@ void global_statistics_charts(void) { rrddim_set(stcompression, "savings", compression_ratio); rrdset_done(stcompression); -} \ No newline at end of file +}