[MAJOR] migrated task, tree64 and session to pool2

task and tree64 are already very close in size and are merged together.
Overall performance gained slightly by this simple change.
This commit is contained in:
Willy Tarreau
2007-05-13 19:43:47 +02:00
parent e6ce59deb7
commit c6ca1a02aa
11 changed files with 83 additions and 57 deletions

View File

@@ -111,7 +111,7 @@ int appsession_task_init(void)
static int initialized = 0;
struct task *t;
if (!initialized) {
if ((t = pool_alloc(task)) == NULL)
if ((t = pool_alloc2(pool2_task)) == NULL)
return -1;
t->wq = NULL;
t->qlist.p = NULL;

View File

@@ -2488,7 +2488,7 @@ int readcfgfile(const char *file)
if (newsrv->maxconn > 0) {
struct task *t;
if ((t = pool_alloc(task)) == NULL) {
if ((t = pool_alloc2(pool2_task)) == NULL) {
Alert("parsing [%s:%d] : out of memory.\n", file, linenum);
return -1;
}
@@ -2535,7 +2535,7 @@ int readcfgfile(const char *file)
while (newsrv != NULL) {
/* should this server be checked ? */
if (newsrv->state & SRV_CHECKED) {
if ((t = pool_alloc(task)) == NULL) {
if ((t = pool_alloc2(pool2_task)) == NULL) {
Alert("parsing [%s:%d] : out of memory.\n", file, linenum);
return -1;
}

View File

@@ -41,6 +41,7 @@
#include <proto/log.h>
#include <proto/hdr_idx.h>
#include <proto/proto_http.h>
#include <proto/session.h>
#include <proto/stream_sock.h>
#include <proto/task.h>
@@ -110,7 +111,7 @@ int event_accept(int fd) {
}
}
if ((s = pool_alloc(session)) == NULL) { /* disable this proxy for a while */
if ((s = pool_alloc2(pool2_session)) == NULL) { /* disable this proxy for a while */
Alert("out of memory in event_accept().\n");
EV_FD_CLR(fd, DIR_RD);
p->state = PR_STIDLE;
@@ -127,18 +128,18 @@ int event_accept(int fd) {
(((struct sockaddr_in *)&addr)->sin_addr.s_addr & p->mon_mask.s_addr) == p->mon_net.s_addr) {
if (p->mode == PR_MODE_TCP) {
close(cfd);
pool_free(session, s);
pool_free2(pool2_session, s);
continue;
}
s->flags |= SN_MONITOR;
}
if ((t = pool_alloc(task)) == NULL) { /* disable this proxy for a while */
if ((t = pool_alloc2(pool2_task)) == NULL) { /* disable this proxy for a while */
Alert("out of memory in event_accept().\n");
EV_FD_CLR(fd, DIR_RD);
p->state = PR_STIDLE;
close(cfd);
pool_free(session, s);
pool_free2(pool2_session, s);
return 0;
}
@@ -146,8 +147,8 @@ int event_accept(int fd) {
if (cfd >= global.maxsock) {
Alert("accept(): not enough free sockets. Raise -n argument. Giving up.\n");
close(cfd);
pool_free(task, t);
pool_free(session, s);
pool_free2(pool2_task, t);
pool_free2(pool2_session, s);
return 0;
}
@@ -156,8 +157,8 @@ int event_accept(int fd) {
(char *) &one, sizeof(one)) == -1)) {
Alert("accept(): cannot set the socket in non blocking mode. Giving up\n");
close(cfd);
pool_free(task, t);
pool_free(session, s);
pool_free2(pool2_task, t);
pool_free2(pool2_session, s);
return 0;
}
@@ -236,8 +237,8 @@ int event_accept(int fd) {
pool_alloc_from(p->req_cap_pool, p->nb_req_cap*sizeof(char *)))
== NULL) { /* no memory */
close(cfd); /* nothing can be done for this fd without memory */
pool_free(task, t);
pool_free(session, s);
pool_free2(pool2_task, t);
pool_free2(pool2_session, s);
return 0;
}
memset(txn->req.cap, 0, p->nb_req_cap*sizeof(char *));
@@ -251,8 +252,8 @@ int event_accept(int fd) {
if (txn->req.cap != NULL)
pool_free_to(p->req_cap_pool, txn->req.cap);
close(cfd); /* nothing can be done for this fd without memory */
pool_free(task, t);
pool_free(session, s);
pool_free2(pool2_task, t);
pool_free2(pool2_session, s);
return 0;
}
memset(txn->rsp.cap, 0, p->nb_rsp_cap*sizeof(char *));
@@ -267,8 +268,8 @@ int event_accept(int fd) {
if (txn->req.cap != NULL)
pool_free_to(p->req_cap_pool, txn->req.cap);
close(cfd); /* nothing can be done for this fd without memory */
pool_free(task, t);
pool_free(session, s);
pool_free2(pool2_task, t);
pool_free2(pool2_session, s);
return 0;
}
hdr_idx_init(&txn->hdr_idx);
@@ -354,8 +355,8 @@ int event_accept(int fd) {
if (txn->req.cap != NULL)
pool_free_to(p->req_cap_pool, txn->req.cap);
close(cfd); /* nothing can be done for this fd without memory */
pool_free(task, t);
pool_free(session, s);
pool_free2(pool2_task, t);
pool_free2(pool2_session, s);
return 0;
}
@@ -377,8 +378,8 @@ int event_accept(int fd) {
if (txn->req.cap != NULL)
pool_free_to(p->req_cap_pool, txn->req.cap);
close(cfd); /* nothing can be done for this fd without memory */
pool_free(task, t);
pool_free(session, s);
pool_free2(pool2_task, t);
pool_free2(pool2_session, s);
return 0;
}

View File

@@ -87,6 +87,7 @@
#include <proto/proxy.h>
#include <proto/queue.h>
#include <proto/server.h>
#include <proto/session.h>
#include <proto/stream_sock.h>
#include <proto/task.h>
@@ -292,6 +293,9 @@ void dump(int sig)
);
}
#endif
/* dump memory usage then free everything possible */
dump_pools();
pool_gc2();
}
#ifdef DEBUG_MEMORY
@@ -370,6 +374,8 @@ void init(int argc, char **argv)
localtime((time_t *)&now.tv_sec);
start_date = now;
init_task();
init_session();
init_proto_http();
cfg_polling_mechanism = POLL_USE_SELECT; /* select() is always available */
@@ -654,10 +660,10 @@ void deinit(void)
if (fdtab) free(fdtab);
pool_destroy(pool_session);
pool_destroy2(pool2_session);
pool_destroy(pool_buffer);
pool_destroy(pool_requri);
pool_destroy(pool_task);
pool_destroy2(pool2_task);
pool_destroy(pool_capture);
pool_destroy(pool_appsess);

View File

@@ -1,7 +1,7 @@
/*
* Server management functions.
*
* Copyright 2000-2006 Willy Tarreau <w@1wt.eu>
* Copyright 2000-2007 Willy Tarreau <w@1wt.eu>
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public License
@@ -26,7 +26,7 @@
#include <proto/queue.h>
void **pool_session = NULL;
struct pool_head *pool2_session;
/*
* frees the context associated to a session. It must have been removed first.
@@ -69,7 +69,15 @@ void session_free(struct session *s)
if (txn->srv_cookie)
pool_free(capture, txn->srv_cookie);
pool_free(session, s);
pool_free2(pool2_session, s);
}
/* perform minimal intializations, report 0 in case of error, 1 if OK. */
int init_session()
{
pool2_session = create_pool("session", sizeof(struct session), MEM_F_SHARED);
return pool2_session != NULL;
}

View File

@@ -11,6 +11,7 @@
*/
#include <common/config.h>
#include <common/memory.h>
#include <common/mini-clist.h>
#include <common/standard.h>
#include <common/time.h>
@@ -23,15 +24,22 @@
#include <import/bitops.h>
#include <import/tree.h>
void **pool_task= NULL;
void **pool_tree64 = NULL;
static struct ultree *stack[LLONGBITS];
struct pool_head *pool2_task, *pool2_tree64;
UL2TREE_HEAD(timer_wq);
void *eternity_queue = NULL;
void *run_queue = NULL;
/* perform minimal intializations, report 0 in case of error, 1 if OK. */
int init_task()
{
pool2_task = create_pool("task", sizeof(struct task), MEM_F_SHARED);
pool2_tree64 = create_pool("tree64", sizeof(struct tree64), MEM_F_SHARED);
return pool2_task && pool2_tree64;
}
struct ultree *ul2tree_insert(struct ultree *root, unsigned long h, unsigned long l)
{
return __ul2tree_insert(root, h, l);