SpacemiT sent me a sample of the MUSE Book RISC-V Linux laptop for review. It’s based on the SpacemiT K1/M1 octa-core 64-bit RISC-V SoC, ships with up to 16 GB of RAM, eMMC flash and/or NVMe SSD, and features a 14.1-inch IPS display with 1920×1080 resolution, WiFi 6 connectivity, a few USB ports, and more.
I won’t go through all the hardware specifications since Leo already did that when he wrote about the MUSE Book Laptop in April 2024, along with a teardown, and additional details about the SpacemiT K1/M1 SoC. I’ll still do an unboxing and quickly check the hardware, but I’ll focus on the software part to show the progress with Bianbu OS 2.3 (Ubuntu 24.04-based) on RISC-V hardware, as I just did for the low-end StarFive JH7110S-based VisionFive 2 Lite SBC. It’s quite a long review, so if you are short on time, you can jump directly to the summary of what works and what doesn’t.
MUSE Book laptop unboxing
I received the MUSE Book (MBM100) laptop in a retail package, and my model comes with 8GB of RAM and a 128GB NVMe SSD.
The laptop ships with a 65W USB power supply, a USB Type-C cable for power, a GPIO/UART cable, a SIM card tool (to enter bootloader mode), a user guide, a packing list, a warranty card, a safe use guide, and an I/O expansion interface guide.
The included myACT APS-PD65WZ-G fast charger delivers up to 65W (20V/3.25A).
The external ports remain the same as in 2024. The right side features a Fastboot pinhole to flash the OS, an 8-pin GPIO/I2C/UART header, and a USB 3.0 Type-A port. The left side comes with another USB 3.0 Type-A port, a 3.5mm headphone jack, a USB-C port for power and data, a USB-C “full function” port with DisplayPort Alt mode, a microSD card slot, and a “Restart” pinhole.
The keyboard features a QWERTY keyboard, a touchpad, and three LEDs.
Back in April 2024, Leo could not turn on the laptop as it was an early prototype, but I had no such problem, and Bianbu OS booted normally after I pressed the power button. The front also features a Full HD webcam. The wizard allows users to switch between simplified Chinese and American English and set the timezone and other configuration settings.
As a side note, Bianbu OS was also used in the Jupiter Mini-ITX motherboard board I reviewed in 2024, and there were a few issues at the time, including poor YouTube performance, unstable ffmpeg video playback, and some issues with specific USB mass storage devices. It will be interesting to find out if any of that has improved on SpacemiT K1/M1 since then.
MUSE Book 2026 teardown
While Leo did a teardown, there are some minor changes to the hardware, so I did my own. I had to loosen fourteen screws on the back. Note there’s a sticker on one of the screws (bottom right) that’s usually used to void the warranty. It’s unclear whether that’s the case here.
The internal design looks fairly neat. We have the 38Wh, 7.6V battery, a speaker, the NVMe SSD, and the main board covered by a metal plate for cooling. The system is entirely fanless.
After removing additional screws, we can take out the black metal plate and check out the main board. Three thermal pads are used for cooling, including two for the SpacemiT M1 SoC.
The main components are the same as in Leo samples, and some that were not previously mentioned include a VLI817-Q7 4-port USB 3.1 Gen1 Hub controller, Lontium LT6711A HDMI 2.0 to DP 1.2 converter with internal Type-C Alternate Mode switch and PD controller, and SlimPort ANX7447 USB Power Delivery (PD) version 3.0 port controller with a DisplayPort Alt Mode mux. The WiFI 6 and Bluetooth module is still the Fn-Link 6252C-PUB (Realtek RTL8852BE-based).
Bianbu OS system information
After I went through the setup wizard, I was brought to the LxQt desktop environment. The system was still not connected to WiFI, so I just enabled it, entered my 5GHz access point credentials, and connected without issue.
We can get some system information using hardinfo and About LXQt programs. We have an M1-MUSE-BOOK motherboard with a quad-core/eight-thread RISC-V processor, 8GB of RAM, running Bianbu 2.3 OS with LXQt 2.1 lightweight desktop environment.
As usual, I also ran inxi to get further technical details:
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 |
cnxsoft@musebook-cnx:~$ sudo inxi -Fc0 [sudo] password for cnxsoft: System: Host: musebook-cnx Kernel: 6.6.63 arch: riscv64 bits: 64 Console: pty pts/2 Distro: Bianbu 2.3 (Noble Numbat) Machine: Type: RISCV System: M1-MUSE-BOOK details: N/A serial: YLMBM000000000 Battery: ID-1: sbs-5-000b charge: 11.3 Wh (30.5%) condition: 37.1/36.5 Wh (101.7%) CPU: Info: quad core model: Spacemit X60 variant: x60 bits: 64 type: MT MCP cache: L2: 1024 KiB Speed (MHz): avg: 1600 min/max: 614/1600 cores: 1: 1600 2: 1600 3: 1600 4: 1600 5: 1600 6: 1600 7: 1600 8: 1600 Graphics: Device-1: saturn-le driver: spacemit_drm_drv v: N/A Device-2: hdmi driver: spacemit_hdmi_drv v: N/A Device-3: saturn-hdmi driver: spacemit_drm_drv v: N/A Device-4: Chicony USB2.0 FHD UVC WebCam driver: uvcvideo type: USB Display: server: X.org v: 1.21.1.11 with: Xwayland v: 23.2.6 driver: N/A tty: 80x24 API: EGL v: 1.4,1.5 drivers: pvr,swrast platforms: gbm,surfaceless,device API: OpenGL v: 3.3 vendor: mesa v: 24.0.1 note: console (EGL sourced) renderer: softpipe Audio: Device-1: hdmi driver: spacemit_hdmi_drv Device-2: spacemit-snd-sspa driver: spacemit_snd_sspa Device-3: spacemit-snd-dma-hdmi driver: spacemit_snd_dma Device-4: spacemit-i2s0 driver: spacemit_snd_i2s Device-5: simple-audio-card driver: spacemit_audio_card Device-6: simple-audio-card driver: spacemit_audio_card Device-7: spacemit-snd-dma0 driver: spacemit_snd_dma Device-8: spacemit-snd-dma1 driver: spacemit_snd_dma Device-9: spacemit-snd-dma3 driver: spacemit_snd_dma API: ALSA v: k6.6.63 status: kernel-api Network: Device-1: Realtek RTL8852BE PCIe 802.11ax Wireless Network driver: rtw89_8852be IF: wlP1p1s0 state: up mac: 44:87:63:e4:b3:9f Device-2: k1x-emac driver: N/A IF: wlP1p1s0 state: up mac: 44:87:63:e4:b3:9f Device-3: k1x-emac driver: N/A IF: wlP1p1s0 state: up mac: 44:87:63:e4:b3:9f Bluetooth: Device-1: Realtek Bluetooth Radio driver: btusb type: USB Report: hciconfig ID: hci0 state: up address: 44:87:63:E4:B3:A0 bt-v: 5.3 Drives: Local Storage: total: 119.24 GiB used: 5.45 GiB (4.6%) ID-1: /dev/nvme0n1 model: 128GB SSD size: 119.24 GiB Partition: ID-1: / size: 117 GiB used: 5.4 GiB (4.6%) fs: ext4 dev: /dev/nvme0n1p6 ID-2: /boot size: 223.7 MiB used: 49.8 MiB (22.3%) fs: ext4 dev: /dev/nvme0n1p5 Swap: Alert: No swap data was found. Sensors: System Temperatures: cpu: 48.0 C mobo: N/A Fan Speeds (rpm): N/A Info: Memory: total: 8 GiB available: 7.67 GiB used: 930.5 MiB (11.9%) Processes: 259 Uptime: 21m Init: systemd target: graphical (5) Shell: Sudo inxi: 3.3.34 |
The MUSE Book is powered by an octa-core SpacemiT X60 processor clocked at up to 1.6 GHz, and is equipped with a 128GB NVMe SSD and 8GB of RAM. All peripherals are detected properly, including HDMI video/audio, the Chicony USB2.0 FHD UVC webcam, and the Realtek RTL8852BE WiFi 6 and Bluetooth 5.3 module. Bianbu 2.3 is based on Ubuntu 24.04 “Noble Numbat” and runs on top of Linux 6.6 LTS, supported until December 2026.
SpacemiT (M1) MUSE Book Benchmarks
Let’s start the benchmarks with sbc-bench.sh:
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 |
cnxsoft@musebook-cnx:~$ sudo ./sbc-bench.sh -r Starting to examine hardware/software for review purposes... Average load and/or CPU utilization too high (too much background activity). Waiting... Too busy for benchmarking: 12:06:07 up 29 min, 2 users, load average: 2.70, 2.41, 2.17, cpu: 2% .... Too busy for benchmarking: 12:10:51 up 34 min, 2 users, load average: 2.23, 2.30, 2.18, cpu: 1% sbc-bench v0.9.72 Installing needed tools: apt-get -f -qq -y install sysstat lshw links mmc-utils smartmontools stress-ng, p7zip 16.02, tinymembench, ramlat, mhz, cpufetch, cpumi (can't build cpuminer) Done. Checking cpufreq OPP. Done. Executing tinymembench. Done. Executing RAM latency tester. Done. Executing OpenSSL benchmark. Done. Executing 7-zip benchmark. Done. Throttling test: heating up the device, 5 more minutes to wait. Done. Checking cpufreq OPP again. Done (18 minutes elapsed). Results validation: * Measured clockspeed not lower than advertised max CPU clockspeed * Too much background activity (%system): 3% avg, 6% max -> https://tinyurl.com/mr2wy5uv * Too much other background activity: 3% avg, 9% max -> https://tinyurl.com/mr2wy5uv # M1-MUSE-BOOK Tested with sbc-bench v0.9.72 on Sat, 03 Jan 2026 12:34:01 +0700. ### General information: spacemit socs M1-8571 rev C, Kernel: riscv64, Userland: riscv64 CPU sysfs topology (clusters, cpufreq members, clockspeeds) cpufreq min max CPU cluster policy speed speed core type 0 0 0 614 1600 spacemit,x60 1 0 0 614 1600 spacemit,x60 2 0 0 614 1600 spacemit,x60 3 0 0 614 1600 spacemit,x60 4 0 0 614 1600 spacemit,x60 5 0 0 614 1600 spacemit,x60 6 0 0 614 1600 spacemit,x60 7 0 0 614 1600 spacemit,x60 7849 KB available RAM ### Governors/policies (performance vs. idle consumption): Original governor settings: cpufreq-policy0: performance / 1600 MHz (conservative ondemand userspace powersave performance schedutil / 614 819 1000 1229 1600) Tuned governor settings: cpufreq-policy0: performance / 1600 MHz Status of performance related policies found below /sys: /sys/module/pcie_aspm/parameters/policy: default [performance] powersave powersupersave ### Clockspeeds (idle vs. heated up): Before: cpu0 (spacemit,x60): OPP: 1600, Measured: 1596 After: cpu0 (spacemit,x60): OPP: 1600, Measured: 1597 ### Performance baseline * memcpy: 2475.7 MB/s, memchr: 2653.0 MB/s, memset: 6173.0 MB/s * 16M latency: 246.9 268.3 245.6 255.1 244.9 267.0 263.5 534.5 * 128M latency: 288.0 275.5 282.8 282.4 263.0 292.0 328.8 539.1 * 7-zip MIPS (3 consecutive runs): 6692, 6767, 6742 (6730 avg), single-threaded: 1081 * `aes-256-cbc 23737.47k 27521.45k 28547.07k 28935.85k 28999.68k 28945.07k` * `aes-256-cbc 23823.60k 27557.12k 28656.13k 28974.08k 29040.64k 28955.99k` ### PCIe and storage devices: * Realtek RTL8852BE PCIe 802.11ax Wireless Network: Speed 2.5GT/s, Width x1, driver in use: rtw89_8852be, * 119.2GB "128GB SSD" SSD as /dev/nvme0: Speed 5GT/s (downgraded), Width x2 (downgraded), 0% worn out, drive temp: 49°C, ASPM Disabled * Fmsh FM25Q64AI3 SPI NOR flash (6 partitions: bootinfo: 64KB, private: 64KB, fsbl: 256KB, env: 64KB, opensbi: 192KB, uboot: 7552KB), drivers in use: spi-nor/k1x-qspi/simple-pm-bus ### Software versions: * Bianbu 2.3 (noble) * Compiler: /usr/bin/gcc (Bianbu 13.2.0-23ubuntu4bb4) 13.2.0 / riscv64-linux-gnu * OpenSSL 3.0.13, built on 30 Jan 2024 (Library: OpenSSL 3.0.13 30 Jan 2024) ### Kernel info: * `/proc/cmdline: earlyprintk quiet splash plymouth.ignore-serial-consoles plymouth.prefer-fbcon clk_ignore_unused swiotlb=65536 workqueue.default_affinity_scope=system mtdparts=d420c000.spi-0:64K@0(bootinfo),64K@64K(private),256K@128K(fsbl),64K@384K(env),192K@448K(opensbi),-@640K(uboot) rootfstype=ext4 root=UUID=b9bf4a41-e5ca-43c0-b472-b2dc7e8fd99a console=ttyS0,115200n8 loglevel=1 rdinit=/init driver_async_probe=spacemit-hdmi-drv,i2c-spacemit-k1x,ri2c-spacemit-k1x,k1xccic,sdhci-spacemit,k1x-dwc-pcie,pxa2xx-uart` * Kernel 6.6.63 / CONFIG_HZ=250 All known settings adjusted for performance. Device now ready for benchmarking. Once finished stop with [ctrl]-[c] to get info about throttling, frequency cap and too high background activity all potentially invalidating benchmark scores. All changes with storage and PCIe devices as well as suspicious dmesg contents will be reported too. Time CPU load %cpu %sys %usr %nice %io %irq Temp 12:34:12: 1600MHz 8.25 29% 3% 26% 0% 0% 0% °C ^C Cleaning up. Done. Checking cpufreq OPP again. Done. Clockspeeds now: cpu0 (spacemit,x60): OPP: 1600, Measured: 1597 ATTENTION: lots of noise in kernel ring buffer since start of monitoring: [ 3810.911874] rtw89_8852be 0001:01:00.0: timed out to flush queues [ 3811.135985] rtw89_8852be 0001:01:00.0: timed out to flush queues [ 3815.395535] wlP1p1s0: authenticate with 3c:cd:57:f5:af:91 [ 3815.581533] wlP1p1s0: send auth to 3c:cd:57:f5:af:91 (try 1/3) [ 3815.600549] wlP1p1s0: authenticated [ 3815.604890] wlP1p1s0: associate with 3c:cd:57:f5:af:91 (try 1/3) [ 3815.640125] wlP1p1s0: RX AssocResp from 3c:cd:57:f5:af:91 (capab=0x511 status=0 aid=3) [ 3815.757146] wlP1p1s0: associated [ 3815.757293] wlP1p1s0: Limiting TX power to 27 (30 - 3) dBm as advertised by 3c:cd:57:f5:af:91 [ 4823.725120] rtw89_8852be 0001:01:00.0: timed out to flush queues [ 4823.945108] rtw89_8852be 0001:01:00.0: timed out to flush queues [ 4828.202261] wlP1p1s0: authenticate with 3c:cd:57:f5:af:91 [ 4828.386919] wlP1p1s0: send auth to 3c:cd:57:f5:af:91 (try 1/3) [ 4828.407845] wlP1p1s0: authenticated [ 4828.411333] wlP1p1s0: associate with 3c:cd:57:f5:af:91 (try 1/3) [ 4828.450814] wlP1p1s0: RX AssocResp from 3c:cd:57:f5:af:91 (capab=0x511 status=0 aid=3) [ 4828.567430] wlP1p1s0: associated [ 4828.620557] wlP1p1s0: Limiting TX power to 27 (30 - 3) dBm as advertised by 3c:cd:57:f5:af:91 [ 8615.860301] rtw89_8852be 0001:01:00.0: timed out to flush queues [ 8616.078366] rtw89_8852be 0001:01:00.0: timed out to flush queues [ 8620.311470] wlP1p1s0: authenticate with 3c:cd:57:f5:af:91 [ 8620.498176] wlP1p1s0: send auth to 3c:cd:57:f5:af:91 (try 1/3) [ 8620.522189] wlP1p1s0: authenticated [ 8620.524496] wlP1p1s0: associate with 3c:cd:57:f5:af:91 (try 1/3) [ 8620.563088] wlP1p1s0: RX AssocResp from 3c:cd:57:f5:af:91 (capab=0x511 status=0 aid=3) [ 8620.676621] wlP1p1s0: associated [ 8620.761858] wlP1p1s0: Limiting TX power to 27 (30 - 3) dBm as advertised by 3c:cd:57:f5:af:91 Results validation: * Measured clockspeed not lower than advertised max CPU clockspeed * Background activity (%system) OK |
There was no throttling detected (reported vs measured CPU frequency), but the temperature was not reported by the script (See full sbc-bench.sh log). In terms of performance, the SpacemiT M1 octa-core laptop achieved 6,730 MIPS in 7-Zip, which compares to 3290 MIPS for the StarFive JH7110S quad-core RISC-V SBC. So over double the score which should be expected with the higher number of cores and CPU frequency. This multi-core score is also higher than for the Raspberry Pi 4 (quad-core Cortex-A72) with heatsink (5,397 MIPS) (tested in 2019).
You’ll note that the script complains about a high load average. That’s because it’s about 2.0 when idle due to some processes in the wrong state.
Let’s test the GPU and 3D graphics acceleration with glmark2-es2-wayland.
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 |
cnxsoft@musebook-cnx:~$ glmark2-es2-wayland ======================================================= glmark2 2023.01 ======================================================= OpenGL Information GL_VENDOR: Imagination Technologies GL_RENDERER: PowerVR B-Series BXE-2-32 GL_VERSION: OpenGL ES 3.2 build 24.2@6603887 Surface Config: buf=32 r=8 g=8 b=8 a=8 depth=24 stencil=0 samples=0 Surface Size: 800x600 windowed ======================================================= [build] use-vbo=false: FPS: 374 FrameTime: 2.681 ms [build] use-vbo=true: FPS: 732 FrameTime: 1.367 ms [texture] texture-filter=nearest: FPS: 731 FrameTime: 1.369 ms [texture] texture-filter=linear: FPS: 732 FrameTime: 1.368 ms [texture] texture-filter=mipmap: FPS: 771 FrameTime: 1.298 ms [shading] shading=gouraud: FPS: 581 FrameTime: 1.722 ms [shading] shading=blinn-phong-inf: FPS: 632 FrameTime: 1.584 ms [shading] shading=phong: FPS: 513 FrameTime: 1.950 ms [shading] shading=cel: FPS: 487 FrameTime: 2.056 ms [bump] bump-render=high-poly: FPS: 332 FrameTime: 3.021 ms [bump] bump-render=normals: FPS: 802 FrameTime: 1.248 ms [bump] bump-render=height: FPS: 755 FrameTime: 1.326 ms [effect2d] kernel=0,1,0;1,-4,1;0,1,0;: FPS: 409 FrameTime: 2.449 ms [effect2d] kernel=1,1,1,1,1;1,1,1,1,1;1,1,1,1,1;: FPS: 151 FrameTime: 6.649 ms [pulsar] light=false:quads=5:texture=false: FPS: 878 FrameTime: 1.140 ms [desktop] blur-radius=5:effect=blur:passes=1:separable=true:windows=4: FPS: 147 FrameTime: 6.811 ms [desktop] effect=shadow:windows=4: FPS: 392 FrameTime: 2.552 ms [buffer] columns=200:interleave=false:update-dispersion=0.9:update-fraction=0.5:update-method=map: FPS: 151 FrameTime: 6.640 ms [buffer] columns=200:interleave=false:update-dispersion=0.9:update-fraction=0.5:update-method=subdata: FPS: 156 FrameTime: 6.448 ms [buffer] columns=200:interleave=true:update-dispersion=0.9:update-fraction=0.5:update-method=map: FPS: 216 FrameTime: 4.636 ms [ideas] speed=duration: FPS: 340 FrameTime: 2.944 ms [jellyfish] <default>: FPS: 282 FrameTime: 3.555 ms [terrain] <default>: FPS: 20 FrameTime: 52.495 ms [shadow] <default>: FPS: 374 FrameTime: 2.679 ms [refract] <default>: FPS: 45 FrameTime: 22.424 ms [conditionals] fragment-steps=0:vertex-steps=0: FPS: 800 FrameTime: 1.251 ms [conditionals] fragment-steps=5:vertex-steps=0: FPS: 562 FrameTime: 1.780 ms [conditionals] fragment-steps=0:vertex-steps=5: FPS: 852 FrameTime: 1.174 ms [function] fragment-complexity=low:fragment-steps=5: FPS: 741 FrameTime: 1.351 ms [function] fragment-complexity=medium:fragment-steps=5: FPS: 413 FrameTime: 2.422 ms [loop] fragment-loop=false:fragment-steps=5:vertex-steps=5: FPS: 703 FrameTime: 1.423 ms [loop] fragment-steps=5:fragment-uniform=false:vertex-steps=5: FPS: 704 FrameTime: 1.421 ms [loop] fragment-steps=5:fragment-uniform=true:vertex-steps=5: FPS: 707 FrameTime: 1.415 ms ======================================================= glmark2 Score: 498 ======================================================= |
I’m not surprised it works, as this was already the case on the Jupiter motherboard in 2024. The score is 498 points, or higher than on the VisionFive 2 Lite (322 points). It’s a bit surprising since the SpacemiT M1 features a BXE-2-32, while the StarFive JH7110S comes with a more powerful BXE-4-32 GPU. It’s probably because of a higher frequency, and the VisionFive 2 Lite relies on GNOME instead of a lightweight desktop environment. It’s almost the exact same score of the ODROID-M1S SBC based on a Rockchip RK3566 SoC which achieved 496 points.
We’ll now use Speedometer 2.0 to check browsing performance in the pre-installed Chromium web browser…
8.90 runs per minute is quite better than 3.56 runs per minute I got with the VisionFive 2 Lite in Firefox (default web browser). For reference, the ODROID-M1S and Raspberry Pi 4 can render the same benchmark at 11 runs per minute.
Finally, I tested the 3D graphics acceleration in the Chromium browser using the WebGL Aquarium demo.
Seeing I got 34 FPS with 500 fish, I increased the number of fish to 1,000, for which I got a respectable 28 FPS, and the frame rate only really dropped when I switched to 5,000 fish (11 FPS). It’s pretty clear the GPU is enabled, but I still went to chrome://gpu to confirm.

We can see the GPU is enabled for WebGL and WebGL2. As a side note, Video decode is also enabled, which looks promising for YouTube video playback. Scrolling down in the chrome://gpu tab, we can confirm the PowerBR B-Series BXE-2-32 GPU is indeed used here.
Storage and USB performance
Let’s now check storage performance, starting by running iozone3 on the 128GB NVMe SSD card:
|
1 2 3 4 5 6 7 8 9 10 11 12 |
cnxsoft@musebook-cnx:~$ iozone -e -I -a -s 1000M -r 4k -r 16k -r 512k -r 1024k -r 16384k -i 0 -i 1 -i 2 Iozone: Performance Test of File I/O Version $Revision: 3.506 $ Compiled for 64 bit mode. Build: linux random random bkwd record stride kB reclen write rewrite read reread read write read rewrite read fwrite frewrite fread freread 1024000 4 35520 69280 91588 91853 43007 67923 1024000 16 113691 186672 231296 231959 108080 183094 1024000 512 514962 512375 588020 591526 542827 504385 1024000 1024 523055 522325 623944 626547 595346 505111 1024000 16384 526507 520833 761272 761260 758306 511536 |
That would be 761 MB/s for sequential reads, and 526 MB/s for sequential writes. That’s slightly under what a PCIe Gen3 x1 would offer. Let’s check PCIe information for the storage device:
|
1 2 3 4 5 6 7 8 9 10 |
0002:01:00.0 Non-Volatile memory controller: Silicon Motion, Inc. SM2263EN/SM2263XT (DRAM-less) NVMe SSD Controllers (rev 03) (prog-if 02 [NVM Express]) Subsystem: Silicon Motion, Inc. SM2263EN/SM2263XT (DRAM-less) NVMe SSD Controllers Capabilities: [70] Express (v2) Endpoint, MSI 00 .... LnkCap: Port #0, Speed 8GT/s, Width x4, ASPM not supported ClockPM+ Surprise- LLActRep- BwNot- ASPMOptComp+ LnkCtl: ASPM Disabled; RCB 64 bytes, Disabled- CommClk- ExtSynch- ClockPM- AutWidDis- BWInt- AutBWInt- LnkSta: Speed 5GT/s (downgraded), Width x2 (downgraded) TrErr- Train- SlotClk+ DLActive- BWMgmt- ABWMgmt- |
It’s actually PCIe Gen2 x2 instead.
I’ve already inserted a 64GB Raspberry Pi-branded Class A2 microSD card to test the SD card slot:
|
1 2 3 4 5 6 7 8 |
cnxsoft@musebook-cnx:/media/cnxsoft/writable$ sudo iozone -e -I -a -s 100M -r 4k -r 16k -r 512k -r 1024k -r 16384k -i 0 -i 1 -i 2 random random bkwd record stride kB reclen write rewrite read reread read write read rewrite read fwrite frewrite fread freread 102400 4 8472 9470 19121 19888 19339 12512 102400 16 17259 18062 37951 38136 37560 34355 102400 512 53554 54849 71711 70579 71382 65525 102400 1024 56924 57768 78432 78306 78460 57458 102400 16384 56925 55947 86022 85984 85865 54776 |
86 MB/s for reads and 56MB/s for writes is much better than on the VisionFive 2 Lite (about 23MB/s R/W), and closer to the performance I got when testing the same 64GB Raspberry Pi micro SD card with a Raspberry Pi 5 SBC. Here are the Pi 5 results for reference (91MB/s reads, 72 MB/s writes):
|
1 2 3 4 5 6 7 8 |
pi@raspberrypi:~ $ iozone -e -I -a -s 100M -r 4k -r 16k -r 512k -r 1024k -r 16384k -i 0 -i 1 -i 2 random random bkwd record stride kB reclen write rewrite read reread read write read rewrite read fwrite frewrite fread freread 102400 4 11110 11181 26694 26663 26655 15862 102400 16 19897 20268 48230 49161 49074 41893 102400 512 58357 59906 87240 87158 86930 73375 102400 1024 69445 72518 90424 90334 90458 79276 102400 16384 72909 74490 91769 91510 91656 74538 |
I also tested the USB 3.0 (5 Gbps) Type-A/C ports with an ORICO enclosure using an NVMe drive, as well as lsusb and iozone utilities to confirm the advertised speed and actual throughput.
Here’s the output for the USB 3.0 port on the right side of the laptop for reference:
|
1 2 3 4 5 6 |
cnxsoft@musebook-cnx:/media/cnxsoft/TB3-EXT4$ lsusb -t | grep uas |__ Port 004: Dev 003, If 0, Class=Mass Storage, Driver=uas, 5000M cnxsoft@musebook-cnx:/media/cnxsoft/TB3-EXT4$ sudo iozone -e -I -a -s 1000M -r 16384k -i 0 -i 1 random random bkwd record stride kB reclen write rewrite read reread read write read rewrite read fwrite frewrite fread freread 1024000 16384 335280 335887 312915 313225 |
Here’s the summary for all USB ports:
- Right side – USB 3.0 – 5 Gbps – Read speed: 312 MB/s; write speed: 335 MB/s
- Side side
- USB 3.0 Type-A – 5 Gbps – Read speed: 313 MB/s; write speed: 335 MB/s
- USB 3.0 Type-C (power/data) – 5 Gbps – Read speed: 313 MB/s; write speed: 335 MB/s; power input supported
- USB 3.0 Type-C (“full function”) – 5 Gbps – Read speed: 313 MB/s; write speed: 336 MB/s; power input supported
All four ports are USB 3.0 ports as advertised, although the read and write speeds are quite slower than with the Raspberry Pi 5, where I measured about 388MB/s sequential read speeds and 411MB/s write speeds.
WiFi and Bluetooth performance evaluation
Let’s see how 5GHz WiFi 6 performs using a Xiaomi Mi AX6000 router and iperf3:
- Download
123456789101112131415nxsoft@musebook-cnx:/media/cnxsoft$ iperf3 -t 60 -c 192.168.31.12 -i 10 -RConnecting to host 192.168.31.12, port 5201Reverse mode, remote host 192.168.31.12 is sending[ 5] local 192.168.31.189 port 41740 connected to 192.168.31.12 port 5201[ ID] Interval Transfer Bitrate[ 5] 0.00-10.01 sec 1.01 GBytes 866 Mbits/sec[ 5] 10.01-20.01 sec 1.02 GBytes 873 Mbits/sec[ 5] 20.01-30.00 sec 1.02 GBytes 872 Mbits/sec[ 5] 30.00-40.01 sec 1.03 GBytes 881 Mbits/sec[ 5] 40.01-50.01 sec 1.03 GBytes 884 Mbits/sec[ 5] 50.01-60.01 sec 1.03 GBytes 880 Mbits/sec- - - - - - - - - - - - - - - - - - - - - - - - -[ ID] Interval Transfer Bitrate Retr[ 5] 0.00-60.02 sec 6.12 GBytes 876 Mbits/sec 0 sender[ 5] 0.00-60.01 sec 6.12 GBytes 876 Mbits/sec receiver - Upload
1234567891011121314cnxsoft@musebook-cnx:/media/cnxsoft$ iperf3 -t 60 -c 192.168.31.12 -i 10Connecting to host 192.168.31.12, port 5201[ 5] local 192.168.31.189 port 41100 connected to 192.168.31.12 port 5201[ ID] Interval Transfer Bitrate Retr Cwnd[ 5] 0.00-10.01 sec 523 MBytes 438 Mbits/sec 0 2.90 MBytes[ 5] 10.01-20.01 sec 438 MBytes 367 Mbits/sec 0 2.90 MBytes[ 5] 20.01-30.01 sec 434 MBytes 364 Mbits/sec 0 2.90 MBytes[ 5] 30.01-40.01 sec 440 MBytes 369 Mbits/sec 0 2.90 MBytes[ 5] 40.01-50.01 sec 453 MBytes 380 Mbits/sec 0 2.90 MBytes[ 5] 50.01-60.01 sec 433 MBytes 363 Mbits/sec 0 2.90 MBytes- - - - - - - - - - - - - - - - - - - - - - - - -[ ID] Interval Transfer Bitrate Retr[ 5] 0.00-60.01 sec 2.66 GBytes 380 Mbits/sec 0 sender[ 5] 0.00-60.04 sec 2.65 GBytes 380 Mbits/sec receiver
With 876 Mbps downloads and 380 Mbps uploads, WiFi (6) performance is better than the WiFi (5) performance on the Raspberry Pi 5 (259 Mbps UL, 224 Mbps DL).
After a few attempts, I could transfer an 8MB photo between the laptop and my Android phone successfully in a few seconds.
I could also use the laptop as an audio sink, listening to music playing from my phone through the laptop’s speaker. Bluetooth is a pass as well.
YouTube and 1080p60 video playback
Let’s see how YouTube does in Chromium.
I loaded a 4K video and set the resolution to 1080p60. There were some dropped frames (1,153 out of 10,034, or 11.49%), but it was kind of watchable.
So I switched to 1440p60, and it was still kind of watchable, but it had more dropped frames: 659 out of 4,242 frames, or 15.5%. When I decided to go for 4Kp60, it became truly unwatchable, and at some point, I had a frozen, blurry frame. So it’s ideal for watching YouTube videos, but at least it performs better than the lower-end VisionFive 2 Lite in Firefox in that regard.
So I switched to playing local 4K videos since it’s usually much easier on the system as long as hardware video decoding is supported. The documentation mentions FFmpeg is supported with hardware video decoding, so I tried to play the videos with ffplay.
Big Buck Bunny 4K 60 FPS using H.264 video didn’t look good with very high CPU usage and slideshow-like video playback.
Trying the same with a 4K H.265 video was even worse. This is a clear sign of software video decoding, and the system can’t keep up.
I eventually found out “mpv” was supported in the mixed languages (English/Chinese) documentation.

The Big Buck Bunny could play smoothly with audio and relatively low CPU usage.
The H.265 video was fine too. That means ffplay doesn’t support hardware video decoding, but mpv does, and it works well.
AI workloads
The SpacemiT K1/M1 does not include an AI accelerator per se, but can deliver up to 2 TOPS of AI performance. You’ll find documentation and plenty of demos for CV (Computer Vision) and NLP (Natural Language Processing) on the Bianbu SpacemiT website.
The first step is to download the demos. Note that the instructions point to a repo on gitee.com, but if you live outside of China, it will be super slow (1024 byte/s when I tried). Luckily, I found a mirror on GitHub instead that took only a few seconds to clone:
|
1 2 |
git clone https://github.com/spacemit-com/spacemit-demo cd spacemit-demo |
You’ll also need to install some dependencies:
|
1 2 |
sudo apt-get update sudo apt-get install -y onnxruntime python3-spacemit-ort libopencv-dev python3-onnx python3-pillow python3-matplotlib python3-opencv |
Let’s now try one of the Computer Vision samples:
|
1 2 3 4 |
cd examples/CV/yolov5 cd model && sh download_model.sh cd ../data && sh download_data.sh cd ../python && python3 test_yolov5.py |
If everything works as expected, the output will look as follows:
|
1 2 |
cnxsoft@musebook-cnx:~/spacemit-demo/examples/CV/yolov5/python$ python3 test_yolov5.py Result image saved to result.jpg |
The result.jpg image features bounding boxes around detected persons in the image.

You can try with our own 500×375 test image by changing the file in ../data/test.jpg, or changing to Python code to point to another image on the system.
GPIO / UART testing
Since the MUSE Book is also a development platform, the company exposed UART and GPIOs through an 8-pin connector, and provides a cable to which I attached one of my USB to TLL debug boards. You can find specific documentation on the developer website.
I’ll use Bootterm to connect to the serial console, but other programs like Putty, minicom, picocom, and so on would do too. The USB adapter is detected…
|
1 2 3 4 |
jaufranc@CNX-LAPTOP-5:~$ bt -l port | age (sec) | device | driver | description ------+------------+------------+------------------+---------------------- * 0 | 68 | ttyUSB0 | ch341-uart | USB2.0-Serial |
… and I can access the serial console of the laptop using the default configuration (115,000 baud rate) and log in to the board.
It’s especially convenient for debugging and bootloader development, as there’s no need to open the laptop to access the serial console.
I also quickly checked that the GPIOs were accessible, and two gpiochip devices can be found:
|
1 2 3 |
cnxsoft@musebook-cnx:~$ ls -l /dev/gpiochip* crw------- 1 root root 254, 0 Jan 17 2025 /dev/gpiochip0 crw------- 1 root root 254, 1 Jan 17 2025 /dev/gpiochip1 |
I could list the GPIOs using gpiod userspace tool:
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 |
cnxsoft@musebook-cnx:~$ sudo apt install gpiod cnxsoft@musebook-cnx:~$ sudo gpioinfo 0 gpiochip0 - 128 lines: line 0: unnamed unused input active-high line 1: unnamed unused input active-high line 2: unnamed unused input active-high line 3: unnamed unused input active-high line 4: unnamed unused input active-high line 5: unnamed unused input active-high line 6: unnamed unused input active-high line 7: unnamed unused input active-high ... line 121: unnamed unused input active-high line 122: unnamed unused input active-high line 123: unnamed "hub" output active-high [used] line 124: unnamed unused input active-high line 125: unnamed unused input active-high line 126: unnamed unused input active-high line 127: unnamed "?" output active-high [used] cnxsoft@musebook-cnx:~$ sudo gpioinfo 1 gpiochip1 - 6 lines: line 0: unnamed unused output active-high line 1: unnamed unused output active-high line 2: unnamed unused output active-high line 3: unnamed unused output active-high line 4: unnamed unused output active-high line 5: unnamed unused output active-high |
Summary of what works, what doesn’t
- Storage
- Built-in NVMe SSD – OK. PCIe Gen2 x2, tested up to 761 MB/s (not optimal, but acceptable)
- MicroSD card slot – OK Tested with a Raspberry Pi Class A2 microSD card with acceptable performance
- Display & Audio interfaces
- Built-in display – OK
- Built-in speaker – OK. Tested with YouTube
- Built-in audio jack – OK. Tested with YouTube
- USB-C DisplayPort – Video OK, Audio OK
- Camera – Video and Audio OK. Tested with guvcview. Detected in Microsoft Teams in Chromium, but no image when testing
- GPU – 3D graphics acceleration enabled, tested with glmark2-es2-wayland and WebGL in Firefox.
- VPU – OK. Works with mpv, but not with ffplay (software decoding)
- Wireless
- WiFi 6 – OK. Relatively good performance: 876 Mbps downloads, 380 Mbps uploads
- Bluetooth – OK. Tested with file transfer (8MB photo in a few seconds) and as an audio sink.
- USB – USB 3.0 port tested with an ORICO NVMe SSD enclosure
- USB 3.0 Type-A (right side) – 5 Gbps; tested up to 335 MB/s with iozone3
- USB 3.0 Type-A (left side) – 5 Gbps; tested up to 335 MB/s iozone3
- USB 3.0 Type-C (power/data) – 5 Gbps; tested up to 335 MB/s with iozone3
- USB 3.0 Type-C (full function) – 5 Gbps; tested up to 336 MB/s with iozone3
- GPIO – OK – Quickly checked with sysfs and libgpio.

Battery, charging, and power consumption
I fully charged the battery to 100% and did a mix of web browsing, webcam test, idle time, and YouTube streaming. After 4 hours and 10 minutes, the battery was down to 8%. I charged the battery again to 100%. The power draw starts at about 45W and drops as the battery charges. After one hour, it was at about 30W charging and 80% full. Getting to 100% takes about two extra hours, as charging is much slower to preserve the battery.
I measured the MUSE Book laptop’s power consumption using a wall power meter when the battery is 100% full:
- Power off – 0.4 Watts
- Lid closed – 3.5 – 3.8 Watts (this seems high, my Intel laptop draws 0.5-0.6W in this mode)
- Idle
- Min brightness – 7.6 Watts
- Max brightness – 10.8 Watts
- YouTube 1080p video playback in Chromium (Max brightness) – 12.6 to 14.9 Watts
- 4K H.265 video playback with mpv (Max brightness) – 12.5 – 13.9 Watts
- Stress test on all 8 cores (stress -c 8 + max brightness) – 14.2 – 14.6 Watts
To further test the lid closed situation, I closed the lid at 17:00 and disconnected the power supply, and opened it at 08:00 the following morning (15 hours with the lid closed). Battery charge went from 100% to 48%, so it’s not exactly ideal.
Conclusion
The MUSE Book laptop is excellent as a RISC-V development kit; every key feature works to some extent, and the performance, including I/O performance, is much better than on the low-end VisionFive 2 Lite I reviewed a couple of weeks ago. I’m impressed by the progress made on the software front for the RISC-V ecosystem, as it rivals some of its Arm competitors. It also like that it’s possible to access the UART console without opening the laptop.
However, if you plan to use the MUSE Book RISC-V laptop as a consumer device instead, it falls short in several areas and has some shortcomings. First, you’ll get what’s roughly equivalent to a Raspberry Pi 4 laptop, with higher multi-core performance, but lower single-core performance. There will also be a few bugs here and there since RISC-V is still not as mature as x86 or Arm. Some shortcomings I discovered when testing include that YouTube video playback is limited to 720p to be really watchable, I could not use the webcam in Microsoft Teams (USB camera detected, but blank output), and the power consumption is fairly high when the lid is closed.
I’d like to thank SpacemiT for sending the MUSE Book RISC-V laptop for review. The model reviewed here, with 8GB RAM and 128GB eMMC flash preloaded with Bianbu OS, does not seem available for sale at this time outside of China. Instead, the MUSE Book laptop with 16GB RAM and a 512GB SSD preloaded with Ubuntu Desktop 24.04 [update: the SpacemiT explained it’s Bianbu OS as used in this review] or Fedora 41 is sold for $599 / $629 on the DeepComputing store, a price tag that mainly makes it interesting to RISC-V developers and enthusiasts.

Jean-Luc started CNX Software in 2010 as a part-time endeavor, before quitting his job as a software engineering manager, and starting to write daily news, and reviews full time later in 2011.
Support CNX Software! Donate via cryptocurrencies, become a Patron on Patreon, or purchase goods on Amazon or Aliexpress. We also use affiliate links in articles to earn commissions if you make a purchase after clicking on those links.




























