ハイブリッドグラフィックス

提供: ArchWiki
2016年12月28日 (水) 23:18時点におけるKusakata (トーク | 投稿記録)による版 (同期)
ナビゲーションに移動 検索に移動

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

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

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

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

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

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

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

動的な切り替えモデル

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

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

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

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

高性能なグラフィックプロセッサの電源を切って電力を抑えたい場合、acpi_call パッケージをインストールすることで電源オフにできます。

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

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

# modprobe acpi_call

カーネルモジュールをロードしたら以下のコマンドを実行します:

# /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 をオンに戻したいときは再起動してください。

起動時にロードされるようにカーネルモジュールを追加:

/etc/modules-load.d/acpi_call.conf
#Load 'acpi_call.ko' at boot.
acpi_call

起動時に GPU をオフにしたい場合、上記のスクリプトを実行するよりも以下の systemd の tmpfile を使用するほうが簡単です:

/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 は適当な値に置き換えてください (バックスラッシュでエスケープする必要があります)。

ヒント: GPU を無効化した後でハイバネートやサスペンドに問題が発生する場合、acpi_call を送信して再度有効にしてください。サスペンド/リジューム サービスファイルを参照。