Snapdragon 835 (MSM8998) のデータを追加しました。コンパイル時間と VFP Benchmark の結果を載せています。ついでに Oculus Go でもコンパイル時間を調べてみました。(前回1) (前回2)

●コンパイル時間の比較 (Termux+clang)

Smartphone SoC RAM Thread Time 速度比
Pixel 3 Snapdragon 845 4GB 8/8 32 4.2x
Essential Phone Snapdragon 835 4GB 8/8 38 3.6x
Galaxy S6 Edge Exynos 7420 3GB 8/8 77 1.8x
ZenFone AR Snapdragon 821 8GB 4/4 111 1.2x
Nexus 5X Snapdragon 808 2GB 6/6 135 1.0x
Oculus Go Snapdragon 821 3GB 4/4 275 0.5x

・Time (秒) が小さい方が高速。


●浮動小数点演算能力ピーク値 (VFPBenchmark)

Smartphone SoC RAM Thread big/L GFLOPS
Pixel 3 Snapdragon 845 4GB 8/8 84/55 139.3
Essential Phone Snapdragon 835 4GB 8/8 75/59 134.5
Galaxy S6 Edge Exynos 7420 3GB 8/8 56/47 102.6
Nexus 5X Snapdragon 808 2GB 6/6 29/45 74.0
ZenFone AR Snapdragon 821 8GB 4/4 37/25 62.7

・GFLOPS が大きい方が高速。


演算ユニットの数が同じなので浮動小数点演算ピーク値はクロック数に比例した結果となっています。特に Total 値では 835 と 845 の差が少なくほぼ同じくらいの数値です。

それと比べるとコンパイル時間の方には若干差が付きました。CPU 自体も 2 命令 decode の Out-of-order から 3 命令 decode Out-of-order に増えていますので、Snapdragon 845 は big core のクロック差だけでなく IPC も向上しています。ベースとなった CPU core は ARM によると 20% 以上速いとのこと。UserLAnd + Termux を使っていても VNC 経由なのに十分満足できるもので、過去に使った Nexus 7 (2012) や Nexus 5 の Linux とは別物です。

Oculus Go で動く UserLAnd や Termux はどこでも大画面で作業場が作れるので魅力的なのですが、ビルドは残念ながら低速です。同じ Snapdragon 821 の Zenfone AR と比べても 2.5 倍時間がかかりました。使用したのは Oculus TV + Termux です。VR 空間の描画にパフォーマンスが取られているのだと思われます。VR 描画は両眼分必要で、また処理落ちは酔いにつながるため VR 描画が優先されます。


●スマートフォン以外のデバイスを含めたコンパイル時間の比較

他のデバイスとの比較表も更新しました。835 も十分速いです。ただし条件が一定ではないので参考程度にお願いします。特に Windows 10 PC は仮想環境を使っています。

Device SoC/CPU RAM Thread Time
Desktop W10+VMware Ryzen 7 1800X 16GB 16/8 24
Desktop W10+WSL Ryzen 7 1800X 32GB 16/8 26
Desktop W10+VMware Core i7-6700K 16GB 8/4 29
Pixel 3 Snapdragon 845 4GB 8/8 32
Desktop W10+VMware Core i7-4790K 8GB 8/4 35
Essential Phone Snapdragon 835 4GB 8/8 38
Desktop W10+VMware Core i7-4770 8GB 8/4 39
MacMini 2012 Core i7-3615QM 16GB 8/4 43
Galaxy S6 Edge Exynos 7420 3GB 8/8 77
Desktop Linux A10-7870K 8GB 4/2 82
Chromebook C101PA RK3399 4GB 6/6 87
MacBook Pro 2013 Core i5-3210M 8GB 4/2 97
Desktop Linux Celeron J1900 8GB 4/4 108
ZenFone AR Snapdragon 821 8GB 4/4 111
Nexus 5X Snapdragon 808 2GB 6/6 135
Tegra Note 7 Tegra 4 1GB 4/4 148
Note W10+WSL Atom x7-Z8700 4GB 4/4 200
Chromebook C720 Celeron 2955U 4GB 2/2 222
Nexus 9 Tegra K1 2GB 2/2 272
Nexus 7 2013 Snapdragon S4 Pro 2GB 4/4 275
Oculus Go Snapdragon 821 3GB 4/4 275
MeMO Pad 7 ME176C Atom Z3745 1GB 4/4 312

・Time (秒) が小さい方が高速。


関連ページ
VFP Benchmark Log 計測結果まとめ

関連エントリ
Snapdragon 845 の浮動小数点演算速度
ARM CPU 上の開発環境とコンパイル時間の比較 (2) Pixel 3/UserLAnd
ARM CPU 上の開発環境とコンパイル時間の比較
AMD CPU Ryzen とコンパイル時間の比較 (2)
AMD CPU Ryzen とコンパイル時間の比較
ARM CPU の浮動小数点演算能力まとめ
HTC 10 Snapdragon 820 Kyro の浮動小数点演算能力
iPhone SE, Apple A9 の浮動小数点演算速度
Raspberry Pi 3 の速度比較, Cortex-A53 の速度
ARM Cortex-A53 の浮動小数点演算速度とコンパイル時間の比較
2955U vs N3150/J1900/Athlon5350 (コンパイル時間の比較)
iPod touch 6 の浮動小数点演算速度は Core 2 Duo ライン超え
Raspberry Pi 2 で速くなったコンパイル時間の比較
iPad Air 2 (Apple A8X) の浮動小数点演算能力
BayTrail vs Kabini (Celeron J1900 vs Athlon 5350)
コンパイル時間の比較 BayTrail
Atom vs Core i7


root 無しで簡単に Linux を起動できる UserLAndXSDL (X11 Server) との連携に対応しました。SSH, VNC 同様メニューから選べるようになったので試してみました。スマートフォンは ZenFone AR (ZS571KL) Android 7.0 を使っています。

Google Play ストアから UserLAnd をインストール。起動すると Linux Distribution を選択できます。今回の手順は Debian を選択しています。

UserLAnd

Distribution を選択すると共有ストレージへのパーミッションを求めてきますが、これは /sdcard をマウントするため。

ユーザー名とパスワードの設定をします。

UserLAnd

新しく XSDL が選択できるようになっています。

UserLAnd

XServer XSDL をインストールしていない場合はここで Play Store に飛びます。先にインストールしておいた方が良いかもしれません。Bluetooth Keyboard と Bluetooth Mouse も先にペアリングしておくことをお勧めします。

インストールしたらもう一度 UserLAnd から Debian を選択。XSDL が起動し、一瞬切り替わったあと↓この画面で止まったように見えますがそのまま待ってください。

XSDL

暫く待つと起動が終わり、左上に小さいターミナルウィンドウが出ます。止まったように見えたのは背景画像が残ってしまっているため。

XSDL

xterm のウィンドウが小さいのは Native 解像度 (上の例は 2560x1440) で起動しているからです。


● XSDL の解像度変更方法

解像度の変更は XSDL 起動時の下記の画面で、カウントダウン中に画面をタップします。

null

↓選択画面になるので 1280x720 あたりを選択。

null

↓次にフォントスケールの選択。潰れて読めないけど X0.7~X0.4 あたりを選択。いろいろ試して見やすいように調整してください。

null

↓ウィンドウが大きくなりました。

null


● lxde を使う方法

UserLAnd から起動すると twm + xterm の最小限で立ち上がります。Desktop を使うには Script の書き換えが必要でした。

Desktop lxde の install 手順

一旦 SSH でログインしておきます。(Distribution 名長押し→ App Stop → App Info)

$ sudo apt update
$ sudo apt upgrade
$ sudo apt install lxde

下記のファイルを編集します。

/support/startXSDLServer.sh

元の内容
#! /bin/bash

if [[ -z "${DISPLAY}" ]]; then
  DISPLAY=:4721
fi

if [[ -z "${PULSE_SERVER}" ]]; then
  PULSE_SERVER=localhost:4721
fi

if [[ -z "${INITIAL_USERNAME}" ]]; then
  INITIAL_USERNAME="user"
fi

until env DISPLAY=:4721 ; do sleep 1 ; done

nohup twm & echo $! > /tmp/xsdl.pidfile

while [ ! -f /tmp/xsdl.pidfile ]
do
  sleep 1
done

su $INITIAL_USERNAME -c 'xterm -geometry 80x24+0+0 -e /bin/bash --login &'

下記のように書き換える

#! /bin/bash

if [[ -z "${DISPLAY}" ]]; then
  DISPLAY=:4721
fi

if [[ -z "${PULSE_SERVER}" ]]; then
  PULSE_SERVER=localhost:4721
fi

if [[ -z "${INITIAL_USERNAME}" ]]; then
  INITIAL_USERNAME="user"
fi

until env DISPLAY=:4721 ; do sleep 1 ; done

# ここから下を改変
sleep 20

su $INITIAL_USERNAME -c 'startlxde &'
su $INITIAL_USERNAME -c 'xterm -geometry 80x24+0+0 -e /bin/bash --login &'

sleep の部分は適当に調節してください。これで XSDL に切り替えて起動すると、しばらく待ったあとに青い画面から下記のような desktop 画面になります。起動は気長に待ってください。

null

日本語化等の情報はこちらを参照してください。

Hyperでんち: UserLAnd


●いくつかの問題点

・XSDL が Android 9 で動かない。
・lxde 起動には script 書き換えが必要
・Android で物理キーボードのレイアウトに日本語配列を選択していると一部のキーが入力できない

Android 9 Pie では XSDL が restart を繰り返してしまい起動しないので、UserLAnd 上でも選択できないようになっています。


関連ページ
Android の上の開発環境: UserLAnd

関連エントリ
Oculus Go を文章書き&開発マシンにする
UserLAnd とブラウザ
Android 上の開発環境と UserLAnd
OS の中の Linux (WSL/Chrome OS/Android UserLAnd)
ARM CPU 上の開発環境とコンパイル時間の比較 (2) Pixel 3/UserLAnd


Firefox だけでなく Chromium-browser も使えるらしいので使ってみました。ただし --no-sandbox オプションが必要です。(参考にしたページ)

UserLAnd Ubuntu で動く Chromium (Essential Phone PH-1)
null


● Install と起動方法

Debian の場合

$ sudo apt install chromium
$ chromium --no-sandbox

Ubuntu の場合

$ sudo apt install chromium-browser
$ chromium-browser --no-sandbox

2018/01/31 現在、Ubuntu では Firefox が正しく動いておらず起動しても黒い画面のまま固まってしまいます。Chromium が代わりに使えそうです。

Debian では Firefox も問題なく動いています。


● 画面分割

Android 7 以降なら画面分割が可能なので Android のブラウザを併用する方法もあります。

画面分割で Ubuntu と Android の Chrome と併用↓
null

UserLAnd の desktop は VNC でも XServer XSDL (X11) でも Software Rendering なので、速度と安定度を重視するなら画面分割もお勧めです。

Android 9 Pie だと XServer XSDL が restart を繰り返してしまい起動できないようです。Essential Phone と Pixel 3 の両方で確認。VNC は動きます。


関連エントリ
Android 上の開発環境と UserLAnd
OS の中の Linux (WSL/Chrome OS/Android UserLAnd)
ARM CPU 上の開発環境とコンパイル時間の比較 (2) Pixel 3/UserLAnd


Linux だと同期できるオンラインストレージの選択肢があまりありません。ARM だとなおさらで、ARM 向けの公式クライアントが用意されていなかったりします。今まで設定ファイルの共有に Dropbox を使い Mercurial で履歴管理をしていたのですが、arm 機種の Termux/UserLand では代わりの手段が必要になりました。

最近のスマートフォンは内部ストレージも増えているので、手持ちの Android スマートフォンを持ち運べるリポジトリにしてみます。

UserLAnd なら GitBucket もそのまま動きます。簡単に高機能なリポジトリサーバーを実現できますが UserLAnd はファイルアクセスがあまり速くありません。固定のリポジトリなら ssh で十分なので、今回は Termux を使用しました。

termux の ssh については こちら(Termux wiki) を参考にしました。

以降のコマンド表記でプロンプト '$' はすべてスマートフォンの Termux 上の操作になります。プロンプト '>' は PC (Windows/macOS/Linux) 等、他のデバイスからの操作を意味しています。


● Termux に SSH で接続する

$ pkg upgrade
$ pkg install openssh

termux はデフォルトで ssh の Password 認証が有効になっています。

まず termux に password を設定します。

$ passwd

sshd を起動します。

$ sshd

これで ssh で接続できるようになります。ポート番号は 8022 です。

最近の Windows 10 には最初から OpenSSH が含まれているので、PC のコマンドラインから下記のように実行するだけで接続することができます。

> ssh <AndroidIPAddress> -p 8022

もちろん Putty 等の client も使えます。Putty の場合 user name はダミーで何でも OK です。


● Termux に git / mercurial を install する

termux 上で git を install しておきます。

$ pkg install git

Mercurial の場合 termux に pakcage が用意されていませんが、pip を使って install することができます。

$ pkg install python2 python2-dev clang
$ pip2 install mercurial



● Termux 上に repository を作る

リポジトリを termux 上で作るか、または既存のリポジトリを Termux にコピーします。

新規に作る場合任意のフォルダで init。

$ mkdir ~/repository_git
$ cd ~/repository_git
$ git init

$ mkdir ~/repository_hg
$ cd ~/repository_hg
$ hg init


既存のリポジトリをコピーする場合は scp (WinSCP 等) を使うことができます。Git の場合は .git フォルダ、Mercurial の場合は .hg フォルダを Termux にコピーするだけです。他にサーバーがあるなら Termux 上で clone しても構いません。

> scp -r -P 8022 .hg <AndroidIPAddress>:repository_hg/

あとは普通にスマートフォン上のリポジトリにアクセスできます。下記は PC 等他の Device からの操作になります。

> git clone ssh://<AndroidIPAddress>:8022/~/repository_git

> hg clone ssh://<AndroidIPAddress>:8022/repository_hg

git の場合は絶対パスなので HOME 相対には ~ が必要です。mercurial は常に HOME からのパスになるようです。反応が鈍い場合はスマートフォンのロック(スリープ)を解除してみてください。


● Termux に public key 認証でログインする

git / hg の同期時に毎回パスワードを入力するのは手間なので、public key 認証を使ってみます。Windows 10 も Linux 等、他の OS と手順は同じです。

> ssh-keygen

id_rsa.pub をスマートフォンに転送します。このファイルは Windows の場合 C:\Users\<ユーザー名>\.ssh 以下にあります。転送は scp でも良いですし、もっと簡単に USB 接続して直接ファイルコピーしても構いません。

termux 上で共有 storage にアクセスできるようにしておきます。

$ termux-setup-storage

例えば Android の Download フォルダに転送した場合 ~/storage/downloads/id_rsa.pub でアクセスできるようになります。

id_rsa.pub の内容を Termux の authorized_keys に追加します。

$ cd ~/.ssh
$ cat ~/storage/downloads/id_rsa.pub >> authorized_keys
$ chmod 600 authorized_keys

これで git/hg の同期の度に password を毎回打たなくて済むようになりました。


● 使用してみて

バックアップには向かないのであくまで外出時の同期用にしています。設定ファイルだけでなく、個人で使うプロジェクトには十分使えそうです。



関連エントリ
Android 上の開発環境と UserLAnd
OS の中の Linux (WSL/Chrome OS/Android UserLAnd)
ARM CPU 上の開発環境とコンパイル時間の比較 (2) Pixel 3/UserLAnd
Android/Linux MaruOS その4
Nexus 7 上に開発環境をつくる (4) Ubuntu 13.04


Android 上の開発環境のまとめページを作成しました。

Android の上の開発環境

UserLAnd は root 不要で、アプリとして Linux 環境をそのまま Android 上で走らせることができます。Store から install するだけで済み、Windows 10 の WSL のように手軽に扱えます。

Google Play: UserLAnd

ただの 1アプリとしてユーザーモードで走りますが、proot を使うことでほぼ完全な Linux 環境を作り出しているようです。例えば proot の下でファイルを作成すると、隠しファイル .proot-meta-files.* が作られます。この meta-file の中には独自の file mode (644等) と UID/GID が記録されており、user 管理やファイルパーミッションが再現されています。同じように Hard Link を用いると .proot.l2s.* といった管理ファイルが作られています。これは Symbolic Link で代用するための仕組みです。

反面、meta-file があるためファイルアクセスには追加のコストが発生しているようです。以前行ったコンパイル時間のテストを見ても、termux と比べるとビルド速度が落ちていることがわかります。それでも Android 上でほぼ完全な Linux 環境がそのまま動くのは非常に魅力的です。

ARM CPU 上の開発環境とコンパイル時間の比較 (2) Pixel 3/UserLAnd

現在 Arch, Debian, Kali, Ubuntu の 4つの Linux Distribution を選択可能で、それぞれ別のストレージ領域が割り当てられます。SSH を使った Console または VNC を使った Desktop を選ぶことができます。SSH or VNC はいつでも切り替え可能です。

以前は外部アプリとして SSH client が必要でしたが、UserLAnd の新しい Version では SSH Terminal が統合されました。Connect Bot の install が不要になっています。

ZenFone AR の UserLAnd (Debian)
null

以下いくつか設定などのメモ


● Install

UserLAnd アプリを Install したあと、任意の Distribution を選択するだけです。最初に外部ストレージへのアクセス許可と、ログインに使う user name や password の設定が必要です。



● SSH / VNC 切り替え

UserLAnd アプリの Distribution 名を長押しで App Info から設定できます。切り替え時は一旦 UserLAnd の再起動が必要です。Distribution 名を長押しして Stop App で止めてから、さらに UserLAnd アプリを終了して再び起動します。



● Desktop の install 方法

最初に SSH, VNC どちらを選んでも構いません。

sudo apt install lxde

その後 VNC に切り替えます。(一旦止めるのを忘れないように)



● VNC の解像度設定

Debian の場合は ~/.vncrc 、Ubuntu の場合は ~/.vnc/tightvncserver.conf に下記の内容を書き込む。

$geometry = "1280x720"

Smartphone の Native 解像度 (2160x1080, 2560x1440 等) をそのまま指定すると文字が小さすぎるので注意。720p 前後がおすすめです。



・ZenFoenAR (2560x1440)            : $geometry = "1280x720"
・Pixel 3 (2160x1080)              : $geometry = "1440x720"
・Essential Phone PH-1 (2560x1312) : $geometry = "1330x720"



● Keyboard / Mouse

Desktop を使う場合は Buletooth Keyboard / Mouse の併用をお勧めします。Gboard や Google 日本語入力なら物理キーボードのレイアウトを選択できます。Ctrl/Caps/ESC 等の配列変更には106/109ハードウェアキーボード配列変更(+親指Ctrl)がお勧めです。

Google Play: 106/109ハードウェアキーボード配列変更(+親指Ctrl)



● SSH 経由のアクセス

PC 等から SSH 経由でアクセスきます。port は 2022。

$ ssh <AndroidIPADDR> -p 2022

SSH (console) モードでは何もせずそのまま接続できます。VNC mode では下記のように予めサーバーを起動しておく必要があります。

$ sudo /support/startSSHServer.sh



● Android 外部 Storage へのアクセス

/sdcard でアクセスできます。例えば Android でダウンロードしたファイル一覧を見るには下記のようになります。

$ ls /sdcard/Download/



● ブラウザ

2019/01 現在 Ubuntu では Firefox の画面が真っ黒で見えなくなっています。Debian では動いています。Android 7 以降なら画面分割できるので、Android のブラウザを併用する方法もあります。



● 自分自身への adb 接続

Android を Developer mode にしたあと一旦 PC に USB 接続して adb で tcpip に切り替えておきます。

PC 上で "adb tcpip 5555" を実行。

これで Android (UserLAnd) 上では adb で自分自身が "emulator-5554" として見えるようになります。

$ sudo apt install android-tools-adb
$ adb devices



● 日本語入力

SSH 等の Console では uim-fep, uim-mozc が使えます。下記手順は Ubuntu の場合。

$ sudo apt isntall language-pack-ja
$ sudo update-locale LANG=ja_JP.UTF-8
$ sudo dpkg-reconfigure tzdata
$ sudo apt install uim-fep uim-mozc

ファイル ~/.uim を作成 (任意)

(define default-im-name 'mozc)
(define-key generic-on-key? '("<Control> " "<Control>g"))
(define-key generic-off-key? '("<Control> " "<Control>g"))

起動方法

$ export LANG=ja_JP.UTF-8
$ uim-fep


上の設定例では Ctrl + SPACE または Ctrl+G で入力モードを切り替えています。なお Android 9 Pie では Android 側で Ctrl + SPACE が使われており Console への入力ができないようです。使えない場合は代わりに Ctrl + @ を試してみてください。Android 7 では Ctrl + SPACE が使えました。


Desktop の場合。下記手順は Debian の場合。

$ sudo apt install lxde
$ sudo apt install task-japanese
$ sudo apt install task-japanese-desktop
$ sudo apt isntall fonts-takao
$ sudo dpkg-reconfigure tzdata
$ sudo dpkg-reconfigure locales

一旦 UserLAnd 再起動。

Debian streatch には mozc の arm64 が無いのでそのままではインストールできません。下記ページを参考にさせていただきました。
 ・matoken's meme: Debian, Ubuntu で 上流のパッケージを借りてくる

上のページを参考に buster を追加してから

$ apt install uim-mozc

入力切り替えキーの設定は Desktop Menu から「設定→入力メソッド→全体キー設定」。Terminal は LXTerminal を使用。

日本語設定の参考にしたページ
 ・WSLのUbuntu環境を日本語化する
 ・uim-fepとuim-anthyの使い方と設定方法
 ・WSLのDebian環境を日本語化する
 ・Debian, Ubuntu で 上流のパッケージを借りてくる



● 他の Distribution ファイルへのアクセス

ストレージ領域は /data/data/tech.ula/files/ 以下にあります。Filesystem を作るごとに /data/data/tech.ula/files/1 ~ と番号が割り振られています。例えば Debian の設定を書き換えてうまく起動しなくなった場合、Ubuntu から直接ファイルを修正することが可能です。

ただし他のストレージでは proot meta-file が直接見えてしまうので、meta-file に矛盾しない修正に留めておいた方が良いでしょう。ファイル内容の修正だけなら問題ありません。



● PC の X11 server に直接接続

VNC の場合は事前に UserLAnd 上で SSH Server を起動しておいてください。

Windows の場合は何らかの X11 server を起動しておきます。Microsoft Store にある X410 や VcXsrv 等。PC から (Windows の場合は WSL を想定) 下記のように SSH 接続します。

$ export DISPLAY=localhost:0.0
$ xhost +<AndroidIPAddress>
$ ssh -Y <AndroidIPAddress> -p 2022
$ xterm



関連エントリ
OS の中の Linux (WSL/Chrome OS/Android UserLAnd)
ARM CPU 上の開発環境とコンパイル時間の比較 (2) Pixel 3/UserLAnd
Android/Linux MaruOS その4
Nexus 7 上に開発環境をつくる (4) Ubuntu 13.04


| 次のページ(日付が古い方向)>>