Linux」カテゴリーアーカイブ

Windows 10 WSL2 のコンパイル速度比較

Windows 10 May 2020 Update (2004) で WSL2 がリリースされました。

Microsoft: WSL 2 の新機能

I/O が速くなっているらしいので、いつも Android + Termux でテストしている「コンパイル時間の計測」をしてみました。

PC WSL1 WSL2
Core i7-6700K 4.0GHz (4C8T) 40s 29s
Ryzen 7 1800X 3.6GHz (8C16T) 26s 21s

・「WSL1」「WSL2」はビルド時間で単位は秒。値が小さい方が高速
・Windows 10 + WSL (Ubuntu 18.04LTS) clang 8.0 での比較

WSL1 にくらべて WSL2 の方がだいぶ速くなっています。Android の UserLAnd と Termux の関係に似ているかもしれません。

さらに直接 install した Linux と比較してみました。

PC clang WSL1 WSL2 Linux
Core i7-6700K (4C8T) clang 8 40s 29s 27s
Core i7-6700K (4C8T) clang 6 40s 28s 26s

・「WSL1」「WSL2」「Linux」はビルド時間で単位は秒。値が小さい方が高速
・WSL = Windows 10 + WSL (SATA SSD: MX500 500GB)
・Linux = Ubuntu 18.04LTS (SATA SSD: TS256GMTS400)

WSL2 のビルド時間が Linux を直接 install した場合に近くなっています。

なおテストは同じ PC を使っていますが、Windows と Linux で使用している SSD が違うので同一条件になっていません。速度差は OS の違いではなく SSD 性能差の可能性もあります。

以下スマートフォン他との比較

Device OS clang ビルド時間
Ryzen 9 3950X 3.5GHz WSL1 8 10s
Ryzen 7 1800X 3.6GHz WSL2 8 21s
Ryzen 7 1800X 3.6GHz WSL1 8 26s
Core i7-6700K 4.0GHz Ubuntu 18.04 8 27s
Core i7-6700K 4.0GHz WSL2 8 29s
Core i7-4790K 4.0GHz Ubuntu 18.04 8 31s
Google Pixel 3 Snapdragon 845 Termux 8 35s
Core i7-6700K 4.0GHz WSL1 8 40s
Essential Phone PH-1 Snapdragon 835 Termux 8 40s
Google Pixel 3 Snapdragon 845 UserLAnd 8 51s
Essential Phone PH-1 Snapdragon 835 UserLAnd 8 62s
A10-7870K 3.9GHz Ubuntu 18.04 8 69s
Huawei P30 Lite Kirin 710 Termux 9 71s
Huawei P30 Lite Kirin 710 UserLAnd 8 85s
Jetson Nano Tegra X1 Ubuntu 18.04 8 118s
ZenFone AR ZS571KL Snapdragon 821 Termux 8 125s
Raspberry Pi 4 BCM2711 (arm64) Ubuntu 19.10 8 146s
Nexus 5X Snapdragon 808 Termux 8 178s
Raspberry Pi 4 BCM2711 (armv7l) Raspbian 10 8 203s
Raspberry Pi 3 BCM2837 (arm64) Ubuntu 18.04 8 340s

・「ビルド時間」の単位は秒、値が小さい方が高速
・clang = clang の Version (コンパイラの Version によって速度が変わるので注意)

I/O 速度を見ると WSL2 だけで十分な気もしますが、WSL1 の方が手軽で便利な点もあります。例えばネットワークの場合 WSL2 には内部のローカルな IP Address が割り振られます。サーバーを立てて外部の PC からアクセスしたい場合、WSL1 は簡単に実現できますが WSL2 では外から直接見えなくなります。VirtualBox などの仮想マシンと同じで、port forwarding の設定が必要になるようです。

WSL1 同様、WSL2 からも Windows の exe を呼び出すことができました。つまり WSL 上で ssh server を起動しておき、Linux 側の ssh 経由で cmd.exe を実行することもできます。この辺が VirtualBox のような閉じた仮想マシンと異なるところです。

しばらくは使い分けながら併用してみたいと思います。

関連ページ
Compile Benchmark

関連エントリ
4倍速い Ryzen 9 3950X の UE4 コンパイル速度
Jetson Nano / Clang の Version とコンパイル速度の比較
Snapdragon 835 と 845 のコンパイル時間の比較&浮動小数点演算能力
Snapdragon 845 の浮動小数点演算速度
ARM CPU 上の開発環境とコンパイル時間の比較 (2) Pixel 3/UserLAnd
ARM CPU 上の開発環境とコンパイル時間の比較
AMD CPU Ryzen とコンパイル時間の比較 (2)
AMD CPU Ryzen とコンパイル時間の比較
ARM CPU の浮動小数点演算能力まとめ

Jetson Nano / Clang の Version とコンパイル速度の比較

Jetson Nano Developer Kit を入手しました。Jetson Nano は Tegra X1 を搭載した SBC です。各種インターフェースを搭載した I/O ボードがセットになっています。そのため見た目は Raspberry Pi のような印象を受けますが、上に載ってる Compute Module のような小さいカードの方が本体です。

NVIDIA Jetson Nano

Nano は Jetson シリーズの中でも低価格で入手しやすくなっています。その代わり搭載されている Tegra X1 のアーキテクチャは少々古い世代のもので、GPU も GeForce でいえば 900 シリーズの Maxwell に相当します。また同じ X1 を使用している Jetson TX1 や SHILED TV (Android TV) よりも Shader Core 数が半減しています。公式ページに書かれている 472 GFLOPS は fp32 ではなく AI 向け fp16 のものです。

Tegra X1 Device CPU clock Shader GPU clock GPU fp32 GPU fp16
TX1/SHIELD TV A57 1.9GHz 256 sp 1000 MHz 512 GFLOPS 1024 GFLOPS
Jetson Nano A57 1.4GHz 128 sp 922 MHz 236 GFLOPS 472 GFLOPS

Tegra X1 には Cortex-A53 含めて CPU が 8 core 搭載されているのですが、過去の Tegra 同様省電力 core が見えない仕様のようです。8 core 同時稼働ができないため、実質 4 core 相当となっています。

Nano にはパフォーマンス重視の big core A57 が載っているので、同じ Quad core でも Little core のみだった Raspberry Pi 2/3 より CPU 性能は高くなります。ただし最近リリースされた Raspberry Pi 4 では big core (Coretex-A72) に置き換わったため、この点での優位性はなくなりました。

Device CPU core clock IA RAM 価格
Raspberry Pi 2(旧) Cortex-A7 Little 0.9 GHz ARMv7A 1GB $35
Raspberry Pi 2(新) Cortex-A53 Little 0.9 GHz ARMv8.0A 1GB $35
Raspberry Pi 3 Cortex-A53 Little 1.2 GHz ARMv8.0A 1GB $35
Raspberry Pi 3+ Cortex-A53 Little 1.4 GHz ARMv8.0A 1GB $35
Raspberry Pi 4 Cortex-A72 big 1.5 GHz ARMv8.0A 1-4GB $35-55
Jetson Nano DevKit Cortex-A57 big 1.4 GHz ARMv8.0A 4GB $99

似たようなボードのスペックをいくつかまとめてみました。より詳しい表は wiki の方に載せています。メモリ速度に結構違いがあります。

NPU/SBC

Device SoC CPU core clock RAM MEM B/W TPU/GPU
Jetson Nano Tegra X1 A57 x 4 1.4GHz 4GB 25.6GB/s 472 GF@fp16
Coral Dev Board NXPi.MX 8M A53 x 4 1.5GHz 1GB 12.8GB/s 4 TOPS@int
Raspberry Pi 4 BCM2711 A73 x 4 1.5GHz 4GB 9.6GB/s
Raspberry Pi 3+ BCM2837B0 A53 x 4 1.4GHz 1GB 3.6GB/s 28.8 GF@fp32
Dragonboard 410c Snapdragon410 A53 x 4 1.2GHz 1GB 4.2GB/s

OS は Ubuntu Desktop が用意されています。ARM で最初から GPU が有効なものはなかなか触れないので貴重です。OpenGL ES だけでなく OpenGL が使えますし、Vulkan、CUDA にも対応してます。

いつものように ARM 環境でコンパイル速度を調べようとしたのですが、clang の Version によって速度に違いがあることに気が付きました。あらためてデータを取り直してみました。clang の Version が上がるほどビルド速度が遅くなっているようです。

Device v3.5 v3.9 v4.0 v5.0 v6.0 v7.0 v8.0
PC Core i7-4790K 30 33 31
Pixel 3 SDM845 35
Mac i7-3615QM 42
PC A10-7870K 64 69 70 74 79 69
Mac i5-3210M 98
ZenFone3 ZC553KL 97
Chromebook C101PA 96 95
Jetson Nano 108 113 113 118 125 121
PC Celeron J1900 174 189 192 202 216 207
Chromebook 2955U 191 207 216 225 248 231
PC x7-Z8700 274 304 297
Raspberry Pi 3B 148 194 331 351
Raspberry Pi 2B 314 395 752 820

・横軸は clang の Version。数値は秒で値が小さい方が高速。

Windows 上の WSL だと素の Linux より遅くなるため上の表からは除いてあります。wiki の方には WSL 含めたデータを載せています。ストレージ速度など、必ずしも条件が一定ではないので予めご了承ください。

Compile Benchmark

コンパイル時間は core 数や Thread 数が多い方が速くなります。Nano は 8 thread のハイエンドスマートフォンには敵いませんが、RAM も多いし big core なので Raspberry Pi 2/3 より数倍速く、Celeron (Atom) 搭載 PC と比べても半分近い時間でコンパイルが完了しています。

TensorFlow も普通に CUDA で動きます。PC と同じコードがそのまま走るので、メモリ容量の制限はあるものの学習も可能です。TensorFlow をソースからビルドしなおすことで、Python だけでなく C言語 API も使うことができました。

関連ページ
Compile Benchmark
Jetson Nano

関連エントリ
Snapdragon 835 と 845 のコンパイル時間の比較&浮動小数点演算能力
Snapdragon 845 の浮動小数点演算速度
ARM CPU 上の開発環境とコンパイル時間の比較 (2) Pixel 3/UserLAnd
ARM CPU 上の開発環境とコンパイル時間の比較
AMD CPU Ryzen とコンパイル時間の比較 (2)
AMD CPU Ryzen とコンパイル時間の比較
ARM CPU の浮動小数点演算能力まとめ

Android Termux で日本語入力を行う / UserLAnd との併用

普段使っている Note PC よりもハイエンドスマートフォンの方が性能が良いことが判明してから、Android を Note の代わりに活用する方法をいろいろ試しています。主な用途は外出時の議事録などのメモ取りとちょっとしたプログラミングです。

Android 上で root なしに利用できる開発環境として Termux と UserLAnd があります。

UserLAnd は Android 上に PC とほぼ同等の Linux 環境を構築可能で日本語入力もできます。その代わり proot のオーバーヘッドがありファイルアクセスが遅くなっています。また GUI が使えるものの GPU が使われておらず、PC と比べると画面描画は低速です。

Termux はファイルアクセスのオーバーヘッドがなく高速ですがパッケージがあまり多くありません。日本語入力にも非対応。

機能面では UserLAnd だけで済むのですが、速度面で少々難があるので工夫が必要です。下記はライブラリのコンパイル時間の比較です。

Google Pixel 3 (Android 9.0 Pie) Snapdragon 845
実行環境 Compiler Time (秒)
(1) Termux clang-7.0.1 32.6
(2) UserLAnd Debian + Termux VNC clang-7.0.1 34.5
(3) UserLAnd Ubuntu 18.04 SSH clang-6.0.0 72.9
(3) UserLAnd Debian Stretch VNC clang-3.8.1 220.4
(3) UserLAnd Debian Stretch SSH clang-3.8.1 219.0
Essential Phone PH-1 (Android 9.0 Pie) Snapdragon 835
実行環境 Compiler Time (秒)
(1) Termux clang-7.0.1 38.4
(2) UserLAnd Ubuntu + Termux VNC clang-7.0.1 40.5
(2) UserLAnd Debian + Termux VNC clang-7.0.1 41.7
(3) UserLAnd Debian Stretch VNC clang-3.8.1 423.6
(3) UserLAnd Debian Stretch VNC clang-4.0.1 456.9
(3) UserLAnd Ubuntu 18.04 VNC clang-6.0.0 95.6
(3) UserLAnd Arch SSH clang-7.0.1 107.0

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

(1) = Termux のコンソールから直接実行
(2) = UserLAnd から ssh で Termux に login して実行
(3) = UserLAnd 上で直接実行

Termux (1) が一番速く、UserLAnd 経由で Termux を利用した場合 (2) もほぼ速度が落ちずに済んでいます。

Termux と比べると UserLAnd は 2〜12倍くらい遅くなっています。かなりばらつきがあり Debian が極端ですが原因はわかっていません。

UserLAnd は Desktop アプリの利用や日本語入力などの環境として利用して、Termux でできる作業は Termux で行うのが効率良いことがわかります。

上の結果 (2) では Desktop 上の LXTerminal から Termux に ssh 接続していますが、ウィンドウ上の Terminal の描画は遅くなります。パフォーマンスが低いデバイスでは X11/VNC ではなく UserLAnd の SSH から Termux にログインすることをお勧めします。こちらの方が Terminal の描画は高速で、uim-fep の日本語入力が使えるようになります。

● Termux で日本語入力を行う方法

1. UserLAnd に任意の Distribution をインストールして日本語環境を設定
2. Termux 上で sshd を起動
3. ssh で Termux にログイン

● 1. UserLAnd の設定

4通りの方法を wiki にまとめました。

Ubuntu + SSH コンソールでの日本語入力 (uim-mozc)
Debian + SSH コンソールでの日本語入力 (uim-mozc)
Ubuntu + VNC デスクトップでの日本語入力 (fcitx-mozc)
Debian + VNC デスクトップでの日本語入力 (uim-mozc)

その他 UserLAnd 関連はこちら
Android の上の開発環境: UserLAnd

● 2. Termux の設定と sshd の起動

Termux では予め sshd を起動しておく必要があります。手順は下記の通り。ssh でログインするためにはパスワードの設定が必要です。

$ pkg update
$ pkg install openssh
$ passwd
パスワードの設定
$ sshd

● 3. Termux へのログイン

UserLAnd から Termux へのログイン方法。VNC (LXDE desktop) を使う場合は LXTerminal を使ってください。

$ ssh localhost -p 8022

●実際に使用してみて

Snapdragon 845 クラスのスマートフォンでは Ubuntu + VNC + Termux で十分だと感じます。議事録などのメモ用途で使う場合は、Bluetooth Keyboard があれば Note PC 代わりになりますし、外出時のコードの確認にも使えます。

どこでも作業空間を作り出せる Oculus Go も非常に魅力なのですが、VR にパワーが取られてしまい VNC は重くなります。テキストエディタの作業は SSH Console の方をお勧めします。もっとパワーのあるスタンドアロン機種や、ハイエンド機種 + GearVR/Daydream だったらもう少し快適な作業ができるかもしれません。

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

関連エントリ
Android 9.0 と Bluetooth Keyboard による日本語入力
Android で動く Linux 環境 UserLAnd が XServer XSDL に対応
Oculus Go を文章書き&開発マシンにする
UserLAnd とブラウザ
Android 上の開発環境と UserLAnd
OS の中の Linux (WSL/Chrome OS/Android UserLAnd)
ARM CPU 上の開発環境とコンパイル時間の比較 (2) Pixel 3/UserLAnd

OS の中の Linux (WSL/Chrome OS/Android UserLAnd)

いろんな OS の中で Linux 環境が使えるようになってきました。OS の中に同居し、Native なアプリと同時に Linux のソフトウエアも走らせられるようになっています。ハードウエアまるごとエミュレーションする仮想 PC とは異なります。RAM やストレージに境界はなく、カーネルをそのまま共有しつつシステムに間借りする形で動きます。

Windows WSL (Windows Subsystem for Linux)
Chrome OS Linux Apps, Crouton, Android Apps
Android UserLAnd

● Windows 10 WSL

複数の Distribution が用意されており、Microsoft Store からアプリとしてインストールできます。事前に WSL を有効化しておく必要があります。

(1) 設定→ 「アプリと機能」→「プログラムと機能」→「Windows の機能の有効化または無効化」
(2) 「Windows Subsystem for Linux」にチェックを入れて再起動。

● Chrome OS (Chromebook/Chromebox 等)

ChromeOS は Chrome Browser のための Platform です。普段 PC で Chrome ブラウザを使っているなら、Chrome OS に触ると大半の作業がブラウザで事足りることに気が付きます。利用できる Chrome アプリは限られているものの、必要なら Android や Linux アプリを使うことができます。アプリ選択の自由度は意外に高くなっています。

現在 Chrome OS デバイスで Linux を走らせる方法は複数あります。それぞれ複数の Distribution から選ぶことができます。(Linux Apps を除く)

公式に対応した Linux Apps は対応機種がまだ少ないですが、Developer mode に切り替える必要がないので非常に扱いやすくなりました。

インストール&起動方法で分けると下記の 3種類です。

(1) Native Install

 普通の PC と同じように Linux をゼロから install します。Gallium OS 他。

(2) Dualboot (ChrUbuntu)

 カーネルを流用して Linux を起動します。boot 時に選択します。(ChrUbuntu)

(3) Chrome OS と同居

 コンテナとして Chrome OS 上で動きます。Chrome OS と同時利用が可能。

さらに (3) の方法にも複数の選択肢ができました。

1. Crouton : chroot で Linux を install。古くから存在し多くのデバイスで利用可能。

2. Android Apps : Android アプリとして Linux 環境 (UserLAnd 等) を install

3. Linux Apps (crostini) : ChromeOS 公式の Linux 環境

2. および 3. は比較的新しい機種のみ対応しており、古い機種では使うことができません。

なお Crouton は Chrome OS 内に Linux Desktop を表示できますが、X11 の動作モードが 2種類あります。(sudo startsfce4 -X xiwi 等のオプションで切り替え)

・xiwi : Chrome OS のウィンドウの一つとして表示。ソフトウエア描画。

・xorg : 全画面を乗っ取ってしまうがハードウェアアクセラレーション対応。

下記画面は Crouton の xiwi で Linux Desktop を表示したものです。

{image}

GitHub: Crouton
GitHub: ChrUbuntu
Gallium OS

● Android

(UserLAnd) は Android アプリとして Linux 環境を install します。root 無しに利用可能で、複数の Distribution から選ぶことができます。現在は Arch, Debian, Kali, Ubuntu の 4種類用意されているようです。

アプリからは SSH Terminal, VNC の 2種類の接続方法を選ぶことができます。公式サイトにあるように X Server も使えます。

 1. アプリ install
 2. 任意の Distribution を選択 (Debian, Ubuntu 等)
 3. フォルダへのアクセス許可
 4. ユーザー名とパスワードの入力
 5. 利用方法の選択 (SSH or VNC) あとから変更可能
 6. 初回のみ ConnectBot or bVNC Free の install
 7. 6. で install した場合はアプリに戻ってもう一度選択すると起動

VNC 利用時の desktop install 手順。

$ sudo apt update
$ sudo apt upgrade
$ sudo apt install lxde
$ mv ~/.vnc/xstartup ~/.vnc/xstartup.bak
$ cp /usr/bin/startlxde ~/.vnc/xstartup

VNC の解像度変更方法

“~/.vnc/tightvncserver.conf” を作成して下記のように任意の解像度を書き込む。この指定がない場合 1024×768 になっています。

$geometry = "1280x720"

2160×1080 や 1920×1080 等、スマートフォンで実解像度を指定すると小さすぎて文字が読めなくなる可能性があるので注意。↓ は ZenFone AR の画面です。

null

UserLAnd

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

Android/Linux MaruOS その4

MaruOS 0.3 が Release されています。Windows 10 Mobile の Continuum 同様に外部モニタ接続で Linux Desktop が使えるのはもちろん、外部モニタなしでも使えるようになっています。それ以外にも Android 側が 6.0.1 になるなど色々改良されているようです。

maruos08.jpeg

Dashboard は設定画面から呼び出すことが出来ます。

maruos09.jpeg

これでいつでも Linux Desktop の起動と Shutdown が可能です。
Android 側に VNC や ssh client のアプリを入れておけば、端末単体でも Linux アプリケーションを利用することが出来ます。VNC server はデフォルトでは起動していないので、VNC を使う場合でも最初は ssh が必要です。

ただし以前はバグを利用して、端末本体に Native な Desktop 描画が出来ていたのですが、修正されているようです。

関連エントリ
Android/Linux MaruOS その3
Android/Linux MaruOS その2
Nexus 5 に Maru OS を入れてみた