65 lines
1.6 KiB
Bash
Executable file
65 lines
1.6 KiB
Bash
Executable file
#!/bin/sh
|
|
|
|
# Copyright (C) Internet Systems Consortium, Inc. ("ISC")
|
|
#
|
|
# SPDX-License-Identifier: MPL-2.0
|
|
#
|
|
# 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
|
|
|
|
CPUSET=$(command -v cpuset)
|
|
NUMACTL=$(command -v numactl)
|
|
TASKSET=$(command -v taskset)
|
|
|
|
cpulist() (
|
|
if [ -n "$CPUSET" ]; then
|
|
cpuset -g | head -1 | sed -e "s/.*: //" | tr -s ', ' '\n'
|
|
elif [ -n "$NUMACTL" ]; then
|
|
numactl --show | sed -ne 's/^physcpubind: //p' | tr -s ' ' '\n'
|
|
elif [ -n "$TASKSET" ]; then
|
|
# shellcheck disable=SC2046
|
|
seq $(taskset -c -p $$ | sed -e 's/.*: //' | tr -s ' -' ' ')
|
|
else
|
|
echo 0
|
|
fi
|
|
)
|
|
|
|
cpulimit() (
|
|
set -x
|
|
min_cpu="${1}"
|
|
shift
|
|
max_cpu="${1}"
|
|
shift
|
|
|
|
if [ -n "$CPUSET" ]; then
|
|
cpuset -l "${min_cpu}-${max_cpu}" "$@" 2>&1
|
|
elif [ -n "$NUMACTL" ]; then
|
|
numactl --physcpubind="${min_cpu}-${max_cpu}" "$@" 2>&1
|
|
elif [ -n "$TASKSET" ]; then
|
|
taskset -c "${min_cpu}-${max_cpu}" "$@" 2>&1
|
|
fi
|
|
)
|
|
|
|
ret=0
|
|
for cpu in $(cpulist); do
|
|
n=$((n + 1))
|
|
echo_i "testing that limiting CPU sets to 0-${cpu} works ($n)"
|
|
cpulimit 0 "$cpu" "$NAMED" -g >named.run.$n 2>&1 || true
|
|
ncpus=$(sed -ne 's/.*found \([0-9]*\) CPU.*\([0-9]*\) worker thread.*/\1/p' named.run.$n)
|
|
[ "$ncpus" -eq "$((cpu + 1))" ] || ret=1
|
|
done
|
|
test "$ret" -eq 0 || echo_i "failed"
|
|
status=$((status + ret))
|
|
|
|
echo_i "exit status: $status"
|
|
[ $status -eq 0 ] || exit 1
|