mirror of
https://github.com/NLnetLabs/unbound.git
synced 2025-12-23 16:20:26 -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");
|
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. */
|
/** Read existing pid from pidfile. */
|
||||||
|
|
|
||||||
|
|
@ -1,5 +1,6 @@
|
||||||
4 May 2007: Wouter
|
4 May 2007: Wouter
|
||||||
- msgreply sizefunc is more accurate.
|
- msgreply sizefunc is more accurate.
|
||||||
|
- config settings for rrset cache size and slabs.
|
||||||
|
|
||||||
3 May 2007: Wouter
|
3 May 2007: Wouter
|
||||||
- fill refs. Use new parse and encode to answer queries.
|
- fill refs. Use new parse and encode to answer queries.
|
||||||
|
|
|
||||||
|
|
@ -49,9 +49,17 @@ server:
|
||||||
# msg-cache-slabs: 4
|
# msg-cache-slabs: 4
|
||||||
|
|
||||||
# the number of queries that a thread gets to service.
|
# the number of queries that a thread gets to service.
|
||||||
# this must be a power of 2.
|
|
||||||
# num-queries-per-thread: 1024
|
# 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".
|
# Enable IPv4, "yes" or "no".
|
||||||
# do-ip4: yes
|
# 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.
|
reasonable guess.
|
||||||
.It \fBnum-queries-per-thread:\fR <number>
|
.It \fBnum-queries-per-thread:\fR <number>
|
||||||
The number of queries that every thread will service simultaneously.
|
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>
|
.It \fBdo-ip4:\fR <yes or no>
|
||||||
Enable or disable whether ip4 queries are answered. Default is yes.
|
Enable or disable whether ip4 queries are answered. Default is yes.
|
||||||
.It \fBdo-ip6:\fR <yes or no>
|
.It \fBdo-ip6:\fR <yes or no>
|
||||||
|
|
|
||||||
|
|
@ -80,17 +80,22 @@ config_create()
|
||||||
cfg->msg_cache_size = 4 * 1024 * 1024;
|
cfg->msg_cache_size = 4 * 1024 * 1024;
|
||||||
cfg->msg_cache_slabs = 4;
|
cfg->msg_cache_slabs = 4;
|
||||||
cfg->num_queries_per_thread = 1024;
|
cfg->num_queries_per_thread = 1024;
|
||||||
if(!(cfg->fwd_address = strdup(""))) {config_delete(cfg); return NULL;}
|
cfg->rrset_cache_size = 4 * 1024 * 1024;
|
||||||
if(!(cfg->username = strdup(""))) {config_delete(cfg); return NULL;}
|
cfg->rrset_cache_slabs = 4;
|
||||||
if(!(cfg->chrootdir = strdup(""))) {config_delete(cfg); return NULL;}
|
if(!(cfg->fwd_address = strdup(""))) goto error_exit;
|
||||||
if(!(cfg->directory = strdup("/etc/unbound"))) {config_delete(cfg); return NULL;}
|
if(!(cfg->username = strdup(""))) goto error_exit;
|
||||||
if(!(cfg->logfile = strdup(""))) {config_delete(cfg); return NULL;}
|
if(!(cfg->chrootdir = strdup(""))) goto error_exit;
|
||||||
if(!(cfg->pidfile = strdup("unbound.pid"))) {config_delete(cfg); return NULL;}
|
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->fwd_port = UNBOUND_DNS_PORT;
|
||||||
cfg->do_daemonize = 1;
|
cfg->do_daemonize = 1;
|
||||||
cfg->num_ifs = 0;
|
cfg->num_ifs = 0;
|
||||||
cfg->ifs = NULL;
|
cfg->ifs = NULL;
|
||||||
return cfg;
|
return cfg;
|
||||||
|
error_exit:
|
||||||
|
config_delete(cfg);
|
||||||
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
/** initialize the global cfg_parser object. */
|
/** initialize the global cfg_parser object. */
|
||||||
|
|
|
||||||
|
|
@ -75,6 +75,10 @@ struct config_file {
|
||||||
size_t msg_cache_slabs;
|
size_t msg_cache_slabs;
|
||||||
/** number of queries every thread can service */
|
/** number of queries every thread can service */
|
||||||
size_t num_queries_per_thread;
|
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. */
|
/** forwarder address. string. If not NULL fwder mode is enabled. */
|
||||||
char* fwd_address;
|
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;}
|
pidfile{COLON} { LEXOUT(("v(%s) ", yytext)); return VAR_PIDFILE;}
|
||||||
msg-cache-size{COLON} { LEXOUT(("v(%s) ", yytext)); return VAR_MSG_CACHE_SIZE;}
|
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;}
|
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;}
|
num-queries-per-thread{COLON} { LEXOUT(("v(%s) ", yytext)); return VAR_NUM_QUERIES_PER_THREAD;}
|
||||||
{NEWLINE} { LEXOUT(("NL\n")); cfg_parser->line++;}
|
{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_FORWARD_TO VAR_FORWARD_TO_PORT VAR_CHROOT
|
||||||
%token VAR_USERNAME VAR_DIRECTORY VAR_LOGFILE VAR_PIDFILE
|
%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_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 ;
|
toplevelvars: /* empty */ | toplevelvars toplevelvar ;
|
||||||
|
|
@ -87,14 +88,17 @@ serverstart: VAR_SERVER
|
||||||
cfg_parser->server_settings_seen = 1;
|
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 |
|
content_server: server_num_threads | server_verbosity | server_port |
|
||||||
server_outgoing_port | server_outgoing_range | server_do_ip4 |
|
server_outgoing_port | server_outgoing_range | server_do_ip4 |
|
||||||
server_do_ip6 | server_do_udp | server_do_tcp | server_forward_to |
|
server_do_ip6 | server_do_udp | server_do_tcp | server_forward_to |
|
||||||
server_forward_to_port | server_interface | server_chroot |
|
server_forward_to_port | server_interface | server_chroot |
|
||||||
server_username | server_directory | server_logfile | server_pidfile |
|
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_queries_per_thread | server_rrset_cache_size |
|
||||||
|
server_rrset_cache_slabs
|
||||||
|
;
|
||||||
server_num_threads: VAR_NUM_THREADS STRING
|
server_num_threads: VAR_NUM_THREADS STRING
|
||||||
{
|
{
|
||||||
OUTYY(("P(server_num_threads:%s)\n", $2));
|
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);
|
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 */
|
/* parse helper routines could be here */
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue