162306a36Sopenharmony_ci#!/bin/bash
262306a36Sopenharmony_ci# SPDX-License-Identifier: GPL-2.0+
362306a36Sopenharmony_ci#
462306a36Sopenharmony_ci# Get an estimate of how CPU-hoggy to be.
562306a36Sopenharmony_ci#
662306a36Sopenharmony_ci# Usage: cpus2use.sh
762306a36Sopenharmony_ci#
862306a36Sopenharmony_ci# Copyright (C) IBM Corporation, 2013
962306a36Sopenharmony_ci#
1062306a36Sopenharmony_ci# Authors: Paul E. McKenney <paulmck@linux.ibm.com>
1162306a36Sopenharmony_ci
1262306a36Sopenharmony_ciif test -n "$TORTURE_ALLOTED_CPUS"
1362306a36Sopenharmony_cithen
1462306a36Sopenharmony_ci	echo $TORTURE_ALLOTED_CPUS
1562306a36Sopenharmony_ci	exit 0
1662306a36Sopenharmony_cifi
1762306a36Sopenharmony_cincpus=`grep '^processor' /proc/cpuinfo | wc -l`
1862306a36Sopenharmony_ciif mpstat -V > /dev/null 2>&1
1962306a36Sopenharmony_cithen
2062306a36Sopenharmony_ci	idlecpus=`mpstat | tail -1 | \
2162306a36Sopenharmony_ci		awk -v ncpus=$ncpus '{ print ncpus * ($7 + $NF) / 100 }'`
2262306a36Sopenharmony_cielse
2362306a36Sopenharmony_ci	# No mpstat command, so use all available CPUs.
2462306a36Sopenharmony_ci	idlecpus=$ncpus
2562306a36Sopenharmony_cifi
2662306a36Sopenharmony_ciawk -v ncpus=$ncpus -v idlecpus=$idlecpus < /dev/null '
2762306a36Sopenharmony_ciBEGIN {
2862306a36Sopenharmony_ci	cpus2use = idlecpus;
2962306a36Sopenharmony_ci	if (cpus2use < 1)
3062306a36Sopenharmony_ci		cpus2use = 1;
3162306a36Sopenharmony_ci	if (cpus2use < ncpus / 10)
3262306a36Sopenharmony_ci		cpus2use = ncpus / 10;
3362306a36Sopenharmony_ci	if (cpus2use == int(cpus2use))
3462306a36Sopenharmony_ci		cpus2use = int(cpus2use)
3562306a36Sopenharmony_ci	else
3662306a36Sopenharmony_ci		cpus2use = int(cpus2use) + 1
3762306a36Sopenharmony_ci	print cpus2use;
3862306a36Sopenharmony_ci}'
3962306a36Sopenharmony_ci
40