2
0
mirror of https://gitlab.isc.org/isc-projects/bind9 synced 2025-09-02 23:55:27 +00:00

Try to improve rrl timing

Add a +burst option to mdig so that we have a second to setup the
mdig calls then they run at the start of the next second.

RRL uses 'queries in a second' as a approximation to
'queries per second'. Getting the bursts of traffic to all happen in
the same second should prevent false negatives in the system test.

We now have a second to setup the traffic in.  Then the traffic should
be sent at the start of the next second.  If that still fails we
should move to +burst=<now+2> (further extend mdig) instead of the
implicit <now+1> as the trigger second.
This commit is contained in:
Mark Andrews
2020-09-16 12:40:52 +10:00
parent 3562cc7c89
commit 92cdc7b6c7
4 changed files with 77 additions and 12 deletions

View File

@@ -80,7 +80,7 @@ burst () {
eval BURST_DOM="$BURST_DOM_BASE"
DOMS="$DOMS $BURST_DOM"
done
ARGS="+nocookie +continue +time=1 +tries=1 -p ${PORT} $* @$ns2 $DOMS"
ARGS="+burst +nocookie +continue +time=1 +tries=1 -p ${PORT} $* @$ns2 $DOMS"
$MDIG $ARGS 2>&1 | \
tr -d '\r' | \
tee -a full-$FILENAME | \
@@ -92,7 +92,7 @@ burst () {
-e 's/;; .* status: NOERROR.*/NOERROR/p' \
-e 's/;; .* status: SERVFAIL.*/SERVFAIL/p' \
-e 's/response failed with timed out.*/drop/p' \
-e 's/;; communications error to.*/drop/p' >> $FILENAME
-e 's/;; communications error to.*/drop/p' >> $FILENAME &
QNUM=`expr $QNUM + $BURST_LIMIT`
}
@@ -104,6 +104,8 @@ range () {
# $1=domain $2=IP address $3=# of IP addresses $4=TC $5=drop
# $6=NXDOMAIN $7=SERVFAIL or other errors
ck_result() {
# wait to the background mdig calls to complete.
wait
BAD=no
ADDRS=`egrep "^$2$" mdig.out-$1 2>/dev/null | wc -l`
# count simple truncated and truncated NXDOMAIN as TC

View File

@@ -83,10 +83,15 @@
#define UDPTIMEOUT 5
#define MAXTRIES 0xffffffff
#define NS_PER_US 1000 /*%< Nanoseconds per microsecond. */
#define US_PER_SEC 1000000 /*%< Microseconds per second. */
#define US_PER_MS 1000 /*%< Microseconds per millisecond. */
static isc_mem_t *mctx;
static dns_requestmgr_t *requestmgr;
static const char *batchname;
static FILE *batchfp;
static bool burst = false;
static bool have_ipv4 = false;
static bool have_ipv6 = false;
static bool have_src = false;
@@ -1222,7 +1227,9 @@ plus_option(char *option, struct query *query, bool global) {
GLOBAL();
besteffort = state;
break;
case 'u': /* bufsize */
case 'u':
switch (cmd[2]) {
case 'f': /* bufsize */
FULLCHECK("bufsize");
if (value == NULL) {
goto need_value;
@@ -1235,6 +1242,15 @@ plus_option(char *option, struct query *query, bool global) {
CHECK("parse_uint(buffer size)", result);
query->udpsize = num;
break;
case 'r': /* burst */
FULLCHECK("burst");
GLOBAL();
burst = state;
break;
default:
goto invalid_option;
}
break;
default:
goto invalid_option;
}
@@ -2044,6 +2060,21 @@ parse_args(bool is_batchfile, int argc, char **argv) {
}
}
#ifdef WIN32
static void
usleep(unsigned int usec) {
HANDLE timer;
LARGE_INTEGER ft;
ft.QuadPart = -(10 * (__int64)usec);
timer = CreateWaitableTimer(NULL, TRUE, NULL);
SetWaitableTimer(timer, &ft, 0, NULL, NULL, 0);
WaitForSingleObject(timer, INFINITE);
CloseHandle(timer);
}
#endif
/*% Main processing routine for mdig */
int
main(int argc, char *argv[]) {
@@ -2152,6 +2183,32 @@ main(int argc, char *argv[]) {
query = ISC_LIST_HEAD(queries);
RUNCHECK(isc_app_onrun(mctx, task, sendqueries, query));
/*
* Stall to the start of a new second.
*/
if (burst) {
isc_time_t start, now;
RUNCHECK(isc_time_now(&start));
/*
* Sleep to 1ms of the end of the second then run a busy loop
* until the second changes.
*/
do {
RUNCHECK(isc_time_now(&now));
if (isc_time_seconds(&start) == isc_time_seconds(&now))
{
int us = US_PER_SEC -
(isc_time_nanoseconds(&now) /
NS_PER_US);
if (us > US_PER_MS) {
usleep(us - US_PER_MS);
}
} else {
break;
}
} while (1);
}
(void)isc_app_run();
query = ISC_LIST_HEAD(queries);

View File

@@ -130,6 +130,9 @@ The global query options are:
This option attempts to display [or does not display] the contents of messages which are malformed. The
default is to not display malformed answers.
``+burst``
This option delays queries until the start of the next second.
``+[no]cl``
This option displays [or does not display] the CLASS when printing the record.

View File

@@ -132,6 +132,9 @@ default is to display it.
This option attempts to display [or does not display] the contents of messages which are malformed. The
default is to not display malformed answers.
.TP
.B \fB+burst\fP
This option delays queries until the start of the next second.
.TP
.B \fB+[no]cl\fP
This option displays [or does not display] the CLASS when printing the record.
.TP