Ubuntu* 上の GPU 解析向けに i915 モジュールをリビルドしてインストール

GPU 利用率の解析に必要な i915 Ftrace* イベントを収集するには、Linux* カーネルが適切に設定されている必要があります。インテル® VTune™ プロファイラーが解析を開始できない場合、「i915 ftrace イベントが利用できないため、GPU 利用率イベントの収集は有効にできません。」エラーメッセージが表示されます。再設定された i915 モジュールをリビルドしてインストールします。例えば、カーネル 4.14 以降の場合、CONFIG_EXPERT=y および CONFIG_DRM_I915_LOW_LEVEL_TRACEPOINTS=y に設定します。

カーネルを頻繁に更新する場合、GPU 解析用の特殊カーネルをビルドします。

Ubuntu* では、カーネルをほとんど更新することがない場合、次のように i915 モジュールのみを設定してリビルドしてください。

カーネルのインストールには root 権限が必要です。

  1. Ubuntu* バージョンのソースパッケージのリポジトリーを追加します。

    例えば、Ubuntu Bionic Beaver* では次の操作を行います。

    sudo add-apt-repository -s "deb http://ru.archive.ubuntu.com/ubuntu/ bionic main restricted"

  2. ビルドの依存関係を解決します。

    sudo apt -y build-dep linux linux-image-$(uname -r) sudo apt -y install libncurses-dev flex bison openssl libssl-dev dkms libelf-dev libudev-dev libpci-dev libiberty-dev autoconf

  3. カーネルヘッダーをインストールします。
    sudo apt -y install linux-headers-$(uname -r)
  4. カーネルソースのフォルダーを作成します。
    mkdir -p /tmp/kernel
    cd !$
  5. カーネルのソースをダウンロードします。
    apt -y source linux
    cd linux-*
  6. カーネルモジュールを設定します。
    cp /usr/src/linux-headers-$(uname -r)/.config ./ cp /usr/src/linux-headers-$(uname -r)/Module.symvers ./
  7. カレント・ディレクトリーの Makefile のバージョンを変更します。

    設定するバーションの値は、uname -r コマンドで表示される値と同一でなければなりません。例えば、uname -r が 4.15.0-80.11.20.el8_0.x86_64 を出力する場合、Makefile の値は以下のようにします。

    VERSION = 4
    PATCHLEVEL = 15
    SUBLEVEL = 0
    EXTRAVERSION = -20-generic

    必要に応じて、ファイルを更新して保存します。

  8. カーネルのバージョンが Makefile に設定されていることを再確認してください。

    make kernelversion

    上記のコマンドは以下を出力します。

    4.15.0-20-generic

  9. 必要に応じて、.config ファイルを更新して保存します。

    次の設定が有効であることを確認してください。

    CONFIG_EXPERT=y
    CONFIG_FTRACE=y
    CONFIG_DEBUG_FS=y
    CONFIG_DRM_I915_LOW_LEVEL_TRACEPOINTS=y

  10. カーソルの完全な config ファイルを作成します。

    make olddefconfig

  11. i915 モジュールをビルドします。

    make -j$(getconf _NPROCESSORS_ONLN) modules_prepare make -j$(getconf _NPROCESSORS_ONLN) M=./drivers/gpu/drm/i915 modules

    次のようなエラーが発生することがあります。

    LD [M] drivers/gpu/drm/i915/i915.o
    ld: no input files

    その場合、scripts/Makefile.build の次の行を変更する必要があります。

    link_multi_deps = \
    $(filter $(addprefix $(obj)/, \
    $($(subst $(obj)/,,$(@:.o=-objs)) \
    $($(subst $(obj)/,,$(@:.o=-y))) \
    $($(subst $(obj)/,,$(@:.o=-m)))),$^)

    上記の以下の行を変更します。

    link_multi_deps = $(filter %.o,$^)

    詳細については、https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git/commit/?id=69ea912fda74a673d330d23595385e5b73e3a2b9 (英語) のパッチ情報を参照してください。

  12. 新しいモジュールをインストールします。

    sudo make M=./drivers/gpu/drm/i915 modules_install

  13. 新しいドライバーが格納されるフォルダーが /etc/depmod.d/* ファイルにあることを確認するか、追加してください。

    echo "search extradrivers" | sudo tee /etc/depmod.d/00-extra.conf

  14. initramfs を更新します。

    sudo depmod
    sudo update-initramfs -u

  15. マシンを再起動します。

    sudo reboot

  16. 新しいドライバーがロードされていることを確認します。

    modinfo i915 | grep filename

    コマンドの出力は以下のようになります。

    filename: /lib/modules/4.15.0-20-generic/extradrivers/gpu/drm/i915/i915.ko

変更をロールバックして元の i915 モジュールに戻すには:

  1. /etc/depmod.d/* ファイルから新しいドライバーがあるフォルダー名を削除します。

    sudo rm /etc/depmod.d/00-extra.conf

  2. initramfs を更新します。

    sudo depmod
    sudo update-initramfs -u

  3. マシンを再起動します。

    sudo reboot

関連情報