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

提供: ArchWiki
ナビゲーションに移動 検索に移動
(同期)
(同期)
2行目: 2行目:
 
[[en:Hybrid graphics]]
 
[[en:Hybrid graphics]]
 
[[tr:Hibrit_Grafik_Teknolojileri]]
 
[[tr:Hibrit_Grafik_Teknolojileri]]
  +
[[zh-cn:Hybrid graphics]]
ハイブリッドグラフィックは同一のコンピュータで2つのグラフィックカードを動作させるというコンセプトで、始めはノートパソコンの電力消費量を抑える目的で構想され、今ではデスクトップのコンピュータにも拡張されています。
 
  +
ハイブリッドグラフィックは同一のコンピュータで2つのグラフィックカードを動作させるというコンセプトです。一つのコンピュータで二つのグラフィックカードを使用して、高いパフォーマンスと省電力の両方を達成する新しいテクノロジーとして、ノートパソコンのメーカーによって開発されました。
   
  +
様々なテクノロジーが存在し、問題を解決するために個々のメーカーによって独自の方法が開発されています。このテクノロジーは Windows ではしっかりとサポートされていますが、Linux ディストリビューションでは未だ実験的な段階です。このページでは、それぞれのアプローチとモデルについて軽く説明し、そして GNU/Linux システムのサポートがないことに対するコミュニティによるソリューションを紹介します。
== ハイブリッドグラフィックのテクノロジーについて ==
 
   
  +
== 第一世代のハイブリッドモデル (ベーシックな切り替え) ==
一つのコンピュータで二つのグラフィックカードを使用して、高いパフォーマンスと省電力の両方を達成する、新しいテクノロジーがノートパソコンのメーカーによって開発されました。このテクノロジーは Windows ではしっかりとサポートされていますが、Linux ディストリビューションでは未だ実験的な段階です。
 
   
  +
{{Note|1=10年以上前のノートパソコンでない限り、大抵の場合は[[#動的な切り替えモデル|動的切り替え]]が使われます。}}
性能と電力消費量が異なる二組のグラフィックカードをハイブリッドグラフィックと呼称します。様々なテクノロジーが存在し、問題を解決するために個々のメーカーによって独自の方法が開発されています。このページでは、それぞれのアプローチとモデルについて軽く説明し、そして GNU/Linux システムのサポートがないことに対するコミュニティによるソリューションを紹介します。
 
   
  +
ハイブリッドグラフィックの第一世代のノートパソコンではハードウェアマルチプレクサ ([[Wikipedia:Multiplexer|MUX]]) を使用していました。内蔵グラフィックプロセッサ (IGP) による省電力ながらローレベルな 3D レンダリングを使用するか、あるいは専用グラフィックプロセッサ (DGP) を使って電力消費量の多い高性能な 3D レンダリングを使うか選ぶことができます。ユーザーがグラフィックプロファイルを選べるのは起動あるいはログイン時だけで、ユーザーセッションの実行中はどちらかに固定されます。GPU の切り替えは以下のような手順で行われます:
== "旧式"のハイブリッドモデル (ベーシックな切り替え) ==
 
   
  +
* ディスプレイをオフ
This approach involves a two graphic card setup with a hardware multiplexer ([[Wikipedia:Multiplexer|MUX]]). It allows power save and low-end 3D rendering by using an Integrated Graphics Processor (IGP); or a major power consumption with 3D rendering performance using a Dedicated/Discrete Graphics Processor (DGP). This model makes the user choose (at boot time or at login time) within the two power/graphics profiles and is almost fixed through all the user session. The switch is done by a similar workflow:
 
  +
* DGP をオン
  +
* マルチプレクサを切り替え
  +
* IGP をオフ
  +
* ディスプレイをオン
   
  +
一時的に画面が非表示になるためスムーズな切り替えではありません。下のモデルのほうがユーザーフレンドリです。
* Turn off the display
 
* Turn on the DGP
 
* Switch the multiplexer
 
* Turn off the IGP
 
* Turn on again the display
 
   
  +
== 動的な切り替えモデル ==
This switch is somewhat rough and adds some blinks and black screens in laptops that could do it "on the fly". Later approaches made the transition a little more user-friendly.
 
   
  +
{{Note|2016年現在、ほとんどのメーカーはこちらのモデルを使っています。}}
== 新しい動的な切り替えモデル ==
 
   
  +
新しいハイブリッドグラフィック技術では DGP と IGP はフレームバッファに接続されハードウェアマルチプレクサは使われます。IGP は常にオンとなっており省電力と高性能レンダリングどちらが必要なのかにあわせて DGP のオンオフが切り替わります。大抵の場合は DGP だけを使用するということはできず、ソフトウェアによって切り替えやレンダリングが制御されます。ブート時に、Linux カーネルはビデオモードを使用して起動され低水準なグラフィックドライバーが設定されます。ほとんどの Linux ディストリビューションは X.org を使用してグラフィック環境を表示します。最後に、他のソフトウェアが起動します。ログインマネージャやウィンドウマネージャなどです。このような階層的なシステムは単一のグラフィックカードを使用する場合を想定して設計されています。
Most of the new Hybrid-graphics technologies involves two graphic cards as the basic switching but now the DGP and IGP are plugged to a framebuffer and there is no hardware multiplexer. The IGP is always on and the DGP is switched on/off when there is a need in power-save or performance-rendering. In most cases there is no way to use ''only'' the DGP and all the switching and rendering is controlled by software.
 
At startup, the Linux kernel starts using a video mode and setting up low-level graphic drivers which will be used by the applications. Most of the Linux distributions then use X.org to create a graphical environment. Finally, a few other softwares are launched, first a login manager and then a window manager, and so on. This hierarchical system has been designed to be used in most of cases on a single graphic card.
 
   
  +
{{Note|1=NVIDIA のプロプライエタリドライバーを使用するハイブリッドグラフィックについては [[NVIDIA Optimus]] や [[Bumblebee]] を読んでください。他のハイブリッドグラフィック (AMD Radeon を使用する場合や Nouveau ドライバーで NVIDIA のカードを使う場合) については [[PRIME]] を読んでください。}}
=== Nvidia Optimus ===
 
   
  +
=== ディスクリート GPU の完全な電源オフ ===
[http://www.nvidia.com/object/LO_optimus_whitepapers.html Nvidia Optimus Whitepaper]
 
   
  +
高性能なグラフィックプロセッサの電源を切って電力を抑えたい場合、{{pkg|acpi_call}} パッケージをインストールすることで電源オフにできます。
==== 現状の問題 ====
 
   
  +
{{Tip|[[公式リポジトリ]]に含まれていないカーネルを使っている場合、代わりに {{AUR|acpi_call-git-dkms}} を使ってください。[[DKMS]] も見てください。}}
* Switching between cards when possible.
 
* Switching on/off the discrete card.
 
* Be able to use the discrete card for 3D render.
 
* Be able to use both cards for 3D render (problem arised in [https://bbs.archlinux.org/viewtopic.php?id=120994 this post]).
 
   
  +
パッケージをインストールしたらカーネルモジュールをロードしてください:
==== ソフトウェアによるソリューション ====
 
   
  +
# modprobe acpi_call
* asus_switcheroo -- ASUS などハードウェアマルチプレクサが搭載されたノートパソコンで Intel/Nvidia を切り替えるためのソリューション。開発者: Alex Williamson。
 
* byo_switcheroo -- vga_switcheroo を使ってカードを切り替える (acpi_call のような) ハンドラを作成するためのソリューション。開発者: Alex Williamson。
 
* [https://wiki.gentoo.org/wiki/Hprofile#VGA vga_switcheroo] -- Intel/ATI ノートパソコンが対象のオリジナルの GPU 切り替えソリューション。開発者: David Airlie。
 
* acpi_call -- ディスクリートのグラフィックカードの電源を切ってバッテリーを伸ばすことができます。開発者: Michal Kottman。
 
* [[PRIME]] -- 長い間開発中の Optimus ソリューション。開発者: David Airlie。
 
* [[Bumblebee]] -- ディスクリートのグラフィックカードで指定したプログラムを実行することができ、内蔵のグラフィックカードで X セッションを動かすことができます。Nvidia の Optimus カードで動作。開発者: Martin Juhl。
 
* hybrid-windump -- Nvidia を使って Intel のディスプレイにウィンドウを投げます。開発者: Florian Berger と Joakim Gebart。
 
* {{AUR|gpu-switch}} -- gpu-switch はデュアル GPU の MacBook Pro で、内蔵・外部 GPU を次の起動時に切り替えるアプリケーションです。
 
* {{AUR|systemd-vgaswitcheroo-units}} -- AMD/NVIDIA & Intel のデュアル GPU 構成で起動時にディスクリート GPU を無効化します。
 
   
  +
カーネルモジュールをロードしたら以下のコマンドを実行します:
=== ATI Dynamic Switchable Graphics ===
 
   
  +
# /usr/share/acpi_call/examples/turn_off_gpu.sh
Nvidia のテクノロジーに似ている新しいテクノロジーで、ハードウェアマルチプレクサを使用しません。
 
   
  +
スクリプトは全てのデータバスを検査してグラフィックカードをオフにします。以下のような出力が表示されます:
==== 現状の問題 ====
 
   
The Dynamic Switch needs Xorg support for the discrete videocard assigned for rendering to work [http://www.x.org/wiki/RadeonFeature#fnref-e188f8b793017f6c1c15025dc3d042a1e560915e].
 
So, rendering on the discrete gpu will not work until the Xorg team adds support for it.
 
 
This means that with a muxless intel+ati design, you cannot use your discrete card by simply modprobing the radeon module.
 
 
As of now, there are 2 choices:
 
 
- Test and improve some virtualGL based program to make the switch, like the common-amd branch of bumblebee project. Check the [https://github.com/Bumblebee-Project/Bumblebee/issues/52 project repository] and [http://forums.gentoo.org/viewtopic-t-909802.html this] useful post.
 
 
- Use the proprietary driver with powerxpress (a.k.a. pxp) support maintained by [[AMD_Catalyst#Installing_from_the_AUR|Vi0l0]] (remember to check for xorg compatibility).
 
 
=== ディスクリート GPU の完全な電源オフ ===
 
 
高性能なグラフィックプロセッサの電源を切って電力を抑えたい場合、[[AUR]] から {{AUR|acpi_call-git}} パッケージをインストールすることで行うことが可能です。
 
 
インストールしたらカーネルモジュールをロードしてください:
 
modprobe acpi_call
 
 
カーネルモジュールをロードしたら以下を実行します (root 権限が必要です):
 
turn_off_gpu.sh
 
 
This script will go through all the known data buses and attempt to turn them off. You will get an output similar to the following:
 
 
Trying \_SB.PCI0.P0P1.VGA._OFF: failed
 
Trying \_SB.PCI0.P0P1.VGA._OFF: failed
 
Trying \_SB.PCI0.P0P2.VGA._OFF: failed
 
Trying \_SB.PCI0.P0P2.VGA._OFF: failed
106行目: 73行目:
 
Trying \_SB_.PCI0.VGA.PX02: failed
 
Trying \_SB_.PCI0.VGA.PX02: failed
   
  +
"works" という文字はスクリプトが GPU が接続されているバスを発見して電源をオフにしたことを意味しています。バッテリーの持ちが良くなっているはずです。再起動するとチップはまた通電されます。オフのままにしておきたい場合:
See the "works"? This means the script found a bus which your GPU sits on and it has now turned off the chip. To confirm this, your battery time remaining should have increased. Currently, the chip will turn back on with the next reboot to get around this we do the following:
 
   
  +
{{Note|GPU をオンに戻したいときは再起動してください。}}
{{Note| To turn the GPU back on just reboot.}}
 
   
  +
起動時にロードされるようにカーネルモジュールを追加:
Add the kernel module to the array of modules to load at boot:
 
   
 
{{hc|/etc/modules-load.d/acpi_call.conf|
 
{{hc|/etc/modules-load.d/acpi_call.conf|
 
#Load 'acpi_call.ko' at boot.
 
#Load 'acpi_call.ko' at boot.
 
 
acpi_call}}
 
acpi_call}}
   
  +
起動時に GPU をオフにしたい場合、上記のスクリプトを実行するよりも以下の systemd の tmpfile を使用するほうが簡単です:
To turn off the GPU at boot we could just run the above script but honestly that is not very elegant so instead lets make use of systemd's 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}}
The above config will be loaded at boot by systemd. What it does is write the specific OFF signal to the {{ic|/proc/acpi/call}} file. Obviously, replace the {{ic|\_SB.PCI0.PEG0.PEGP._OFF}} with the one which works on your system (please note that you need to escape the backslash).
 
   
  +
上記の設定は起動時に systemd によってロードされます。特定の OFF シグナルを {{ic|/proc/acpi/call}} ファイルに書き込んで電源を切っています。{{ic|\_SB.PCI0.PEG0.PEGP._OFF}} は適当な値に置き換えてください (バックスラッシュでエスケープする必要があります)。
{{Tip| To prevent manual reinstalling the {{AUR|acpi_call-git}}{{Broken package link|{{aur-mirror|acpi_call-git}}}} package after each kernel upgrade, you can use the {{AUR|acpi_call-git-dkms}} package.}}
 
   
  +
{{Tip|GPU を無効化した後でハイバネートやサスペンドに問題が発生する場合、acpi_call を送信して再度有効にしてください。[[電源管理#サスペンド/リジューム サービスファイル|サスペンド/リジューム サービスファイル]]を参照。}}
== 参照 ==
 
* [http://linux-hybrid-graphics.blogspot.com Linux Hybrid-Graphics Blog]
 
* [http://hybrid-graphics-linux.tuxfamily.org/index.php Hybrid graphics on Linux Wiki]
 
* [http://www.nvidia.com/object/optimus_technology.html Nvidia Optimus commercial presentation]
 
* [http://www.amd.com/us/products/technologies/switchable-graphics/Pages/dynamic-switchable-graphics.aspx ATI commercial presentation]
 
* [[Bumblebee]]
 

2016年12月28日 (水) 23:18時点における版

ハイブリッドグラフィックは同一のコンピュータで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 を送信して再度有効にしてください。サスペンド/リジューム サービスファイルを参照。