ポートフォワードの経路で、Uターン NATとかヘアピンNATが使えないルータの場合のあれこれ

先日、以下のように困っていました。

Termuxのapache2+php+mariadbのチューニング前のwordpressの速度とか
::
まぁ、速度的なことより困っていることがあります。それは、ローカルのマシンから、termux上で動作しているwordpressにグローバルIPでアクセスできないことです。この場合、ルータの管理画面にアクセスしちゃうんで、どうしようかなと。こういうのなんていうんでしたっけか? とにかく、今の拠点のルータ(PR-400KI)は、内側ネットワークから外側のグローバルアドレスにアクセスしたものを、変換(最終的にサーバのプライベートアドレスに変換)してくれないのです。

これ、言葉で書くとよくわかりませんが、どんな問題かというと以下のようになります。

こういう表現として、UターンNATとか、ヘアピンNATとか呼ぶようです。これが出来るルータとできないルータがあり、NTTから借りているルータではできませんでした。いろいろ解決方法があるとは思いますが、一番簡単なのは、クライアントPCをVPNで外部のネットワークからアクセスさせる方法です。つくば大学のVPN Gateを使えば簡単に解決できますが、インターネット経路となりいまいちです。プレイベート間の通信なのでリバースプロキシを経由する方法が良さそうです。ポート変換がなければ、hosts を書き換えるか、内部DNSを立ち上げればいいのですが、今回の場合は、スマホサーバで提供しているポートは8080です。80と8080を対応付ける必要があり、hosts だけでは無理なので、リバースプロキシを通して、アクセスしてみることにします。

 ブログの更新は、クライアントPCからしか行わないのでこのPC中に設置してみました。もちろんリバースプロキシを分離して、内部DNSを立ち上げれば、理論上は何台でも違うポートとIPを使って好きなドメインでアクセスできます。そのうち、IoTデバイスとか、スマホサーバでクラスタリングとかロードバランサーとか使い出したら内部DNSやリバースプロキシは欲しくなってくるのですが、それはその時にまた考えることにします。

 ということで、クライアントにリバースプロキシを作って、スマホサーバの8080ポートで提供されているWordPress にアクセスしてみることにします。幸い、クライアントはMacなので nginx とかで簡単に作れます。

Macでリバースプロキシをnginxで作る

経路のイメージはこんな感じでしょうか。まずは、nginx を入れます。

$ brew install nginx

起動と再起動、停止は以下のようにします。

・起動
sudo nginx
・再起動 sudo nginx -s reload
・停止
$ sudo nginx -s stop

設定を以下のように書き換えます。server_nameや、proxy_passのIPやポートなど読み替えて書き換えてみてください。

/usr/local/etc/nginx/nginx.conf
::
worker_processes 1;
error_log /usr/local/var/log/nginx/error.log;

events {
  worker_connections  1024;
}

http {
  # This should be in the same directory as this conf
  # e.g. /usr/local/etc/nginx
  include       mime.types;
  default_type  application/octet-stream;
  
  # Note this log_format is named 'main', and is used with the access log below
  log_format   main 'remote_addr -remote_user [time_local]status '
    '"request"body_bytes_sent "http_referer" '
    '"http_user_agent" "http_x_forwarded_for"';

  sendfile        on;
  keepalive_timeout  65;

  # Without this I got this error: 'upstream sent too big header
  # while reading response header from upstream'
  proxy_buffer_size   128k;
  proxy_buffers   4 256k;
  proxy_busy_buffers_size   256k;

  server {
      listen 80;
      server_name jh.gpl.jp;
      proxy_set_header    Hosthost;
      proxy_set_header    X-Real-IP    remote_addr;
      proxy_set_header    X-Forwarded-Hosthost;
      proxy_set_header    X-Forwarded-Server    http_host;
      proxy_set_header    X-Forwarded-Forproxy_add_x_forwarded_for;
      access_log /usr/local/var/log/nginx/reverse-proxy.access.log  main;

      location / {
          proxy_pass         http://192.168.1.38:8080;
      }
  }
}

hosts を書き換えます。

$ cat /etc/hosts
::
127.0.0.1 jh.gpl.jp

nginx を再起動して、ブラウザでドメインに対してアクセスすればOKです。

ちなみに、wp-config.php に以下を追記すると、接続元が192.168.1.26 の時だけWordPress のドメイン名が www.gpl.jp に書き換わります。もちろん、アクセスするクライアントのhosts は書き換える必要があります。

if( $_SERVER['REMOTE_ADDR'] == '192.168.1.26' ){
    define('WP_HOME','http://www.gpl.jp');
    define('WP_SITEURL','http://www.gpl.jp');
}

ということで、macos で簡単にリバースプロキシーを立ち上げて、内部ネットワークの違うポートで提供されているWordPress にアクセスする方法でした。

Lan内部のスマホからもアクセスしたい場合は、内部DNSをDHCPで配布して、リバースプロキシーと対応付けしないとだめですので、完璧を求めるならそれらが必要です。そのうち、作る機会があれば紹介したいなと思います。

Termuxのapache2+php7+mariadb10 環境でwordpressの表示スコア

とりあえず、1つの指標としてメモしておくことにします。まず、改善結果から。データ量は、今見ているこのブログの過去記事、約400件のデータでテンプレートは、Hew です。TOPの表示記事数は3です。スマホ側は、UmidigiF2にapache2+php7+mariadb10の環境となります。ClassicPressではなく、WordPress最新5.5.1です。

WebPageTest_Test_Details_-_Tokyo___jh_gpl_jp__-_09_06_20_18_04_20

改善前は以下です。

WebPageTest_Test_Details_-_Tokyo___jh_gpl_jp__-_09_05_20_15_15_05

2.2秒くらいから、1.3秒くらいまで改善しました。これは、キャッシュ化の効果です。キャッシュさせるのは、何がいいのか迷いましたが一番シンプルそうな、「Simple Cache」というのを使いました。

プラグイン_‹_JunkHack_—_WordPress

Jetpack の全ての機能を試していませんが、とりあえずは動いている感じです。設定も以下のように単純です。手動でのキャッシュ削除は設定画面の2箇所から可能です。

シンプルキャッシュ‹JunkHack_—_WordPress

nginx_1.19.2 と、php-fpm_7.4.9 の組み合わせでも確認してみたいですね。

Termuxパッケージ安定板
https://grimler.se/termux-packages-24/arm/

nginxの1.19.2 はオフィシャル側は 2020/08/11 に公開していて、termux 側は、8/18 なんでちゃんとメンテナンスされているようです。

とりあえず、apacheのhttpd.confのパッチは以下です。apache 2.4.46 のデフォルト設定ファイルとの差分です。

--- httpd.conf.org	2020-08-09 07:55:34.000000000 +0900
+++ httpd.conf	2020-09-06 01:56:57.560924026 +0900
@@ -63,8 +63,8 @@
 # Example:
 # LoadModule foo_module modules/mod_foo.so
 #
-#LoadModule mpm_prefork_module libexec/apache2/mod_mpm_prefork.so
-LoadModule mpm_worker_module libexec/apache2/mod_mpm_worker.so
+LoadModule mpm_prefork_module libexec/apache2/mod_mpm_prefork.so
+#LoadModule mpm_worker_module libexec/apache2/mod_mpm_worker.so
 LoadModule authn_file_module libexec/apache2/mod_authn_file.so
 #LoadModule authn_dbm_module libexec/apache2/mod_authn_dbm.so
 #LoadModule authn_anon_module libexec/apache2/mod_authn_anon.so
@@ -88,7 +88,7 @@
 #LoadModule cache_module libexec/apache2/mod_cache.so
 #LoadModule cache_disk_module libexec/apache2/mod_cache_disk.so
 #LoadModule cache_socache_module libexec/apache2/mod_cache_socache.so
-#LoadModule socache_shmcb_module libexec/apache2/mod_socache_shmcb.so
+LoadModule socache_shmcb_module libexec/apache2/mod_socache_shmcb.so
 #LoadModule socache_dbm_module libexec/apache2/mod_socache_dbm.so
 #LoadModule socache_memcache_module libexec/apache2/mod_socache_memcache.so
 #LoadModule socache_redis_module libexec/apache2/mod_socache_redis.so
@@ -109,7 +109,7 @@
 #LoadModule substitute_module libexec/apache2/mod_substitute.so
 #LoadModule sed_module libexec/apache2/mod_sed.so
 #LoadModule charset_lite_module libexec/apache2/mod_charset_lite.so
-#LoadModule deflate_module libexec/apache2/mod_deflate.so
+LoadModule deflate_module libexec/apache2/mod_deflate.so
 LoadModule mime_module libexec/apache2/mod_mime.so
 LoadModule log_config_module libexec/apache2/mod_log_config.so
 #LoadModule log_debug_module libexec/apache2/mod_log_debug.so
@@ -144,7 +144,7 @@
 #LoadModule session_dbd_module libexec/apache2/mod_session_dbd.so
 LoadModule slotmem_shm_module libexec/apache2/mod_slotmem_shm.so
 #LoadModule slotmem_plain_module libexec/apache2/mod_slotmem_plain.so
-#LoadModule ssl_module libexec/apache2/mod_ssl.so
+LoadModule ssl_module libexec/apache2/mod_ssl.so
 #LoadModule dialup_module libexec/apache2/mod_dialup.so
 #LoadModule http2_module libexec/apache2/mod_http2.so
 #LoadModule lbmethod_byrequests_module libexec/apache2/mod_lbmethod_byrequests.so
@@ -168,7 +168,7 @@
 </IfModule>
 #LoadModule dav_fs_module libexec/apache2/mod_dav_fs.so
 #LoadModule dav_lock_module libexec/apache2/mod_dav_lock.so
-#LoadModule vhost_alias_module libexec/apache2/mod_vhost_alias.so
+LoadModule vhost_alias_module libexec/apache2/mod_vhost_alias.so
 LoadModule negotiation_module libexec/apache2/mod_negotiation.so
 LoadModule dir_module libexec/apache2/mod_dir.so
 #LoadModule imagemap_module libexec/apache2/mod_imagemap.so
@@ -176,7 +176,7 @@
 #LoadModule speling_module libexec/apache2/mod_speling.so
 LoadModule userdir_module libexec/apache2/mod_userdir.so
 LoadModule alias_module libexec/apache2/mod_alias.so
-#LoadModule rewrite_module libexec/apache2/mod_rewrite.so
+LoadModule rewrite_module libexec/apache2/mod_rewrite.so
 
 <IfModule unixd_module>
 #
@@ -242,8 +242,10 @@
 # documents. By default, all requests are taken from this directory, but
 # symbolic links and aliases may be used to point to other locations.
 #
-DocumentRoot "/data/data/com.termux/files/usr/share/apache2/default-site/htdocs"
-<Directory "/data/data/com.termux/files/usr/share/apache2/default-site/htdocs">
+#DocumentRoot "/data/data/com.termux/files/usr/share/apache2/default-site/htdocs"
+DocumentRoot "/data/data/com.termux/files/home/htdocs"
+#<Directory "/data/data/com.termux/files/usr/share/apache2/default-site/htdocs">
+<Directory "/data/data/com.termux/files/home/htdocs">
     #
     # Possible values for the Options directive are "None", "All",
     # or any combination of:
@@ -256,14 +258,14 @@
     # http://httpd.apache.org/docs/2.4/mod/core.html#options
     # for more information.
     #
-    Options Indexes FollowSymLinks
+    Options FollowSymLinks
 
     #
     # AllowOverride controls what directives may be placed in .htaccess files.
     # It can be "All", "None", or any combination of the keywords:
     #   AllowOverride FileInfo AuthConfig Limit
     #
-    AllowOverride None
+    AllowOverride All
 
     #
     # Controls who can get stuff from this server.
@@ -276,7 +278,7 @@
 # is requested.
 #
 <IfModule dir_module>
-    DirectoryIndex index.html
+    DirectoryIndex index.php index.html
 </IfModule>
 
 #
@@ -529,3 +531,22 @@
 SSLRandomSeed connect builtin
 </IfModule>
 
+LoadModule php7_module libexec/apache2/libphp7.so
+<FilesMatch \.php
gt;
 +   SetHandler application/x-httpd-php
 +</FilesMatch>
 +<IfModule dir_module>
 +    DirectoryIndex index.php
 +</IfModule>
 +
 +<IfModule mod_deflate.c>
 +    DeflateCompressionLevel 1
 +    <IfModule mod_filter.c>
 +        FilterDeclare COMPRESS
 +        FilterProvider COMPRESS DEFLATE "%{CONTENT_TYPE} =~ m#^text/#i"
 +        FilterProvider COMPRESS DEFLATE "%{CONTENT_TYPE} =~ m#^application/(atom\+xml|javascript|json|rss\+xml|xml|xhtml\+xml)#i"
 +        FilterProvider COMPRESS DEFLATE "%{CONTENT_TYPE} =~ m#^image/(svg\+xml|vnd\.microsoft\.icon)#i"
 +        FilterChain COMPRESS
 +        FilterProtocol COMPRESS DEFLATE change=yes;byteranges=no
 +    </IfModule>
 +</IfModule>

パッチの適用は上記をコピペしてp.txt などに保存、httpd.conf に以下のように patchしてください。

$ patch -u httpd.conf < p.txt

成功すれば、patching file httpd.conf のような表示となります。

mariadb のチューニングとかはやってないです。PHPは、php.ini  に以下のように記載してあります。

$ cat /data/data/com.termux/files/usr/lib/php.ini
[PHP]

upload_max_filesize = 64M
post_max_size = 64M
memory_limit = 64M

結構、スマホでも動くなー、いけそうだなーっていう感じです。

Termuxのapache2+php+mariadbのチューニング前のwordpressの速度とか

さて、今回はメモ程度ですが スマホUMIDIGI F2に、termuxでapache2とphp7とmariadb10を入れた環境にWordPress代替えのClassicPressを入れて動作させてみました。いろいろ課題が見えて来たのでメモしておきます。まずは、どのくらいの速度で表示されるか、視覚的に見ると以下になります。約1.8秒です。

WebPageTest_-_Visual_Comparison_-_Aug_31__2020___jh_gpl_jp_

 

これは、後ほど出て来ますが https://www.webpagetest.org/ でのテスト結果です。ちょっと遅いですよね。まぁ、しかしスマホで動作していると思えば十分に速いかもしれません。

まだ設定は未調整ですがhttp接続(SSLじゃない80接続)でのベンチマークです。コマンドラインでのapache ab テストもやってみました。同時に100ユーザが、1ユーザーあたり10リクエストを発行した場合を想定しています。これは、一般的なhtmlアクセスに対するjsやcssや画像のアクセスかなと思います。まぁ、このブログはそんな人気じゃないので同時に10人くらいのアクセスで十分かもですがw

サーバ側の状態は、ClassicPressをデフォルトで入れた状態です。テーマは、ClassicPressのTwentySixteenです。画像は出ない状態で全部テキストです。htmlやcssやjsやfontなど全部で、278 KBです。

まず、ローカルのリモート(macos)から。

$ ab -n 1000 -c 100 http://192.168.1.38:8080/

Server Software:        Apache/2.4.46
Server Hostname:        192.168.1.38
Server Port:            8080

Document Path:          /
Document Length:        15825 bytes

Concurrency Level:      100
Time taken for tests:   78.390 seconds
Complete requests:      1000
Failed requests:        0
Total transferred:      16123000 bytes
HTML transferred:       15825000 bytes
Requests per second:    12.76 [#/sec] (mean)
Time per request:       7839.037 [ms] (mean)
Time per request:       78.390 [ms] (mean, across all concurrent requests)
Transfer rate:          200.86 [Kbytes/sec] received

Connection Times (ms)
              min  mean[+/-sd] median   max
Connect:        1    4  15.5      1     410
Processing:   490 7663 5599.2   6405   30174
Waiting:      461 7317 5486.8   5962   30109
Total:        494 7667 5599.1   6407   30175

Percentage of the requests served within a certain time (ms)
  50%   6407
  66%   7733
  75%   9622
  80%  10952
  90%  16804
  95%  19520
  98%  24822
  99%  26571
 100%  30175 (longest request)

次は、GCPの東京リージョンからです。この経路は80←→8080にポート転送していますが、その差は感じない程度ですね。termux は、80ポートや443ポートでは運用できない制限がありますので、ルータで変換します。

$ ab -n 1000 -c 100 http://jh.gpl.jp/

Server Software: Apache/2.4.46
Server Hostname: jh.gpl.jp
Server Port: 80

Document Path: /
Document Length: 15742 bytes

Concurrency Level: 100
Time taken for tests: 78.813 seconds
Complete requests: 1000
Failed requests: 0
Total transferred: 16040000 bytes
HTML transferred: 15742000 bytes
Requests per second: 12.69 [#/sec] (mean)
Time per request: 7881.291 [ms] (mean)
Time per request: 78.813 [ms] (mean, across all concurrent requests)
Transfer rate: 198.75 [Kbytes/sec] received

Connection Times (ms)
min mean[+/-sd] median max
Connect: 21 190 525.8 51 3058
Processing: 707 7470 4143.1 7264 22358
Waiting: 605 7100 4070.2 6790 22218
Total: 804 7661 4221.0 7341 22409

Percentage of the requests served within a certain time (ms)
50% 7341
66% 8008
75% 8490
80% 9059
90% 14244
95% 16246
98% 20310
99% 21250
100% 22409 (longest request)

次はtermuxが動作しているローカルからです。

$ ab -n 1000 -c 100 http://192.168.1.38:8080/

Server Software: Apache/2.4.46
Server Hostname: 192.168.1.38
Server Port: 8080

Document Path: /
Document Length: 15825 bytes

Concurrency Level: 100
Time taken for tests: 77.274 seconds
Complete requests: 1000
Failed requests: 0
Total transferred: 16123000 bytes
HTML transferred: 15825000 bytes
Requests per second: 12.94 [#/sec] (mean)
Time per request: 7727.448 [ms] (mean)
Time per request: 77.274 [ms] (mean, across all concurrent requests)
Transfer rate: 203.76 [Kbytes/sec] received

Connection Times (ms)
min mean[+/-sd] median max
Connect: 1 1428 791.4 1531 3535
Processing: 562 6046 2311.5 5785 16840
Waiting: 515 4357 2249.9 3816 16085
Total: 649 7474 2189.4 7356 17166

Percentage of the requests served within a certain time (ms)
50% 7356
66% 8082
75% 8376
80% 8620
90% 9861
95% 11707
98% 12754
99% 13209
100% 17166 (longest request)

ちなみに、ローカルのリモート(macos)からしか試していませんが、スマホの接続をWiFi接続を5Ghzではなく、2.4Ghzで接続した場合は以下でした。これ有線だとどうなるんでしょうかね。type-c と有線イーサネットは1つありますが、繋げても接続できなかったのでまだテストしていません。

Server Software: Apache/2.4.46
Server Hostname: 192.168.1.38
Server Port: 8080

Document Path: /
Document Length: 15825 bytes

Concurrency Level: 100
Time taken for tests: 84.280 seconds
Complete requests: 1000
Failed requests: 0
Total transferred: 16123000 bytes
HTML transferred: 15825000 bytes
Requests per second: 11.87 [#/sec] (mean)
Time per request: 8427.984 [ms] (mean)
Time per request: 84.280 [ms] (mean, across all concurrent requests)
Transfer rate: 186.82 [Kbytes/sec] received

Connection Times (ms)
min mean[+/-sd] median max
Connect: 1 11 13.3 5 135
Processing: 491 7692 4699.6 7107 25513
Waiting: 443 7301 4611.2 6657 25511
Total: 493 7703 4700.0 7139 25514

Percentage of the requests served within a certain time (ms)
50% 7139
66% 8172
75% 9108
80% 10369
90% 14578
95% 18137
98% 20897
99% 22101
100% 25514 (longest request)

多少、劣るようですがそこまで気にしなくてもいいかもです。

それよりも、最初のhtmlのロードが長いです。以下は一番最初のビデオの状態を詳細にみた結果です。まだ圧縮転送やキャッシュは効かせていませんが、マシン性能が出る部分ですかね。ちょっと遅いです。NGINXだともう少し速くなるかもですので、また試してみたいと思います。

貼り付けた画像_2020_08_31_1_41

このWEBページのindex相当になるファイルはサイズ、15kb程度です。例えば、phpinfoのページを読んだ結果は以下です。このページは、82.0 KBありますが、0.4秒で終わっています。

WebPageTest_Test_Details_-_Tokyo___jh_gpl_jp_info_php_-_08_31_20_01_45_34

つまり、mariadbにアクセスしたりphpでのwordpressの処理時間がかかっているから遅くなっているということになりますね。

例えば、これは以前検討していたマシンでの結果ですが、htmlのロードは0.2秒以内に終わっています。UnixBenchが7000近く出るマシンでネットワークもIPv4→IPv6トンネルなので、比較するとあれですが、どこまで近づけるかですね。

WebPageTest_Test_Details_-_Tokyo___hoge_gpl_jp_-_03_16_20_02_24_59

まぁ、速度的なことより困っていることがあります。それは、ローカルのマシンから、termux上で動作しているwordpressにグローバルIPでアクセスできないことです。この場合、ルータの管理画面にアクセスしちゃうんで、どうしようかなと。こういうのなんていうんでしたっけか? とにかく、今の拠点のルータ(PR-400KI)は、内側ネットワークから外側のグローバルアドレスにアクセスしたものを、変換(最終的にサーバのプライベートアドレスに変換)してくれないのです。

プライベートアドレスだと、wordpressの設定で、グローバルのIPがマッピングされているドメイン名の設定になっているので(ルータで80と8080をポート転送してwordpressを運用)、リダイレクトされてアクセスできないんですよね。これはwordpress の仕様みたいなので回避不可能かなと。なんか言葉で書くとわかりにくいですね。今度、時間があるときに図解で問題点を明確にしたいです。

今の所、2案あります。1つは、マルチセッションを貼って違う光プロバイダーからアクセスさせる方法。もう一つは、リバースプロキシを経由させる方法です。

スマホで非ルートで動かすtermux は、IPテーブルとかルーティングとかいじれないので工夫が必要ですね。

ネットワークはあんまり得意じゃないんで、もっといい解決方法があるかもしれませんが。

衝撃価格7500円でゲットしたRedmi Note 9SにLinux入れてUnixBenchを計測

いやー、もう8月も終わりに近づてきましたね〜!
皆さんはどっか行きましたか? 自分はお盆休みもバイクをモリワキカラーに塗っていましたよ。どこにも行ってないので、そろそろプチ旅行したいです。バイクに乗りたいですね。

さて、今回はOCNモバイルONEの乗り換えキャンペーンで激安7500円で新品本体をゲットしましたRedmi Note 9S にUnixBechを走らせてみたいと思います。
AndroidスマホなのにLinux上で走るUnixBenchをどうやって動かすってことですが、これは、TermuxというAndroidターミナルエミュレーター+Linux環境構築アプリがあります。この環境で、UnixBenchをビルドしてスコアを計測してみました。antutuは28万くらいらしいのですが、UnixBenchはどのくらい出るでしょうか。ちなみに、UmidigiF2は、前回

シングルCPU・・・スコア406.2
8CPU・・・・・・スコア1312.3

のスコアが出ました。
まだシステムのアップデートする前なんで、少しkernelバージョンは変わるかもしれませんが、計測時のスマホの状態を貼っておきます。Redmi Note 9Sは、CPUがUmidigiF2よりも速いので、1500くらいのスコアが出るかもなーと思っていますが、さてどのくらいになるでしょうか?

貼り付けた画像_2020_08_28_22_39

まぁ、前置きが長かったのですが、やってることは大したことはないです。まずはGoogleStoreから、以下のアプリを入れておきます。これなんて読むんですかね? たーむゆーえっくす とか、たーむっくす とかかな?

Termux_-_Google_Play_のアプリ

openssh を入れてリモートから作業します。スマホ画面では、最低限以下を入れて起動しておきます。

pkg install openssh -y && sshd

WiFi アドレスを確認しておきます。

ip a | more
または、
ip a | grep inet | grep wlan
もっとズバリIPだけ取り出したい場合は、
ip -4 a | grep inet | grep wlan0 | grep -oP ‘[0-9]+\.[0-9]+\.[0-9]+\.[0-9]+(?=\/)’

鍵作るなり、パスワード設定するなりしてリモートからログインします。今回は、passwd してパスワード認証でリモートログイン。

ssh 192.168.xxx.xxx -p 8022

デフォルトsshポートは、8022 です。では、UnixBenchのビルドに必要なツールを入れましょう。

pkg install vim wget clang make perl git pkg-config -y

あとは前回と同様、Makefileを少し修正して ./Run です。

git clone https://github.com/kdlucas/byte-unixbench
cd byte-unixbench/UnixBench
cp -p Makefile Makefile.org
vi Makefile
※以下部分を削除してね。(-march=native)

$ diff -u Makefile.org Makefile
--- Makefile.org	2020-08-28 23:39:45.550203419 +0900
+++ Makefile	2020-08-28 23:40:56.800203392 +0900
@@ -95,7 +95,7 @@
     #   - Supported    : x86, x86_64, ARM, AARCH64, etc..
     #   - Not Supported: RISC-V, IBM Power, etc...
     ifneq ($(ARCH),$(filter $(ARCH),ppc64 ppc64le))
-        OPTON += -march=native -mtune=native
+        OPTON += -mtune=native
     else
         OPTON += -mcpu=native -mtune=native
     endif

./Run
::

金曜の夜は眠いです、、、寝そうになりましたがベンチマークが終わったので貼り付け。

CPU:Qualcomm Snapdragon 720G
Hardware : Qualcomm Technologies, Inc SM7125

========================================================================
   BYTE UNIX Benchmarks (Version 5.1.3)

   System: localhost: Android
   OS: Android -- 4.14.117-perf-g2d34faf -- #1 SMP PREEMPT Wed May 13 01:02:15 CST 2020
   Machine: aarch64 (unknown)
   Language: en_US.utf8 (charmap=, collate=)
   23:41:17 up 12:11,  load average: 0.00, 0.00, 0.00; runlevel 

------------------------------------------------------------------------
Benchmark Run: Fri Aug 28 2020 23:41:17 - 00:09:22
8 CPUs in system; running 1 parallel copy of tests

Dhrystone 2 using register variables       32061907.1 lps   (10.0 s, 7 samples)
Double-Precision Whetstone                     6143.9 MWIPS (10.0 s, 7 samples)
Execl Throughput                                267.0 lps   (29.9 s, 2 samples)
File Copy 1024 bufsize 2000 maxblocks        630326.5 KBps  (30.0 s, 2 samples)
File Copy 256 bufsize 500 maxblocks          205587.3 KBps  (30.0 s, 2 samples)
File Copy 4096 bufsize 8000 maxblocks       1214283.1 KBps  (30.0 s, 2 samples)
Pipe Throughput                             1227952.4 lps   (10.0 s, 7 samples)
Pipe-based Context Switching                 105358.2 lps   (10.0 s, 7 samples)
Process Creation                                594.4 lps   (30.0 s, 2 samples)
Shell Scripts (1 concurrent)                   1306.7 lpm   (60.0 s, 2 samples)
Shell Scripts (8 concurrent)                    311.0 lpm   (60.1 s, 2 samples)
System Call Overhead                        1131049.8 lps   (10.0 s, 7 samples)

System Benchmarks Index Values               BASELINE       RESULT    INDEX
Dhrystone 2 using register variables         116700.0   32061907.1   2747.4
Double-Precision Whetstone                       55.0       6143.9   1117.1
Execl Throughput                                 43.0        267.0     62.1
File Copy 1024 bufsize 2000 maxblocks          3960.0     630326.5   1591.7
File Copy 256 bufsize 500 maxblocks            1655.0     205587.3   1242.2
File Copy 4096 bufsize 8000 maxblocks          5800.0    1214283.1   2093.6
Pipe Throughput                               12440.0    1227952.4    987.1
Pipe-based Context Switching                   4000.0     105358.2    263.4
Process Creation                                126.0        594.4     47.2
Shell Scripts (1 concurrent)                     42.4       1306.7    308.2
Shell Scripts (8 concurrent)                      6.0        311.0    518.3
System Call Overhead                          15000.0    1131049.8    754.0
                                                                   ========
System Benchmarks Index Score                                         569.6

------------------------------------------------------------------------
Benchmark Run: Sat Aug 29 2020 00:09:22 - 00:37:59
8 CPUs in system; running 8 parallel copies of tests

Dhrystone 2 using register variables      120620219.0 lps   (10.0 s, 7 samples)
Double-Precision Whetstone                    26336.2 MWIPS (9.5 s, 7 samples)
Execl Throughput                               1110.7 lps   (29.9 s, 2 samples)
File Copy 1024 bufsize 2000 maxblocks        588338.4 KBps  (30.0 s, 2 samples)
File Copy 256 bufsize 500 maxblocks          181982.1 KBps  (30.0 s, 2 samples)
File Copy 4096 bufsize 8000 maxblocks       1457866.0 KBps  (30.0 s, 2 samples)
Pipe Throughput                             4512922.8 lps   (10.0 s, 7 samples)
Pipe-based Context Switching                 160612.9 lps   (10.0 s, 7 samples)
Process Creation                                947.0 lps   (30.1 s, 2 samples)
Shell Scripts (1 concurrent)                   2990.6 lpm   (60.1 s, 2 samples)
Shell Scripts (8 concurrent)                    399.8 lpm   (60.5 s, 2 samples)
System Call Overhead                        3946715.9 lps   (10.0 s, 7 samples)

System Benchmarks Index Values               BASELINE       RESULT    INDEX
Dhrystone 2 using register variables         116700.0  120620219.0  10335.9
Double-Precision Whetstone                       55.0      26336.2   4788.4
Execl Throughput                                 43.0       1110.7    258.3
File Copy 1024 bufsize 2000 maxblocks          3960.0     588338.4   1485.7
File Copy 256 bufsize 500 maxblocks            1655.0     181982.1   1099.6
File Copy 4096 bufsize 8000 maxblocks          5800.0    1457866.0   2513.6
Pipe Throughput                               12440.0    4512922.8   3627.8
Pipe-based Context Switching                   4000.0     160612.9    401.5
Process Creation                                126.0        947.0     75.2
Shell Scripts (1 concurrent)                     42.4       2990.6    705.3
Shell Scripts (8 concurrent)                      6.0        399.8    666.3
System Call Overhead                          15000.0    3946715.9   2631.1
                                                                   ========
System Benchmarks Index Score                                        1177.5

シングル性能では、UmidigiF2より上ですが、マルチCPUは下ですね。

シングルCPU・・・スコア569.6
8CPU・・・・・・スコア1177.5

特に、プロセスのフォーク処理(Process Creation)とか、シェル関連とか、パイプ処理(Pipe-based Context Switching)が半分くらい遅いですね。なんでこんなに遅いのでしょうか? システムバージョンアップして、また計測してみます。

貼り付けた画像_2020_08_29_0_57

再起動後の情報です。

貼り付けた画像_2020_08_29_1_06

Kernelの末尾の番号だけ微妙に変わっていますが、メジャー・マイナー・メンテナンスの番号は変わらずですね。4.14.117です。UmidigiF2は、4.14.141+で新しいですね。

結果が出たら貼り付けておきます。今日はもうねるー! UmidigiF2 のCPU、MediaTek Helio P70もなかなか良いのかもね。

追記。翌日ベンチマークが終わっていたので貼り付けておきます。誤差の範囲でほぼ同じ結果でした。今回もやはり、プロセスのフォーク処理(Process Creation)とか、シェル関連とか、パイプ処理(Pipe-based Context Switching)がUmidigiF2と比べて半分くらい遅い結果となりました。何かKernelかOS設定で制限があるのかもですね。ファイルコピーなんかは倍くらいRedmeNote9sが速いですが。

CPUやストレージが速ければ全部のスコアが上がるというわけはないということですね。

シングルCPU・・・スコア571.9
8CPU・・・・・・スコア1127.1

ちなみに、UnixBenchのパイプ処理に使うバイナリのヘッダ情報も乗せておきます。ちゃんと64bitでビルドされていますね。Termux、なかなかいいんじゃないでしょうか。

$ readelf -h ./spawn
ELF Header:
Magic: 7f 45 4c 46 02 01 01 00 00 00 00 00 00 00 00 00
Class: ELF64
Data: 2’s complement, little endian
Version: 1 (current)
OS/ABI: UNIX – System V
ABI Version: 0
Type: DYN (Shared object file)
Machine: AArch64
Version: 0x1
Entry point address: 0x760
Start of program headers: 64 (bytes into file)
Start of section headers: 7184 (bytes into file)
Flags: 0x0
Size of this header: 64 (bytes)
Size of program headers: 56 (bytes)
Number of program headers: 8
Size of section headers: 64 (bytes)
Number of section headers: 24
Section header string table index: 23

ということで、次回はUmidigiF2にWordPressが動く環境を作ってテストしてみたいですね。

   BYTE UNIX Benchmarks (Version 5.1.3)

   System: localhost: Android
   OS: Android -- 4.14.117-perf-g638d6a0 -- #1 SMP PREEMPT Fri Jun 19 01:24:32 CST 2020
   Machine: aarch64 (unknown)
   Language: en_US.utf8 (charmap=, collate=)
   01:18:25 up 17 min,  load average: 0.55, 1.10, 1.44; runlevel 

------------------------------------------------------------------------
Benchmark Run: Sat Aug 29 2020 01:18:25 - 01:46:30
8 CPUs in system; running 1 parallel copy of tests

Dhrystone 2 using register variables       32007008.4 lps   (10.0 s, 7 samples)
Double-Precision Whetstone                     6140.3 MWIPS (10.0 s, 7 samples)
Execl Throughput                                261.7 lps   (29.9 s, 2 samples)
File Copy 1024 bufsize 2000 maxblocks        628988.7 KBps  (30.0 s, 2 samples)
File Copy 256 bufsize 500 maxblocks          207751.6 KBps  (30.0 s, 2 samples)
File Copy 4096 bufsize 8000 maxblocks       1478525.0 KBps  (30.0 s, 2 samples)
Pipe Throughput                             1164727.3 lps   (10.0 s, 7 samples)
Pipe-based Context Switching                  99925.0 lps   (10.0 s, 7 samples)
Process Creation                                587.5 lps   (30.0 s, 2 samples)
Shell Scripts (1 concurrent)                   1284.4 lpm   (60.0 s, 2 samples)
Shell Scripts (8 concurrent)                    312.1 lpm   (60.2 s, 2 samples)
System Call Overhead                        1127699.3 lps   (10.0 s, 7 samples)

System Benchmarks Index Values               BASELINE       RESULT    INDEX
Dhrystone 2 using register variables         116700.0   32007008.4   2742.7
Double-Precision Whetstone                       55.0       6140.3   1116.4
Execl Throughput                                 43.0        261.7     60.9
File Copy 1024 bufsize 2000 maxblocks          3960.0     628988.7   1588.4
File Copy 256 bufsize 500 maxblocks            1655.0     207751.6   1255.3
File Copy 4096 bufsize 8000 maxblocks          5800.0    1478525.0   2549.2
Pipe Throughput                               12440.0    1164727.3    936.3
Pipe-based Context Switching                   4000.0      99925.0    249.8
Process Creation                                126.0        587.5     46.6
Shell Scripts (1 concurrent)                     42.4       1284.4    302.9
Shell Scripts (8 concurrent)                      6.0        312.1    520.1
System Call Overhead                          15000.0    1127699.3    751.8
                                                                   ========
System Benchmarks Index Score                                         571.9

------------------------------------------------------------------------
Benchmark Run: Sat Aug 29 2020 01:46:30 - 02:15:04
8 CPUs in system; running 8 parallel copies of tests

Dhrystone 2 using register variables      122466899.1 lps   (10.0 s, 7 samples)
Double-Precision Whetstone                    26082.3 MWIPS (9.9 s, 7 samples)
Execl Throughput                               1100.0 lps   (29.7 s, 2 samples)
File Copy 1024 bufsize 2000 maxblocks        509969.0 KBps  (30.0 s, 2 samples)
File Copy 256 bufsize 500 maxblocks          147009.9 KBps  (30.0 s, 2 samples)
File Copy 4096 bufsize 8000 maxblocks       1308075.6 KBps  (30.0 s, 2 samples)
Pipe Throughput                             4401030.7 lps   (10.0 s, 7 samples)
Pipe-based Context Switching                 163599.9 lps   (10.0 s, 7 samples)
Process Creation                               1059.8 lps   (30.1 s, 2 samples)
Shell Scripts (1 concurrent)                   2761.2 lpm   (60.1 s, 2 samples)
Shell Scripts (8 concurrent)                    366.4 lpm   (60.8 s, 2 samples)
System Call Overhead                        3964160.3 lps   (10.0 s, 7 samples)

System Benchmarks Index Values               BASELINE       RESULT    INDEX
Dhrystone 2 using register variables         116700.0  122466899.1  10494.2
Double-Precision Whetstone                       55.0      26082.3   4742.2
Execl Throughput                                 43.0       1100.0    255.8
File Copy 1024 bufsize 2000 maxblocks          3960.0     509969.0   1287.8
File Copy 256 bufsize 500 maxblocks            1655.0     147009.9    888.3
File Copy 4096 bufsize 8000 maxblocks          5800.0    1308075.6   2255.3
Pipe Throughput                               12440.0    4401030.7   3537.8
Pipe-based Context Switching                   4000.0     163599.9    409.0
Process Creation                                126.0       1059.8     84.1
Shell Scripts (1 concurrent)                     42.4       2761.2    651.2
Shell Scripts (8 concurrent)                      6.0        366.4    610.7
System Call Overhead                          15000.0    3964160.3   2642.8
                                                                   ========
System Benchmarks Index Score                                        1127.1

神アプリ。PCからiosやandroidスマホ画面を触れる開発者必須のツール

アプリ開発って、複数端末を操らないといけないので結構面倒なんですよね。できれば、PC画面のキーボード、マウスから手を離したくはないのです。いちいち、スマホに目線を移動して画面を見て触らないといけないのが面倒です。

さて、そんな開発者のあなた! 今日のネタは必見ですよ〜。別に開発者じゃなくても便利に使えますのでちょっと紹介しますね。

Wormhole_TakehikoのiPhone__と_Wormhole_と_新しいタブ

はい、この画面macosでスマホを操っている画面です。左側は、iosで、右側がandroidです。PCのマウスやキーボードでスマホを触れてめちゃくちゃ便利ですよ。これを実現するのは以下のアプリです。WormHoleです!

Wormhole_-_Control_phone_from_PC

androidは無料で、android側に入れるアプリは以下です。

Wormhole_-_Bridge_between_Mobile___Desktop_-_Google_Play_のアプリ

Androidは、スマホ側にこのアプリを入れますが、iosは何も必要ありません。スマホとUSBケーブルで接続し、WormholeのPCアプリを起動すると以下のように画面が出ます。

スクリーンショット_2020_08_24_11_44

画面のローテートにも対応していて、横画面にするとPC側も横長で表示されます。

Wormhole

これはTermuxを横表示した画面です。PCキーボードでタイプできます。神ですよね。例えば、設定でダークモードをOn/Offしたければこんな感じでPC画面からスマホを操れます。

Wormhole

iosの場合は、1084円の有料ですがこの価値はあるかと思います。

Wormhole_Store

例えば、awaアプリ(音楽ストリーミングアプリ)を起動するとPC経由からブルートース経由で音が鳴らせます。

Wormhole_TakehikoのiPhone_

PC側のブルートースにはiPhoneがコネクトされています。iosはUSBとブルートース接続が必要のようです。USBの代わりにWiFi経由でも可能ですが、開発時にはxcodeからデバックするために、USBケーブル接続していますし、充電もできるので問題ありません。

Bluetooth

PC側に負荷をかけずに音楽を鳴らせるのでなかなかいい感じです。また、スクリーンショットなんかも簡単にクリップボード経由で撮れるので、スマホでスクショ撮るより全然便利です。スマホでスクショ撮るとその転送が面倒なんで。

非ルート化しなくても、iosもandroidもPC側から触れるツールは自分が知る限りこれしかありません。ということで、神アプリとなっています。

では、またー!

 

AndroidスマホにCentOSとかUbuntuとか入れて活用できるか検討してみる

このブログの自宅サーバ化計画があるんですが、その候補マシンとして先日(といってもだいぶ前ですが)ThinkCentre M75q-1 Tinyを用意してあります。このマシン、かなり速くて自宅サーバ用途だけに使うのは勿体ないなーなんて思っています。実際、フォートナイト専用マシンとしてめっちゃ遊んでいます。Linuxを入れてもUnixBenchがスコアが6500を超える激速いマシンなんですよね。そこで、ダメ元でと思い最近スマホも変えたことですし、UmidigiF2にCentOSとかFedoraとか入れて使えないかなーって思ったわけです。

貼り付けた画像_2020_08_24_1_04

普通、AndroidスマホにLinuxを入れるにはrootを取得してオリジナルなOSをインストールするんですが、カスタムROMを作らないといけないのでメンテナンスが面倒なのとarmプラットフォームなんでマイナーなオープンソースソフトウェアはバイナリがないので、コンパイルしないとだめなんです。まぁ、くそメンドくさいので候補から外していたんですが、最近の事情はもっと気軽に入れられるようでした。上の画像のアプリ、UserLAndとか、Termuxとか、AnLinuxとかがそれです。UserLAndは、それ単体でディストリビューションが組み込めます。

貼り付けた画像_2020_08_24_1_09

この環境(UserLAndでUbuntu)で、計測したUnixBenchが以下です。スマートフォンはUmidigiF2です。CPUの型番や認識しているハードウェアは以下となります。

CPU MediaTek Helio P70
Hardware : MT6771V/CT

========================================================================
BYTE UNIX Benchmarks (Version 5.1.3)

System: localhost: GNU/Linux
OS: GNU/Linux — 4.14.141+ — #1 SMP PREEMPT Wed May 6 10:13:36 CST 2020
Machine: aarch64 (aarch64)
Language: en_US.utf8 (charmap=”ANSI_X3.4-1968″, collate=”ANSI_X3.4-1968″)
; runlevel

————————————————————————
Benchmark Run: Sat Aug 22 2020 20:54:06 – 21:22:31
8 CPUs in system; running 1 parallel copy of tests

Dhrystone 2 using register variables 17608983.7 lps (10.0 s, 7 samples)
Double-Precision Whetstone 2700.6 MWIPS (9.9 s, 7 samples)
Execl Throughput 277.4 lps (29.9 s, 2 samples)
File Copy 1024 bufsize 2000 maxblocks 244507.6 KBps (30.0 s, 2 samples)
File Copy 256 bufsize 500 maxblocks 71657.5 KBps (30.0 s, 2 samples)
File Copy 4096 bufsize 8000 maxblocks 676812.1 KBps (30.0 s, 2 samples)
Pipe Throughput 375078.4 lps (10.0 s, 7 samples)
Pipe-based Context Switching 73081.8 lps (10.0 s, 7 samples)
Process Creation 1843.0 lps (30.0 s, 2 samples)
Shell Scripts (1 concurrent) 973.9 lpm (60.0 s, 2 samples)
Shell Scripts (8 concurrent) 237.1 lpm (60.2 s, 2 samples)
System Call Overhead 21729.5 lps (10.0 s, 7 samples)

System Benchmarks Index Values BASELINE RESULT INDEX
Dhrystone 2 using register variables 116700.0 17608983.7 1508.9
Double-Precision Whetstone 55.0 2700.6 491.0
Execl Throughput 43.0 277.4 64.5
File Copy 1024 bufsize 2000 maxblocks 3960.0 244507.6 617.4
File Copy 256 bufsize 500 maxblocks 1655.0 71657.5 433.0
File Copy 4096 bufsize 8000 maxblocks 5800.0 676812.1 1166.9
Pipe Throughput 12440.0 375078.4 301.5
Pipe-based Context Switching 4000.0 73081.8 182.7
Process Creation 126.0 1843.0 146.3
Shell Scripts (1 concurrent) 42.4 973.9 229.7
Shell Scripts (8 concurrent) 6.0 237.1 395.2
System Call Overhead 15000.0 21729.5 14.5
========
System Benchmarks Index Score 271.2

————————————————————————
Benchmark Run: Sat Aug 22 2020 21:22:31 – 21:51:31
8 CPUs in system; running 8 parallel copies of tests

Dhrystone 2 using register variables 99917960.5 lps (10.0 s, 7 samples)
Double-Precision Whetstone 17134.8 MWIPS (9.5 s, 7 samples)
Execl Throughput 636.2 lps (29.9 s, 2 samples)
File Copy 1024 bufsize 2000 maxblocks 391896.0 KBps (30.0 s, 2 samples)
File Copy 256 bufsize 500 maxblocks 109010.1 KBps (30.0 s, 2 samples)
File Copy 4096 bufsize 8000 maxblocks 1128491.8 KBps (30.0 s, 2 samples)
Pipe Throughput 1996740.3 lps (10.0 s, 7 samples)
Pipe-based Context Switching 274427.3 lps (10.0 s, 7 samples)
Process Creation 5289.1 lps (30.0 s, 2 samples)
Shell Scripts (1 concurrent) 2014.1 lpm (60.3 s, 2 samples)
Shell Scripts (8 concurrent) 291.2 lpm (63.5 s, 2 samples)
System Call Overhead 27627.6 lps (10.1 s, 7 samples)

System Benchmarks Index Values BASELINE RESULT INDEX
Dhrystone 2 using register variables 116700.0 99917960.5 8562.0
Double-Precision Whetstone 55.0 17134.8 3115.4
Execl Throughput 43.0 636.2 148.0
File Copy 1024 bufsize 2000 maxblocks 3960.0 391896.0 989.6
File Copy 256 bufsize 500 maxblocks 1655.0 109010.1 658.7
File Copy 4096 bufsize 8000 maxblocks 5800.0 1128491.8 1945.7
Pipe Throughput 12440.0 1996740.3 1605.1
Pipe-based Context Switching 4000.0 274427.3 686.1
Process Creation 126.0 5289.1 419.8
Shell Scripts (1 concurrent) 42.4 2014.1 475.0
Shell Scripts (8 concurrent) 6.0 291.2 485.3
System Call Overhead 15000.0 27627.6 18.4
========
System Benchmarks Index Score 680.3

やっぱりchrootしているので、ちょっとオーバーヘットがあるようですね。もっと速いはずなんですが、prootを使っているようなのでその影響でしょうか。prootっていうのは、FreeBSDのjailに似た感じだと思います。これは、ハイパーバイザや準仮想化マシンのようなセキュアなものとは仕組みが違います。

次、Termuxの場合は、以下のようになりました。動かしているスマホは先と同じUmidigiF2です。

pkg install vim -y
pkg install wget -y
pkg install clang -y
pkg install make -y
pkg install perl -y
pkg install git -y
pkg install pkg-config -y

git clone https://github.com/kdlucas/byte-unixbench
cd byte-unixbench/UnixBench
cp -p Makefile Makefile.org
vi Makefile
※以下部分を削除してね。(-march=native)

$ diff Makefile Makefile.org
98c98
< OPTON += -mtune=native

> OPTON += -march=native -mtune=native

./Run
::

========================================================================
BYTE UNIX Benchmarks (Version 5.1.3)

System: localhost: Android
OS: Android — 4.14.141+ — #1 SMP PREEMPT Wed May 6 10:13:36 CST 2020
Machine: aarch64 (unknown)
Language: en_US.utf8 (charmap=, collate=)
21:45:18 up 41 days, 12:17, load average: 26.55, 26.58, 26.57; runlevel

————————————————————————
Benchmark Run: Sun Aug 23 2020 21:45:18 – 22:13:35
8 CPUs in system; running 1 parallel copy of tests

Dhrystone 2 using register variables 17334020.9 lps (10.0 s, 7 samples)
Double-Precision Whetstone 3658.8 MWIPS (9.9 s, 7 samples)
Execl Throughput 215.1 lps (29.9 s, 2 samples)
File Copy 1024 bufsize 2000 maxblocks 323431.8 KBps (30.0 s, 2 samples)
File Copy 256 bufsize 500 maxblocks 101368.1 KBps (30.0 s, 2 samples)
File Copy 4096 bufsize 8000 maxblocks 845384.2 KBps (30.0 s, 2 samples)
Pipe Throughput 591377.9 lps (10.0 s, 7 samples)
Pipe-based Context Switching 89414.5 lps (10.0 s, 7 samples)
Process Creation 1326.4 lps (30.0 s, 2 samples)
Shell Scripts (1 concurrent) 861.2 lpm (60.1 s, 2 samples)
Shell Scripts (8 concurrent) 381.1 lpm (60.1 s, 2 samples)
System Call Overhead 582221.0 lps (10.0 s, 7 samples)

System Benchmarks Index Values BASELINE RESULT INDEX
Dhrystone 2 using register variables 116700.0 17334020.9 1485.3
Double-Precision Whetstone 55.0 3658.8 665.2
Execl Throughput 43.0 215.1 50.0
File Copy 1024 bufsize 2000 maxblocks 3960.0 323431.8 816.7
File Copy 256 bufsize 500 maxblocks 1655.0 101368.1 612.5
File Copy 4096 bufsize 8000 maxblocks 5800.0 845384.2 1457.6
Pipe Throughput 12440.0 591377.9 475.4
Pipe-based Context Switching 4000.0 89414.5 223.5
Process Creation 126.0 1326.4 105.3
Shell Scripts (1 concurrent) 42.4 861.2 203.1
Shell Scripts (8 concurrent) 6.0 381.1 635.1
System Call Overhead 15000.0 582221.0 388.1
========
System Benchmarks Index Score 406.2

————————————————————————
Benchmark Run: Sun Aug 23 2020 22:13:35 – 22:42:10
8 CPUs in system; running 8 parallel copies of tests

Dhrystone 2 using register variables 92727287.0 lps (10.0 s, 7 samples)
Double-Precision Whetstone 23155.4 MWIPS (10.0 s, 7 samples)
Execl Throughput 1153.0 lps (29.7 s, 2 samples)
File Copy 1024 bufsize 2000 maxblocks 392313.3 KBps (30.0 s, 2 samples)
File Copy 256 bufsize 500 maxblocks 105373.2 KBps (30.0 s, 2 samples)
File Copy 4096 bufsize 8000 maxblocks 1156407.9 KBps (30.0 s, 2 samples)
Pipe Throughput 3402929.3 lps (10.0 s, 7 samples)
Pipe-based Context Switching 316242.6 lps (10.0 s, 7 samples)
Process Creation 7783.9 lps (30.0 s, 2 samples)
Shell Scripts (1 concurrent) 4043.3 lpm (60.1 s, 2 samples)
Shell Scripts (8 concurrent) 518.0 lpm (60.4 s, 2 samples)
System Call Overhead 3153958.3 lps (10.0 s, 7 samples)

System Benchmarks Index Values BASELINE RESULT INDEX
Dhrystone 2 using register variables 116700.0 92727287.0 7945.8
Double-Precision Whetstone 55.0 23155.4 4210.1
Execl Throughput 43.0 1153.0 268.2
File Copy 1024 bufsize 2000 maxblocks 3960.0 392313.3 990.7
File Copy 256 bufsize 500 maxblocks 1655.0 105373.2 636.7
File Copy 4096 bufsize 8000 maxblocks 5800.0 1156407.9 1993.8
Pipe Throughput 12440.0 3402929.3 2735.5
Pipe-based Context Switching 4000.0 316242.6 790.6
Process Creation 126.0 7783.9 617.8
Shell Scripts (1 concurrent) 42.4 4043.3 953.6
Shell Scripts (8 concurrent) 6.0 518.0 863.3
System Call Overhead 15000.0 3153958.3 2102.6
========
System Benchmarks Index Score 1312.3

倍までは行きませんが、こっちは結構速いようです。しかし、以下に書かれているようにファイルシステム構成が通常のLinuxとは違い、またlibcがBionicのようです。

Differences from Linux
https://wiki.termux.com/wiki/Differences_from_Linux

BionicなLibcとは、AndroidのCライブラリのことです。AndroidはBSDのCライブラリを基にして独自開発されたものを使っています。Linuxの標準Cライブラリは一般的なglibc(GNU libc)です。TermuxのアプリのコンパイルはAndroid NDKを使ってビルドされているようで、このあたり、ちょっと独自にいろいろビルドしてみるときはハマりそうですね。
ちなみに、termuxの提供されているパッケージは以下にあります。

https://grimler.se/termux-packages-24/arm/
::
1058個が提供されているようです(この執筆時)

apacheやnginxやphpやmariadbなどありますので、wordpressを動かすことはできそうですね。imagemagickなんとかもあるようです。

次は、AnLinuxです。これは先に紹介したTermuxと連携して動作させるものです。Termuxは、prootを使えば独自のファイルシステムを作れます。そのスクリプトを作ってくれています。

貼り付けた画像_2020_08_24_1_54

Step1で、ディストロを選択し、Step2でそのスクリプトをwgetするコマンドをTermuxに貼り付けて動作させるようです。

貼り付けた画像_2020_08_24_1_57

このコピーしたコマンドは以下です。

pkg install wget openssl-tool proot tar -y && hash -r && wget https://raw.githubusercontent.com/EXALAB/AnLinux-Resources/master/Scripts/Installer/CentOS/centos.sh && bash centos.sh

どんなスクリプトが書かれているか、上記のcentos.shを見ると納得します。

貼り付けた画像_2020_08_24_0_29

こんな感じで、prootのCentOSに入れます。この環境で動作させたUnixBenchは以下となります。

yum -y install perl perl-Time-HiRes make gcc git
cd /usr/local/src/
git clone https://github.com/kdlucas/byte-unixbench
cd byte-unixbench/UnixBench

Shell8のテストでこけるので、コマンドは以下で実行してあります。

./Run -i 1 -v

========================================================================
BYTE UNIX Benchmarks (Version 5.1.3)

System: localhost: GNU/Linux
OS: GNU/Linux — 4.14.141+ — #1 SMP PREEMPT Wed May 6 10:13:36 CST 2020
Machine: aarch64 (aarch64)
Language: en_US.utf8 (charmap=”ANSI_X3.4-1968″, collate=”ANSI_X3.4-1968″)
; runlevel

————————————————————————
Benchmark Run: Sun Aug 23 2020 16:34:32 – 16:41:18
8 CPUs in system; running 1 parallel copy of tests

Dhrystone 2 using register variables 18468392.0 lps (10.0 s, 1 samples)
Double-Precision Whetstone 3423.8 MWIPS (9.5 s, 1 samples)
Execl Throughput 415.5 lps (29.2 s, 1 samples)
File Copy 1024 bufsize 2000 maxblocks 249987.0 KBps (30.0 s, 1 samples)
File Copy 256 bufsize 500 maxblocks 72847.0 KBps (30.0 s, 1 samples)
File Copy 4096 bufsize 8000 maxblocks 694986.0 KBps (30.0 s, 1 samples)
Pipe Throughput 387272.6 lps (10.0 s, 1 samples)
Pipe-based Context Switching 64785.7 lps (10.0 s, 1 samples)
Process Creation 2060.3 lps (30.0 s, 1 samples)
Shell Scripts (1 concurrent) 425.8 lpm (60.2 s, 1 samples)
Shell Scripts (8 concurrent) 100.4 lpm (60.3 s, 1 samples)
System Call Overhead 19692.3 lps (10.1 s, 1 samples)

System Benchmarks Index Values BASELINE RESULT INDEX
Dhrystone 2 using register variables 116700.0 18468392.0 1582.6
Double-Precision Whetstone 55.0 3423.8 622.5
Execl Throughput 43.0 415.5 96.6
File Copy 1024 bufsize 2000 maxblocks 3960.0 249987.0 631.3
File Copy 256 bufsize 500 maxblocks 1655.0 72847.0 440.2
File Copy 4096 bufsize 8000 maxblocks 5800.0 694986.0 1198.3
Pipe Throughput 12440.0 387272.6 311.3
Pipe-based Context Switching 4000.0 64785.7 162.0
Process Creation 126.0 2060.3 163.5
Shell Scripts (1 concurrent) 42.4 425.8 100.4
Shell Scripts (8 concurrent) 6.0 100.4 167.4
System Call Overhead 15000.0 19692.3 13.1
========
System Benchmarks Index Score 249.3

————————————————————————
Benchmark Run: Sun Aug 23 2020 16:41:18 – 16:48:52
8 CPUs in system; running 8 parallel copies of tests

Dhrystone 2 using register variables 108060066.0 lps (10.1 s, 1 samples)
Double-Precision Whetstone 22455.1 MWIPS (9.1 s, 1 samples)
Execl Throughput 851.2 lps (29.7 s, 1 samples)
File Copy 1024 bufsize 2000 maxblocks 392189.0 KBps (30.0 s, 1 samples)
File Copy 256 bufsize 500 maxblocks 106747.0 KBps (30.0 s, 1 samples)
File Copy 4096 bufsize 8000 maxblocks 1134886.0 KBps (30.0 s, 1 samples)
Pipe Throughput 2149129.5 lps (10.1 s, 1 samples)
Pipe-based Context Switching 272235.0 lps (10.1 s, 1 samples)
Process Creation 5234.7 lps (30.2 s, 1 samples)
Shell Scripts (1 concurrent) 916.4 lpm (61.0 s, 1 samples)
Shell Scripts (8 concurrent) 165.0 lpm (69.8 s, 1 samples)
System Call Overhead 30266.2 lps (10.2 s, 1 samples)

System Benchmarks Index Values BASELINE RESULT INDEX
Dhrystone 2 using register variables 116700.0 108060066.0 9259.6
Double-Precision Whetstone 55.0 22455.1 4082.7
Execl Throughput 43.0 851.2 197.9
File Copy 1024 bufsize 2000 maxblocks 3960.0 392189.0 990.4
File Copy 256 bufsize 500 maxblocks 1655.0 106747.0 645.0
File Copy 4096 bufsize 8000 maxblocks 5800.0 1134886.0 1956.7
Pipe Throughput 12440.0 2149129.5 1727.6
Pipe-based Context Switching 4000.0 272235.0 680.6
Process Creation 126.0 5234.7 415.5
Shell Scripts (1 concurrent) 42.4 916.4 216.1
Shell Scripts (8 concurrent) 6.0 165.0 275.0
System Call Overhead 15000.0 30266.2 20.2
========
System Benchmarks Index Score 648.0

UserLAndの時と似たような数値ですね。prootするとこのあたりのスコアになるようです。

単純に、UnixBenchのスコアだけだとTermuxが良さそうですが、実際にアプリケーションを動作させてWordPressがどのくらいのレスポンスが出るのか確認しないとですね。

以下のサイトには、スマホをPoCとして活用するため簡単な検証がされています。

https://m.blog.naver.com/PostView.nhn?blogId=nettrail&logNo=221588044681&proxyReferer=https:%2F%2Fwww.google.com%2F

興味深いことに、Termux環境でprootした(AnLinuxで作ったDebian) apache abテストのほうが14秒(20秒に対して)で速かったということです。UnixBenchの値とは逆行する結果となっています。

Debianのarm環境が優れているからなのか、そのあたりは良くわかりませんが、この筆者はTermuxのネイティブ環境はサポートしているパッケージも少ないので、AnLinuxでproot したディストリ環境のほうが良いんじゃないの? って結論しています。PoC(Proof of Conceptの略で、「概念実証」)用途ではね。

一回、apache + php7 + mariadb の同じ環境を使ってWordPressを入れてベンチマークして見たいですね。このブログ運営くらいなら耐えられそうな気もしますがどうでしょうか。