[6.0] 79101ecc6 Move the wrk+pool summed stats into group 'wrk'.
Dridi Boukelmoune
dridi.boukelmoune at gmail.com
Wed Oct 31 13:08:21 UTC 2018
commit 79101ecc60fcb197f5451292d3c69d2894134a44
Author: Poul-Henning Kamp <phk at FreeBSD.org>
Date: Mon Sep 24 07:46:48 2018 +0000
Move the wrk+pool summed stats into group 'wrk'.
This eliminates read-add-zero-write on counters outside this group.
diff --git a/bin/varnishd/VSC_main.vsc b/bin/varnishd/VSC_main.vsc
index 9ec57517a..3f42feb1c 100644
--- a/bin/varnishd/VSC_main.vsc
+++ b/bin/varnishd/VSC_main.vsc
@@ -5,10 +5,11 @@
.. varnish_vsc_begin:: main
:oneliner: Main counters
:order: 10
- :sumfunction:
+ :sumfunction: wrk_wrk wrk
.. varnish_vsc:: summs
:level: debug
+ :group: wrk
:oneliner: stat summ operations
Number of times per-thread statistics were summed into the
@@ -21,16 +22,19 @@
How long the child process has been running.
.. varnish_vsc:: sess_conn
+ :group: wrk
:oneliner: Sessions accepted
Count of sessions successfully accepted
.. varnish_vsc:: sess_drop
+ :group: wrk
:oneliner: Sessions dropped
Count of sessions silently dropped due to lack of worker thread.
.. varnish_vsc:: sess_fail
+ :group: wrk
:oneliner: Session accept failures
Count of failures to accept TCP connection.
@@ -39,64 +43,75 @@
give more detailed information.
.. varnish_vsc:: sess_fail_econnaborted
+ :group: wrk
:oneliner: Session accept failures: connection aborted
Detailed reason for sess_fail: Connection aborted by the
client, usually harmless.
.. varnish_vsc:: sess_fail_eintr
+ :group: wrk
:oneliner: Session accept failures: interrupted system call
Detailed reason for sess_fail: The accept() call was
interrupted, usually harmless
.. varnish_vsc:: sess_fail_emfile
+ :group: wrk
:oneliner: Session accept failures: too many open files
Detailed reason for sess_fail: No file descriptor was
available. Consider raising RLIMIT_NOFILE (see ulimit -n).
.. varnish_vsc:: sess_fail_ebadf
+ :group: wrk
:oneliner: Session accept failures: bad file descriptor
Detailed reason for sess_fail: The listen socket file
descriptor was invalid. Should never happen.
.. varnish_vsc:: sess_fail_enomem
+ :group: wrk
:oneliner: Session accept failures: not enough memory
Detailed reason for sess_fail: Most likely insufficient
socket buffer memory. Should never happen
.. varnish_vsc:: sess_fail_other
+ :group: wrk
:oneliner: Session accept failures: other
Detailed reason for sess_fail: neither of the above, see
Debug log (varnishlog -g raw -I Debug:^Accept).
.. varnish_vsc:: client_req_400
+ :group: wrk
:oneliner: Client requests received, subject to 400 errors
400 means we couldn't make sense of the request, it was malformed
in some drastic way.
.. varnish_vsc:: client_req_417
+ :group: wrk
:oneliner: Client requests received, subject to 417 errors
417 means that something went wrong with an Expect: header.
.. varnish_vsc:: client_req
+ :group: wrk
:oneliner: Good client requests received
The count of parseable client requests seen.
.. varnish_vsc:: cache_hit
+ :group: wrk
:oneliner: Cache hits
Count of cache hits. A cache hit indicates that an object has been
delivered to a client without fetching it from a backend server.
.. varnish_vsc:: cache_hit_grace
+ :group: wrk
:oneliner: Cache grace hits
Count of cache hits with grace. A cache hit with grace is a cache
@@ -104,6 +119,7 @@
included in the cache_hit counter.
.. varnish_vsc:: cache_hitpass
+ :group: wrk
:oneliner: Cache hits for pass.
Count of hits for pass. A cache hit for pass indicates that Varnish
@@ -112,6 +128,7 @@
decision is being used.
.. varnish_vsc:: cache_hitmiss
+ :group: wrk
:oneliner: Cache hits for miss.
Count of hits for miss. A cache hit for miss indicates that Varnish
@@ -120,6 +137,7 @@
cached decision is being used.
.. varnish_vsc:: cache_miss
+ :group: wrk
:oneliner: Cache misses
Count of misses. A cache miss indicates the object was fetched from
@@ -161,56 +179,67 @@
.. varnish_vsc:: fetch_head
+ :group: wrk
:oneliner: Fetch no body (HEAD)
beresp with no body because the request is HEAD.
.. varnish_vsc:: fetch_length
+ :group: wrk
:oneliner: Fetch with Length
beresp.body with Content-Length.
.. varnish_vsc:: fetch_chunked
+ :group: wrk
:oneliner: Fetch chunked
beresp.body with Chunked.
.. varnish_vsc:: fetch_eof
+ :group: wrk
:oneliner: Fetch EOF
beresp.body with EOF.
.. varnish_vsc:: fetch_bad
+ :group: wrk
:oneliner: Fetch bad T-E
beresp.body length/fetch could not be determined.
.. varnish_vsc:: fetch_none
+ :group: wrk
:oneliner: Fetch no body
beresp.body empty
.. varnish_vsc:: fetch_1xx
+ :group: wrk
:oneliner: Fetch no body (1xx)
beresp with no body because of 1XX response.
.. varnish_vsc:: fetch_204
+ :group: wrk
:oneliner: Fetch no body (204)
beresp with no body because of 204 response.
.. varnish_vsc:: fetch_304
+ :group: wrk
:oneliner: Fetch no body (304)
beresp with no body because of 304 response.
.. varnish_vsc:: fetch_failed
+ :group: wrk
:oneliner: Fetch failed (all causes)
beresp fetch failed.
.. varnish_vsc:: fetch_no_thread
+ :group: wrk
:oneliner: Fetch failed (no thread)
beresp fetch failed, no thread available.
@@ -259,12 +288,14 @@
per second. See also parameter thread_queue_limit.
.. varnish_vsc:: busy_sleep
+ :group: wrk
:oneliner: Number of requests sent to sleep on busy objhdr
Number of requests sent to sleep without a worker thread because
they found a busy object.
.. varnish_vsc:: busy_wakeup
+ :group: wrk
:oneliner: Number of requests woken after sleep on busy objhdr
Number of requests taken off the busy object sleep list and rescheduled.
@@ -295,6 +326,7 @@
.. varnish_vsc:: n_object
:type: gauge
+ :group: wrk
:oneliner: object structs made
Approximate number of HTTP objects (headers + body, if present) in
@@ -303,12 +335,14 @@
.. varnish_vsc:: n_vampireobject
:type: gauge
:level: diag
+ :group: wrk
:oneliner: unresurrected objects
Number of unresurrected objects
.. varnish_vsc:: n_objectcore
:type: gauge
+ :group: wrk
:oneliner: objectcore structs made
Approximate number of object metadata elements in the cache. Each
@@ -317,6 +351,7 @@
.. varnish_vsc:: n_objecthead
:type: gauge
+ :group: wrk
:oneliner: objecthead structs made
Approximate number of different hash entries in the cache.
@@ -358,72 +393,83 @@
.. varnish_vsc:: s_sess
+ :group: wrk
:oneliner: Total sessions seen
.. varnish_vsc:: s_pipe
+ :group: wrk
:oneliner: Total pipe sessions seen
.. varnish_vsc:: s_pass
+ :group: wrk
:oneliner: Total pass-ed requests seen
.. varnish_vsc:: s_fetch
+ :group: wrk
:oneliner: Total backend fetches initiated
.. varnish_vsc:: s_synth
+ :group: wrk
:oneliner: Total synthetic responses made
.. varnish_vsc:: s_req_hdrbytes
- :oneliner: Request header bytes
:format: bytes
+ :group: wrk
+ :oneliner: Request header bytes
Total request header bytes received
.. varnish_vsc:: s_req_bodybytes
- :oneliner: Request body bytes
:format: bytes
+ :group: wrk
+ :oneliner: Request body bytes
Total request body bytes received
.. varnish_vsc:: s_resp_hdrbytes
- :oneliner: Response header bytes
:format: bytes
+ :group: wrk
+ :oneliner: Response header bytes
Total response header bytes transmitted
.. varnish_vsc:: s_resp_bodybytes
- :oneliner: Response body bytes
:format: bytes
+ :group: wrk
+ :oneliner: Response body bytes
Total response body bytes transmitted
- :format: bytes
.. varnish_vsc:: s_pipe_hdrbytes
- :oneliner: Pipe request header bytes
:format: bytes
+ :group: wrk
+ :oneliner: Pipe request header bytes
Total request bytes received for piped sessions
.. varnish_vsc:: s_pipe_in
- :oneliner: Piped bytes from client
:format: bytes
+ :group: wrk
+ :oneliner: Piped bytes from client
Total number of bytes forwarded from clients in pipe sessions
.. varnish_vsc:: s_pipe_out
- :oneliner: Piped bytes to client
:format: bytes
+ :group: wrk
+ :oneliner: Piped bytes to client
Total number of bytes forwarded to clients in pipe sessions
.. varnish_vsc:: sess_closed
+ :group: wrk
:oneliner: Session Closed
-
.. varnish_vsc:: sess_closed_err
:oneliner: Session Closed with error
@@ -431,11 +477,12 @@
for detailed breakdown
.. varnish_vsc:: sess_readahead
+ :group: wrk
:oneliner: Session Read Ahead
-
.. varnish_vsc:: sess_herd
:level: diag
+ :group: wrk
:oneliner: Session herd
Number of times the timeout_linger triggered
@@ -589,6 +636,7 @@
.. varnish_vsc:: vcl_fail
+ :group: wrk
:oneliner: VCL failures
Count of failures which prevented VCL from completing.
@@ -754,6 +802,7 @@
Number of objects received by expiry thread for handling.
.. varnish_vsc:: hcb_nolock
+ :group: wrk
:level: debug
:oneliner: HCB Lookups without lock
diff --git a/bin/varnishd/cache/cache.h b/bin/varnishd/cache/cache.h
index aef3f2068..2f14cefa9 100644
--- a/bin/varnishd/cache/cache.h
+++ b/bin/varnishd/cache/cache.h
@@ -86,6 +86,7 @@ enum {
struct VSC_lck;
struct VSC_main;
+struct VSC_main_wrk;
struct backend;
struct ban;
struct ban_proto;
@@ -246,7 +247,7 @@ struct worker {
struct objhead *nobjhead;
struct objcore *nobjcore;
void *nhashpriv;
- struct VSC_main *stats;
+ struct VSC_main_wrk *stats;
struct vsl_log *vsl; // borrowed from req/bo
struct pool_task task;
diff --git a/bin/varnishd/cache/cache_pool.c b/bin/varnishd/cache/cache_pool.c
index f2bcc23f7..35be8ad00 100644
--- a/bin/varnishd/cache/cache_pool.c
+++ b/bin/varnishd/cache/cache_pool.c
@@ -50,20 +50,12 @@ static VTAILQ_HEAD(,pool) pools = VTAILQ_HEAD_INITIALIZER(pools);
* Summing of stats into global stats counters
*/
-static void
-pool_sumstat(const struct VSC_main *src)
-{
-
- Lck_AssertHeld(&wstat_mtx);
- VSC_main_Summ(VSC_C_main, src);
-}
-
void
Pool_Sumstat(const struct worker *wrk)
{
Lck_Lock(&wstat_mtx);
- pool_sumstat(wrk->stats);
+ VSC_main_Summ_wrk(VSC_C_main, wrk->stats);
Lck_Unlock(&wstat_mtx);
memset(wrk->stats, 0, sizeof *wrk->stats);
}
@@ -73,7 +65,7 @@ Pool_TrySumstat(const struct worker *wrk)
{
if (Lck_Trylock(&wstat_mtx))
return (0);
- pool_sumstat(wrk->stats);
+ VSC_main_Summ_wrk(VSC_C_main, wrk->stats);
Lck_Unlock(&wstat_mtx);
memset(wrk->stats, 0, sizeof *wrk->stats);
return (1);
@@ -121,14 +113,14 @@ Pool_PurgeStat(unsigned nobj)
void v_matchproto_(task_func_t)
pool_stat_summ(struct worker *wrk, void *priv)
{
- struct VSC_main *src;
+ struct VSC_main_wrk *src;
CHECK_OBJ_NOTNULL(wrk, WORKER_MAGIC);
CHECK_OBJ_NOTNULL(wrk->pool, POOL_MAGIC);
AN(priv);
src = priv;
Lck_Lock(&wstat_mtx);
- pool_sumstat(src);
+ VSC_main_Summ_wrk(VSC_C_main, src);
Lck_Unlock(&wstat_mtx);
memset(src, 0, sizeof *src);
AZ(wrk->pool->b_stat);
diff --git a/bin/varnishd/cache/cache_pool.h b/bin/varnishd/cache/cache_pool.h
index c954aee8c..e7a6a618b 100644
--- a/bin/varnishd/cache/cache_pool.h
+++ b/bin/varnishd/cache/cache_pool.h
@@ -53,8 +53,8 @@ struct pool {
uintmax_t sdropped;
uintmax_t rdropped;
uintmax_t nqueued;
- struct VSC_main *a_stat;
- struct VSC_main *b_stat;
+ struct VSC_main_wrk *a_stat;
+ struct VSC_main_wrk *b_stat;
struct mempool *mpl_req;
struct mempool *mpl_sess;
diff --git a/bin/varnishd/cache/cache_req.c b/bin/varnishd/cache/cache_req.c
index 036056740..991487201 100644
--- a/bin/varnishd/cache/cache_req.c
+++ b/bin/varnishd/cache/cache_req.c
@@ -44,7 +44,7 @@
#include "vtim.h"
void
-Req_AcctLogCharge(struct VSC_main *ds, struct req *req)
+Req_AcctLogCharge(struct VSC_main_wrk *ds, struct req *req)
{
struct acct_req *a;
diff --git a/bin/varnishd/cache/cache_varnishd.h b/bin/varnishd/cache/cache_varnishd.h
index 9d5d78829..011ebafe7 100644
--- a/bin/varnishd/cache/cache_varnishd.h
+++ b/bin/varnishd/cache/cache_varnishd.h
@@ -318,7 +318,7 @@ void Req_Release(struct req *);
void Req_Rollback(struct req *req);
void Req_Cleanup(struct sess *sp, struct worker *wrk, struct req *req);
void Req_Fail(struct req *req, enum sess_close reason);
-void Req_AcctLogCharge(struct VSC_main *, struct req *);
+void Req_AcctLogCharge(struct VSC_main_wrk *, struct req *);
/* cache_req_body.c */
int VRB_Ignore(struct req *);
diff --git a/bin/varnishd/cache/cache_wrk.c b/bin/varnishd/cache/cache_wrk.c
index 7cd02533d..be98b4e5e 100644
--- a/bin/varnishd/cache/cache_wrk.c
+++ b/bin/varnishd/cache/cache_wrk.c
@@ -61,7 +61,7 @@ wrk_bgthread(void *arg)
{
struct bgthread *bt;
struct worker wrk;
- struct VSC_main ds;
+ struct VSC_main_wrk ds;
CAST_OBJ_NOTNULL(bt, arg, BGTHREAD_MAGIC);
THR_SetName(bt->name);
@@ -98,7 +98,7 @@ WRK_Thread(struct pool *qp, size_t stacksize, unsigned thread_workspace)
{
// child_signal_handler stack overflow check uses struct worker addr
struct worker *w, ww;
- struct VSC_main ds;
+ struct VSC_main_wrk ds;
unsigned char ws[thread_workspace];
AN(qp);
@@ -133,11 +133,11 @@ WRK_Thread(struct pool *qp, size_t stacksize, unsigned thread_workspace)
*/
static void
-pool_addstat(struct VSC_main *dst, struct VSC_main *src)
+pool_addstat(struct VSC_main_wrk *dst, struct VSC_main_wrk *src)
{
dst->summs++;
- VSC_main_Summ(dst, src);
+ VSC_main_Summ_wrk_wrk(dst, src);
memset(src, 0, sizeof *src);
}
diff --git a/lib/libvcc/vsctool.py b/lib/libvcc/vsctool.py
index d4e210deb..eb795e076 100644
--- a/lib/libvcc/vsctool.py
+++ b/lib/libvcc/vsctool.py
@@ -93,6 +93,7 @@ class CounterSet(object):
self.head = m
self.completed = False
self.off = 0
+ self.gnames = None
def addmbr(self, m, g):
'''Add a counter'''
@@ -168,7 +169,13 @@ class CounterSet(object):
fo.write(self.struct + " {\n")
for i in self.mbrs:
- fo.write("\tuint64_t\t%s;\n" % i.arg)
+ s = "\tuint64_t\t%s;" % i.arg
+ g = i.param.get("group")
+ if g is not None:
+ while len(s.expandtabs()) < 64:
+ s += "\t"
+ s += "/* %s */" % g
+ fo.write(s + "\n")
fo.write("};\n")
fo.write("\n")
@@ -189,14 +196,19 @@ class CounterSet(object):
fo.write("void VSC_" + self.name + "_Destroy")
fo.write("(struct vsc_seg **);\n")
- if 'sumfunction' in self.head.param:
- fo.write("void VSC_" + self.name + "_Summ")
- fo.write("(" + self.struct + " *, ")
- fo.write("const " + self.struct + " *);\n")
- for i in self.gnames:
- fo.write("void VSC_" + self.name + "_Summ_" + i)
- fo.write("(" + self.struct + " *, ")
- fo.write("const " + self.struct + "_" + i + " *);\n")
+ sf = self.head.param.get('sumfunction')
+ if sf is not None:
+ for i in sf.split():
+ j = i.split("_")
+ assert len(j) <= 2
+ if len(j) == 1:
+ fo.write("void VSC_" + self.name + "_Summ_" + i)
+ fo.write("(" + self.struct + " *, ")
+ fo.write("const " + self.struct + "_" + i + " *);\n")
+ else:
+ fo.write("void VSC_" + self.name + "_Summ_" + i)
+ fo.write("(" + self.struct + "_" + j[0] + " *, ")
+ fo.write("const " + self.struct + "_" + j[1] + " *);\n")
def emit_c_paranoia(self, fo):
'''Emit asserts to make sure compiler gets same byte index'''
@@ -211,27 +223,23 @@ class CounterSet(object):
fo.write("#undef PARANOIA\n")
- def emit_c_sumfunc(self, fo, g=None):
+ def emit_c_sumfunc(self, fo, tgt):
'''Emit a function summ up countersets'''
fo.write("\n")
fo.write("void\n")
fo.write("VSC_" + self.name + "_Summ")
- if g is not None:
- fo.write("_" + g)
- fo.write("(" + self.struct + " *dst, ")
- fo.write("const " + self.struct)
- if g is not None:
- fo.write("_" + g)
- fo.write(" *src)\n")
+ fo.write("_" + tgt[0])
+ if len(tgt) > 1:
+ fo.write("_" + tgt[1])
+ fo.write("(" + self.struct + "_" + tgt[1])
+ else:
+ fo.write("(" + self.struct)
+ fo.write(" *dst, const " + self.struct + "_" + tgt[0] + " *src)\n")
fo.write("{\n")
fo.write("\n")
fo.write("\tAN(dst);\n")
fo.write("\tAN(src);\n")
- if g:
- l = self.groups[g]
- else:
- l = self.mbrs
- for i in l:
+ for i in self.groups[tgt[0]]:
s1 = "\tdst->" + i.arg + " +="
s2 = "src->" + i.arg + ";"
if len((s1 + " " + s2).expandtabs()) < 79:
@@ -300,10 +308,10 @@ class CounterSet(object):
self.emit_json(fo)
self.emit_c_newfunc(fo)
self.emit_c_destroyfunc(fo)
- if 'sumfunction' in self.head.param:
- self.emit_c_sumfunc(fo)
- for i in self.gnames:
- self.emit_c_sumfunc(fo, i)
+ sf = self.head.param.get('sumfunction')
+ if sf is not None:
+ for i in sf.split():
+ self.emit_c_sumfunc(fo, i.split("_"))
#######################################################################
More information about the varnish-commit
mailing list