Skip to content

Arduino Uno Q #83

Description

@geerlingguy

Image

Basic information

  • Board URL (official): https://www.arduino.cc/product-uno-q
  • Board purchased from: Arduino store
  • Board purchase date: October 7, 2025
  • Board specs (as tested): 2GB RAM / 16 GB eMMC
  • Board price (as tested): $44

Linux/system information

# output of `screenfetch`
         _,met$$$$$gg.           arduino@uno-q
      ,g$$$$$$$$$$$$$$$P.        OS: Debian 
    ,g$$P""       """Y$$.".      Kernel: aarch64 Linux 6.16.0-geffa8626771a
   ,$$P'              `$$$.      Uptime: 9m
  ',$$P       ,ggs.     `$$b:    Packages: 910
  `d$$'     ,$P"'   .    $$$     Shell: bash 5.2.37
   $$P      d$'     ,    $$P     Resolution: 1920x1080
   $$:      $$.   -    ,d$$'     DE: Xfce
   $$\;      Y$b._   _,d$P'      WM: Xfwm4
   Y$$.    `.`"Y$$$$P"'          WM Theme: Adwaita
   `$$b      "-.__               GTK Theme: Adwaita-dark [GTK2]
    `Y$$                         Icon Theme: Tango
     `Y$$.                       Font: Sans 10
       `$$b.                     Disk: 7.2G / 15G (54%)
         `Y$$b.                  CPU: Qualcomm Kryo-V2 @ 4x 2.016GHz
            `"Y$b._              GPU: 
                `""""            RAM: 639MiB / 1741MiB

# output of `uname -a`
Linux uno-q 6.16.0-geffa8626771a #1 SMP PREEMPT Wed Aug  6 14:24:25 UTC 2025 aarch64 GNU/Linux

Benchmark results

CPU

Power

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

Note: Power measurements taking with Uno Q plugged directly into USB-C power adapter, using SSH to access the Uno Q via WiFi. When used as a desktop, with an external USB-C docking station, the full setup used 4-5W more than when plugged in directly.

Disk

Built-in eMMC (Kingston MW2816)

Benchmark Result
iozone 4K random read 11.42 MB/s
iozone 4K random write 3.43 MB/s
iozone 1M random read 211.33 MB/s
iozone 1M random write 40.12 MB/s
iozone 1M sequential read 208.89 MB/s
iozone 1M sequential write 80.52 MB/s

Network

iperf3 results over WiFi:

  • iperf3 -c $SERVER_IP: 277 Mbps
  • iperf3 -c $SERVER_IP --reverse: 174 Mbps
  • iperf3 -c $SERVER_IP --bidir: 217 Mbps up, 65 Mbps down

GPU

glmark2

glmark2-es2 results:

=======================================================
    glmark2 2023.01
=======================================================
    OpenGL Information
    GL_VENDOR:      freedreno
    GL_RENDERER:    FD702
    GL_VERSION:     OpenGL ES 3.1 Mesa 25.1.0-1qcom1
    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: 379 FrameTime: 2.643 ms
[build] use-vbo=true: FPS: 419 FrameTime: 2.389 ms
[texture] texture-filter=nearest: FPS: 401 FrameTime: 2.496 ms
[texture] texture-filter=linear: FPS: 399 FrameTime: 2.509 ms
[texture] texture-filter=mipmap: FPS: 396 FrameTime: 2.531 ms
[shading] shading=gouraud: FPS: 364 FrameTime: 2.751 ms
[shading] shading=blinn-phong-inf: FPS: 351 FrameTime: 2.850 ms
[shading] shading=phong: FPS: 317 FrameTime: 3.161 ms
[shading] shading=cel: FPS: 305 FrameTime: 3.280 ms
[bump] bump-render=high-poly: FPS: 275 FrameTime: 3.639 ms
[bump] bump-render=normals: FPS: 416 FrameTime: 2.409 ms
[bump] bump-render=height: FPS: 381 FrameTime: 2.625 ms
[effect2d] kernel=0,1,0;1,-4,1;0,1,0;: FPS: 247 FrameTime: 4.049 ms
[effect2d] kernel=1,1,1,1,1;1,1,1,1,1;1,1,1,1,1;: FPS: 143 FrameTime: 7.013 ms
[pulsar] light=false:quads=5:texture=false: FPS: 402 FrameTime: 2.490 ms
[desktop] blur-radius=5:effect=blur:passes=1:separable=true:windows=4: FPS: 152 FrameTime: 6.618 ms
[desktop] effect=shadow:windows=4: FPS: 228 FrameTime: 4.387 ms
[buffer] columns=200:interleave=false:update-dispersion=0.9:update-fraction=0.5:update-method=map: FPS: 140 FrameTime: 7.148 ms
[buffer] columns=200:interleave=false:update-dispersion=0.9:update-fraction=0.5:update-method=subdata: FPS: 147 FrameTime: 6.839 ms
[buffer] columns=200:interleave=true:update-dispersion=0.9:update-fraction=0.5:update-method=map: FPS: 194 FrameTime: 5.170 ms
[ideas] speed=duration: FPS: 305 FrameTime: 3.287 ms
[jellyfish] <default>: FPS: 229 FrameTime: 4.377 ms
[terrain] <default>: FPS: 32 FrameTime: 31.668 ms
[shadow] <default>: FPS: 217 FrameTime: 4.618 ms
[refract] <default>: FPS: 62 FrameTime: 16.336 ms
[conditionals] fragment-steps=0:vertex-steps=0: FPS: 366 FrameTime: 2.736 ms
[conditionals] fragment-steps=5:vertex-steps=0: FPS: 311 FrameTime: 3.218 ms
[conditionals] fragment-steps=0:vertex-steps=5: FPS: 366 FrameTime: 2.739 ms
[function] fragment-complexity=low:fragment-steps=5: FPS: 345 FrameTime: 2.900 ms
[function] fragment-complexity=medium:fragment-steps=5: FPS: 308 FrameTime: 3.249 ms
[loop] fragment-loop=false:fragment-steps=5:vertex-steps=5: FPS: 342 FrameTime: 2.926 ms
[loop] fragment-steps=5:fragment-uniform=false:vertex-steps=5: FPS: 345 FrameTime: 2.905 ms
[loop] fragment-steps=5:fragment-uniform=true:vertex-steps=5: FPS: 326 FrameTime: 3.069 ms
=======================================================
                                  glmark2 Score: 290 
=======================================================

vkmark

vkmark results:

MESA: error: DRM_IOCTL_VIRTGPU_GET_CAPS failed with Bad file descriptor
MESA: error: DRM_IOCTL_VIRTGPU_CONTEXT_INIT failed with Bad file descriptor, continuing without context...
MESA: error: DRM_VIRTGPU_RESOURCE_CREATE_BLOB failed with Bad file descriptor
MESA: error: Failed to create virtgpu AddressSpaceStream
MESA: error: DRM_VIRTGPU_RESOURCE_CREATE_BLOB failed with Bad file descriptor
MESA: error: Failed to create virtgpu AddressSpaceStream
MESA: error: DRM_VIRTGPU_RESOURCE_CREATE_BLOB failed with Bad file descriptor
MESA: error: Failed to create virtgpu AddressSpaceStream
MESA: error: DRM_VIRTGPU_RESOURCE_CREATE_BLOB failed with Bad file descriptor
MESA: error: Failed to create virtgpu AddressSpaceStream
MESA: error: DRM_VIRTGPU_RESOURCE_CREATE_BLOB failed with Bad file descriptor
MESA: error: Failed to create virtgpu AddressSpaceStream
=======================================================
    vkmark 2025.01
=======================================================
    Vendor ID:      0x5143
    Device ID:      0x7000200
    Device Name:    Turnip Adreno (TM) 702
    Driver Version: 104861696
    Device UUID:    b437e45a5ddf5c12279db589b9834ecd
=======================================================
[vertex] device-local=true: FPS: 491 FrameTime: 2.037 ms
[vertex] device-local=false: FPS: 494 FrameTime: 2.024 ms
[texture] anisotropy=0: FPS: 442 FrameTime: 2.262 ms
[texture] anisotropy=16: FPS: 435 FrameTime: 2.299 ms
[shading] shading=gouraud: FPS: 408 FrameTime: 2.451 ms
[shading] shading=blinn-phong-inf: FPS: 410 FrameTime: 2.439 ms
[shading] shading=phong: FPS: 355 FrameTime: 2.817 ms
[shading] shading=cel: FPS: 336 FrameTime: 2.976 ms
[effect2d] kernel=edge: FPS: 558 FrameTime: 1.792 ms
[effect2d] kernel=blur: FPS: 93 FrameTime: 10.753 ms
[desktop] <default>: FPS: 592 FrameTime: 1.689 ms
[cube] <default>: FPS: 2303 FrameTime: 0.434 ms
[clear] <default>: FPS: 2724 FrameTime: 0.367 ms
=======================================================
                                   vkmark Score: 741
=======================================================

GravityMark

GravityMark results:

1. Download the latest version of GravityMark: https://gravitymark.tellusim.com
2. Run `chmod +x [downloaded_filename].run`
3. Run `sudo ./[downloaded_filename].run` and press `y` to accept the terms.
4. Open the link it prints, and run the Benchmark defaults, changing to 720p resolution and 50,000 asteroids.

Note: These benchmarks require 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!

AI / LLM Inference

Basic ollama LLM model inference results:

Running benchmark 3 times using model: tinyllama:1.1b

Run Eval Rate (Tokens/Second)
1 5.34 tokens/s
2 5.50 tokens/s
3 5.50 tokens/s
Average Eval Rate 5.44 tokens/second

System used around 6.1W during inference.

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                                     :   2159.4 MB/s (4.2%)
 C copy backwards (32 byte blocks)                    :   2147.8 MB/s (4.2%)
 C copy backwards (64 byte blocks)                    :   2203.5 MB/s (1.9%)
 C copy                                               :   2212.0 MB/s (1.8%)
 C copy prefetched (32 bytes step)                    :   1171.3 MB/s (1.9%)
 C copy prefetched (64 bytes step)                    :   1268.1 MB/s (0.7%)
 C 2-pass copy                                        :   1310.6 MB/s (0.5%)
 C 2-pass copy prefetched (32 bytes step)             :    937.4 MB/s (1.8%)
 C 2-pass copy prefetched (64 bytes step)             :    858.8 MB/s (1.0%)
 C fill                                               :  11757.8 MB/s (0.4%)
 C fill (shuffle within 16 byte blocks)               :  11748.6 MB/s (0.3%)
 C fill (shuffle within 32 byte blocks)               :  11764.3 MB/s (0.2%)
 C fill (shuffle within 64 byte blocks)               :  11786.0 MB/s (0.3%)
 NEON 64x2 COPY                                       :   2300.0 MB/s (0.4%)
 NEON 64x2x4 COPY                                     :   2297.3 MB/s (0.4%)
 NEON 64x1x4_x2 COPY                                  :   2292.1 MB/s (0.5%)
 NEON 64x2 COPY prefetch x2                           :    380.8 MB/s (0.8%)
 NEON 64x2x4 COPY prefetch x1                         :   2785.0 MB/s (0.9%)
 NEON 64x2 COPY prefetch x1                           :   2783.8 MB/s (0.5%)
 NEON 64x2x4 COPY prefetch x1                         :   2790.5 MB/s (0.6%)
 ---
 standard memcpy                                      :   2225.5 MB/s (0.8%)
 standard memset                                      :  11793.2 MB/s (0.1%)
 ---
 NEON LDP/STP copy                                    :   2268.5 MB/s (0.9%)
 NEON LDP/STP copy pldl2strm (32 bytes step)          :   1090.2 MB/s (1.0%)
 NEON LDP/STP copy pldl2strm (64 bytes step)          :   1275.3 MB/s (0.3%)
 NEON LDP/STP copy pldl1keep (32 bytes step)          :   2715.2 MB/s (0.8%)
 NEON LDP/STP copy pldl1keep (64 bytes step)          :   2732.3 MB/s (0.4%)
 NEON LD1/ST1 copy                                    :   2305.8 MB/s (0.5%)
 NEON STP fill                                        :  11796.4 MB/s (0.9%)
 NEON STNP fill                                       :  11271.1 MB/s (2.0%)
 ARM LDP/STP copy                                     :   2270.0 MB/s (0.6%)
 ARM STP fill                                         :  11796.2 MB/s (0.2%)
 ARM STNP fill                                        :  11260.5 MB/s (2.6%)

==========================================================================
== Framebuffer read tests.                                              ==
==                                                                      ==
== Many ARM devices use a part of the system memory as the framebuffer, ==
== typically mapped as uncached but with write-combining enabled.       ==
== Writes to such framebuffers are quite fast, but reads are much       ==
== slower and very sensitive to the alignment and the selection of      ==
== CPU instructions which are used for accessing memory.                ==
==                                                                      ==
== Many x86 systems allocate the framebuffer in the GPU memory,         ==
== accessible for the CPU via a relatively slow PCI-E bus. Moreover,    ==
== PCI-E is asymmetric and handles reads a lot worse than writes.       ==
==                                                                      ==
== If uncached framebuffer reads are reasonably fast (at least 100 MB/s ==
== or preferably >300 MB/s), then using the shadow framebuffer layer    ==
== is not necessary in Xorg DDX drivers, resulting in a nice overall    ==
== performance improvement. For example, the xf86-video-fbturbo DDX     ==
== uses this trick.                                                     ==
==========================================================================

 NEON LDP/STP copy (from framebuffer)                 :    220.4 MB/s (2.5%)
 NEON LDP/STP 2-pass copy (from framebuffer)          :    198.0 MB/s
 NEON LD1/ST1 copy (from framebuffer)                 :     54.7 MB/s
 NEON LD1/ST1 2-pass copy (from framebuffer)          :     52.6 MB/s
 ARM LDP/STP copy (from framebuffer)                  :    108.8 MB/s
 ARM LDP/STP 2-pass copy (from framebuffer)           :    103.6 MB/s

==========================================================================
== 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, [MADV_NOHUGEPAGE]
      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 :    3.5 ns          /     5.8 ns 
    131072 :    5.3 ns          /     8.1 ns 
    262144 :    6.2 ns          /     9.1 ns 
    524288 :    8.1 ns          /    11.5 ns 
   1048576 :   89.8 ns          /   137.7 ns 
   2097152 :  134.2 ns          /   176.4 ns 
   4194304 :  160.6 ns          /   196.2 ns 
   8388608 :  171.7 ns          /   200.1 ns 
  16777216 :  175.5 ns          /   204.6 ns 
  33554432 :  190.4 ns          /   209.1 ns 
  67108864 :  196.1 ns          /   214.1 ns 

block size : single random read / dual random read, [MADV_HUGEPAGE]
      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 :    3.5 ns          /     5.7 ns 
    131072 :    5.3 ns          /     8.2 ns 
    262144 :    6.2 ns          /     9.1 ns 
    524288 :    8.2 ns          /    11.9 ns 
   1048576 :   91.7 ns          /   139.5 ns 
   2097152 :  135.9 ns          /   178.3 ns 
   4194304 :  157.7 ns          /   191.9 ns 
   8388608 :  168.3 ns          /   194.3 ns 
  16777216 :  171.2 ns          /   197.7 ns 
  33554432 :  176.5 ns          /   198.3 ns 
  67108864 :  177.8 ns          /   198.7 ns 

Core to Core Memory Latency

Image

sbc-bench results

Run sbc-bench and paste a link to the results here:

wget https://raw.githubusercontent.com/ThomasKaiser/sbc-bench/master/sbc-bench.sh
sudo /bin/bash ./sbc-bench.sh -r

Phoronix Test Suite

Results from pi-general-benchmark.sh:

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

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions