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:
@@ -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
|
||||
|
@@ -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);
|
||||
|
@@ -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.
|
||||
|
||||
|
@@ -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
|
||||
|
Reference in New Issue
Block a user