Ubuntu Weekly Recipe

第752回RISC-VのシングルボードコンピューターであるVisionFive 2を使ってみる

今回はStarFive Technology製のRISC-Vシングルボードコンピューター(SBC)であるVisionFive 2にDebianをインストールして、その性能を計測してみましょう。

RISC-VとVisionFive 2

RISC-V(りすく・ふぁいぶ)は今もっとも熱い命令セットアーキテクチャーです。2010年頃に生まれたRISC-Vは、オープンな規格という強みを活かしてどんどんエコシステムを構築し、今では様々な企業がRISC-Vに本格的に手を出す状況になっています。AMD64/Intel 64やARMには性能も普及度合いもまだまだ及びませんが、今の勢いを維持できれば近い将来その状況は変わってくるでしょう。

本連載でも2018年ぐらいから、RISC-Vの記事を何度か取り上げていました。

さて、RISC-Vはマイコン向けが今もっとも人気のある分野ではあるのですが、昔からより高性能なボードも出ていました。その最たるものがSiFiveのHiFive Unleashedとその後継であるHiFive Unmatchedです。特にUnmatchedのほうは、PCIeスロットやNVMe SSDスロットも搭載したMini-ITXなボードで、まさにデスクトップ向けの構成でした。ただし、価格は10万円以上と、気軽に手を出すには少し高価な製品でもあったのです。

Raspberry Piクラスの価格とサイズやペリフェラルで、そこそこの性能のSoCが載ったシングルボードコンピューターが欲しいという要望(わがまま)を満たす製品が出だしたのが、だいたい昨年くらいからです。Arm系のSoCでも知られているAllwinnerや、前述のM5StickVを作ったSipeed、そして今回のStarFiveなどがメーカーとしては有名で、今後は他にもいろいろ出てくることでしょう。名前をあげたメーカーの製品に関しては、Ubuntuがサポートしているものもあります

今回紹介するVisionFive 2は、中国のStarFive Technologyが作っているRISC-Vボードです。クラウドファンディングで資金を集め、現在では無事に一般販売が開始されています。性能は純粋に周辺機器だけ見れば、Raspberry Piに勝るとも劣らない性能を備えており、それがAmazonでも4GiBモデルなら12000円程度、8GiBモデルでも15000円弱で購入できます。

図1 VisionFive 2のフロントパネル
図1
図2 VisionFive 2のバックパネル
図2

軽くスペックも紹介しておきましょう。詳細は公式のドキュメントにあるQuick Start Guide(PDF)HTML版のSpecifications等を参照してください。回路図等も掲載されているので、大抵のことはわかるはずです。

  • CPU:StarFive JH7110 (U74 4 Core 1.5GHz) RV64GC
  • LPDDR4 SDRAM 2GiB/4GiB/8GiB 2800Mbps
  • QSPI Flash(ブートローダー用)
  • microSDカードスロットTFカードスロット
  • eMMCソケット
  • M.2 M-key NVMeコネクター(2280サイズが入る)
  • 1000BASE-T x 2ポート
  • USB 3.0 x 4ポート
  • USB-C給電ポート
  • MIPI CSI/DSI
  • GPIO Headers
  • Video Processing Unit/GPU
  • HDMI

いわゆる「RJ45」とも呼ばれる8P8Cコネクタが2個載っているのは珍しいかもしれません。どちらも1GbEなので伝統に即して「2GbE級コネクタ」と呼んで差し支えないでしょう[1]

もうひとつのポイントはこの手のボードにありがちな「Wi-FiやBluetoothが搭載されていないことです。これにより日本でも電波法を気にすることなく気軽に電源を入れられます[2]

VisionFive 2は2023年2月時点ではUbuntuに対応していません。ただし、すでに前世代のVisionFiveは対応済みですし、2022年11月25日のUbuntu Weekly Topicsでも紹介しているように、なにがしかの対応は行われる可能性が高いです。

今回はまずStarFiveが提供している公式のDebianイメージを使ってみましょう。また、その前にQSPI Flashに格納されるブートローダーを更新する手順も説明します。

必要な機材一覧

まずはDebianを動かす上で、必要な機材をまとめておきましょう。太字は必須の機材となります。

  • 給電用のUSB-Cケーブル
  • USB-C経由のACアダプター(5V、最低3A以上)
  • 32GB以上のmicroSDカード
  • Ethernetケーブル
  • シリアルコンソールケーブル
  • HDMIケーブル・HDMIディスプレイ
  • USBキーボード・マウス
  • スペーサー
  • ファン

VisionFive 2はUSB-Cケーブルで給電します。よって少なくとも片方のコネクタがUSB-Cである必要があります。USB PDにも対応しているので、その手の電源コネクター付きポータブルバッテリーとかを繋ぐのも良いかもしれません。なお、最低3A以上とは書いてあるものの、実際の消費電力が15W超えることはほぼないようです。電源に関する詳細はデータシート「4. Electrical Specification」も参照してください。

給電機材とmicroSD以外は、VisionFive 2の操作をどうするかで、必要な機材が変わってきます。直接操作するならHDMIケーブル・HDMIディスプレイとキーボードとマウスが必要になります。もし単にリモートのサーバー的な使い方をするだけなら、これらは不要でEthernetケーブルだけでもかまいません。

なお、初期ファームウェアはHDMIに画面を正しく表示できないかもしれません。この場合は、Ethernetかシリアルコンソールケーブルが必要になります。また、QSPI Flashに書かれているブートローダーが何らかの理由で壊れてしまった場合は、シリアルコンソールケーブルでのみ復旧できます。

これらのことを踏まえると、最低でもEthernetケーブルさえあれば最初のうちはなんとかなります。ちなみにむき出しの基盤を地面に置くのは危ないので必要な機材にあるスペーサーも用意したほうが良いでしょう。特にM.2 M-keyコネクターのせいで、バランスが悪くなっています。

ファンについては、負荷をかけるならあったほうが良さそうです。軽く動かしてみる程度ならなくても問題ありません。

ブートローダー等の更新

準備ができたらVisionFive 2からDebianを起動したいところですが、先にブートローダーを更新しておきましょう。古いブートローダーは、新しいDebianをうまく起動できないためです。

ブートローダーはU-Bootが使われています。U-Boot本体(+OpenSBIと、それを起動するためのSPL(Secondary Program Loader)は、QSPI Flashに保存されているため、これを更新する必要があるのです。一番手っ取り早い方法は、StarTechのGitHubのサイトにある、VisionFive 2関連プロジェクトのリリースページから最新のイメージをダウンロードして使う方法でしょう。

まず上記のサイトから次の3ファイルをダウンロードしておいてください。

  • sdcard.img
  • u-boot-spl.bin.normal.out
  • visionfive2_fw_payload.img

最初がブートローダーを書き込むツール類が一式入ったイメージです。Buildrootで構築されたシンプルなLinux環境となっています。2番目がSPL、3番目がU-Boot本体で、このふたつをQSPI Flashに書き込むことになります。

sdcard.imgはmicroSDカードに書き込んでおきましょう。デスクトップ環境があるなら第488回で紹介しているEtcherが定番ですし、CLIで良ければ次のように書き込みます。なお、/dev/デバイス名の部分は環境によって異なる」ので注意してください。間違えると大事なデータが消えてしまいます。不安であればEtcher等を使うことを強くおすすめします。

$ sudo dd if=sdcard.img of=/dev/デバイス名 bs=1M status=progress
$ sudo sync

microSDカードをVisionFive 2に接続します。次にLANケーブルをコネクターのどちらか好きなほうに接続しましょう。もう片方のコネクターは未接続でOKです。LANケーブルの反対側はDHCPでアドレスを取得できるスイッチ等に接続しておいてください。あとでSSH接続することになるため、接続元のPCと同じネットワークにつないでおく必要がああります。あとはUSB-Cケーブルを接続すれば、電源が入ります。

なお、この時点ではHDMIには何も出力されないので注意してください。起動の流れを見たければシリアルコンソールケーブルが必要ですが、今回はそちらも使いません[3]

うまく電源が入ったら、リセットボタンそばの赤LED(LED2)が点灯します。さらに十数秒待つと、隣の緑LED(LED3)も間欠的に点滅するはずです[4]

さて、VisionFive 2にSSHログインしたいわけですが、IPアドレスを知る必要があります。残念ながらsdcard.imgはmDNS等が動いていません。しかしながら幸いイーサネットのコネクター部分にQRコードのシールが貼ってあり、ここに両方のMACアドレスが記載されています。というわけで、スマートフォンのカメラか何かでQRコードを読み取ってみましょう。いろいろ長い文字列が表示されるものの、末尾に「6CCF39XXXXXX」みたいな文字列がふたつ表示されるはずです。これがMACアドレスです。

もしルーター等のDHCPサーバーのログが見られるなら、このMACアドレスからIPアドレスを確認できます。確認できないようなら、同じサブネットに所属するIPアドレスに順番にpingを打って、そこから類推してもいいでしょう。具体的には手元のマシンから次のように実行します。

$ for i in $(seq 254); do ping -c 1 -q -W 1 198.51.100.$i > /dev/null && echo 198.51.100.$i; done
198.51.100.1
198.51.100.81

$ ping -c 1 198.51.100.81
PING 198.51.100.81 (198.51.100.81) 56(84) bytes of data.
64 bytes from 198.51.100.81: icmp_seq=1 ttl=64 time=0.499 ms

--- 198.51.100.81 ping statistics ---
1 packets transmitted, 1 received, 0% packet loss, time 0ms
rtt min/avg/max/mdev = 0.499/0.499/0.499/0.000 ms

$ ip neigh show to 198.51.100.81
198.51.100.81 dev enp5s0 lladdr 6c:cf:39:00:32:5b STALE

ここで198.51.100.$iは、手元のマシンとVisionFive 2が繋がっているネットワークアドレスに依存します。今回の例だと198.51.100.0/24ですので、198.51.100.1から198.51.100.254までpingすれば、繋がっているデバイスのMACアドレスを一通り収集できるわけです。そう、力技です。

反応があったIPアドレスにもう一度pingを打って、ip neighでMACアドレスを確認すれば、求めていたデバイスであることがわかります。さっそくrootでログインしましょう。

$ ssh root@198.51.100.81
root@198.51.100.81's password:

# uname -a
Linux buildroot 5.15.0 #1 SMP Thu Jan 19 04:09:45 CST 2023 riscv64 GNU/Linux

# cat /etc/os-release
NAME=Buildroot
VERSION=VF2_v2.8.0
ID=buildroot
VERSION_ID=2021.11
PRETTY_NAME="Buildroot 2021.11"

パスワードはstarfiveです。Linuxが動いていて、Buildrootで作られたファームであることがわかります。QSPI Flashは次のように確認できます。

# cat /proc/mtd
dev:    size   erasesize  name
mtd0: 00020000 00001000 "spl"
mtd1: 00300000 00001000 "uboot"
mtd2: 00100000 00001000 "data"

# dd if=/dev/mtd0 status=none | strings | grep "U-Boot SPL"
U-Boot SPL 2021.10 (Dec 19 2022 - 17:24:44 +0800)

# dd if=/dev/mtd1 status=none | strings | grep "U-Boot 20"
U-Boot 2021.10 (Dec 19 2022 - 17:24:44 +0800)

QSPI Flashはmtd0からmtd2までの3パーティションに分割されています。このうち最初にSPLが、2番目にU-Boot本体(とOpenSBI)が入ります[5]。既に入っているファームのバージョンをかんたんに知る術はないので、ここでは単にビルド日時をひっぱってきてみました[6]。2022年12月19日にビルドされたものなので、おそらくVisionFive2 Software v2.5.0が入っているのでしょう。2023年2月時点での最新版はv2.8.0なのでアップデートします。

まずは接続元のマシンからVisionFive 2に、先ほどダウンロードしたイメージをコピーしておきます。

$ scp u-boot-spl.bin.normal.out visionfive2_fw_payload.img root@198.51.100.81:

ここからは公式のドキュメントに従ってアップグレードしていきましょう。今回使用するのはBuildroot環境であり、最新のsdcard.imgは最初からflashcpコマンドがインストールされています。

# flashcp --version
flashcp (mtd-utils) 2.1.3

よってあとは、先ほどコピーしたファイルをQSPI Flashに書き込むだけです。SPLは/dev/mtd0に、U-Boot本体は/dev/mtd1に書き込みます。

# flashcp -v u-boot-spl.bin.normal.out /dev/mtd0
Erasing blocks: 32/32 (100%)
Writing data: 127k/127k (100%)
Verifying data: 127k/127k (100%)

# flashcp -v visionfive2_fw_payload.img /dev/mtd1
Erasing blocks: 683/683 (100%)
Writing data: 2731k/2731k (100%)
Verifying data: 2731k/2731k (100%)

SPLはサイズが小さいのですぐに完了しますが、U-Boot本体は20倍以上のサイズなのでそれなりの時間がかかります。その間、誤って電源を切らないように注意しましょう。改めてデータ内部の文字列を見てみると、新しいバイナリに更新されていることがわかります。

# dd if=/dev/mtd0 status=none | strings | grep "U-Boot SPL"
U-Boot SPL 2021.10 (Jan 19 2023 - 04:09:41 +0800)
# dd if=/dev/mtd1 status=none | strings | grep "U-Boot 20"
U-Boot 2021.10 (Jan 19 2023 - 04:09:41 +0800)

これでブートローダーの更新は完了です。あとはrebootコマンドやリセットボタンで再起動して、問題なく起動することを確認しましょう。電源が再度入ったあと数秒すると緑LEDが間欠的に点滅しますし、数十秒も待てば先ほどと同じようにsshログインできるようになっているはずです。

ちなみにこのBuildroot環境は、HDMIに何も出力しませんが、使えないというわけではありません。rootのホームディレクトリにあるrun_weston.shを実行すると、WaylandのコンポジッターであるWestonが立ち上がり、GUI操作ができるようになります。

# cat run_weston.sh
#!/bin/sh
export XDG_RUNTIME_DIR=/root
export LANG="en_US.UTF-8"
export XCOMPOSEFILE=/root/.config/XCompose
weston --tty=1

スクリプトの内容はこれだけです。これを単に実行するだけでWestonが立ち上がりますので、HDMIディスプレイやUSBキーボード・マウスを接続してみると良いでしょう。

# ./run_weston.sh
Date: 2001-01-01 UTC
[00:01:08.728] weston 9.0.0
               https://wayland.freedesktop.org
               Bug reports to: https://gitlab.freedesktop.org/wayland/weston/issues/
               Build: VF2_v2.8.0
[00:01:08.728] Command line: weston --tty=1
[00:01:08.728] OS: Linux, 5.15.0, #1 SMP Thu Jan 19 04:09:45 CST 2023, riscv64
(略)
図3 シンプルなWeston環境。左上の端末アイコンをクリックすれば、端末アプリケーションが起動する
図3

Debianをインストールする

次にStarFiveが提供しているVisionFive 2向けのDebianを、公式のQuick Start Guideのインストール手順に従ってインストールしてみましょう。⁠this link」にあるDebianイメージをダウンロードします。これは7GiB近いデータなので、ダウンロードするインターネット環境・ストレージ容量には注意してください。

先ほどsdcard.imgを書き込んだmicroSDでもいいですし、別のmicroSDでもかまわないので、ダウンロードしたイメージを書き込みましょう。これもEtcher等を使うのがおすすめですが、CLI操作なら次のように実行します。繰り返しになりますが、/dev/デバイス名の部分は環境によって異なる」ので注意してください。間違えると大事なデータが消えてしまいます

$ bzcat starfive-jh7110-VF2_515_v2.5.0-69.img.bz2 | sudo dd of=/dev/デバイス名 bs=4M status=progress

これもかなり時間がかかります。システムのメモリ容量によってはうまく動かないかもしれません。別の方法としてはbzcatコマンドとパイプを使わずに、bunzip2コマンドで一旦展開してからそれをddコマンドで書き込むという方法もあります。

microSDカードを準備できたら、それをVision Five 2に接続して、電源をいれます。先ほどと同じように数十秒でsshログインできるようになるはずです。ただし同じIPアドレスに対してSSHサーバーの鍵が変わってしまうためWARNING: REMOTE HOST IDENTIFICATION HAS CHANGED!と表示されることになります。あらかじめ次のコマンドを実行してSSHサーバーの鍵を消しておくと良いでしょう。

$ ssh-keygen -f "$HOME/.ssh/known_hosts" -R "IPアドレス"

また、DebianはmDNSが動いているため、IPアドレスを調べなくても「starfive」のホスト名を元に次のコマンドでログインできます。

$ ssh user@starfive.local

Debian環境はsudoコマンド利用可能な、userというアカウントが作られています。パスワードは前回と同じstarfiveです。ちなみにrootアカウントのパスワードもstarfiveのままです。このDebian環境をベースになにか運用をする予定なら、アカウント名やパスワードは変更しておくと良いでしょう。

Debian環境にはXfceがインストールされているため、HDMIディスプレイとUSBキーボード・マウスを使うとGUIログインができます。

図4 Debianのログイン画面
図4
図5 動いているのは軽量なXfce
図5

実際に使ってみるとわかりますが、比較的軽量な部類に入るXfceですら、もっさりとした動作です。これはmicroSDという低速なストレージを使っていることもありますが、そもそもCPU/GPUが遅いのも影響しているでしょう。たとえばRaspberry Pi 3の頃は「データがメモリーに乗ってしまえば十分実用的」という感触でしたが、VisionFive 2はまだ「メモリーに乗ったとしても遅い」感覚です。

$ uname -a
Linux starfive 5.15.0-starfive #1 SMP Mon Dec 19 07:56:37 EST 2022 riscv64 GNU/Linux

$ cat /etc/os-release
PRETTY_NAME="Debian GNU/Linux bookworm/sid"
NAME="Debian GNU/Linux"
ID=debian
HOME_URL="https://www.debian.org/"
SUPPORT_URL="https://www.debian.org/support"
BUG_REPORT_URL="https://bugs.debian.org/"

$ cat /etc/debian_version
bookworm/sid

カーネルは5.15が動いています。Debianのsidをベースに構築されているようです。/proc/cpuinfoを見ると、正しく4コアとして認識されていることがわかります。

# cat /proc/cpuinfo
processor       : 0
hart            : 2
isa             : rv64imafdc
mmu             : sv39
isa-ext         :
uarch           : sifive,u74-mc

processor       : 1
hart            : 1
isa             : rv64imafdc
mmu             : sv39
isa-ext         :
uarch           : sifive,u74-mc

processor       : 2
hart            : 3
isa             : rv64imafdc
mmu             : sv39
isa-ext         :
uarch           : sifive,u74-mc

processor       : 3
hart            : 4
isa             : rv64imafdc
mmu             : sv39
isa-ext         :
uarch           : sifive,u74-mc

amd64なCPUと比べると拡張機能等が少ないため大変シンプルな出力です。⁠hart」「Hardware Thread」です。今回のCPUの場合は1コアあたり1スレッドで、4コア4スレッドという構成になります。

リポジトリの設定

Debianイメージはsnapshot.debian.orgの2022年6月16日ぐらいのsid(unstable)を利用しています。

$ cat /etc/apt/sources.list
deb https://snapshot.debian.org/archive/debian-ports/20220616T194833Z unstable main

そのままでも良いのですが、リポジトリの鍵更新の都合で、次のようにエラーになってしまいます。

$ sudo apt udpate
Hit:1 https://snapshot.debian.org/archive/debian-ports/20220616T194833Z unstable InRelease
Err:1 https://snapshot.debian.org/archive/debian-ports/20220616T194833Z unstable InRelease
  The following signatures were invalid: EXPKEYSIG E852514F5DF312F6 Debian Ports Archive Automatic Signing Key (2022) <ftpmaster@ports-master.debian.org>
Reading package lists... Done
Building dependency tree... Done
Reading state information... Done
1 package can be upgraded. Run 'apt list --upgradable' to see it.
W: An error occurred during the signature verification. The repository is not updated and the previous index files will be used. GPG error: https://snapshot.debian.org/archive/debian-ports/20220616T194833Z unstable InRelease: The following signatures were invalid: EXPKEYSIG E852514F5DF312F6 Debian Ports Archive Automatic Signing Key (2022) <ftpmaster@ports-master.debian.org>
W: Failed to fetch https://snapshot.debian.org/archive/debian-ports/20220616T194833Z/dists/unstable/InRelease  The following signatures were invalid: EXPKEYSIG E852514F5DF312F6 Debian Ports Archive Automatic Signing Key (2022) <ftpmaster@ports-master.debian.org>
W: Some index files failed to download. They have been ignored, or old ones used instead.

そこでリポジトリを日付指定のスナップショットではなく、最新のsidにしてしまいましょう。

$ sudo mv /etc/apt/sources.list{,.d/snapshot.conf.disabled}
$ echo "deb http://deb.debian.org/debian-ports unstable main" | sudo tee /etc/apt/sources.list

さらにリポジトリの公開鍵も更新しておきます。これはいくつか方法があるのですが、最新のkeyringパッケージを取得してインストールするのがかんたんです。

$ wget https://deb.debian.org/debian-ports/pool/main/d/debian-ports-archive-keyring/debian-ports-archive-keyring_2023.02.01_all.deb
$ sudo apt install ./debian-ports-archive-keyring_2023.02.01_all.deb
$ sudo apt update
$ sudo apt full-upgrade

最後の更新時はおそらく800個以上のパッケージが更新され、600MB以上のダウンロードが必要になります。心してかかってください。アップグレードが完了したらsudo rebootコマンドで再起動し、問題なく起動することを確認しておきましょう。

また、ブートローダー等を更新するためにはflashcpコマンドが必要になります。Debianだと最初からは入っていないようなのでsudo apt install mtd-utilsでインストールしておくと良いでしょう。

他にもたとえばPCIeデバイスを見るなら、次のように実行します。

$ sudo apt install pciutils
$ lspci
00:00.0 PCI bridge: PLDA XpressRich-AXI Ref Design (rev 02)
01:00.0 USB controller: VIA Technologies, Inc. VL805/806 xHCI USB 3.0 Controller (rev 01)

ベンチマークを計測する

せっかくだからベンチマークもとってみましょう。第724回CPUコアごとのベンチマークをPythonで簡単に取得してみるではp7zipを使ってCPU性能を測る方法を、第749回LXDとUbuntuサーバーで、多数のストレージが必要なRAID環境を構築し性能を比較するではfioを使ってストーレジ性能を測る方法を紹介しました。

もちろんこれらはDebianでも利用可能です。次のようにパッケージをインストールしましょう。

$ sudo apt install fio jq p7zip-full

p7zipでシングルスレッドの性能を計測してみます。

$ 7z b -mmt1

7-Zip 16.02 : Copyright (c) 1999-2016 Igor Pavlov : 2016-05-21
p7zip Version 16.02 (locale=C,Utf16=off,HugeFiles=on,64 bits,4 CPUs LE)

LE
CPU Freq: 64000000 64000000 64000000 - - - 512000000 - -

RAM size:    7927 MB,  # CPU hardware threads:   4
RAM usage:    435 MB,  # Benchmark threads:      1

                       Compressing  |                  Decompressing
Dict     Speed Usage    R/U Rating  |      Speed Usage    R/U Rating
         KiB/s     %   MIPS   MIPS  |      KiB/s     %   MIPS   MIPS

22:        908   100    885    884  |      17148   100   1465   1464
23:        871   100    889    888  |      16845   100   1459   1458
24:        840   100    904    903  |      16474   100   1449   1446
25:        808   100    924    923  |      16069   100   1432   1430
----------------------------------  | ------------------------------
Avr:             100    901    900  |              100   1451   1450
Tot:             100   1176   1175

Alder LakeのCore i9-12900のP-Core/5GHzで6800MIPSぐらい、E-Core/8.8GHzで3800MIPSぐらい、さらにRaspberry Pi 4のCore-A72/1.5GHzで1700MIPSぐらいであることを考えると、Raspberry Pi 3+よりは少し速いといった感じでしょうか。

fioに関しては設定が複雑なので第749回を参照してください。ここでは計測結果だけ示します。

$ jq -r '.jobs[] | [.jobname, if .read.bw > 0 then .read.bw, .read.iops | round
    else .write.bw, .write.iops | round end] | @tsv' \
    results.json | column -t --table-columns JOB,KB/s,IOPS --table-right KB/s,IOPS
JOB                  KB/s  IOPS
SEQ1MQ8T1-Read      22888    22
SEQ1MQ8T1-Write     11930    12
SEQ128KQ32T1-Read   22811   178
SEQ128KQ32T1-Write  11951    93
RND4KQ32T16-Read     8138  2035
RND4KQ32T16-Write    2378   595
RND4KQ1T11-Read      6482  1621
RND4KQ1T1-Write      2117   529

今回使用したのはTranscendの64GB、class 10/UHS 1/A1なmicro SDXCカードです。つまり最低保証は10MB/sで、ランダムなIOPSがRead 1500/Write 500というものなので、十分な性能は出ているようです。ただし、普通にLinuxを使う上では速度が足りません。VisionFive 2にはPCIe 2.0x1とはいえ、M.2 NVMe SSDを搭載可能であるため、ブートデバイス以外の通常のストレージはそちらを使ったほうが良さそうです。

ベンチマークを取るならsbc-benchも便利です。その名の通り「Single Board Computer」向けのベンチマークツールで、Raspberry Pi等と結果を比較したい場合に使えるでしょう。ただしこれ自体はシンプルなシェルスクリプトですが、実際はベンチマークに必要なパッケージ等をインストールしてしまうので気をつけましょう。また実行結果はpastebinサービスであるhttp://ix.ioに勝手にアップロードされてしまう点にも注意が必要です。

まずはgitコマンドをインストールして、ソースコードをcloneします。

$ sudo apt install git
$ git clone https://github.com/ThomasKaiser/sbc-bench.git
$ cd sbc-bench/

-hオプションを付けて実行すると、詳細なオプションを説明してくれます。

$ ./sbc-bench.sh -h

Usage: sbc-bench.sh [-c] [-g] [-G] [-h] [-m] [-P] [-t $degree] [-T $degree] [-s]

############################################################################

 Use sbc-bench.sh for the following tasks:

 sbc-bench.sh invoked without arguments runs a standard benchmark
 sbc-bench.sh -c also executes cpuminer stress tester (NEON/SSE/AVX)
 sbc-bench.sh -g graphs 7-zip MIPS for every cpufreq OPP
 sbc-bench.sh -G Geekbench mode, ensures benchmark is properly monitored
 sbc-bench.sh -h displays this help text
 sbc-bench.sh -j Jeff Geerling mode. Don't use if you're not him
 sbc-bench.sh -k Kernel info: version number and vendor/BSP check
 sbc-bench.sh -m [$seconds] provides CLI monitoring (5 sec default interval)
 sbc-bench.sh -P Phoronix mode, ensures benchmark is properly monitored
 sbc-bench.sh -r Review mode: generate insights via benchmarking
 sbc-bench.sh -s also executes stockfish stress tester (NEON/SSE/AVX/RAM)
 sbc-bench.sh -t [$degree] runs thermal test waiting to cool down to this value
 sbc-bench.sh -T [$degree] runs thermal test heating up to this value

 The environment variable MODE can be set to either extensive or unattended
 prior to benchmark execution. Exporting MaxKHz will also be honored, see here
 for details: https://github.com/ThomasKaiser/sbc-bench#unattended-execution

 With a Netio powermeter accessible you can export Netio=address/socket to
 sbc-bench defining address and socket this device is plugged into. Requires
 XML API enabled and read-only access w/o password. Use this only with -g to
 draw efficiency graphs since results will be slightly tampered by this mode.

############################################################################

たとえば-cオプションで、テストをしてみましょう。

$ sudo ./sbc-bench.sh -c
WARNING: This tool is meant to run only on Debian Stretch, Buster, Bullseye or Ubuntu Bionic, Focal, Jammy, Kinetic.

When executed on Debian GNU/Linux bookworm/sid results are partially meaningless.
Press [ctrl]-[c] to stop or [enter] to continue.

Average load and/or CPU utilization too high (too much background activity). Waiting...

Too busy for benchmarking: 08:11:51 up  3:05,  2 users,  load average: 0.15, 0.04, 0.01,  cpu: 0%
Too busy for benchmarking: 08:11:56 up  3:05,  2 users,  load average: 0.14, 0.04, 0.01,  cpu: 0%
Too busy for benchmarking: 08:12:01 up  3:05,  2 users,  load average: 0.13, 0.04, 0.01,  cpu: 0%
Too busy for benchmarking: 08:12:06 up  3:05,  2 users,  load average: 0.12, 0.04, 0.01,  cpu: 0%
Too busy for benchmarking: 08:12:11 up  3:05,  2 users,  load average: 0.11, 0.04, 0.01,  cpu: 0%
Too busy for benchmarking: 08:12:16 up  3:05,  2 users,  load average: 0.10, 0.03, 0.01,  cpu: 0%

sbc-bench v0.9.23

Installing needed tools: apt -f -qq -y install gcc make build-essential lm-sensors sysstat curl lshw mbw, tinymembench, ramlat, mhz (can't build cpuminer) Done.
Checking cpufreq OPP. Done (results will be available in 10-16 minutes).
Executing tinymembench. Done.
Executing RAM latency tester. Done.
Executing OpenSSL benchmark. Done.
Executing 7-zip benchmark. Done.
(/usr/local/src/cpuminer-multi/cpuminer missing or not executable). Done.
Checking cpufreq OPP again. Done (12 minutes elapsed).

Memory performance
memcpy: : 864.6 MB/s
memset: : 762.6 MB/s

7-zip total scores (3 consecutive runs): 3998,4180,4082, single-threaded: 1194

OpenSSL results:
type             16 bytes     64 bytes    256 bytes   1024 bytes   8192 bytes  16384 bytes
aes-128-cbc       7890.50k     8696.23k     9010.94k     9089.02k     9117.70k     9125.89k
aes-128-cbc       7862.50k     8708.78k     9021.27k     9102.34k     9112.23k     9095.57k
aes-192-cbc       6889.01k     7514.01k     7737.34k     7794.69k     7809.71k     7809.71k
aes-192-cbc       6879.35k     7513.32k     7732.22k     7790.59k     7809.71k     7809.71k
aes-256-cbc       6079.53k     6588.97k     6759.25k     6803.46k     6823.94k     6815.74k
aes-256-cbc       6122.47k     6600.96k     6769.07k     6813.35k     6826.67k     6826.67k

Full results uploaded to http://ix.io/4owG

Debianのsidには対応していない旨が表示されますが、特に問題なく動くと思っていただいてかまいません。Too busy forが表示され続けるようなら、余計なプロセスやデーモンを終了しておきましょう。ロードアベレージが0.10を切らないとテストは実施しないようです。

あとは必要なパッケージをインストールしてテストを実施するのでしばらく放置しておくと、上記のように「Full results uploaded」と表示されます。アップロード先のサイトの末尾には、計測結果のまとめが表示されています。代表的なSBCの計測結果はsbc-benchのリポジトリのResults.mdにまとまっていますので、そちらと比較してみるのもいいかもしれません。

たとえばRaspberry Piの3B+と4から代表的な結果を抽出し、今回の計測結果と比較すると次のようになります。

Device Clock Kernel 7-zip multi/single AES memcpy memset
RasPi 3B+ 1.4GHz 4.14 3240/914 36600 1130 1530
RasPi 4 1.8GHz 5.10 5790/1769 36260 2330 3120
VisionFive2 1.5GHz 5.15 4090/1194 6820 860 760

前提条件がいろいろ異なるため単純な比較は難しいですが、CPUだけだとRasPi 3B+よりはよい性能が出ているものの、メモリーの速度が厳しいように見えます。特にLPDDR4で2800Mbpsまで出るはずのVisionFive 2がLPDDR2なRasPi 3B+に比べてこの結果だとすると、そのあたりに速度が出ない要因がありそうです。

おすすめ記事

記事・ニュース一覧