Sipeed Lichee RV(RISC-V SBC)用のUbuntu公式リリースを試してみた

2022.10.31

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

こんにちは。CX事業本部Delivery部のakkyです。

x86、ARMに続くCPUアーキテクチャ(ISA)としてRISC-Vが最近注目を集めています。

RISC-VはオープンなISAでライセンス料が不要、32bitから128bitまで、組み込みからHPCまで見据えたアーキテクチャということで耳にする機会も増えてきました。IoT用途としても、ベアメタルな小規模開発からLinux搭載機まで幅広く使えるということで、私も期待しています。

この流れに合わせて、RISC-VアーキテクチャのCPUが続々と開発されていますが、まだOS側の対応が追い付いていないのが個人的な印象でした。

しかし今回、SipeedとCanonicalの協力でSipeed Lichee RV用のUbuntuイメージが公開されました。 https://ubuntu.com/blog/canonical-enables-ubuntu-on-sipeeds-licheerv-risc-v-board

公式リリースならそこそこ使えるはず!さっそく試してみました。

Sipeed Lichee RV

Lichee RVはSipeed製のRISC-Vボードです。Allwinner D1というSoCが乗っていて、CPUコアは中国アリババ傘下のT-Headが開発したXuanTie C906というIPが使用されています。

CPUコアは1GHzのシングルコア、5段パイプライン、インオーダー実行で、T-Headには12段パイプラインでアウトオブオーダー実行のC910という上位IPもありますが、D1に乗っているC906はシリコンの面積を重視しているバージョンのようです。

Lichee RVはこのAllwinner D1に512MBまたは1GBのDRAMを組み合わせたSBCです。

Lichee RV本体はカードエッジコネクタ型のモジュールなので、単体ではUSBやGPIOが使えません。私はAiexpressでWi-Fi無しのDockとセットで購入しました。 Wi-Fiつきは日本国内では技適の問題がありますのでおすすめしません。USBでEthernetかWi-Fiドングルを使うことをお勧めします。

ブート用にmicro SDカードも必要です。今回はSAMSUNG製のEVO Plus 64GBを使いました。

SDカードへの書き込み

まずはisoイメージをダウンロードしてきます。 https://cdimage.ubuntu.com/releases/22.10/release/ubuntu-22.10-preinstalled-server-riscv64+licheerv.img.xz

今回はmacbookでFedora Media Writerを使って書き込みました。 https://getfedora.org/ja/workstation/download/

起動

Lichee RVにはEthernetがないので、USB Ethernetアダプタ(LUA4-U3-AGT AX88179チップ搭載)を接続しました。

USB Type-Cに電源を供給すると起動します。注意点ですが、このコネクタにはCC端子にプルダウン抵抗が付いていないので、Type-C to Type-CのACアダプタでは電源が供給されず使えません。Type-A to Type-CのケーブルでACアダプタに接続してください。

起動して3分ほど経ったらなんとかしてIPアドレスを調べてSSHで接続します。ID/PASSともにubuntuです。初回ログイン時に変更が促されますので、パスワードを設定します。

ログインできたので、いろいろを見てみました。

$ uname -m
riscv64

$ uname -a
Linux ubuntu-rv 5.17.0-1003-allwinner #3-Ubuntu SMP Fri Jul 15 15:28:33 UTC 2022 riscv64 riscv64 riscv64 GNU/Linux

$ cat /proc/cpuinfo
processor       : 0
hart            : 0
isa             : rv64imafdc
mmu             : sv39
uarch           : thead,c906

$ lsusb
Bus 004 Device 002: ID 0b95:1790 ASIX Electronics Corp. AX88179 Gigabit Ethernet
Bus 004 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub
Bus 002 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
Bus 003 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub
Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
Bus 005 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub

$ cat /etc/os-release
PRETTY_NAME="Ubuntu 22.10"
NAME="Ubuntu"
VERSION_ID="22.10"
VERSION="22.10 (Kinetic Kudu)"
VERSION_CODENAME=kinetic
ID=ubuntu
ID_LIKE=debian
HOME_URL="https://www.ubuntu.com/"
SUPPORT_URL="https://help.ubuntu.com/"
BUG_REPORT_URL="https://bugs.launchpad.net/ubuntu/"
PRIVACY_POLICY_URL="https://www.ubuntu.com/legal/terms-and-policies/privacy-policy"
UBUNTU_CODENAME=kinetic
LOGO=ubuntu-logo

バッチリCPUアーキテクチャとしてriscv64が表示されました!

Ubuntuなのでもちろんaptもちゃんと使えて、apache2やnginxも正常に動きました。もちろんPHPもばっちりです。

なお、いろいろと実験をしていくとメモリが足りずに急に落ちることがあったので、swapファイルを作っておくことをお勧めします。SDカードの相性の問題かとしばらく悩みました。

UnixBench

UnixBenchでベンチマークしてみました。 なお、ビルドはMakefileを修正しないと通りませんでした。nativeがダメなようです。

98c98
< #        OPTON += -march=native -mtune=native
---
>         OPTON += -march=native -mtune=native
100c100
< #        OPTON += -mcpu=native -mtune=native
---
>         OPTON += -mcpu=native -mtune=native
103,104d102
<
< OPTON += -march=rv64imafdcv -mtune=thead-c906
   BYTE UNIX Benchmarks (Version 5.1.3)

   System: ubuntu-rv: GNU/Linux
   OS: GNU/Linux -- 5.17.0-1003-allwinner -- #3-Ubuntu SMP Fri Jul 15 15:28:33 UTC 2022
   Machine: riscv64 (riscv64)
   Language: en_US.utf8 (charmap="UTF-8", collate="UTF-8")
   02:37:26 up 9 min,  1 user,  load average: 0.62, 0.63, 0.48; runlevel 2022-10-31

------------------------------------------------------------------------
Benchmark Run: Mon Oct 31 2022 02:37:26 - 03:05:42
1 CPU in system; running 1 parallel copy of tests

Dhrystone 2 using register variables        3067258.7 lps   (10.0 s, 7 samples)
Double-Precision Whetstone                     1074.5 MWIPS (10.0 s, 7 samples)
Execl Throughput                                182.3 lps   (29.9 s, 2 samples)
File Copy 1024 bufsize 2000 maxblocks         34391.3 KBps  (30.0 s, 2 samples)
File Copy 256 bufsize 500 maxblocks            9529.1 KBps  (30.0 s, 2 samples)
File Copy 4096 bufsize 8000 maxblocks        105015.3 KBps  (30.0 s, 2 samples)
Pipe Throughput                              105885.2 lps   (10.0 s, 7 samples)
Pipe-based Context Switching                  10389.8 lps   (10.0 s, 7 samples)
Process Creation                                448.0 lps   (30.0 s, 2 samples)
Shell Scripts (1 concurrent)                    436.7 lpm   (60.1 s, 2 samples)
Shell Scripts (8 concurrent)                     57.0 lpm   (61.0 s, 2 samples)
System Call Overhead                         375849.9 lps   (10.0 s, 7 samples)

System Benchmarks Index Values               BASELINE       RESULT    INDEX
Dhrystone 2 using register variables         116700.0    3067258.7    262.8
Double-Precision Whetstone                       55.0       1074.5    195.4
Execl Throughput                                 43.0        182.3     42.4
File Copy 1024 bufsize 2000 maxblocks          3960.0      34391.3     86.8
File Copy 256 bufsize 500 maxblocks            1655.0       9529.1     57.6
File Copy 4096 bufsize 8000 maxblocks          5800.0     105015.3    181.1
Pipe Throughput                               12440.0     105885.2     85.1
Pipe-based Context Switching                   4000.0      10389.8     26.0
Process Creation                                126.0        448.0     35.6
Shell Scripts (1 concurrent)                     42.4        436.7    103.0
Shell Scripts (8 concurrent)                      6.0         57.0     95.0
System Call Overhead                          15000.0     375849.9    250.6
                                                                   ========
System Benchmarks Index Score                                          92.3

Python3.11のビルド

Python3.11をソースコードからビルドすることも、もちろんできました。時間はかかりますが、ビルドは問題ない印象です。 configure時に以下のようなメッセージが出ましたが、ビルド中にエラーが出ることもありませんでした。x86でもARMでもないアーキテクチャは珍しいので、あまり見ることのできないメッセージですね。

configure:

If you want a release build with all stable optimizations active (PGO, etc),
please run ./configure --enable-optimizations

configure: WARNING:

Platform "riscv64-unknown-linux-gnu" with compiler "gcc" is not supported by the
CPython core team, see https://peps.python.org/pep-0011/ for more information.

まとめ

Sipeed Lichee rvをご紹介しました。性能は少々物足りないのですが、非常に安価にRISC-Vを試すことができるボードです。 RISC-Vはまだ開発が始まったばかりですが、このボードによって開発者が増え、エコシステムが拡大することで他の陣営も刺激を受けることを期待しています。