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 のインオーダーの設計で、一番小さい規模のものだ。
外箱は白くてRISC-V, RVBoards, 澎峰科技のロゴがそれぞれ入っていた。
その中には、ボードがすっぽり入る大きさの黒い箱と、デバッグケーブルや電源アダプタなどが入っていた。
黒い箱は詩みたいなのが書いてあってかっこいい。
ボードの部品はRaspberry Pi に似た配置になっている。
無線LAN/Bluetooth やGigabit Ethernet がついているのが便利。
DRAMはDDR3 が合計 1 GByte。
起動コンソールはデバッグポートから出てきていた。 デバッグポートはGPIO側からGND, RX, TX となっていて、添付されていたUSB-TTLシリアルケーブルならそれぞれ黒、緑、白の順にケーブルを繋ぐ必要がある。 115200 ボーで出力されていた。
起動メッセージを見ると、OpenSBI, u-boot, Linux の順に起動している。
X11 が起動すると、HDMIポートから画面出力が始まり、ここからログインすると通常の「Linuxデスクトップ」が利用できる。
Debian Unstable 相当の環境だ。
データシート、マニュアル、リカバリイメージは[rvboards.org] にある。
Ethernet のMAC アドレスが起動のたびに変わってしまう。
Debian 環境なので、/etc/network/interfaces
で以下のように適当なMAC に固定してしまうと良い。
auto eth0
allow-hotplug eth0
iface eth0 inet dhcp
hwaddress ether 08:00:26:fe:5d:66
char
がunsigned char
Cのプログラムにおいて、x86 ではchar
が-128から127の値域をもつsigned char
なのに対し、RISC-Vではchar
は0から255の値域のunsigned char
になる。
この挙動はRISC-Vとarmとで同じだが、アーキテクチャの名前で切り分けていたりするプログラムだと不具合につながることがある。
2021年10月末ごろから、PerfXLabの運営するNezha用のDebian aptミラーが正常にアクセスできず、Release
ファイルが404を返すようになっている。
この結果、apt-get update
を実行した際に以下のようなエラーになる:
Ign:1 http://mirrors.perfxlab.cn/debian-ports sid InRelease Ign:2 http://mirrors.perfxlab.cn/debian-ports unreleased InRelease Err:3 http://mirrors.perfxlab.cn/debian-ports sid Release 404 Not Found [IP: 47.99.187.160 80] Err:4 http://mirrors.perfxlab.cn/debian-ports unreleased Release 404 Not Found [IP: 47.99.187.160 80] Reading package lists... Done E: The repository 'http://mirrors.perfxlab.cn/debian-ports sid Release' no longer has a Release file. N: Updating from such a repository can't be done securely, and is therefore disabled by default. N: See apt-secure(8) manpage for repository creation and user configuration details. E: The repository 'http://mirrors.perfxlab.cn/debian-ports unreleased Release' no longer has a Release file. N: Updating from such a repository can't be done securely, and is therefore disabled by default. N: See apt-secure(8) manpage for repository creation and user configuration details.
この状況だとかなり使いにくいので、2021年11月現在のおすすめは、PerfXLabの提供するDebianではなくてSipeed の提供するD1用のDebian [aw-ol.com]を利用することだ。
Sipeed版DebianのイメージでMicroSDカードを作るとき、.img
のファイルはまっすぐなイメージファイルではないためdd
で書き込んでも起動できなくて、Allwinnerの提供するPhoenixCard (動作確認したバージョンは4.2.7)を用いて「Start Up」の設定で書き込む必要があるので注意が必要。
Sipeed版のほうは、aptのsource設定はhttp://ftp.ports.debian.org/debian-ports/
を指しており、サーバの利用者数はPerfXLabよりも多そうな感じ。
使っているレポジトリがdebian-ports
なので、毎年aptのGPGキーが変わって、年を越すと
# apt -y update Get:1 http://ftp.ports.debian.org/debian-ports sid InRelease [65.1 kB] Err:1 http://ftp.ports.debian.org/debian-ports sid InRelease The following signatures couldn't be verified because the public key is not available: NO_PUBKEY E 852514F5DF312F6 Fetched 65.1 kB in 3s (25.1 kB/s) Reading package lists... Done Building dependency tree... Done Reading state information... Done All packages are up to date. W: An error occurred during the signature verification. The repository is not updated and the previous index files will be used. GPG error: http://ftp.ports.debian.org/debian-ports sid InRelease: The following signatures couldn't be verified because the public key is not available: NO_PUBKEY E852514F5DF312F6 W: Failed to fetch http://ftp.ports.debian.org/debian-ports/dists/sid/InRelease The following signatures couldn't be verified because the public key is not available: NO_PUBKEY E852514F5DF312F6 W: Some index files failed to download. They have been ignored, or old ones used instead.
というエラーが出る。curl https://www.ports.debian.org/archive_2022.key | apt-key add -
のように新しい年のキーをインポートすれば解決できる。
Nezhaで動くUbuntuのイメージが、 Ubuntu 22.04, Ubuntu 23.04あたりから公式で用意 [ubuntu.com]されるようになった。 上記のDebianのイメージを利用する場合と異なり、Linux Kernelも含めてCanonicalからビルドが提供される形なので、しばしば更新が途絶えてしまうボードベンダのイメージに比べて若干の安心感はある。
CanonicalのカーネルだとWi-Fi/Bluetoothが利用できないとのことだが、元々ルールとしては国内でこれらの機能は使用できないので、失うものは多くはないと言えそう。
NezhaでのUbuntu 23.04の起動メッセージから見た感じ、Canonicalのイメージは、ベンダー提供のイメージと異なり、EFI実装が動いたあとでGrub2が動き、そこからKernelが動いてEFI経由でファームウェアとやり取りするようになっている模様。
その後 do-release-upgrade
コマンドを用いた通常手順でUbuntu 23.04 (Lunar Lobster) からUbuntu 23.10 (Mantic Minotaur)に更新できることを確認。
Ubuntu 23.10ではカーネルはlinux-image-6.5.0-14-generic
などgeneric が使われるようになった。
このボードが将来に渡って使い続けられそうで幸せ。
Ubuntu 24.04 LTS (noble)でも引き続きLinux 6.8.0-31-generic
での動作を確認。
Nezha はOpenBSD/riscv64 のSupported hardwareに掲載されている。 こちらはまだ試していない。
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 と比較して半分の性能となった。
SPEC CFP2000 は浮動小数点数の計算を含むベンチマーク集だ。
こちらは、Cortex-A53 でも浮動小数点の演算器は一つしかないので、FPU命令の実行時の頻度が高いワークロードほど、C906 と同じような性能になっていることが観察できる。
-O3 -march=rv64gcv
.-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 (平头哥扩展指令集)に対応している。 この拡張命令セットは以下の機能がある。
NOP
みたいな機能)