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コアの Mali450OpenGL ES 1.1/2.0OpenVG 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 Pi2Raspberry Pi3Orange Pi PC2Dragonboard 410CHiKey
チップ名称 BCM2836 BCM2837Allwinner H5 SnapDragon410HiSilicon Kirin 620
アーキテクチャ ARMv7 ARMv8ARMv8ARMv8ARMv8
命令セット AArch32AArch32+ AArch64AArch32+ AArch64AArch32+ AArch64AArch32+ 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 1200MHz1008MHz1210MHz1200MHz
メモリ 1GB 1GB 1GB 1GB 2GB
GPU VideoCore IVVideoCore IV6-core Mali450Adreno 306 400MHzMali450-MP4 500MHz
eMMC ---SanDisk 8GBhynyx 8GB
microSD slot 1 1 1 1 1
USB 2 4 4 3 2 2
Ethernet 100M100M100M/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現在)

OSupdated
Android(Orange OS)2016-11-21
android sdk source code2016-11-24
Debian Server2016-11-25
Debian XFCE2016-12-07
Ubuntu Server2016-11-25
Ubuntu XFCE2016-12-07
Arch Server2016-11-25
Arch XFCE2016-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 がかなり遅くなっています。ストレージの速度の違いと思われます。

realusersys
Orange Pi PC2 0m13.201s0m3.440s0m3.320s
Dragonboard 410C0m5.396s0m3.368s0m4.028s
make

コンパイルにかかる時間は、ほぼ CPUクロックの差程度です。

realusersys
Orange Pi PC2 231m30.137s205m25.670s11m39.790s
Dragonboard 410C197m11.335s181m15.488s15m23.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頂点)を使いました。

realusersys
Orange Pi PC2 0m24.339s0m23.860s0m0.140s
Dragonboard 410C0m20.001s0m19.740s0m0.416s

ここでもCPUクロック差だけの違いでした。 ヒートシンク無しで 4コアともに負荷をかけると 1.2GHz の Dragonboard 410CではCPUの温度が上がって不安定になるのに対して、1GHzの Orange Pi PC2 指で触れられる程度の温度で不安定になる事はありませんでした。

Orange Pi PC2 は、まだ GPUの性能の割に Xサーバの最適化がイマイチのようで、 デスクトップ環境で使うにはお勧めというわけに行きませんが、ギガビットイーサとともに サーバ用途ならば 2500円で十分な性能があると思います。



Orange Pi Zero/PC2/Raspberry Pi2 のベンチマーク

Dragonboard 410C のインストール

Arm64仮想マシンの作成

HiKey の入手と Debian のインストール

Orange Pi PC2 の性能と Ubuntu のインストール



このページの目次