RISC-V SBC RVBoards-Nezhaの情報

RISC-V 命令セットの安価なシングルボードコンピュータ (SBC) のPerfXLab RVBoards-Nezha を入手したので使ってみた際の備忘録。

はじめに

RISC-V 命令セットは、MIPSやSPARCの「改めて考えるとあまり良いアイデアではなかった」みたいな部分を全面的に見直した設計になっている。 象徴的なのは、遅延分岐とレジスタウインドウがなくて、TLBミスの際のページテーブル探索はハードウェア側でやるようになっている。 とはいえ、命令セットや設計が整然としていることと、製品としてのCPUの性能が高いことに相関がないというのは、もはや常識となったと言っても良い。 RISC-Vはロイヤリティフリーというところで勝負に出ていて、ASICとしていくつかの実装も出回り始めてきている。

そういう状況で、評価ボードの類がいくつか利用可能になってきていた。 Linux が動くようなものとして有名なものだと、RISC-V関連の有力企業SiFive のSiFive Unleashed, SiFive Unmatched がある。 これらのボードはUSD 1,000 前後の価格帯で、クラウドファンディングサイトでの受注生産のみなのか、通常のルートで購入することができない状況が続いていた。

RVBoards-Nezha は、北京のPerfXLab (澎峰科技) が開発したRISC-V版Raspberry Pi とでもいうべきボードで、いつもの通販サイトAliexpress でUSD 100 前後で購入できた。 CPUはAllwinner D1 というシングルコアのチップで、1 GHz で動作するRV64GCV 命令セットのT-Head C906 CPUを搭載している。 V – Vector Extension 対応を謳っているが、まだ仕様が固まっていないのではないかという疑問はある。 ちなみに、Nezha (哪吒)は中国の神話の登場人物らしい。

T-Head はAlibaba Group の企業で、Alibabaが買収したC-Sky のCPU開発チームと関連がありそう。 T-Head が提供しているRV64 命令セットのCPUとして、C906は5-stage のインオーダーの設計で、一番小さい規模のものだ。

主な諸元

CPU
Allwinner D1 SoC
XuanTie C906
32 KB I-cache + 32 KB D-cache
RV64GCV
Memory
DDR3, 800 MHz, 1 GByte, 16-bit
Video Out
HDMI
Audio
3.5 mm Headphone
Network
Gigabit Ethernet
2.4 GHz WiFi and Bluetooth
USB
USB 2.0, Host×1, OTG×1
Power Input
USB Type-C, 5V 2A

外観

外箱は白くてRISC-V, RVBoards, 澎峰科技のロゴがそれぞれ入っていた。 その中には、ボードがすっぽり入る大きさの黒い箱と、デバッグケーブルや電源アダプタなどが入っていた。 黒い箱は詩みたいなのが書いてあってかっこいい。
shipping box for RVBoards-Nezha RVBoards-Nezha box

ボードの部品はRaspberry Pi に似た配置になっている。 無線LAN/Bluetooth やGigabit Ethernet がついているのが便利。 DRAMはDDR3 が合計 1 GByte。
PerfXLab RVBoards-Nezha RISC-V SBC side 1 PerfXLab RVBoards-Nezha RISC-V SBC side 2 RVBoards | RISC-V 澎峰(北京)科技有限公司

起動

起動コンソールはデバッグポートから出てきていた。 デバッグポートはGPIO側からGND, RX, TX となっていて、添付されていたUSB-TTLシリアルケーブルならそれぞれ黒、緑、白の順にケーブルを繋ぐ必要がある。 115200 ボーで出力されていた。

起動メッセージを見ると、OpenSBI, u-boot, Linux の順に起動している。 X11 が起動すると、HDMIポートから画面出力が始まり、ここからログインすると通常の「Linuxデスクトップ」が利用できる。 Debian Unstable 相当の環境だ。
RVBoards-Nezha screenshot of Debian desktop

豆知識

マニュアルの場所

データシート、マニュアル、リカバリイメージは[rvboards.org] にある。

MACアドレスが毎回変わる

Ethernet のMAC アドレスが起動のたびに変わってしまう。 Debian 環境なので、/etc/network/interfaces で以下のように適当なMAC に固定してしまうと良い。

auto eth0
allow-hotplug eth0
iface eth0 inet dhcp
        hwaddress ether 08:00:26:fe:5d:66

charunsigned char

Cのプログラムにおいて、x86 ではcharが-128から127の値域をもつsigned charなのに対し、RISC-Vではcharは0から255の値域のunsigned charになる。 この挙動はRISC-Vとarmとで同じだが、アーキテクチャの名前で切り分けていたりするプログラムだと不具合につながることがある。

性能比較

Nezha に搭載されるC906 CPUコアは、マイクロアーキテクチャに関する資料が中文で公開されている [1]。 実際にどういう実装になっているのか調べるために性能測定を行った。 比較対象として、代表的なSBC Raspberry Pi 3B を用いる。 Raspberry Pi 3B は4コアの1.2 GHzで動作するCortex-A53 を搭載しているが、1 GHzで動作するNezha のC906 CPUコアと比較しやすくするため、1.0 GHz にアンダークロックして計測した。 Cortex-A53はdual-issue のスーパスカラだ。 以下のベンチマークはすべてシングルスレッドで動作する。

SPEC CPU2000のCINT2000 は、いわゆる整数系のベンチマーク集だ。 想定されるとおり、single-issueのC906 は、dual-issueのCortex-A53 と比較して半分の性能となった。
RVBoards-Nezha SPEC CPU2000 CINT2000

SPEC CFP2000 は浮動小数点数の計算を含むベンチマーク集だ。 こちらは、Cortex-A53 でも浮動小数点の演算器は一つしかないので、FPU命令の実行時の頻度が高いワークロードほど、C906 と同じような性能になっていることが観察できる。
RVBoards-Nezha SPEC CPU2000 CFP2000

詳細な測定条件

RVBoards-Nezha
Debian unstable, Linux 5.4.61, vanilla GCC 11.1.0. Optimization flags: -O3 -march=rv64gcv.
Raspberry Pi Model 3B
Fedora 34 aarch64, Linux 5.12.12-300.fc34.aarch64, vanilla GCC 11.1.0. Optimzation flags: -O3 -mcpu=cortex-a53. Underclocked to 1 GHz with command echo 1000000 > /sys/devices/system/cpu/cpu[0-3]/cpufreq/scaling_max_freq.

独自命令

C906 はT-Head Instruction Extension (平头哥扩展指令集)に対応している。 この拡張命令セットは以下の機能がある。

参考文献

  1. 平头哥半导体有限公司: 玄铁 C906 R2S1 用户手册. 2021年5月12日.