Ubuntu日和
【第49回】Ryzenを入手したけど、CPU温度が取得できない人のためのTips
2024年4月6日 06:12
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を。
手に入れたとはいっても、当然のことながら正規代理店のものを某ショップで購入したのだ。懸賞で当たったということはない。
しかしここで計画が狂う。マザーボードはあと2枚あるし、前メインPCで使用していたPCケース、CPUファン、電源はそのまま流用できる。あとはメモリを購入すればいいだけ……のはずだった。
ところが手元の電源の容量は500Wで、7950Xをぶん回すには少々心許ないことに気づき、700Wのものを追加購入することに。とはいえ、あこがれのCPUが手に入ったのだ。それほど気にすることもない。
クレジットカードの引き落とし額を除けば。
そしてここでふと気づいたのだ。UbuntuだとCPUの温度とファンの回転数が取得できないことを。ということは、7950Xがフルパワーを出しているのか、サーマルスロットリングしているのかが分からない。これでは致命的に困る。
今回はUbuntuでもCPUの温度とファンの回転数を取得し、7950Xが本気を出しているかを計測する。同時に、地球と財布に優しくするため手軽かつ確実に消費電力を下げてみて、性能とのバランスを考えてみたい。Ubuntuでもそういう自作PC特有の遊びができることを示したい。
PCの構成
まずはPCの構成を見ていこう。次の表の通りだ。
メーカー | 型番 | |
---|---|---|
CPU | AMD | Ryzen 9 7950X |
CPUファン | DEEPCOOL | AK620 |
グリスガード | DEEPCOOL | R-AM5TPG-CUNNAN-G |
マザーボード | GIGABYTE | B650I AORUS ULTRA |
メモリー | TEAM | CTCCD532G6000HC48DC01-A |
SSD | KIOXIA | EXCERIA PRO SSD-CK1.0N4P/N |
ケースファン | ARCTIC | P12 Max |
電源ユニット | SILVER STONE | SST-SX700-PT |
ケース | SILVER STONE | SUGO14 |
このうち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」となってしまう。
要は、現在のカーネルでは対応しないということで、別途カーネルモジュールをインストールする必要がある。
具体的には次のコマンドを実行する。
$ 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の温度ということで間違いないだろう。
こういった場合、「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)に変更できる。
せっかくなのでこの3パターンでベンチマークを計測してみよう。使用するベンチマークはPhoronix Test Suiteで、Linuxカーネルのビルドを行なう。
モード | defconfig | allmodconfig | 最高温度 | 消費電力 |
---|---|---|---|---|
デフォルト | 48.38秒 | 608.35秒 | 95℃ | 260~290W |
105W | 50.82秒 | 639.61秒 | 80℃ | 190W |
65W | 57.88秒 | 754.90秒 | 73℃ | 130W |
defconfigは極めてシンプルな場合のビルド、allmodconfigは逆に極めて複雑(項目が多い)ビルドで、同じビルドでもかなり時間に差が出る。後者のほうが実態に近いであろう。
消費電力はワットチェッカーの目視確認なので必ずしも正確とはいえないが、消費電力と性能のバランスがいいのは105Wの結果であることが分かったので、今後はこの設定で使っていく予定だ。
ほかのマザーボードでは
GIGABYTEのマザーボードは、おおむね今回紹介した方法で温度とファンの回転数を取得できるはずだ。では、ほかのメーカーのマザーボードではどうだろうか。
筆者の前メインPCのマザーボードはMPG B550I GAMING EDGE WIFIであったが、別のカーネルモジュールでの対応を確認している。ドキュメントも詳細で、これを読めばインストールできるだろう。
現メインPCのマザーボードはB650M Pro RSで、こちらはArchWikiにそのものズバリが書かれていた。
……そう、今回の記事は「UbuntuなのにArch Linuxの情報を参考にした」のだ。オチがついたところで今回はおしまい。