[master] c53ab05 Get rid of the workthread VSL buffer.
Poul-Henning Kamp
phk at varnish-cache.org
Mon Feb 20 10:43:53 CET 2012
commit c53ab05e9bc6f892d1823a3378bb47f054018906
Author: Poul-Henning Kamp <phk at FreeBSD.org>
Date: Mon Feb 20 09:43:41 2012 +0000
Get rid of the workthread VSL buffer.
diff --git a/bin/varnishd/cache/cache.h b/bin/varnishd/cache/cache.h
index 028abe9..45f36f2 100644
--- a/bin/varnishd/cache/cache.h
+++ b/bin/varnishd/cache/cache.h
@@ -312,8 +312,6 @@ struct worker {
struct VCL_conf *vcl;
- struct vsl_log vsl[1];
-
struct ws aws[1];
diff --git a/bin/varnishd/cache/cache_center.c b/bin/varnishd/cache/cache_center.c
index 9aaa117..57a7e05 100644
--- a/bin/varnishd/cache/cache_center.c
+++ b/bin/varnishd/cache/cache_center.c
@@ -402,7 +402,7 @@ cnt_done(struct sess *sp, struct worker *wrk, struct req *req)
req->xid, sp->t_req, sp->t_idle, dh, dp, da);
}
req->xid = 0;
- VSL_Flush(wrk->vsl, 0);
+ VSL_Flush(sp->req->vsl, 0);
sp->t_req = NAN;
req->t_resp = NAN;
@@ -1623,7 +1623,6 @@ CNT_Session(struct sess *sp)
WS_Assert(wrk->aws);
CHECK_OBJ_ORNULL(wrk->nobjhead, OBJHEAD_MAGIC);
}
- VSL_Flush(wrk->vsl, 0);
#define ACCT(foo) AZ(wrk->acct_tmp.foo);
#include "tbl/acct_fields.h"
#undef ACCT
diff --git a/bin/varnishd/cache/cache_dir.c b/bin/varnishd/cache/cache_dir.c
index 5275680..6554b18 100644
--- a/bin/varnishd/cache/cache_dir.c
+++ b/bin/varnishd/cache/cache_dir.c
@@ -57,9 +57,10 @@ VDI_CloseFd(struct worker *wrk, struct vbc **vbp)
VSLb(vc->vsl, SLT_BackendClose, "%s", bp->display_name);
- /* Checkpoint log to flush all info related to this connection
- before the OS reuses the FD */
- VSL_Flush(wrk->vsl, 0);
+ /*
+ * Checkpoint log to flush all info related to this connection
+ * before the OS reuses the FD
+ */
VSL_Flush(vc->vsl, 0);
vc->vsl->wid = vc->orig_vsl_id;
vc->vsl = NULL;
@@ -91,11 +92,7 @@ VDI_RecycleFd(struct worker *wrk, struct vbc **vbp)
VSLb(vc->vsl, SLT_BackendReuse, "%s", bp->display_name);
- /*
- * Flush the shmlog, so that another session reusing this backend
- * will log chronologically later than our use of it.
- */
- VSL_Flush(wrk->vsl, 0);
+ /* XXX: revisit this hack */
VSL_Flush(vc->vsl, 0);
vc->vsl->wid = vc->orig_vsl_id;
vc->vsl = NULL;
diff --git a/bin/varnishd/cache/cache_esi_deliver.c b/bin/varnishd/cache/cache_esi_deliver.c
index 669a594..dd3d98a 100644
--- a/bin/varnishd/cache/cache_esi_deliver.c
+++ b/bin/varnishd/cache/cache_esi_deliver.c
@@ -45,18 +45,18 @@ static void
ved_include(struct sess *sp, const char *src, const char *host)
{
struct object *obj;
- struct worker *w;
+ struct worker *wrk;
char *sp_ws_wm;
char *wrk_ws_wm;
unsigned sxid, res_mode;
- w = sp->wrk;
+ wrk = sp->wrk;
if (sp->req->esi_level >= cache_param->max_esi_depth)
return;
sp->req->esi_level++;
- (void)WRW_FlushRelease(w);
+ (void)WRW_FlushRelease(wrk);
obj = sp->req->obj;
sp->req->obj = NULL;
@@ -67,7 +67,7 @@ ved_include(struct sess *sp, const char *src, const char *host)
/* Take a workspace snapshot */
sp_ws_wm = WS_Snapshot(sp->req->ws);
- wrk_ws_wm = WS_Snapshot(w->aws); /* XXX ? */
+ wrk_ws_wm = WS_Snapshot(wrk->aws); /* XXX ? */
http_SetH(sp->req->http, HTTP_HDR_URL, src);
if (host != NULL && *host != '\0') {
@@ -93,12 +93,11 @@ ved_include(struct sess *sp, const char *src, const char *host)
sxid = sp->req->xid;
while (1) {
- sp->wrk = w;
+ sp->wrk = wrk;
CNT_Session(sp);
if (sp->step == STP_DONE)
break;
AZ(sp->wrk);
- VSL_Flush(w->vsl, 0);
DSL(0x20, SLT_Debug, sp->vsl_id, "loop waiting for ESI");
(void)usleep(10000);
}
@@ -111,7 +110,7 @@ ved_include(struct sess *sp, const char *src, const char *host)
/* Reset the workspace */
WS_Reset(sp->req->ws, sp_ws_wm);
- WS_Reset(w->aws, wrk_ws_wm); /* XXX ? */
+ WS_Reset(wrk->aws, wrk_ws_wm); /* XXX ? */
WRW_Reserve(sp->wrk, &sp->fd, sp->req->vsl, sp->req->t_resp);
if (sp->req->res_mode & RES_CHUNKED)
diff --git a/bin/varnishd/cache/cache_fetch.c b/bin/varnishd/cache/cache_fetch.c
index 05ac8a3..8f76c24 100644
--- a/bin/varnishd/cache/cache_fetch.c
+++ b/bin/varnishd/cache/cache_fetch.c
@@ -442,9 +442,6 @@ FetchHdr(struct sess *sp, int need_host_hdr, int sendbody)
return (retry);
}
- /* Checkpoint the vsl.here */
- VSL_Flush(wrk->vsl, 0);
-
/* XXX is this the right place? */
VSC_C_main->backend_req++;
diff --git a/bin/varnishd/cache/cache_session.c b/bin/varnishd/cache/cache_session.c
index f41b7ec..ba52ad3 100644
--- a/bin/varnishd/cache/cache_session.c
+++ b/bin/varnishd/cache/cache_session.c
@@ -133,7 +133,6 @@ ses_pool_task(struct worker *wrk, void *arg)
THR_SetSession(NULL);
WS_Assert(wrk->aws);
AZ(wrk->wrw);
- assert(wrk->vsl->wlp == wrk->vsl->wlb);
if (cache_param->diag_bitmap & 0x00040000) {
if (wrk->vcl != NULL)
VCL_Rel(&wrk->vcl);
diff --git a/bin/varnishd/cache/cache_wrk.c b/bin/varnishd/cache/cache_wrk.c
index d28a58c..cc3a061 100644
--- a/bin/varnishd/cache/cache_wrk.c
+++ b/bin/varnishd/cache/cache_wrk.c
@@ -94,13 +94,11 @@ wrk_bgthread(void *arg)
{
struct bgthread *bt;
struct worker wrk;
- uint32_t logbuf[1024]; /* XXX: size ? */
CAST_OBJ_NOTNULL(bt, arg, BGTHREAD_MAGIC);
THR_SetName(bt->name);
memset(&wrk, 0, sizeof wrk);
wrk.magic = WORKER_MAGIC;
- VSL_Setup(wrk.vsl, logbuf, sizeof logbuf);
(void)bt->func(&wrk, bt->priv);
@@ -126,10 +124,9 @@ WRK_BgThread(pthread_t *thr, const char *name, bgthread_t *func, void *priv)
/*--------------------------------------------------------------------*/
static void *
-wrk_thread_real(void *priv, unsigned shm_workspace, unsigned thread_workspace)
+wrk_thread_real(void *priv, unsigned thread_workspace)
{
struct worker *w, ww;
- uint32_t wlog[shm_workspace / 4];
unsigned char ws[thread_workspace];
THR_SetName("cache-worker");
@@ -137,7 +134,6 @@ wrk_thread_real(void *priv, unsigned shm_workspace, unsigned thread_workspace)
memset(w, 0, sizeof *w);
w->magic = WORKER_MAGIC;
w->lastused = NAN;
- VSL_Setup(w->vsl, wlog, sizeof wlog);
AZ(pthread_cond_init(&w->cond, NULL));
WS_Init(w->aws, "wrk", ws, thread_workspace);
@@ -162,9 +158,7 @@ void *
WRK_thread(void *priv)
{
- return (wrk_thread_real(priv,
- cache_param->shm_workspace,
- cache_param->workspace_thread));
+ return (wrk_thread_real(priv, cache_param->workspace_thread));
}
void
diff --git a/bin/varnishd/mgt/mgt_param.c b/bin/varnishd/mgt/mgt_param.c
index a5cde62..255a3ef 100644
--- a/bin/varnishd/mgt/mgt_param.c
+++ b/bin/varnishd/mgt/mgt_param.c
@@ -778,16 +778,6 @@ static const struct parspec input_parspec[] = {
"Minimum is 1k bytes.",
0,
"4k", "bytes" },
- { "shm_workspace",
- tweak_bytes_u, &mgt_param.shm_workspace, 4096, UINT_MAX,
- "Bytes of shmlog workspace allocated for worker threads. "
- "If too big, it wastes some ram, if too small it causes "
- "needless flushes of the SHM workspace.\n"
- "These flushes show up in stats as "
- "\"SHM flushes due to overflow\".\n"
- "Minimum is 4096 bytes.",
- DELAYED_EFFECT,
- "8k", "bytes" },
{ "shm_reclen",
tweak_bytes_u, &mgt_param.shm_reclen, 16, 65535,
"Maximum number of bytes in SHM log record.\n"
More information about the varnish-commit
mailing list