Linux 6.13で自宅サーバーの消費電力はどれくらい変化するのか?比較してみた(OpenSUSE)

Evaluating Linux 6.13 Power Efficiency Claims on a Home Server Setup

はじめに

カナダ・ウォータールー大学のMartin Karsten(マーティン・カーステン)教授が提案したデータセンターの電力最適化パッチがLinux 6.13に実装されることになりました。このパッチは、わずか30行のコード修正でデータセンターの電力消費量を最大30%削減できるという画期的なものです。

私は以前から自宅サーバー(OpenSUSE TumbleweedによるWebサーバー)の消費電力を監視するシステムを運用しており(https://bokumin45.server-on.net/dev-info)、この機会に実際の削減効果を検証してみることにしました。
※公開しているのは、その方が面白いからです

監視システムについて

サーバーの状態監視のために以下の情報を定期的に収集するスクリプトを使用しています。今年1月9日から30分おきにスケジューラーで自動実行している状態です。

  • CPU使用率
  • CPU周波数
  • パッケージ電力消費量
  • コア電力消費量
  • GPU電力消費量
  • CPU温度

これらのデータはturbostatコマンドとsensorsコマンドを使用して取得し、HTMLファイルでリアルタイム表示すると共に、/var/log/system_stats.logに時系列データとして保存しています。

以下が実際に使用しているスクリプトです

cat get_hardware_info.sh
#!/bin/bash

get_turbostat_info() {
    sudo turbostat --Summary --quiet --show Busy%,Bzy_MHz,PkgWatt,CorWatt,GFXWatt -n 1 2>&1 | \
    grep -v "Busy%" | \
    awk '{ 
        busy_sum += $1;
        freq_sum += $2;
        pkg_sum += $3;
        cor_sum += $4;
        gfx_sum += $5;
        count++ 
    } END { 
        if (count > 0) {
            printf "%.2f %.2f %.2f %.2f %.2f", busy_sum/count, freq_sum/count, pkg_sum/count, cor_sum/count, gfx_sum/count 
        }
    }'
}

get_system_info() {
    OS_INFO=$(cat /etc/os-release | grep "PRETTY_NAME" | cut -d'"' -f2)
    MOTHERBOARD_INFO=$(sudo hwinfo --bios | grep "Product:" | head -n2 | tail -n1 | sed 's/^[[:space:]]*Product: //g' | sed 's/"//g')
    CPU_INFO=$(sudo hwinfo --cpu | grep -E "Model" | sed 's/^[[:space:]]*//g' | head -n1 | sed 's/Model: //g' | sed 's/"//g')
    GPU_INFO=$(sudo hwinfo --gfxcard | grep "Model:" | head -n1 | sed 's/^[[:space:]]*Model: //g' | sed 's/"//g')
    SENSORS_INFO=$(sensors)
    CPU_TEMP=$(echo "$SENSORS_INFO" | grep "°C" | head -n1 | awk '{print $2}' | sed 's/+//g')
}

TURBO_INFO=$(get_turbostat_info)

get_system_info

CPU_BUSY=$(echo "$TURBO_INFO" | awk '{print $1}')
CPU_FREQ=$(echo "$TURBO_INFO" | awk '{print $2}')
PKG_POWER=$(echo "$TURBO_INFO" | awk '{print $3}')
CORE_POWER=$(echo "$TURBO_INFO" | awk '{print $4}')
GFX_POWER=$(echo "$TURBO_INFO" | awk '{print $5}')

CURRENT_TIME=$(date "+%Y-%m-%d %H:%M:%S")

cat << EOF > /srv/www/bokumin45.server-on.net/dev-info/index.html
<!DOCTYPE html>
<html>
<head>
    <title>Dev Info</title>
    <meta charset="UTF-8">
</head>
<body>
    <h2>System Information</h2>
    <p>OS: ${OS_INFO}</p>
    <p>Motherboard: ${MOTHERBOARD_INFO}</p>
    <h2>Hardware</h2>
    <p>CPU: ${CPU_INFO}</p>
    <p>GPU: ${GPU_INFO}</p>
    <h2>Recent Performance(${CURRENT_TIME})</h2>
    <p>CPU Temperature: ${CPU_TEMP}</p>
    <p>CPU Usage: ${CPU_BUSY}%</p>
    <p>CPU Frequency: ${CPU_FREQ} MHz</p>
    <p>Package Power: ${PKG_POWER} W</p>
    <p>Core Power: ${CORE_POWER} W</p>
    <p>Graphics Power: ${GFX_POWER} W</p>
</body>
</html>
EOF

echo "${CURRENT_TIME},${CPU_BUSY},${CPU_FREQ},${PKG_POWER},${CORE_POWER},${GFX_POWER},${CPU_TEMP}" >> /var/log/system_stats.log

このスクリプトを使用して、カーネルアップデート前後の電力消費量の変化を詳細に分析していきます。

カーネルアップデート

OpenSUSEの場合、以下のコマンドでカーネルのアップデートが可能です。

sudo zypper refresh
sudo zypper dup

大体1時間ぐらいで終わりました。HDDも併用してシステム構造に使っているので、SSDだけならもっと早いかもしれません。
万が一うまくいかなくてもSnapshotsでなんとかなるのがOpenSUSEの強みですね。

動作・消費電力比較

アップデート後と前の違いをグラフ化してきましたので、載せておきます。※これらのデータはアップデート直後の初期の結果で、長期的な傾向を示すものではありません。システムの安定性や実際のパフォーマンスの変化については、より長期的なデータ収集と分析が必要となります。あくまで参考程度と考えてください

CPU使用率

全体(平均:アップデート前6.34% アップデート後5.77%)

一日 (平均:アップデート前5.14% アップデート後5.77%)

全体としてアップデート後に約0.57%の減少が見られました。特に一日の平均使用率では、アップデート前と比較して使用率が増加していますが、これはスパイクや短期的な負荷の増加が影響している可能性があります。
一日の平均使用率が上がっているのは気になりますね・・これは短期的な変動かもしれないので、長期的なデータがほしいところです

CPU周波数

全体(平均:アップデート前2277.77MHz アップデート後2341.80MHz)

一日(平均:アップデート前 2249.25MHz アップデート後2341.80MHz)

全体としてアップデート後に約64MHzの増加が見られました。これは、カーネルの電力最適化パッチによる効果であり、CPUの効率的な利用が向上したことを示しています。カーネルが電力管理を最適化した結果、無駄な低クロック状態を減らし、負荷に応じて効率的に周波数を変動させるようになった可能性がありそうです

パッケージ消費電力(PC全体)

全体(平均:アップデート前9.96W アップデート後9.65W)

一日(平均:アップデート前9.33W アップデート後9.65W)

全体としてアップデート後に約0.31Wの減少が見られました。一日の平均消費電力では、わずかな増加が見られますが、全体としてはエネルギー効率が改善されていることがわかります。
これは明確にカーネルの省電力機能が効いている証拠かなと思います。ただし「最大30%削減」というデータセンター向けの話とは大きく異なり、実際の効果は数%程度に収まっています。データセンターと個人が使うサーバーでは負荷のかかり方が違うのが原因だと思います

CPUコア消費電力

全体(平均:アップデート前3.65W アップデート後3.36W)

一日(平均:アップデート前3.07W アップデート後3.36W)

全体としてアップデート後に約0.29Wの減少が見られました。これは、カーネルの電力最適化による効果であり、プロセッサの効率的な動作が向上したことを示しています。

CPU温度

全体(平均:アップデート前35.40℃ アップデート後35.16℃)

一日(平均:アップデート前33.10℃ アップデート後35.16℃)

CPU温度に関して、全体としてアップデート後に約0.24℃の減少が見られました。一日の平均温度では、アップデート後に若干の上昇が見られますが、これは許容範囲内と言えるでしょう。実際温度に関しては、ほぼ変わらないというのが結果だと思います

まとめ

カーネルアップデート後、全体的にCPU使用率や消費電力が減少し、CPU周波数がやや向上する結果が得られました。特に、パッケージ消費電力とCPUコア消費電力の減少が顕著であり、これによりサーバーのエネルギー効率が改善されていることがわかります。一方で、CPU温度に関してはアップデート後に若干の上昇が見られますが、もう少しデータがないとわからないというのが本音です。
また一か月後に同じような記事を書いて経過を報告できたらと思います

追記:Linuxカーネルの公式Gitリポジトリ(https://git.kernel.org/)のコミット履歴を参照することで変更点がわかると思うので、気になった方は確認してみてください
コミット履歴:https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/log/?h=v6.13

おわり