SEQUENTIAL_UNIX="@PKCS11_TEST@"
SEQUENTIALDIRS="$SEQUENTIAL_COMMON $SEQUENTIAL_UNIX"
-PARALLEL_UNIX="@CHECKDS@ @COVERAGE@ @DNSTAP@ @KEYMGR@ cookie logfileconfig"
+PARALLEL_UNIX="@CHECKDS@ @COVERAGE@ @DNSTAP@ @KEYMGR@ cookie cpu logfileconfig"
PARALLELDIRS="$PARALLEL_COMMON $PARALLEL_UNIX"
SUBDIRS="$SEQUENTIALDIRS $PARALLELDIRS"
--- /dev/null
+#!/bin/sh
+#
+# Copyright (C) Internet Systems Consortium, Inc. ("ISC")
+#
+# This Source Code Form is subject to the terms of the Mozilla Public
+# License, v. 2.0. If a copy of the MPL was not distributed with this
+# file, you can obtain one at https://mozilla.org/MPL/2.0/.
+#
+# See the COPYRIGHT file distributed with this work for additional
+# information regarding copyright ownership.
+
+set -e
+
+rm -f ps.out
+rm -f ns1/named.conf ns1/managed-keys.* ns1/named.run ns1/named.memstats
--- /dev/null
+/*
+ * Copyright (C) Internet Systems Consortium, Inc. ("ISC")
+ *
+ * This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/.
+ *
+ * See the COPYRIGHT file distributed with this work for additional
+ * information regarding copyright ownership.
+ */
+
+options {
+ query-source address 10.53.0.1;
+ port @PORT@;
+ pid-file "named.pid";
+ listen-on { 10.53.0.1; };
+ listen-on-v6 { none; };
+};
--- /dev/null
+#!/bin/sh -e
+#
+# Copyright (C) Internet Systems Consortium, Inc. ("ISC")
+#
+# This Source Code Form is subject to the terms of the Mozilla Public
+# License, v. 2.0. If a copy of the MPL was not distributed with this
+# file, you can obtain one at https://mozilla.org/MPL/2.0/.
+#
+# See the COPYRIGHT file distributed with this work for additional
+# information regarding copyright ownership.
+
+set -e
+
+# shellcheck source=conf.sh
+. ../conf.sh
+
+case $(uname) in
+ Linux*)
+ ;;
+ *)
+ echo_i "cpu test only runs on Linux, skipping test"
+ exit 255
+ ;;
+esac
+
+# TASKSET will be an empty string if no taskset program was found.
+TASKSET=$(command -v "taskset" || true)
+if ! test -x "$TASKSET" ; then
+ exit 255
+fi
--- /dev/null
+#!/bin/sh -e
+#
+# Copyright (C) Internet Systems Consortium, Inc. ("ISC")
+#
+# This Source Code Form is subject to the terms of the Mozilla Public
+# License, v. 2.0. If a copy of the MPL was not distributed with this
+# file, you can obtain one at https://mozilla.org/MPL/2.0/.
+#
+# See the COPYRIGHT file distributed with this work for additional
+# information regarding copyright ownership.
+
+# shellcheck source=conf.sh
+. ../conf.sh
+
+set -e
+
+$SHELL clean.sh
+
+copy_setports ns1/named.conf.in ns1/named.conf
--- /dev/null
+#!/bin/sh
+#
+# Copyright (C) Internet Systems Consortium, Inc. ("ISC")
+#
+# This Source Code Form is subject to the terms of the Mozilla Public
+# License, v. 2.0. If a copy of the MPL was not distributed with this
+# file, you can obtain one at https://mozilla.org/MPL/2.0/.
+#
+# See the COPYRIGHT file distributed with this work for additional
+# information regarding copyright ownership.
+
+# shellcheck source=conf.sh
+. ../conf.sh
+
+status=0
+n=0
+
+n=$((n+1))
+echo_i "stop server ($n)"
+ret=0
+$PERL ../stop.pl cpu ns1 || ret=1
+test "$ret" -eq 0 || echo_i "failed"
+status=$((status+ret))
+
+n=$((n+1))
+echo_i "start server with taskset ($n)"
+ret=0
+start_server --noclean --taskset fff0 --restart --port "${PORT}" cpu ns1 || ret=1
+test "$ret" -eq 0 || echo_i "failed"
+status=$((status+ret))
+
+n=$((n+1))
+echo_i "check ps output ($n)"
+ret=0
+ps -T -o pid,psr,time,comm -e > ps.out
+pid=$(cat ns1/named.pid)
+echo_i "pid=$pid"
+psr=$(awk -v pid="$pid" '$1 == pid && $4 == "isc-net-0000" {print $2}' < ps.out)
+echo_i "psr=$psr"
+# The next available cpu relative to the existing affinity mask is 4.
+test "$psr" -eq 4 || ret=1
+test "$ret" -eq 0 || echo_i "failed"
+status=$((status+ret))
+
+echo_i "exit status: $status"
+[ $status -eq 0 ] || exit 1
use Time::HiRes 'sleep'; # allows sleeping fractional seconds
# Usage:
-# perl start.pl [--noclean] [--restart] [--port port] test [server [options]]
+# perl start.pl [--noclean] [--restart] [--port port] [--taskset cpus] test [server [options]]
#
# --noclean Do not cleanup files in server directory.
#
# of the file "named.port" in the server directory containing
# the number of the query port.)
#
+# --taskset cpus Use taskset to signal which cpus can be used. For example
+# cpus=fff0 means all cpus aexcept for 0, 1, 2, and 3 are
+# eligible.
+#
# test Name of the test directory.
#
# server Name of the server directory. This will be of the form
# the file is ignored). If "options" is already set, then
# "named.args" is ignored.
-my $usage = "usage: $0 [--noclean] [--restart] [--port <port>] test-directory [server-directory [server-options]]";
+my $usage = "usage: $0 [--noclean] [--restart] [--port <port>] [--taskset <cpus>] test-directory [server-directory [server-options]]";
my $clean = 1;
my $restart = 0;
my $queryport = 5300;
+my $taskset = "";
GetOptions(
- 'clean!' => \$clean,
- 'restart!' => \$restart,
- 'port=i' => \$queryport,
+ 'clean!' => \$clean,
+ 'restart!' => \$restart,
+ 'port=i' => \$queryport,
+ 'taskset=s' => \$taskset,
) or die "$usage\n";
my( $test, $server_arg, $options_arg ) = @ARGV;
$command .= "$NAMED -m none -M external ";
} else {
- $command = "$NAMED ";
+ if ($taskset) {
+ $command = "taskset $taskset $NAMED ";
+ } else {
+ $command = "$NAMED ";
+ }
}
my $args_file = $testdir . "/" . $server . "/" . "named.args";
./bin/tests/system/coverage/clean.sh SH 2013,2014,2016,2018,2019,2020
./bin/tests/system/coverage/setup.sh SH 2013,2014,2016,2017,2018,2019,2020
./bin/tests/system/coverage/tests.sh SH 2013,2014,2016,2018,2019,2020
+./bin/tests/system/cpu/clean.sh SH 2020
+./bin/tests/system/cpu/prereq.sh SH 2020
+./bin/tests/system/cpu/setup.sh SH 2020
+./bin/tests/system/cpu/tests.sh SH 2020
./bin/tests/system/database/clean.sh SH 2011,2012,2014,2016,2018,2019,2020
./bin/tests/system/database/setup.sh SH 2011,2012,2016,2018,2019,2020
./bin/tests/system/database/tests.sh SH 2011,2012,2016,2018,2019,2020