webOS Open Source Edition の観察(1)

# なぜwebOSを調べているのか

私の立ち位置を明らかにしておきましょう。私はアプリケーションを書くよりも、システムを構築する側の人です。なのでwebOSをブラックボックスとして使おうとするのでなく、今時のこのくらいの規模のシステムでは中がどのようになっているのかを調べて、自分で何かを構築するときの参考にしたいと考えています。
というわけで、私がwebOSを見て、おお！とか、ほう！となったことを何回かに分けて書いていきます。今回はさくっと表面をなぞってわかること。

# ブートログ

ブートログをgistに貼っておきました。[ここ](https://gist.github.com/tetsu-koba/14f87f37486950fbd8839e076fc405f0)

```
[ 0.000000] Linux version 4.4.50 (koba@instance-5) (gcc version 6.2.0 (GCC) ) #1 SMP Tue Apr 3 01:06:49 UTC 2018
[ 0.000000] CPU: ARMv7 Processor [410fd034] revision 4 (ARMv7), cr=10c5383d
```

CPUをARMv7 として認識しています。このカーネルは32bitのARM用ですね。

# 動いているプロセス

ps ax のログは[こちら](https://gist.github.com/tetsu-koba/14f87f37486950fbd8839e076fc405f0#file-ps_ax-txt)

```
# pstree
systemd-+-LunaDownloadMgr
        |-LunaSysService
        |-PmKLogDaemon
        |-PmLogDaemon---{PmLogDaemon}
        |-SettingsService---{SettingsService}
        |-WebAppMgr-+-WebAppMgr---WebAppMgr-+-{Chrome_ChildIOT}
        |           |                       |-3*[{CompositorTileW}]
        |           |                       |-{Compositor}
        |           |                       |-{HTMLParserThrea}
        |           |                       |-{Renderer::FILE}
        |           |                       `-{WebOSWatchdog W}
        |           |-{AudioThread}
        |           |-{BrowserBlocking}
        |           |-{Chrome_CacheThr}
        |           |-{Chrome_ChildIOT}
        |           |-{Chrome_DBThread}
        |           |-{Chrome_DevTools}
        |           |-{Chrome_FileThre}
        |           |-{Chrome_FileUser}
        |           |-{Chrome_IOThread}
        |           |-{Chrome_InProcGp}
        |           |-{Chrome_ProcessL}
        |           |-{CompositorTileW}
        |           |-{IndexedDB}
        |           |-{NetworkChangeNo}
        |           |-{SimpleCacheWork}
        |           |-{WaylandDisplayP}
        |           |-2*[{WebOSWatchdog W}]
        |           |-{inotify_reader}
        |           `-{sandbox_ipc_thr}
        |-activitymanager
        |-3*[agetty]
        |-appinstalld
        |-audiod---{audiod}
        |-avoutputd
        |-boosterd---2*[qml-runner---{QQmlThread}]
        |-bootd---2*[{bootd}]
        |-configd
        |-connmand
        |-crashd
        |-dbus-daemon
        |-dropbear---dropbear---sh---pstree
        |-event-monitor
        |-klogd
        |-ls-hubd-+-{gmain}
        |         `-{ls-hubd}
        |-maliit-server.s---MaliitServer---{QQmlThread}
        |-2*[mojodb-luna---3*[{mojodb-luna}]]
        |-mojodb-luna---4*[{mojodb-luna}]
        |-node_fork_serve-+-4*[{V8 WorkerThread}]
        |                 `-{node}
        |-notificationmgr
        |-ntpd---{ntpd) S 1 193 19
        |-pacrunner
        |-pulseaudio-+-2*[{alsa-sink-bcm28}]
        |            `-9*[{null-sink}]
        |-rdxd
        |-sam
        |-sleepd
        |-surface-manager-+-{QQmlThread}
        |                 |-{QQuickPixmapRea}
        |                 |-{QSGRenderThread}
        |                 `-{Qt bearer threa}
        |-syslogd
        |-systemd-journal
        |-systemd-logind
        |-systemd-udevd
        |-umediaserver---{umediaserver}
        |-webos-connman-a-+-{gdbus}
        |                 `-{gmain}
`-wpa_supplicant
```

initにはsystemd が使われています。PC用のLinuxディストリビューションの主要なものは、すでにsystemdに変わっていますが、その流れがこちらにも来ています。
そろそろ一度集中的にsystemd を勉強したほうがいいかな。

sshd にはopenSSHでなくてdropbearが使われています。dropbearは省メモリのssh実装ということで、最近私も使い始めました。sftpが無いのですが、それ以外ではdropbearで困ったことはまだありません。

ドキュメントによるとウインドウシステムにはXでなくてwaylandが使用されているそうです。確かにXサーバらしきプロセスはありません。waylandのことはまだよく知らないので、どのプロセスがXサーバに相当する仕事をしているのか名前ではよくわかりませんが、おいおい調べます。

pstreeに出てきているスレッド名から想像して、Webブラウザの基本部分はChromeベースで、javascriptのランタイムはV8のようです。

基本コマンドはbusyboxのものが使われているのですが、ps はbusyboxでなくてprocpsのもの(つまり、フル機能のps)が使われるようになっていました。こうやってシンボリックリンクになっているのはわかりやすい。

```
# which ps
/bin/ps
# ls -l /bin/ps
lrwxrwxrwx    1 root     root            14 Apr  3  2018 /bin/ps -> /bin/ps.procps
```

# YouTubeの動画を再生しているときのtop

```
top - 09:31:36 up 20 min,  1 user,  load average: 1.24, 0.44, 0.16
Tasks: 142 total,   1 running, 141 sleeping,   0 stopped,   0 zombie
%Cpu(s): 24.9 us,  7.5 sy,  0.1 ni, 67.0 id,  0.0 wa,  0.0 hi,  0.5 si,  0.0 st
KiB Mem :   881732 total,   358592 free,   296724 used,   226416 buff/cache
KiB Swap:        0 total,        0 free,        0 used.   524332 avail Mem 

  PID USER      PR  NI    VIRT    RES    SHR S  %CPU %MEM     TIME+ COMMAND                 
  843 wam       20   0  705592 225452  90280 S 127.7 25.6   1:49.25 WebAppMgr               
  726 wam       20   0  512672  76624  61812 S   8.6  8.7   0:19.48 WebAppMgr               
   69 root       1 -19       0      0      0 S   2.0  0.0   0:01.47 VCHIQ-0                 
  911 root      20   0    4408   2072   1708 R   1.0  0.2   0:00.35 top                     
    3 root      20   0       0      0      0 S   0.3  0.0   0:00.16 ksoftirqd/0             
    7 root      20   0       0      0      0 S   0.3  0.0   0:00.27 rcu_sched               
  304 root      20   0  114732  35976  23680 S   0.3  4.1   0:04.58 surface-manager         
    1 root      20   0   24408   4028   2728 S   0.0  0.5   0:02.56 systemd                 
    2 root      20   0       0      0      0 S   0.0  0.0   0:00.00 kthreadd                
    5 root       0 -20       0      0      0 S   0.0  0.0   0:00.00 kworker/0:0H            
    8 root      20   0       0      0      0 S   0.0  0.0   0:00.00 rcu_bh                  
    9 root      rt   0       0      0      0 S   0.0  0.0   0:00.00 migration/0             
   10 root      rt   0       0      0      0 S   0.0  0.0   0:00.00 migration/1             
   11 root      20   0       0      0      0 S   0.0  0.0   0:00.01 ksoftirqd/1             
   13 root       0 -20       0      0      0 S   0.0  0.0   0:00.00 kworker/1:0H            
   14 root      rt   0       0      0      0 S   0.0  0.0   0:00.00 migration/2             
   15 root      20   0       0      0      0 S   0.0  0.0   0:00.02 ksoftirqd/2  
```

CPU負荷が結構高いです。H.264のデコードはソフトでやっているのかな。再生した動画を見ていると、たまに横に筋が入るのですが、デコードが間に合っていないのかもしれません。
Raspberry Pi 3 のハードウェアデコーダは使っていないようです。Raspberry Pi 3　で動くようにしてオープンソースとして公開したけど、特にRaspberry Pi 3 に向けて最適化されているというわけではないようです。現時点では。

# 関連

[webOS Open Source Edition をビルドしてみた](https://qiita.com/tetsu_koba/items/0f8685349dfd00f85c17)