xref: /linux/tools/testing/selftests/rcutorture/bin/cpus2use.sh (revision c532de5a67a70f8533d495f8f2aaa9a0491c3ad0)
1#!/bin/bash
2# SPDX-License-Identifier: GPL-2.0+
3#
4# Get an estimate of how CPU-hoggy to be.
5#
6# Usage: cpus2use.sh
7#
8# Copyright (C) IBM Corporation, 2013
9#
10# Authors: Paul E. McKenney <paulmck@linux.ibm.com>
11
12if test -n "$TORTURE_ALLOTED_CPUS"
13then
14	echo $TORTURE_ALLOTED_CPUS
15	exit 0
16fi
17ncpus=`grep '^processor' /proc/cpuinfo | wc -l`
18if mpstat -V > /dev/null 2>&1
19then
20	idlecpus=`mpstat | tail -1 | \
21		awk -v ncpus=$ncpus '{ print ncpus * ($7 + $NF) / 100 }'`
22else
23	# No mpstat command, so use all available CPUs.
24	idlecpus=$ncpus
25fi
26awk -v ncpus=$ncpus -v idlecpus=$idlecpus < /dev/null '
27BEGIN {
28	cpus2use = idlecpus;
29	if (cpus2use < 1)
30		cpus2use = 1;
31	if (cpus2use < ncpus / 10)
32		cpus2use = ncpus / 10;
33	if (cpus2use == int(cpus2use))
34		cpus2use = int(cpus2use)
35	else
36		cpus2use = int(cpus2use) + 1
37	print cpus2use;
38}'
39
40