Mailing List Archive

r870 - trunk/varnish-cache/bin/varnishd
Author: phk
Date: 2006-08-21 15:15:02 +0200 (Mon, 21 Aug 2006)
New Revision: 870

Modified:
trunk/varnish-cache/bin/varnishd/cache_session.c
Log:
Increase client hash to 1k

Cache used sessmem chunks on a private list and recycle from there,
no point in bothering malloc all the time.



Modified: trunk/varnish-cache/bin/varnishd/cache_session.c
===================================================================
--- trunk/varnish-cache/bin/varnishd/cache_session.c 2006-08-21 12:57:32 UTC (rev 869)
+++ trunk/varnish-cache/bin/varnishd/cache_session.c 2006-08-21 13:15:02 UTC (rev 870)
@@ -21,7 +21,7 @@
#include "shmlog.h"
#include "cache.h"

-#define CLIENT_HASH 256
+#define CLIENT_HASH 1024
#define CLIENT_TTL 30

/*--------------------------------------------------------------------*/
@@ -33,14 +33,18 @@
struct sess sess;
struct http http;
struct sockaddr sockaddr[2]; /* INET6 hack */
+ TAILQ_ENTRY(sessmem) list;
};

/*--------------------------------------------------------------------*/

+static TAILQ_HEAD(,sessmem) ses_free_mem =
+ TAILQ_HEAD_INITIALIZER(ses_free_mem);
+
TAILQ_HEAD(srcaddrhead ,srcaddr);
-
static struct srcaddrhead srcaddr_hash[CLIENT_HASH];
static pthread_mutex_t ses_mtx;
+static pthread_mutex_t ses_mem_mtx;

/*--------------------------------------------------------------------
* Assign a srcaddr to this session.
@@ -185,13 +189,21 @@
{
struct sessmem *sm;

- sm = calloc(
- sizeof *sm + params->mem_workspace,
- 1);
+ AZ(pthread_mutex_lock(&ses_mem_mtx));
+ sm = TAILQ_FIRST(&ses_free_mem);
+ if (sm != NULL)
+ TAILQ_REMOVE(&ses_free_mem, sm, list);
+ AZ(pthread_mutex_unlock(&ses_mem_mtx));
+ if (sm == NULL) {
+ sm = calloc(sizeof *sm + params->mem_workspace, 1);
+ sm->magic = SESSMEM_MAGIC;
+ VSL_stats->n_sess_mem++;
+ }
if (sm == NULL)
return (NULL);
- sm->magic = SESSMEM_MAGIC;
+ CHECK_OBJ_NOTNULL(sm, SESSMEM_MAGIC);
VSL_stats->n_sess++;
+ memset(&sm->sess, 0, sizeof sm->sess);
sm->sess.magic = SESS_MAGIC;
sm->sess.mem = sm;
sm->sess.http = &sm->http;
@@ -225,7 +237,9 @@
b->sess, b->req, b->pipe, b->pass,
b->fetch, b->hdrbytes, b->bodybytes);
CHECK_OBJ_NOTNULL(sp->mem, SESSMEM_MAGIC);
- free(sp->mem);
+ AZ(pthread_mutex_lock(&ses_mem_mtx));
+ TAILQ_INSERT_HEAD(&ses_free_mem, sp->mem, list);
+ AZ(pthread_mutex_unlock(&ses_mem_mtx));
}

/*--------------------------------------------------------------------*/
@@ -238,4 +252,5 @@
for (i = 0; i < CLIENT_HASH; i++)
TAILQ_INIT(&srcaddr_hash[i]);
AZ(pthread_mutex_init(&ses_mtx, NULL));
+ AZ(pthread_mutex_init(&ses_mem_mtx, NULL));
}