タワ記

気が向いた時にだけ書く、技術メモっぽいもの。

Linuxで使用するCPU数を動的に変更するスクリプト

この記事に書いてあること

  • タイトル通り。

enable-cpucores.sh

#!/usr/bin/env bash

MAX_CPU_INDEX=$(cat /sys/devices/system/cpu/present | awk -F "-" '{print $2}')
CPU_CORES=$((${MAX_CPU_INDEX}+1))
ENABLE_CORES=$1
SYS_CPU=/sys/devices/system/cpu/cpu

if [ ${EUID:-${UID}} != 0 ]; then
    echo "This script must be run as root."
    exit -1
fi

if [ $# -lt 1 ]; then
    echo "usage: $0 number_of_enable_cpu_cores"
    exit -1
fi

echo "Number of CPU: ${CPU_CORES}"

if [ ${ENABLE_CORES} -lt 1 ]; then
    echo "Number of enable cpu cores must be larger than 1."
    exit -1
fi

if [ ${ENABLE_CORES} -gt ${CPU_CORES} ]; then
    echo "Number of enable cpu cores must be smaller than ${CPU_CORES}."
    exit -1
fi

echo "Number of enable cores: ${ENABLE_CORES}"

ENABLE_LAST_INDEX=$((${ENABLE_CORES}-1))
DISABLE_FIRST_INDEX=${ENABLE_CORES}

echo "Always enable CPU index 0"

for n in `seq 1 ${ENABLE_LAST_INDEX}`; do
    echo "Enable CPU index $n"
    echo 1 > ${SYS_CPU}$n/online
done

for n in `seq ${DISABLE_FIRST_INDEX} ${MAX_CPU_INDEX}`; do
    echo "Disable CPU index $n"
    echo 0 > ${SYS_CPU}$n/online
done

使い方

4コアに制限する

$ sudo ./enable-cpucores.sh 4

動機

作ったプログラムの性能が、CPUコア数の影響をどの程度受けるのかを簡単に調べたかったので。

補足

プロセス1つとかだったら、tasksetコマンドで縛った方がお手軽。