From ae93dcac767b8e4aab78b6763e680ab3e222d7a1 Mon Sep 17 00:00:00 2001 From: Wouter Wijngaards Date: Wed, 28 Mar 2007 13:43:50 +0000 Subject: [PATCH] query list config option. tpkg test. git-svn-id: file:///svn/unbound/trunk@203 be551aaa-1e26-0410-a405-d3ace91eadb9 --- daemon/worker.c | 25 ++++++++++++++++++++++--- daemon/worker.h | 8 ++++++-- doc/Changelog | 5 +++++ doc/example.conf | 3 +++ doc/unbound.conf.5 | 2 ++ testdata/fwd_three.tpkg | Bin 1950 -> 1951 bytes testdata/fwd_three_service.tpkg | Bin 0 -> 1947 bytes testdata/fwd_two.rpl | 2 ++ util/config_file.c | 1 + util/config_file.h | 2 ++ util/configlexer.lex | 1 + util/configparser.y | 14 ++++++++++++-- 12 files changed, 56 insertions(+), 7 deletions(-) create mode 100644 testdata/fwd_three_service.tpkg diff --git a/daemon/worker.c b/daemon/worker.c index 0cff28066..2158f71a3 100644 --- a/daemon/worker.c +++ b/daemon/worker.c @@ -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; irequest_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); diff --git a/daemon/worker.h b/daemon/worker.h index 5c83a1a09..fcf6dac92 100644 --- a/daemon/worker.h +++ b/daemon/worker.h @@ -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; diff --git a/doc/Changelog b/doc/Changelog index 80c1cd8e2..b5d001b79 100644 --- a/doc/Changelog +++ b/doc/Changelog @@ -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 diff --git a/doc/example.conf b/doc/example.conf index 84d633d24..5c74d17a8 100644 --- a/doc/example.conf +++ b/doc/example.conf @@ -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 diff --git a/doc/unbound.conf.5 b/doc/unbound.conf.5 index 7fa0929e7..63f11995f 100644 --- a/doc/unbound.conf.5 +++ b/doc/unbound.conf.5 @@ -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 +The number of queries that every thread will service simultaneously. .It \fBdo-ip4:\fR Enable or disable whether ip4 queries are answered. Default is yes. .It \fBdo-ip6:\fR diff --git a/testdata/fwd_three.tpkg b/testdata/fwd_three.tpkg index 03f50e17c913a78144249970fdee9d967e7b3c1c..fa03ca9f8a92af65509b3823e8122093840f0778 100644 GIT binary patch delta 1946 zc-jG)2W9x451$WzABzY8)NBey00Zq=dvn@I68FE%r|2kDoKzN}2aj43s1O@(yqkc7 z@#VJeu81rRpfzX|NrbrW_PcM-=#3$E)q0)U-29w?G(FSZ)6>(_)66!`G+G3ds*W4f z5B?Hph<3Xff43T??*s?B*3yhdt7YP|rkh5ic>vA7Mx8Q$)?s7?00$ekj%cvI-);22 zDQ2bh&)*^%MqYS7GWY_ww${C{{yP5Q`ZwFUX0#1M$MtVD8m$A+?nnIB@qfPlFTk@_ zG^D|28USB(n7KWc=&&^#J>jcm2uH z8(_Z8915R*qH7;NIa4wooW1=O-jAW*hv8^29*@SPfBf^s`2=j{Ur${J!X>4C*CgkI zqsi%L2=6Zj=lp?eHXFTiI;`|FQh#{ zgR5rlQ_b8`tyNO(Tl=BJx52*nZ!>RpUoviq|C*_P>Dl>jvGg3QZ0cxWtu{xjDG;nEH^J$Q%hMLL1^(V1! z|N8-dy*C-R?0-`?8%h3W8a(mW^k&;=%l-clcnptgH7Kont@fBahLEiTn?kgpu(Cp& zI($Yu@#GLT3+jOz9fq75Q1UOR%|KP_YUE$dRqUoFBmM(Vo}`R+&{4`dL`v2i=btP9 z*NbyeY;>(l6zN-Gh*2dGRUS~1QX&yD9v)ABc}VG2pFV}^xIa7|y@Th_G@A{0_KaK% zUym-bE@@|S@*y9Uwc;=xhhV77XlcLaoIvdb1EtKd_@+Rwx2<11CKs1J?dr?d1YK1a zh=)zIA9f#%yGzFlYw>-JxU<-BkGP$bkDG;SFQ6*=eNVT-zCb1-^Oba)b*@ASA^eN>zvZ%7{YOmAgfQQ(P( zJCAQ6A$6ce;V`U=gXiC`>W3wh9@Y<2dVF$-9;vnkYH~gaa=L(={1VC;5Abuj8rPAx1w8Bb-s&d^MLxGR1JkU^y&`%T=&+?W$L+=N^B~Jc@$7j zE~Sbe3MXA+PH^=CpU`=8-kgkX@TsWEHoNoKTDZh0)xisv$D-J9j|69K?5ZyMe?bH5 zdxXp>RCBB3Ld10q^kfj%o%~*ZTCHqH^R>XMHbu$80mb?pzI8ELdi)Wm%rm7!t}3pj zO3Dib=|)s;3{gq~Q%~I~?p*jin+Yd!ZMs)l(Xo|qYm_2Wv%drO=6@`V?n}n4^}lvA z%l{f0&;MGwA?tq+f*biC-*&LeS-b4D{4qo{=q^h*?2Jhon8&XVLs7SaR$Jtx&H@w(o^UF_4?sQ!b7(&j;VxKe2&Ii`q{$`Ma7YmPCJR( z`NRvU#*WDss5kh2Yv+}J_|w=I|DDjjHyO9p{~E1k_WO_4(!~8=Z_4=p5O{5cbcol1 zPJRZEf6ySrTR;bNRU^kVv;)_VM8ip(sDkJRNktAYJ7%6uf56+kxKG4&LzNuiHy?Lw zMaX}$rf@;Wd15TjA2lYsQ?cV*mVn~jV z$y^i!$q`%m7}30_LylI?G4-j(%akO4dPA3fhnxk)Y4OqqIm6?vvvu5&2`x8@^P|81 za)QSY=XQp7C+c*_iRCUaFm}GDxc9Z+fA34iE&JbS=*_(T-!|g>PuBk)1l##vd>{Xg zDuBf*jmQYoOf#u}y7chEKL`G+vReGHTOqvp)sorPav^eJA4;_+KBP1PQ@03%BD#sF zU8UT4?I0<;go-HJq^X{GDcqs+Aq#3>VfGkqXb@L(aN^52-d-!b#uq1$g&)9`RBl>z zhJu`k~n%-Gn)*tj#}R?gTgGd6cIHuo?l;!*pa g&UFb12?+_4b_W}ifCmN*iSHMG0PFxq%>YmU0AL{9u>b%7 delta 1946 zc-jG)2W9x551tQyABzY84mIRO00Zq=dvn`168FEtr`XUMJDF4zA9_sXNE5}DFK!db zmF1?L-i;j7gw7VQHottPHP^vm^ zP(Ao6&=AdLJ$^Q7g=c~TU8^^B%`|GdaiHn=G!LNub*58)#3GEW0N`NB77-1$_j`>0 zC&jq1|GBr&-kA=*!HuE3zW;BmkoK)PZ9%s8 zBnam$SXzMtq96Repn*$6up(fdO}~Rh=z0^uw46{Sr}*UK z&a4RKj}{bv&gm@}P0(vCU2oNDaM~MzfzCkQTdo)3KN_^a2~_x?o~m7Zxc~Mh7HSO1 zDGHge;JyXql+AtSQ7>wd)46j-ed;+O(pRmwbmq6nWsqN%>IaluvM?&p@STikkr?4S z=`KE>yEDqAU0PvCofbK_+}Q$Ul5f3fJH)p0&uy@OD;=!(Dj-; z|NFop99Al8z7LhkAvuJQEdrb3ai%c0LR>t2LQ9SDP{49ZJ#eGrkaO`^{RWjWsA^S> z{JV*Y-PB~nzu@R76|{kmS{5O4GO|!VW&yY!h&B>k>lRh|cnI-!NmLaF6tomrgj^1L zZH23URu$CdFtHxNqV|-5(gDYvz;e0NRr=YQ`!lNAY>u5d`Spz1)@;hSO?)U{_umYz z`)46KN#R0w}VW2;C3@v`u4*}@Zq)sQK*@4)iH zC0dXhgD-p*-?#S)amO$Ts1J&+sfMPSnp)F;lvM8tU!O-xv8=(53Zb)*rtf_g0jHJd zXEy?!j9s!a11nzZPqIMKXwXS!p~Dd$?YoZNE97`olVyp?`*dEO?`|)A7f)5v(U%fl@o=+i`I7ci*BTU z7yU>FH-vR(5=8HzM?Dl=UkNsff{jgrjVB9ktOT1y!R98x<`%(3G_}9d@A^}*?f2hi z-gs9!9*h5tS|f}9O_S$;4Xvrk-~W9eq`@Z)x=9KDzh$8tVSsIrlDC*wk~kjI0F9J< z7GRA0n%}aoNeOK+Vfdp|Nyvli(K;u8u)GNsvc_@JP>EOzkFL>FHT;7&W{#1{84VIK z=#12kM7Xag+!$O_8kA`w4?$5 zmvlTi@IQ>B{d;7hV7zA7(gPs~86v2|MdJ+O_)drN`3DRlFV2uVx9%u}nCZuV%#;J2 zszX0jy#>;Y&XLXqja|M(D$>?BxREj){$ zH!eQMeIWN+JFmq5jW5-Iyl^*vIv&0MbuEkk3`5j^YBhQP?*%8|S#ugkf$;?_su$(K z@ZujAeaPq1q&ynE1GAxNg!KBO;jcGudf11&?~YF20`qO=V0szd`}jW>N`}45cfZ0< zL+Ey)Kj;mIgCXgj{cwFX0-O2wH?9LB4{w{~s&_iN81&(%>)sV_5MEn!0msYR0yy8EaFk?|o|KwyBwGQ)?8a_O1O;;@e3HP+ zH+8d?#s5aFF24U6O?m(C0}tZ=fc}-L|HGs*+%7+V4&`CDe>QjzFQIPMYw+R)$rq2? z<+L*q0e>5@S(f{!M{SXMKM0n3cM;wW%-P6LeK!AYL{> z`(gLqusw6UuoA~>yhJK&@{HR_`M8|A_EaP=z2QeCt&qmUs#7+n)!418x2{*s%Ne^Q z9wln*>9n}e?_oVigie~g@T35aNRlt{I(u$`oRBoOEKj5!yzuCMPU0wJl?sW%(?4HV zj|(O}t{$iSxN;{sbBvAP; zOJ#hird=!e*G>gNCs&vbG1|x>HZfK{fQ7`CeeCO;NLOK(Rl^ z?=aJ+9&h53d8PE2PZjr4CB==(stC%1Axc4E>Zu#mT?xNuW8p-uO}A>xJGK(8jgnPc g2?+@a2?+_4cn2DjfCmN*iLZkH0dT(_r~ps^0EkJ{YybcN diff --git a/testdata/fwd_three_service.tpkg b/testdata/fwd_three_service.tpkg new file mode 100644 index 0000000000000000000000000000000000000000..9decdba891c7e5c914f597262110427992f1d3b4 GIT binary patch literal 1947 zc-jG*2W0pkiwFQNZ3;#J1MOP>ciJ`(&#&mOxVpTieJ#dc0$EAnl_qq})F#to=}t1^r9FzK0i~mm1|J=Z%C-~K zw>~Qr#O`h*{%r0PJ`-%IN>kBxn$4Y^-7Q6JD2loTjnAt_ITm4L1^`=2ZxPX8bGz&4 zUns_<^MAG0^4#%lWv~fuuFZRX{&hvq&3|)C(Nta6wm|uu1KotLeE!+|(x62u`2XAs zo#?U!8mYL8d5t-MX@@OPNyYbqs0A;N2gdLvsh}w)p5snxN%i1#xK0U7cS1RyXTNwGE`7Bp~ZSo3L+XoiZR%MfzkCj6pt z)AjFrVRTy=*Q|e4RT``Hud_IT>wkAgtpB^fLwH!LLHT?`t@e;SgwR_A7KLa^VQz+K z1o(&+8#^-!%PDoiiMB&V4Ji2;YGaV)x*Yiz6B(PyNsnLQ(W8`63B4#KqA2?s87l_7 zae;k-MA!&y4=$02jB&s5mM(BcNVsrjGd6hCfEQ~jR9~MRjE)ZvkUBRnD1-}a%84lj zI(3_Vth)=W(>jk-#%S!gHkepJKShBFxV2qSn-9bd!9*J8fCHGz#CPnO6GrX#<4Hh$ zkdnq&-IACx^30pS9}r?)jlykp_=g8!y%GNtfjvyTv62a+-%qj z_uN~!b~fC~;_HjEi=l+bP|G05ghr_p^Hx-4DUVmu38@=jb8*+D| zhv?GB|BNXyddF|y!4C#>yU-u>3}axB?!kAbCquA2|8nHm5Y8y|+d4Vv?GFzJefZ(D zcftx}xm>E1!+xc^B6a&GXFVe$R8&RQ6j@i~9VOAH*FU%$)wE5jX=|!A?p!r}lWO{! zYR!Ub_w9!Q_k(}3|KC=|HT%D|qlx_gzOX6(=b_*(^Z!M-p1QLvnkBjEalkRpQKWB% zq2o^e=`nyD8@;x~M9WfqB1lgfgj!P%qz>551Xy&D^FdD{tor55v&`9)pNafjE<7-X ztV^K>rtT4?fbPO0Y0BL)Bf!L-)rAsaPid;pAChdGRb*YJ)VjdaL%2i>GGnlTqY2nm z$fZP_F~kRmTp*NExqEDUE~&)42H#7B&O(|#_q_;MU4?#fB2dZLA(E(>{6(gN7;*k^@$sy=DR1k<8r}ZE;0T^VLvQTBlP4q}JlfT?G2s_}Nv~Bcc2lv-;B>g6rR|gxq-5Zq_AO_{0fr2c*JPWbE)h~l)s7kd{ffr#E;2L9%mS$v4J7m0Y zt;q3Q&SwH81wCgwCAtW@L1S4|!GA*`37JVi)Zy9uI7uGjPK_;GCJUt155LbBGN>CKRff zRWc!Q@~I}B_~rbch1puIa5fj1#!{5b9gxq@_FD&cPnQ*O$m|vBHd7VnQYOWTT4jmS zl`c|2VCt!*;!e2Vdt*pe#ztv*$CkpiUXr+L`Y++8`JWwHx0Z3;_dgoCntlI6*IE9j zHX0)Ty9>NBL)yn}zjZb8kstBIh`W9ZR9PVhG_(T8k9fuFcw;IaC4rq-U5h@$Y%bnm zD8%2?kjXxNu&xJYgrd$cjvt}bwQoRew6tbRQ(?b%G6W4BgB+QT8{r=fT3`noutgoing_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;} diff --git a/util/config_file.h b/util/config_file.h index 4b94e333f..be722077e 100644 --- a/util/config_file.h +++ b/util/config_file.h @@ -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; diff --git a/util/configlexer.lex b/util/configlexer.lex index 73739efeb..93b562280 100644 --- a/util/configlexer.lex +++ b/util/configlexer.lex @@ -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 */ diff --git a/util/configparser.y b/util/configparser.y index 4ddcce2b1..1ef486d83 100644 --- a/util/configparser.y +++ b/util/configparser.y @@ -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 */ -- 2.47.2