mirror of
https://github.com/NLnetLabs/unbound.git
synced 2026-01-17 12:12:55 -05:00
query list config option. tpkg test.
git-svn-id: file:///svn/unbound/trunk@203 be551aaa-1e26-0410-a405-d3ace91eadb9
This commit is contained in:
parent
4affdd940f
commit
ae93dcac76
12 changed files with 56 additions and 7 deletions
|
|
@ -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);
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
||||
|
|
|
|||
|
|
@ -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>
|
||||
|
|
|
|||
BIN
testdata/fwd_three.tpkg
vendored
BIN
testdata/fwd_three.tpkg
vendored
Binary file not shown.
BIN
testdata/fwd_three_service.tpkg
vendored
Normal file
BIN
testdata/fwd_three_service.tpkg
vendored
Normal file
Binary file not shown.
2
testdata/fwd_two.rpl
vendored
2
testdata/fwd_two.rpl
vendored
|
|
@ -1,4 +1,6 @@
|
|||
; config options go here.
|
||||
server:
|
||||
num-queries-per-thread: 1
|
||||
CONFIG_END
|
||||
SCENARIO_BEGIN Sample of a valid query
|
||||
|
||||
|
|
|
|||
|
|
@ -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;}
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
|
|
|
|||
|
|
@ -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 */
|
||||
|
|
|
|||
|
|
@ -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 */
|
||||
|
|
|
|||
Loading…
Reference in a new issue