query list config option. tpkg test.

git-svn-id: file:///svn/unbound/trunk@203 be551aaa-1e26-0410-a405-d3ace91eadb9
This commit is contained in:
Wouter Wijngaards 2007-03-28 13:43:50 +00:00
parent 4affdd940f
commit ae93dcac76
12 changed files with 56 additions and 7 deletions

View file

@ -84,8 +84,8 @@ req_release(struct work_query* w)
/* no longer at max, start accepting again. */
listen_resume(w->worker->front);
}
log_assert(w->worker->num_requests >= 1);
w->worker->num_requests --;
log_assert(w->worker->num_requests >= 0);
w->next = w->worker->free_queries;
w->worker->free_queries = w;
}
@ -398,7 +398,7 @@ worker_create(struct daemon* daemon, int id)
static int
reqs_init(struct worker* worker)
{
int i;
size_t i;
for(i=0; i<worker->request_size; i++) {
struct work_query* q = (struct work_query*)calloc(1,
sizeof(struct work_query));
@ -406,10 +406,28 @@ reqs_init(struct worker* worker)
q->worker = worker;
q->next = worker->free_queries;
worker->free_queries = q;
q->all_next = worker->all_queries;
worker->all_queries = q;
}
return 1;
}
/** delete request list */
static void
reqs_delete(struct worker* worker)
{
struct work_query* q = worker->all_queries;
struct work_query* n;
while(q) {
n = q->all_next;
log_assert(q->worker == worker);
/* comm_reply closed in outside_network_delete */
query_info_clear(&q->qinfo);
free(q);
q = n;
}
}
int
worker_init(struct worker* worker, struct config_file *cfg,
struct listen_port* ports, size_t buffer_size, int do_sigs)
@ -484,7 +502,7 @@ worker_init(struct worker* worker, struct config_file *cfg,
return 0;
}
}
worker->request_size = 1;
worker->request_size = cfg->num_queries_per_thread;
if(!reqs_init(worker)) {
worker_delete(worker);
return 0;
@ -512,6 +530,7 @@ worker_delete(struct worker* worker)
{
if(!worker)
return;
reqs_delete(worker);
listen_delete(worker->front);
outside_network_delete(worker->back);
comm_signal_delete(worker->comsig);

View file

@ -80,6 +80,8 @@ struct work_query {
uint16_t query_id;
/** flags uint16 from query */
uint16_t query_flags;
/** next query in all-list */
struct work_query* all_next;
};
/**
@ -109,11 +111,13 @@ struct worker {
struct comm_point* cmd_com;
/** number of requests currently active */
int num_requests;
size_t num_requests;
/** number of requests that can be handled by this worker */
int request_size;
size_t request_size;
/** the free working queries */
struct work_query* free_queries;
/** list of all working queries */
struct work_query* all_queries;
/** address to forward to */
struct sockaddr_storage fwd_addr;

View file

@ -1,3 +1,8 @@
28 March 2007: Wouter
- new config option: num-queries-per-thread.
- added tpkg test for answering three queries at the same time
using one thread (from the query service list).
27 March 2007: Wouter
- added test for cache and not cached answers, in testbound replays.
- testbound can give config file and commandline options from the

View file

@ -44,6 +44,9 @@ server:
# more slabs reduce lock contention, but fracture memory usage.
# msg-cache-slabs: 4
# the number of queries that a thread gets to service.
# num-queries-per-thread: 1024
# Enable IPv4, "yes" or "no".
# do-ip4: yes

View file

@ -69,6 +69,8 @@ Number of bytes size of the message cache. Default is 4 megabytes.
Number of slabs in the message cache. Slabs reduce lock contention by threads.
Must be set to a power of 2. Setting (close) to the number of cpus is a
reasonable guess.
.It \fBnum-queries-per-thread:\fR <number>
The number of queries that every thread will service simultaneously.
.It \fBdo-ip4:\fR <yes or no>
Enable or disable whether ip4 queries are answered. Default is yes.
.It \fBdo-ip6:\fR <yes or no>

Binary file not shown.

BIN
testdata/fwd_three_service.tpkg vendored Normal file

Binary file not shown.

View file

@ -1,4 +1,6 @@
; config options go here.
server:
num-queries-per-thread: 1
CONFIG_END
SCENARIO_BEGIN Sample of a valid query

View file

@ -79,6 +79,7 @@ config_create()
cfg->outgoing_num_ports = 16;
cfg->msg_cache_size = 4 * 1024 * 1024;
cfg->msg_cache_slabs = 4;
cfg->num_queries_per_thread = 1024;
if(!(cfg->fwd_address = strdup(""))) {config_delete(cfg); return NULL;}
if(!(cfg->username = strdup(""))) {config_delete(cfg); return NULL;}
if(!(cfg->chrootdir = strdup(""))) {config_delete(cfg); return NULL;}

View file

@ -73,6 +73,8 @@ struct config_file {
size_t msg_cache_size;
/** slabs in the message cache. */
size_t msg_cache_slabs;
/** number of queries every thread can service */
size_t num_queries_per_thread;
/** forwarder address. string. If not NULL fwder mode is enabled. */
char* fwd_address;

View file

@ -116,6 +116,7 @@ logfile{COLON} { LEXOUT(("v(%s) ", yytext)); return VAR_LOGFILE;}
pidfile{COLON} { LEXOUT(("v(%s) ", yytext)); return VAR_PIDFILE;}
msg-cache-size{COLON} { LEXOUT(("v(%s) ", yytext)); return VAR_MSG_CACHE_SIZE;}
msg-cache-slabs{COLON} { LEXOUT(("v(%s) ", yytext)); return VAR_MSG_CACHE_SLABS;}
num-queries-per-thread{COLON} { LEXOUT(("v(%s) ", yytext)); return VAR_NUM_QUERIES_PER_THREAD;}
{NEWLINE} { LEXOUT(("NL\n")); cfg_parser->line++;}
/* Quoted strings. Strip leading and ending quotes */

View file

@ -72,7 +72,7 @@ extern struct config_parser_state* cfg_parser;
%token VAR_DO_IP4 VAR_DO_IP6 VAR_DO_UDP VAR_DO_TCP
%token VAR_FORWARD_TO VAR_FORWARD_TO_PORT VAR_CHROOT
%token VAR_USERNAME VAR_DIRECTORY VAR_LOGFILE VAR_PIDFILE
%token VAR_MSG_CACHE_SIZE VAR_MSG_CACHE_SLABS
%token VAR_MSG_CACHE_SIZE VAR_MSG_CACHE_SLABS VAR_NUM_QUERIES_PER_THREAD
%%
toplevelvars: /* empty */ | toplevelvars toplevelvar ;
@ -93,7 +93,8 @@ content_server: server_num_threads | server_verbosity | server_port |
server_do_ip6 | server_do_udp | server_do_tcp | server_forward_to |
server_forward_to_port | server_interface | server_chroot |
server_username | server_directory | server_logfile | server_pidfile |
server_msg_cache_size | server_msg_cache_slabs;
server_msg_cache_size | server_msg_cache_slabs |
server_num_queries_per_thread;
server_num_threads: VAR_NUM_THREADS STRING
{
OUTYY(("P(server_num_threads:%s)\n", $2));
@ -261,6 +262,15 @@ server_msg_cache_slabs: VAR_MSG_CACHE_SLABS STRING
free($2);
}
;
server_num_queries_per_thread: VAR_NUM_QUERIES_PER_THREAD STRING
{
OUTYY(("P(server_num_queries_per_thread:%s)\n", $2));
if(atoi($2) == 0)
yyerror("number expected");
else cfg_parser->cfg->num_queries_per_thread = atoi($2);
free($2);
}
;
%%
/* parse helper routines could be here */