Sipeed Lichee RV(RISC-V SBC)用のUbuntu公式リリースを試してみた
こんにちは。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はまだ開発が始まったばかりですが、このボードによって開発者が増え、エコシステムが拡大することで他の陣営も刺激を受けることを期待しています。