SlideShare ist ein Scribd-Unternehmen logo
1 von 21
Downloaden Sie, um offline zu lesen
今時のLinuxにおける
GPUエンコーディング事情
2018年末版
安藤 達也(zgock)
東海道らぐ
openSUSEユーザ会
zgock?お前誰よ?
安藤と申します
愛知県の隅っこで流しのエンジニアやってます
openSUSE使いです
ただの家庭内rootです
以前東海道らぐのLT用に起こしたXenのスライ
ドがSlideShareで40000ビュー超えてて吹い
たw
「Xenとzfsで作る家庭内VDIサーバ」
最近「仮想化ヲタ」というより
「VGAヲタ」であると気づきました
世間の人はVGA二桁枚も常備してないね、うん
録画データ、溜まってませんか?
はい、うちは溜まってます
家庭内録画環境は円熟期に
PT2/PT3等の録画カードの普及
優秀な録画用アプライアンスの登場
EPGStation
Chinanchu
ts2形式で保存すると1時間の地デジ/BS番組
で数GBのサイズに
真田丸全50話録画して
一話6GB*50=300GB
エンコード、重いですよね
Linuxではソフトウェアエンコーディングが
主流
x264等が下位レイヤ
各種変換ツールが上位レイヤ
ffmpeg
HandBrake
CPUにもよるけど、実時間等速変換ぐらいが精
一杯
1時間の番組を変換するのに1時間
CPU100%使うので他のことが出来ない
GPUがあるじゃない
GPUエンコーディングおさらい
過去何回も紹介してるのでまとめとして
AMD VCE(Video Coding Engine)
NVIDIA NVENC(NVidia ENCoder)
Intel QSV(Quick Sync Video)
Linuxで扱うには(過去形)
Intel QSV
Intel Media SDKが必要
カーネル決め打ち&brob driverで制約が多い
現行iGPUのみ対応で過去製品はガンガン切り捨てる
AMD VCE
amdgpuドライバの登場前はwindowsのみ
amdgpuドライバ登場後にgstreamerが対応
NVIDIA NVENC
NVIDIA SDKで対応
ffmpegが対応しているが配布ライセンスの都合上
自前ビルドが必要
2018年現在、事情が変わってきました
VA-API
Linux上での汎用デコード/エンコードAPI
Intel/AMDのGPUデコーダ/エンコーダに対応
標準IntelドライバでSandyBridge以降対応
ffmpeg等でハンドリング可能
iGPUの機能をフル活用するわけではないので、
Media SDKと比較して速度・画質等落ちる
Broadwell以降対応のIntel製OSSドライバがある
MediaSDKと同等のフル機能が扱える
openSUSE Tumbleweedであれば標準パッケにある
zypper in intel-media-driver
ffmpegでVA-APIを使う
ffmpeg 4.0
VA-API周辺に大幅な最適化が入った
適切なドライバを使えば3.x比で1.5倍速に
openSUSE Tumbleweedでは標準パッケに
zypper in ffmpeg-4
Leap 15.1(2月リリース予定)でLeapにも入るとい
いなあ
ffmpegでVA-API 前準備(1)
ドライバの確認
ls /usr/lib64/dri
ほにゃらら_drv_video.soがVA-APIドライバ
i965_drv_video.so
libva標準のIntelドライバ(SandyBridge以降)
iGPUのフル機能は使ってないので性能はMedia
SDKよりやや落ちる
iHD_drv_video.so
Intel拡張VA-APIドライバ(Broadwell以降専
用)
Media SDKとほぼ同等の性能
radeonsi_drv_video.so
標準のAMDドライバ
ffmpegでVA-API 前準備(2)
ドライバの詳細確認
zypper in libva-utils
VA-API確認ツール「vainfo」のインストール
export LIBVA_DRIVER_NAME=iHD
確認したドライバの1st wordを指定
vainfo
対応しているフォーマットを確認できる
「VAEntrypointEncSlice」エンコード対応
「VAEntrypointVLD」デコード対応
iHDドライバはh264、HEVC(h265)のエンコードに
対応
i965ドライバはVP8にも対応
ただしフルハードエンコードではないので遅い
ffmpegでVA-API エンコード
ffmpeg
–vaapi_device /dev/dri/renderD128
-hwaccel vaapi
-hwaccel_output_format vaapi
-i input.ts ←入力ファイル
-vf ‘format=nv12|
vaapi,hwupload,deinterlace_vaapi’
-c:v h264_vaapi
-c:a ac3
-qp 20
output.mp4
ffmpegでVA-API オプション解説
–vaapi_device /dev/dri/renderD128
VA-APIで使うデバイスを指定
マザー実装やプライマリ/セカンダリで使えるデバイ
スが異なる場合がある
大概は/dev/dri/renderDほにゃららで良いが
/dev/dri/cardほにゃららでないとダメな場合がある
ls /dev/driで使えるデバイス一覧を見て
指定してエラーにならないデバイスを探す(雑)
ffmpegでVA-API オプション解説
-hwaccel vaapi
デコーダにVA-APIを使用する
-hwaccel_output_format vaapi
エンコーダにVA-APIを使用する
-i input.ts
入力ファイルを指定
VA-APIの詳細オプションを渡す前に指定する
必要があるため、必ず以降のオプションより前
に指定しなければならない
ffmpegでVA-API オプション解説
-vf ‘format=nv12|
vaapi,hwupload,deinterlace_vaapi,scale_vaapi
=1280x800’
VA-APIの詳細オプション
format=nv12|vaapi
デコードフォーマット、intelの場合これで固定
hwupload
ハードウェアデコーダからエンコーダに直接スト
リームを送る
deinterlace_vaapi
ハードウェアフィルタによるインターレース解除
scale_vaapi=1280x800
ハードウェアフィルタによるスケーリング
ffmpegでVA-API オプション解説
-c:v h264_vaapi
ビデオエンコーディングフォーマットを指定す
る
-c:v hevc_vaapiでh265エンコード
-c:a ac3
オーディオエンコーディングフォーマットを指
定する
エンコード不要(-c:a copy)でも良いが、TV放送の
aacはmp4コンテナに本来収められない形式なので
bitstream errorが出る
-fflags +discardcorrupt と –bsf:a
aac_adtstoascを付けることで回避はできる
オーディオエンコード分の負荷は誤差
ffmpegでVA-API オプション解説
-qp 20
エンコード品質(ビットレート)の設定
一番のキモ
-qp 1で最も高画質大容量、-qp 99で最も低画
質小容量になる
-cbr、-vbr等でビットレート指定可能ではあ
るが、intel qsvでは-qp指定が一番良好な結果
が出る
実用的には –qp 15~18でほぼ無劣化、-qp 30
あたりがほぼ限界画質(このへんは主観)
実機テスト
Fujitsu FUTRO MS936
富士通のビジネスシンクライアント
Celeron 3955U (Skylake)
楽天で中古が9980円だった
32GB SSDを500GBに交換してTumbleweed
実機テスト
テストソース 地上デジタル録画 30分のア
ニメ
ガンダムビルドファイターズ第五話(約3.2GB)
iHD(速度) iHD(サイズ) i965(速度) i965(サイズ)
-qp 18 h264 x6.5 1.7GB x4.1 1.8GB
-qp 20 x6.5 1.2GB x4.2 1.3GB
-qp 25 x6.5 632MB x4.1 721MB
-qp 30 x6.5 334MB x4.1 392MB
-qp 35 x6.5 208MB x4.0 262MB
-qp 20 hevc x2.2 1.2GB x1.6 1.3GB
サンプル再生タイム
これよりただのアニメ鑑賞会になります
まとめ
最近のCeleronあなどれん
なぁ
ありがとうございました!

Weitere ähnliche Inhalte

Was ist angesagt?

Yoctoで綺麗なkernel configを作る
Yoctoで綺麗なkernel configを作るYoctoで綺麗なkernel configを作る
Yoctoで綺麗なkernel configを作るshimadah
 
GPU仮想化最前線 - KVMGTとvirtio-gpu -
GPU仮想化最前線 - KVMGTとvirtio-gpu -GPU仮想化最前線 - KVMGTとvirtio-gpu -
GPU仮想化最前線 - KVMGTとvirtio-gpu -zgock
 
HTTPを理解する
HTTPを理解するHTTPを理解する
HTTPを理解するIIJ
 
ネットワークOS野郎 ~ インフラ野郎Night 20160414
ネットワークOS野郎 ~ インフラ野郎Night 20160414ネットワークOS野郎 ~ インフラ野郎Night 20160414
ネットワークOS野郎 ~ インフラ野郎Night 20160414Kentaro Ebisawa
 
GoBGP活用によるSD-WANプラクティス
GoBGP活用によるSD-WANプラクティスGoBGP活用によるSD-WANプラクティス
GoBGP活用によるSD-WANプラクティスToshiki Tsuboi
 
async/await のしくみ
async/await のしくみasync/await のしくみ
async/await のしくみ信之 岩永
 
eStargzイメージとlazy pullingによる高速なコンテナ起動
eStargzイメージとlazy pullingによる高速なコンテナ起動eStargzイメージとlazy pullingによる高速なコンテナ起動
eStargzイメージとlazy pullingによる高速なコンテナ起動Kohei Tokunaga
 
ネットワークの自動化・監視の取り組みについて #netopscoding #npstudy
ネットワークの自動化・監視の取り組みについて #netopscoding #npstudyネットワークの自動化・監視の取り組みについて #netopscoding #npstudy
ネットワークの自動化・監視の取り組みについて #netopscoding #npstudyYahoo!デベロッパーネットワーク
 
目grep入門 +解説
目grep入門 +解説目grep入門 +解説
目grep入門 +解説murachue
 
CEDEC 2018 最速のC#の書き方 - C#大統一理論へ向けて性能的課題を払拭する
CEDEC 2018 最速のC#の書き方 - C#大統一理論へ向けて性能的課題を払拭するCEDEC 2018 最速のC#の書き方 - C#大統一理論へ向けて性能的課題を払拭する
CEDEC 2018 最速のC#の書き方 - C#大統一理論へ向けて性能的課題を払拭するYoshifumi Kawai
 
深層学習向け計算機クラスター MN-3
深層学習向け計算機クラスター MN-3深層学習向け計算機クラスター MN-3
深層学習向け計算機クラスター MN-3Preferred Networks
 
続・PFN のオンプレML基盤の取り組み / オンプレML基盤 on Kubernetes 〜PFN、ヤフー〜 #2
続・PFN のオンプレML基盤の取り組み / オンプレML基盤 on Kubernetes 〜PFN、ヤフー〜 #2続・PFN のオンプレML基盤の取り組み / オンプレML基盤 on Kubernetes 〜PFN、ヤフー〜 #2
続・PFN のオンプレML基盤の取り組み / オンプレML基盤 on Kubernetes 〜PFN、ヤフー〜 #2Preferred Networks
 
なぜディスクレスハイパーバイザに至ったのか / Why did we select to the diskless hypervisor? #builde...
なぜディスクレスハイパーバイザに至ったのか / Why did we select to the diskless hypervisor? #builde...なぜディスクレスハイパーバイザに至ったのか / Why did we select to the diskless hypervisor? #builde...
なぜディスクレスハイパーバイザに至ったのか / Why did we select to the diskless hypervisor? #builde...whywaita
 
10GbE時代のネットワークI/O高速化
10GbE時代のネットワークI/O高速化10GbE時代のネットワークI/O高速化
10GbE時代のネットワークI/O高速化Takuya ASADA
 
さくらのVPS で IPv4 over IPv6ルータの構築
さくらのVPS で IPv4 over IPv6ルータの構築さくらのVPS で IPv4 over IPv6ルータの構築
さくらのVPS で IPv4 over IPv6ルータの構築Tomocha Potter
 
何となく勉強した気分になれるパーサ入門
何となく勉強した気分になれるパーサ入門何となく勉強した気分になれるパーサ入門
何となく勉強した気分になれるパーサ入門masayoshi takahashi
 
分散システムの限界について知ろう
分散システムの限界について知ろう分散システムの限界について知ろう
分散システムの限界について知ろうShingo Omura
 
Slurmのジョブスケジューリングと実装
Slurmのジョブスケジューリングと実装Slurmのジョブスケジューリングと実装
Slurmのジョブスケジューリングと実装Ryuichi Sakamoto
 
「スプラトゥーン」リアルタイム画像解析ツール 「IkaLog」の裏側
「スプラトゥーン」リアルタイム画像解析ツール 「IkaLog」の裏側「スプラトゥーン」リアルタイム画像解析ツール 「IkaLog」の裏側
「スプラトゥーン」リアルタイム画像解析ツール 「IkaLog」の裏側Takeshi HASEGAWA
 

Was ist angesagt? (20)

Yoctoで綺麗なkernel configを作る
Yoctoで綺麗なkernel configを作るYoctoで綺麗なkernel configを作る
Yoctoで綺麗なkernel configを作る
 
GPU仮想化最前線 - KVMGTとvirtio-gpu -
GPU仮想化最前線 - KVMGTとvirtio-gpu -GPU仮想化最前線 - KVMGTとvirtio-gpu -
GPU仮想化最前線 - KVMGTとvirtio-gpu -
 
HTTPを理解する
HTTPを理解するHTTPを理解する
HTTPを理解する
 
ネットワークOS野郎 ~ インフラ野郎Night 20160414
ネットワークOS野郎 ~ インフラ野郎Night 20160414ネットワークOS野郎 ~ インフラ野郎Night 20160414
ネットワークOS野郎 ~ インフラ野郎Night 20160414
 
GoBGP活用によるSD-WANプラクティス
GoBGP活用によるSD-WANプラクティスGoBGP活用によるSD-WANプラクティス
GoBGP活用によるSD-WANプラクティス
 
async/await のしくみ
async/await のしくみasync/await のしくみ
async/await のしくみ
 
eStargzイメージとlazy pullingによる高速なコンテナ起動
eStargzイメージとlazy pullingによる高速なコンテナ起動eStargzイメージとlazy pullingによる高速なコンテナ起動
eStargzイメージとlazy pullingによる高速なコンテナ起動
 
ネットワークの自動化・監視の取り組みについて #netopscoding #npstudy
ネットワークの自動化・監視の取り組みについて #netopscoding #npstudyネットワークの自動化・監視の取り組みについて #netopscoding #npstudy
ネットワークの自動化・監視の取り組みについて #netopscoding #npstudy
 
目grep入門 +解説
目grep入門 +解説目grep入門 +解説
目grep入門 +解説
 
CEDEC 2018 最速のC#の書き方 - C#大統一理論へ向けて性能的課題を払拭する
CEDEC 2018 最速のC#の書き方 - C#大統一理論へ向けて性能的課題を払拭するCEDEC 2018 最速のC#の書き方 - C#大統一理論へ向けて性能的課題を払拭する
CEDEC 2018 最速のC#の書き方 - C#大統一理論へ向けて性能的課題を払拭する
 
深層学習向け計算機クラスター MN-3
深層学習向け計算機クラスター MN-3深層学習向け計算機クラスター MN-3
深層学習向け計算機クラスター MN-3
 
続・PFN のオンプレML基盤の取り組み / オンプレML基盤 on Kubernetes 〜PFN、ヤフー〜 #2
続・PFN のオンプレML基盤の取り組み / オンプレML基盤 on Kubernetes 〜PFN、ヤフー〜 #2続・PFN のオンプレML基盤の取り組み / オンプレML基盤 on Kubernetes 〜PFN、ヤフー〜 #2
続・PFN のオンプレML基盤の取り組み / オンプレML基盤 on Kubernetes 〜PFN、ヤフー〜 #2
 
なぜディスクレスハイパーバイザに至ったのか / Why did we select to the diskless hypervisor? #builde...
なぜディスクレスハイパーバイザに至ったのか / Why did we select to the diskless hypervisor? #builde...なぜディスクレスハイパーバイザに至ったのか / Why did we select to the diskless hypervisor? #builde...
なぜディスクレスハイパーバイザに至ったのか / Why did we select to the diskless hypervisor? #builde...
 
10GbE時代のネットワークI/O高速化
10GbE時代のネットワークI/O高速化10GbE時代のネットワークI/O高速化
10GbE時代のネットワークI/O高速化
 
さくらのVPS で IPv4 over IPv6ルータの構築
さくらのVPS で IPv4 over IPv6ルータの構築さくらのVPS で IPv4 over IPv6ルータの構築
さくらのVPS で IPv4 over IPv6ルータの構築
 
何となく勉強した気分になれるパーサ入門
何となく勉強した気分になれるパーサ入門何となく勉強した気分になれるパーサ入門
何となく勉強した気分になれるパーサ入門
 
HTTP/2 入門
HTTP/2 入門HTTP/2 入門
HTTP/2 入門
 
分散システムの限界について知ろう
分散システムの限界について知ろう分散システムの限界について知ろう
分散システムの限界について知ろう
 
Slurmのジョブスケジューリングと実装
Slurmのジョブスケジューリングと実装Slurmのジョブスケジューリングと実装
Slurmのジョブスケジューリングと実装
 
「スプラトゥーン」リアルタイム画像解析ツール 「IkaLog」の裏側
「スプラトゥーン」リアルタイム画像解析ツール 「IkaLog」の裏側「スプラトゥーン」リアルタイム画像解析ツール 「IkaLog」の裏側
「スプラトゥーン」リアルタイム画像解析ツール 「IkaLog」の裏側
 

Ähnlich wie 今時のLinuxにおけるGPUエンコード事情2018

今時のLinuxにおけるGPUエンコード事情
今時のLinuxにおけるGPUエンコード事情今時のLinuxにおけるGPUエンコード事情
今時のLinuxにおけるGPUエンコード事情zgock
 
15分で知るVagrant (NSEG 2013-08-24)
15分で知るVagrant (NSEG 2013-08-24)15分で知るVagrant (NSEG 2013-08-24)
15分で知るVagrant (NSEG 2013-08-24)hiro345
 
FirefoxOS を AndroidStick で動かしてみた(updated)
FirefoxOS を AndroidStick で動かしてみた(updated)FirefoxOS を AndroidStick で動かしてみた(updated)
FirefoxOS を AndroidStick で動かしてみた(updated)Kunihiko HAYASHI
 
XNAとはなにか?XNAうれしいところ、うれしくないところ
XNAとはなにか?XNAうれしいところ、うれしくないところXNAとはなにか?XNAうれしいところ、うれしくないところ
XNAとはなにか?XNAうれしいところ、うれしくないところIGDA Japan
 
DVB recording command on gstreamer.
DVB recording command on gstreamer.DVB recording command on gstreamer.
DVB recording command on gstreamer.裕士 常田
 
ドライバハッキング。UMPC、Windowsタブレット にLinux、*BSDを入れて遊ぼう  2017年度京都版 #osckyoto
ドライバハッキング。UMPC、Windowsタブレット にLinux、*BSDを入れて遊ぼう  2017年度京都版 #osckyotoドライバハッキング。UMPC、Windowsタブレット にLinux、*BSDを入れて遊ぼう  2017年度京都版 #osckyoto
ドライバハッキング。UMPC、Windowsタブレット にLinux、*BSDを入れて遊ぼう  2017年度京都版 #osckyotoNetwalker lab kapper
 
探索アルゴリズム + 深層学習により新化合物を発見する
探索アルゴリズム + 深層学習により新化合物を発見する探索アルゴリズム + 深層学習により新化合物を発見する
探索アルゴリズム + 深層学習により新化合物を発見するKazuki Yoshizoe
 
Dpdk環境の話
Dpdk環境の話Dpdk環境の話
Dpdk環境の話Masaru Oki
 
しつこくXenとzfsで作る家庭内vdiサーバ2015年版
しつこくXenとzfsで作る家庭内vdiサーバ2015年版しつこくXenとzfsで作る家庭内vdiサーバ2015年版
しつこくXenとzfsで作る家庭内vdiサーバ2015年版zgock
 
Debian tokyo-20150224-01
Debian tokyo-20150224-01Debian tokyo-20150224-01
Debian tokyo-20150224-01Yuji IMAI
 

Ähnlich wie 今時のLinuxにおけるGPUエンコード事情2018 (12)

今時のLinuxにおけるGPUエンコード事情
今時のLinuxにおけるGPUエンコード事情今時のLinuxにおけるGPUエンコード事情
今時のLinuxにおけるGPUエンコード事情
 
NetBSD/Zynq
NetBSD/ZynqNetBSD/Zynq
NetBSD/Zynq
 
15分で知るVagrant (NSEG 2013-08-24)
15分で知るVagrant (NSEG 2013-08-24)15分で知るVagrant (NSEG 2013-08-24)
15分で知るVagrant (NSEG 2013-08-24)
 
FirefoxOS を AndroidStick で動かしてみた(updated)
FirefoxOS を AndroidStick で動かしてみた(updated)FirefoxOS を AndroidStick で動かしてみた(updated)
FirefoxOS を AndroidStick で動かしてみた(updated)
 
Riscv+fpga200606
Riscv+fpga200606Riscv+fpga200606
Riscv+fpga200606
 
XNAとはなにか?XNAうれしいところ、うれしくないところ
XNAとはなにか?XNAうれしいところ、うれしくないところXNAとはなにか?XNAうれしいところ、うれしくないところ
XNAとはなにか?XNAうれしいところ、うれしくないところ
 
DVB recording command on gstreamer.
DVB recording command on gstreamer.DVB recording command on gstreamer.
DVB recording command on gstreamer.
 
ドライバハッキング。UMPC、Windowsタブレット にLinux、*BSDを入れて遊ぼう  2017年度京都版 #osckyoto
ドライバハッキング。UMPC、Windowsタブレット にLinux、*BSDを入れて遊ぼう  2017年度京都版 #osckyotoドライバハッキング。UMPC、Windowsタブレット にLinux、*BSDを入れて遊ぼう  2017年度京都版 #osckyoto
ドライバハッキング。UMPC、Windowsタブレット にLinux、*BSDを入れて遊ぼう  2017年度京都版 #osckyoto
 
探索アルゴリズム + 深層学習により新化合物を発見する
探索アルゴリズム + 深層学習により新化合物を発見する探索アルゴリズム + 深層学習により新化合物を発見する
探索アルゴリズム + 深層学習により新化合物を発見する
 
Dpdk環境の話
Dpdk環境の話Dpdk環境の話
Dpdk環境の話
 
しつこくXenとzfsで作る家庭内vdiサーバ2015年版
しつこくXenとzfsで作る家庭内vdiサーバ2015年版しつこくXenとzfsで作る家庭内vdiサーバ2015年版
しつこくXenとzfsで作る家庭内vdiサーバ2015年版
 
Debian tokyo-20150224-01
Debian tokyo-20150224-01Debian tokyo-20150224-01
Debian tokyo-20150224-01
 

今時のLinuxにおけるGPUエンコード事情2018