玩式草子─ソフトウェアとたわむれる日々

第52回 X,MesaそしてLLVM[その3]

この記事を読むのに必要な時間:およそ 7 分

前回までに,LLVM,MesaLibとビルドを進め,ようやくXorgサーバを動かせるところまで辿りつきました。起動したサーバの情報をxdpyinfoで調べると,バージョン1.14.2であることは確認できたものの,果してこのサーバは本当にMesaLibが提供しているドライバやLLVMが提供しているライブラリを使っているのでしょうか?

Xorgサーバのように多くの部品から構成されている複雑なソフトウェアでは,一見正しく動作しているように見えても,実は想定した機能が利用できずにフォールバックモードで動いていた,ということもよくあります。そこでXorgサーバの動作を詳しく調べてみることにしました。

Xorgサーバのログファイル

Xorgサーバは/var/logディレクトリにXorg.0.logという名称のログファイルを作成し,起動時に認識したハードウェアやロードした各種モジュールについて記録しています。そこで,まずこのログファイルを眺めてみました。

$ cat -n /var/log/Xorg.0.log
    1   [415001.067] 
    2   X.Org X Server 1.14.2
    3   Release Date: 2013-06-25
    4   [415001.067] X Protocol Version 11, Revision 0
    5   [415001.067] Build Operating System: Linux 3.8.13-plamo64 x86_64 
    6   [415001.067] Current Operating System: Linux corei7 3.11.1-plamo64 #1 SMP PREEMPT Fri Sep 2014:48:13 JST 2013 x86_64
    7   [415001.067] Kernel command line: BOOT_IMAGE=/boot/vmlinuz-3.11.1-plamo64 root=/dev/sdc2 ro vga16 unicon=eucjp vt.default_utf8=0 panic_output=7
    8   [415001.067] Build Date: 29 August 2013  05:11:53PM
     ....

ログファイルの先頭部分では,起動しているXorgサーバのバージョン(1.14.2)やソースコードの公開日(2013-06-25)⁠ビルドされた環境(Linux 3.8.13-plamo64 x86_64)⁠現在動いている環境(Linux corei7 3.11.1-plamo64..)起動時のカーネルパラメータ,ビルドされた日時等の情報が記録されています。動作中の環境はXorgサーバをビルドした環境から更新されていることも正しく認識しています。

各行の先頭部分に表示されている[..]内の数字は,それぞれのイベントを区別するためのタイムスタンプで,数字自体に特に意味はありません。たぶん,カーネルが起動してからの経過秒数を利用しているのでしょう。

ログファイルを読み進めていくと,現在のABI(Application Binary Interface)設定についての記述がありました。前回にも触れましたが,Xorgサーバのように,必要なモジュールドライバを動的に組み込んで動作するソフトウェアでは,両者のABIのバージョンを合わせておく必要があります。

    39  [415001.148] (II) Module ABI versions:
    40  [415001.148]    X.Org ANSI C Emulation: 0.4
    41  [415001.148]    X.Org Video Driver: 14.1
    42  [415001.148]    X.Org XInput driver : 19.1
    43  [415001.148]    X.Org Server Extension : 7.0

実際のモジュール類のロードがこのあたりからです。76行目からはlibglamoregl.soというglamor_eglパッケージとしてビルドしたモジュールドライバをロードしていることが記録されています。このモジュールドライバのバージョンは0.5.0,Xorgサーバ1.14.2用にコンパイルされ,ANSI C Emulationのバージョン0.4というABIでサーバとやりとりするようです。

    72  [415001.151] Initializing built-in extension DRI2
    73  [415001.151] (II) "glx" will be loaded by default.
    74  [415001.151] (II) LoadModule: "dri2"
    75  [415001.151] (II) Module "dri2" already built-in
    76  [415001.151] (II) LoadModule: "glamoregl"
    77  [415001.151] (II) Loading /usr/lib64/xorg/modules/libglamoregl.so
    78  [415001.152] (II) Module glamoregl: vendor="X.Org Foundation"
    79  [415001.152]    compiled for 1.14.2, module version = 0.5.0
    80  [415001.152]    ABI class: X.Org ANSI C Emulation, version 0.4

もう少し先から,利用しているグラフィックカード用のドライバのロードが始まります。今使っているのは,AMD(ATI)⁠ RADEON HD5770を使ったグラフィックカードなので,それを利用するためにati_drv.soradeon_drv.soがロードされています。バージョン番号やABIの情報から,新しくビルドしたモジュールと確認できます。

    94  [415001.161] (II) LoadModule: "ati"
    95  [415001.161] (II) Loading /usr/lib64/xorg/modules/drivers/ati_drv.so
    96  [415001.170] (II) Module ati: vendor="X.Org Foundation"
    97  [415001.170]    compiled for 1.14.2, module version = 7.2.0
    98  [415001.170]    Module class: X.Org Video Driver
    99  [415001.170]    ABI class: X.Org Video Driver, version 14.1
   100  [415001.170] (II) LoadModule: "radeon"
   101  [415001.170] (II) Loading /usr/lib64/xorg/modules/drivers/radeon_drv.so
   102  [415001.177] (II) Module radeon: vendor="X.Org Foundation"
   103  [415001.177]    compiled for 1.14.2, module version = 7.2.0
   104  [415001.177]    Module class: X.Org Video Driver
   105  [415001.177]    ABI class: X.Org Video Driver, version 14.1

この後しばらくは,RADEONドライバが認識したハードウェア情報が続きますが,そのあたりは省略して先を見ていくと,MesaLibが提供しているドライバをロードしている部分がありました。

   486  [415001.344] (II) RADEON(0): [DRI2] Setup complete
   487  [415001.344] (II) RADEON(0): [DRI2]   DRI driver: r600
   488  [415001.344] (II) RADEON(0): [DRI2]   VDPAU driver: r600
   489  [415001.345] (II) RADEON(0): Front buffer size: 8000K
   490  [415001.345] (II) RADEON(0): VRAM usage limit set to 929451K
   491  [415001.345] (==) RADEON(0): Backing store disabled
   492  [415001.345] (II) RADEON(0): Direct rendering enabled

手元のRADEON HD5700は,AMD GPUの世代的に言うとR600よりも2世代くらい後のEvergreenと呼ばれる世代になります。しかしながら,AMD GPUの基本設計は次のNorthern Island世代までは共通しているようで,MesaLibではr600ドライバがr600,r700,Evergreen,Northern IslandまでのGPUに対応しています。

Northern Islandの次のSouthen Island世代ではGPUの基本設計が大きく変更されたようで,MesaLibでもradeonsiという新しいドライバで対応するようになっています。

488行目にあるVDPAUとは,Video Decode and Presentation API for Unixと呼ばれる最近のGPUが持っている動画再生機能を使うためのライブラリで,それも正しくR600用のドライバが利用されているようです。

著者プロフィール

こじまみつひろ

Plamo Linuxとりまとめ役。もともとは人類学的にハッカー文化を研究しようとしていたものの,いつの間にかミイラ取りがミイラになってOSSの世界にどっぷりと漬かってしまいました。最近は田舎に隠棲して半農半自営な生活をしながらソフトウェアと戯れています。

URLhttp://www.linet.gr.jp/~kojima/Plamo/index.html

コメント

コメントの記入