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

Lichee Console 4A #39

Open
geerlingguy opened this issue Mar 22, 2024 · 12 comments
Open

Lichee Console 4A #39

geerlingguy opened this issue Mar 22, 2024 · 12 comments

Comments

@geerlingguy
Copy link
Owner

geerlingguy commented Mar 22, 2024

DSC05443

Basic information

  • Board URL (official): https://sipeed.com/licheepi4a
  • Board purchased from: Review sample provided by Sipeed
  • Board purchase date: January, 2024
  • Board specs (as tested): 16 GB RAM / 128 GB eMMC / TH1520 SoC (4x C910, clocked at 1.5 GHz)
  • Board price (as tested): $429

Linux/system information

# output of `neofetch`
       _,met$$$$$gg.          sipeed@lpi4a12d6 
    ,g$$$$$$$$$$$$$$$P.       ---------------- 
  ,g$$P"     """Y$$.".        OS: Debian GNU/Linux 12 (bookworm) riscv64 
 ,$$P'              `$$$.     Host: T-HEAD Light Lichee Pi 4A configuration for LicheeConsole4A 
',$$P       ,ggs.     `$$b:   Kernel: 5.10.113+ 
`d$$'     ,$P"'   .    $$$    Uptime: 2 mins 
 $$P      d$'     ,    $$P    Packages: 1542 (dpkg) 
 $$:      $$.   -    ,d$$'    Shell: bash 5.2.15 
 $$;      Y$b._   _,d$P'      Resolution: 800x1280 
 Y$$.    `.`"Y$$$$P"'         Terminal: /dev/pts/1 
 `$$b      "-.__              CPU: (4) @ 1.500GHz 
  `Y$$                        Memory: 497MiB / 15613MiB 
   `Y$$.
     `$$b.                                            
       `Y$$b.                                         
          `"Y$b._
              `"""

# output of `uname -a`
Linux lpi4a12d6 5.10.113+ #1 SMP PREEMPT Tue Dec 12 09:20:55 CST 2023 riscv64 GNU/Linux

Benchmark results

CPU

Power

  • Idle power draw (at wall): 7W (sometimes dipping to 5.5W)
  • Maximum simulated power draw (stress-ng --matrix 0): 9.3 W
  • During Geekbench multicore benchmark: 8.5 W
  • During top500 HPL benchmark: 8.5 W

Note: I charged the battery to 100% then ran all the rest of the tests (including idle power measurements) while plugged into the supplied AC adapter. It is tricky to get exact, replicable power measurements on laptop devices, so take these power measurements with a grain of salt.

Disk

128 GB built-in eMMC

Benchmark Result
fio 1M sequential read 268.00 MB/s
iozone 1M random read 209.00 MB/s
iozone 1M random write 199.86 MB/s
iozone 4K random read 16.86 MB/s
iozone 4K random write 19.90 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).

PiBenchmarks.com result (TODO_INSERT_LINK_HERE):

     Category                  Test                      Result      
HDParm                    Disk Read                 264.36 MB/sec            
HDParm                    Cached Disk Read          240.02 MB/sec            
DD                        Disk Write                93.8 MB/s                
FIO                       4k random read            8896 IOPS (35586 KB/s)   
FIO                       4k random write           4452 IOPS (17808 KB/s)   
IOZone                    4k read                   27732 KB/s               
IOZone                    4k write                  21188 KB/s               
IOZone                    4k random read            17029 KB/s               
IOZone                    4k random write           19842 KB/s               

                          Score: 4916                                        

Network

iperf3 results:

Built-in Ethernet

  • iperf3 -c $SERVER_IP: 943 Mbps
  • iperf3 --reverse -c $SERVER_IP: 931 Mbps
  • iperf3 --bidir -c $SERVER_IP: 873 Mbps up, 199 Mbps down

Built-in WiFi

  • iperf3 -c $SERVER_IP: 102 Mbps
  • iperf3 --reverse -c $SERVER_IP: 110 Mbps
  • iperf3 --bidir -c $SERVER_IP: 55 Mbps up, 27 Mbps down

(Be sure to test all interfaces, noting any that are non-functional.)

GPU

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

GLMark2 ES2 Result:

=======================================================
    glmark2 2021.12
=======================================================
    OpenGL Information
    GL_VENDOR:      Imagination Technologies
    GL_RENDERER:    PowerVR B-Series BXM-4-64
    GL_VERSION:     OpenGL ES 3.2 build 1.17@6210866
    Surface Config: buf=32 r=8 g=8 b=8 a=8 depth=24 stencil=8
    Surface Size:   800x600 windowed
=======================================================
[build] use-vbo=false: FPS: 348 FrameTime: 2.874 ms
[build] use-vbo=true: FPS: 868 FrameTime: 1.152 ms
[texture] texture-filter=nearest: FPS: 931 FrameTime: 1.074 ms
[texture] texture-filter=linear: FPS: 918 FrameTime: 1.089 ms
[texture] texture-filter=mipmap: FPS: 918 FrameTime: 1.089 ms
[shading] shading=gouraud: FPS: 774 FrameTime: 1.292 ms
[shading] shading=blinn-phong-inf: FPS: 790 FrameTime: 1.266 ms
[shading] shading=phong: FPS: 680 FrameTime: 1.471 ms
[shading] shading=cel: FPS: 667 FrameTime: 1.499 ms
[bump] bump-render=high-poly: FPS: 474 FrameTime: 2.110 ms
[bump] bump-render=normals: FPS: 954 FrameTime: 1.048 ms
[bump] bump-render=height: FPS: 953 FrameTime: 1.049 ms
[effect2d] kernel=0,1,0;1,-4,1;0,1,0;: FPS: 664 FrameTime: 1.506 ms
[effect2d] kernel=1,1,1,1,1;1,1,1,1,1;1,1,1,1,1;: FPS: 292 FrameTime: 3.425 ms
[pulsar] light=false:quads=5:texture=false: FPS: 945 FrameTime: 1.058 ms
[desktop] blur-radius=5:effect=blur:passes=1:separable=true:windows=4: FPS: 252 FrameTime: 3.968 ms
[desktop] effect=shadow:windows=4: FPS: 432 FrameTime: 2.315 ms
[buffer] columns=200:interleave=false:update-dispersion=0.9:update-fraction=0.5:update-method=map: FPS: 139 FrameTime: 7.194 ms
[buffer] columns=200:interleave=false:update-dispersion=0.9:update-fraction=0.5:update-method=subdata: FPS: 143 FrameTime: 6.993 ms
[buffer] columns=200:interleave=true:update-dispersion=0.9:update-fraction=0.5:update-method=map: FPS: 204 FrameTime: 4.902 ms
[ideas] speed=duration: FPS: 396 FrameTime: 2.525 ms
[jellyfish] <default>: FPS: 383 FrameTime: 2.611 ms
[terrain] <default>: FPS: 41 FrameTime: 24.390 ms
[shadow] <default>: FPS: 391 FrameTime: 2.558 ms
[refract] <default>: FPS: 63 FrameTime: 15.873 ms
[conditionals] fragment-steps=0:vertex-steps=0: FPS: 934 FrameTime: 1.071 ms
[conditionals] fragment-steps=5:vertex-steps=0: FPS: 749 FrameTime: 1.335 ms
[conditionals] fragment-steps=0:vertex-steps=5: FPS: 955 FrameTime: 1.047 ms
[function] fragment-complexity=low:fragment-steps=5: FPS: 842 FrameTime: 1.188 ms
[function] fragment-complexity=medium:fragment-steps=5: FPS: 635 FrameTime: 1.575 ms
[loop] fragment-loop=false:fragment-steps=5:vertex-steps=5: FPS: 862 FrameTime: 1.160 ms
[loop] fragment-steps=5:fragment-uniform=false:vertex-steps=5: FPS: 863 FrameTime: 1.159 ms
[loop] fragment-steps=5:fragment-uniform=true:vertex-steps=5: FPS: 826 FrameTime: 1.211 ms
=======================================================
                                  glmark2 Score: 614 
=======================================================

The power consumption on the device jumped to 9.1W during the OpenGL tests. A tiny bit higher than the average CPU consumption during Geekbench tests.

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                                     :   3141.5 MB/s
 C copy backwards (32 byte blocks)                    :   1359.6 MB/s (1.1%)
 C copy backwards (64 byte blocks)                    :   1339.0 MB/s (0.2%)
 C copy                                               :   3214.8 MB/s
 C copy prefetched (32 bytes step)                    :   3227.4 MB/s
 C copy prefetched (64 bytes step)                    :   3229.1 MB/s
 C 2-pass copy                                        :   2758.9 MB/s (0.1%)
 C 2-pass copy prefetched (32 bytes step)             :   2712.3 MB/s
 C 2-pass copy prefetched (64 bytes step)             :   2702.4 MB/s (0.2%)
 C fill                                               :  11232.6 MB/s
 C fill (shuffle within 16 byte blocks)               :  11228.5 MB/s (0.7%)
 C fill (shuffle within 32 byte blocks)               :   1592.7 MB/s (0.2%)
 C fill (shuffle within 64 byte blocks)               :   1592.2 MB/s
 ---
 standard memcpy                                      :   3216.6 MB/s
 standard memset                                      :  11227.0 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
      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 :    0.1 ns          /     0.1 ns 
    131072 :   17.3 ns          /    26.3 ns 
    262144 :   26.1 ns          /    34.1 ns 
    524288 :   32.4 ns          /    39.0 ns 
   1048576 :   49.0 ns          /    61.9 ns 
   2097152 :   97.0 ns          /   131.3 ns 
   4194304 :  123.3 ns          /   153.5 ns 
   8388608 :  147.7 ns          /   181.1 ns 
  16777216 :  165.3 ns          /   203.4 ns 
  33554432 :  180.7 ns          /   227.0 ns 
  67108864 :  194.6 ns          /   250.8 ns 

sbc-bench results

Run sbc-bench and paste a link to the results here: https://sprunge.us/fUCnrY

Phoronix Test Suite

Results from pi-general-benchmark.sh:

  • pts/encode-mp3: TODO sec (could not install)
  • pts/x264 4K: TODO fps (could not install)
  • pts/x264 1080p: TODO fps (could not install)
  • pts/phpbench: 58398
  • pts/build-linux-kernel (defconfig): 5216.318 sec
@geerlingguy
Copy link
Owner Author

Reading through the Lichee Console 4A Wiki, there are a few important notes:

  • The AliExpress listing shows the SoC running at 1.8 GHz, but the Wiki says "For the sake of Console battery life and heat generation, the current upper limit of the CPU frequency of the default image is limited to 1.5GHz." (under the 'Battery Life' section).
  • The Wiki says "It can be powered by 12V DC 3.5mm interface or 5V USB-C port." — however many reviews mentioned they couldn't get USB-C charging to work.
  • The GPU on the SoC is the "IMG™ B Series BXM-4-64" — I know there was some work towards making the open source driver available in Linux, not sure how far along that is.

@geerlingguy
Copy link
Owner Author

Charging is interesting—it seems like the circuit is somewhat simple, loading up the battery at the beginning and exponentially decaying over time. The unit got quite hot right after I plugged it in, which is a little alarming as I tend to trust these devkit-style devices less when it comes to thermals...

charging 23w peak

@geerlingguy
Copy link
Owner Author

geerlingguy commented Mar 23, 2024

As with Milk-V Mars CM (see #22), some of the Phoronix test suites are failing:

Phoronix Test Suite v10.8.4

    Installed:     pts/timed-audio-encode-1.0.1
    To Install:    pts/encode-mp3-1.7.4

    Determining File Requirements ..................................................................................
    Searching Download Caches ......................................................................................

    1 Test To Install
        5MB Of Disk Space Is Needed
        5 Seconds Estimated Install Time

    pts/encode-mp3-1.7.4:
        Test Installation 1 of 1
        1 File Needed [1.45 MB / 1 Minute]
        File Found: lame-3.100.tar.gz                                                                       [1.45MB]
        Approximate Install Size: 5 MB
        Estimated Install Time: 5 Seconds
        Installing Test @ 02:15:47
            The installer exited with a non-zero exit status.
            ERROR: cannot guess build type; you must specify one
            LOG: /var/lib/phoronix-test-suite/installed-tests/pts/encode-mp3-1.7.4/install-failed.log

Not sure if the test suite has a risc-v option available; it works on x86 and arm64 at least.

Opened issue to check into it here: phoronix-test-suite/test-profiles#306

Similarly, x264 install fails:

Phoronix Test Suite v10.8.4

    To Install:    pts/x264-2.7.0

    Determining File Requirements ..................................................................................
    Searching Download Caches ......................................................................................

    1 Test To Install
        2600MB Of Disk Space Is Needed
        18 Minutes, 42 Seconds Estimated Install Time

    pts/x264-2.7.0:
        Test Installation 1 of 1
        3 Files Needed [3321 MB / 7 Minutes]
        File Found: x264-git-20220222.tar.bz2                                                               [0.74MB]
        File Found: Bosphorus_1920x1080_120fps_420_8bit_YUV_Y4M.7z                                           [646MB]
        File Found: Bosphorus_3840x2160_120fps_420_8bit_YUV_Y4M.7z                                          [2675MB]
        Approximate Install Size: 2600 MB
        Estimated Install Time: 18 Minutes, 42 Seconds
        Installing Test @ 02:16:03
            The installer exited with a non-zero exit status.
            ERROR: Makefile:3: config.mak: No such file or directory
            LOG: /var/lib/phoronix-test-suite/installed-tests/pts/x264-2.7.0/install-failed.log

@geerlingguy
Copy link
Owner Author

In terms of games:

  • supertuxkart: it's competent at supertuxkart, getting 30-40 fps at 1024x768 resolution. For some reason I was unable to switch resolutions or play full screen—any time I tried, it quit out of the game. I had to play with no blur or vsync, but it was perfectly playable on the keyboard since it's a keyboard-only game.
  • dsda-doom: Classic Doom but with freedoom resources, if I try OpenGL rendering, it crashes, but software rendering works a treat. It worked in all resolutions, and plays well—excepting the atrocious RedPoint control; it was excruciating trying to use that as a mouse. Better to plug in an external mouse if you want to frag some enemies.

geerlingguy added a commit that referenced this issue Mar 24, 2024
@Zepan
Copy link

Zepan commented Mar 25, 2024

If you want run some software with OpenGL, please try switch first: sudo switch-gl gl4es
USB-C charging: It not support PD fast chraging, only can be charging with normal 5V2A (this feature is added temporarily, so it is not perfect)
Sometimes (rarely) keyboard not responding, you can try press Pow+Z to restart keyboard.
Temporarily, do not apt upgrade, it will upgrade the kernel and case boot error(upstream is debugging the sleep mode, buggy now...)

@geerlingguy
Copy link
Owner Author

@Zepan - Thanks! I definitely skipped running any apt upgrades — I know for earlier hardware, it can be a bit hit or miss what packages might not yet be fully validated, so I generally run all my tests with what ships initially.

Good to know on the USB-C charging, I'll test 2A charging and confirm that's working okay.

@geerlingguy
Copy link
Owner Author

I can confirm if I plug in USB-C power, it seems to be charging the battery off there, pulling around 2.4A at 5V with the Raspberry Pi USB-C charger. I noticed it doesn't seem to charge while the power on the device is off. It lit up the little blue LED and pulled down 2.4A momentarily, but then stopped. It only pulled any power through USB-C while powered on.

The other charger seemed to be able to charge even while the device is powered off.

@geerlingguy
Copy link
Owner Author

With the 12v 2A AC adapter, it puts out 28W while the device is running and charging the battery (from about 70%), and then around 20W while the device is powered off. So it looks like it'll run off the wall wart while charging the battery, adding on that extra 8W or so.

@Zepan - for USB-C, is it supposed to charge the battery while powered off? I know a few other people said "USB-C charging doesn't work", but maybe it works while powered on, but not powered off?

@geerlingguy
Copy link
Owner Author

Screenshot 2024-03-25 at 2 11 15 PM

I tried installing a SKhynix 2242 256 GB NVMe SSD in the expansion slot on the bottom, but unfortunately (a) it was very difficult to install, as it is fairly deep in the case, and the WiFi antenna cable interfered with the install, and (b) I couldn't get it seated perfectly, as there was a screw pillar inside just barely touching the side of the SSD as I inserted it.

I booted it up anyway, since I could get it about 90% of the way in the slot, but it didn't enumerate on the PCIe bus nor show up in lsblk:

sipeed@lpi4a12d6:~$ lsblk
NAME         MAJ:MIN RM   SIZE RO TYPE MOUNTPOINTS
mmcblk0      179:0    0 116.5G  0 disk 
├─mmcblk0p1  179:1    0     2M  0 part 
├─mmcblk0p2  179:2    0   500M  0 part /boot
└─mmcblk0p3  179:3    0   116G  0 part /
mmcblk0boot0 179:8    0     4M  1 disk 
mmcblk0boot1 179:16   0     4M  1 disk 
sipeed@lpi4a12d6:~$ lspci
sipeed@lpi4a12d6:~$ sudo lspci -vvvv

I then tried to take off the bottom, to see if I could make it fit better without the bottom cover in place, but four of the six bottom cover screws were stripped already. I hadn't attempted to use them before, so this was how they came from the factory—one was completely rounded out, and three were rounded out enough I couldn't get any purchase from any of my precision drivers (I was just barely twisting them, with no pressure, and the driver would just spin).

Untitled-1

I've heard other reviewers have trouble with the soft screw heads too (example), but mine were pre-stripped out of the box :(

I'll have to see if I can find a screw extractor bit small enough for these tiny screws, or mangle them up with my Dremel maybe :/

@geerlingguy
Copy link
Owner Author

My screw extractor set has bits far too large for these tiny screws, so I bought this Moody 6-piece set on Amazon, and I'll see if I can get enough purchase to pull out the screws. I'll have to dig around to find replacement screws—these guys are quite small!

@geerlingguy
Copy link
Owner Author

I was testing Bluetooth... and it didn't seem to initialize the Bluetooth adapter. I get an error from blueman-manager:

Connection to BlueZ failed

Bluez daemon is not running, blueman-manager cannot continue.
This probably means that there were no Bluetooth adapters detected or Bluetooth daemon was not started.

hcitool dev returns no Devices, and hciconfig -a returns nothing.

I started the bluetooth service (sudo systemctl start bluetooth), and that seemed to go okay, with no warnings in dmesg, but when I opened Bluetooth Adapters or Bluetooth Manager they'd just briefly start to draw the window then crash out.

@geerlingguy
Copy link
Owner Author

New video: https://www.youtube.com/watch?v=8qDGV6LTOnk

I also got the tiny screw extraction set, so hopefully I can get inside today...

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

2 participants