「ハイブリッドグラフィック」の版間の差分

提供: ArchWiki
ナビゲーションに移動 検索に移動
(Pkg/AUR テンプレートの更新)
25行目: 25行目:
 
{{Note|2016年現在、ほとんどのメーカーはこちらのモデルを使っています。}}
 
{{Note|2016年現在、ほとんどのメーカーはこちらのモデルを使っています。}}
   
  +
新しいハイブリッドグラフィック技術のほとんどは [[#第一世代のハイブリッドモデル (ベーシックな切り替え)|基本的なスイッチング]]として2つのグラフィックカードを使います。
新しいハイブリッドグラフィック技術では DGP と IGP はフレームバッファに接続されハードウェアマルチプレクサは使われます。IGP は常にオンとなっており省電力と高性能レンダリングどちらが必要なのかにあわせて DGP のオンオフが切り替わります。大抵の場合は DGP だけを使用するということはできず、ソフトウェアによって切り替えやレンダリングが制御されます。ブート時に、Linux カーネルはビデオモードを使用して起動され低水準なグラフィックドライバーが設定されます。ほとんどの Linux ディストリビューションは X.org を使用してグラフィック環境を表示します。最後に、他のソフトウェアが起動します。ログインマネージャやウィンドウマネージャなどです。このような階層的なシステムは単一のグラフィックカードを使用する場合を想定して設計されています。
 
  +
しかし、今では DGP と IGP はフレームバッファに接続されていてハードウェアマルチプレクサがありません。
  +
IGP は常にオンとなっており省電力と高性能レンダリングどちらが必要なのかにあわせて DGP のオンオフが切り替わります。
  +
ほとんどの場合は DGP だけを使用するということはできず、ソフトウェアによって切り替えやレンダリングが制御されます。
  +
ブート時に、Linux カーネルはビデオモードを使用して起動されて、低水準なグラフィックドライバーが設定されます。ほとんどの Linux ディストリビューションは X.org を使用してグラフィック環境を整えます。最後に、ログインマネージャやウィンドウマネージャなどの他のソフトウェアが起動します。このような階層的なシステムは単一のグラフィックカードを使用する場合を想定して設計されています。
   
 
{{Note|1=NVIDIA のプロプライエタリドライバーを使用するハイブリッドグラフィックについては [[NVIDIA Optimus]] や [[Bumblebee]] を読んでください。他のハイブリッドグラフィック (AMD Radeon を使用する場合や Nouveau ドライバーで NVIDIA のカードを使う場合) については [[PRIME]] を読んでください。}}
 
{{Note|1=NVIDIA のプロプライエタリドライバーを使用するハイブリッドグラフィックについては [[NVIDIA Optimus]] や [[Bumblebee]] を読んでください。他のハイブリッドグラフィック (AMD Radeon を使用する場合や Nouveau ドライバーで NVIDIA のカードを使う場合) については [[PRIME]] を読んでください。}}
31行目: 35行目:
 
=== ディスクリート GPU の完全な電源オフ ===
 
=== ディスクリート GPU の完全な電源オフ ===
   
高性能なグラフィックプロセッサの電源を切って電力を抑えたい場合、{{pkg|acpi_call}} パッケージをインストールすこと電源オフにできます。
+
バッテリーの節約のためにグラフィックプロセッサの電源をオフにしたい場合があるでしょう。この場合は以下の方法が可能です。
   
  +
==== bbswitch の使用 ====
{{Tip|[[公式リポジトリ]]に含まれていないカーネルを使っている場合、代わりに {{AUR|acpi_call-git-dkms}}{{Broken package link|パッケージが存在しません}} を使ってください。[[DKMS]] も見てください。}}
 
  +
  +
NVidia GPU を使っている場合、 [[bbswitch]] を利用するとより安全に電源の制御が行えます。[[bbswitch]] は ディスクリート GPU を必要ないとき、あるいはブート時に自動的に無効化するため、正しい ACPI の呼び出しを行うカーネルパッケージで構成されています。
  +
  +
==== acpi_call の使用 ====
  +
  +
[[bbswitch]] がサポートしない GPU を使っている場合、あるいは他の選択肢として、 {{pkg|acpi_call}} パッケージをインストールすることで手動で行うことができます。
  +
  +
{{Tip|[[公式リポジトリ]]に含まれていないカーネルを使っている場合、代わりに {{Pkg|acpi_call-dkms}} を使ってください。[[DKMS]] も見てください。}}
   
 
パッケージをインストールしたらカーネルモジュールをロードしてください:
 
パッケージをインストールしたらカーネルモジュールをロードしてください:
39行目: 51行目:
 
# modprobe acpi_call
 
# modprobe acpi_call
   
カーネルモジュールをロードしたら以下コマンド実行します:
+
カーネルモジュールをロードしたらスクリプトをダウローして、実行します:
   
# /usr/share/acpi_call/examples/turn_off_gpu.sh
+
https://raw.githubusercontent.com/mkottman/acpi_call/master/examples/turn_off_gpu.sh
   
スクリプトは全てのデータバスを検査してグラフィックカードオフにします。以下のよう出力が表示されます:
+
スクリプトは全てのデータバスを検査して、それらの電源切ろうと試みます。この際、以下のよう出力されます:
   
 
Trying \_SB.PCI0.P0P1.VGA._OFF: failed
 
Trying \_SB.PCI0.P0P1.VGA._OFF: failed
73行目: 85行目:
 
Trying \_SB_.PCI0.VGA.PX02: failed
 
Trying \_SB_.PCI0.VGA.PX02: failed
   
"works" という文字はスクリプトが GPU が接続されているバスを発見して電源をオフにしたことを意味しています。バッテリーの持ちが良くなっているはずです。再起動するとチップはまた通電されます。オフのままにしておきたい場合:
+
"works" という文字はスクリプトが GPU が接続されているバスを発見して電源をオフにしたことを意味しています。バッテリーの持ちが良くなっているはずです。
   
  +
{{Tip| GPU を無効化した後に、システムのハイバーネートやサスペンドで問題があった場合には、適切な acpi_call を送出して有効化させることを試して下さい。こちらも参照してください [[電源管理#サスペンド/リジューム サービスファイル|サスペンド/リジューム サービスファイル]] 。}}
{{Note|GPU をオンに戻したいときは再起動してください。}}
 
   
  +
===== GPU の電源を自動的にオフにする =====
起動時にロードされるようにカーネルモジュールを追加:
 
  +
  +
上記のままでは GPU プロセッサは再起動によって元に戻ります。これに対応するために、起動時にロードされるようにカーネルモジュールを追加してください:
   
 
{{hc|/etc/modules-load.d/acpi_call.conf|
 
{{hc|/etc/modules-load.d/acpi_call.conf|
83行目: 97行目:
 
acpi_call}}
 
acpi_call}}
   
  +
====== 起動時 ======
起動時に GPU をオフにしたい場合、上記のスクリプトを実行するよりも以下の systemd の tmpfile を使用するほうが簡単です:
 
  +
  +
起動時に GPU をオフにしたい場合、[[Systemd#一時ファイル|systemd-tmpfiles]]を使うことが可能です。
   
 
{{hc|/etc/tmpfiles.d/acpi_call.conf|w /proc/acpi/call - - - - \\_SB.PCI0.PEG0.PEGP._OFF}}
 
{{hc|/etc/tmpfiles.d/acpi_call.conf|w /proc/acpi/call - - - - \\_SB.PCI0.PEG0.PEGP._OFF}}
89行目: 105行目:
 
上記の設定は起動時に systemd によってロードされます。特定の OFF シグナルを {{ic|/proc/acpi/call}} ファイルに書き込んで電源を切っています。{{ic|\_SB.PCI0.PEG0.PEGP._OFF}} は適当な値に置き換えてください (バックスラッシュでエスケープする必要があります)。
 
上記の設定は起動時に systemd によってロードされます。特定の OFF シグナルを {{ic|/proc/acpi/call}} ファイルに書き込んで電源を切っています。{{ic|\_SB.PCI0.PEG0.PEGP._OFF}} は適当な値に置き換えてください (バックスラッシュでエスケープする必要があります)。
   
  +
====== X サーバ初期化後 ======
{{Tip|GPU を無効化した後でハイバネートやサスペンドに問題が発生する場合、acpi_call を送信して再度有効にしてください。[[電源管理#サスペンド/リジューム サービスファイル|サスペンド/リジューム サービスファイル]]を参照。}}
 
  +
  +
いくつかのシステムでは、ディスクリート GPU を X サーバの初期化の前に電源オフにすることで、システムが停止するかもしれません。
  +
このような場合、 X サーバの初期化が終わった後に GPU の電源を落すのがよいでしょう。これはいくつかのディスプレイマネージャでは可能で、例えば [[LightDM]] では、 ''display-setup-script'' seat configuration パラメータが root 権限で実行するスクリプトとして使えて、 GPU を無効化することができます。

2020年7月9日 (木) 22:06時点における版

ハイブリッドグラフィックは同一のコンピュータで2つのグラフィックカードを動作させるというコンセプトです。一つのコンピュータで二つのグラフィックカードを使用して、高いパフォーマンスと省電力の両方を達成する新しいテクノロジーとして、ノートパソコンのメーカーによって開発されました。

様々なテクノロジーが存在し、問題を解決するために個々のメーカーによって独自の方法が開発されています。このテクノロジーは Windows ではしっかりとサポートされていますが、Linux ディストリビューションでは未だ実験的な段階です。このページでは、それぞれのアプローチとモデルについて軽く説明し、そして GNU/Linux システムのサポートがないことに対するコミュニティによるソリューションを紹介します。

第一世代のハイブリッドモデル (ベーシックな切り替え)

ノート: 10年以上前のノートパソコンでない限り、大抵の場合は動的切り替えが使われます。

ハイブリッドグラフィックの第一世代のノートパソコンではハードウェアマルチプレクサ (MUX) を使用していました。内蔵グラフィックプロセッサ (IGP) による省電力ながらローレベルな 3D レンダリングを使用するか、あるいは専用グラフィックプロセッサ (DGP) を使って電力消費量の多い高性能な 3D レンダリングを使うか選ぶことができます。ユーザーがグラフィックプロファイルを選べるのは起動あるいはログイン時だけで、ユーザーセッションの実行中はどちらかに固定されます。GPU の切り替えは以下のような手順で行われます:

  • ディスプレイをオフ
  • DGP をオン
  • マルチプレクサを切り替え
  • IGP をオフ
  • ディスプレイをオン

一時的に画面が非表示になるためスムーズな切り替えではありません。下のモデルのほうがユーザーフレンドリです。

動的な切り替えモデル

ノート: 2016年現在、ほとんどのメーカーはこちらのモデルを使っています。

新しいハイブリッドグラフィック技術のほとんどは 基本的なスイッチングとして2つのグラフィックカードを使います。 しかし、今では DGP と IGP はフレームバッファに接続されていてハードウェアマルチプレクサがありません。 IGP は常にオンとなっており省電力と高性能レンダリングどちらが必要なのかにあわせて DGP のオンオフが切り替わります。 ほとんどの場合は DGP だけを使用するということはできず、ソフトウェアによって切り替えやレンダリングが制御されます。 ブート時に、Linux カーネルはビデオモードを使用して起動されて、低水準なグラフィックドライバーが設定されます。ほとんどの Linux ディストリビューションは X.org を使用してグラフィック環境を整えます。最後に、ログインマネージャやウィンドウマネージャなどの他のソフトウェアが起動します。このような階層的なシステムは単一のグラフィックカードを使用する場合を想定して設計されています。

ノート: NVIDIA のプロプライエタリドライバーを使用するハイブリッドグラフィックについては NVIDIA OptimusBumblebee を読んでください。他のハイブリッドグラフィック (AMD Radeon を使用する場合や Nouveau ドライバーで NVIDIA のカードを使う場合) については PRIME を読んでください。

ディスクリート GPU の完全な電源オフ

バッテリーの節約のためにグラフィックプロセッサーの電源をオフにしたい場合があるでしょう。この場合には以下の方法が可能です。

bbswitch の使用

NVidia GPU を使っている場合、 bbswitch を利用するとより安全に電源の制御が行えます。bbswitch は ディスクリート GPU を必要ないとき、あるいはブート時に自動的に無効化するため、正しい ACPI の呼び出しを行うカーネルパッケージで構成されています。

acpi_call の使用

bbswitch がサポートしない GPU を使っている場合、あるいは他の選択肢として、 acpi_call パッケージをインストールすることで手動で行うことができます。

ヒント: 公式リポジトリに含まれていないカーネルを使っている場合、代わりに acpi_call-dkms を使ってください。DKMS も見てください。

パッケージをインストールしたらカーネルモジュールをロードしてください:

# modprobe acpi_call

カーネルモジュールをロードしたら次のスクリプトをダウンロードして、実行します:

https://raw.githubusercontent.com/mkottman/acpi_call/master/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 を無効化した後に、システムのハイバーネートやサスペンドで問題があった場合には、適切な acpi_call を送出して有効化させることを試して下さい。こちらも参照してください サスペンド/リジューム サービスファイル
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 を無効化することができます。