Skip to content

ROCKPro64 - Armbian nand-sata-install

Verschoben Armbian
  • Was ist nand-sata-install ? Das ist ein Script um Armbian auf einer SATA-HDD, USB-HDD oder NVMe-SSD zu installieren. Heute schau ich mir das mal an, als SD-Version. Das geht auch mit dem SPI-Flash, das folgt später. Auf gehts... 🙂

    Als erstes setze ich voraus, das es eine Partition auf der NVMe-Platte gibt. Wenn nicht kurz eine erzeugen, ich gehe hier nicht näher drauf ein, das Wissen setze ich voraus, ansonsten...

    sudo fdisk /dev/nvme0n1
    

    Dann

    sudo /usr/sbin/nand-sata-install
    

    Hier kann man auswählen, ob der ROCKPro64 von der SD-Karte oder vom SPI booten soll. Wer jetzt mit SPI nichts anfangen kann, der liest hier mal bitte eben nach. In Kurzform, ein spezieller Speicherbereich auf dem Board, so ähnlich wie das BIOS in Eurem Rechner.

    ede5da3a-cb0d-467f-b9b7-c7c4c0cc247a-grafik.png

    Platte auswählen

    ca51a0cb-b370-49bf-afa9-557481e31424-grafik.png

    Schöne Warnung 🙂

    69216616-19e2-4660-a5de-e4aa98a5ff1d-grafik.png

    Dateisystem aussuchen, ich habe ext4 gewählt.

    52e0d8d2-cadd-4a7e-8a55-abe8e2d2e0ff-grafik.png

    Dann fängt das Script an zu arbeiten.

    0ff99f93-6151-4499-ad3f-adebe6a5bf86-grafik.png

    Fertig!

    a3a9aaf7-c2ab-417d-8758-dcb95b1614c6-grafik.png

    Nach dem reboot, schauen wir mal nach, ob es geklappt hat.

    frank@rockpro64:~$ df -h
    Filesystem      Size  Used Avail Use% Mounted on
    udev            994M     0  994M   0% /dev
    tmpfs           200M  3.0M  197M   2% /run
    /dev/nvme0n1p1  229G  1.2G  216G   1% /
    tmpfs           996M     0  996M   0% /dev/shm
    tmpfs           5.0M  4.0K  5.0M   1% /run/lock
    tmpfs           996M     0  996M   0% /sys/fs/cgroup
    tmpfs           996M  4.0K  996M   1% /tmp
    /dev/mmcblk0p1   15G  1.1G   14G   8% /media/mmcboot
    /dev/zram0       49M  2.7M   43M   6% /var/log
    tmpfs           200M     0  200M   0% /run/user/1000
    

    Unter /etc/fstab sieht man, das die Bootpartition der SD-Karte eingehangen ist.

    # <file system>                                 <mount point>   <type>  <options>                                                       <dump>  <pass>
      tmpfs                                           /tmp            tmpfs   defaults,nosuid                                                 0       0
      UUID=d586ed3c-f09c-4ef8-b402-13c7ceb007d3       /media/mmcboot  ext4    defaults,noatime,nodiratime,commit=600,errors=remount-ro,x-gvfs-hide    0       1
      /media/mmcboot/boot                             /boot           none    bind                                                            0       0
      UUID=a055577c-cf2b-4278-8062-163fcdd5de25       /               ext4    defaults,noatime,nodiratime,commit=600,errors=remount-ro,x-gvfs-hide    0       1
    

    Das sieht doch sehr schön aus. Für Einsteiger eine tolle Sache, aber auch für erfahrene Benutzer, die sind ja meistens Tippfaul 😉

    Dran denken, Armbian ist noch in einem sehr frühen Stadium. Nicht unbedingt zu empfehlen für produktive Sachen. Ich bin mir aber sicher, das das Team das sehr schnell ändern wird. Und ich freue mich, wenn es eine Alternative gibt, weil von Kamil hört und liest man schon seit Wochen nichts mehr 😞

    Weitere Tests mit dem Script folgen...

  • Das Script ausprobiert mit einer USB-SSD

    SPI und USB-SSD

    Das Filesystem / wird nicht resized

    root@rockpro64:~# df -h
    Filesystem      Size  Used Avail Use% Mounted on
    udev            994M     0  994M   0% /dev
    tmpfs           200M  3.0M  197M   2% /run
    /dev/sda1       1.2G  1.1G   26M  98% /
    tmpfs           996M     0  996M   0% /dev/shm
    tmpfs           5.0M  4.0K  5.0M   1% /run/lock
    tmpfs           996M     0  996M   0% /sys/fs/cgroup
    tmpfs           996M  4.0K  996M   1% /tmp
    /dev/zram0       49M  2.1M   43M   5% /var/log
    tmpfs           200M     0  200M   0% /run/user/0
    

    Bootet von USB2, von USB3 nicht!

    SD-Karte und USB-SSD

    Das Filesystem / wird nicht resized

    root@rockpro64:~# df -h
    Filesystem      Size  Used Avail Use% Mounted on
    udev            994M     0  994M   0% /dev
    tmpfs           200M  5.5M  194M   3% /run
    /dev/sda1       1.2G  1.1G   25M  98% /
    tmpfs           996M     0  996M   0% /dev/shm
    tmpfs           5.0M  4.0K  5.0M   1% /run/lock
    tmpfs           996M     0  996M   0% /sys/fs/cgroup
    tmpfs           996M  4.0K  996M   1% /tmp
    /dev/mmcblk0p1   58G  1.1G   57G   2% /media/mmcboot
    /dev/zram0       49M  2.9M   43M   7% /var/log
    tmpfs           200M     0  200M   0% /run/user/0
    

    Bootet von USB und USB3. Startet auch nach erneutem Reboot!

    Geschwindigkeit der SSD

    root@rockpro64:~# 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, 38.3928 s, 112 MB/s
    

    Das sieht immer noch nicht nach voller USB3 Geschwindigkeit aus. Liegt aber evt. auch an der SSD, muss ich mal gegenchecken.

  • Das Resize Problem könnt ihr natürlich ganz einfach lösen, indem ihr die Platte an einen anderen PC hängt und mit gparted die Partition vergrößert. Das ist ja kein Hexenwerk. Wäre aber einfach bequemer wenn das Script funktionieren würde.

  • Eine Installation SPI/NVMe hängt sich irgendwann immer auf. Zweimal getestet.

    Macht in meinen Augen auch gar keinen Sinn, da der aktuelle u-boot nur von USB booten kann, so weit mir das bekannt ist.
    Die SATA-Option macht dann im Moment auch keinen Sinn (SPI/SATA), aus demselben Grund.

    Was aktuell geht

    • SD-Karte/USB
    • SD-Karte/NVMe
    • SD-Karte/SATA (sollte gehen, nicht getestet)
    • SPI/USB

    Ich gehe davon aus, das man das Menü schon mal für einen neuen u-boot angepasst hat!??

  • @FrankM

    Was für "Resize Problem"? Die Partition hat der User nach seinem Gusto zu erzeugen (bewußt und abwägend), nand-sata-install faßt da nix an. Automatischer Partition-Resize findet nur bei der Ersteinrichtung statt, weil hier davon ausgegangen wird, dass das Image, das zur Build-Zeit auf ein Mindestmaß geschrumpft wurde, sich auf der ganzen SD-Karte ausbreiten soll und dort eh niemand bereits Partitionen angelegt haben kann.

    Wenn man die Installation später irgendwohin mit nand-sata-install transferieren will, dann überlegt man sich ja vorher, was passieren soll, bspw. dass man die OS-Partition nur paar GB groß macht, weil dahinter Datenpartitionen zu liegen kommen sollen. Selbstverständlich wird nand-sata-install niemals in die bewußte Partitionierung, die der User vorgenommen hat, reinfummeln!

  • @FrankM sagte in ROCKPro64 - Armbian nand-sata-install:

    Ich gehe davon aus, das man das Menü schon mal für einen neuen u-boot angepasst hat!??

    Nö, nand-sata-install ist einfach ein furchtbares Stück Software, was man ja schon an dem beknackten Namen merkt. Das ist ein Quick&Dirty-Skript aus Allwinner A20 Zeiten (drum geht's da um NAND und SATA), das zudem nix installiert sondern Installationen nur transferiert.

    Jedes mal, wenn ich an diesen fürchterlichen Code hingelangt habe, um irgendwas zu fixen oder bspw. NVMe-Support nachzurüsten, hab ich Kopfweh gekriegt. Die einzige Chance, das Ding je in einen besseren Zustand zu bekommen, ist es wegzuschmeißen und von vorne zu beginnen und dabei den ganzen Legacy-Quatsch wie NAND-Support über Bord zu werfen.

    Dann kann man auch eine eindeutige Zielmatrix definieren mit boot-root-Kombinationen, die dann auch hundertpro funktionieren.

  • @tkaiser Wenn ich eine Installation auf NVMe mache wird die Rootpartition auf die exakte Größe gebracht. Wenn ich das ganze auf eine USB-SSD mache ist die Rootpartition zu klein - siehe oben.

    Kein großes Problem, ich habe ja den unerfahrenen Usern einen Lösungsansatz präsentiert.

  • @tkaiser Irgendwo hatte ich gestern genau das im Armbian-Forum gelesen, das das Script total vermüllt ist. Danke für die Info. Wollen wir hoffen, das es jemanden gibt der sich der Sache annimmt.

    Du scheinst ja nicht mehr so aktiv da zu sein 😉

  • @FrankM sagte in ROCKPro64 - Armbian nand-sata-install:

    @tkaiser Wenn ich eine Installation auf NVMe mache wird die Rootpartition auf die exakte Größe gebracht. Wenn ich das ganze auf eine USB-SSD mache ist die Rootpartition zu klein - siehe oben.

    Wie schon gesagt. Partitionen werden NICHT angefaßt, die mußt Du vorher bzw. selbst erstellen und wenn Du die hier zu klein und da ausreichend anlegst, dann ist das immer noch Deine ganz eigenen Entscheidung.

    Automatisch partitioniert wird nur auf eMMC. Bei USB, SATA und NVMe gibt es eine Warnung und Aufruf von gdisk wenn nicht mindestens eine Partition existiert oder es wird halt die erste schon existente genommen.

    Das ist nichts, worüber irgendeine Diskussion nötig ist, denn den Code kannst Du ja einsehen: https://github.com/armbian/build/blob/master/packages/bsp/common/usr/sbin/nand-sata-install#L453-L478 (nix Partition erstellen, der gdisk-Aufruf befindet sich eine Funktion drunter 🙂 )

  • @FrankM sagte in ROCKPro64 - Armbian nand-sata-install:

    Du scheinst ja nicht mehr so aktiv da zu sein

    Naja, ich nutze keine Foren, in denen Moderatoren, die nicht wirklich einen Plan haben, ihre Privilegien mißbrauchen, um Beiträge, die sie nicht ansatzweise verstehen, zu zensieren.

    Geschehen am 3.10.2018 im Armbian-Forum und seitdem ist das Forum für mich gestorben. Warum soll ich irgendwo Zeugs schreiben, wenn es dann von irgendwem gelöscht oder sonstwie zensiert wird?

  • @FrankM sagte in ROCKPro64 - Armbian nand-sata-install:

    sudo fdisk /dev/nvme0n1

    Würde ich durch gdisk ersetzen, einfach weil es fast 2019 ist und gdisk das modernere Ding ist, das nicht mehr auf so Schwachsinn wie den MBR und das kranke CHS-Adressing aufsetzt sondern GPT nutzt und sich angeblich auch auf NVMe SSDs ums korrekte Partition Aligment kümmert (das für sowohl Performance als auch bzgl. vorzeitiger Abnudelung von Flash-Speicher eminent wichtig ist).

    fdisk war toll im letzten Jahrhundert, als wir noch nix anderes hatten. Heute würde ich immer zum Nachfolger greifen (gdisk heißt ausgeschrieben GPT fdisk).

  • @tkaiser Ich habe auch jahrelang ein großes Forum betreut und weiß sehr gut wie viel manche Menschen alleine zwischen den Zeilen lesen können, obwohl da gar nichts steht 🙂 Aber sehr schade für Armbian. Aber hier kannst du ja gerne den ein oder andern Tipp dalassen. Einer steht ja schon hier. Danke!

  • @tkaiser Schau ich mir an, danke für den Tipp!!

  • Ich habe heute, nachdem es einige Updates von Armbian gab, mal nachgeschaut ob ein spezieller Fehler verschwunden ist.
    Und zwar geht es um das Resizen der Partion nachdem wir Armbian auf eine USB-HDD (USB3) installiert haben.

    Ich setze dafür folgendes System ein.

    Hardware

    • ROCKPro64v2.0 4GB RAM
    • SanDisk 240GB 2,5 Zoll HDD (nix tolles)

    Software

    Welcome to ARMBIAN 5.67.181217 nightly Debian GNU/Linux 9 (stretch) 4.4.167-rockchip64 
    

    Was sehe ich nach dem Reboot?

    root@rockpro64:~# df -h
    Filesystem      Size  Used Avail Use% Mounted on
    udev            1.9G     0  1.9G   0% /dev
    tmpfs           388M  5.3M  383M   2% /run
    /dev/sda1       220G  1.3G  207G   1% /
    tmpfs           1.9G     0  1.9G   0% /dev/shm
    tmpfs           5.0M  4.0K  5.0M   1% /run/lock
    tmpfs           1.9G     0  1.9G   0% /sys/fs/cgroup
    tmpfs           1.9G  4.0K  1.9G   1% /tmp
    /dev/mmcblk0p1   58G  1.3G   57G   3% /media/mmcboot
    /dev/zram0       49M  3.0M   43M   7% /var/log
    tmpfs           388M     0  388M   0% /run/user/0
    

    Korrekt die Größe angepasst!

    Schnell mal den USB3 testen

    root@rockpro64:~# 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, 38.0723 s, 113 MB/s
    

    Der Adapter

    root@rockpro64:~# lsusb -vvv
    
    Bus 004 Device 002: ID 2109:0715 VIA Labs, Inc. 
    Device Descriptor:
      bLength                18
      bDescriptorType         1
      bcdUSB               3.10
      bDeviceClass            0 (Defined at Interface level)
      bDeviceSubClass         0 
      bDeviceProtocol         0 
      bMaxPacketSize0         9
      idVendor           0x2109 VIA Labs, Inc.
      idProduct          0x0715 
      bcdDevice            1.31
      iManufacturer           1 VLI Manufacture String
      iProduct                2 VLI Product String
      iSerial                 3 000000123ADA
      bNumConfigurations      1
      Configuration Descriptor:
        bLength                 9
        bDescriptorType         2
        wTotalLength          121
        bNumInterfaces          1
        bConfigurationValue     1
        iConfiguration          0 
        bmAttributes         0x80
          (Bus Powered)
        MaxPower              224mA
        Interface Descriptor:
          bLength                 9
          bDescriptorType         4
          bInterfaceNumber        0
          bAlternateSetting       0
          bNumEndpoints           2
          bInterfaceClass         8 Mass Storage
          bInterfaceSubClass      6 SCSI
          bInterfaceProtocol     80 Bulk-Only
          iInterface              0 
          Endpoint Descriptor:
            bLength                 7
            bDescriptorType         5
            bEndpointAddress     0x81  EP 1 IN
            bmAttributes            2
              Transfer Type            Bulk
              Synch Type               None
              Usage Type               Data
            wMaxPacketSize     0x0400  1x 1024 bytes
            bInterval               0
            bMaxBurst              15
          Endpoint Descriptor:
            bLength                 7
            bDescriptorType         5
            bEndpointAddress     0x02  EP 2 OUT
            bmAttributes            2
              Transfer Type            Bulk
              Synch Type               None
              Usage Type               Data
            wMaxPacketSize     0x0400  1x 1024 bytes
            bInterval               0
            bMaxBurst              15
        Interface Descriptor:
          bLength                 9
          bDescriptorType         4
          bInterfaceNumber        0
          bAlternateSetting       1
          bNumEndpoints           4
          bInterfaceClass         8 Mass Storage
          bInterfaceSubClass      6 SCSI
          bInterfaceProtocol     98 
          iInterface              0 
          Endpoint Descriptor:
            bLength                 7
            bDescriptorType         5
            bEndpointAddress     0x04  EP 4 OUT
            bmAttributes            2
              Transfer Type            Bulk
              Synch Type               None
              Usage Type               Data
            wMaxPacketSize     0x0400  1x 1024 bytes
            bInterval               0
            bMaxBurst               0
            Command pipe (0x01)
          Endpoint Descriptor:
            bLength                 7
            bDescriptorType         5
            bEndpointAddress     0x85  EP 5 IN
            bmAttributes            2
              Transfer Type            Bulk
              Synch Type               None
              Usage Type               Data
            wMaxPacketSize     0x0400  1x 1024 bytes
            bInterval               0
            bMaxBurst              15
            MaxStreams             32
            Data-in pipe (0x03)
          Endpoint Descriptor:
            bLength                 7
            bDescriptorType         5
            bEndpointAddress     0x06  EP 6 OUT
            bmAttributes            2
              Transfer Type            Bulk
              Synch Type               None
              Usage Type               Data
            wMaxPacketSize     0x0400  1x 1024 bytes
            bInterval               0
            bMaxBurst              15
            MaxStreams             32
            Data-out pipe (0x04)
          Endpoint Descriptor:
            bLength                 7
            bDescriptorType         5
            bEndpointAddress     0x87  EP 7 IN
            bmAttributes            2
              Transfer Type            Bulk
              Synch Type               None
              Usage Type               Data
            wMaxPacketSize     0x0400  1x 1024 bytes
            bInterval               0
            bMaxBurst               0
            MaxStreams             32
            Status pipe (0x02)
    Binary Object Store Descriptor:
      bLength                 5
      bDescriptorType        15
      wTotalLength           70
      bNumDeviceCaps          4
    FIXME: alloc bigger buffer for device capability descriptors
    Device Status:     0x0000
      (Bus Powered)
    

    Ein lästiger Fehler weniger. 😉

  • ROCKPro64 - Anpassen resize_rootfs.sh

    Angeheftet ROCKPro64
    3
    0 Stimmen
    3 Beiträge
    457 Aufrufe
    FrankMF

    Seit Release 0.10.10 ist das automatische Vergrößern der Root Partition mit drin 🙂

    0.10.10: Support automated resize when booting from nvme

    Einfach das Image auf die NVMe SSD schreiben, ab in den ROCKPro64 und fertig! Nach dem Booten wird die Partition dann automatisch auf die maximal mögliche Größe erweitert.

    Kamil hat das Script auch ein wenig angepasst.

    case $dev in /dev/mmcblk?p?) DISK=${dev:0:12} PART=${dev:13} NAME="sd/emmc" ;; /dev/sd??) DISK=${dev:0:8} PART=${dev:8} NAME="hdd/ssd" ;; /dev/nvme?n?p?) DISK=${dev:0:12} PART=${dev:13} NAME="pcie/nvme" ;;

    Das Resultat bei einer Samsung 979 EVO mit 500GB Speicher

    rock64@rockpro64:~$ df -h Filesystem Size Used Avail Use% Mounted on udev 918M 0 918M 0% /dev tmpfs 192M 5.2M 187M 3% /run /dev/nvme0n1p4 459G 1.2G 439G 1% / tmpfs 957M 0 957M 0% /dev/shm tmpfs 5.0M 4.0K 5.0M 1% /run/lock tmpfs 957M 0 957M 0% /sys/fs/cgroup /dev/nvme0n1p3 229M 44M 169M 21% /boot /dev/nvme0n1p2 12M 0 12M 0% /boot/efi tmpfs 192M 0 192M 0% /run/user/1000

    Perfekt. Danke Kamil!

  • Neues Script "change-default-kernel.sh "

    ROCKPro64
    1
    0 Stimmen
    1 Beiträge
    592 Aufrufe
    Niemand hat geantwortet
  • Kamil hat mal wieder Zeit?

    ROCKPro64
    1
    0 Stimmen
    1 Beiträge
    457 Aufrufe
    Niemand hat geantwortet
  • [HOWTO]ROCKPro64 - NAS bauen Teil 1

    Angeheftet ROCKPro64
    5
    0 Stimmen
    5 Beiträge
    2k Aufrufe
    FrankMF

    Die Pinne für den Adapter liegen ja nur parallel zum Eingang des Steckers vom Netzteil. Also, solange da nichts abfackelt kann man da eine Menge Strom drüber jagen 🙂

    Wenn es funktioniert ist ja alles gut.

  • Zwischenfazit August 2018

    ROCKPro64
    1
    1 Stimmen
    1 Beiträge
    1k Aufrufe
    Niemand hat geantwortet
  • Benchmarks

    Angeheftet Verschoben Archiv
    10
    0 Stimmen
    10 Beiträge
    2k Aufrufe
    FrankMF
    iozone Test (0.6.52) Hardware

    Hardware ist eine Samsung EVO 960 m.2 mit 250GB

    Eingabe sudo iozone -e -I -a -s 100M -r 4k -r 16k -r 512k -r 1024k -r 16384k -i 0 -i 1 -i 2 Ausgabe Run began: Thu Jun 14 12:04:01 2018 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 40859 79542 101334 101666 31721 60459 102400 16 113215 202566 234307 233091 108334 154750 102400 512 362864 412548 359279 362810 340235 412626 102400 1024 400478 453205 381115 385746 372378 453548 102400 16384 583762 598047 595752 596251 590950 604690

    Zum direkten Vergleich hier heute mal mit 4.17.0-rc6-1019

    rock64@rockpro64:/mnt$ uname -a Linux rockpro64 4.17.0-rc6-1019-ayufan-gfafc3e1c913f #1 SMP PREEMPT Tue Jun 12 19:06:59 UTC 2018 aarch64 aarch64 aarch64 GNU/Linux iozone Test rock64@rockpro64:/mnt$ sudo 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.429 $ Compiled for 64 bit mode. Build: linux 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. Run began: Sat Jun 16 06:34:43 2018 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 48672 104754 115838 116803 47894 103606 102400 16 168084 276437 292660 295458 162550 273703 102400 512 566572 597648 580005 589209 534508 597007 102400 1024 585621 624443 590545 599177 569452 630098 102400 16384 504871 754710 765558 780592 777696 753426 iozone test complete.
  • stretch-minimal-rockpro64

    Verschoben Linux
    3
    0 Stimmen
    3 Beiträge
    1k Aufrufe
    FrankMF

    Mal ein Test was der Speicher so kann.

    rock64@rockpro64:~/tinymembench$ ./tinymembench tinymembench v0.4.9 (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 : 2812.7 MB/s C copy backwards (32 byte blocks) : 2811.9 MB/s C copy backwards (64 byte blocks) : 2632.8 MB/s C copy : 2667.2 MB/s C copy prefetched (32 bytes step) : 2633.5 MB/s C copy prefetched (64 bytes step) : 2640.8 MB/s C 2-pass copy : 2509.8 MB/s C 2-pass copy prefetched (32 bytes step) : 2431.6 MB/s C 2-pass copy prefetched (64 bytes step) : 2424.1 MB/s C fill : 4887.7 MB/s (0.5%) C fill (shuffle within 16 byte blocks) : 4883.0 MB/s C fill (shuffle within 32 byte blocks) : 4889.3 MB/s C fill (shuffle within 64 byte blocks) : 4889.2 MB/s --- standard memcpy : 2807.3 MB/s standard memset : 4890.4 MB/s (0.3%) --- NEON LDP/STP copy : 2803.7 MB/s NEON LDP/STP copy pldl2strm (32 bytes step) : 2802.1 MB/s NEON LDP/STP copy pldl2strm (64 bytes step) : 2800.7 MB/s NEON LDP/STP copy pldl1keep (32 bytes step) : 2745.5 MB/s NEON LDP/STP copy pldl1keep (64 bytes step) : 2745.8 MB/s NEON LD1/ST1 copy : 2801.9 MB/s NEON STP fill : 4888.9 MB/s (0.3%) NEON STNP fill : 4850.1 MB/s ARM LDP/STP copy : 2803.8 MB/s ARM STP fill : 4893.0 MB/s (0.5%) ARM STNP fill : 4851.7 MB/s ========================================================================== == 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) : 602.5 MB/s NEON LDP/STP 2-pass copy (from framebuffer) : 551.6 MB/s NEON LD1/ST1 copy (from framebuffer) : 667.1 MB/s NEON LD1/ST1 2-pass copy (from framebuffer) : 605.6 MB/s ARM LDP/STP copy (from framebuffer) : 445.3 MB/s ARM LDP/STP 2-pass copy (from framebuffer) : 428.8 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 : 4.5 ns / 7.2 ns 131072 : 6.8 ns / 9.7 ns 262144 : 9.8 ns / 12.8 ns 524288 : 11.4 ns / 14.7 ns 1048576 : 16.0 ns / 22.6 ns 2097152 : 114.0 ns / 175.3 ns 4194304 : 161.7 ns / 219.9 ns 8388608 : 190.7 ns / 241.5 ns 16777216 : 205.3 ns / 250.5 ns 33554432 : 212.9 ns / 255.5 ns 67108864 : 222.3 ns / 271.1 ns
  • Erste Lebenszeichen

    ROCKPro64
    1
    0 Stimmen
    1 Beiträge
    501 Aufrufe
    Niemand hat geantwortet