Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Milk-V Jupiter #47

Open
geerlingguy opened this issue Jul 18, 2024 · 33 comments
Open

Milk-V Jupiter #47

geerlingguy opened this issue Jul 18, 2024 · 33 comments

Comments

@geerlingguy
Copy link
Owner

geerlingguy commented Jul 18, 2024

milk-v-jupiter

Basic information

  • Board URL (official): https://milkv.io/jupiter
  • Board purchased from: (Provided by Milk-V)
  • Board purchase date: July 17, 2024
  • Board specs (as tested): M1 @ 1.8GHz, 16GB RAM
  • Board price (as tested): $115 (pre-order pricing)

Linux/system information

# output of `screenfetch`
root@milkv-jupiter:~# screenfetch
                          ./+o+-       root@milkv-jupiter
                  yyyyy- -yyyyyy+      OS: Ubuntu 23.10 mantic
               ://+//////-yyyyyyo      Kernel: riscv64 Linux 6.1.15
           .++ .:/++++++/-.+sss/`      Uptime: 11m
         .:++o:  /++++++++/:--:/-      Packages: 1667
        o:+o+:++.`..```.-/oo+++++/     Shell: bash 5.2.15
       .:+o:+o/.          `+sssoo+/    Disk: 4.1G / 6.1G (71%)
  .++/+:+oo+o:`             /sssooo.   CPU: Spacemit X60 @ 8x 1.8GHz
 /+++//+:`oo+o               /::--:.   GPU: 
 \+/+o+++`o++o               ++////.   RAM: 847MiB / 15771MiB
  .++.o+++oo+:`             /dddhhh.  
       .+.o+oo:.          `oddhhhh+   
        \+.++o+o``-````.:ohdhhhhh+    
         `:o+++ `ohhhhhhhhyo++os:     
           .o:`.syhhhhhhh/.oo++o`     
               /osyyyyyyo++ooo+++/    
                   ````` +oo+++o\:    
                          `oo++.  

# output of `uname -a`
Linux milkv-jupiter 6.1.15 #1.0.8 SMP PREEMPT Tue Jul 16 07:18:48 UTC 2024 riscv64 riscv64 riscv64 GNU/Linux

Benchmark results

CPU

Power

  • Idle power draw (at wall): 3.5 W
  • Maximum simulated power draw (stress-ng --matrix 0): 8 W
  • During Geekbench multicore benchmark: 10 W
  • During top500 HPL benchmark: 10.6 W

(Note: Tests were performed using a 12V 8A power adapter. When I switched to a 27W Aergon PWR GaN adapter, idle draw was measured at 10W, and stress-ng --matrix 0 at 10W)

Disk

MakerDisk A1 128GB microSD

Benchmark Result
iozone 4K random read 11.28 MB/s
iozone 4K random write 3.75 MB/s
iozone 1M random read 74.95 MB/s
iozone 1M random write 49.97 MB/s
iozone 1M sequential read 75.47 MB/s
iozone 1M sequential write 50.40 MB/s

Kioxia XG8 2TB NVMe SSD

Benchmark Result
iozone 4K random read 43.42 MB/s
iozone 4K random write 80.55 MB/s
iozone 1M random read 314.43 MB/s
iozone 1M random write 345.83 MB/s
iozone 1M sequential read 315.34 MB/s
iozone 1M sequential write 346.40 MB/s

32GB SanDisk eMMC Module V1.2

Benchmark Result
iozone 4K random read 18.72 MB/s
iozone 4K random write 29.24 MB/s
iozone 1M random read 194.06 MB/s
iozone 1M random write 195.67 MB/s
iozone 1M sequential read 208.09 MB/s
iozone 1M sequential write 193.82 MB/s
wget https://raw.githubusercontent.com/geerlingguy/pi-cluster/master/benchmarks/disk-benchmark.sh
chmod +x disk-benchmark.sh
sudo MOUNT_PATH=/ TEST_SIZE=1g ./disk-benchmark.sh

Run benchmark on any attached storage device (e.g. eMMC, microSD, NVMe, SATA) and add results under an additional heading.

Also consider running PiBenchmarks.com script.

Network

iperf3 results:

Built-in 1 Gbps LAN

  • iperf3 -c $SERVER_IP: 939 Mbps
  • iperf3 -c $SERVER_IP --reverse: 885 Mbps
  • iperf3 -c $SERVER_IP --bidir: 942 Mbps up, 136 Mbps down

Built-in WiFi 6

So far, I have been unable to bring up this interface. See WiFi not working under Ubuntu or Bianbu.

  • iperf3 -c $SERVER_IP: 362 Mbps
  • iperf3 -c $SERVER_IP --reverse: 313 Mbps
  • iperf3 -c $SERVER_IP --bidir: 228 Mbps up, 140 Mbps down

GPU

glmark2-es2-wayland results:

=======================================================
    glmark2 2023.01
=======================================================
    OpenGL Information
    GL_VENDOR:      Imagination Technologies
    GL_RENDERER:    PowerVR B-Series BXE-2-32
    GL_VERSION:     OpenGL ES 3.2 build 23.2@6460340
    Surface Config: buf=32 r=8 g=8 b=8 a=8 depth=24 stencil=8 samples=0
    Surface Size:   800x600 windowed
=======================================================
[build] use-vbo=false: FPS: 300 FrameTime: 3.338 ms
[build] use-vbo=true: FPS: 682 FrameTime: 1.468 ms
[texture] texture-filter=nearest: FPS: 629 FrameTime: 1.591 ms
[texture] texture-filter=linear: FPS: 680 FrameTime: 1.471 ms
[texture] texture-filter=mipmap: FPS: 617 FrameTime: 1.621 ms
[shading] shading=gouraud: FPS: 555 FrameTime: 1.805 ms
[shading] shading=blinn-phong-inf: FPS: 562 FrameTime: 1.782 ms
[shading] shading=phong: FPS: 477 FrameTime: 2.099 ms
[shading] shading=cel: FPS: 461 FrameTime: 2.172 ms
[bump] bump-render=high-poly: FPS: 315 FrameTime: 3.176 ms
[bump] bump-render=normals: FPS: 710 FrameTime: 1.410 ms
[bump] bump-render=height: FPS: 733 FrameTime: 1.365 ms
[effect2d] kernel=0,1,0;1,-4,1;0,1,0;: FPS: 382 FrameTime: 2.623 ms
[effect2d] kernel=1,1,1,1,1;1,1,1,1,1;1,1,1,1,1;: FPS: 137 FrameTime: 7.309 ms
[pulsar] light=false:quads=5:texture=false: FPS: 754 FrameTime: 1.328 ms
[desktop] blur-radius=5:effect=blur:passes=1:separable=true:windows=4: FPS: 144 FrameTime: 6.977 ms
[desktop] effect=shadow:windows=4: FPS: 412 FrameTime: 2.433 ms
[buffer] columns=200:interleave=false:update-dispersion=0.9:update-fraction=0.5:update-method=map: FPS: 151 FrameTime: 6.631 ms
[buffer] columns=200:interleave=false:update-dispersion=0.9:update-fraction=0.5:update-method=subdata: FPS: 154 FrameTime: 6.513 ms
[buffer] columns=200:interleave=true:update-dispersion=0.9:update-fraction=0.5:update-method=map: FPS: 204 FrameTime: 4.912 ms
[ideas] speed=duration: FPS: 308 FrameTime: 3.251 ms
[jellyfish] <default>: FPS: 270 FrameTime: 3.713 ms
[terrain] <default>: FPS: 20 FrameTime: 52.388 ms
[shadow] <default>: FPS: 335 FrameTime: 2.989 ms
[refract] <default>: FPS: 41 FrameTime: 24.497 ms
[conditionals] fragment-steps=0:vertex-steps=0: FPS: 789 FrameTime: 1.268 ms
[conditionals] fragment-steps=5:vertex-steps=0: FPS: 536 FrameTime: 1.869 ms
[conditionals] fragment-steps=0:vertex-steps=5: FPS: 745 FrameTime: 1.343 ms
[function] fragment-complexity=low:fragment-steps=5: FPS: 704 FrameTime: 1.422 ms
[function] fragment-complexity=medium:fragment-steps=5: FPS: 393 FrameTime: 2.550 ms
[loop] fragment-loop=false:fragment-steps=5:vertex-steps=5: FPS: 691 FrameTime: 1.448 ms
[loop] fragment-steps=5:fragment-uniform=false:vertex-steps=5: FPS: 665 FrameTime: 1.506 ms
[loop] fragment-steps=5:fragment-uniform=true:vertex-steps=5: FPS: 643 FrameTime: 1.555 ms
=======================================================
                                  glmark2 Score: 459 
=======================================================

Note: This benchmark requires an active display on the device. Not all devices may be able to run glmark2-es2, so in that case, make a note and move on!

TODO: See this issue for discussion about a full suite of standardized GPU benchmarks.

Memory

tinymembench results:

Click to expand memory benchmark result
tinymembench v0.4.10 (simple benchmark for memory throughput and latency)

==========================================================================
== Memory bandwidth tests                                               ==
==                                                                      ==
== Note 1: 1MB = 1000000 bytes                                          ==
== Note 2: Results for 'copy' tests show how many bytes can be          ==
==         copied per second (adding together read and writen           ==
==         bytes would have provided twice higher numbers)              ==
== Note 3: 2-pass copy means that we are using a small temporary buffer ==
==         to first fetch data into it, and only then write it to the   ==
==         destination (source -> L1 cache, L1 cache -> destination)    ==
== Note 4: If sample standard deviation exceeds 0.1%, it is shown in    ==
==         brackets                                                     ==
==========================================================================

 C copy backwards                                     :   3073.1 MB/s (0.6%)
 C copy backwards (32 byte blocks)                    :    662.7 MB/s
 C copy backwards (64 byte blocks)                    :   3079.1 MB/s (0.6%)
 C copy                                               :   3081.3 MB/s (0.5%)
 C copy prefetched (32 bytes step)                    :   3087.2 MB/s (0.6%)
 C copy prefetched (64 bytes step)                    :   3087.5 MB/s (0.7%)
 C 2-pass copy                                        :   2953.6 MB/s
 C 2-pass copy prefetched (32 bytes step)             :   2947.5 MB/s (0.5%)
 C 2-pass copy prefetched (64 bytes step)             :   2948.0 MB/s (0.4%)
 C fill                                               :   7570.4 MB/s (0.3%)
 C fill (shuffle within 16 byte blocks)               :   7574.7 MB/s (0.4%)
 C fill (shuffle within 32 byte blocks)               :    675.4 MB/s (0.2%)
 C fill (shuffle within 64 byte blocks)               :    675.3 MB/s (0.2%)
 ---
 standard memcpy                                      :   2886.5 MB/s (0.8%)
 standard memset                                      :   7577.1 MB/s (0.5%)

==========================================================================
== Memory latency test                                                  ==
==                                                                      ==
== Average time is measured for random memory accesses in the buffers   ==
== of different sizes. The larger is the buffer, the more significant   ==
== are relative contributions of TLB, L1/L2 cache misses and SDRAM      ==
== accesses. For extremely large buffer sizes we are expecting to see   ==
== page table walk with several requests to SDRAM for almost every      ==
== memory access (though 64MiB is not nearly large enough to experience ==
== this effect to its fullest).                                         ==
==                                                                      ==
== Note 1: All the numbers are representing extra time, which needs to  ==
==         be added to L1 cache latency. The cycle timings for L1 cache ==
==         latency can be usually found in the processor documentation. ==
== Note 2: Dual random read means that we are simultaneously performing ==
==         two independent memory accesses at a time. In the case if    ==
==         the memory subsystem can't handle multiple outstanding       ==
==         requests, dual random read has the same timings as two       ==
==         single reads performed one after another.                    ==
==========================================================================

block size : single random read / dual random read
      1024 :    0.1 ns          /     0.1 ns 
      2048 :    0.1 ns          /     0.1 ns 
      4096 :    0.1 ns          /     0.1 ns 
      8192 :    0.1 ns          /     0.1 ns 
     16384 :    0.1 ns          /     0.1 ns 
     32768 :    0.2 ns          /     0.2 ns 
     65536 :    9.3 ns          /    14.3 ns 
    131072 :   15.9 ns          /    21.2 ns 
    262144 :   19.3 ns          /    23.8 ns 
    524288 :   38.4 ns          /    52.5 ns 
   1048576 :  119.4 ns          /   175.0 ns 
   2097152 :  169.3 ns          /   221.4 ns 
   4194304 :  198.2 ns          /   241.2 ns 
   8388608 :  223.5 ns          /   268.5 ns 
  16777216 :  238.2 ns          /   288.6 ns 
  33554432 :  248.7 ns          /   306.2 ns 
  67108864 :  281.1 ns          /   361.7 ns 

sbc-bench results

Run sbc-bench and paste a link to the results here: ThomasKaiser/sbc-bench#96 / https://0x0.st/X904.bin

Phoronix Test Suite

Results from pi-general-benchmark.sh:

  • pts/encode-mp3: N/A (wouldn't install)
  • pts/x264 4K: N/A (wouldn't install)
  • pts/x264 1080p: N/A (wouldn't install)
  • pts/phpbench: 89706
  • pts/build-linux-kernel (defconfig): 3345.196 sec
@geerlingguy
Copy link
Owner Author

After speaking with Milk-V about some of their RISC-V boards, they wanted to send over a Jupiter for me to test. I plan on running it through my usual tests, and also seeing how the board behaves as a regular ol' PC ITX board, testing front panel connectors, USB 3.0 and other IO. It also comes with a heatsink/fan (a pretty small one, mind you), and an IO shield. I haven't unboxed it fully but will hopefully do that tomorrow or Monday!

@geerlingguy
Copy link
Owner Author

geerlingguy commented Jul 19, 2024

First test round will be with https://github.com/milkv-jupiter/jupiter-ubuntu-build/releases - Ubuntu 23.10 desktop release 1.0.8. I will flash it to a microSD card first.

First challenge: I can't determine what pins to use for a front panel power button connection on the F_PANEL header, so I opened the linked issue to see if someone can help with that.

I assume the board will just power on like a typical SBC when I apply DC_IN or PD power via the Type C port (according to their documentation. I will probably power the board with 12VDC for now, but may attach an ATX power supply to test that out too. [Edit: The board doesn't power on automatically, so I will need to figure out how to press the power button on the F_PANEL header I think.]

@geerlingguy
Copy link
Owner Author

geerlingguy commented Jul 19, 2024

Apparently there's some amount of standardization in the world... got this from Milk-V:

XCQ92pg- jpg-small

It does seem to boot up immediately upon getting power. To hard-power-off, hold down the power button for 5 seconds (or maybe 6 or so). To boot up again, press the power button for 1-2s.

@geerlingguy
Copy link
Owner Author

I can boot and log in via serial console; it also has an Ethernet connection, at 1 Gbps, and I can access it via UART or SSH, but so far I don't have an HDMI output working. xrandr gives me 'Couldn't open display'. I will try another HDMI monitor and see if that works. For some reason a lot of RISC-V boards don't seem to like my HP EliteDisplay E231.

@geerlingguy
Copy link
Owner Author

geerlingguy commented Jul 19, 2024

The docs for the Jupiter describe using gparted to expand the SD partition, but I elected to use the RVSpace guide Extend Partition on SD Card or eMMC.

root@milkv-jupiter:~# resize2fs /dev/mmcblk0p6
resize2fs 1.47.0 (5-Feb-2023)
Filesystem at /dev/mmcblk0p6 is mounted on /; on-line resizing required
old_desc_blocks = 1, new_desc_blocks = 15
The filesystem on /dev/mmcblk0p6 is now 30571264 (4k) blocks long.

root@milkv-jupiter:~# df -h
Filesystem      Size  Used Avail Use% Mounted on
tmpfs           1.6G  6.3M  1.6G   1% /run
/dev/mmcblk0p6  115G  4.0G  106G   4% /
tmpfs           7.8G     0  7.8G   0% /dev/shm
tmpfs           5.0M   12K  5.0M   1% /run/lock
/dev/mmcblk0p5  224M   27M  180M  13% /boot
tmpfs           1.6G  112K  1.6G   1% /run/user/120
tmpfs           1.6G   64K  1.6G   1% /run/user/0

@geerlingguy
Copy link
Owner Author

geerlingguy commented Jul 19, 2024

I was originally wondering if the fan or fan connector was dead, but no—just the heatsink seems to be good enough for 99% of the time—the fan will only spin up deep into a multicore test, and briefly at that. It's noticeable but not annoying the few times it does spin up.

@geerlingguy
Copy link
Owner Author

I'm able to get the HDMI output to feed into OBS through my CamLink 4K, so it's probably an incompatibility with that HP monitor:

Screenshot 2024-07-19 at 2 51 32 PM

@geerlingguy
Copy link
Owner Author

geerlingguy commented Jul 22, 2024

So far I'm unable to activate Bluetooth or see any WiFi settings, and I'm wondering if that's due to the Ubuntu image not including drivers or something. Need to do a little more exploration there.

I just noticed there's a newer release of the 23.10 desktop: https://github.com/milkv-jupiter/jupiter-ubuntu-build/releases/tag/v1.0.9

(As well as Bianbu). Fedora also has a RISC-V task force building images for the Jupiter—see the downloadable images here: https://mirror.iscas.ac.cn/fedora-riscv/dl/Milk-V/Jupiter/images/latest/

@geerlingguy
Copy link
Owner Author

geerlingguy commented Jul 22, 2024

Notes on Bianbu OS minimal install:

  • It truly is minimal, doesn't include utilities like nmcli, openssh-server, lsusb, or lspci (have to apt install network-manager rfkill openssh-server usbutils pciutils etc.
  • The premade image on GitHub is set to Chinese locale by default, so run sudo dpkg-reconfigure locales and select your language.

As with the Ubuntu image, I'm not seeing the WiFi device, just the two Ethernet ports and a sit0 interface (something to do with IPv6 I think):

root@milkv-jupiter:~# nmcli d
DEVICE  TYPE      STATE      CONNECTION 
end0    ethernet  unmanaged  --         
end1    ethernet  unmanaged  --         
sit0    iptunnel  unmanaged  --         
lo      loopback  unmanaged  --   

Bluetooth looks to be present, at least:

root@milkv-jupiter:~# rfkill
ID TYPE      DEVICE         SOFT      HARD
 0 bluetooth spacemit-bt blocked unblocked

I opened the issue on the Milk-V community forum WiFi under Ubuntu not working.

@geerlingguy
Copy link
Owner Author

geerlingguy commented Jul 22, 2024

I'm also re-running Geekbench 6 under the Bianbu minimal install to see if there's any difference between it and the Ubuntu release.

[Edit: Heh, identical result, 78/356.]

@geerlingguy
Copy link
Owner Author

I've also asked on the Community forum about the SATAPWR1 and 2 headers, which look like 4-pin ATX fan connectors, but I'm scared to plug in a fan to one of them in case the pinout is incorrect :)

It would be nice to provide a couple fan headers so I can run a case fan off the ITX board, but I'm not sure if those are wired up to any PWM controls.

@geerlingguy
Copy link
Owner Author

geerlingguy commented Jul 22, 2024

Fedora 40 with Gnome runs stable, if slow. No GPU drivers present in that build, it seems—everything goes to the CPU and runs a bit slowish. YouTube can kinda play back at 240p, whereas on Bianbu and Ubuntu I can hit 720p passably.

Screenshot 2024-07-22 at 1 52 22 PM

I'm also not able to enable Bluetooth (which seems to be present) or WiFi (which is not, like on the other OSes).

@geerlingguy
Copy link
Owner Author

I don't seem to be getting any GPU acceleration under Ubuntu or Bianbu, at least not by default... it seems like they should both be able to render a lot better using the built-in GPU (see Banana Pi BPI-F3 here).

@geerlingguy
Copy link
Owner Author

Kioxia XG8 over PCIe:

0001:01:00.0 Non-Volatile memory controller: KIOXIA Corporation NVMe SSD Controller XG8 (rev 01) (prog-if 02 [NVM Express])
	Subsystem: KIOXIA Corporation Device 0001
	Control: I/O- Mem+ BusMaster+ SpecCycle- MemWINV- VGASnoop- ParErr- Stepping- SERR- FastB2B- DisINTx+
	Status: Cap+ 66MHz- UDF- FastB2B- ParErr- DEVSEL=fast >TAbort- <TAbort- <MAbort- >SERR- <PERR- INTx-
	Latency: 0
	Interrupt: pin A routed to IRQ 56
	Region 0: Memory at 90200000 (64-bit, non-prefetchable) [size=16K]
	Capabilities: [80] Power Management version 3
		Flags: PMEClk- DSI- D1- D2- AuxCurrent=0mA PME(D0-,D1-,D2-,D3hot-,D3cold-)
		Status: D0 NoSoftRst+ PME-Enable- DSel=0 DScale=0 PME-
	Capabilities: [90] MSI: Enable- Count=1/32 Maskable+ 64bit+
		Address: 0000000000000000  Data: 0000
		Masking: 00000000  Pending: 00000000
	Capabilities: [b0] MSI-X: Enable+ Count=65 Masked-
		Vector table: BAR=0 offset=00002000
		PBA: BAR=0 offset=00003000
	Capabilities: [c0] Express (v2) Endpoint, MSI 00
		DevCap:	MaxPayload 256 bytes, PhantFunc 0, Latency L0s unlimited, L1 unlimited
			ExtTag+ AttnBtn- AttnInd- PwrInd- RBE+ FLReset+ SlotPowerLimit 0W
		DevCtl:	CorrErr+ NonFatalErr+ FatalErr+ UnsupReq+
			RlxdOrd- ExtTag+ PhantFunc- AuxPwr- NoSnoop- FLReset-
			MaxPayload 128 bytes, MaxReadReq 512 bytes
		DevSta:	CorrErr- NonFatalErr- FatalErr- UnsupReq- AuxPwr- TransPend-
		LnkCap:	Port #0, Speed 16GT/s, Width x4, ASPM L1, Exit Latency L1 <32us
			ClockPM- Surprise- LLActRep- BwNot- ASPMOptComp+
		LnkCtl:	ASPM Disabled; RCB 64 bytes, Disabled- CommClk+
			ExtSynch- ClockPM- AutWidDis- BWInt- AutBWInt-
		LnkSta:	Speed 5GT/s (downgraded), Width x1 (downgraded)
			TrErr- Train- SlotClk+ DLActive- BWMgmt- ABWMgmt-
		DevCap2: Completion Timeout: Range ABCD, TimeoutDis+ NROPrPrP- LTR+
			 10BitTagComp+ 10BitTagReq- OBFF Not Supported, ExtFmt+ EETLPPrefix-
			 EmergencyPowerReduction Not Supported, EmergencyPowerReductionInit-
			 FRS- TPHComp- ExtTPHComp-
			 AtomicOpsCap: 32bit- 64bit- 128bitCAS-
		DevCtl2: Completion Timeout: 50us to 50ms, TimeoutDis- LTR+ 10BitTagReq- OBFF Disabled,
			 AtomicOpsCtl: ReqEn-
		LnkCap2: Supported Link Speeds: 2.5-16GT/s, Crosslink- Retimer+ 2Retimers+ DRS-
		LnkCtl2: Target Link Speed: 16GT/s, EnterCompliance- SpeedDis-
			 Transmit Margin: Normal Operating Range, EnterModifiedCompliance- ComplianceSOS-
			 Compliance Preset/De-emphasis: -6dB de-emphasis, 0dB preshoot
		LnkSta2: Current De-emphasis Level: -6dB, EqualizationComplete- EqualizationPhase1-
			 EqualizationPhase2- EqualizationPhase3- LinkEqualizationRequest-
			 Retimer- 2Retimers- CrosslinkRes: unsupported
	Capabilities: [100 v2] Advanced Error Reporting
		UESta:	DLP- SDES- TLP- FCP- CmpltTO- CmpltAbrt- UnxCmplt- RxOF- MalfTLP- ECRC- UnsupReq- ACSViol-
		UEMsk:	DLP- SDES- TLP- FCP- CmpltTO- CmpltAbrt- UnxCmplt- RxOF- MalfTLP- ECRC- UnsupReq- ACSViol-
		UESvrt:	DLP+ SDES- TLP- FCP+ CmpltTO- CmpltAbrt- UnxCmplt- RxOF+ MalfTLP+ ECRC- UnsupReq- ACSViol-
		CESta:	RxErr- BadTLP- BadDLLP- Rollover- Timeout- AdvNonFatalErr-
		CEMsk:	RxErr- BadTLP- BadDLLP- Rollover- Timeout- AdvNonFatalErr+
		AERCap:	First Error Pointer: 00, ECRCGenCap+ ECRCGenEn- ECRCChkCap+ ECRCChkEn-
			MultHdrRecCap- MultHdrRecEn- TLPPfxPres- HdrLogCap-
		HeaderLog: 00000000 00000000 00000000 00000000
	Capabilities: [150 v1] Virtual Channel
		Caps:	LPEVC=0 RefClk=100ns PATEntryBits=1
		Arb:	Fixed- WRR32- WRR64- WRR128-
		Ctrl:	ArbSelect=Fixed
		Status:	InProgress-
		VC0:	Caps:	PATOffset=00 MaxTimeSlots=1 RejSnoopTrans-
			Arb:	Fixed- WRR32- WRR64- WRR128- TWRR128- WRR256-
			Ctrl:	Enable+ ID=0 ArbSelect=Fixed TC/VC=ff
			Status:	NegoPending- InProgress-
	Capabilities: [260 v1] Latency Tolerance Reporting
		Max snoop latency: 0ns
		Max no snoop latency: 0ns
	Capabilities: [300 v1] Secondary PCI Express
		LnkCtl3: LnkEquIntrruptEn- PerformEqu-
		LaneErrStat: 0
	Capabilities: [360 v1] Data Link Feature <?>
	Capabilities: [380 v1] Physical Layer 16.0 GT/s <?>
	Capabilities: [400 v1] L1 PM Substates
		L1SubCap: PCI-PM_L1.2+ PCI-PM_L1.1+ ASPM_L1.2+ ASPM_L1.1- L1_PM_Substates+
			  PortCommonModeRestoreTime=60us PortTPowerOnTime=150us
		L1SubCtl1: PCI-PM_L1.2- PCI-PM_L1.1- ASPM_L1.2- ASPM_L1.1-
			   T_CommonMode=0us LTR1.2_Threshold=0ns
		L1SubCtl2: T_PwrOn=10us
	Capabilities: [470 v1] Lane Margining at the Receiver <?>
	Kernel driver in use: nvme

@geerlingguy
Copy link
Owner Author

Testing my 32GB eMMC module that I used before with Rock 5 B:

root@milkv-jupiter:~# dmesg | grep mmc2
[    4.279458] mmc2: new HS400 Enhanced strobe MMC card at address 0001
[    4.286636] mmcblk2: mmc2:0001 DA4032 29.1 GiB 
[    4.295504] mmcblk2boot0: mmc2:0001 DA4032 4.00 MiB 
[    4.301771] mmcblk2boot1: mmc2:0001 DA4032 4.00 MiB 
[    4.307801] mmcblk2rpmb: mmc2:0001 DA4032 16.0 MiB, chardev (242:0)
[    4.314220] mmc2: SDHCI controller on d4281000.sdh [d4281000.sdh] using ADMA

Adding the results for that and NVMe up in the OP.

@geerlingguy
Copy link
Owner Author

geerlingguy commented Jul 22, 2024

I also tested Docker on this board, since that's something called out in the Jupiter's documentation. Installing was easy (install docker.io and that's it!). The hello-world image runs successfully, and there are a few hundred risc-v supporting images on Docker Hub already. I was able to run Debian and Alpine easy enough, though httpd (Apache) doesn't have a riscv64 build yet.

For many images, like Redis, they say riscv64 is in the supported architectures, but that's not on the main image. You have to instead use riscv64/redis, and there's no latest tag on that repo, so you have to dig around and find a tag you like, for example:

root@milkv-jupiter:~# docker run --name some-redis -d redis
Unable to find image 'redis:latest' locally
latest: Pulling from library/redis
docker: no matching manifest for linux/riscv64 in the manifest list entries.
See 'docker run --help'.
root@milkv-jupiter:~# docker run --name some-redis -d riscv64/redis
Unable to find image 'riscv64/redis:latest' locally
docker: Error response from daemon: manifest for riscv64/redis:latest not found: manifest unknown: manifest unknown.
See 'docker run --help'.
root@milkv-jupiter:~# docker run --name some-redis -d riscv64/redis:7.4-rc-alpine3.20
Unable to find image 'riscv64/redis:7.4-rc-alpine3.20' locally
7.4-rc-alpine3.20: Pulling from riscv64/redis
d4714cc4c8bb: Pull complete 
5923aa7cbf3a: Pull complete 
5431027fcd2f: Pull complete 
e01b77e4c90b: Pull complete 
1789fa2a0e8f: Pull complete 
2d89db90b7dd: Pull complete 
4f4fb700ef54: Pull complete 
f90f4ee3aef7: Pull complete 
Digest: sha256:03d38d93104eb9f10aaa01b63cf1a7f2f18f7389103cf097b4d51f3e036dd5fd
Status: Downloaded newer image for riscv64/redis:7.4-rc-alpine3.20
502e8abbd2f57af0081e0441108741468588dc9906acb995fc5a3bd702582da5
root@milkv-jupiter:~# docker ps
CONTAINER ID   IMAGE                                              COMMAND                  CREATED         STATUS         PORTS      NAMES
502e8abbd2f5   riscv64/redis:7.4-rc-alpine3.20                    "docker-entrypoint.s…"   5 seconds ago   Up 3 seconds   6379/tcp   some-redis

It feels like the armv7/arm64 situation 5-8 years ago currently; if you do a lot with containers, expect to have to build your own on top of the primitives for a while, yet. And some software compiles, some doesn't (without some tweaking), so it's not for the 'driveby sysadmin' yet, you have to actually know the basics to be productive.

Wrote up a blog post on it: The state of Docker on popular RISC-V platforms.

@geerlingguy
Copy link
Owner Author

geerlingguy commented Jul 22, 2024

Testing an old AMD R5 230 2GB GPU, I plugged it into the board while powered off, and was surprised to see the fan spin up—thus I opened PCIe slot powered even when Jupiter is powered off.

The system boots with the card installed, and dmesg shows:

root@milkv-jupiter:~# dmesg | grep pci
[    1.086178] k1x-dwc-pcie ca400000.pcie: has no power on gpio.
[    1.089319] k1x-dwc-pcie ca400000.pcie: host bridge /soc/pcie@ca400000 ranges:
[    1.096423] k1x-dwc-pcie ca400000.pcie:       IO 0x009f002000..0x009f101fff -> 0x009f002000
[    1.108832] k1x-dwc-pcie ca400000.pcie:      MEM 0x0090000000..0x009effffff -> 0x0090000000
[    1.217346] k1x-dwc-pcie ca400000.pcie: iATU unroll: enabled
[    1.220160] k1x-dwc-pcie ca400000.pcie: iATU regions: 8 ob, 8 ib, align 4K, limit 4G
[    1.321974] k1x-dwc-pcie ca400000.pcie: PCIe Gen.2 x1 link up
[    1.325021] k1x-dwc-pcie ca400000.pcie: PCI host bridge to bus 0001:00
[    1.331479] pci_bus 0001:00: root bus resource [bus 00-ff]
[    1.337026] pci_bus 0001:00: root bus resource [io  0x0000-0xfffff] (bus address [0x9f002000-0x9f101fff])
[    1.346667] pci_bus 0001:00: root bus resource [mem 0x90000000-0x9effffff]
[    1.353630] pci 0001:00:00.0: [1e5d:3003] type 01 class 0x060400
[    1.359691] pci 0001:00:00.0: reg 0x10: [mem 0x00000000-0x000fffff]
[    1.366021] pci 0001:00:00.0: reg 0x14: [mem 0x00000000-0x000fffff]
[    1.372402] pci 0001:00:00.0: supports D1
[    1.376433] pci 0001:00:00.0: PME# supported from D0 D1 D3hot D3cold
[    1.386229] pci 0001:01:00.0: [1e0f:0010] type 00 class 0x010802
[    1.389450] pci 0001:01:00.0: reg 0x10: [mem 0x00000000-0x00003fff 64bit]
[    1.396740] pci 0001:01:00.0: 4.000 Gb/s available PCIe bandwidth, limited by 5.0 GT/s PCIe x1 link at 0001:00:00.0 (capable of 63.012 Gb/s with 16.0 GT/s PCIe x4 link)
[    1.422008] pci_bus 0001:01: busn_res: [bus 01-ff] end is updated to 01
[    1.425792] pci 0001:00:00.0: BAR 0: assigned [mem 0x90000000-0x900fffff]
[    1.432639] pci 0001:00:00.0: BAR 1: assigned [mem 0x90100000-0x901fffff]
[    1.439492] pci 0001:00:00.0: BAR 8: assigned [mem 0x90200000-0x902fffff]
[    1.446350] pci 0001:01:00.0: BAR 0: assigned [mem 0x90200000-0x90203fff 64bit]
[    1.453757] pci 0001:00:00.0: PCI bridge to [bus 01]
[    1.458762] pci 0001:00:00.0:   bridge window [mem 0x90200000-0x902fffff]
[    1.467122] pcieport 0001:00:00.0: PME: Signaling with IRQ 57
[    1.471799] pcieport 0001:00:00.0: AER: enabled with IRQ 57
[    1.477672] k1x-dwc-pcie ca800000.pcie: has no power on gpio.
[    1.483091] k1x-dwc-pcie ca800000.pcie: host bridge /soc/pcie@ca800000 ranges:
[    1.490276] k1x-dwc-pcie ca800000.pcie:       IO 0x00b7002000..0x00b7101fff -> 0x00b7002000
[    1.498627] k1x-dwc-pcie ca800000.pcie:      MEM 0x00a0000000..0x00b6ffffff -> 0x00a0000000
[    1.607112] k1x-dwc-pcie ca800000.pcie: iATU unroll: enabled
[    1.609908] k1x-dwc-pcie ca800000.pcie: iATU regions: 8 ob, 8 ib, align 4K, limit 4G
[    1.709979] k1x-dwc-pcie ca800000.pcie: PCIe Gen.1 x2 link up
[    1.712979] k1x-dwc-pcie ca800000.pcie: PCI host bridge to bus 0002:00
[    1.719480] pci_bus 0002:00: root bus resource [bus 00-ff]
[    1.725028] pci_bus 0002:00: root bus resource [io  0x100000-0x1fffff] (bus address [0xb7002000-0xb7101fff])
[    1.734927] pci_bus 0002:00: root bus resource [mem 0xa0000000-0xb6ffffff]
[    1.741889] pci 0002:00:00.0: [1e5d:3003] type 01 class 0x060400
[    1.747954] pci 0002:00:00.0: reg 0x10: [mem 0x00000000-0x000fffff]
[    1.754284] pci 0002:00:00.0: reg 0x14: [mem 0x00000000-0x000fffff]
[    1.760669] pci 0002:00:00.0: supports D1
[    1.764700] pci 0002:00:00.0: PME# supported from D0 D1 D3hot D3cold
[    1.774431] pci 0002:01:00.0: [1002:6779] type 00 class 0x030000
[    1.777668] pci 0002:01:00.0: reg 0x10: [mem 0x00000000-0x0fffffff 64bit pref]
[    1.784940] pci 0002:01:00.0: reg 0x18: [mem 0x00000000-0x0001ffff 64bit]
[    1.791770] pci 0002:01:00.0: reg 0x20: [io  0x0000-0x00ff]
[    1.797433] pci 0002:01:00.0: reg 0x30: [mem 0x00000000-0x0001ffff pref]
[    1.804183] pci 0002:01:00.0: enabling Extended Tags
[    1.809404] pci 0002:01:00.0: supports D1 D2
[    1.813653] pci 0002:01:00.0: 4.000 Gb/s available PCIe bandwidth, limited by 2.5 GT/s PCIe x2 link at 0002:00:00.0 (capable of 32.000 Gb/s with 2.5 GT/s PCIe x16 link)
[    1.828887] pci 0002:01:00.0: vgaarb: setting as boot VGA device
[    1.834709] pci 0002:01:00.0: vgaarb: bridge control possible
[    1.840524] pci 0002:01:00.0: vgaarb: VGA device added: decodes=io+mem,owns=none,locks=none
[    1.849042] pci 0002:01:00.1: [1002:aa98] type 00 class 0x040300
[    1.855098] pci 0002:01:00.1: reg 0x10: [mem 0x00000000-0x00003fff 64bit]
[    1.862025] pci 0002:01:00.1: enabling Extended Tags
[    1.867128] pci 0002:01:00.1: supports D1 D2
[    1.882020] pci_bus 0002:01: busn_res: [bus 01-ff] end is updated to 01
[    1.885803] pci 0002:00:00.0: BAR 9: assigned [mem 0xa0000000-0xafffffff 64bit pref]
[    1.893605] pci 0002:00:00.0: BAR 0: assigned [mem 0xb0000000-0xb00fffff]
[    1.900458] pci 0002:00:00.0: BAR 1: assigned [mem 0xb0100000-0xb01fffff]
[    1.907313] pci 0002:00:00.0: BAR 8: assigned [mem 0xb0200000-0xb02fffff]
[    1.914168] pci 0002:00:00.0: BAR 7: assigned [io  0x100000-0x100fff]
[    1.920682] pci 0002:01:00.0: BAR 0: assigned [mem 0xa0000000-0xafffffff 64bit pref]
[    1.928527] pci 0002:01:00.0: BAR 2: assigned [mem 0xb0200000-0xb021ffff 64bit]
[    1.935904] pci 0002:01:00.0: BAR 6: assigned [mem 0xb0220000-0xb023ffff pref]
[    1.943163] pci 0002:01:00.1: BAR 0: assigned [mem 0xb0240000-0xb0243fff 64bit]
[    1.950574] pci 0002:01:00.0: BAR 4: assigned [io  0x100000-0x1000ff]
[    1.957059] pci 0002:00:00.0: PCI bridge to [bus 01]
[    1.962085] pci 0002:00:00.0:   bridge window [io  0x100000-0x100fff]
[    1.968595] pci 0002:00:00.0:   bridge window [mem 0xb0200000-0xb02fffff]
[    1.975458] pci 0002:00:00.0:   bridge window [mem 0xa0000000-0xafffffff 64bit pref]
[    1.984783] pcieport 0002:00:00.0: PME: Signaling with IRQ 61
[    1.989420] pcieport 0002:00:00.0: AER: enabled with IRQ 61
[    1.994901] pci 0002:01:00.1: D0 power state depends on 0002:01:00.0
[    2.187511] nvme nvme0: pci function 0001:01:00.0

Then there's lspci:

0002:01:00.0 VGA compatible controller: Advanced Micro Devices, Inc. [AMD/ATI] Caicos [Radeon HD 6450/7450/8450 / R5 230 OEM] (prog-if 00 [VGA controller])
	Subsystem: Hightech Information System Ltd. Caicos [Radeon HD 6450/7450/8450 / R5 230 OEM]
	Control: I/O- Mem- BusMaster- SpecCycle- MemWINV- VGASnoop- ParErr- Stepping- SERR- FastB2B- DisINTx-
	Status: Cap+ 66MHz- UDF- FastB2B- ParErr- DEVSEL=fast >TAbort- <TAbort- <MAbort- >SERR- <PERR- INTx-
	Interrupt: pin A routed to IRQ 255
	Region 0: Memory at a0000000 (64-bit, prefetchable) [disabled] [size=256M]
	Region 2: Memory at b0200000 (64-bit, non-prefetchable) [disabled] [size=128K]
	Region 4: I/O ports at 100000 [disabled] [size=256]
	Expansion ROM at b0220000 [virtual] [disabled] [size=128K]
	Capabilities: [50] Power Management version 3
		Flags: PMEClk- DSI- D1+ D2+ AuxCurrent=0mA PME(D0-,D1-,D2-,D3hot-,D3cold-)
		Status: D0 NoSoftRst- PME-Enable- DSel=0 DScale=0 PME-
	Capabilities: [58] Express (v2) Legacy Endpoint, MSI 00
		DevCap:	MaxPayload 256 bytes, PhantFunc 0, Latency L0s <4us, L1 unlimited
			ExtTag+ AttnBtn- AttnInd- PwrInd- RBE+ FLReset-
		DevCtl:	CorrErr+ NonFatalErr+ FatalErr+ UnsupReq+
			RlxdOrd+ ExtTag+ PhantFunc- AuxPwr- NoSnoop+
			MaxPayload 128 bytes, MaxReadReq 512 bytes
		DevSta:	CorrErr+ NonFatalErr- FatalErr- UnsupReq+ AuxPwr- TransPend-
		LnkCap:	Port #0, Speed 2.5GT/s, Width x16, ASPM L0s L1, Exit Latency L0s <64ns, L1 <1us
			ClockPM- Surprise- LLActRep- BwNot- ASPMOptComp-
		LnkCtl:	ASPM Disabled; RCB 64 bytes, Disabled- CommClk+
			ExtSynch- ClockPM- AutWidDis- BWInt- AutBWInt-
		LnkSta:	Speed 2.5GT/s, Width x2 (downgraded)
			TrErr- Train- SlotClk+ DLActive- BWMgmt- ABWMgmt-
		DevCap2: Completion Timeout: Range ABCD, TimeoutDis+ NROPrPrP- LTR-
			 10BitTagComp- 10BitTagReq- OBFF Not Supported, ExtFmt- EETLPPrefix-
			 EmergencyPowerReduction Not Supported, EmergencyPowerReductionInit-
			 FRS-
			 AtomicOpsCap: 32bit- 64bit- 128bitCAS-
		DevCtl2: Completion Timeout: 50us to 50ms, TimeoutDis- LTR- 10BitTagReq- OBFF Disabled,
			 AtomicOpsCtl: ReqEn-
		LnkCtl2: Target Link Speed: 2.5GT/s, EnterCompliance- SpeedDis-
			 Transmit Margin: Normal Operating Range, EnterModifiedCompliance- ComplianceSOS-
			 Compliance Preset/De-emphasis: -6dB de-emphasis, 0dB preshoot
		LnkSta2: Current De-emphasis Level: -6dB, EqualizationComplete- EqualizationPhase1-
			 EqualizationPhase2- EqualizationPhase3- LinkEqualizationRequest-
			 Retimer- 2Retimers- CrosslinkRes: unsupported
	Capabilities: [a0] MSI: Enable- Count=1/1 Maskable- 64bit+
		Address: 0000000000000000  Data: 0000
	Capabilities: [100 v1] Vendor Specific Information: ID=0001 Rev=1 Len=010 <?>
	Capabilities: [150 v1] Advanced Error Reporting
		UESta:	DLP- SDES- TLP- FCP- CmpltTO- CmpltAbrt- UnxCmplt- RxOF- MalfTLP- ECRC- UnsupReq- ACSViol-
		UEMsk:	DLP- SDES- TLP- FCP- CmpltTO- CmpltAbrt- UnxCmplt- RxOF- MalfTLP- ECRC- UnsupReq- ACSViol-
		UESvrt:	DLP+ SDES+ TLP- FCP+ CmpltTO- CmpltAbrt- UnxCmplt- RxOF+ MalfTLP+ ECRC- UnsupReq- ACSViol-
		CESta:	RxErr- BadTLP- BadDLLP- Rollover- Timeout- AdvNonFatalErr+
		CEMsk:	RxErr- BadTLP- BadDLLP- Rollover- Timeout- AdvNonFatalErr+
		AERCap:	First Error Pointer: 00, ECRCGenCap+ ECRCGenEn- ECRCChkCap+ ECRCChkEn-
			MultHdrRecCap- MultHdrRecEn- TLPPfxPres- HdrLogCap-
		HeaderLog: 00000000 00000000 00000000 00000000

0002:01:00.1 Audio device: Advanced Micro Devices, Inc. [AMD/ATI] Caicos HDMI Audio [Radeon HD 6450 / 7450/8450/8490 OEM / R5 230/235/235X OEM]
	Subsystem: Hightech Information System Ltd. Caicos HDMI Audio [Radeon HD 6450 / 7450/8450/8490 OEM / R5 230/235/235X OEM]
	Control: I/O- Mem- BusMaster- SpecCycle- MemWINV- VGASnoop- ParErr- Stepping- SERR- FastB2B- DisINTx-
	Status: Cap+ 66MHz- UDF- FastB2B- ParErr- DEVSEL=fast >TAbort- <TAbort- <MAbort- >SERR- <PERR- INTx-
	Interrupt: pin B routed to IRQ 255
	Region 0: Memory at b0240000 (64-bit, non-prefetchable) [disabled] [size=16K]
	Capabilities: [50] Power Management version 3
		Flags: PMEClk- DSI- D1+ D2+ AuxCurrent=0mA PME(D0-,D1-,D2-,D3hot-,D3cold-)
		Status: D0 NoSoftRst- PME-Enable- DSel=0 DScale=0 PME-
	Capabilities: [58] Express (v2) Legacy Endpoint, MSI 00
		DevCap:	MaxPayload 256 bytes, PhantFunc 0, Latency L0s <4us, L1 unlimited
			ExtTag+ AttnBtn- AttnInd- PwrInd- RBE+ FLReset-
		DevCtl:	CorrErr+ NonFatalErr+ FatalErr+ UnsupReq+
			RlxdOrd+ ExtTag+ PhantFunc- AuxPwr- NoSnoop+
			MaxPayload 128 bytes, MaxReadReq 512 bytes
		DevSta:	CorrErr+ NonFatalErr- FatalErr- UnsupReq+ AuxPwr- TransPend-
		LnkCap:	Port #0, Speed 2.5GT/s, Width x16, ASPM L0s L1, Exit Latency L0s <64ns, L1 <1us
			ClockPM- Surprise- LLActRep- BwNot- ASPMOptComp-
		LnkCtl:	ASPM Disabled; RCB 64 bytes, Disabled- CommClk+
			ExtSynch- ClockPM- AutWidDis- BWInt- AutBWInt-
		LnkSta:	Speed 2.5GT/s, Width x2 (downgraded)
			TrErr- Train- SlotClk+ DLActive- BWMgmt- ABWMgmt-
		DevCap2: Completion Timeout: Range ABCD, TimeoutDis+ NROPrPrP- LTR-
			 10BitTagComp- 10BitTagReq- OBFF Not Supported, ExtFmt- EETLPPrefix-
			 EmergencyPowerReduction Not Supported, EmergencyPowerReductionInit-
			 FRS-
			 AtomicOpsCap: 32bit- 64bit- 128bitCAS-
		DevCtl2: Completion Timeout: 50us to 50ms, TimeoutDis- LTR- 10BitTagReq- OBFF Disabled,
			 AtomicOpsCtl: ReqEn-
		LnkSta2: Current De-emphasis Level: -6dB, EqualizationComplete- EqualizationPhase1-
			 EqualizationPhase2- EqualizationPhase3- LinkEqualizationRequest-
			 Retimer- 2Retimers- CrosslinkRes: unsupported
	Capabilities: [a0] MSI: Enable- Count=1/1 Maskable- 64bit+
		Address: 0000000000000000  Data: 0000
	Capabilities: [100 v1] Vendor Specific Information: ID=0001 Rev=1 Len=010 <?>
	Capabilities: [150 v1] Advanced Error Reporting
		UESta:	DLP- SDES- TLP- FCP- CmpltTO- CmpltAbrt- UnxCmplt- RxOF- MalfTLP- ECRC- UnsupReq- ACSViol-
		UEMsk:	DLP- SDES- TLP- FCP- CmpltTO- CmpltAbrt- UnxCmplt- RxOF- MalfTLP- ECRC- UnsupReq- ACSViol-
		UESvrt:	DLP+ SDES+ TLP- FCP+ CmpltTO- CmpltAbrt- UnxCmplt- RxOF+ MalfTLP+ ECRC- UnsupReq- ACSViol-
		CESta:	RxErr- BadTLP- BadDLLP- Rollover- Timeout- AdvNonFatalErr+
		CEMsk:	RxErr- BadTLP- BadDLLP- Rollover- Timeout- AdvNonFatalErr+
		AERCap:	First Error Pointer: 00, ECRCGenCap+ ECRCGenEn- ECRCChkCap+ ECRCChkEn-
			MultHdrRecCap- MultHdrRecEn- TLPPfxPres- HdrLogCap-
		HeaderLog: 00000000 00000000 00000000 00000000

I am going to try this k1-gpu branch to see if I can get the AMD GPU to work in Bianbu Linux. That's a fork of Bianbu Linux 6.1, and the patch seems to perform a few of the write-combining hacks that we had to do for radeon/amdgpu for Arm as well.

@carbonfix
Copy link

For GPU testing, the command provided by SpaceMIT is as follows:

sudo apt install glmark2-es2-wayland
glmark2-es2-wayland --run-forever

@hokamilkv
Copy link

I was originally wondering if the fan or fan connector was dead, but no—just the heatsink seems to be good enough for 99% of the time—the fan will only spin up deep into a multicore test, and briefly at that. It's noticeable but not annoying the few times it does spin up.

Our default logic is to turn on the fan when the core temperature reaches above 60 degrees. We will update to PWM speed regulation in later versions.

@hokamilkv
Copy link

hokamilkv commented Jul 23, 2024

For GPU testing, the command provided by SpaceMIT is as follows:

sudo apt install glmark2-es2-wayland
glmark2-es2-wayland --run-forever

You can also watch the gpu status:

sudo watch cat /sys/kernel/debug/pvr/status

@geerlingguy
Copy link
Owner Author

@carbonfix - Thanks! I was able to get a much more reasonable score of 459 with that!

@geerlingguy
Copy link
Owner Author

geerlingguy commented Jul 23, 2024

Regarding WiFi, under Bianbu I'm seeing the following in dmesg:

[   29.348627] RTW: module init start
[   29.348647] RTW: rtl8852bs v1.19.7.1-51-g48af265.20230922
[   29.348653] RTW: build time: Jul 19 2024 08:17:49
[   29.348659] RTW: 
[   29.348662] RTW: =======================================================
[   29.348666] RTW: ==== Launching Wi-Fi driver! (Powered by Spacemit) ====
[   29.348669] RTW: =======================================================
[   29.348672] RTW: Realtek rtl8852bs WiFi driver (Powered by Spacemit,Ver v1.19.7.1-51-g48af265.20230922) init.
[   29.366240] RTW: module init ret=0

Upon @carbonfix's suggestion I also dumped i2c data:

root@milkv-jupiter:/home/jgeerling# i2cdump -y 2 0x50
No size specified (using byte-data access)
     0  1  2  3  4  5  6  7  8  9  a  b  c  d  e  f    0123456789abcdef
00: 54 6c 76 49 6e 66 6f 00 01 00 26 24 06 fe fe fe    TlvInfo.?.&$????
10: 0b 80 73 2a 02 00 02 21 12 6d 31 2d 78 5f 6d 69    ??s*?.?!?m1-x_mi
20: 6c 6b 76 2d 6a 75 70 69 74 65 72 fe 04 98 83 7e    lkv-jupiter????~
30: b7 ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff    ?...............
40: ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff    ................
50: ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff    ................
60: ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff    ................
70: ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff    ................
80: ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff    ................
90: ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff    ................
a0: ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff    ................
b0: ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff    ................
c0: ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff    ................
d0: ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff    ................
e0: ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff    ................
f0: ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff    ................

@ThomasKaiser
Copy link

Memory performance (especially latency) is not that great (well, bad). Are the Milk-V guys aware of this and might provide 'better' DRAM initialization code?

@geerlingguy
Copy link
Owner Author

@ThomasKaiser - They are watching this thread, would be good to hear their thoughts—not sure if this is the first board they're using the Spacemit SoC with, but I wonder if it's an issue with Spacemit's controller or with something more under their control.

@ThomasKaiser
Copy link

I'm also re-running Geekbench 6

Just why? By looking at https://browser.geekbench.com/v6/cpu/compare/6979805?baseline=5769184 it's 100% obvious that Geekbench on RISC-V is not capable to generate any meaningful numbers that would represent anything 'real-world performance'. It's just nonsense.

@Icenowy
Copy link

Icenowy commented Jul 25, 2024

@geerlingguy Currently it's needed to replace Mesa with a genuine copy from a generic distro to use external GPU (because the Mesa shipped with Bianbu is polluted by PowerVR driver, and its non-PowerVR-driver part seems to be broken). I didn't try this (because I just replaced the whole distro rootfs to test GPU support).

@ThomasKaiser
Copy link

I wonder if it's an issue with Spacemit's controller or with something more under their control.

@geerlingguy it should be under their control since we can compare with another K1 equipped thingy limited to 1.6 GHz though. When looking at memory latency accesses at 1M or above are lower on the Jupiter than on the BPi F3 while below it's the other way around (internal cache and higher clockspeeds).

@geerlingguy
Copy link
Owner Author

Just why? By looking at https://browser.geekbench.com/v6/cpu/compare/6979805?baseline=5769184 it's 100% obvious that Geekbench on RISC-V is not capable to generate any meaningful numbers that would represent anything 'real-world performance'. It's just nonsense.

Because people will ask regardless, and I like having the data, regardless of the fitness of Geekbench 6 as a universal benchmarking tool :)

The reason I run a few dozen other tests too is because:

  1. Having one simple benchmark is fun for giggles, but having an array of more real-world examples like real code compilation, glmark, memory test, MP3/MP4 transcoding, etc. is better.
  2. Different tests show differences in architecture differently :D

To that point, I still can't run a few common benchmarks (like PTS tests) because they aren't set up for RISC-V. Whether that reflects real-world performance ('0' vs some metric that is above '0') is immaterial—instead, it reflects reality: if you buy one of these boards today, the performance might as well be 0 if you can't compile or run software the same as you can on x86 and Arm currently. At least, if you're not willing to roll up your sleeves and patch makefiles, compile newer versions than are available in repositories, build your own containers, etc.

@geerlingguy
Copy link
Owner Author

I have a new board today, and here are a few notes:

First, idle power draw as tested with a USB-C power adapter is slightly higher from the wall (maybe slightly less efficient supply), measuring 5W idle, 10W under stress-ng all cores:

Screenshot 2024-07-30 at 10 32 31 AM

Second, WiFi works (yay!), so now I can run my network performance tests with WiFi instead of wired.

@geerlingguy
Copy link
Owner Author

YouTube video: The PC industry is changing: RISC-V goes mainstream.

@apcameron
Copy link

apcameron commented Aug 5, 2024

Try this benchmark on your systems.
https://github.com/PlummersSoftwareLLC/Primes/tree/drag-race/PrimeCPP/solution_2
Just tried it on my Risc-v VisionFive 2
It scores better than the PI 4 in this test. See Below


Computing primes to 10000000 on 4 threads for 5 seconds.
Passes: 64, Threads: 4, Time: 5.07541, Average: 0.0793033, Limit: 10000000, Counts: 664579/664579, Valid : Pass

davepl_par;64;5.07541;4;algorithm=base,faithful=yes,bits=1


It will be interesting to see the results

I got the idea to run it on my system after watching https://www.youtube.com/watch?v=7lYX0Eo4cbE&t=1s

Make sure to set the CPU to performance mode
echo performance | tee /sys/devices/system/cpu/cpu*/cpufreq/scaling_governor

@swamytk
Copy link

swamytk commented Oct 16, 2024

Kioxia XG8 over PCIe:

0001:01:00.0 Non-Volatile memory controller: KIOXIA Corporation NVMe SSD Controller XG8 (rev 01) (prog-if 02 [NVM Express])
	Subsystem: KIOXIA Corporation Device 0001


		LnkCap:	Port #0, Speed 16GT/s, Width x4, ASPM L1, Exit Latency L1 <32us
			ClockPM- Surprise- LLActRep- BwNot- ASPMOptComp+
		LnkCtl:	ASPM Disabled; RCB 64 bytes, Disabled- CommClk+
			ExtSynch- ClockPM- AutWidDis- BWInt- AutBWInt-
		**LnkSta:	Speed 5GT/s (downgraded), Width x1 (downgraded)**
			TrErr- Train- SlotClk+ DLActive- BWMgmt- ABWMgmt-


	Kernel driver in use: nvme

Hi @geerlingguy , thanks a lot for the detailed work on this board. I am yet to receive my board which is on the way.
The spec says PCIe Gen2x2 (2 lanes), but lspci shows link status as "Width x1" as shown above. Did you get a chance to analyze this? This is the reason you get only 346MB/s max on NVMe SSD (benchmark test)? With 2 lanes, we should get around 800MB/s performance.

@mliezun
Copy link

mliezun commented Oct 18, 2024

Hi @geerlingguy!

I know this is a little bit off-topic, but I've been building a site for hosting CI/CD runners powered by RISC-V architecture. I was in the need of it and noticed there wasn't one out there that was easy to setup.

Here's the site:
https://www.riscvrunners.com/

For now it only supports Gitlab Runners, but I plan to add support for other platforms too!

If you want to try it without paying, check out this Gitlab Project: https://gitlab.com/riscvrunners/runner-test

That project is open to the public, so you can push code and run CI pipelines to see if it works as you expect.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

8 participants