Orange Pi PC2 の性能と Ubuntu のインストール ()
Orange Pi PC2 という 4 コアの 64 ビット の ARMv8 を使ったシングルボードコンピュータが到着しました。 OrangePi PC2 は CPU として Allwinner H5 (Cortex-A53 x 4) を使って、メモリは 1GB DDR3、64GBまでの TransFlashカード (microSDカード)、ネットワークは有線の 1GB Ethernet コネクタ(RJ45) となっています。 USB は 2.0 HOST が3ポート、2.0 OTG(microB) が1ポート、ディスプレイ用にHDMIが用意されています。GPU は ARM製の6コアの Mali450 で OpenGL ES 1.1/2.0 と OpenVG 1.1 が使用できます。
外観の特徴はナナメに配置されたチップです。サイズはRaspberry Piと同じですが、コネクタ類の配置は異なるため、ケースは専用のものが必要です。
発注が 2016/11/07、到着が 2016/11/13 でした。 アリババの運営する海外向けサイトの AliExpressで発注しました。 本体 19.98 ドルに送料込みで23.13ドルでした。2500円弱といったところです。電源には内径1.7mm、外径4mmのDCコネクタの付いたUSBケーブルが必要ですが、これが 11/07 注文で 12/12 着でした。 待ちきれずにアマゾンでこのケーブルを先に買ってしまいました。
同じ64bitのARMチップが載った DragonBoard 410C は本体 75 ドルと送料 43.99ドルで計 118.99ドル 当時の為替レートで 15,273円でした。 HiKey は本体 99 ドルと送料で計15,673円でした。2500円ほどの OrangePi PC2 の安さが際立ちます。Raspberry Pi 3 と比べても半額程度です。
ボードの仕様をRaspberry Pi 2、Raspberry Pi3、Orange Pi PC2、Dragonboard 410C、HiKey(LeMaker 2GB) で比べてみます。Raspberry Pi3 は64bit のCPUですが、現在は速い32bit CPUとして使われています。
ボード | Raspberry Pi2 | Raspberry Pi3 | Orange Pi PC2 | Dragonboard 410C | HiKey |
---|---|---|---|---|---|
チップ名称 | BCM2836 | BCM2837 | Allwinner H5 | SnapDragon410 | HiSilicon Kirin 620 |
アーキテクチャ | ARMv7 | ARMv8 | ARMv8 | ARMv8 | ARMv8 |
命令セット | AArch32 | AArch32+ AArch64 | AArch32+ AArch64 | AArch32+ AArch64 | AArch32+ AArch64 |
コア名称 | Cortex-A7 | Cortex-A53 | Cortex-A53 | Cortex-A53 | Cortex-A53 |
コア数 | 4 | 4 | 4 | 4 | 8 |
浮動小数点演算 | VFPv4 + NEON | VFPv4 + NEON | VFPv4 + NEON | VFPv4 + NEON | VFPv4 + NEON |
クロック | 900MHz | 1200MHz | 1008MHz | 1210MHz | 1200MHz |
メモリ | 1GB | 1GB | 1GB | 1GB | 2GB |
GPU | VideoCore IV | VideoCore IV | 6-core Mali450 | Adreno 306 400MHz | Mali450-MP4 500MHz |
eMMC | - | - | - | SanDisk 8GB | hynyx 8GB |
microSD slot | 1 | 1 | 1 | 1 | 1 |
USB 2 | 4 | 4 | 3 | 2 | 2 |
Ethernet | 100M | 100M | 100M/1000M | - | - |
Wifi | - | 802.11n 2.4GHz | - | 802.11a/b/g/n 2.4GHz | 802.11b/g/n 2.4GHz |
Bluetooth | - | 4.1 LE- | - | 4.1 | 4.1 LE |
GPS | - | - | - | 1 | - |
CPU (Soc) は 下の写真左側の Allwinner H5 という ARMv8 アーキテクチャの Cortex-A53 x 4 コア、クロック 1.0GHz というものです。 OrangePi PC2 の特徴は、右側の RTL8211e という Ethernet のチップが 10/100/1000M に対応していることです。ギガビットの有線LANが使用できます。Realtek のカニのロゴが目立ちます。
初代Raspberry Pi、Raspberry Pi2、Orange Pi PC2を並べました。同じ名刺サイズです。
Ubuntu 16.04 のインストール
公式のダウンロードページには、次のようなOSのイメージがおいてあります。(2016/12/13現在)
OS | updated |
---|---|
Android(Orange OS) | 2016-11-21 |
android sdk source code | 2016-11-24 |
Debian Server | 2016-11-25 |
Debian XFCE | 2016-12-07 |
Ubuntu Server | 2016-11-25 |
Ubuntu XFCE | 2016-12-07 |
Arch Server | 2016-11-25 |
Arch XFCE | 2016-11-25 |
今回は、軽量なデスクトップ環境である Ubuntu_Desktop_Xenial_xfce4_PC2_V1_0_0.img.xz を Google Drive のリンクからダウンロードしました。 Ubuntu のインストールは、Dragonboard 410C や HiKey に比べて簡単で、Raspberry Pi と同じようにイメージファイルをSDカードに書き込んで、SDカードをセットして電源を入れるだけで Ubuntu が起動します。
イメージをSDカードに書き込み
Ubuntu_Desktop_Xenial_xfce4_PC2_V1_0_0.img.xz 圧縮フォーマットが xz 形式なので、こちらの Linux 環境 で行いました。
$ ls -l Ubuntu_Desktop_Xenial_xfce4_PC2_V1_0_0.img.xz -rwx------ 1 jun jun 1009566832 Dec 9 22:43 Ubuntu_Desktop_Xenial_xfce4_PC2_V1_0_0.img.xz
$ shasum Ubuntu_Desktop_Xenial_xfce4_PC2_V1_0_0.img.xz 5fb23219eaed5a999fa0708fee939e30702994ee Ubuntu_Desktop_Xenial_xfce4_PC2_V1_0_0.img.xz
ファイルを xz コマンドで展開します。
$ xz -dk Ubuntu_Desktop_Xenial_xfce4_PC2_V1_0_0.img.xz
展開後のファイルサイズを確認します。3.75GBでした。
$ ls -l Ubuntu_Desktop_Xenial_xfce4_PC2_V1_0_0.img* -rwx------ 1 jun jun 3753902080 Dec 9 22:43 Ubuntu_Desktop_Xenial_xfce4_PC2_V1_0_0.img -rwx------ 1 jun jun 1009566832 Dec 9 22:43 Ubuntu_Desktop_Xenial_xfce4_PC2_V1_0_0.img.xz
4GB のSDカードにディスクイメージは収まりますが、アプリケーションを追加してインストールしたり、作業領域に使うことを考えて 16GB のSDカードを使いました。 私の場合、SDカードのデバイスファイルは /dev/sdb でした。
$ sudo dd if=Ubuntu_Desktop_Xenial_xfce4_PC2_V1_0_0.img of=/dev/sdb 7331840+0 レコード入力 7331840+0 レコード出力 3753902080 bytes (3.8 GB, 3.5 GiB) copied, 725.289 s, 5.2 MB/s
接続
SDカードをセットして、キーボード、マウス(無線)、ネットワーク、電源を接続しました。ディスプレイはHDMI接続した4Kテレビを使っています。
起動
電源を入れてしばらくすると次のようなログイン画面となります。 変更していなければユーザは「root」、パスワードは「orangepi」のアカウントでログインできます。
XFCE のデスクトップはオレンジを車輪にしたオシャレな自転車が背景となります。
ユーザ作成
最初に起動したあと、ネットワーク越しにも操作ができるように、最初に root 以外のユーザアカウントを追加します。 以下の例では「user_name」というユーザアカウントを作成しています
# adduser user_name Adding user `user_name' ... Adding new group `user_name' (1002) ... Adding new user `user_name' (1002) with group `user_name' ... Creating home directory `/home/user_name' ... Copying files from `/etc/skel' ... Enter new UNIX password: パスワード入力 Retype new UNIX password: パスワード入力 passwd: password updated successfully Changing the user information for user_name Enter the new value, or press ENTER for the default Full Name []: 以下はリターンキーだけでOK Room Number []: Work Phone []: Home Phone []: Other []: Is the information correct? [Y/n] Y
管理者権限でコマンドが使用できるように作成したユーザを sudo グループに追加します。
# gpasswd -a user_name sudo Adding user user_name to group sudo
以上で別のPCから 「ssh -l user_name IPアドレス」でネットワーク越しに Orange Pi PC2 の操作できるようになります。
パーティションの拡張
SDカードの容量の 16GB 中 4GB しか使っていないので、パーティションの拡張を行います。 起動時に自動的にパーティションを拡張する設定になっている Raspberry Pi と異なって、自分で行う必要があります。以下の手順は Raspberry Pi の raspi-config が行っていることと同じです。
ここではSDカードで動作している Orange Pi 上でSDカードのパーティションの拡張を行ってしまいます。 この段階で操作を間違えても、上の SDカードへのイメージの書き込みからやり直せばいいので、それほどリスクは高くありません。重要なデータを保存したあとでは止めましょう。
SDカード上のデバイス名は /dev/mmcblk0p1 とか /dev/mmcblk0p2 ですが、ディスクドライブとしてのデバイス名は /dev/mmcblk0 になります。 スーパーユーザ権限で fdisk コマンドを実行します。
jun@Orangepi:~$ sudo fdisk /dev/mmcblk0 Welcome to fdisk (util-linux 2.27.1). Changes will remain in memory only, until you decide to write them. Be careful before using the write command.
最初にパーティションの構成を見るために、「p」を押してパーティションテーブルを表示します。
Command (m for help): p
Disk /dev/mmcblk0: 14.7 GiB, 15720251392 bytes, 30703616 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disklabel type: dos
Disk identifier: 0x000ebed2
Device Boot Start End Sectors Size Id Type
/dev/mmcblk0p1 40960 143359 102400 50M c W95 FAT32 (LBA)
/dev/mmcblk0p2 143360 7395327 7251968 3.5G 83 Linux
パーティションが2つ表示されました。 拡張するLinuxのファイルシステムは /dev/mmcblk0p2 であることがわかります。このパーテションを削除して、大きくしたパーテションを追加する操作を行います。 これらの操作はこの時点では SDカードには書き込まれません。
削除するパーテションの開始セクターである 143360 を覚えて(メモして)おきます。パーテションの削除は 「d」を押してから、2つ目のパーテションを指定するために「2」を押します。
Command (m for help): d Partition number (1,2, default 2): 2 Partition 2 has been deleted.
次にパーテイションを追加するために「n」を押します。次にプライマリー領域を示す「p」を押します。パーティション番号は「2」を指定します。 開始セクターは覚えて(メモして)おいた 143360 を入力します。 最終セクターは「リターンキー」でデバイスの最後のセクターとなります。
Command (m for help): n
Partition type
p primary (1 primary, 0 extended, 3 free)
e extended (container for logical partitions)
Select (default p): p
Partition number (2-4, default 2): 2
First sector (2048-30703615, default 2048): 143360
Last sector, +sectors or +size{K,M,G,T,P} (143360-30703615, default 30703615):
Created a new partition 2 of type 'Linux' and of size 14.6 GiB.
パーティションの構成を表示して確認しましょう。
Command (m for help): p Disk /dev/mmcblk0: 14.7 GiB, 15720251392 bytes, 30703616 sectors Units: sectors of 1 * 512 = 512 bytes Sector size (logical/physical): 512 bytes / 512 bytes I/O size (minimum/optimal): 512 bytes / 512 bytes Disklabel type: dos Disk identifier: 0x000ebed2 Device Boot Start End Sectors Size Id Type /dev/mmcblk0p1 40960 143359 102400 50M c W95 FAT32 (LBA) /dev/mmcblk0p2 143360 30703615 30560256 14.6G 83 Linux
2番めのパーティションが 14.6GB に拡張されたことが確認できました。この時点でもSDカードには何も書き込まれていません。 上記の内容を SDカードに反映するために「w」でデバイスに書き込みます。
Command (m for help): w The partition table has been altered. Calling ioctl() to re-read partition table. Re-reading the partition table failed.: Device or resource busy The kernel still uses the old table. The new table will be used at the next reboot or after you run partprobe(8) or kpartx(8).
再起動して新しいパーティションを有効にします。
jun@Orangepi:~$ sudo reboot
再起動後、ファイルシステムを確認します。 /dev/mmcblk0p2 のサイズは変化していません。依然使用率は 91% のままです。 これはパーティションが広がってもファイルシステムの大きさが変わっていないためです。
jun@Orangepi:~$ df Filesystem 1K-blocks Used Available Use% Mounted on /dev/mmcblk0p2 3536592 3048896 319252 91% / devtmpfs 492596 0 492596 0% /dev tmpfs 501596 0 501596 0% /dev/shm tmpfs 501596 7260 494336 2% /run tmpfs 5120 4 5116 1% /run/lock tmpfs 501596 0 501596 0% /sys/fs/cgroup /dev/mmcblk0p1 51082 13058 38024 26% /boot tmpfs 100320 0 100320 0% /run/user/1001
ファイルシステムの拡張
ext2 や ext3 ファイルシステムのサイズ変更には resize2fs コマンドを使います。 引数にサイズを指定しない場合は、 パーティションのサイズをデフォルトとしてパーティション全体までファイルシステムのサイズを拡張します。
jun@Orangepi:~$ sudo resize2fs /dev/mmcblk0p2 [sudo] password for jun: resize2fs 1.42.13 (17-May-2015) Filesystem at /dev/mmcblk0p2 is mounted on /; on-line resizing required old_desc_blocks = 1, new_desc_blocks = 1 The filesystem on /dev/mmcblk0p2 is now 3820032 (4k) blocks long.
サイズを確認すると
jun@Orangepi:~$ df Filesystem 1K-blocks Used Available Use% Mounted on /dev/mmcblk0p2 15010940 3049456 11328652 22% / devtmpfs 492596 0 492596 0% /dev tmpfs 501596 0 501596 0% /dev/shm tmpfs 501596 7264 494332 2% /run tmpfs 5120 4 5116 1% /run/lock tmpfs 501596 0 501596 0% /sys/fs/cgroup /dev/mmcblk0p1 51082 13058 38024 26% /boot tmpfs 100320 0 100320 0% /run/user/1001
無事、拡張できました。
性能の評価
OrangePi PC2 と DragonBoard 410C では、 どちらも Cortex-A53 の4コアという同じCPUアーキテクチャで、メモリも 1GB と同じなため、CPUクロックの違いとストレージである SDカードと eMMC の速度の差が出ると予想されます。
Node.js v7.2.1 のビルド
実際に Node.js の最新版 v7.2.1 について、次のようにソースを展開する時間と、コンパイルの時間を測ってみました。 make をマルチプロセス(-j 4)で実行すると、gcc の内部エラーが発生するため、1コアだけでコンパイルしています。
$ time tar zxf node-v7.2.1.tar.gz $ cd node-v7.2.1 $ ./configure $ time make
tar
プロセスが使っている時間 (user, sys) にはほとんど違いがありませんが、 全体の時間(real) は Orange Pi PC2 がかなり遅くなっています。ストレージの速度の違いと思われます。
real | user | sys | |
---|---|---|---|
Orange Pi PC2 | 0m13.201s | 0m3.440s | 0m3.320s |
Dragonboard 410C | 0m5.396s | 0m3.368s | 0m4.028s |
make
コンパイルにかかる時間は、ほぼ CPUクロックの差程度です。
real | user | sys | |
---|---|---|---|
Orange Pi PC2 | 231m30.137s | 205m25.670s | 11m39.790s |
Dragonboard 410C | 197m11.335s | 181m15.488s | 15m23.392s |
Node.js で COLLADA ファイルのパース
Luajit で書いた LjES 2.0を Node.js に移植して、COLLADA形式(xml)の 3Dアニメーションをパースする時間を測ってみました。 Node.js で作成したコードの規模は次のように約4000行です。
$ wc -l *.js 230 Animation.js 1378 Collada.js 359 CoordinateSystem.js 163 Frame.js 463 Matrix.js 157 Mesh.js 241 Node.js 243 Quat.js 161 Schedule.js 32 Stack.js 238 Task.js 38 node_test.js 223 util.js 3926 total
データとしては blender で作成した COLLADA 形式のファイル(4.6MB 12000頂点)を使いました。
real | user | sys | |
---|---|---|---|
Orange Pi PC2 | 0m24.339s | 0m23.860s | 0m0.140s |
Dragonboard 410C | 0m20.001s | 0m19.740s | 0m0.416s |
ここでもCPUクロック差だけの違いでした。 ヒートシンク無しで 4コアともに負荷をかけると 1.2GHz の Dragonboard 410CではCPUの温度が上がって不安定になるのに対して、1GHzの Orange Pi PC2 指で触れられる程度の温度で不安定になる事はありませんでした。
Orange Pi PC2 は、まだ GPUの性能の割に Xサーバの最適化がイマイチのようで、 デスクトップ環境で使うにはお勧めというわけに行きませんが、ギガビットイーサとともに サーバ用途ならば 2500円で十分な性能があると思います。