電気代を抑える:PowertopとTLPでHomeLabを最適化する

HomeLab tutorial - IT technology blog
HomeLab tutorial - IT technology blog

静かなる暗殺者:アイドル時の消費電力

HomeLabは際限なく拡張しがちです。最初は1台のRaspberry Piから始まったものが、いつの間にかエンタープライズサーバーのスタックや、騒がしい10GbEスイッチ、高性能なNUCへと変貌していることも珍しくありません。ハードウェアをいじるのは楽しいものですが、デュアルソケットのXeonサーバーを導入した後の最初の電気代の請求書を見て、現実を突きつけられることになります。多くの地域では、150Wを24時間365日稼働させるサーバー1台で、年間数万円もの電気代上乗せされます。

標準的なLinuxディストリビューションは、効率よりもパフォーマンスを優先します。デフォルト設定では、SATAコントローラー、PCIeレーン、USBポートなどが、何もしていない時でも高電力状態で維持されています。これらのハードウェア状態をチューニングすることで、サービスの応答性を1ミリ秒も損なうことなく、アイドル時の消費電力を20%から50%削減できることがよくあります。

私はDell PowerEdge R720でこの教訓を身をもって学びました。当初、アイドル時で140Wを消費していましたが、以下の最適化を適用した結果、95Wまで低下しました。この45Wの差は年間約400kWhの節約に相当し、18ヶ月ごとに新しいハードドライブを1台購入できるほどの金額になります。

ステップ1:ツールのインストール

私たちは主に2つのツール、PowertopTLPに頼ります。Powertopは診断のための「目」として機能し、TLPはバックグラウンドで省電力ルールを適用する自動化エンジンとして機能します。これらのツールは、巨大なラックサーバーからLenovo TinyやIntel NUCまで、あらゆるデバイスで効果を発揮します。

Ubuntu、Debian、またはProxmoxを使用している場合は、次のコマンドでインストールします:

sudo apt update
sudo apt install powertop tlp tlp-rdw -y

PowertopはIntelが開発したユーティリティで、エネルギーがどこで消費されているかを可視化します。TLPはもともとラップトップ向けに設計されましたが、Linuxサーバーのハードウェア電力状態を管理するための最高のフレームワークを提供します。

ステップ2:Powertopで無駄を特定する

変更を加える前に、現状(ベースライン)を把握する必要があります。root権限でPowertopを起動します:

sudo powertop

Tabキーを使って**Tunables**セクションに移動してください。おそらく、多くの項目が「Bad」とフラグ立てされているはずです。これはハードウェアのエラーではありません。単にカーネルがそれらのコンポーネント(オーディオコントローラーやPCIe ASPMなど)を最大電力で動作させていることを意味します。

即時最適化

1つのフラグを指定するだけで、すべての「Bad」項目を即座に「Good」に切り替えることができます:

sudo powertop --auto-tune

この変更は一時的なもので、再起動すると消失します。恒久的に適用するには、起動時に実行されるsystemdサービスを作成します:

sudo nano /etc/systemd/system/powertop.service

ファイルに以下の設定を貼り付けます:

[Unit]
Description=Powertopによるチューニング

[Service]
Type=oneshot
ExecStart=/usr/sbin/powertop --auto-tune

[Install]
WantedBy=multi-user.target

サービスを有効化して永続化させます:

sudo systemctl enable powertop.service
sudo systemctl start powertop.service

ステップ3:TLPによる微調整

TLPはPowertopよりも詳細な制御が可能で、特にCPUの周波数スケーリングやディスク管理に優れています。設定を開始するには、/etc/tlp.confにある設定ファイルを開きます。

HomeLabサーバーにおいて、節電と安定性のバランスが最も取れた設定は以下の通りです:

# CPUにpowersaveガバナーの使用を強制する
CPU_SCALING_GOVERNOR_ON_AC=powersave

# バックグラウンドタスクのエネルギー消費を最小限に抑える
CPU_ENERGY_PERF_POLICY_ON_AC=power

# SATAリンク電力管理を有効化(ドライブ1台あたり約1〜2W節約)
SATA_LINKPWR_ON_AC=med_power_with_dipm

# PCIe Active State Power Management (ASPM) を有効化
PCIE_ASPM_ON_AC=powersave

新しい設定を即座に適用します:

sudo tlp start

注意: ZFSを使用したNASやエンタープライズ向けのRAIDカードを運用している場合、積極的なSATA電力管理には注意が必要です。一部のエンタープライズ向けドライブ(古いSASユニットなど)は、低電力状態からの復帰時にハングアップしたり、レイテンシのスパイクを引き起こしたりすることがあります。

ステップ4:スケジューリングと自動化

最も効果的な節電方法は、使用していないハードウェアの電源を切ることです。バックアップサーバーが夜間しか稼働しない場合や、メディアラボが勤務時間中に休止している場合は、ダウンタイムを自動化しましょう。

スケジュールされたシャットダウン

午前1時から午前7時の間、ラボが「ゴーストタウン」になるのであれば、cronジョブを使ってシャットダウンします。crontabを編集します:

sudo crontab -e

毎晩午前1時にシャットダウンを実行するため、次の行を追加します:

00 01 * * * /sbin/shutdown -h now

Wake-on-LAN (WOL) による起動

ほとんどの現代のマザーボードは、BIOSで「Power On By RTC」をサポートしており、毎日決まった時間に起動するように設定できます。より柔軟な対応が必要な場合は、Wake-on-LANを使用して他のデバイスから起動をトリガーします。まず、ネットワークカードが対応しているか確認します:

sudo apt install ethtool
sudo ethtool eth0 | grep "Wake-on"

もし Supports Wake-on: g と表示されれば準備完了です。次のコマンドで有効化します:

sudo ethtool -s eth0 wol g

結果の測定

推測ではなく、実際に確認しましょう。tlp-stat -s を使用して、ポリシーが有効であることを確認します。ただし、ソフトウェアツールでは電源ユニット(PSU)内部の効率損失までは把握できません。「コンセント側」の真実を知るには、Shelly 1PMやKasa KP115のような電力モニタリング機能付きのスマートプラグを使用してください。

Powertopで**Package C-States**を確認してください。CPUがC6やC7ステートに全く到達していない場合、バックグラウンドプロセスや誤設定されたPCIeデバイスがシステムを「起こし続けている」可能性があります。目標は、アイドル時に可能な限り高いCステートで過ごす時間の割合を最大化することです。

Powertopの自動チューニングとTLPのハードウェアルールを組み合わせることで、ラボの総所有コスト(TCO)を大幅に下げることができます。これらの小さな積み重ねが、ストレージの増設やネットワークの高速化といった、本当に重要なことへの予算を生み出すのです。

Share: