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