私のubuntuラップトップでATLASを実行する必要がありますが、CPU周波数スケーリングを無効にしない限り、ソフトウェアは実行できません。私はここからの手順を試しました http://math-atlas.sourceforge.net/atlas_install/node5.html が、私のToshibaラップトップでは動作しません。周波数スケーリングがオンになっていると、ソフトウェアは役に立たなくなります。
誰か助けてもらえますか?
最小周波数と最大周波数を自由に設定できるcpuf
GUIを書きました。 Mathアプリの直前で使用して、すべての周波数を最大に設定できます。 Mathアプリを実行した後、周波数を通常の状態にリセットして、バッテリーを長持ちさせ、発熱を抑えることができます。
このデモでは、cpuf
ウィンドウが左側にあり、conky
システム情報が右側にあります。これがデモの進行方法です。
800
/3500
です800
/800
に上書きすると、CPU使用率が20%に急上昇します3500
/3500
に上書きすると、CPU使用率が10%に低下します3つのモニターを使用すると、cpuf
は10フィート離れて表示される可能性があるため、パラメーター1 --geometry
オプションを使用してconky
の近くに配置します。
Sudo cpuf --geometry="450x450+4720+80" /home/rick/Pictures/icons/cpu-intel-128.svg
--geometry
は、ウィンドウの幅x高さ+幅のオフセット+高さのオフセットですcpuf
Bashスクリプトこのセクションでは、ターミナルを開く必要があります Ctrl+Alt+T。
機能するためには、cpuf
bashスクリプトに以下が必要です。
Sudo apt install yad # from the repository universe
Sudo apt install coreutils # installed by default in most distros
cpuf
スクリプトを検索パス内のルートが所有するディレクトリに配置するのが最も簡単です。例:/usr/local/bin
。
cpuf
スクリプトを作成するには、Sudo -H gedit /usr/local/bin/cpuf
でエディターを開きます。
Sudo chmod a+x /usr/local/bin/cpuf
を使用してスクリプトを実行可能にします。
cpuf
コードをエディターにコピーします#!/bin/bash
# NAME: cpuf (Pronounced SEA-PUFF)
# CALL: Sudo cpuf
# PARM: $1 = --geometry=WidthxHeight+VertOffset+HorizOffset
# $2 = Optional image icon
# DESC: Simple GUI script to set CPU Min and Max Frequency.
# For Ask Ubuntu Question: https://askubuntu.com/q/1141605/307523
# DATE: May 12, 2019.
# UPDT: No updates yet.
# NOTE: No notes yet.
### Dependancies ###
command -v yad >/dev/null 2>&1 || { echo >&2 \
"yad package required but it is not installed. Aborting."; \
exit 1; }
command -v nproc >/dev/null 2>&1 || { echo >&2 \
"coreutils package required but it is not installed. Aborting."; \
exit 2; }
if [[ $(id -u) != 0 ]]; then # root powers needed to call this script
echo >&2 Must be called with Sudo powers
exit 3
fi
# $TERM variable may be missing when called via desktop shortcut
CurrentTERM=$(env | grep TERM)
if [[ $CurrentTERM == "" ]] ; then
notify-send --urgency=critical \
"$0 cannot be run from GUI without TERM environment variable."
exit 4
fi
### Program constants ###
## Yad Window parameters
# Hard code Height & Width to suit your screen resolution and scaling factor
GEOMETRY="--width 400 --height 500"
# Pass Parameter 1 with ---geometry="WidxHgt+WidOff+HgtOff" to override
[[ "$1" == --geometry=* ]] && GEOMETRY="$1"
TITLE="cpuf"
TEXT="Set CPU Min/Max Frequencies"
ICON="/usr/share/icons/Adwaita/48x48/devices/computer.png"
# Pass Parameter 2 with icon for window image
# Intel CPU comes from: https://www.gnome-look.org/p/1107932/
[[ ! -z "$2" ]] && ICON="$2"
## Virtual File System directories
CPU0_DIR=/sys/devices/system/cpu/cpu0/cpufreq
PSTATE_DIR=/sys/devices/system/cpu/intel_pstate
CURR_MIN_FREQ="$CPU0_DIR/scaling_min_freq"
CURR_MAX_FREQ="$CPU0_DIR/scaling_max_freq"
ALLOW_MIN_FREQ="$CPU0_DIR/cpuinfo_min_freq"
ALLOW_MAX_FREQ="$CPU0_DIR/cpuinfo_max_freq"
OLD_IFS=$IFS # Save current Input File Separtor (IFS)
declare -a Arr # Array for YAD Window input
NumCPU=$(nproc --all) # Number of CPUs (nproc from coreutils)
### Error Message Functions ###
Abend () {
# Abnormal Ending - Parameter 1 = message to display, Parameter 2=exit code
yad --image "dialog-error" --image-on-top --title "$TITLE - Fatal Error" \
"$GEOMETRY" --button=gtk-ok:0 --text "$1" 2>/dev/null
exit "$2"
} # Abend
ErrMsg () {
# Parmater 1 = message to display
yad --image "dialog-error" --title "$TITLE - Logical Error" \
"$GEOMETRY" --button=gtk-ok:0 --text "$1" 2>/dev/null
fErrMsgForceContinue=true
} # ErrMsg
### Initialize Variables ###
InitVars () {
[[ ! -e "$ALLOW_MIN_FREQ" ]] && Abend "$ALLOW_MIN_FREQ not found" 11
AllowMinFreq=$(cat "$ALLOW_MIN_FREQ")
AllowMinFreq="${AllowMinFreq::-3}" # Chop off three decimals at end
[[ ! -e "$ALLOW_MAX_FREQ" ]] && Abend "$ALLOW_MAX_FREQ not found" 12
AllowMaxFreq=$(cat "$ALLOW_MAX_FREQ")
AllowMaxFreq="${AllowMaxFreq::-3}"
[[ ! -e "$CURR_MIN_FREQ" ]] && Abend "$CURR_MIN_FREQ not found" 13
CurrMinFreq=$(cat "$CURR_MIN_FREQ")
CurrMinFreq="${CurrMinFreq::-3}"
NewMinFreq="$CurrMinFreq"
[[ ! -e "$CURR_MAX_FREQ" ]] && Abend "$CURR_MAX_FREQ not found" 14
CurrMaxFreq=$(cat "$CURR_MAX_FREQ")
CurrMaxFreq="${CurrMaxFreq::-3}"
NewMaxFreq="$CurrMaxFreq"
if [[ -e "$PSTATE_DIR" ]] ; then
NumPstates=$(cat "$PSTATE_DIR/num_pstates")
if [[ $(cat "$PSTATE_DIR/no_turbo") -eq 0 ]] ; then
TurboBoost="Enabled"
else
TurboBoost="Disabled"
fi
else
NumPstates="Not found"
TurboBoost="Not found"
fi
if [[ -e "$CPU0_DIR/scaling_governor" ]] ; then
Governor=$(cat "$CPU0_DIR/scaling_governor")
else
Governor="Not found"
fi
if [[ -e "$CPU0_DIR/scaling_cur_freq" ]] ; then
CurrFreq=$(cat "$CPU0_DIR/scaling_cur_freq")
# Chop off three decimals at end
CurrFreq="${CurrFreq::-3}"
else
CurrFreq="Not found"
fi
} # InitVars
### Paint / repaint window and get new frequencies ###
GetParameters () {
# +------------------------------------------+
# | cpuf - Set CPU Min/Max Frequencies |
# +------------------------------------------+
# | |
# | Turbo Boost: Enabled |
# | |
# | Number of pstates: 99 |
# | Speed Governor Used: powersave |
# | Current CPU0 frequency: 9999 Mhz |
# | |
# | Current Minimum Freq.: 9999 Mhz |
# | Current Maximum Freq.: 9999 Mhz |
# | |
# | New Minimum Frequency 9999 |
# | New Maximum Frequency 9999 |
# | |
# +------------------------------------------+
IFS="|"
Arr=($(yad "$GEOMETRY" --form \
--title "$TITLE" --text "$TEXT" \
--window-icon="$ICON" --image="$ICON" \
--field="Turbo Boost:":RO "$TurboBoost" \
--field="Number of pstates:":RO "$NumPstates" \
--field="Speed Governor:":RO "$Governor" \
--field="Current Frequency:":RO "$CurrFreq MHz" \
--field="Allowable Minimum Frequency:":RO "$AllowMinFreq MHz" \
--field="Allowable Maximum Frequency:":RO "$AllowMaxFreq MHz" \
--field="Current Minimum Frequency:":RO "$CurrMinFreq MHz" \
--field="Current Maximum Frequency:":RO "$CurrMaxFreq MHz" \
--field="New Minimum Frequency" "$NewMinFreq" \
--field="New Maximum Frequency" "$NewMaxFreq" 2>/dev/null))
Return="$?"
NewMinFreq="${Arr[8]}"
NewMaxFreq="${Arr[9]}"
} # GetParameters
###################################
# MAINLINE #
###################################
ALL_PREFIX="/sys/devices/system/cpu/cpu"
MIN_SUFFIX="/cpufreq/scaling_min_freq"
MAX_SUFFIX="/cpufreq/scaling_max_freq"
while true ; do
InitVars
GetParameters
[[ ! "$Return" -eq 0 ]] && break ; # Exit on Cancel=1 or Close Window=252
# Sanity checks
fErrMsgForceContinue=false
[[ $NewMinFreq -lt $AllowMinFreq ]] && ErrMsg "Minimum frequency too low"
[[ $NewMaxFreq -gt $AllowMaxFreq ]] && ErrMsg "Maximum frequency too high"
[[ $NewMinFreq -gt $NewMaxFreq ]] && ErrMsg "Minimum frequency greater than Maximum Frequency"
[[ $fErrMsgForceContinue == true ]] && continue
# Set new Min/Max frequencies
for (( i=0 ; i<NumCPU ; i++ )) ; do
# If New Min > Curr Max, set Max first then Min
if [[ $NewMinFreq -gt $CurrMaxFreq ]] ; then
echo "$NewMaxFreq""000" > "$ALL_PREFIX$i$MAX_SUFFIX"
echo "$NewMinFreq""000" > "$ALL_PREFIX$i$MIN_SUFFIX"
else
echo "$NewMinFreq""000" > "$ALL_PREFIX$i$MIN_SUFFIX"
echo "$NewMaxFreq""000" > "$ALL_PREFIX$i$MAX_SUFFIX"
fi
done
done
IFS="$OLD_IFS"
exit 0
読者は、それがここで迷惑なATLASであることを理解する必要があります。最新のプロセッサーでは、CPUはそれ自体で周波数をスケールダウンし、アイドル状態の関数として、パフォーマンスモードであっても、ビジー状態ではないときにそれが入ることに注意してください。 CPU周波数を最大に「固定」する場合は、パフォーマンスモードの設定に加えて、すべてのアイドル状態> = 0を無効にします。
注:これにより、プロセッサから大量の廃熱が発生し、システムがそれを処理できることを確認します。
例:
開始条件:
doug@s15:~/idle$ cat /sys/devices/system/cpu/cpu*/cpufreq/scaling_driver
intel_cpufreq
intel_cpufreq
intel_cpufreq
intel_cpufreq
intel_cpufreq
intel_cpufreq
intel_cpufreq
intel_cpufreq
doug@s15:~/idle$ cat /sys/devices/system/cpu/cpu*/cpufreq/scaling_governor
performance
performance
performance
performance
performance
performance
performance
performance
ステップ1:システムにはいくつのアイドル状態がありますか?
doug@s15:~/idle$ ls -l -d /sys/devices/system/cpu/cpu*/cpuidle/state*
drwxr-xr-x 2 root root 0 Jul 3 11:41 /sys/devices/system/cpu/cpu0/cpuidle/state0
drwxr-xr-x 3 root root 0 Jul 3 11:41 /sys/devices/system/cpu/cpu0/cpuidle/state1
drwxr-xr-x 3 root root 0 Jul 3 11:41 /sys/devices/system/cpu/cpu0/cpuidle/state2
drwxr-xr-x 3 root root 0 Jul 3 11:41 /sys/devices/system/cpu/cpu0/cpuidle/state3
drwxr-xr-x 3 root root 0 Jul 3 11:41 /sys/devices/system/cpu/cpu0/cpuidle/state4
drwxr-xr-x 2 root root 0 Jul 3 11:41 /sys/devices/system/cpu/cpu1/cpuidle/state0
drwxr-xr-x 3 root root 0 Jul 3 11:41 /sys/devices/system/cpu/cpu1/cpuidle/state1
drwxr-xr-x 3 root root 0 Jul 3 11:41 /sys/devices/system/cpu/cpu1/cpuidle/state2
drwxr-xr-x 3 root root 0 Jul 3 11:41 /sys/devices/system/cpu/cpu1/cpuidle/state3
drwxr-xr-x 3 root root 0 Jul 3 11:41 /sys/devices/system/cpu/cpu1/cpuidle/state4
drwxr-xr-x 2 root root 0 Jul 3 11:41 /sys/devices/system/cpu/cpu2/cpuidle/state0
drwxr-xr-x 3 root root 0 Jul 3 11:41 /sys/devices/system/cpu/cpu2/cpuidle/state1
drwxr-xr-x 3 root root 0 Jul 3 11:41 /sys/devices/system/cpu/cpu2/cpuidle/state2
drwxr-xr-x 3 root root 0 Jul 3 11:41 /sys/devices/system/cpu/cpu2/cpuidle/state3
drwxr-xr-x 3 root root 0 Jul 3 11:41 /sys/devices/system/cpu/cpu2/cpuidle/state4
drwxr-xr-x 2 root root 0 Jul 3 11:41 /sys/devices/system/cpu/cpu3/cpuidle/state0
drwxr-xr-x 3 root root 0 Jul 3 11:41 /sys/devices/system/cpu/cpu3/cpuidle/state1
drwxr-xr-x 3 root root 0 Jul 3 11:41 /sys/devices/system/cpu/cpu3/cpuidle/state2
drwxr-xr-x 3 root root 0 Jul 3 11:41 /sys/devices/system/cpu/cpu3/cpuidle/state3
drwxr-xr-x 3 root root 0 Jul 3 11:41 /sys/devices/system/cpu/cpu3/cpuidle/state4
drwxr-xr-x 2 root root 0 Jul 3 11:41 /sys/devices/system/cpu/cpu4/cpuidle/state0
drwxr-xr-x 3 root root 0 Jul 3 11:41 /sys/devices/system/cpu/cpu4/cpuidle/state1
drwxr-xr-x 3 root root 0 Jul 3 11:41 /sys/devices/system/cpu/cpu4/cpuidle/state2
drwxr-xr-x 3 root root 0 Jul 3 11:41 /sys/devices/system/cpu/cpu4/cpuidle/state3
drwxr-xr-x 3 root root 0 Jul 3 11:41 /sys/devices/system/cpu/cpu4/cpuidle/state4
drwxr-xr-x 2 root root 0 Jul 3 11:41 /sys/devices/system/cpu/cpu5/cpuidle/state0
drwxr-xr-x 3 root root 0 Jul 3 11:41 /sys/devices/system/cpu/cpu5/cpuidle/state1
drwxr-xr-x 3 root root 0 Jul 3 11:41 /sys/devices/system/cpu/cpu5/cpuidle/state2
drwxr-xr-x 3 root root 0 Jul 3 11:41 /sys/devices/system/cpu/cpu5/cpuidle/state3
drwxr-xr-x 3 root root 0 Jul 3 11:41 /sys/devices/system/cpu/cpu5/cpuidle/state4
drwxr-xr-x 2 root root 0 Jul 3 11:41 /sys/devices/system/cpu/cpu6/cpuidle/state0
drwxr-xr-x 3 root root 0 Jul 3 11:41 /sys/devices/system/cpu/cpu6/cpuidle/state1
drwxr-xr-x 3 root root 0 Jul 3 11:41 /sys/devices/system/cpu/cpu6/cpuidle/state2
drwxr-xr-x 3 root root 0 Jul 3 11:41 /sys/devices/system/cpu/cpu6/cpuidle/state3
drwxr-xr-x 3 root root 0 Jul 3 11:41 /sys/devices/system/cpu/cpu6/cpuidle/state4
drwxr-xr-x 2 root root 0 Jul 3 11:41 /sys/devices/system/cpu/cpu7/cpuidle/state0
drwxr-xr-x 3 root root 0 Jul 3 11:41 /sys/devices/system/cpu/cpu7/cpuidle/state1
drwxr-xr-x 3 root root 0 Jul 3 11:41 /sys/devices/system/cpu/cpu7/cpuidle/state2
drwxr-xr-x 3 root root 0 Jul 3 11:41 /sys/devices/system/cpu/cpu7/cpuidle/state3
drwxr-xr-x 3 root root 0 Jul 3 11:41 /sys/devices/system/cpu/cpu7/cpuidle/state4
OK。私は5つのアイドル状態、0-4を持っています:
手順2:状態1〜4を無効にする(私はSudoとして実行されるスクリプトを使用しています):
doug@s15:~/idle$ cat idle_1-4_disable
#! /bin/bash
echo "idle disable states 1-4:"
/home/doug/idle/idle_state1_disable
/home/doug/idle/idle_state2_disable
/home/doug/idle/idle_state3_disable
/home/doug/idle/idle_state4_disable
doug@s15:~/idle$ cat idle_state1_disable
#! /bin/bash
echo "idle state 1: before:"
cat /sys/devices/system/cpu/cpu*/cpuidle/state1/disable
for file in /sys/devices/system/cpu/cpu*/cpuidle/state1/disable; do echo "1" > $file; done
echo "idle state 1: after:"
cat /sys/devices/system/cpu/cpu*/cpuidle/state1/disable
その結果:
doug@s15:~/idle$ Sudo ./idle_1-4_disable
idle disable states 1-4:
idle state 1: before:
0
0
0
0
0
0
0
0
idle state 1: after:
1
1
1
1
1
1
1
1
idle state 2: before:
0
0
0
0
0
0
0
0
idle state 2: after:
1
1
1
1
1
1
1
1
idle state 3: before:
0
0
0
0
0
0
0
0
idle state 3: after:
1
1
1
1
1
1
1
1
idle state 4: before:
0
0
0
0
0
0
0
0
idle state 4: after:
1
1
1
1
1
1
1
1
doug@s15:~/idle$
そしてこれらすべてをターボスタットで見ると:
doug@s15:~/idle$ Sudo turbostat --quiet --Summary --show Busy%,Bzy_MHz,PkgTmp,PkgWatt,GFXWatt,IRQ --interval 15
Busy% Bzy_MHz IRQ PkgTmp PkgWatt GFXWatt
0.02 2743 438 30 3.75 0.12
0.02 2753 406 29 3.75 0.12
0.02 2806 402 29 3.75 0.12
0.02 2764 436 29 3.75 0.12
58.62 3500 70887 50 30.75 0.12 <<<< ilde state 1-4 disabled
100.00 3500 120240 55 50.39 0.12 <<<< tubostat counts idle state 0 as busy
100.00 3500 120243 58 50.95 0.12 <<<< The system is actually still idle.
100.00 3500 120241 60 51.38 0.12
100.00 3500 120248 62 51.91 0.12
100.00 3500 120241 64 52.58 0.12
100.00 3500 120244 65 52.88 0.12
100.00 3500 120252 67 53.13 0.12
100.00 3500 120251 68 53.29 0.12
100.00 3500 120242 68 53.46 0.12
100.00 3500 120268 68 53.56 0.12
100.00 3500 120260 68 53.63 0.12
100.00 3500 120267 70 53.69 0.12
プロセッサの温度が高くなったら、CPU周波数の上限を制限してください。 Intel Pstateの例:
doug@s15:~/idle$ echo 60 | Sudo tee /sys/devices/system/cpu/intel_pstate/max_perf_pct
60
その結果:
100.00 3500 120267 70 53.96 0.12
100.00 3500 120274 71 53.92 0.12
100.00 3500 120256 70 53.95 0.12
100.00 3500 120277 70 53.93 0.12
100.00 3500 120326 70 53.95 0.12
34.97 3500 42719 48 21.53 0.12
0.02 2712 378 45 4.00 0.12
0.02 2754 396 42 3.96 0.12
0.02 2724 504 40 3.92 0.12
0.02 2816 378 39 3.89 0.12
94.33 3500 113569 60 48.59 0.12
100.00 3500 120242 63 51.88 0.12
100.00 3500 120240 65 52.64 0.12
100.00 3500 120280 68 53.08 0.12
100.00 3500 120333 68 53.32 0.12
100.00 1713 120348 55 20.29 0.12 <<< Had to toggle to powersave governor
100.00 2201 120280 57 26.31 0.12 <<< And then back to performance governor
100.00 2300 120239 56 27.58 0.12 <<< Now new max is in effect.
100.00 2300 120237 56 27.53 0.12 <<< And processor temp is less
100.00 2300 120237 55 27.46 0.12
100.00 2300 120232 54 27.42 0.12
以下のファイルで、デフォルトのガバナーをパフォーマンスに置き換えます。
/etc/init.d/cpufrequtils
/etc/default/cpufrequtils
ondemand
サービスを無効にする
Sudo update-rc.d ondemand disable
次に実行します
update-initramfs -u -k all
その後、再起動します
詳細: CPU周波数スケーリングを無効にして、システムをパフォーマンスに設定するにはどうすればよいですか?