「ハイブリッドグラフィックス」の版間の差分
(同期) |
Kusanaginoturugi (トーク | 投稿記録) 細 (Kusanaginoturugi がページ「ハイブリッドグラフィック」を「ハイブリッドグラフィックス」に移動しました: 標準的な名称に変更) |
(相違点なし)
|
2024年9月3日 (火) 22:33時点における版
関連記事
ハイブリッドグラフィックスは同一のコンピュータで2つのグラフィックカードを動作させるというコンセプトです。ノート PC の製造業者たちは、性能と電力消費量の異なる2つのグラフィックカードを単一のコンピュータ上で使用する技術を開発しました。ハイブリッドグラフィックスでは、専用 GPU (ディスクリート GPU) を非アクティブにしておいて、統合 GPU よりも 3D 描画パフォーマンスが要求される場合にアクティブ化させることで、高パフォーマンスなユースケースと省電力なユースケースの両方をサポートするように開発されています。
様々なテクノロジーが存在しており、この問題を解決するために個々のメーカーによって独自の方法が開発されています。このテクノロジーは Windows ではしっかりとサポートされていますが、Linux ディストリビューションでは未だ実験的な段階です。このページでは、それぞれのアプローチとモデルについて軽く説明し、そしてベンダーによる GNU/Linux システムのサポートが無いことに対するコミュニティによるソリューションを紹介します。
目次
動的切り替え
新しいハイブリッドグラフィック技術のほとんどは2つのグラフィクカードを使用します: 専用 GPU と統合 GPU はフレームバッファに接続されていて、ハードウェアのマルチプレクサは存在しません。統合 GPU は常にオンになっており、省電力と構成のレンダリングのどちらが必要とされているのかに合わせて 専用 GPU はオン/オフが切り替えられます。ほとんどの場合、専用 GPU のみを使用するための方法は存在せず、GPU のオン/オフとレンダリングは全てソフトウェアによって制御されます。
起動時に Linux カーネルは、あるビデオモードを使って起動し、アプリケーションによって使用される低レベルなグラフィックドライバをセットアップします。そして、ほとんどの Linux ディストリビューションは X.org を使用してグラフィク環境を整えます。最後に、いくつかの他のソフトウェアが起動されます: 最初にログインマネージャで、その次にウィンドウマネージャと言った具合です。このような階層的なシステムは、単一のグラフィックカードを使用する場合を想定して設計されています。
ディスクリート GPU の完全な電源オフ
バッテリー節約のために高性能なグラフィックプロセッサをオフにしたい場合があるでしょう。
BIOS/UEFI を使う
一部のノート PC のメーカーは、BIOS または UEFI に専用カードのオン/オフのためのオプションを提供しています。
udev ルールを使う
まず、ディスプレイマネージャ設定から NVIDIA に関する設定を全て取り除いてください。
以下のファイルを作成して nouveau ドライバをブラックリストに追加してください:
/etc/modprobe.d/blacklist-nouveau.conf
blacklist nouveau options nouveau modeset=0
そして、以下のルールを追加してください:
/etc/udev/rules.d/00-remove-nvidia.rules
# Remove NVIDIA USB xHCI Host Controller devices, if present ACTION=="add", SUBSYSTEM=="pci", ATTR{vendor}=="0x10de", ATTR{class}=="0x0c0330", ATTR{power/control}="auto", ATTR{remove}="1" # Remove NVIDIA USB Type-C UCSI devices, if present ACTION=="add", SUBSYSTEM=="pci", ATTR{vendor}=="0x10de", ATTR{class}=="0x0c8000", ATTR{power/control}="auto", ATTR{remove}="1" # Remove NVIDIA Audio devices, if present ACTION=="add", SUBSYSTEM=="pci", ATTR{vendor}=="0x10de", ATTR{class}=="0x040300", ATTR{power/control}="auto", ATTR{remove}="1" # Remove NVIDIA VGA/3D controller devices ACTION=="add", SUBSYSTEM=="pci", ATTR{vendor}=="0x10de", ATTR{class}=="0x03[0-9]*", ATTR{power/control}="auto", ATTR{remove}="1"
再起動し、lspci
を実行して NVIDIA GPU が存在しているか確認してください。
bbswitch を使う
NVIDIA GPU を使っている場合、bbswitch を使うことでより安全に電源の制御が行なえます。bbswitch は、ディスクリート GPU が必要とされていない時やブート時にその GPU を無効化する適切な ACPI 呼び出しを自動的に発行するカーネルパッケージで構成されています。
acpi_call を使う
bbswitch によってサポートされていない GPU においては、acpi_call パッケージで同じことを手動で行うことができます。
パッケージをインストールしたら、acpi_call
カーネルモジュールをロードしてください:
# modprobe acpi_call
カーネルモジュールをロードしたら、/usr/share/acpi_call/examples/turn_off_gpu.sh
スクリプトを実行してください。
このスクリプトは、既知のデータバスを全て走査し、それらの電源を切ろうと試みます。この際、以下のように出力されます:
# /usr/share/acpi_call/examples/turn_off_gpu.sh
Trying \_SB.PCI0.P0P1.VGA._OFF: failed Trying \_SB.PCI0.P0P2.VGA._OFF: failed Trying \_SB_.PCI0.OVGA.ATPX: failed Trying \_SB_.PCI0.OVGA.XTPX: failed Trying \_SB.PCI0.P0P3.PEGP._OFF: failed Trying \_SB.PCI0.P0P2.PEGP._OFF: failed Trying \_SB.PCI0.P0P1.PEGP._OFF: failed Trying \_SB.PCI0.MXR0.MXM0._OFF: failed Trying \_SB.PCI0.PEG1.GFX0._OFF: failed Trying \_SB.PCI0.PEG0.GFX0.DOFF: failed Trying \_SB.PCI0.PEG1.GFX0.DOFF: failed Trying \_SB.PCI0.PEG0.PEGP._OFF: works! Trying \_SB.PCI0.XVR0.Z01I.DGOF: failed Trying \_SB.PCI0.PEGR.GFX0._OFF: failed Trying \_SB.PCI0.PEG.VID._OFF: failed Trying \_SB.PCI0.PEG0.VID._OFF: failed Trying \_SB.PCI0.P0P2.DGPU._OFF: failed Trying \_SB.PCI0.P0P4.DGPU.DOFF: failed Trying \_SB.PCI0.IXVE.IGPU.DGOF: failed Trying \_SB.PCI0.RP00.VGA._PS3: failed Trying \_SB.PCI0.RP00.VGA.P3MO: failed Trying \_SB.PCI0.GFX0.DSM._T_0: failed Trying \_SB.PCI0.LPC.EC.PUBS._OFF: failed Trying \_SB.PCI0.P0P2.NVID._OFF: failed Trying \_SB.PCI0.P0P2.VGA.PX02: failed Trying \_SB_.PCI0.PEGP.DGFX._OFF: failed Trying \_SB_.PCI0.VGA.PX02: failed
"works" は、スクリプトが GPU に接続されているバスを発見して、チップをオフにしたことを意味します。バッテリーの残り時間が伸びていることから、これを確認できるはずです。
GPU の電源を自動的にオフにする
上記のままでは GPU プロセッサは再起動によって元に戻ります。これに対応するために、ブート時にモジュールをロードしてください:
/etc/modules-load.d/acpi_call.conf
#Load 'acpi_call.ko' at boot. acpi_call
起動時
起動時に GPU をオフにしたい場合、systemd-tmpfiles を使うことが可能です。
/etc/tmpfiles.d/acpi_call.conf
w /proc/acpi/call - - - - \\_SB.PCI0.PEG0.PEGP._OFF
上記の設定は起動時に systemd によってロードされます。これは、特定の OFF シグナルを /proc/acpi/call
ファイルに書き込んで電源を切っています。もちろん、\_SB.PCI0.PEG0.PEGP._OFF
の部分は適当な値に置き換えてください (バックスラッシュでエスケープする必要があります)。
X サーバ初期化後
一部のシステムでは、ディスクリート GPU を X サーバの初期化の前に電源オフにすることで、システムがハングするかもしれません。このような場合、X サーバの初期化が終わった後に GPU の電源を落すのがよいでしょう。これはいくつかのディスプレイマネージャでは可能で、例えば LightDM では、display-setup-script seat configuration パラメータが root 権限で実行するスクリプトとして使えて、GPU を無効化することができます。
System76
一部の System76 ラップトップ(Oryx Pro など)には独自のハイブリッドグラフィックオプションがあります。これを使うには、system76-powerAUR をインストールし、system76-power.service
サービスを有効化して、system76-power graphics hybrid
を実行してください。
ディスクリート GPU の完全な電源オフ
まず、system76-power grahics integrated
を実行し再起動して、統合グラフィックスモードで動作させてください。統合モードになったら、system76-power graphics power off
を実行してディスクリートグラフィックスカードの電源を落としてください。このコマンドは永続的ではなく、起動する度に実行する必要があります。