【Shell script】CPUクロック数を周期的に表示・ログ保存する方法

説明

Linux環境において、PCのCPUクロック数を周期的に表示・ログ保存する方法を解説します。

実例

シェルスクリプトを用いて、CPUクロック数のCPUクロック数を周期的に表示する方法と確認する方法をそれぞれ解説します。

動作環境

ubuntu@ubuntu:~$ uname -a
Linux ubuntu 5.4.0-1038-raspi #41-Ubuntu SMP PREEMPT Thu Jun 17 14:14:11 UTC 2021 aarch64 aarch64 aarch64 GNU/Linux
ubuntu@ubuntu:~$ cat /etc/os-release 
NAME="Ubuntu"
VERSION="20.04.2 LTS (Focal Fossa)"
ID=ubuntu
ID_LIKE=debian
PRETTY_NAME="Ubuntu 20.04.2 LTS"
VERSION_ID="20.04"
HOME_URL="https://www.ubuntu.com/"
SUPPORT_URL="https://help.ubuntu.com/"
BUG_REPORT_URL="https://bugs.launchpad.net/ubuntu/"
PRIVACY_POLICY_URL="https://www.ubuntu.com/legal/terms-and-policies/privacy-policy"
VERSION_CODENAME=focal
UBUNTU_CODENAME=focal

CPUクロック数を確認するパラメータ

CPUクロックの設定値を確認する場合に参照するパラメータは下記です。単位はkHzです。

/sys/devices/system/cpu/cpu0/cpufreq/scaling_cur_freq

このパラメータの確認例は以下です。

ubuntu@ubuntu:~$ cat /sys/devices/system/cpu/cpu0/cpufreq/scaling_cur_freq
1000000

CPUクロック数を周期的に表示する場合

CPUは4コアですので、4コアすべてのCPU動作クロック数を1秒ごとに表示するシェルスクリプトは下記です。

#!/bin/sh

for i in `seq 10000`
do
  NOW=`date +%Y%m%d_%H%M%S`
  echo "--"$NOW"" 
  cat /sys/devices/system/cpu/cpu0/cpufreq/scaling_cur_freq
  cat /sys/devices/system/cpu/cpu1/cpufreq/scaling_cur_freq
  cat /sys/devices/system/cpu/cpu2/cpufreq/scaling_cur_freq
  cat /sys/devices/system/cpu/cpu3/cpufreq/scaling_cur_freq
  sleep 1
done

シェルスクリプトの実行例は下記です。

ubuntu@ubuntu:~$ sh cpu_disp.sh 
--20220327_114637
1200000
1300000
1300000
1500000
--20220327_114638
1100000
1100000
1000000
1000000
--20220327_114639
1000000
1300000
1300000
1100000
...

CPUクロック数を周期的にログ保存する場合

CPUは4コアですので、4コアすべてのCPU動作クロック数を1秒ごとに保存するシェルスクリプトは下記です。

#!/bin/sh

if [ $# != 1 ]; then
  echo "Arg ERROR: $*"
  exit 1
else
  # settiing log file date
  DATETIME=`date +%Y%m%d_%H%M%S`
  # echo $DATETIME

  LOG_DIR="./log/"
  FILE_NAME="$1_log_cpu_clock_${DATETIME}.txt"

  for i in `seq 10000`
  do
    NOW=`date +%Y%m%d_%H%M%S`
    echo "--"$NOW"" >> ${LOG_DIR}${FILE_NAME}
    cat /sys/devices/system/cpu/cpu0/cpufreq/scaling_cur_freq >> ${LOG_DIR}${FILE_NAME}
    cat /sys/devices/system/cpu/cpu1/cpufreq/scaling_cur_freq >> ${LOG_DIR}${FILE_NAME}
    cat /sys/devices/system/cpu/cpu2/cpufreq/scaling_cur_freq >> ${LOG_DIR}${FILE_NAME}
    cat /sys/devices/system/cpu/cpu3/cpufreq/scaling_cur_freq >> ${LOG_DIR}${FILE_NAME}
    sleep 1
  done

fi

シェルスクリプトの実行例は下記です。

ubuntu@ubuntu:~$ sh cpu_log.sh hoge
...

今回は、ログ取得用ということですので、実行コマンドに引数としてテスト番号を入れることで、ログ保存するファイル名に挿入できるようにしました。
生成されるログファイルは、シェルスクリプトと同じ階層にあるlogフォルダの中に保存されるようにしています。

生成されるログファイルは以下のようになっています。

ubuntu@ubuntu:~/log$ ls
hoge_log_cpu_clock_20210627_115549.txt

ログファイルの中身は次のようになっています。

ubuntu@ubuntu:~/log$ cat hoge_log_cpu_clock_20210627_115549.txt 
--20210627_115549
1400000
1000000
1000000
1500000
--20210627_115550
1100000
1100000
1000000
1000000

CPUクロック数を周期的に表示・ログ保存する場合

CPUは4コアですので、4コアすべてのCPU動作クロック数を1秒ごとに表示・ログ保存するシェルスクリプトは下記です。

#!/bin/sh

if [ $# != 1 ]; then
  echo "Arg ERROR: $*"
  exit 1
else
  # settiing log file date
  DATETIME=`date +%Y%m%d_%H%M%S`
  # echo $DATETIME

  LOG_DIR="./log/"
  FILE_NAME="$1_log_cpu_clock_${DATETIME}.txt"

  for i in `seq 10000`
  do
    NOW=`date +%Y%m%d_%H%M%S`
    echo "--"$NOW"" | tee -a ${LOG_DIR}${FILE_NAME}
    cat /sys/devices/system/cpu/cpu0/cpufreq/scaling_cur_freq | tee -a ${LOG_DIR}${FILE_NAME}
    cat /sys/devices/system/cpu/cpu1/cpufreq/scaling_cur_freq | tee -a  ${LOG_DIR}${FILE_NAME}
    cat /sys/devices/system/cpu/cpu2/cpufreq/scaling_cur_freq | tee -a  ${LOG_DIR}${FILE_NAME}
    cat /sys/devices/system/cpu/cpu3/cpufreq/scaling_cur_freq | tee -a  ${LOG_DIR}${FILE_NAME}
    sleep 1
  done

fi

シェルスクリプトの実行例は下記です。

ubuntu@ubuntu:~$ sh cpu_log.sh fuge
--20210627_131511
1400000
1400000
1400000
1400000
--20210627_131512
1300000
1300000
1200000
1200000
...

今回も、ログ取得用ということですので、実行コマンドに引数としてテスト番号を入れることで、ログ保存するファイル名に挿入できるようにしました。
生成されるログファイルは、シェルスクリプトと同じ階層にあるlogフォルダの中に保存されるようにしています。
表示しながらログ表示するため、teeコマンドを用いています。これにより、ターミナル上に表示することが可能です。

生成されるログファイルは以下のようになっています。

ubuntu@ubuntu:~/log$ ls
fuge_log_cpu_clock_20210627_131511.txt

ログファイルの中身は次のようになっています。

ubuntu@ubuntu:~/log$ cat fuge_log_cpu_clock_20210627_131511.txt 
--20210627_131511
1400000
1400000
1400000
1400000
--20210627_131512
1300000
1300000
1200000
1200000

ターミナル上で表示された値と同じ値がログファイルにも保存されています。
その場で確認しながら、あとで解析する場合に便利ですね。

CPUクロックの設定値を確認する方法を別記事で紹介していますので、合わせて確認してみてください。

説明 Linux環境において、PCのCPUクロック数の設定値や動作クロック数を確認する方法を解説します。 実例 CPUク...

ここまで読んでいただきありがとうございました。

シェアする

  • このエントリーをはてなブックマークに追加

フォローする

スポンサーリンク