Ubuntu日和

【第49回】Ryzenを入手したけど、CPU温度が取得できない人のためのTips

 16コア32スレッドCPU。それはあこがれだった。

 思えばここ20年弱はマルチコア化の時代であった。よく覚えているわけではないが、筆者も2005年末くらいにAthlon 64 X2 3800+で1台組んでいるようだ。

 筆者はAMD愛好者なので、Intelの話はさておくとして、時代とともにコアは増え続け、コンシューマ向けのRyzen 9 3950Xではついに16コア32スレッドになった。この時点ではあまり購入しようとは思わなかった。

 そして現在のハイエンドCPUであるRyzen 9 7950Xが出た。実は当初買う気はなかったが、さまざまな知見が貯まって、ハイエンドCPUでも扱えそうな気分になってきたことに加え、自分で使用するパッケージのビルド時間がかかりすぎることなどが気になってきた。とはいえ、買うのはなかなかに躊躇する価格だ。しかしあと半年もすれば、より高速化されている新モデルが出るだろう。その新モデルと7950Xを比較して、購入するか決めることにした。

 その前に懐に余裕ができたので、たいして迷うこともなくRyzen 7 8700Gとマザーボードとメモリを購入した。結局マザーボードは3枚購入することになったが、どうせCPUは増えるものだし、いつかは使うのだ。それほど気にすることもない。

 クレジットカードの引き落とし額を除けば。

突然訪れたRyzen 9 7950X

 そんな中、ひょんなことから手に入ってしまったのだ。お目当てのRyzen 9 7950Xを。

 手に入れたとはいっても、当然のことながら正規代理店のものを某ショップで購入したのだ。懸賞で当たったということはない。

筆者所有のRyzen 9 7950X近影

 しかしここで計画が狂う。マザーボードはあと2枚あるし、前メインPCで使用していたPCケース、CPUファン、電源はそのまま流用できる。あとはメモリを購入すればいいだけ……のはずだった。

 ところが手元の電源の容量は500Wで、7950Xをぶん回すには少々心許ないことに気づき、700Wのものを追加購入することに。とはいえ、あこがれのCPUが手に入ったのだ。それほど気にすることもない。

 クレジットカードの引き落とし額を除けば。

 そしてここでふと気づいたのだ。UbuntuだとCPUの温度とファンの回転数が取得できないことを。ということは、7950Xがフルパワーを出しているのか、サーマルスロットリングしているのかが分からない。これでは致命的に困る。

 今回はUbuntuでもCPUの温度とファンの回転数を取得し、7950Xが本気を出しているかを計測する。同時に、地球と財布に優しくするため手軽かつ確実に消費電力を下げてみて、性能とのバランスを考えてみたい。Ubuntuでもそういう自作PC特有の遊びができることを示したい。

PCの構成

 まずはPCの構成を見ていこう。次の表の通りだ。

メーカー型番
CPUAMDRyzen 9 7950X
CPUファンDEEPCOOLAK620
グリスガードDEEPCOOLR-AM5TPG-CUNNAN-G
マザーボードGIGABYTEB650I AORUS ULTRA
メモリーTEAMCTCCD532G6000HC48DC01-A
SSDKIOXIAEXCERIA PRO SSD-CK1.0N4P/N
ケースファンARCTICP12 Max
電源ユニットSILVER STONESST-SX700-PT
ケースSILVER STONESUGO14

 このうちB650I AORUS ULTRAはなかなかに癖が強く苦戦した。このマザーボードは前面部にライザーカード(GC-B650I FRONT CARD)を取り付ける必要があり、これのおかげで、当初ギリギリのケースであるChopin MAXに入れようして、コネクタを破損してしまった。

 また、M2 SSDもライザーカードになっており(マニュアルではGC-B650I BTB PLUG、WebサイトではM.2 Thermal Guard III)、この背が高いので一部CPUファンが干渉して接続できない。曰く「M.2 Thermal IIIの外観デザインは、CPUクーラーの取り付けに影響を与える可能性があるため、CPU簡易水冷クーラーの使用を推奨します。」とのこと。AK620は問題なく取り付けられたが、120mm角ファンを搭載するようなトップフロー型CPUクーラーはまず非対応と思ったほうがいい。

 ビデオカード(dGPU)は検証時点では接続しておらず、PCIeスロットに接続する変換ボードを経由してSSDを接続している。

 ケースファンはもともと付いていたが、PWM非対応なのでたまたまあったストック品と交換した。電源ユニットはケーブルをそのまま利用したかったのでSILVER STONE製にしたが、SFXサイズにする必要があったかは疑問が残る。

 なお、使用したUbuntuのバージョンは22.04.4だ。すなわちカーネルのバージョンは6.5である。

CPUの温度とファンの回転数を取得する

 CPUの温度とファンの回転数を取得する方法は第31回で紹介している。

 要するに次のコマンドを実行するだけだ。

$ sudo apt install lm-sensors
$ sudo sensors-detect

 しかし無常にも「Sorry, no sensors were detected」となってしまう。

「Sorry, no sensors were detected」と表示されてしまう

 要は、現在のカーネルでは対応しないということで、別途カーネルモジュールをインストールする必要がある。

 具体的には次のコマンドを実行する。

$ sudo apt install git dkms
$ mkdir git
$ cd git
$ git clone https://github.com/frankcrawford/it87.git
$ cd it87
$ sudo make dkms
$ sudo modprobe it87 ignore_resource_conflict=1

 これでカーネルモジュール「it87」が読み込めた。ただ、このままでは起動するたびに最下行のコマンドを実行する必要がある。起動時に読み込ませたい場合は、次のような中身のファイルを作成する。

$ cat /etc/modules-load.d/it87.conf
it87
$ cat /etc/modprobe.d/it87.conf
options it87 ignore_resource_conflict=1

 sensorコマンドを実行すると「it8689-isa-0a40」という項目が増え、ここにたくさんの温度が表示されている。しかしどれがなんの温度なのか分かりにくい。

 負荷をかけてみると下図のように「temp3」の温度が高くなる。これがCPUの温度ということで間違いないだろう。

負荷をかけると「temp3」の温度が如実に上がる

 こういった場合、「psensor」というパッケージをインストールして起動しておくと、温度などを分かりやすく表示できるのでおすすめだ。

psensorの表示例

ECO Mode

 16コア32スレッドは魅力的だが、常にそこまで絶対的な性能を必要としているわけではない。消費電力をマイルドにしつつ性能の低下が最小限で抑えられれば、それに越したことはない。

 B650I AORUS ULTRAのUEFI BIOSメニューに入り、「Settings」-「AMD CBS」-「SMU Common Options」に「ECO Mode」がある。

 7950Xでは3パターンから選べ、「Enable」にすると65W、「Enable - 105W」にすると105W、「Disable」にするとデフォルト(170W)に変更できる。

ECO Modeの選択肢

 せっかくなのでこの3パターンでベンチマークを計測してみよう。使用するベンチマークはPhoronix Test Suiteで、Linuxカーネルのビルドを行なう。

モードdefconfigallmodconfig最高温度消費電力
デフォルト48.38秒608.35秒95℃260~290W
105W50.82秒639.61秒80℃190W
65W57.88秒754.90秒73℃130W

 defconfigは極めてシンプルな場合のビルド、allmodconfigは逆に極めて複雑(項目が多い)ビルドで、同じビルドでもかなり時間に差が出る。後者のほうが実態に近いであろう。

 消費電力はワットチェッカーの目視確認なので必ずしも正確とはいえないが、消費電力と性能のバランスがいいのは105Wの結果であることが分かったので、今後はこの設定で使っていく予定だ。

ほかのマザーボードでは

 GIGABYTEのマザーボードは、おおむね今回紹介した方法で温度とファンの回転数を取得できるはずだ。では、ほかのメーカーのマザーボードではどうだろうか。

 筆者の前メインPCのマザーボードはMPG B550I GAMING EDGE WIFIであったが、別のカーネルモジュールでの対応を確認している。ドキュメントも詳細で、これを読めばインストールできるだろう。

 現メインPCのマザーボードはB650M Pro RSで、こちらはArchWikiにそのものズバリが書かれていた。

 ……そう、今回の記事は「UbuntuなのにArch Linuxの情報を参考にした」のだ。オチがついたところで今回はおしまい。