💭

Android上のLinux、Androidの下のLinux

2022/06/12に公開

先日、会社の同僚の若手と話をしていて、「そもそも、AndroidってLinuxの上で動いてるねんで。Linuxの上に皮を被せてスマホやタブレットなどのOSにしたててるんよ。」と言うと、「え、知りませんでした。」と言われて、えー、知らんのん?え、違ったっけ?若手とは言え、技術系の子なのに。。。もしかして、今はすっかり中身が変わってるの?などと思って、わざわざWikipediaで確認しました。

Android (オペレーティングシステム)の「3 構成」の図

ちゃんと、Linuxの上に載っているような階層図がありました。ですよね。記憶違いかと思いました。

そう、GoogleがAndroidを出して来たときに、そんな、汎用OSをベースにケータイなんて作って、(動作が)重たいんちゃうん、って思っていたことを思い出しました。実際、初めてのスマホは動きがもっさりしていましたよね。ま、そのせいだけでもないでしょうけど。

今日、こんな記事を書いているのは、以下の記事を読んだから。

Playストアからダウンロードできるもう1つのAndroid上Linux!「UserLAnd」

ここで、また、え、Androidって元々Linuxの上で動いてるもんやん。なのに、「Android上のLinux!」だって。

ま、ひとまず、自分のスマホにインストールしてみて、ログインはしてみたが、、、スマホ上の文字入力だけで使うにはちょっと...なので、キーボードをつないで試してみようと思って、早速、まだ持っていなかったUSB Type-CのハブをAmazonで購入。

Lemorele USB Type-C ハブ

Androidスマホ(OPPO A5 2020)では認識せず。Androidタブレット(BMAX I10)では認識した。Windows PC(ASUS ZenBook 14)も大丈夫。

あらためて、AndroidタブレットにUserLAndをインストール。

ログイン後、SSHなどインストールして、自宅サーバ(Ubuntu PC)にSSHでログインできた。

ただ、一旦、ディスプレイOFFした後など、USBハブの認識が外れるような感じで、抜き差しなどすると再認識する、というところ。

さて、ここで、NVIDIA Jetson NanoやRaspberry Pi4で動かしたことのあるUnixBenchというベンチマークプログラムを動かしてみる。

$ sudo apt install git make gcc
$ git clone https://github.com/kdlucas/byte-unixbench
$ cd byte-unixbench/UnixBench
$ ./Run

以下のような結果が得られた。

Benchmark Run: Sun Jun 12 2022 06:32:39 - 07:01:24
8 CPUs in system; running 8 parallel copies of tests

Dhrystone 2 using register variables       86757086.8 lps   (10.0 s, 7 samples)
Double-Precision Whetstone                    23534.7 MWIPS (9.7 s, 7 samples)
Execl Throughput                               1126.1 lps   (29.9 s, 2 samples)
File Copy 1024 bufsize 2000 maxblocks        439814.6 KBps  (30.0 s, 2 samples)
File Copy 256 bufsize 500 maxblocks          120459.8 KBps  (30.0 s, 2 samples)
File Copy 4096 bufsize 8000 maxblocks       1112725.1 KBps  (30.0 s, 2 samples)
Pipe Throughput                             1722295.2 lps   (10.0 s, 7 samples)
Pipe-based Context Switching                  92084.9 lps   (10.0 s, 7 samples)
Process Creation                               6454.3 lps   (30.0 s, 2 samples)
Shell Scripts (1 concurrent)                   2141.6 lpm   (60.2 s, 2 samples)
Shell Scripts (8 concurrent)                    324.6 lpm   (61.2 s, 2 samples)
System Call Overhead                          55874.2 lps   (10.0 s, 7 samples)

System Benchmarks Index Values               BASELINE       RESULT    INDEX
Dhrystone 2 using register variables         116700.0   86757086.8   7434.2
Double-Precision Whetstone                       55.0      23534.7   4279.0
Execl Throughput                                 43.0       1126.1    261.9
File Copy 1024 bufsize 2000 maxblocks          3960.0     439814.6   1110.6
File Copy 256 bufsize 500 maxblocks            1655.0     120459.8    727.9
File Copy 4096 bufsize 8000 maxblocks          5800.0    1112725.1   1918.5
Pipe Throughput                               12440.0    1722295.2   1384.5
Pipe-based Context Switching                   4000.0      92084.9    230.2
Process Creation                                126.0       6454.3    512.2
Shell Scripts (1 concurrent)                     42.4       2141.6    505.1
Shell Scripts (8 concurrent)                      6.0        324.6    541.1
System Call Overhead                          15000.0      55874.2     37.2
                                                                   ========
System Benchmarks Index Score                                         726.1

ちなみに、Jetson Nanoでの結果は以下の通り。

Benchmark Run: 日  6月 12 2022 22:12:25 - 22:40:40
4 CPUs in system; running 4 parallel copies of tests

Dhrystone 2 using register variables       54115047.5 lps   (10.0 s, 7 samples)
Double-Precision Whetstone                     5916.0 MWIPS (9.9 s, 7 samples)
Execl Throughput                               2360.1 lps   (29.9 s, 2 samples)
File Copy 1024 bufsize 2000 maxblocks        285262.7 KBps  (30.0 s, 2 samples)
File Copy 256 bufsize 500 maxblocks           74412.0 KBps  (30.0 s, 2 samples)
File Copy 4096 bufsize 8000 maxblocks        841993.5 KBps  (30.0 s, 2 samples)
Pipe Throughput                             1385819.9 lps   (10.0 s, 7 samples)
Pipe-based Context Switching                 158028.7 lps   (10.0 s, 7 samples)
Process Creation                               9089.2 lps   (30.0 s, 2 samples)
Shell Scripts (1 concurrent)                   6724.4 lpm   (60.0 s, 2 samples)
Shell Scripts (8 concurrent)                    941.2 lpm   (60.1 s, 2 samples)
System Call Overhead                        1364102.6 lps   (10.0 s, 7 samples)

System Benchmarks Index Values               BASELINE       RESULT    INDEX
Dhrystone 2 using register variables         116700.0   54115047.5   4637.1
Double-Precision Whetstone                       55.0       5916.0   1075.6
Execl Throughput                                 43.0       2360.1    548.9
File Copy 1024 bufsize 2000 maxblocks          3960.0     285262.7    720.4
File Copy 256 bufsize 500 maxblocks            1655.0      74412.0    449.6
File Copy 4096 bufsize 8000 maxblocks          5800.0     841993.5   1451.7
Pipe Throughput                               12440.0    1385819.9   1114.0
Pipe-based Context Switching                   4000.0     158028.7    395.1
Process Creation                                126.0       9089.2    721.4
Shell Scripts (1 concurrent)                     42.4       6724.4   1585.9
Shell Scripts (8 concurrent)                      6.0        941.2   1568.6
System Call Overhead                          15000.0    1364102.6    909.4
                                                                   ========
System Benchmarks Index Score                                         993.5

タブレット(BMAX I10)のCPUのスペックは以下の通り。

CPU 2x 1.8 GHz - Cortex-A75 6x 1.8 GHz - Cortex-A55
RAM 6GB 32-bit LPDDR4X 12.8 GB/s

Jetsono NanoのCPUのスペックは以下の通り。

CPU 4x 1.43 GHz - Cortex-A57
RAM 4GB 64-bit LPDDR4 25.6 GB/s

まあ、タブレットの場合は、Android OSの上に乗ったLinux環境ということで、Linux NativeなJetson Nanoの方がスコアはよかったということかと思いますが、その割には動いている、ということかもしれません。

今日のところはこのあたりで。

Discussion