config settings for rrset cache.

git-svn-id: file:///svn/unbound/trunk@279 be551aaa-1e26-0410-a405-d3ace91eadb9
This commit is contained in:
Wouter Wijngaards 2007-05-04 07:34:10 +00:00
parent 3fea680228
commit 4732f7c4d6
8 changed files with 72 additions and 9 deletions

View file

@ -93,6 +93,18 @@ apply_dir(struct daemon* daemon, struct config_file* cfg, int cmdline_verbose)
fatal_exit("malloc failure updating config settings");
}
}
if(cfg->rrset_cache_size != slabhash_get_size(daemon->rrset_cache) ||
cfg->rrset_cache_slabs != daemon->rrset_cache->size) {
slabhash_delete(daemon->rrset_cache);
daemon->rrset_cache = slabhash_create(cfg->rrset_cache_slabs,
HASH_DEFAULT_STARTARRAY, cfg->rrset_cache_size,
ub_rrset_sizefunc, ub_rrset_compare,
ub_rrset_key_delete, rrset_data_delete,
&daemon->superalloc);
if(!daemon->rrset_cache) {
fatal_exit("malloc failure updating config settings");
}
}
}
/** Read existing pid from pidfile. */

View file

@ -1,5 +1,6 @@
4 May 2007: Wouter
- msgreply sizefunc is more accurate.
- config settings for rrset cache size and slabs.
3 May 2007: Wouter
- fill refs. Use new parse and encode to answer queries.

View file

@ -49,9 +49,17 @@ server:
# msg-cache-slabs: 4
# the number of queries that a thread gets to service.
# this must be a power of 2.
# num-queries-per-thread: 1024
# the amount of memory to use for the RRset cache.
# in bytes. default is 4 Mb
# rrset-cache-size: 4194304
# the number of slabs to use for the RRset cache.
# the number of slabs must be a power of 2.
# more slabs reduce lock contention, but fragment memory usage.
# rrset-cache-slabs: 4
# Enable IPv4, "yes" or "no".
# do-ip4: yes

View file

@ -71,6 +71,11 @@ 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 \fBrrset-cache-size:\fR <number>
Number of bytes size of the RRset cache. Default is 4 megabytes.
.It \fBrrset-cache-slabs:\fR <number>
Number of slabs in the RRset cache. Slabs reduce lock contention by threads.
Must be set to a power of 2.
.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>

View file

@ -80,17 +80,22 @@ config_create()
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;}
if(!(cfg->directory = strdup("/etc/unbound"))) {config_delete(cfg); return NULL;}
if(!(cfg->logfile = strdup(""))) {config_delete(cfg); return NULL;}
if(!(cfg->pidfile = strdup("unbound.pid"))) {config_delete(cfg); return NULL;}
cfg->rrset_cache_size = 4 * 1024 * 1024;
cfg->rrset_cache_slabs = 4;
if(!(cfg->fwd_address = strdup(""))) goto error_exit;
if(!(cfg->username = strdup(""))) goto error_exit;
if(!(cfg->chrootdir = strdup(""))) goto error_exit;
if(!(cfg->directory = strdup("/etc/unbound"))) goto error_exit;
if(!(cfg->logfile = strdup(""))) goto error_exit;
if(!(cfg->pidfile = strdup("unbound.pid"))) goto error_exit;
cfg->fwd_port = UNBOUND_DNS_PORT;
cfg->do_daemonize = 1;
cfg->num_ifs = 0;
cfg->ifs = NULL;
return cfg;
error_exit:
config_delete(cfg);
return NULL;
}
/** initialize the global cfg_parser object. */

View file

@ -75,6 +75,10 @@ struct config_file {
size_t msg_cache_slabs;
/** number of queries every thread can service */
size_t num_queries_per_thread;
/** size of the rrset cache */
size_t rrset_cache_size;
/** slabs in the rrset cache */
size_t rrset_cache_slabs;
/** forwarder address. string. If not NULL fwder mode is enabled. */
char* fwd_address;

View file

@ -116,6 +116,8 @@ 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;}
rrset-cache-size{COLON} { LEXOUT(("v(%s) ", yytext)); return VAR_RRSET_CACHE_SIZE;}
rrset-cache-slabs{COLON} { LEXOUT(("v(%s) ", yytext)); return VAR_RRSET_CACHE_SLABS;}
num-queries-per-thread{COLON} { LEXOUT(("v(%s) ", yytext)); return VAR_NUM_QUERIES_PER_THREAD;}
{NEWLINE} { LEXOUT(("NL\n")); cfg_parser->line++;}

View file

@ -73,6 +73,7 @@ extern struct config_parser_state* cfg_parser;
%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 VAR_NUM_QUERIES_PER_THREAD
%token VAR_RRSET_CACHE_SIZE VAR_RRSET_CACHE_SLABS
%%
toplevelvars: /* empty */ | toplevelvars toplevelvar ;
@ -87,14 +88,17 @@ serverstart: VAR_SERVER
cfg_parser->server_settings_seen = 1;
}
;
contents_server: contents_server content_server | ;
contents_server: contents_server content_server
| ;
content_server: server_num_threads | server_verbosity | server_port |
server_outgoing_port | server_outgoing_range | server_do_ip4 |
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_num_queries_per_thread;
server_num_queries_per_thread | server_rrset_cache_size |
server_rrset_cache_slabs
;
server_num_threads: VAR_NUM_THREADS STRING
{
OUTYY(("P(server_num_threads:%s)\n", $2));
@ -271,6 +275,28 @@ server_num_queries_per_thread: VAR_NUM_QUERIES_PER_THREAD STRING
free($2);
}
;
server_rrset_cache_size: VAR_RRSET_CACHE_SIZE STRING
{
OUTYY(("P(server_rrset_cache_size:%s)\n", $2));
if(atoi($2) == 0)
yyerror("number expected");
else cfg_parser->cfg->rrset_cache_size = atoi($2);
free($2);
}
;
server_rrset_cache_slabs: VAR_RRSET_CACHE_SLABS STRING
{
OUTYY(("P(server_rrset_cache_slabs:%s)\n", $2));
if(atoi($2) == 0)
yyerror("number expected");
else {
cfg_parser->cfg->rrset_cache_slabs = atoi($2);
if(!is_pow2(cfg_parser->cfg->rrset_cache_slabs))
yyerror("must be a power of 2");
}
free($2);
}
;
%%
/* parse helper routines could be here */