Skip to content

Raspberry Pi4 - USB3

RaspberryPi
  • Ich hatte ja vor ein paar Tagen mal folgenden Test gemacht. ROCKPro64 - USB3

    Dann machen wir das mal auf dem RPi4. Ok, das System (Debian Buster Desktop) liegt auf einer SD-Karte, die Daten werden auf den USB3.1 Stick geschrieben. Somit haben wir Stress auf der LAN-Schnittstelle und viele Daten auf dem USB3-Port.

    Linux raspberrypi 4.19.50-v7l+ #895 SMP Thu Jun 20 16:03:42 BST 2019 armv7l
    

    6fb67813-50c9-4f57-a84b-334c02b14f76-grafik.png

    Zur Erinnerung das Ergebnis vom ROCKPro64

    rock64@rp64v_2_1_NAS:~$ scp -r root@192.168.3.243:/mnt/nas/Videos/"Star_Wars" /home/rock64/
    root@192.168.3.243's password: 
    Star_Wars_I.ts                       100% 6753MB  83.7MB/s   01:20    
    Star_Wars_IV.ts                      100% 7668MB  83.5MB/s   01:31    
    Star_Wars_VI.ts                      100% 7871MB  83.4MB/s   01:34    
    Star_Wars_V.ts                       100% 7409MB  83.3MB/s   01:28    
    Star_Wars_III.ts                     100% 7169MB  83.0MB/s   01:26    
    Star_Wars_II.ts                      100% 6268MB  83.3MB/s   01:15
    

    Und hier das Ergebnis vom RPi4

    root@192.168.3.243's password: 
    Star_Wars_I.ts         100% 6753MB  42.0MB/s   02:40    
    Star_Wars_IV.ts        100% 7668MB  41.5MB/s   03:04    
    Star_Wars_VI.ts        100% 7871MB  40.3MB/s   03:15    
    Star_Wars_V.ts         100% 7409MB  39.2MB/s   03:09    
    Star_Wars_III.ts       100% 7169MB  37.8MB/s   03:09    
    Star_Wars_II.ts        100% 6268MB  38.1MB/s   02:44   
    

    Auf dem RPI4 taucht auf dem Bildschirm immer dieses Thermometer auf. Der RPI4 dürfte also ganz schon ins Schwitzen kommen und wird deshalb auch runter takten. Ein gut funktionierendes NAS sieht für mich anders aus 😞

    c459e082-e4c5-4759-a7db-d18d9629b9d6-grafik.png

    Aber, wir sind hier softwaremäßig mit Sicherheit noch am Anfang, da wird noch mehr passieren. Aber bei einem bin ich mir jetzt schon ziemlich sicher, das Ding muss vernünftig gekühlt werden. Auf der Platine wird alles ziemlich heftig warm.

    Die kopierten Videos laufen einwandfrei 🙂 bei ca. 6,5 Watt Stromverbrauch.

    IMG_20190628_185709_ergebnis.jpg

  • Mit einer Samsung T5 500GB bekomme ich folgendes Ergebnis

    pi@raspberrypi:/mnt $ sudo dd if=/dev/zero of=sd.img bs=1M count=4096 conv=fdatasync
    4096+0 Datensätze ein
    4096+0 Datensätze aus
    4294967296 bytes (4,3 GB, 4,0 GiB) copied, 19,872 s, 216 MB/s
    

    Zum Vergleich, auf einem ROCKPro64

    rock64@rockpro64:/mnt$ sudo dd if=/dev/zero of=sd.img bs=1M count=4096 conv=fdatasync
    4096+0 records in
    4096+0 records out
    4294967296 bytes (4.3 GB, 4.0 GiB) copied, 11.8257 s, 363 MB/s
    

    Da fehlt aber noch ein wenig!? 😟

  • Um die Perfomance von USB-Laufwerken zu testen, nutzt man iozone. Das läßt sich aber unter dem Raspbian nicht installieren. Paket nicht vorhanden 😞

    Hier auf der Webseite wird erklärt, wie man das selber baut. Aber da sind ein paar Typos drin.

    File runterladen

    pi@raspberrypi:~ $ wget http://www.iozone.org/src/current/iozone3_487.tar
    --2019-06-30 08:57:41--  http://www.iozone.org/src/current/iozone3_487.tar
    Auflösen des Hostnamens www.iozone.org (www.iozone.org)… 208.45.140.198
    Verbindungsaufbau zu www.iozone.org (www.iozone.org)|208.45.140.198|:80 … verbunden.
    HTTP-Anforderung gesendet, auf Antwort wird gewartet … 200 OK
    Länge: 1873920 (1,8M) [application/x-tar]
    Wird in »iozone3_487.tar« gespeichert.
    
    iozone3_487.tar           100%[====================================>]   1,79M  1,02MB/s    in 1,8s    
    
    2019-06-30 08:57:48 (1,02 MB/s) - »iozone3_487.tar« gespeichert [1873920/1873920]
    

    File auspacken

    pi@raspberrypi:~ $ tar xvf iozone3_487.tar
    iozone3_487/src/current/Changes.txt
    iozone3_487/src/current/iozone.c
    iozone3_487/src/current/report.pl
    iozone3_487/src/current/fileop.c
    iozone3_487/src/current/pit_server.c
    iozone3_487/docs/iozone.1
    iozone3_487/src/current/Android.mk
    iozone3_487/src/current/Android_Readme.md
    iozone3_487/src/current/Application.mk
    iozone3_487/src/current/makefile
    iozone3_487/src/current/libasync.c
    iozone3_487/src/current/libbif.c
    iozone3_487/src/current/gnuplot.dem
    iozone3_487/src/current/gengnuplot.sh
    iozone3_487/src/current/Generate_Graphs
    iozone3_487/src/current/iozone_visualizer.pl
    iozone3_487/src/current/gnu3d.dem
    iozone3_487/src/current/Gnuplot.txt
    iozone3_487/src/current/gnuplotps.dem
    iozone3_487/src/current/read_telemetry
    iozone3_487/src/current/write_telemetry
    iozone3_487/src/current/client_list
    iozone3_487/src/current/spec.in
    iozone3_487/docs/IOzone_msword_98.pdf
    iozone3_487/docs/Run_rules.doc
    iozone3_487/docs/IOzone_msword_98.doc
    iozone3_487/docs/Iozone_ps.gz
    

    iozone bauen

    pi@raspberrypi:~ $ cd iozone3_487/src/current/
    pi@raspberrypi:~/iozone3_487/src/current $ make -j4 linux-arm
    cc    -c -o libbif.o libbif.c
    
    cc    -c -o libasync.o libasync.c
    Building iozone for Linux-arm
    
    
    Building fileop for Linux-arm
    cc -c -O3 -Dunix -DHAVE_ANSIC_C -DASYNC_IO -DHAVE_PREAD \
    	-DNAME='"linux-arm"' -DLINUX_ARM -DSHARED_MEM \
    	-Dlinux -D_LARGEFILE64_SOURCE  iozone.c \
    	-o iozone_linux-arm.o
    
    gcc -Wall -c -O3  fileop.c -o fileop_linux-arm.o
    libbif.c:205:1: warning: return type defaults to ‘int’ [-Wimplicit-int]
     create_xls(name)
     ^~~~~~~~~~
    libbif.c:230:1: warning: return type defaults to ‘int’ [-Wimplicit-int]
     do_header(fd)
     ^~~~~~~~~
    libbif.c:230:1: warning: conflicting types for ‘do_header’
    libbif.c:172:6: note: previous declaration of ‘do_header’ was here
     void do_header();
          ^~~~~~~~~
    libbif.c:254:1: warning: return type defaults to ‘int’ [-Wimplicit-int]
     do_int(fd,val,row,column)
     ^~~~~~
    libbif.c:254:1: warning: conflicting types for ‘do_int’
    libbif.c:173:6: note: previous declaration of ‘do_int’ was here
     void do_int();
          ^~~~~~
    libbif.c:290:1: warning: return type defaults to ‘int’ [-Wimplicit-int]
     do_float(fd, value, row, column)
     ^~~~~~~~
    libbif.c:290:1: warning: conflicting types for ‘do_float’
    libbif.c:174:6: note: previous declaration of ‘do_float’ was here
     void do_float();
          ^~~~~~~~
    libbif.c:373:1: warning: return type defaults to ‘int’ [-Wimplicit-int]
     do_label(fd, string, row, column)
     ^~~~~~~~
    libbif.c:373:1: warning: conflicting types for ‘do_label’
    libbif.c:175:6: note: previous declaration of ‘do_label’ was here
     void do_label();
          ^~~~~~~~
    libbif.c:416:1: warning: return type defaults to ‘int’ [-Wimplicit-int]
     do_eof(fd)
     ^~~~~~
    libbif.c:416:1: warning: conflicting types for ‘do_eof’
    libbif.c:176:6: note: previous declaration of ‘do_eof’ was here
     void do_eof();
          ^~~~~~
    libasync.c: In function ‘end_async’:
    libasync.c:299:2: warning: implicit declaration of function ‘del_cache’; did you mean ‘incache’? [-Wimplicit-function-declaration]
      del_cache(gc);
      ^~~~~~~~~
      incache
    libasync.c: In function ‘async_read’:
    libasync.c:427:3: warning: implicit declaration of function ‘takeoff_cache’; did you mean ‘alloc_cache’? [-Wimplicit-function-declaration]
       takeoff_cache(gc,ce);
       ^~~~~~~~~~~~~
       alloc_cache
    libasync.c: At top level:
    libasync.c:603:1: warning: conflicting types for ‘takeoff_cache’
     takeoff_cache(struct cache *gc, struct cache_ent *ce)
     ^~~~~~~~~~~~~
    libasync.c:427:3: note: previous implicit declaration of ‘takeoff_cache’ was here
       takeoff_cache(gc,ce);
       ^~~~~~~~~~~~~
    libasync.c:677:1: warning: conflicting types for ‘del_cache’
     del_cache(gc)
     ^~~~~~~~~
    libasync.c:299:2: note: previous implicit declaration of ‘del_cache’ was here
      del_cache(gc);
      ^~~~~~~~~
    libasync.c: In function ‘async_read_no_copy’:
    libasync.c:765:3: warning: implicit declaration of function ‘putoninuse’ [-Wimplicit-function-declaration]
       putoninuse(gc,ce);
       ^~~~~~~~~~
    libasync.c: In function ‘async_release’:
    libasync.c:870:2: warning: implicit declaration of function ‘takeoffinuse’; did you mean ‘takeoff_cache’? [-Wimplicit-function-declaration]
      takeoffinuse(gc);
      ^~~~~~~~~~~~
      takeoff_cache
    libasync.c: At top level:
    libasync.c:884:1: warning: conflicting types for ‘putoninuse’
     putoninuse(gc,entry)
     ^~~~~~~~~~
    libasync.c:765:3: note: previous implicit declaration of ‘putoninuse’ was here
       putoninuse(gc,ce);
       ^~~~~~~~~~
    libasync.c:905:1: warning: conflicting types for ‘takeoffinuse’
     takeoffinuse(gc)
     ^~~~~~~~~~~~
    libasync.c:870:2: note: previous implicit declaration of ‘takeoffinuse’ was here
      takeoffinuse(gc);
      ^~~~~~~~~~~~
    
    Building the pit_server
    
    cc -c   pit_server.c  -o pit_server.o 
    cc -c -O3 -Dunix -DHAVE_ANSIC_C -DASYNC_IO -D_LARGEFILE64_SOURCE \
    	-DSHARED_MEM -Dlinux  libbif.c -o libbif.o
    cc -c -O3 -Dunix -Dlinux -DHAVE_ANSIC_C -DASYNC_IO \
    	-D_LARGEFILE64_SOURCE  libasync.c  -o libasync.o
    cc -O3  iozone_linux-arm.o libbif.o libasync.o \
    	-lrt -lpthread -o iozone
    cc -O3 -Dlinux fileop_linux-arm.o -o fileop
    cc -O3 -Dlinux pit_server.o -o pit_server
    

    iozone kopieren

    sudo cp iozone /usr/local/bin
    

    Test meiner Samsung T5 mit 500GB

    pi@raspberrypi:~ $ iozone -e -I -a -s 100M -r 4k -r 16k -r 512k -r 1024k -r 16384k -i 0 -i 1 -i 2
    	Iozone: Performance Test of File I/O
    	        Version $Revision: 3.487 $
    		Compiled for 32 bit mode.
    		Build: linux-arm 
    
    	Contributors:William Norcott, Don Capps, Isom Crawford, Kirby Collins
    	             Al Slater, Scott Rhine, Mike Wisner, Ken Goss
    	             Steve Landherr, Brad Smith, Mark Kelly, Dr. Alain CYR,
    	             Randy Dunlap, Mark Montague, Dan Million, Gavin Brebner,
    	             Jean-Marc Zucconi, Jeff Blomberg, Benny Halevy, Dave Boone,
    	             Erik Habbinga, Kris Strecker, Walter Wong, Joshua Root,
    	             Fabrice Bacchella, Zhenghua Xue, Qin Li, Darren Sawyer,
    	             Vangel Bojaxhi, Ben England, Vikentsi Lapa,
    	             Alexey Skidanov, Sudhir Kumar.
    
    	Run began: Sun Jun 30 09:02:03 2019
    
    	Include fsync in write timing
    	O_DIRECT feature enabled
    	Auto Mode
    	File size set to 102400 kB
    	Record Size 4 kB
    	Record Size 16 kB
    	Record Size 512 kB
    	Record Size 1024 kB
    	Record Size 16384 kB
    	Command line used: iozone -e -I -a -s 100M -r 4k -r 16k -r 512k -r 1024k -r 16384k -i 0 -i 1 -i 2
    	Output is in kBytes/sec
    	Time Resolution = 0.000001 seconds.
    	Processor cache size set to 1024 kBytes.
    	Processor cache line size set to 32 bytes.
    	File stride size set to 17 * record size.
                                                                  random    random     bkwd    record    stride                                    
                  kB  reclen    write  rewrite    read    reread    read     write     read   rewrite      read   fwrite frewrite    fread  freread
              102400       4    26845    34021    33388    33303    18822    33148                                                                
              102400      16    84330   102525    86757    89905    58202    96487                                                                
              102400     512   201247   155920   144046   144036   141239   149121                                                                
              102400    1024   232917   243315   239391   267603   242457   248111                                                                
              102400   16384   200792   199172   146421   131353   133374   203319                                                                
    
    iozone test complete.
    

    Das Ergebnis ist immer noch bescheiden.

  • Zu iozone: https://www.cnx-software.com/2019/06/24/raspberry-pi-4-benchmarks-mini-review/#comment-563977

    Weiter unten steht dann auch, was am Anfang bzgl. Storage möglich war. Das ist mit dem Update für den VIA Host-Controller dann den Bach hinuntergegangen, dafür überhitzte das Ding dann nicht mehr so stark.

    Man kann das Update rückgängig machen aber Raspbian will dann dauernd den Controller erneut auf die lahme Version flachen. Und wenn man das Ganze schön performant als NAS haben will, muß man sich noch um IRQ Affinity kümmern, wie ich das bis letztes Jahr noch bei Armbian für jedes Board gemacht habe (also PCIe- und Ethernet-IRQs auf eine andere CPU als cpu0 legen).