KVMでQSVするためIntel HD Graphicsパススルーするー

この記事はLinux Advent Calendar 2014 12日目の記事です。

12月も中頃となり寒い日が続きますね。みなさん体調はいかがでしょうか。

先日のこたつを温める実験で十分な熱を得られることを知ってしまい、つい調子に乗って動画のエンコードをこたつの中でやってしまって、40℃超の高温になるという経験を得るなど、新しい発見のある毎日です。

こたつ温め実験で使った録画サーバーはCPUがIntel Celeron 847はとても貧弱で、動画をH.264にエンコードしようものなら30分のアニメで8時間かかってしまうほどです。 なんとか短時間で動画エンコードできないかと悩んでいたところ、Intel QuickSync Video(以下QSV、詳細は後述)がLinuxもサポートされていることを思い出し、LinuxでQSVエンコードをしてみようと思い立ちました。

QSVを利用できるベアメタルマシンは我が家に2台あり、より新しいものはCPUにXeon E3v3を搭載しています。 このマシンではKVMで仮想マシンを複数立ち上げていて、カーネルコンパイルなどのCIを回したり、クロスコンパイル環境を構築しているものです。 今回はそのマシンに録画用仮想マシンを立て、録画に必要なUSBデバイスとPCI ExpressのレーンとQSVエンコードのためにIntel HD Graphicsのパススルーを試みる記録の第1章となります。

目次

Open 目次

  1. Intel QuickSync Video
  2. QSV on Linux
  3. Intel Media SDK
  4. Intel HD Graphics pass-through
  5. Intel Media SDK Install
  6. まとめ

Intel QuickSync Video

IntelのQSV公式サイトに情報が載っていますが簡単にまとめます。

Intel Quick Sync Videoとは、Sandy Bridge世代のCore iシリーズのIntel CPUに搭載されているIntel HD Graphicsによる、動画のハードウェアエンコード・デコード技術のことです。 対象となるコーデックはH.264とH.262のみですが、エンコードに関してはソフトウェアで行うものよりもQSVを利用したものの方が圧倒的に高速(ただし品質は低下する模様)です。

QSVをオープンソースな動画エンコードソフトウェアで利用する動きは近頃活発であり、有名どころとしてはHandbrakeが最新版であるバージョン0.10.0でQSVエンコードをサポートし始めました。 VLCバージョン2.10からQSVエンコードをサポートしています。

ただ、これらのオープンソースソフトウェア(OSS)によって、QSVによるH.264エンコード高速化の恩恵を受けられるのは、両者ともいまのところWindows版のみとなっています。

QSV on Linux

Windows向けにしかOSSのQSVエンコーダーがないからって、なにもLinuxでQSVでエンコードできないわけではないのです。 ffmpegのエンコードコーデックとして、LinuxでもQSVエンコードができるqsv-ffmpeg-codecなるものがあるのです。 これを利用するには、Intel Media SDKを導入する必要がありますが、これによってOSSでのQSVエンコードがLinuxでもできるのです。

Intel Media SDK

Intel HD GraphicsをLinuxで利用するためにはSDKが必要となります。そのSDKがこれ、Intel Media SDKです。これは現在、Intel(r) Medoa Server Studio 2015(以下IMSS)に含まれる形で提供されています。IMSS 2015 R2ではUbuntuとSUSE Linuxがサポートされています。

Intel HD Graphics pass-through

いろいろなシステムの説明を終えたのでここからが本題です。 KVMでIntel HD Graphicsをpass-throughする方法を手順を追って説明していきます。

仮想マシンでのPCIデバイスのパススルーはよく行われており、XenにおいてはGPUパススルーによって家庭内VDIサーバーを作るというような例があります。

XenによるPCIパススルーの記事はたくさん見つかるものの、KVMによるPCIパススルーに関するものは少なく、ましてやCPU内臓GPUのパススルーは皆無と言ってもいいほどです。 これは、KVMにおいてPCIパススルーをするにはIntel VT-dテクノロジーが必要なので、ユーザーが限られてしまうのも影響しているかもしれません。

KVMでPCIパススルーするための手がかりをmake menuconfigで調べたところ、次の2つのオプションを有効化することでIntel HD GraphicsをKVMにパススルーできそうだということがわかりました。

Intel IOMMU Intel VFIO

Intel IOMMUはIntel VT-dの機能をカーネルで有効にするものです。 また、VFIOはIOMMUによるデバイスへのアクセスを提供するものです。

これらを有効にしてコンパイル && インストールしカーネルをKVMでPCIデバイスパススルーできるようにします。

その次はqemuの起動オプションです。 まず、ベアメタルマシン上ではどのようにIntel HD Graphicsが認識されているのかを調べます。

Intel HD Graphics host

バス00:02.0にIntel HD Graphicsが認識されています。

このバス 00:02.0をPCIデバイスとしてパススルーするため、kvmの起動オプションに-device vfio-pci,host=00:02.0,id=hostpci0,bus=ich9-pcie-port-1,addr=0x0,x-vga=on -machine type=q35を追加します。

Info

追記(2015/1/30) このとき、CPUタイプのオプションを-cpu Haswell,kvm=off,+x2apicとすることを忘れないでください。

すると、ゲストLinuxにしっかりとIntel HD Graphicsが渡されていることがわかります。

Intel HD Graphics guest

Intel Media SDK Install

この先の記事が長くなってしまったのでIMSSのインストール以降は後ほど別記事に書きます。。

まとめ

KVMでもPCIパススルーして幸せになろう!

明日はmasami256さんです。

Related Posts

Intel QSVのH.264エンコードをLinuxで!

前回の記事 から1ヶ月以上空いてしまいました。遅ればせながらで申し訳ありません。続編です。 Intel QSVは高速にある程度の画質のエンコードできてよいです。とても。今回はKVMでIntel H...

read more

LinuxでQSVとH.264のエンコード対決

先日の記事、でLinuxでH.264の動画をエンコードできることを紹介しました。 そのベンチマークをとってみました。QSVでのエンコードとlibx264を用いたエンコードの比較となります。今回エン...

read more
Raspberry Pi2にOSMC入れてKodi(旧:XBMC)日本語化するまで

Raspberry Pi2にOSMC入れてKodi(旧:XBMC)日本語化するまで

今月頭の発表で一気に盛り上がりを見せた Raspberry Pi 2 Model B 。もちろん発売日に購入しました。 手元にはRaspberry Pi BとGalileo Gen2の2つのLinux...

read more
KodiとChinachuで地デジLive視聴 on Raspberry Pi2 w/ OSMC

KodiとChinachuで地デジLive視聴 on Raspberry Pi2 w/ OSMC

どうも、Raspberry Pi2で遊ぶ毎日が続いております。 Raspberry Pi model B(2ではない)にRaspbmcを入れて昨年の夏頃からChinachu経由で地上デジタル放送を視聴...

read more
KodiでChinachuの録画を観るAdd-on作った

KodiでChinachuの録画を観るAdd-on作った

Raspberry Pi2でKodi(旧:XBMC)が快適に動き、地デジのLIVE視聴環境として優れているので、 Chinachuの本領である録画した動画の視聴したみが高まってきました。Kodiに...

read more
Kodi Chinachu PVRアドオンでRasPi2/Android TVをテレビに

Kodi Chinachu PVRアドオンでRasPi2/Android TVをテレビに

暑い日が続きますね。こういう日はエアコンの効いた部屋でだらだらとテレビを見たいものです。 しかしテレビをもっておりません。27インチのモニタを持っているのみです。ただ、今年2月に記事にしたように、...

read more
クリスマスなのでLinuxでQSVエンコードする

クリスマスなのでLinuxでQSVエンコードする

こちらは DTV Advent Calendar 21日目の記事です。みなさん録画データの管理はどうしていますか? 視聴したら消す人もいれば、視聴しても残しておく人、視聴してない詰みTSがたくさん...

read more
Harekaze for Kodi (pvr.chinachu) 4.0.0 リリース

Harekaze for Kodi (pvr.chinachu) 4.0.0 リリース

KodiとChinachuがシームレスに連携し、快適に地デジが視聴できるアドオン Harekaze for Kodi(pvr.chinachu) をKodi 17 Krypton に対応したバージョン...

read more
HDMI入力をRaspberry Piで駆使する

HDMI入力をRaspberry Piで駆使する

昨今の衰えることのない技術トレンドに追従すべく、映像配信とかやりたいなーと思っていた2019年。 めっきり時間がなく何もできず、気付けば2020年になっていました。今年も時間がないだろうなぁと思っ...

read more
UAC GadgetでNintendo Switchの音声出力をRaspberry Piに取り込む

UAC GadgetでNintendo Switchの音声出力をRaspberry Piに取り込む

前回の記事 でHDMI映像入力をRaspberry Piで扱う方法を紹介し、その最後に音声の取り込みについて、まだ課題が残っていると書きました。 HDMI入力からの音声取り込みといった、本質的な課題の...

read more
Raspberry PiでHDMIディスプレイを調査する[EDID/CEC]

Raspberry PiでHDMIディスプレイを調査する[EDID/CEC]

みなさん、テレビやディスプレイに備わるHDMIの情報を確認する必要に迫られることはありませんか? 1年に一度くらいはありますよね。映像がうまく映らなかったり、操作がうまくいかなかったり。 そんな時にパ...

read more
LibreELECで地デジを楽しむためにMirakurunとEPGStationを一発で動かす

LibreELECで地デジを楽しむためにMirakurunとEPGStationを一発で動かす

地上デジタル放送をRaspberry Piで視聴する定番の組み合わせを、ノーコード・コマンドライン操作なしに、すなわち一発でセットアップできるようにした。...

read more
SIRUI 35mm/F1.8 1.33xアナモルフィックレンズで夜景を撮る

SIRUI 35mm/F1.8 1.33xアナモルフィックレンズで夜景を撮る

ずっと欲しかったアナモルフィックレンズを手に入れた。SIRUI 35MM /F1.8 1.33X ANAMORPHIC LENS最近カメラを手にする人が増えているようなので、どうせならとレンズ...

read more
Raspberry Pi CM4とCSI-2接続HDMI入力基板で音も取る

Raspberry Pi CM4とCSI-2接続HDMI入力基板で音も取る

2年前に投稿した HDMI入力をRaspberry Piで取り込む記事 では映像しか取得していませんでしたが、このHDMI入力基板には音声も取り込めるチップ TC358743 が搭載されています。 取...

read more
NAS用OSにRockstorという選択

NAS用OSにRockstorという選択

みなさんはNASのOSとして何を使っていますか? FreeNAS、OpenMediaVault、巷にはいくつもOSSのNAS用OSがあります。 なにを選んだらいいのでしょう?少し前までは非力なAt...

read more
RockstorにChinachuを詰め込んで録画NAS作ろ

RockstorにChinachuを詰め込んで録画NAS作ろ

昨日紹介したRockstor というNAS用OS、とても便利で快適に使っています。 今まで低消費電力で非力なマシンで動作させていたNASもCore i5で動作するようになり、 もっといろいろとやらせて...

read more