[experimental-ims] 4571689 Shave 16 bytes of the session memory requirement by putting the sockaddr's directly into struct sess.

Geoff Simmons geoff at varnish-cache.org
Mon Jan 9 21:51:56 CET 2012


commit 4571689fdc7a7fff5f1b13ace0979bc0085181f3
Author: Poul-Henning Kamp <phk at FreeBSD.org>
Date:   Sun Sep 18 08:14:22 2011 +0000

    Shave 16 bytes of the session memory requirement by putting the
    sockaddr's directly into struct sess.

diff --git a/bin/varnishd/cache.h b/bin/varnishd/cache.h
index 5db137a..122ab34 100644
--- a/bin/varnishd/cache.h
+++ b/bin/varnishd/cache.h
@@ -548,8 +548,8 @@ struct sess {
 
 	socklen_t		sockaddrlen;
 	socklen_t		mysockaddrlen;
-	struct sockaddr_storage	*sockaddr;
-	struct sockaddr_storage	*mysockaddr;
+	struct sockaddr_storage	sockaddr;
+	struct sockaddr_storage	mysockaddr;
 	struct listen_sock	*mylsock;
 
 	/* formatted ascii client address */
diff --git a/bin/varnishd/cache_acceptor.c b/bin/varnishd/cache_acceptor.c
index b2a8015..50cc824 100644
--- a/bin/varnishd/cache_acceptor.c
+++ b/bin/varnishd/cache_acceptor.c
@@ -122,13 +122,13 @@ VCA_Prep(struct sess *sp)
 	char addr[VTCP_ADDRBUFSIZE];
 	char port[VTCP_PORTBUFSIZE];
 
-	VTCP_name(sp->sockaddr, sp->sockaddrlen,
+	VTCP_name(&sp->sockaddr, sp->sockaddrlen,
 	    addr, sizeof addr, port, sizeof port);
 	sp->addr = WS_Dup(sp->ws, addr);
 	sp->port = WS_Dup(sp->ws, port);
 	if (params->log_local_addr) {
-		AZ(getsockname(sp->fd, (void*)sp->mysockaddr, &sp->mysockaddrlen));
-		VTCP_name(sp->mysockaddr, sp->mysockaddrlen,
+		AZ(getsockname(sp->fd, (void*)&sp->mysockaddr, &sp->mysockaddrlen));
+		VTCP_name(&sp->mysockaddr, sp->mysockaddrlen,
 		    addr, sizeof addr, port, sizeof port);
 		VSL(SLT_SessionOpen, sp->fd, "%s %s %s %s",
 		    sp->addr, sp->port, addr, port);
@@ -264,7 +264,7 @@ VCA_SetupSess(struct worker *w)
 	sp->t_end = sp->t_end;
 	sp->mylsock = w->acceptlsock;
 	assert(w->acceptaddrlen <= sp->sockaddrlen);
-	memcpy(sp->sockaddr, &w->acceptaddr, w->acceptaddrlen);
+	memcpy(&sp->sockaddr, &w->acceptaddr, w->acceptaddrlen);
 	sp->sockaddrlen = w->acceptaddrlen;
 	sp->step = STP_FIRST;
 	vca_pace_good();
diff --git a/bin/varnishd/cache_session.c b/bin/varnishd/cache_session.c
index 80e8da5..7012263 100644
--- a/bin/varnishd/cache_session.c
+++ b/bin/varnishd/cache_session.c
@@ -56,7 +56,6 @@ struct sessmem {
 	void			*wsp;
 	struct http		*http[2];
 	VTAILQ_ENTRY(sessmem)	list;
-	struct sockaddr_storage	sockaddr[2];
 };
 
 struct sesspool {
@@ -152,11 +151,9 @@ ses_setup(struct sessmem *sm)
 
 	sp->magic = SESS_MAGIC;
 	sp->mem = sm;
-	sp->sockaddr = (void*)(&sm->sockaddr[0]);
-	sp->sockaddrlen = sizeof(sm->sockaddr[0]);
-	sp->mysockaddr = (void*)(&sm->sockaddr[1]);
-	sp->mysockaddrlen = sizeof(sm->sockaddr[1]);
-	sp->sockaddr->ss_family = sp->mysockaddr->ss_family = PF_UNSPEC;
+	sp->sockaddrlen = sizeof(sp->sockaddr);
+	sp->mysockaddrlen = sizeof(sp->mysockaddr);
+	sp->sockaddr.ss_family = sp->mysockaddr.ss_family = PF_UNSPEC;
 	sp->t_open = NAN;
 	sp->t_req = NAN;
 	sp->t_resp = NAN;
diff --git a/bin/varnishd/cache_vrt_var.c b/bin/varnishd/cache_vrt_var.c
index 2054953..e26b433 100644
--- a/bin/varnishd/cache_vrt_var.c
+++ b/bin/varnishd/cache_vrt_var.c
@@ -457,10 +457,10 @@ REQ_BOOL(hash_always_miss)
 /*--------------------------------------------------------------------*/
 
 struct sockaddr_storage *
-VRT_r_client_ip(const struct sess *sp)
+VRT_r_client_ip(struct sess *sp)
 {
 
-	return (sp->sockaddr);
+	return (&sp->sockaddr);
 }
 
 struct sockaddr_storage *
@@ -468,12 +468,13 @@ VRT_r_server_ip(struct sess *sp)
 {
 	int i;
 
-	if (sp->mysockaddr->ss_family == AF_UNSPEC) {
-		i = getsockname(sp->fd, (void*)sp->mysockaddr, &sp->mysockaddrlen);
+	if (sp->mysockaddr.ss_family == AF_UNSPEC) {
+		i = getsockname(sp->fd,
+		    (void*)&sp->mysockaddr, &sp->mysockaddrlen);
 		assert(VTCP_Check(i));
 	}
 
-	return (sp->mysockaddr);
+	return (&sp->mysockaddr);
 }
 
 const char*
@@ -506,10 +507,14 @@ VRT_r_server_hostname(struct sess *sp)
 int
 VRT_r_server_port(struct sess *sp)
 {
+	int i;
 
-	if (sp->mysockaddr->ss_family == AF_UNSPEC)
-		AZ(getsockname(sp->fd, (void*)sp->mysockaddr, &sp->mysockaddrlen));
-	return (VTCP_port(sp->mysockaddr));
+	if (sp->mysockaddr.ss_family == AF_UNSPEC) {
+		i = getsockname(sp->fd,
+		    (void*)&sp->mysockaddr, &sp->mysockaddrlen);
+		assert(VTCP_Check(i));
+	}
+	return (VTCP_port(&sp->mysockaddr));
 }
 
 /*--------------------------------------------------------------------*/
diff --git a/lib/libvcl/generate.py b/lib/libvcl/generate.py
index fde8bb2..779091e 100755
--- a/lib/libvcl/generate.py
+++ b/lib/libvcl/generate.py
@@ -107,7 +107,7 @@ sp_variables = (
 		'IP',
 		( 'proc',),
 		( ),
-		'const struct sess *'
+		'struct sess *'
 	),
 	('client.identity',
 		'STRING',



More information about the varnish-commit mailing list