mirror of
https://github.com/NLnetLabs/unbound.git
synced 2025-12-20 23:00:56 -05:00
config settings for rrset cache.
git-svn-id: file:///svn/unbound/trunk@279 be551aaa-1e26-0410-a405-d3ace91eadb9
This commit is contained in:
parent
3fea680228
commit
4732f7c4d6
8 changed files with 72 additions and 9 deletions
|
|
@ -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. */
|
||||
|
|
|
|||
|
|
@ -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.
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
||||
|
|
|
|||
|
|
@ -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>
|
||||
|
|
|
|||
|
|
@ -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. */
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
|
|
|
|||
|
|
@ -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++;}
|
||||
|
||||
|
|
|
|||
|
|
@ -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 */
|
||||
|
|
|
|||
Loading…
Reference in a new issue