メインコンテンツへスキップ

AMD GPUでLinuxのスリープ問題

·2 分
2025/02 Linux AMD GPU スリープ トラブルシューティング

AMD GPUでLinuxのスリープ問題

引用元:https://news.ycombinator.com/item?id=43071983

jorvi 2025-02-17T17:29:52

ちょっと調べてみたんだけど、S3スリープに入るとPCIe GPUに電源がカットされるっぽい。正しいかは不明だけど、Gigabyte Aorusマザーボードはスリープバグがあって、SSDが正常にスリープしたり起きたりできないことがある。それを解決するのがこのudevルールだよ:
>“スリープバグ対策として任意のPCIeポートからのウェイクアップを無効にする”

nyanpasu64 2025-02-17T21:02:24

俺のマザーボードでは、/etc/udev/rules.d/に設定を追加して自動ウェイクを無効にした。Logitech BoltレシーバーがいろんなLinux PCをすぐに起こすみたいで、Windowsではなんでこんなことがないのか謎。とりあえず、レシーバーの待機を無効にするルールを追加した!

jorvi 2025-02-17T23:17:45

いいヒントだね!KERNELS==”0000:00:01.1”を使うのは興味深い。PCIデバイスの特定の機能をターゲットにできるからね。

VMG 2025-02-17T18:44:59

Aorusマザー使ってるけど、この問題でいくつかの電力を無駄にしちゃった。これらの解決策に期待してたけど、ダメだったよ。ありがとう!

jorvi 2025-02-17T20:37:46

一般的な対策は試した?それとudevルールのリロードもね。デフォルトのルールの後に適用されるようにしないと。うまくいったら、udevadmでSSDデバイスを確認して“power/wakeup”が“disabled”になっているか見てみて。もし“disabled”なら、他の何かがスリープを妨げてるよ。

VMG 2025-02-18T08:37:45

もっと詳しく説明すればよかったかな。俺はデスクトップPC使ってるんだけど、スリープに入るのはいいけど、起き上がるとフリーズしちゃう。

jorvi 2025-02-18T11:18:05

俺もAorus ATXマザー使ってる。スリープには入るけど、起きるとフリーズするのが問題。デバイスによって挙動が違って、うちのは98%までスリープするけどファンだけが動く状態。これがバグであることがわかった。おそらく他のポートでも解決できるはず。

nyanpasu64 2025-02-18T22:54:07

やばいな、B550M DS3H使ってるけど、スリープからすぐに起こすと一瞬つくけど、操作できなくて電源ボタン押してもダメ。壁のコンセントから電源引っこ抜かなきゃいけなかった。これは前にBIOSアップデートで直った。

mafuyu 2025-02-18T06:13:20

このヒントありがとな!X570 Aorus Masterのサスペンド問題に悩んでた。/proc/acpi/wakeupにGPP0って入れたら解決したけど、最初のスリープ後にすぐ起きちゃうのは相変わらず。udevルールを適用して、そっちも直ったみたい!

jorvi 2025-02-18T11:12:11

将来のユニットファイルを使うために:Type=oneshotRemainAfterExit=yes使った?そうじゃないとウェイクアップの動作に変な影響があった気がする。でもこれはNixOS特有かも。

mafuyu 2025-02-19T07:12:49

ExecStartにmulti-user.targetを使ったけど、これが単純ユニットを示すから起動時の順序が間違ってるかもって気づいた!これから気をつけようと思う。

jorvi 2025-02-19T15:55:19

混乱させてごめん、実行に失敗してるわけじゃないよ。”RemainAfterExit”を入れないと、毎回起動するから注意が必要。これでお得意のシェルコードが実行される。”RemainAfterExit”はシステムの状態を変えるユニットファイルに必要で、1回実行したら手動で無効にしない限り”アクティブ”になる。”Type=Oneshot”も必要。とはいえ、udevでやるのが好みかな。シェルスクリプトは壊れやすいから。

mafuyu 2025-02-24T05:54:26

なるほど、アドバイスありがと!systemdは簡単に使えて便利だけど、罠も多いんだよね。

bArray 2025-02-18T13:08:09

この仮定が正しいかは不明だけど、S3はRAM以外の電源をカットするはず。でもGigabyte AorusのマザーボードにはNVMe SSDスリープバグがあって、システムが正しくスリープやウェイクできないことがある。ハードウェアの状態をチェックしたり、PCIeデバイスにスリープコマンドを送ったりできるといいんだけど。

krastanov 2025-02-18T02:59:03

ああ、長い間この問題に悩んでるんだけど、これもダメだったよ。ここに記録してあるから見てみて。
https://bbs.archlinux.org/viewtopic.php?id=302440
Aorusのウェイクアップ問題に関するさらなる洞察があったら教えて。特に、私の場合は.../devices/LNXSYSTM:00/LNXSYBUS:00/PNP0A08:00/device:45/wakeup/wakeup6からウェイクアップしてるみたいだけど、意味が分からないんだ。

jorvi 2025-02-18T10:59:47

それも分からないけど、上のコメントからのヒントで試してみるといいかも。
ACTION==”offline”, KERNELS==”0000:00:45.6”, ATTR{power/wakeup}=”disabled”
とか、ACTION==”change”やKERNELS==”0000:00:45”やKERNELS==”0000:00:45.?”もありかも。

faraggi 2025-02-18T04:39:00

このMBで何年もこの問題に苦しんで、結局はひどいUSB CのPCIeカードを物理的に取り外すことで解決したよ。コンピュータケースにはUSBCポートがなかったからね。
それに、PCIウェイクアップバスを無効にしたこともあるけど、それからは触ってない。今は順調だよ。これが役に立てば。

gU9x3u8XmQNG 2025-02-18T05:09:33

これは修正なのか、それとも回避策なのか?

lorenzbrun 2025-02-17T22:21:15

memreserverの作者がここにいるよ。この問題について数年前にデバッグしたけど、公開されてるコメントが見つかるのは難しい。
大体は、Linuxに信頼性の高いスリープフックが欠けていたのが問題だったけど、これが今は可能になっている。残念ながら、FreedesktopのGitlabはインデックスできないから、その知識が失われちゃったみたい。
[1] https://gitlab.freedesktop.org/drm/amd/-/issues/2125#note_17

sabujp 2025-02-17T18:30:52

すごい成果だね!Linuxでスリープがどれだけ難しいか、その原因がわかるデータポイントだよ。今でもThinkPad P1G4を使ってるけど、スリープに入るとファンが自動で止まらないし、最近はBluetoothヘッドフォンからのスリープ復帰後に音が割れる問題も発生した。ノードのスリープも無効にしたよ。
(https://wiki.archlinux.org/title/PipeWire#Noticeable_audio_d…)

もっとコメントを表示(1)
Apofis 2025-02-17T19:03:32

もう2025年なのに、Linuxのノートパソコンのスリープやサスペンドがまだちゃんと動かないのは驚きだよね。15年前に初めてこの問題に出くわした気がする。

xondono 2025-02-17T19:36:31

Windowsでもスリープとサスペンドはうまく動かないよね。パワーコントロールは密接な統合が必要だから、PCはそれができてないんだ。メーカーはファームウェアをただのコストとみなしていて、最低限の機能しか提供してないから、完全にサポートされないことが多い。

kiwijamo 2025-02-17T21:12:59

AppleもPPC/x86時代にスリープの問題で苦労してたよ。いい感じにはなってるけど、Appleのノートを使ってたときも、スリープからの復帰で奇妙な問題が1/50回くらいの頻度で起きてた。LenovoはLinuxでもApple並みにスリープ管理ができてる気がする。

nyarlathotep_ 2025-02-18T03:42:25

ARMでも完全ではない。M1 Miniはスリープから復帰するとグリーンスクリーンになってクラッシュすることが数ヶ月に一回あるし、M1 Proもたまにスリープから復帰するとフリーズするんだ。これはOS問わず難しい問題みたいだね。

adolph 2025-02-18T00:08:31

>LenovoはLinuxでもApple並みにスリープ管理ができてる気がする。俺のOpenBSD X1もそれほど悪くはないよ。MacBookほどスムーズではないけど、まあまあ使える。

winrid 2025-02-18T12:20:17

CarbonとExtremeどっち?俺の1世代目のX1 ExtremeではWindowsで復帰すらまともにできないんだけど。

sroussey 2025-02-17T21:51:57

ARMではかなり改善されたよね。外部モニターのサポートも速くて信頼性が上がったし。ハードウェア全体をコントロールしてるのが大きいんじゃないかな。

tiagod 2025-02-17T22:49:08

俺のM1 Pro MacBookはHDMIの音声で変な問題がある。テレビに接続すると再起動しないと音が出ないことが多いよ。

bzzzt 2025-02-18T08:38:41

それはイライラするけど、モニターやテレビのHDMI実装が原因かもしれないね。

tiagod 2025-02-19T03:23:40

そうじゃないと思う。その状態だと、映像が飛んだり乱れたりして、音声もかなり壊れる。音だけの問題じゃないよ。

bzzzt 2025-02-20T15:58:50

全て HDMI 実装の不具合が原因かもしれないね(リフレッシュや音声が全てエンコード・同期されてるから)。でも、M1 Mac が HDMI TV との接続に重大な問題があるかもしれないし、間違ってるかもね。

sroussey 2025-02-20T20:40:09

ケーブルの可能性もあるよ。自分は M2 を使ってるけど問題ないし、v1 の問題が心配だったけど、VisionPro の v2 を待つことにする。

stephen_g 2025-02-17T23:11:27

11世代 Intel NUC を買った時、スリープ・ウェイクがうまくいかなかったのには驚いた。安いクローンでなく、プロセッサを設計したメーカーの完全統合コンピュータなのに!結局、新しいマシンを買ってしまったけど、Home Server として Proxmox を動かしてるからスリープしなくてもいいから問題ないや。

mindcrime 2025-02-17T22:14:26

> スリープ・サスペンドは Windows でもうまくいかないよ。
自分の $DAYJOB の Macbook も、スリープできるのは10回中2回だけ。大体失敗して翌朝にはバッテリーが切れてる。比較するなら、PopOS!を動かしている自分の System76 ラップトップは毎回完璧にスリープするよ。

vlovich123 2025-02-18T10:06:31

> 自分の $DAYJOB の Macbook のスリープは、10回中2回しか成功しない。
重要なのは、業務用ラップトップには様々なスパイウェアや管理ソフトがインストールされているから、それが原因でシステムが不具合を起こすこともある。これは Apple だけの問題ではないけど、こうしたソフトからブランドを守ってないのは問題だ。

stock_toaster 2025-02-17T22:45:02

> Macintosh ではどうなんだろう。自分の $DAYJOB の Powerbook が…
20年以上前の PowerPC ラップトップを日常業務に使ってるの?ハードウェアが長持ちしてるね!

bachmeier 2025-02-17T20:22:24

> スリープ・サスペンドは Windows でもうまくいかないよ。
昔は全く問題じゃなかったのに、今では5台ある Windows ノートはどれもスリープしない。なぜか Debian Stable を動かしている自分の私物ラップトップは、毎回スリープするけど、他のディストロは Windows と同じくらいの失敗率だ。

asmor 2025-02-17T20:42:49

モダンスタンバイ。Windows は Apple の ”power nap” 機能を真似したかったけど、ハードウェアを完全に管理してないと、数多くの異なるハードウェアの組み合わせによって問題が発生することに気付かなかったみたい。それに、機械はオーバーヒートしたり、Windows Update によるウェイクタイマーでオフになってたりすることもあって、これを無効にできるけど、普通の人は気づかない。S3 スリープが消えた理由が理解できない。

carlhjerpe 2025-02-17T21:05:06

Linux の S0 にとても満足してる。実装はできるだけ少ないことを行いながらも、効果的に ”オン” の状態を保つことに重点を置いてる。

vladvasiliu 2025-02-18T08:53:16

> でも意味あるの?実際に何もしてないなら、なんでオンのままにするの?

もっとコメントを表示(2)
OvbiousError 2025-02-17T20:46:25

同僚が最近Windowsのマシンを見せてくれたんだ。ファンの周りのゴムが溶けちゃってて、電源切り忘れてバッグにしまった時にスリープが作動しなかったみたい。

dhon_ 2025-02-17T21:30:21

Linus Tech TipsがYouTubeで、充電中にスリープすると更新チェックで自動的に起きるバグについての動画を上げてたけど、リュックの中で起きちゃう問題が多いみたい。

whizzter 2025-02-17T22:38:31

この機能って2020年の初め頃にリリースされたんじゃない?Windowsのスリープは昔はまあまあだったけど、ここ数年はひどいね。
(オフにする方法のリンクある?)

jml78 2025-02-17T22:50:27

Windowsに問題があるのは確かだけど、100台中80台は問題なく動くと思うよ。Linuxでちゃんと動作するのはその中の30%くらいかな。
俺は90年代からSlackwareを使ってるから、実際のところ、Linuxのデュアルブート環境でAMD CPUとNVIDIA GPUのデスクトップはスリープできない。今は手動で対処してる。

dharmab 2025-02-17T23:10:50

WindowsのModern Standbyは本当にひどいよ。問題について詳しく説明してるYouTubeの動画があるから、見てみて:
https://youtu.be/OHKKcd3sx2c

weberer 2025-02-18T11:30:45

新しいWindowsノートパソコンの0%が正しいS3スリープモードに対応してないんだ。Microsoftがそれを削除したから、”modern standby”の方がよくなった。

washadjeffmad 2025-02-17T19:43:29

2017年から2019年のIntel MacBookは、HID周辺機器の電源を切る前に蓋を閉じるとセグフォルトするほど問題があったよ。
WindowsでもカスタムPCビルドはこの問題に悩まされるし、全てのコンポーネントがスリープ状態もうまく動作するわけじゃないんだ。
そういう問題を解決する手段がBIOSやLinuxになくも、どうやって調べればいいかわからない人が多いかな。

janderson215 2025-02-17T19:47:15

あれはバグじゃなくて機能だと思ってた。大きなダウンロードを続けたい時やすぐに起動したい時は、電源をつないで蓋を閉めてたから。

burnte 2025-02-17T20:01:46

カスタムデスクトップで、前のAM4マザーボードを使ってた時に、Windowsでハイバーネートすると普通にシャットダウンした後に、自動的に起きちゃうことがあったんだ。それを防ぐために何回もPSUの電源を切ってた。新しいマザーボードに変えたらもうなくなった。BIOSのアップデートでは解決しなかったな。

iamtedd 2025-02-18T00:21:46

今すぐには役に立たないかもしれないけど、自動的に起きちゃうWindowsマシンがあったら、管理者としてコマンドウィンドウで実行して、何が起きたかチェックできるよ:
powercfg /lastwake

rikthevik 2025-02-17T22:16:58

今日、閉じたゲーミングノートパソコンが煩わしいWindowsの音を出すようになったので、Windowsでもちゃんと動いてない気がする。今はハードウェアの問題を解決する手段がいろいろあって、Appleがいいのはサポートするハードウェアが少なく、スタックも管理してるから。WindowsがLinuxよりマシなのは、目が多いからだと思う。

ch33zer 2025-02-18T06:52:14

MacとWindowsがちゃんと動く理由は、デスクトップ向けに設計されてるから。LinuxはクラウドサービスやAndroidに資金が流れて、デスクトップ機能が不足してる気がする。

bongodongobob 2025-02-17T19:12:25

実際、Windowsでも正しく動いてないよ。会社のノートパソコンの混合環境では、問題が多すぎてスリープ・ハイバーネートを全社的に無効にした。

Joker_vD 2025-02-18T01:28:52

なぜか人々は自分のマシンをスリープさせたがるね。長い起動時間とか?

bongodongobob 2025-02-18T02:12:47

その気持ちは分かるよ。結局、タブがいっぱい開いててNotepadが14個あるから。でも、スリープ失敗で痛い目にあったら習慣を変えざるを得ないね。

Joker_vD 2025-02-18T02:57:46

Firefoxは閉じるときに開いているタブを保存するし、Notepad++やSublimeもそうだよね。失うタブの大部分は重要じゃない。スリープはちゃんと動くべきなんだけど、実際は機能してないから、ドライブの電源を切るタイミングを考えた方がいいよ。

carlhjerpe 2025-02-17T20:52:13

もし、S0スリープをサポートしている現代のマシンを使ってるなら、かなり問題が解決されてるよ。全てのユーザープロセスを一時停止し、コアをすべて無効にして1つだけを低周波数で動かすから、システムは「オン」のままだし、デバイスは省電力状態になる。深いスリープが必要ない限り問題ない。

Gormo 2025-02-17T17:36:48

心から感謝します。私のメインノートパソコンはRyzenのThinkPadでLinuxを使っていて、スリープとハイバーネートをよく使うけど、時々この問題に遭遇します。6.14が待ち遠しい!

imp0cat 2025-02-17T19:58:34

これだ!ほんとありがとう!

mkesper 2025-02-18T09:39:52

なんでdm->cached_stateがポインタじゃなくて-12を保存してたの?おそらく、suspend中にdm_suspend()がdm.cached_stateにdrm_atomic_helper_suspend(adev_to_drm(adev))を代入したからだと思う。drm_atomic_helper_suspend()はポインタかエラーを示す負のポインタを返す可能性があるのに、戻り値をそのままポインタに代入してて、resume時にデリファレンスするからエラーをテストせずに使ってたんだ。RustならResult型を扱うからこういうことは起こらないよ。

もっとコメントを表示(3)
vlovich123 2025-02-18T10:20:43

Cのプリプロセッサを使えば代数的合成型が作れるみたいだよ。詳細はリンク見てね。だけど、カーネルの古いコーディング習慣が改善の妨げになってるのが皮肉だね。Rustの開発者たちは、自分のサブシステムをきれいにしようとしないその抵抗にフラストレーションを感じてると思う。たぶん、これがカーネルに取り込まれれば役立つかもね。

jph 2025-02-17T18:57:41

あなたの仕事が、GPU拡張付きのFramework AMDラップトップでのLinux/Windowsのデュアルブートに役立つよ。寄付したいんだけど、私のプロフィールに連絡先があるから教えて。

lelandfe 2025-02-17T19:59:39

大好き!

dekhn 2025-02-17T20:51:54

昔は、名前付けとキャッシュの無効化、オフバイワンエラーがコンピュータサイエンスの二大問題だと思ってたけど、”スリープ/ウェイク”問題について知ってNP完全だと気づいたんだ。

verall 2025-02-18T16:40:00

スリープ/ウェイクはキャッシュの無効化の一種だと思う。全ての周辺機器がステートレスなら問題にならないはず。

nikanj 2025-02-17T20:54:11

でも、Linuxだけの話だよ。WindowsではO(n2)、MacosではO(log n)になる。

ncann 2025-02-17T21:34:55

新しいDellラップトップをスリープさせるのにかなり苦労したし、デスクトップもウェイク後にGPUハードウェアアクセラレーションが壊れたから、今はO(n4)くらいだと思うよ。もしかしたらO(n!)かも。

itsn0tm3 2025-02-17T21:10:45

でも、Hackintoshしない限りは大丈夫だね。あれは時々恐ろしいことがあったから!

0x38B 2025-02-17T22:54:14

Hackintoshの設定でKEXTやブートローダーの設定に数時間費やしたことを思い出すと、今でもゾッとするわ。特にACPIテーブル、SSDとかな。対照的に、VMでMacOSを動かすのは天国だよ。XcodeにiPhoneを通すのに最初の設定と同じくらい時間がかかったし。

jchw 2025-02-17T20:38:05

Linuxのメモリ管理、特にOOMの問題は本当に厄介で困ってる。不運にもOOMになると、RAMを追加せざるを得ないが、これは無駄で高価。Linuxが将来的にOOMをうまく処理するのは難しいと思う。この作業は素晴らしいし、今後のデバッグの参考になりそう。systemdのdebug-shell機能も便利そう。

nyanpasu64 2025-02-17T20:58:22

Windowsによると、マザーボードのシリアルポートはPciバスに接続されてるらしい。DOS万歳!TTMのビデオ、時間があれば見てみるよ。

Skunkleton 2025-02-17T20:44:56

cgroupsを使ってOOMを抑えるのはうまくいったことがあるんだ。LinuxでのOOMの扱いに最新の方法があるかはわからないけど、何かおすすめの本があれば教えてほしい。

jchw 2025-02-17T21:12:04

理解している限り、二つの問題があるね。・過剰割り当て。Linuxはメモリを過剰に割り当てることがあり、メモリがない時も割り当てが成功して、実際に物理ページがないときにハングする。Windows NTはこれをしないし、macOS/XNUの処理も分からない。・OOMキラー。割り当てが失敗しないので、OOM時の回復にはプロセスをスコアで評価し、メモリを使っているものを殺す。単一のプロセスがメモリを使ってない場合、これがうまく機能しない。たとえば、make -j32のような並列タスクだと、C++コンパイラはそれほどメモリを使わないから、栄光の瞬間にElectronアプリが真っ先に殺される。

fc417fc802 2025-02-18T05:43:54

過剰割り当てに対する他の賢い方法があるの?小さめのメモリを追加で常にmmapするのは非効率でしょ?過剰割り当ては実際にはページを書き込むまで本当に割り当ててないんだよね。forkを効率よく実装する方法は、少なくとも「これには書き込まない」とマークする必要があるだろうけど、実際には使うのが難しいAPIになるのかな。

nolist_policy 2025-02-18T18:37:18

Chromiumはタブごとに1つのPID名前空間を持つかもしれない。今のマシンでは、タブごとに1.1TiBの仮想メモリが報告されてる。実際にはChromeやFirefoxはそんなにメモリを使わないんだろうね。

jchw 2025-02-18T15:52:54

大きなmmapを許可しつつ、ページが尽きた時にプログラムをハングさせずに信号を送るのもひとつの解決策かも。ただ、ChromeやFirefoxが実際にそれだけのメモリを使ってるわけじゃないし。

fc417fc802 2025-02-19T02:31:23

むしろ対処法として、実際に割り当てが起きた時にアクション可能なエラーを受け取る方が良いと思う。でもそれがうまく機能するためには、スレッドごとの信号ハンドラが必要だ。これにはカーネルが対応してるけど、POSIXやglibcの更新が必要になるだろうね。あとは、書き込みなしでページを割り当てる方法もあったらな。

Avamander 2025-02-18T12:29:43

Linuxのメモリ管理とOOMの条件は本当に酷い。OOM条件の処理が適切に行われていない。cgroupsを使ったりearlyoomをインストールしたり、スワップを増やしたりしても結局はハックに過ぎない。これらは本質的に問題を解決してくれない。システムがメモリを割り当てられないためにLUKSボリュームが読み取り専用になったこともあるし、本当にユーザースペースで何かを殺してくれ。

jorvi 2025-02-18T11:35:59

zswapやzram使ってる? zstdで8GBのRAMを20GBに増やせるし、16GBなら40GBにもできるよ。冒険心があれば(Androidもやってるし安定してる)メモリを100%超過してもいいし。

dralley 2025-02-17T17:27:50

すごいニュースだね。AMDのLinuxグラフィックスドライバーはほとんどは快適に動いてるけど、これだけは何度も問題にぶつかった。

記事一覧へ

海外テックの反応まとめ
著者
海外テックの反応まとめ
暇つぶしがてらに読むだけで海外のテックニュースに詳しくなれるまとめサイトです。