File Index
Files and directories
Sign in
FILE

kvm-assign-cpus.sh

File preview with syntax highlighting.

linux-6.19.14/tools/testing/selftests/rcutorture/bin/kvm-assign-cpus.sh BASH
  1#!/bin/sh
  2# SPDX-License-Identifier: GPL-2.0+
  3#
  4# Produce awk statements roughly depicting the system's CPU and cache
  5# layout.  If the required information is not available, produce
  6# error messages as awk comments.  Successful exit regardless.
  7#
  8# Usage: kvm-assign-cpus.sh /path/to/sysfs
  9
 10T="`mktemp -d ${TMPDIR-/tmp}/kvm-assign-cpus.sh.XXXXXX`"
 11trap 'rm -rf $T' 0 2
 12
 13sysfsdir=${1-/sys/devices/system/node}
 14if ! cd "$sysfsdir" > $T/msg 2>&1
 15then
 16	sed -e 's/^/# /' < $T/msg
 17	exit 0
 18fi
 19nodelist="`ls -d node*`"
 20for i in node*
 21do
 22	if ! test -d $i/
 23	then
 24		echo "# Not a directory: $sysfsdir/node*"
 25		exit 0
 26	fi
 27	for j in $i/cpu*/cache/index*
 28	do
 29		if ! test -d $j/
 30		then
 31			echo "# Not a directory: $sysfsdir/$j"
 32			exit 0
 33		else
 34			break
 35		fi
 36	done
 37	indexlist="`ls -d $i/cpu* | grep 'cpu[0-9][0-9]*' | head -1 | sed -e 's,^.*$,ls -d &/cache/index*,' | sh | sed -e 's,^.*/,,'`"
 38	break
 39done
 40for i in node*/cpu*/cache/index*/shared_cpu_list
 41do
 42	if ! test -f $i
 43	then
 44		echo "# Not a file: $sysfsdir/$i"
 45		exit 0
 46	else
 47		break
 48	fi
 49done
 50firstshared=
 51for i in $indexlist
 52do
 53	rm -f $T/cpulist
 54	for n in node*
 55	do
 56		f="$n/cpu*/cache/$i/shared_cpu_list"
 57		if ! cat $f > $T/msg 2>&1
 58		then
 59			sed -e 's/^/# /' < $T/msg
 60			exit 0
 61		fi
 62		cat $f >> $T/cpulist
 63	done
 64	if grep -q '[-,]' $T/cpulist
 65	then
 66		if test -z "$firstshared"
 67		then
 68			firstshared="$i"
 69		fi
 70	fi
 71done
 72if test -z "$firstshared"
 73then
 74	splitindex="`echo $indexlist | sed -e 's/ .*$//'`"
 75else
 76	splitindex="$firstshared"
 77fi
 78nodenum=0
 79for n in node*
 80do
 81	cat $n/cpu*/cache/$splitindex/shared_cpu_list | sort -u -k1n |
 82	awk -v nodenum="$nodenum" '
 83	BEGIN {
 84		idx = 0;
 85	}
 86
 87	{
 88		nlists = split($0, cpulists, ",");
 89		for (i = 1; i <= nlists; i++) {
 90			listsize = split(cpulists[i], cpus, "-");
 91			if (listsize == 1)
 92				cpus[2] = cpus[1];
 93			for (j = cpus[1]; j <= cpus[2]; j++) {
 94				print "cpu[" nodenum "][" idx "] = " j ";";
 95				idx++;
 96			}
 97		}
 98	}
 99
100	END {
101		print "nodecpus[" nodenum "] = " idx ";";
102	}'
103	nodenum=`expr $nodenum + 1`
104done
105echo "numnodes = $nodenum;"
~/ Read-only file preview.