YouTube playback on Linux

AV,PC Mar 02, 2019

NASとして使ってたサーバのマザーボードを交換してCoffee Lakeベースにした。ARM系で良かったのかもしれないけど、Linuxのdriverのサポートでamd64系が無難そうというのと、今回からテレビにも繋いで動画見る用途でも使ってみようと考えてARM系にしなかった。CPUとして採用したPentium G5600はUHD630 (3e91)というGraphic coreが組み込まれている。最終的にはYouTubeとかのネット動画再生環境として満足できる環境になったが、色々カスタムで入れないと動かなかったので、そのメモ。

ポイントは二つ:
drm-tip
Gnome-Wayland

まず現時点のDebian busterのデフォルトカーネル4.19で試す。Xorgのvesa driverでしか動かなかった。その環境のLXDE上のchromeでYouTubeを見ると、酷い動画再生品質に驚いた。tearingというキーワードでLinuxの動画再生環境ではよく話題に上がっている問題が起きている。現象としては、カメラがパンして背景全体が動く場面で画面の真ん中に水平に切れ目ができる。V-sync(垂直同期)がずれる。DAOKO×中田ヤスタカ「ぼくらのネットワーク」で顕著にtearingが見られた。

Window manager (composer) がV-syncに大きな影響を与えてるらしい。LXDEのような軽量DEではなくGnome/KDEを使うことがtearing解決のまず一歩のようだ。そしてXorgではなく、構造上tearingが起きにくい設計になってるWaylandというdisplay serverを使うことも推奨されてる。DebianはbusterでWaylandをデフォルトにしているので、これを機会に、stretchからbusterにアップグレードした。

% unman -a
Linux 4.19.0-2-amd64 #1 SMP Debian 4.19.16-1 (2019-01-17) x86_64 GNU/Linux

Xorgのvesa driverでは動いたが、Waylandは動かなかった。Kernel 4.19.16のDRM driverがまだUHD630に対応してない?

/var/log/messages
gnome-shell[1984]: Failed to create backend: Could not find a primary drm kms device

ここで最新のDRM driverのレポジトリであるdrm-tipを試してみる。drm-tipは最新のカーネルに組み込まれた形で開発されていて、cloneすると、その中でカーネル全体をコンパイルできる。この時点のdrm-tipではkernel 5.0.0-rc7。

まず、kernel treeとは別にIntelから配布されてるfirmwareをinstall。

apt-get install firmware-misc-nonfree
git clone git://anongit.freedesktop.org/drm-tip
cd drm-tip
cp /boot/config-4.19.0-2-amd64 .config

.configを編集

CONFIG_DRM_I915=m
CONFIG_FW_LOADER=y
CONFIG_EXTRA_FIRMWARE="i915/kbl_dmc_ver1_04.bin i915/kbl_huc_ver02_00_1810.bin i915/kbl_guc_ver9_39.bin"
CONFIG_EXTRA_FIRMWARE_DIR="/lib/firmware"

後は通常通りmakeして出来た.debをinstall。

make oldconfig
make deb-pkg LOCALVERSION=-custom

Browserはchromeを使う。

Gnome-Waylandの環境で、YouTubeはVsyncが破綻することなく綺麗に再生できるようになった。

 

% uname -a
Linux 5.0.0-rc7-custom #6 SMP Fri Feb 22 00:58:02 CST 2019 x86_64 GNU/Linux


% lshw -class video
*-display
description: VGA compatible controller
product: 8th Gen Core Processor Gaussian Mixture Model
vendor: Intel Corporation
physical id: 2
bus info: pci@0000:00:02.0
version: 00
width: 64 bits
clock: 33MHz
capabilities: pciexpress msi pm vga_controller bus_master cap_list rom
configuration: driver=i915 latency=0
resources: irq:124 memory:a0000000-a0ffffff memory:90000000-9fffffff ioport:3000(size=64) memory:c0000-dffff


% lspci -nn -v
00:02.0 VGA compatible controller [0300]: Intel Corporation 8th Gen Core Processor Gaussian Mixture Model [8086:3e91] (prog-if 00 [VGA controller])
Subsystem: ASUSTeK Computer Inc. 8th Gen Core Processor Gaussian Mixture Model [1043:8694]
Flags: bus master, fast devsel, latency 0, IRQ 124
Memory at a0000000 (64-bit, non-prefetchable) [size=16M]
Memory at 90000000 (64-bit, prefetchable) [size=256M]
I/O ports at 3000 [size=64]
[virtual] Expansion ROM at 000c0000 [disabled] [size=128K]
Capabilities: [40] Vendor Specific Information: Len=0c <?>
Capabilities: [70] Express Root Complex Integrated Endpoint, MSI 00
Capabilities: [ac] MSI: Enable+ Count=1/1 Maskable- 64bit-
Capabilities: [d0] Power Management version 2
Capabilities: [100] Process Address Space ID (PASID)
Capabilities: [200] Address Translation Service (ATS)
Capabilities: [300] Page Request Interface (PRI)
Kernel driver in use: i915
Kernel modules: i915

AudioはUSB-DAC経由で出してる。それに必要なkernel configは

CONFIG_SND_HDA=y
CONFIG_SND_USB=y
CONFIG_SND_USB_AUDIO=m

さらに、HDMIに音を乗せるには多分これらが必要。(使ってないので未確認)

CONFIG_SND_HDA_INTEL=y
CONFIG_SND_HDA_CODEC_HDMI=y
CONFIG_SND_HDA_I915=y

さらに、今までremote loginでしか使ってなかったせいかもしれないが、videoとsoundを機能させるためには以下のgroup設定が必要だった。

sudo adduser Debian-gdm audio
sudo adduser Debian-gdm video
• • •

BIOS – GPT

PC Jan 06, 2013

まだstorageの話が続く。

RAID5を構成するdiskを3TBx3に交換した。それに伴い、boot partitionもGPT partition labelに移行。2年前はGRUBでGPT partitionをbootする方法が分からなかったが、今回はGRUB(1.98)がGPTに対応してた。

うちのマシンはEFIではなくBIOSなので、1MBくらいのGRUBを置くためだけの小さいpartitionを作る。partedではbios_grubというflagを付ける。このflagをもとに、後のgrub-installがそこにdataを置く。

% parted /dev/sdc
(parted) set 3 bios_grub on
(parted) print
Model: ATA WDC WD30EFRX-68A (scsi)
Disk /dev/sdc: 3001GB
Sector size (logical/physical): 512B/4096B
Partition Table: gpt

Number  Start   End     Size    File system  Name     Flags
 3      17.4kB  1049kB  1031kB               non-fs   bios_grub
 1      1049kB  3000GB  3000GB               primary
 2      3000GB  3001GB  324MB   ext4         primary  boot
(parted) quit

motherboardはIntel DG965WHだが、Intel motherboard特有の問題で一つ引っかかった。partedでpartitionを切った後に、さらにMBR領域を変更出来るfdiskでboot flagをonにしないと、BIOSが”no bootable devices found”とboot領域を見つけられない。ここのBBSの記述を参照した。(上のpartedで3番目のpartitionにbootflagをつけてるけど、これは意味が無かった。ポイントはfdisk。)

grub-installのoption等は、BIOSでGPTだからと言って特別に設定する事は何も無い。

% grub-mkdevicemap
% update-grub
% grub-install /dev/sdc

RAIDをまっさらから組み直してUUIDが変わっているので、initrdを更新。

% dpkg-reconfigure linux-image-2.6.32
• • •

failed HDD

PC Dec 09, 2012

この時更新したRAID5のその後。

Debianで運用してるfileserverのディスクアクセスがやたら遅くなった。そういえば、logcheckからata関係のエラーが送られてきたのを思い出す。logを見てみると、RAID5の3台のうちの1台がおかしい。

このときのSMARTはまだPASSだったのが、次の日にはもうFAILEDになって、症状悪化。smartctl –all /dev/sdc のoutput

% mdadm --manage /dev/md1 --fail /dev/sda1
% mdadm --manage /dev/md1 --remove /dev/sda1
% swapoff /dev/sda2

このdiskをofflineにして、新しいのを発注。新しいのもまたWD Green、だけど3TのWD30EZRX。他の2TB 2台もいずれ3TBに交換して、そのときにextendする。後で調べたら、NAS用にTLERを変更可能なWD Redって出てるのを知った。値段もあんまり変わらないし、こっちにすれば良かった。。。

WD Caviar Greenはデフォルトでは8秒アクセス無いとheadをparkするようになってるが、Linuxで使ってるとlogの書き出しのために、parkしてはすぐ戻してという繰り返しになる。これのデフォルト8秒を延ばすユーティリティがある。idle3ctl。 これやったはずだと思ったが、8秒のままだった。影響無いと思って変えなかったか? smartの Load_Cycle_Count 1673180回というのを見ると、さすがに延ばした方が良いな。2年ちょいの連続稼働で、Power_On_Hours 2万時間。まだ壊れるには早い。やはり過度のLoad_Cycle_Countが原因になってる可能性は高いか。

% idle3ctl -s 255 /dev/sdb

これで、3810秒。power on時に新しい設定が反映される。

ここで新しいdiskをpartitionを切ってRAIDに組み込む前にfull backup取った。

partition切るところでまず引っかかる。今まではmsdos partition labelで切ってたが、それでは2TB以上のdiskには対応出来ない。gpt labelを使う。また、4KB sectorのdiskなのでpartitionは4096/512=8の倍数で始める。64で良いのだけど、partedが2048の倍数じゃないと alignしてないとwarning出すので、2048にしとく。

(parted) unit s
(parted) print
Model: ATA WDC WD30EZRX-00A (scsi)
Disk /dev/sda: 5860533168s
Sector size (logical/physical): 512B/4096B
Partition Table: gpt

Number  Start        End          Size         File system     Name     Flags
 1      2048s        5858435071s  5858433024s                  primary
 2      5858435072s  5860532223s  2097152s     linux-swap(v1)  primary

raid5 rebuild。

% mdadm --add /dev/md1 /dev/sda1

6時間位はかかるので放置しといて、次見てみるとなんとfailして、U__ になってる。いろいろ試行錯誤した結果、既存のさらにもう一台の/dev/sdbも問題有った。diskのlow level surface scan(long test)でerror見つかって、sector remapされた。使ったtoolは、UBCDに入ってる、WD純正のDLG Diagnostic。2TBのcheckに約6時間で、sdb と sdcの2台に合計12時間かかった。ちなみに、short testではerrorは検知されなかった。

これで、今度はちゃんとrebuild、というか最初からRAID5組み直したので普通のbuild出来て、LVM構築し直して、formatして、backupからrestore。作業はUSB flashに入れたKnoppix 7でbootして行った。

設定変更。

/etc/mdadm/mdadm.conf
/etc/fstab

initrdを更新。(本番システムになる、今コピーしてた先が/target)

% mount --bind /dev /target/dev
% mount --bind /sys /target/sys
% mount --bind /proc /target/proc
% chroot /target
% dpkg-reconfigure linux-image-2.6.32

という事で、RAIDのrebuildの前には

  • full backup
  • degradedで動いてるdiskのlow level format check&remap

が必須。

• • •

2TBx3 RAID5

3枚 platter 2TB の WD20EARS-00MVWB0 を3個購入。これで、今まで使ってた 320GB x 4 のRAID5 を置き換える。このドライブは sector size が 今までの 512byte ではなくて 4Kbyte となっているために、最初の partition は 64 sector または8の倍数 (8=4K/512)から始めないと disk access が劇遅になるらしい。何も考えなければ普通は 63 sector から partition が始まる。これさえ注意すれば扱いは今までの 512byte sector HDD と同様。

MD RAID、LVM2 の設定はほぼ最初と同じ。マザーボードに SATA が 6 port あるので、新しいハードディスクを 2個だけ繋いで degraded array の状態で前の disk からコピーした。

disk の partition を切るのに、実は GPT (GUID Partition Table) で始めた。というのも、4K sector の disk の partition の切り方をサーチするとどれも parted で GPT を使った切り方しか説明してなかった。parted を今まで使ったことなかったからそういうもんだと思ってたら、後々 grub-1.97 が GPT をサポートしてなくてブートできないことが分かってまた全部やり直す羽目になる。結局 parted で msdos partition table を使ったんだが、fdisk で切っても問題無かったという事。

Data を全部コピーして、grub を新しい disk の mbr にインストール。

# grub-install /dev/sdd

grub.cfg を update。(新しい環境が /target に mount されてる。)

# chroot /target
# update-grub

これで、grub が新しい /boot を起動出来る様になったが、kernel が md を認識せず root を mount 出来なかった。これは initrd を構築し直さないといけなかった。Debian は以下で initrd が再構築出来る。古い環境の方から新しい環境を /target に mount した状態から、

# chroot /target
# dpkg-reconfigure linux-image-2.6.26

これで、無事起動した。移行完了後の df。

Filesystem           1K-blocks      Used Available Use% Mounted on
/dev/mapper/vg01-root
                       1032088    294080    685580  31% /
tmpfs                   500428         0    500428   0% /lib/init/rw
udev                     10240       700      9540   7% /dev
tmpfs                   500428         0    500428   0% /dev/shm
/dev/sdc2               306079     61152    229123  22% /boot
/dev/mapper/vg01-home
                     103212320  15257348  82712092  16% /home
/dev/mapper/vg01-tmp  10321208    154252   9642668   2% /tmp
/dev/mapper/vg01-usr  10321208   4584432   5212488  47% /usr
/dev/mapper/vg01-var 3720211672 797296220 2733939532  23% /var

今まで使ってた Maxtor DiamondMax21 320GB、何も問題なく3年半連続稼動した。

• • •

Xmarks

xmarks-beta-v-125x122

複数の PC で bookmark を共有するのに以前は Google Browser Sync を使ってた。しかし、Firefox 3.0 からサポートされなくなってしまってからは、それだけのために 2.x を使ってた。それも間もなく Google 自体がサーバ側のサポートも終わらせてしまった。それ以来似たサービスを探しててようやく見つけたのが Xmarks。実は結構以前から存在してたようだが、気がつかなかったのは諦めきってしまってちゃんと探してなかったって事か。。

Xmarks、Google Browser Sync が持ってた機能は全て備えてる上に、version 管理もしてくれて、以前の version に戻ったりする事が出来るのはすばらしい。あと、同一 PC 内で複数の Browser 使ってるという状況にも適用出来る。うちでは Mac で Firefox と Safari 両方に入れてる。

• • •
Ippei813 top
October 2019
S M T W T F S
« Mar    
 12345
6789101112
13141516171819
20212223242526
2728293031  
Original Wordpress Themes by priss, customized by Ippei