Skip to content

Milk-V Mars CM #22

Description

@geerlingguy

DSC04058

Basic information

  • Board URL (official): https://milkv.io/mars-cm
  • Board purchased from: ARACE
  • Board purchase date: 2023-09-05
  • Board specs (as tested): 4 GB RAM / 16 GB eMMC
  • Board price (as tested): $54 (+$12 shipping)

Linux/system information

# output of `neofetch`
       _,met$$$$$gg.          root@starfive 
    ,g$$$$$$$$$$$$$$$P.       ------------- 
  ,g$$P"     """Y$$.".        OS: Debian GNU/Linux bookworm/sid riscv64 
 ,$$P'              `$$$.     Host: Milk-V Mars CM eMMC 
',$$P       ,ggs.     `$$b:   Kernel: 5.15.0 
`d$$'     ,$P"'   .    $$$    Uptime: 30 mins 
 $$P      d$'     ,    $$P    Packages: 1324 (dpkg) 
 $$:      $$.   -    ,d$$'    Shell: bash 5.2.2 
 $$;      Y$b._   _,d$P'      Terminal: /dev/pts/0 
 Y$$.    `.`"Y$$$$P"'         CPU: (4) @ 1.500GHz 
 `$$b      "-.__              Memory: 426MiB / 3874MiB 
root@starfive:~# 
   `Y$$.
     `$$b.
       `Y$$b.
          `"Y$b._
              `"""

# output of `uname -a`
Linux starfive 5.15.0 #9 SMP Sun Oct 8 17:14:43 CST 2023 riscv64 GNU/Linux

Benchmark results

CPU

Power

  • Idle power draw (at wall): 1.1 W
  • Maximum simulated power draw (stress-ng --matrix 0): 3.8 W
  • During Geekbench multicore benchmark: 3.1 W
  • During top500 HPL benchmark: 3.6 W

Disk

Built-in 16 GB eMMC Module

Benchmark Result
fio 1M sequential read 45.3 MB/s
iozone 1M random read 37.70 MB/s
iozone 1M random write 26.12 MB/s
iozone 4K random read 14.39 MB/s
iozone 4K random write 14.30 MB/s

2TB Kioxia XG8 NVMe SSD (via PCIe Gen 2 x1 interface)

Benchmark Result
fio 1M sequential read 151.00 MB/s
iozone 1M random read 242.58 MB/s
iozone 1M random write 248.08 MB/s
iozone 4K random read 38.09 MB/s
iozone 4K random write 88.16 MB/s

curl https://raw.githubusercontent.com/geerlingguy/pi-cluster/master/benchmarks/disk-benchmark.sh | sudo bash

Run benchmark on any attached storage device (e.g. eMMC, microSD, NVMe, SATA) and add results under an additional heading. Download the script with curl -o disk-benchmark.sh [URL_HERE] and run sudo DEVICE_UNDER_TEST=/dev/sda DEVICE_MOUNT_PATH=/mnt/sda1 ./disk-benchmark.sh (assuming the device is sda).

Also consider running PiBenchmarks.com script.

Network

iperf3 results:

1 Gbps Ethernet (built-in)

  • iperf3 -c $SERVER_IP: 920 Mbps
  • iperf3 --reverse -c $SERVER_IP: 879 Mbps
  • iperf3 --bidir -c $SERVER_IP: 941 Mbps up, 258 Mbps down

WiFi (built-in)

  • iperf3 -c $SERVER_IP: TODO Mbps
  • iperf3 --reverse -c $SERVER_IP: TODO Mbps
  • iperf3 --bidir -c $SERVER_IP: TODO Mbps up, TODO Mbps down

GPU

  • TODO: Haven't determined standardized benchmark yet. See Issue #2.

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                                     :    993.0 MB/s (0.7%)
 C copy backwards (32 byte blocks)                    :    991.7 MB/s
 C copy backwards (64 byte blocks)                    :    991.7 MB/s
 C copy                                               :   1002.3 MB/s
 C copy prefetched (32 bytes step)                    :   1001.8 MB/s (0.4%)
 C copy prefetched (64 bytes step)                    :   1003.6 MB/s (0.4%)
 C 2-pass copy                                        :    829.9 MB/s
 C 2-pass copy prefetched (32 bytes step)             :    833.9 MB/s
 C 2-pass copy prefetched (64 bytes step)             :    832.6 MB/s (0.1%)
 C fill                                               :    868.7 MB/s (0.2%)
 C fill (shuffle within 16 byte blocks)               :    864.9 MB/s
 C fill (shuffle within 32 byte blocks)               :    868.8 MB/s (0.3%)
 C fill (shuffle within 64 byte blocks)               :    876.2 MB/s (0.4%)
 ---
 standard memcpy                                      :   1004.5 MB/s
 standard memset                                      :    884.3 MB/s (0.6%)

==========================================================================
== 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.0 ns          /     0.0 ns 
      2048 :    0.0 ns          /     0.0 ns 
      4096 :    0.0 ns          /     0.0 ns 
      8192 :    0.0 ns          /     0.0 ns 
     16384 :    0.0 ns          /     0.0 ns 
     32768 :    0.0 ns          /     0.0 ns 
     65536 :    5.4 ns          /    10.5 ns 
    131072 :    8.1 ns          /    15.8 ns 
    262144 :    9.5 ns          /    18.6 ns 
    524288 :   15.4 ns          /    28.6 ns 
   1048576 :   16.0 ns          /    30.6 ns 
   2097152 :   21.9 ns          /    38.5 ns 
   4194304 :   84.8 ns          /   166.5 ns 
   8388608 :  122.4 ns          /   242.6 ns 
  16777216 :  143.7 ns          /   285.6 ns 
  33554432 :  157.2 ns          /   313.1 ns 
  67108864 :  167.7 ns          /   334.6 ns 

Phoronix Test Suite

Results from pi-general-benchmark.sh:

  • pts/encode-mp3: TODO sec
  • pts/x264 4K: TODO fps
  • pts/x264 1080p: TODO fps
  • pts/phpbench: TODO
  • pts/build-linux-kernel (defconfig): TODO sec

sbc-bench results

Device / details Clockspeed Kernel Distro 7-zip multi 7-zip single AES memcpy memset kH/s
Milk-V Mars CM (JH7110) 1500 MHz 5.15 Bookworm riscv64 4110 1195 25070 930 830 -

Metadata

Metadata

Assignees

No one assigned

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions