Roy Longbottom at Linkedin Roy Longbottom's Raspberry Pi Stress Tests


General Reliability Testing Temperature Recorder
From Original Benchmarks Floating Point Test Floating Point and Temperature
Cooking The Pi Fixed Point Test Fixed Point and Temperature
Drive and Bus Test Drive and Bus Test Part 2 Drive Test Not Cached/Cached
Drive Test LAN Setup Drive Test LAN Results Drive Test USB Setup
Drive Test USB Results USB-Fixed Point-Temperature Paging Tests


Assembly Code

General

Roy Longbottoms PC Benchmark Collection comprises numerous FREE benchmarks and reliability testing programs, for processors, caches, memory, buses, disks, flash drives, graphics, local area networks and Internet. Original ones run under DOS and later ones under all varieties of Windows. Most have also been converted to run under Linux on PCs, and many for ARM CPUs via Android and Raspbian. For the latter, details, benchmark execution files and source code download links, and results are provided in Raspberry Pi Benchmarks.htm with downloads for the stress test program codes in Raspberry_Pi_Stress_Tests.zip.

See later details in Raspberry Pi 2 Stress Tests.htm.

NOTE - The original OpenGL benchmark was found to be producing FPS speeds twice as high as they should be. Existing relative performance comparisons of results on Raspberry Pi systems are still valid. The benchmark has been modified. So do not compare old scores with new ones.

The ARM tests use the same programming code as my Linux Burn-In Apps. Each of these particular programs obtain the same configuration details as my Raspberry Pi benchmarks [1], and results are saved in a text log file, besides being displayed. An example of the details obtained are shown below. For identifying overclocking settings, a later addition shows the appropriate MHz and voltage settings [2]. These are logged at both the start and end of the test program results. See source codes in the zip file.


 1. SYSTEM INFORMATION

 From File /proc/cpuinfo
 Processor	: ARMv6-compatible processor rev 7 (v6l)
 BogoMIPS	: 464.48
 Features	: swp half thumb fastmult vfp edsp java tls 
 CPU implementer	: 0x41
 CPU architecture: 7
 CPU variant	: 0x0
 CPU part	: 0xb76
 CPU revision	: 7

 Hardware	: BCM2708
 Revision	: 000d
 Serial		: 00000000db690cb4
 

 From File /proc/version
 Linux version 3.6.11+ (dc4@dc4-arm-01) (gcc version 4.7.2 20120731 
  (prerelease) (crosstool-NG linaro-1.13.1+bzr2458 - Linaro GCC 2012.08) )
  #371 PREEMPT Thu Feb 7 16:31:35 GMT 2013

 2. MHz and Voltage Settings

 arm_freq=700
 core_freq=250
 sdram_freq=400
 over_voltage=0

 1a. After Update

 BogoMIPS	: 697.95
 #557 PREEMPT Wed Oct 2 18:49:09 BST 2013 

   


To Start


Reliability Testing

For reliability testing purposes, these programs have run time parameters that determine running time and, sometimes, which particular hardware to use. Most also include performance measurements, reported at regular intervals, to identify speed reductions due to such as overheating or system interference. The test programs can be run via command lines in shell scripts, including allowing multiple programs to be run at the same time, each in its own Terminal window. The commands sometimes include an option for different log file names, for cleaner results when more than one copy of the same program is run. A temperature recording application can be included in the mix. All test programs check numeric answers or data transfers for correct or consistent values and report in the log files if incorrect.

Following are examples of scripts used to run the test programs. Important Note - Script files produced using Windows NotePad do not work as spurious characters are included. It is recommended that the scripts are produced on the Raspberry Pi, using the nano command line editor, but Leafpad appears to be suitable. The script files are usually named with a .sh suffix and permission to execute should be set in File Properties.

The first example [1] runs the temperature measuring program on a separate LXTerminal window for 70 minutes, reporting every minute. This allows an overrun of the other programs. Next, six floating test programs, with different parameters, are run sequentially, displaying on the same Terminal and saving results to the same log file. The tests are run for approximately 10 minutes each and configuration details are omitted, except for the last test.

The second example [2] runs four FPU tests, with the same run time parameters, at the same time. Each, and the temperature measuring program, runs in its own Terminal window, recording in different log files - in this case log1.txt to log4.txt for the FPU programs.


 1. Series of Programs - run all in LXTerminal as ./fpu.sh

 lxterminal -e ./RPiTemperature Passes 70,  Seconds 60
 ./burninfpu KWords 1, Section 3, Minutes 10, log 29, NoConfig
 ./burninfpu KWords 10, Section 3, Minutes 10, log 29, NoConfig
 ./burninfpu KWords 1000, Section 3, Minutes 10, log 29, NoConfig
 ./burninfpu KWords 1, Section 1, Minutes 10, log 29, NoConfig
 ./burninfpu KWords 10, Section 1, Minutes 10, log 29, NoConfig
 ./burninfpu KWords 1000, Section 1, Minutes 10, log 29
 

 2. Concurrent Programs - run all in LXTerminal as ./4fpu.sh

 lxterminal -e ./RPiTemperature Pases 25,  Seconds 30
 lxterminal -e ./burninfpu KWords 1, Section 3, Minutes 10, log 1
 lxterminal -e ./burninfpu KWords 1, Section 3, Minutes 10, log 2
 lxterminal -e ./burninfpu KWords 1, Section 3, Minutes 10, log 3
 lxterminal -e ./burninfpu KWords 1, Section 3, Minutes 10, log 4

 Run time parameters are determined by the first character that
 can be lower or upper case - K, S, M, L, N

  


To Start


Temperature Recorder - RPiTemperature

RPiTemperature, CPU temperature recording program, uses the following LX Terminal commands to display and log results.

                  /opt/vc/bin/vcgencmd measure_temp 
                  /opt/vc/bin/vcgencmd measure_temp >> RPiTemperatures.txt 
  
Run time parameters specify number of samples and interval - see below. Default is 10 samples with 1 second delay between samples.


      Command - ./RPiTemperature passes 5, seconds 2

 Temperature Measurement - Start at Tue Jun 18 11:57:19 2013

          Using 5 samples at 2 second intervals

 Seconds
    0.0  temp=50.8C
    2.0  temp=50.8C
    4.1  temp=50.8C
    6.1  temp=51.4C
    8.2  temp=50.8C
   10.2  temp=50.8C

 Temperature Measurement - End at   Tue Jun 18 11:57:29 2013

  


To Start


From Original Benchmarks

The Livermore Loops (livermoreloopsPiA6) [3] and OpenGL (OpenGL1Pi.bin) [2 ]benchmarks are described in Raspberry Pi Benchmarks.htm, and, along with the temperature recorder 4], were also used for reliability testing purposes. The benchmark execution files are included in this package and the source codes can be downloaded in Raspberry_Pi_Benchmarks.zip.

These benchmarks were rerun using the following script file [1]. Temperatures were slightly higher than earlier, due to a hotter ambient conditions but, as could be expected, performance was virtually the same. Reported earlier, running the graphics tests stand alone, CPU utilisation was around 50%, FPS not much slower when run with Livermore Loops, where the latter ran at about half speed (see below).

The earlier results, Here, showed that the system crashed on overclocking whilst running these two test programs, probably when the temperature reached 73C. However, later tests, with maximum overclocking, demonstrated that the system could freeze at lower temperatures, on running the OpenGl test and one other program.

In this case, with no overclocking, maximum temperature was 70.8C, or a rise of 16.7C, after 9 minutes.


 1. loopsogl.sh script file

 lxterminal -e ./RPiTemperature Pases 36,  Seconds 30
 lxterminal -e ./liverloopsPiA6 Seconds 10
 sleep 10
 ./OpenGL1Pi.bin Wide 1920, High 1080, RunMinutes 15 

##############################################

 2. Raspberry Pi OpenGL ES Benchmark 1.1, Wed Aug  7 17:38:11 2013

 Reliability Mode 16 Tests of 57 Seconds

           --------- Frames Per Second --------
 Triangles            All Textured

  36000+       5.31     5.31     4.95     5.34
  36000+       5.43     5.55     5.89     5.68
  36000+       5.36     5.39     5.43     5.20
  36000+       5.24     5.46     5.66     6.03

      Screen Pixels 1920 Wide 1080 High

      End Time Wed Aug  7 17:53:27 2013

##############################################

 3. Livermore Loops Benchmark Opt 3 32 Bit via C/C++ Wed Aug  7 17:38:02 2013

 Reliability test  10 seconds each loop x 24 x 3

 Part 1 of 3 start at Wed Aug  7 17:38:03 2013

 Part 2 of 3 start at Wed Aug  7 17:45:07 2013

 Part 3 of 3 start at Wed Aug  7 17:48:55 2013

 Numeric results were as expected

 MFLOPS for 24 loops
   64.3   73.5   99.9   84.2   10.0   14.5   55.7   72.4   45.3   21.3   18.1   14.2
   10.4    7.7   30.2   34.8   55.9   24.4   41.7   19.0   13.5   12.5   31.6   16.9

 Overall Ratings
 Maximum Average Geomean Harmean Minimum
   100.3    38.1    31.1    25.3     7.7

   148.3    64.4    54.7    46.4    16.6 Stand alone results


 ########################################################

 4. Room 25C CPU 700 MHz

 Temperature Measurement - Start at Wed Aug  7 17:38:01 2013

          Using 36 samples at 30 second intervals

   Seconds                    Seconds
      0.0  temp=54.1C         574.5  temp=70.2C
     30.0  temp=61.1C         604.8  temp=70.2C
     60.2  temp=64.8C         635.1  temp=70.2C
     90.5  temp=65.9C         665.3  temp=70.8C
    120.8  temp=66.4C         695.5  temp=70.8C
    151.1  temp=67.5C         725.7  temp=70.2C
    181.3  temp=68.1C         756.0  temp=70.8C
    211.6  temp=68.1C         786.3  temp=70.8C
    241.8  temp=68.6C         816.5  temp=70.2C
    272.1  temp=68.1C         846.7  temp=70.8C
    302.2  temp=69.1C         876.9  temp=70.2C
    332.5  temp=69.1C         907.0  temp=70.2C
    362.8  temp=69.1C         937.2  temp=63.8C
    393.0  temp=69.1C         967.3  temp=59.5C
    423.3  temp=69.7C         997.3  temp=57.8C
    453.5  temp=70.2C        1027.4  temp=57.3C
    483.8  temp=69.7C        1057.4  temp=56.2C
    514.0  temp=69.7C        1087.5  temp=55.7C
    544.3  temp=70.8C

 Temperature Measurement - End at   Wed Aug  7 17:56:09 2013

  


To Start


Floating Point Test - burninfpu

This uses the same program test code as MP-MFLOPS, but just for a single CPU. The arithmetic operations executed are of the form x[i] = (x[i] + a) * b - (x[i] + c) * d + (x[i] + e) * f with 2, 8 or 32 operations per input data word. The same variables are used for each word and final results are checked for consistency, any errors being reported. Using 32 operations per word, performance is generally dependent on CPU speed, with fewer operations becoming more dependent on bus or RAM speed.

    

Run Time Parameters - Upper or Lower Case

S or Section 1, 2 or 3 2, 8 or 32 operations per word K or KWords Integer number of 4 byte words to use M or Minutes Running time (4 passes per minute) L or Log Log file name extension 0 to 99 N or NoConfig Do not include configuration details in log P or PauseAtEnd Include typed comment at end Defaults Section 3 (32 operations per word), Minutes 1, KWords 3.2 (as original MP_MFLOPS), Log 0 (for log0.txt), Save configuration details, Don't stop for keyboard entry. Reports are displayed/logged at a minimum of 15 second intervals.

Following shows the script file and results log file (log33.txt) running four varieties of burninfpu sequentially. The first one uses L1 cache sized data, default 32 operations per word. The others all use L2 cache data with the three operations per word options, demonstrating the varying performance.

   
 Script file fpu1.sh 

 #1
./burninfpu KWds 1, log 33, NoConfig
 #2
./burninfpu KWds 10, Section 3, log 33, NoConfig
 #3
./burninfpu KWds 10, Section 2, log 33, NoConfig
 #4
./burninfpu KWds 10, Section 1, log 33

 ##############################################

    Burn-In-FPU Linux/ARM v1.0 Tue Oct  1 14:46:08 2013

 Using 4 KBytes, 32 Operations Per Word, For Approximately 1 Minutes

   Pass    4 Byte  Ops/   Repeat    Seconds   MFLOPS          First   All
            Words  Word   Passes                            Results  Same
 #1
      1      1000    32    96000      16.16      190    0.352358878   Yes
      2      1000    32    96000      16.04      191    0.352358878   Yes
      3      1000    32    96000      16.09      191    0.352358878   Yes
      4      1000    32    96000      15.99      192    0.352358878   Yes

                   End at Tue Oct  1 14:47:13 2013
 #2
      1     10000    32     9600      17.26      178    0.669459462   Yes
      2     10000    32     9600      17.12      179    0.669459462   Yes
      3     10000    32     9600      17.13      179    0.669459462   Yes
      4     10000    32     9600      17.17      179    0.669459462   Yes

                   End at Tue Oct  1 14:48:22 2013
 #3
      1     10000     8    22400      15.83      113    0.731058180   Yes
      2     10000     8    22400      15.73      114    0.731058180   Yes
      3     10000     8    22400      15.77      114    0.731058180   Yes
      4     10000     8    22400      15.74      114    0.731058180   Yes

                   End at Tue Oct  1 14:49:25 2013
 #4
      1     10000     2    33600      15.51       43    0.512160420   Yes
      2     10000     2    33600      15.44       44    0.512160420   Yes
      3     10000     2    33600      15.45       44    0.512160420   Yes
      4     10000     2    33600      15.42       44    0.512160420   Yes

                   End at Tue Oct  1 14:50:27 2013

  


To Start


Floating Point and Temperature Tests

Following script commands [1] to run burninfpu for 27 minutes and results [2], at the same time as measuring CPU temperatures. Tests were run using L1 cache, L2 cache and RAM at 2, 8 and 32 operations per word. Temperature increases were a mere 2.2 C. This is similar to that obtained running just the Livermore Loops tests (see above). A further run of the last test (1000 KWd, 32 Ops) was run over 10 minutes with similar temperature increases.

The 10 minute test (1000 KWd, 32 Ops) was repeated with the Raspberry Pi overclocked at 1000 MHz (from 700). Starting temperature was 51.9 C, increasing by 8.1 C, with speed consistently around 240 MFLOPS.


 1. Script file fpu2.sh 

lxterminal -e ./RPiTemperature Pases 120,  Seconds 15
./burninfpu KWds 1,    Minutes 3, Section 1, log 30, NoConfig
./burninfpu KWds 1,    Minutes 3, Section 2, log 30, NoConfig
./burninfpu KWds 1,    Minutes 3, Section 3, log 30, NoConfig
./burninfpu KWds 10,   Minutes 3, Section 1, log 30, NoConfig
./burninfpu KWds 10,   Minutes 3, Section 2, log 30, NoConfig
./burninfpu KWds 10,   Minutes 3, Section 3, log 30, NoConfig
./burninfpu KWds 1000, Minutes 3, Section 1, log 30, NoConfig
./burninfpu KWds 1000, Minutes 3, Section 2, log 30, NoConfig
./burninfpu KWds 1000, Minutes 3, Section 3, log 30

 2. ##############################################

 KWds     1             1             1             L1 cache
 Ops/Wd   2             8            32  
   MFLOPS   C   MFLOPS   C   MFLOPS   C

     51   50.8    128   53.0    188   53.0
     53   51.9    130   51.9    189   52.5
     53   52.5    130   51.9    189   51.9
     53   51.9    130   51.9    190   52.5
     53   51.9    130   51.9    188   51.9
     53   51.9    130   51.9    189   51.9
     53   51.9    130   52.5    189   51.9
     47   52.5    129   53.0    189   52.5
     43   53.0    128   51.9    190   53.0
     52   52.5    129   53.0    189   51.9
     45   53.0    129   53.0    190   51.9
     53   51.9    129   52.5    189   51.9

 KWds    10            10            10             L2 cache 
 Ops/Wd   2             8            32  
   MFLOPS   C   MFLOPS   C   MFLOPS   C

     42   51.9    112   52.5    178   52.5
     43   51.9    112   51.9    178   52.5
     43   51.9    112   52.5    178   51.9
     43   52.5    112   51.9    178   52.5
     43   51.9    112   51.9    178   51.9
     43   52.5    112   51.9    178   52.5
     43   53.0    112   51.9    178   51.9
     43   51.9    112   51.9    178   51.9
     43   51.9    112   51.9    178   52.5
     43   52.5    111   51.9    178   52.5
     43   53.0    112   51.9    178   51.9
     43   51.9    112   51.9    177   51.9

 KWds  1000          1000          1000             RAM
 Ops/Wd   2             8            32  
   MFLOPS   C   MFLOPS   C   MFLOPS   C

     31   51.9     90   53.0    162   53.5
     31   53.0     90   53.0    163   53.0
     31   51.9     90   53.0    163   53.0
     31   51.9     90   53.0    163   52.5
     31   51.9     90   53.0    163   53.0
     31   52.5     90   53.0    163   53.0
     31   53.0     90   53.0    162   52.5
     31   53.0     90   53.0    162   52.5
     31   53.0     90   52.5    163   52.5
     31   53.0     90   53.0    163   52.5
     31   53.0     90   53.0    162   53.0
     31   53.0     90   53.0    163   53.0

  


To Start


Cooking The Pi

Tests were carried out using a lamp with a 60 watt bulb shining directly on the RPi to see what happens at high temperatures. For the first test [1], maximum overclocking settings were used and just burninfpu was run. For this test, the lamp was moved closer to speed up temperature increases. CPU speed remained constant but the system crashed at around 80C.

The next one [2] was run at medium overclocking settings, again with just burninfpu. This time the lamp was moved closer until 85C was reached, then backed off after a short time. At 85C, MFLOPS speed decreased to 700 MHz level but switched back to full speed when the temperature dropped.

For the third test [3], burninfpu and OpenGL1Pi were run at the same time with the lamp in a fixed position. After nearly 5 minutes, there was a reduction in CPU MFLOPS speed, probably at around 85C . Running the OpenGL program by itself obtains an average of 6.0 FPS, with 36% CPU utilisation (see vmstat performance recorder output below [4]). The latter utilisation provides scope to run a processor test at the same time. In fact, to start with, burninfpu obtained an average speed of 98 MFLOPS, compared with 200, when run by itself. At the start, average speed for the OpenGL benchmark was just over 5 FPS.

On slowing down, average speed was 74 MFLOPS and this continued until the program finished. OpenGL1Pi performance did not change much and temperature hovered at around 85C. As heavy processing has little impact on increasing temperature, which is dominated by graphics hardware activity, it seems strange that clock speed of the latter is not reduced (or is it at a higher temperature).


lxterminal -e ./RPiTemperature Passes 64,  Seconds 15
lxterminal -e ./burninfpu KWds 1000, Section 3, Minutes 15, log 59

./OpenGL1Pi.bin Wide 1920, High 1080, RunMinutes 15 

 ####################################################################

    1. FPU            2. FPU            3. FPU + OpenGL
    arm_freq=1000     arm_freq=900      arm_freq=900
    core_freq=500     core_freq=250     core_freq=250
    sdram_freq=600    sdram_freq=450    sdram_freq=450
    over_voltage=6    over_voltage=2    over_voltage=2

    MFLOPS      C    MFLOPS      C   Seconds  MFLOPS     FPS      C

       216    55.1       202    66.4         0                    67.0
       238    60.5       201    69.1        15                    71.8
       238    63.8       201    72.4        30     104            75.6
       238    64.8       201    74.5        45                    77.7
       238    67.0       201    76.7        61      96     5.2    78.8
       212    68.6       201    77.7        76     104            79.9
       238    69.1       204    79.4        91                    81.0
       238    70.8       200    81.0       106      94     5.5    82.0
       237    71.3       201    83.1       122                    81.5
       239    72.9       193    84.2       137     105            82.0
       239    75.1       160    84.7       152                    83.1
       239    76.7       160    85.8       167             5.4    83.1
       239    75.1       160    86.4       183      94            83.1
       239    74.5       160    85.8       198                    83.7
       239    75.6       188    83.7       213     100            83.7
       239    75.6       200    81.5       228             5.3    84.7
       239    76.7       201    79.9       244      89            83.7
       239    76.7       201    78.8       259                    84.2
       239    77.2       200    77.7       274      85            83.1
       239    77.2       203    76.1       289             5.2    84.7
       239    77.7       200    75.1       305                    83.1
       239    78.8       200    74.5       320      81            83.1
       239    78.8       200    74.5       335             5.3    84.7
       239    78.8       200    72.9       351                    83.7
       239    79.4       200    72.4       366      76            83.7
       Failed            201    70.8       381                    84.7
                         204    70.2       397      74     5.3    83.1
                         201    69.1       412                    83.1
                         200    69.1       427      76            84.2
                         200    68.1       443                    83.7
                         201    68.1       458      68     5.2    83.7
                         201    67.0       473                    83.7
                         202    66.4       488                    83.1
                         202    65.9       504      69            84.2
                         201    65.9       519             4.9    83.7
                         201    65.4       534      73            83.7
                         200    64.8       550                    84.2
                         200    64.3       565      75            84.2
                         201    63.8       580             4.7    84.7
                         204    63.8       595      69            84.2
                         203    63.8       611                    84.2
                         201    62.7       626      79     5.0    84.7
                         201    62.1       641                    84.2
                         201    61.6       657      68            84.2
                         201    62.1       672                    84.7
                         201    61.6       687             5.2    84.2
                         201    61.1       702      72            84.2
                         203    61.1       718                    84.7
                         203    61.6       733      70            84.7
                         202    61.1       748             5.3    84.7
                         201    60.0       764      81            84.2
                         201    60.5       779                    85.3
                         201    60.0       794      69     5.0    85.3
                         201    58.9       809                    85.3
                         204    57.8       825      76            84.7
                         201    57.3       840                    84.7
                         201    57.3       855             4.6    85.8
                         201    57.3       871      69            85.3
                         201    56.8       886                    85.3
                                           901      78            85.3
                                           916             5.0    85.3
                                           932     198            81.0
                                           947                    78.8
                                           962     197            78.3
                                           977                    77.7

4.  OpenGL1Pi.bin by itself - vmstat command measuring system utilisation 

vmstat 30 second intervals, 10 samples
us - CPU utilisation user
sy - CPU utilisation system
id - CPU idle

vmstat 30 10 > vmstats52.txt

procs -----------memory---------- ---swap-- -----io---- -system-- ----cpu----
 r  b   swpd   free   buff  cache   si   so    bi    bo   in   cs us sy id wa
 0  0      0 336384   5980  39176    0    0   365    93 1360  201  4  4 90  2
 1  0      0 335824   5996  39176    0    0     0     1 1642 1343 20  6 73  0
 1  0      0 335824   6004  39176    0    0     0     1 1799 1807 27  9 64  0
 1  0      0 335824   6012  39176    0    0     0     0 1858 1980 29 11 60  0
 1  0      0 335328   6020  39176    0    0     0     1 1774 1732 28  9 64  0
 0  0      0 335328   6036  39176    0    0     0     1 1826 1883 28  9 63  0
 0  0      0 335328   6044  39176    0    0     0     0 1849 1950 29 10 61  0
 1  0      0 335328   6052  39176    0    0     0     1 1766 1715 27  9 64  0
 0  0      0 335080   6060  39192    0    0     0     0 1832 1900 30  9 61  0
 0  0      0 335632   6080  39192    0    0     0     4 1234   89  4  2 93  0

   


To Start


Fixed Point Test - stressInt

This has six tests that alternately write and read data and six tests using write once and read many times, each test using two data patterns out of 24 variations. Some are shown in the results. The write phase comprises an unrolled loop with 32 store statements, with read after write checking the data via 32 AND and 32 OR statements. The read phase has multiple passes of 8 adds and 8 subtractions. The data is same at the start and end for checking purposes but all data words are checked at the end. See Assembly Code for translated instructions.

Following are command line options [1], a full example of output using L1 cache [2], plus L2 cache [3] and RAM summary results [4]. Million Instructions Per Second (MIPS) are based on That Assembly Code.

   

1. Run Time Parameters - Upper or Lower Case

K or KBytes Integer number of bytes to use S or Seconds Running time for each of 12 tests L or Log Log file name extension 0 to 99 N or NoConfig Do not include configuration details in log P or PauseAtEnd Include typed comment at end Defaults ./stressInt KBytes 8, Seconds 1, Log 0 Log logInt0.txt, Save configuration details, Don't stop for keyboard entry. For longer times, reports are displayed at 10 second intervals. 2. ############################################## arm_freq=700 core_freq=250 sdram_freq=400 over_voltage=0 Integer Stress Test Linux/ARM v1.0 Tue Oct 22 12:19:59 2013 8 KBytes Cache or RAM Space, 1 Seconds Per Test, 12 Tests Write/Read 1 993 MB/sec Pattern 00000000 Result OK 60594 passes 2 1031 MB/sec Pattern FFFFFFFF Result OK 62922 passes 3 1025 MB/sec Pattern A5A5A5A5 Result OK 62535 passes 4 1037 MB/sec Pattern 55555555 Result OK 63312 passes 5 1039 MB/sec Pattern 33333333 Result OK 63422 passes 6 1019 MB/sec Pattern F0F0F0F0 Result OK 62213 passes Maximum speed 568 MIPS Read 1 1037 MB/sec Pattern 00000000 Result OK 126600 passes 2 1041 MB/sec Pattern FFFFFFFF Result OK 127100 passes 3 1019 MB/sec Pattern A5A5A5A5 Result OK 124400 passes 4 1031 MB/sec Pattern 55555555 Result OK 126000 passes 5 1032 MB/sec Pattern 33333333 Result OK 126000 passes 6 1016 MB/sec Pattern F0F0F0F0 Result OK 124100 passes Maximum speed 620 MIPS End at Tue Oct 22 12:20:11 2013 3. ############################################## 32 KBytes Cache or RAM Space, 1 Seconds Per Test, 12 Tests Write/Read 1 414 MB/sec Pattern 00000000 Result OK 6323 passes Maximum speed 229 MIPS Read 1 358 MB/sec Pattern 00000000 Result OK 11000 passes Maximum speed 213 MIPS 4. ############################################## 10000 KBytes Cache or RAM Space, 1 Seconds Per Test, 12 Tests Write/Read 1 200 MB/sec Pattern 00000000 Result OK 10 passes Maximum speed 111 MIPS Read 1 161 MB/sec Pattern 00000000 Result OK 16 passes Maximum speed 95 MIPS


To Start


Fixed Point and Temperature

Following are speeds and temperatures [1], running stressInt [2] and stressInt plus OpenGL1Pi [3], at various clock settings [4]. Surprisingly, the integer calculations gave rise to higher temperatures than the floating point tests. The screen froze again at maximum overclocking, when running the OpenGL program. On the other hand, maximum temperatures were of no real concern just running stressInt. For the record, room temperatures were between 22C and 25C.


 2. lxterminal -e ./stressInt Seconds 80, log 2
 1. lxterminal -e ./RPiTemperature Pases 100,  Seconds 10

 3. ./OpenGL1Pi.bin Wide 1920, High 1080, RunMinutes 15 
 ##########################################################

 4. arm_freq              700     900    1000     700     900    1000
    core_freq             250     250     500     250     250     500
    sdram_freq            400     450     600     400     450     600
    over_voltage            0       2       6       0       2       6

 3. OpenGL FPS                                   5.79    6.04     N/A

 2. MIPS Write/Read       593     766     866     310     434     868
    MIPS Read             642     827     936     483     653     933

 1.           Seconds     C      C      C      C              C
                   10    40.1    45.5    50.3    51.4    53.0    55.7
                   20    41.2    47.6    54.1    55.1    57.8    62.7
                   30    42.2    48.7    55.7    57.3    61.6    67.0 OGL Froze
                   40    42.2    48.7    56.2    58.9    63.8    62.7
                   50    42.8    49.8    57.3    60.0    64.8    62.1
                   60    43.3    49.8    57.3    61.6    65.9    62.7
                   70    43.3    50.3    58.4    61.6    65.9    62.7
                   80    43.3    50.3    58.4    62.7    67.0    62.7
                   90    43.9    50.3    58.4    62.7    68.1    62.7
                  100    44.4    50.8    58.4    64.3    67.5    63.8
                  110    44.4    50.8    58.9    63.8    68.1    62.7
                  120    44.4    50.8    58.4    64.3    68.6    63.8

             Maximum     51.9    55.7    62.7    70.2    75.6    67.0

   


To Start


Drive and Bus Test - burnindrive

This program uses the same procedures as one of the test programs designed to run under Operating Systems during UK Government Computer Acceptance Trials that were carried out in the 1970s and 1980s. Its main successes were identifying a data pattern conscious design fault on the I/O system of Serial #1 CDC Cyber 205 supercomputer and a case of reading the wrong file on a top end IBM 360 running the, then new, MVS Operating System at a NSA type security department.

The default version of burnindrive writes four files, using 164 blocks of 64 KB, repeated 16 times (164.0 MB), with each block containing a unique data pattern (shown below [1]). The files are then read for two minutes, on a sort of random sequence (see below [2]), with data and file ID checked for correct values.

Originally included for disk drives, where rereading is from the disks buffer at bus speeds, the last section repetitively reads each block in turn, from one file. In order to maintain fast data transfer speeds, values are checked for correctness every 20 passes. Total time is normally about 5 minutes for all tests, with default parameters.


 1. Patterns Generated

 Number         Pattern     Or Hex Number        Pattern    Or Hex

      1               0         0      2               1         1
      3               2         2      4               4         4
      5               8         8      6              16        10
      7              32        20      8              64        40
      9             128        80     10             256       100
     11             512       200     12            1024       400
     13            2048       800     14            4096      1000
     15            8192      2000     16           16384      4000
     17           32768      8000     18           65536     10000
     19          131072     20000     20          262144     40000
     21          524288     80000     22         1048576    100000
     23         2097152    200000     24         4194304    400000
     25         8388608    800000     26        16777216   1000000
     27        33554432   2000000     28        67108864   4000000
     29       134217728   8000000     30       268435456  10000000
     31       536870912  20000000     32      1073741824  40000000
     33               1         1     34               5         5
     35              21        15     36              85        55
     37             341       155     38            1365       555
     39            5461      1555     40           21845      5555
     41           87381     15555     42          349525     55555
     43         1398101    155555     44         5592405    555555
     45        22369621   1555555     46        89478485   5555555
     47       357913941  15555555     48      1431655765  55555555
     49               3         3     50              51        33
     51             819       333     52           13107      3333
     53          209715     33333     54         3355443    333333
     55        53687091   3333333     56       858993459  33333333
     57               7         7     58             455       1C7
     59           29127      71C7     60         1864135    1C71C7
     61       119304647   71C71C7     62              15         F
     63            3855       F0F     64          986895     F0F0F
     65       252645135   F0F0F0F     66              31        1F
     67           31775      7C1F     68        32537631   1F07C1F
     69              63        3F     70          258111     3F03F
     71             127        7F     72         2080895    1FC07F
     73             255        FF     74        16711935    FF00FF
     75             511       1FF     76            1023       3FF
     77            2047       7FF     78            4095       FFF
     79            8191      1FFF     80           16383      3FFF
     81           32767      7FFF     82           65535      FFFF
     83              -1  FFFFFFFF     84              -2  FFFFFFFE
     85              -3  FFFFFFFD     86              -5  FFFFFFFB
     87              -9  FFFFFFF7     88             -17  FFFFFFEF
     89             -33  FFFFFFDF     90             -65  FFFFFFBF
     91            -129  FFFFFF7F     92            -257  FFFFFEFF
     93            -513  FFFFFDFF     94           -1025  FFFFFBFF
     95           -2049  FFFFF7FF     96           -4097  FFFFEFFF
     97           -8193  FFFFDFFF     98          -16385  FFFFBFFF
     99          -32769  FFFF7FFF    100          -65537  FFFEFFFF
    101         -131073  FFFDFFFF    102         -262145  FFFBFFFF
    103         -524289  FFF7FFFF    104        -1048577  FFEFFFFF
    105        -2097153  FFDFFFFF    106        -4194305  FFBFFFFF
    107        -8388609  FF7FFFFF    108       -16777217  FEFFFFFF
    109       -33554433  FDFFFFFF    110       -67108865  FBFFFFFF
    111      -134217729  F7FFFFFF    112      -268435457  EFFFFFFF
    113      -536870913  DFFFFFFF    114     -1073741825  BFFFFFFF
    115              -2  FFFFFFFE    116              -6  FFFFFFFA
    117             -22  FFFFFFEA    118             -86  FFFFFFAA
    119            -342  FFFFFEAA    120           -1366  FFFFFAAA
    121           -5462  FFFFEAAA    122          -21846  FFFFAAAA
    123          -87382  FFFEAAAA    124         -349526  FFFAAAAA
    125        -1398102  FFEAAAAA    126        -5592406  FFAAAAAA
    127       -22369622  FEAAAAAA    128       -89478486  FAAAAAAA
    129      -357913942  EAAAAAAA    130     -1431655766  AAAAAAAA
    131              -4  FFFFFFFC    132             -52  FFFFFFCC
    133            -820  FFFFFCCC    134          -13108  FFFFCCCC
    135         -209716  FFFCCCCC    136        -3355444  FFCCCCCC
    137       -53687092  FCCCCCCC    138      -858993460  CCCCCCCC
    139              -8  FFFFFFF8    140            -456  FFFFFE38
    141          -29128  FFFF8E38    142        -1864136  FFE38E38
    143      -119304648  F8E38E38    144             -16  FFFFFFF0
    145           -3856  FFFFF0F0    146         -986896  FFF0F0F0
    147      -252645136  F0F0F0F0    148             -32  FFFFFFE0
    149          -31776  FFFF83E0    150       -32537632  FE0F83E0
    151             -64  FFFFFFC0    152         -258112  FFFC0FC0
    153            -128  FFFFFF80    154        -2080896  FFE03F80
    155            -256  FFFFFF00    156       -16711936  FF00FF00
    157            -512  FFFFFE00    158           -1024  FFFFFC00
    159           -2048  FFFFF800    160           -4096  FFFFF000
    161           -8192  FFFFE000    162          -16384  FFFFC000
    163          -32768  FFFF8000    164          -65536  FFFF0000

 2. Sequences - First 16

 No.   File         No.   File          No.   File          No.   File

  1    0  1  2  3    5    0  2  1  3     9    0  3  1  2    13    0  1  2  3
  2    1  2  3  0    6    1  3  2  0    10    1  0  3  2    14    1  2  3  0
  3    2  3  0  1    7    2  0  1  3    11    2  1  0  3    15    2  3  0  1
  4    3  0  2  1    8    3  1  2  0    12    3  2  1  0    16    3  0  2  1

  


To Start


Drive and Bus Test Part 2

Run time parameters [1] and an example of results [2] with default settings are shown below. Writing speed is not that fast, 7.4 MB/second here, as data is changed for each block written. Reading speeds are much faster at 15.9 MB/second. To speed this up on comparison, data blocks are summed using using AND and OR functions, and byte by byte checking only carried out if the sumcheck is wrong. Note that file reading details here are reported at approximately 41 second intervals, but this can be much longer with larger files.

The second part logs the number of repeat read passes each period (S or Seconds) for one of each of the 164 x 64 KB data pattern blocks. In this case, there are 49200 block reads in 2.77 minutes or 18.5 MB/second.

Last details are a summary of results using larger files [3].

    

1. Run Time Parameters - Upper or Lower Case

Default R or Repeats Data size, multiplier of 10.25 MB, more or less 16 P or Patterns Number of patterns for smaller files < 164 164 M or Minutes Large file reading time 2 L or Log Log file name extension 0 to 99 0 S or Seconds Time to read each block, last section 1 F or FilePath For other than SD card or SD card directory as benchmark C or CacheData Omit O_DIRECT on opening files to allow caching No O or OutputPatterns Log patterns and file equences used as above No D or DontRunReadTests Or only run write tests No Format ./burnindrive Repeats 16, Minutes 2, Log 0, Seconds 1 or ./burnindrive R 16, M 2, L 0, S 1

2. Example Log SD Card - IOlog0.txt

Command ./burnindrive ############################################################### arm_freq=700 core_freq=250 sdram_freq=400 over_voltage=0 Current Directory Path: /home/pi/benchmarks/burndrive Total MB 14685, Free MB 12717, Used MB 1968 Linux Storage Stress Test for ARM v1.0, Thu Oct 17 15:37:37 2013 File size 164.00 MB x 4 files, minimum reading time 2.0 minutes File 1 164.00 MB written in 23.16 seconds File 2 164.00 MB written in 21.70 seconds File 3 164.00 MB written in 21.68 seconds File 4 164.00 MB written in 21.78 seconds Total 88.32 seconds, Elapsed 88.32 seconds Start Reading Thu Oct 17 15:39:05 2013 Read passes 1 x 4 Files x 164.00 MB in 0.69 minutes Read passes 2 x 4 Files x 164.00 MB in 1.37 minutes Read passes 3 x 4 Files x 164.00 MB in 2.06 minutes Start Repeat Read Thu Oct 17 15:41:09 2013 Passes in 1 second(s) for each of 164 blocks of 64KB: 300 300 300 300 300 300 300 300 300 300 300 300 300 300 300 300 300 300 300 300 300 300 300 300 300 300 300 300 300 300 300 300 300 300 300 300 300 300 300 300 300 300 300 300 300 300 300 300 300 300 300 300 300 300 300 300 300 300 300 300 300 300 300 300 300 300 300 300 300 300 300 300 300 300 300 300 300 300 300 300 300 300 300 300 300 300 300 300 300 300 300 300 300 300 300 300 300 300 300 300 300 300 300 300 300 300 300 300 300 300 300 300 300 300 300 300 300 300 300 300 300 300 300 300 300 300 300 300 300 300 300 300 300 300 300 300 300 300 300 300 300 300 300 300 300 300 300 300 300 300 300 300 300 300 300 300 300 300 300 300 300 300 300 300 49200 read passes of 64KB blocks in 2.77 minutes End of test Thu Oct 17 15:43:56 2013 SYSTEM INFORMATION See General above 3. Larger Files Command ./burnindrive Repeats 80 ############################################################### File size 820.00 MB x 4 files, minimum reading time 2.0 minutes File 1 820.00 MB written in 103.72 seconds File 2 820.00 MB written in 104.86 seconds File 3 820.00 MB written in 105.32 seconds File 4 820.00 MB written in 107.42 seconds Total 421.32 seconds, Elapsed 421.33 seconds Read passes 1 x 4 Files x 820.00 MB in 3.40 minutes


To Start


Drive Test Not Cached/Cached

Three tests were run to show differences whether data is cached [1] in RAM or written with Direct I/O [2], to avoid caching. A non-cached and a cached test used four 164 MB files, then a further cached test [3] with four 82 MB files that could fit within the 512 MB RAM. The temperature monitoring program [4] was run at the same time but, as shown below, did not show any significant increases.

System utilisation was also monitored using vmstat [5], with details when writing and reading the large files being shown below. In all tests, bi and bo show similar speeds to those measured by the benchmark, when data transfer to the drive actually takes place. CPU utilisation is quite high but the remainder, in wa (waiting for I/O) time, can be used by other processes, as proved in further tests. Comparing tests 1 and 2, the latter is slightly faster, with cache space increased and free memory reduced.

The third test has similar writing speeds to the second one. This time all data can fit in the cache, with bi shown as zero, CPU utilisation 100% and benchmark reading speeds much faster. Repetitively reading the same block produces an even higher speed increase, probably involving reading from the CPU internal cache.


 ###############################################################

 2. lxterminal -e ./burnindrive Minutes 10, Seconds 3
 4. lxterminal -e ./RPiTemperature Pases 20,  Seconds 60

 2. File size  164.00 MB x 4 files, minimum reading time 10.0 minutes

 Writing   88.56 seconds, Elapsed   88.57 seconds       =   7.4 MB/second

 Read passes  15 x 4 Files x 164.00 MB in 10.33 minutes =  15.9 MB/second

 Passes in 3 second(s) for each of 164 blocks of 64KB:

 147400 read passes of 64KB blocks in  8.30 minutes     =  18.5 MB/second

 4. Temperature Minimum = 50.3'C  Maximum = 52.5'C

 5. VMSTAT           Memory                        KB/s in/out   @@@@@ %Utilisation
       r  b   swpd   free   buff  cache   si   so    bi    bo   in   cs us sy id wa

 Write 1  1      0 342848   5746  33111    0    0     3  7486 3702 1055 13 45  0 43
 Read  1  1      0 345295   5906  33164    0    0 16235     1 6174 1317 13 13  0 74

 @@@@@ = interrupts and context switches per second

 ###############################################################

 1. lxterminal -e ./burnindrive Minutes 10, Seconds 3, Cached
 4. lxterminal -e ./RPiTemperature Pases 20,  Seconds 60

 1. File size  164.00 MB x 4 files, minimum reading time 10.0 minutes

 Writing   57.45 seconds, Elapsed   57.46 seconds       =  11.4 MB/second

 Read passes  21 x 4 Files x 164.00 MB in 10.34 minutes =  22.2 MB/second

 2694700 read passes of 64KB blocks in 8.21 minutes     = 341.9 MB/second

 4. Temperature Minimum = 50.8'C  Maximum = 54.1'C

 5. VMSTAT           Memory                        KB/s in/out   @@@@@ %Utilisation
       r  b   swpd   free   buff  cache   si   so    bi    bo   in   cs us sy id wa

 Write 0  1      0  52014   3215 327383    0    0    26 10492 1560 2488 14 33  0 54
 Read  0  1      0  11831   1209 372450    0    0 18968     5 2998  479 17 25  0 59

 ###############################################################

 3. lxterminal -e ./burnindrive Minutes 10, Seconds 3, Repeats 8, Cached
 4. lxterminal -e ./RPiTemperature Pases 20,  Seconds 60

 3. File size   82.00 MB x 4 files, minimum reading time 10.0 minutes

 Writing   25.91 seconds, Elapsed   27.44 seconds       =  12.0 MB/second

 Read passes 164 x 4 Files x  82.00 MB in 10.03 minutes =  89.4 MB/second

 2980360 read passes of 64KB blocks in 8.21 minutes     = 378.1 MB/second

 4,Temperature Minimum = 50.8'C  Maximum = 54.1'C

 5. VMSTAT           Memory                        KB/s in/out   @@@@@ %Utilisation
       r  b   swpd   free   buff  cache   si   so    bi    bo   in   cs us sy id wa

 Write 2  1      0 100726   1748 277850    0    0     1 10128 1249 1575 25 37  0 38
 Read  1  0      0  17868   1820 358952    0    0     0     5  908   67 51 49  0  0


  


To Start


Drive Test LAN Setup

My Raspberry Pi is connected to a PC Windows Workgroup via the Ethernet port. In the root directory /media, I have a new directory (mkdir public), used to replicate remote shared directories via a mount command. In my case, all mounted shares contain a directory named test. Detailed content can be seen via RPi File Manager. Commands used are shown below.

Windows [1] - Command ipconfig identifies the IP Address as 192.168.0.2, in my case. The mount command password required is the one for Raspberry Pi.

Linux [2] - This requires an ifconfig eth0 (or eth1 for me showing 192.168.0.3). In this case, Linux user name and password are needed for the mount command.

WiFi Linux - IP Address available via Wireless Properties.

The benchmark was run using drvspdLAN.sh script file, shown below [3]. IMPORTANT - The burnindrive command [4] requires the Cached parameter. Without this, the remote files cannot be written (Direct I/O cannot be used). The script file also executes commands to monitor CPU activity [5] and LAN traffic [6] at the same time. An example of average results whilst writing and reading large files is included below. This shows that data packet size averages about 1450 bytes and acknowledgement around 50 bytes [6]. Also, CPU utilisation is around 100% [5 us+sy], with a particularly high count of interrupts per second.

Cache size increased to 367 MBytes [5] (out of 512) as the benchmark was running, not large enough to contain 4 x 164 MB. In this case, most data was transferred over the LAN during the reading phase.


  sudo apt-get install sysstat

  1. Windows Mount
  IP address command ipconfig 
  sudo mount -t cifs -o dir_mode=0777,file_mode=0777 //192.168.0.2/d /media/public
  password RPi password

  2. Linux Mount
  IP address command ifconfig eth0 (or eth1) 
  sudo mount -t cifs -o user=uuu,password=ppp //192.168.0.3/all64 /media/public
  uuu and ppp are Linux user and password

  3. Script file drvspdLAN.sh
  4. lxterminal -e ./burnindrive Minutes 2, Seconds 1, Cached, FilePath /media/public/test
  5. vmstat 15 32 > vmstatLAN.txt &
  6. sar -n DEV 15 32 > sarLAN.txt


  5. vmstat           Memory KB                     KB/s in/out   @@@@@ %Utilisation
        r  b   swpd   free   buff  cache   si   so    bi    bo   in   cs us sy id wa

  Write 1  1      0  11660    892 368476    0    0     2     5 9242  494  5 95  0  0
  Read  2  1      0  12372    880 367496    0    0     0     4 5038 1006 13 84  0  3

  @@@@@ = interrupts and context switches per second


  6. sar -n DEV - Receive rx, Transmit tx, Packets pck, kBytes kB, Second s

            Time       IFACE   rxpck/s   txpck/s    rxkB/s    txkB/s

   Write    16:07:42    eth0   2312.74   4797.00    122.98   7038.53
   Read     16:09:12    eth0   8946.99   2263.29  12967.53    186.13

  


To Start


Drive Test LAN Results

Below are detailed results communicating with a Windows based PC [1], plus summaries for LAN to Linux [2], LAN to Linux WiFi [3] and LAN to Windows, using smaller file sizes [4]. For the first two, performance was similar, with writing speed for the large files just under 7 MB/second and reading speed around 11 MB/second, the latter probably approaching the maximum possible for a 100M bits per second LAN. These are somewhat less than measured by SAR (see above), where the transmitted data includes protocol overheads.

All four tests produced the same order of performance when repetitively reading the same 64KB block, where, at least after the first occurrence, the data will be cached in RAM. This was confirmed with the SAR measurements showing next no packets transmitted.

With WiFi (rated at 54 Mbps), measured writing and reading speeds were 3.1 and 3.3 MB/second, with SAR indicating averages of 3.7 and 4.6. At least, except for repetitively reading the same block, CPU utilisation was not 100%, but averaged 43% for writing and 64% on reading, the remainder being allocated to waiting for I/O.

The last test used 4 x 82 MB files (total 328 MB), with writing speed being similar to that obtained with larger files, but an average of 65.6 MB/second when reading. As shown below, cache size was large enough to contain all the data and there was negligible data received over the LAN.


 ####################################################################
 1. Windows - MB/second Write 6.8, Read 11.0

 Selected File Path: 
 /media/public/test/
 Total MB  230000, Free MB   81289, Used MB  148711

 Linux Storage Stress Test for ARM v1.0, Thu Nov 14 16:06:43 2013

 File size  164.00 MB x 4 files, minimum reading time  2.0 minutes

 File 1  164.00 MB written in   24.17 seconds 
 File 2  164.00 MB written in   23.56 seconds 
 File 3  164.00 MB written in   24.27 seconds 
 File 4  164.00 MB written in   24.00 seconds 


         Total   95.99 seconds, Elapsed   96.00 seconds

          Start Cached Reading Thu Nov 14 16:08:19 2013

 Read passes     1 x 4 Files x  164.00 MB in     0.99 minutes
 Read passes     2 x 4 Files x  164.00 MB in     1.98 minutes
 Read passes     3 x 4 Files x  164.00 MB in     2.98 minutes

        Start Cached Repeat Read Thu Nov 14 16:11:17 2013

 Passes in 1 second(s) for each of 164 blocks of 64KB:

   5680   6380   5620   6300   6200   6420   6140   6420   6280   6320   6100
   6020   5500   5780   5620   6160   6260   6200   5860   6220   5040   6080
 To
   5800   6140   4320   5640   6060   6220   6300   6140   5040   4820   6460
   5800   6300   4380   2840   2660   2940   2640   3040   5260   6420

 938700 read passes of 64KB blocks in     2.74 minutes

              End of test Thu Nov 14 16:14:02 2013

 ####################################################################
 2. Linux - MB/second Write 6.7, Read 11.1

 Selected File Path: 
 /media/public/test/
 Total MB   11263, Free MB    2237, Used MB    9026

 File 4  164.00 MB written in   24.48 seconds 

 Read passes     3 x 4 Files x  164.00 MB in     2.95 minutes

 955080 read passes of 64KB blocks in     2.74 minutes

 ####################################################################
 3. WiFi Linux - MB/second Write 3.1, Read 3.3

 Selected File Path: 
 /media/public/test/
 Total MB   23468, Free MB   18495, Used MB    4972

 File 4  164.00 MB written in   50.88 seconds 

 Read passes     1 x 4 Files x  164.00 MB in     3.32 minutes

 969440 read passes of 64KB blocks in     2.74 minutes

 ####################################################################
 4. Windows Smaller Files - MB/second Write 6.8, Read 65.6

 Selected File Path: 
 /media/public/test/
 Total MB  230000, Free MB   81289, Used MB  148711

 File 4   82.00 MB written in   12.05 seconds 

 Read passes    24 x 4 Files x   82.00 MB in     2.00 minutes

 940200 read passes of 64KB blocks in     2.74 minutes

  vmstat              Memory                        KB/s in/out   @@@@@ %Utilisation
        r  b   swpd   free   buff  cache   si   so    bi    bo   in   cs us sy id wa

  Write 1  0      0  12300   4956 369328    0    0     0     6 9783  592  4 96  0  0
  Read  2  0      0  12344   5148 369476    0    0     0     5 1158   84 14 86  0  0

  @@@@@ = interrupts and context switches per second

  sar -n DEV - Receive rx, Transmit tx, Packets pck, kBytes kB, Second s

            Time       IFACE   rxpck/s   txpck/s    rxkB/s    txkB/s

   Write    12:33:55    eth0   2473.67   5138.73    131.22   7539.42 
   Read     12:35:25    eth0      3.54      4.07      0.54      0.61 

  


To Start


Drive Test USB Setup

The benchmark was run on USB drives via an unpowered mini USB hub, with the keyboard and mouse also connected. To identify the required file path, command df -l was executed [1], with results shown below. In this case, a USB flash drive (/media/FAT) and a powered external disk drive were connected. The latter has an Ext4 formatted and bootable partition (/dev/sdd2 with the long mounted file path) and a FAT partition (/media/6449-7525).

The identified file path contents can be examined by RPi File Manager, to select a suitable directory for the test files. In the case of the Linux partition, it might be necessary to create a directory and set permissions [2]. The example below is via changing directories via /media. If required, the benchmark execution file can be copied into the selected file path directory and run from there.

Commands to run the test program, from LXTerminal pointing to the directory containing the benchmark, and in a different terminal window, are shown below [3]. In this case, each was in a script file, along with vmstat to show system utilisation.

As the benchmark identifies drive capacity, used and free space [4], it is useful to confirm that the required drive has been used, by comparing them with df -l numbers [1].


 1. Identify Drives

 pi@raspberrypi ~ $ df -l
 Filesystem   1K-blocks    Used Available Use% Mounted on

 rootfs        15037448 1855468  12552624  13% /
 /dev/root     15037448 1855468  12552624  13% /
 devtmpfs        216108       0    216108   0% /dev
 tmpfs            44876     452     44424   2% /run
 tmpfs             5120       0      5120   0% /run/lock
 tmpfs            89740       0     89740   0% /run/shm
 /dev/mmcblk0p1   57288   18552     38736  33% /boot
 /dev/sdc1     15839088      16  15839072   1% /media/FAT
 /dev/sdd2     28834812 4010500  23359584  15% /media/e918b2c6-3689-418a-a641-112b1a446de3
 /dev/sdd5     78136128 8709600  69426528  12% /media/6449-7525


 2. Create Directory and Permissions

 pi@raspberrypi /media/e918b2c6-3689-418a-a641-112b1a446de3 $ sudo mkdir temp
 pi@raspberrypi /media/e918b2c6-3689-418a-a641-112b1a446de3 $ sudo chmod 0777 temp 


 3. Benchmark Running Commands

 lxterminal -e ./burnindrive Minutes 2, Seconds 1, FilePath /media/FAT/test
 lxterminal -e ./burnindrive Minutes 2, Seconds 1, FilePath /media/6449-7525/test
 lxterminal -e ./burnindrive Minutes 2, Seconds 1,
                               FilePath /media/e918b2c6-3689-418a-a641-112b1a446de3/temp
 vmstat 15 24 > vmstatUSB.txt


 4. Confirm Correct Drive

 Total MB   15468, Free MB   15468, Used MB       0
 Total MB   76305, Free MB   67799, Used MB    8505
 Total MB   28159, Free MB   24242, Used MB    3917

  


To Start


Drive Test USB Results

Results from the three drives or partitions are shown below (USB flash drive [1], FAT disk drive [2], Linux Ext4 disk drive [3]). MB/second measured by the benchmark for reading and writing are generally confirmed by vmstat bi and bo numbers. An exception is the faster writing speed with Ext4 format, where 39 seconds running time was not appropriate with 15 second vmstat sampling.

As for the SD drive measurements, CPU utilisation is quite high but not 100%, as found with the LAN tests. It seems that writing Ext4 files is faster than FAT, but further tests are probably needed, with the same device/partition using alternative formats.


   procs -----------memory---------- ---swap-- -----io---- -system-- ----cpu----
    r  b   swpd   free   buff  cache   si   so    bi    bo   in   cs us sy id wa
 1. /media/FAT
 W  0  1      0 284368  33012  65560    0    0     0  8252 3833 1647 11 36  0 53
 R  0  1      0 283996  33256  65496    0    0 17933     1 6695 2883 14 25  0 62
 B  0  1      0 282980  33360  66140    0    0 20732     3 7462 3079  5 24  0 71

 2. /media/6449-7525
 W  2  0      0 275632  35536  67548    0    0     2 11816 5202 2366 20 53  0 27
 R  0  1      0 275384  35664  67500    0    0 14511     1 5837 2360 12 17  0 71
 B  0  1      0 275260  35808  67500    0    0 20454     5 7863 3411  5 23  0 72

 3. /media/e918b2c6-3689-418a-a641-112b1a446de3/tmp
 W  0  1      0 268328  36236  67840    0    0     3 20873 3309 3358 10 29  0 61
 R  0  1      0 268072  36364  67880    0    0 16218     1 2800 2630 10 16  0 73
 B  0  1      0 267824  36532  67880    0    0 23851     5 3627 3838  4 21  0 75

 
 1. /media/FAT
 W   Total Elapsed 4 x 164 MB 82.10 seconds    =  8.0 MB/s
 R   4 x 4 Files x  164 MB in 2.50 minutes     = 17.5 MB/s
 B   54380 x 64KB blocks in 2.83 minutes       = 20.0 MB/s

 2. /media/6449-7525 - FAT
 W   Total Elapsed 4 x 164 MB 56.80 seconds    = 11.5 MB/s
 R   3 x 4 Files x  164.00 MB in 2.29 minutes  = 14.3 MB/s
 B   54820 x 64KB blocks in 2.80 minutes       = 20.4 MB/s

 3. /media/e918b2c6-3689-418a-a641-112b1a446de3/tmp - Ext4
 W   Total Elapsed 4 x 164 MB 38.72 seconds    = 16.9 MB/s
 R   3 x 4 Files x  164.00 MB in 2.14 minutes  = 15.3 MB/s
 B   65500 x 64KB blocks in 2.80 minutes       = 24.4 MB/s

 W=Write large files, R=Read large files, B=Block re-reading 

  


To Start


USB Drive and Fixed Point Tests and Temperature

A stress test was arrange to run for up to 45 minutes, executing stressInt, fixed point test, and the USB drive test at the same time, whilst monitoring CPU temperature and system utilisation via vmstat. The test was first attempted using maximum raspi-config overclocking but this caused the system to hang. The test ran successfully, stepping overclocking down to the second highest. These settings are shown below [1,2].

In this case, the benchmarks were on the USB drive, a 16 GB Flash Drive [3]. The test programs were first run standalone, using the same 656 MB files but for a shorter time [4, 5]. The USB test had also been run at the 1000 MHz setting, where performance was virtually the same. The longer test was run using a script file, containing the first three commands shown below [6], and the integer benchmark from another LXTerminal.

Multi-tasked burnindrive speeds [7] were a bit faster than standalone measurements, but similar variations can be seen on rerunning the latter a number of times. Thus, it is fair to assume that writing and reading the USB drive was the same under multitasking.

Multi-tasked stressInt speeds [8] were 20% to 30% slower than those during standalone tests, due to part of the CPU time being allocated to service burnindrive. The latter finished first and stressInt regained its maximum reading speed.

Increases in CPU temperature [9] were not particularly significant and rose slightly when the USB drive test finished. The data transfer speeds shown in vmstat [10] were again similar to burnindrive writing and reading [11] measurements. This time, with vmstat, there was no waiting for I/O time reported, this being overlapped with stressInt execution time. Overall CPU utilisation was, of course, 100%.


 
 1. Failed    arm_freq=1000
              core_freq=500
              sdram_freq=600
              over_voltage=6

 2. Used      arm_freq=950
              core_freq=250
              sdram_freq=450
              over_voltage=6

 3. Current Directory Path: 
 /media/62ba9ec9-47d9-4421-aaee-71dd6c0f3707/home/pi/benchmarks/burndrive
 Total MB   14894, Free MB   13240, Used MB    1655

 4. By Itself ./burnindrive 

 Write  4 x 656 MB    in  221.74 seconds  = 11.8 MB/second
 Read   4 x 656 MB    in  191.40 seconds  = 13.7 MB/second
 Read   42160 x 64 KB in  174.00 seconds  = 15.1 MB/second  


 5. By Itself  ./stressInt 8 KB

 Write/Read  average  1298 MB/second
 Repeat Read average  1404 MB/second

 MultiTasking Commands

 6. Commands
 lxterminal -e ./stressInt Seconds 220, log 2
 lxterminal -e ./RPiTemperature Pases 90,  Seconds 30
 vmstat 30 90 > vmburn.txt

 ./burnindrive Repeats 64, Minutes 10, Seconds 5

 7. ./burnindrive - 1775 seconds 

 Write  4 x 656 MB    in  200.55 seconds  = 13.1 MB/second
 Read  16 x 656 MB    in  744.80 seconds  = 14.1 MB/second
 Read  204580 x 64 KB in  830.40 seconds  = 15.6 MB/second  

 8. ./stressInt - 8 KB 2640 seconds

 Write/Read  average   927 MB/second
 Repeat Read average  1089 MB/second
 Repeat Read average  1455 MB/second after burnindrive finished


 9. Temperature               10. vmstat            11. burnindrive

  Minutes    'C         bi    bo   in   cs  us sy id wa  

     0       48.7      331     8 1559  269  11  9 70  9     Start
     5       56.2        0 13483 5635 1987  78 22  0  0     Write
    10       57.3    14505     3 5914 2123  82 18  0  0     Read
    15       57.3    14500     4 5915 2124  81 20  0  0     Read
    20       57.3    15821     8 6334 2319  80 20  0  0  Repeat Read
    25       57.3    15629     6 6299 2293  90 10  0  0  Repeat Read
    30       58.9     6076    17 3404  960  94  6  0  0    Finished
    35       59.5        0     5 1555   99  99  1  0  0
    40       59.5        0     4 1555   99 100  0  0  0
    45       54.1        0     7 1475  103   2  1 86 11

  


To Start


Paging Tests - Using stressInt

Paging tests were run using stressInt by specifying increasing memory space demands (KBytes run time parameter), such that initially occupied space is swapped out to a drive, the default being the SD card, and some will be swapped back in, if needed. Particularly with a program accessing increasing amounts of data, some or all will also be swapped out and in.

Results reported here [2] were for memory demands of 350, 400 and 420 MBytes, at normal speed and maximum overclocking settings. An extra 600 MB test was run at the lower settings, to demand more space than the 512 MB RAM. The vmstat monitor was run at the same time [3], providing system usage statistics. Commands used to run these programs are shown below [1]. As the running time was generally unpredictable, vmstat was arranged to log 10 second samples, in its own Terminal, and killed when stressInt finished.

At these sizes, running time is much longer than that specified by the normal time parameter, leading to all write and read phases each executing one pass. Running time [2] for the Write/Read phase was calculated from data transfer speeds. Total time, from reported start and stop date/time, appears to be longer than might be expected, but it includes an extra Write/Read/Check test before what could be repeat reading, also an extra read pass, intended for calibrating repeats.

At 350 MB, there is no swapping, but cache and buffer sizes are reduced, slowing down the first write pass. Data transfer speed on overclocking averages 1.57 times faster than with no overclocking, mainly influenced by memory speed differences.

During the first write pass at 400 MB, buffer and cache sizes are further reduced and 40 to 60 MB swapped out, with lots of swaps in and out [Part 1]. At this stage, performance is dependent on speed of the SD card. By the time of the third write test, performance again becomes proportional to system MHz settings, with some system data still swapped out [Part 2].

With data size of 420 MB, there is continuous swapping in and out. Program data demands of 6 x 420 MB or 2.52 GB give rise to 10.4 GB being written or read from the SD card swap file (from average KB in and KB out). There is also a continuous 50% to 80% waiting time for I/O. Bottom line is a speed reduction of 8 to 10 times at 700 MHz, compared with no swapping, and 14 to 17 times with maximum overclocking.

A run was attempted at 500 MB, but the program indicated that there was insufficient memory for this. Then noticing, from vmstat, that maximum swapped out data was less than 100 MB, swap file size was checked via free -h command and it was 100 MB. The file size was changed to 1000 MB (CONF_SWAPSIZE=1000 in /etc/dphys-swapfile). A test was then run, specifying 600 MB, at default MHz settings. Note vmstat [3] shows a maximum of 522 MB swapped. Here, speed is 18 to 22 times slower than with no swapping and 40 GB data is transferred. This run lasted for 51 minutes, not a bad stress test.

The tests were firstly run with the system using a SanDisk Extreme Pro microSDHC UHS-1 Class 10 card (rated at up to 633X or 95 MB/second). A final test used a Verbatim Class 10 card, at 700 MHz and 420 MB data size (SD Card 2). The former was more than twice as fast but using correspondingly increased CPU utilisation.


 
 1. Commands

 lxterminal -e ./stressInt KB 600000
 vmstat 10 > vmburn4.txt

    
 2. Results              MHz                                         MHz
                   CPU   700                                  CPU   1000
                   Core  250                                  Core   500
                   SDRAM 400                                  SDRAM  600

                                  MBytes Per Second At MB Data Size 

    SD Card          1      1      1      1      1      2       1      1      1      1
         MB        350    400    400    420    600    420     350    400    400    420
 Write/Read No.
             1     139     24            15     14      6     217     25            15
             2     209    181            16      8     17     332    157             9
             3     206    203            24      8     13     325    318            23
             4     206    204            26      8     10     327    318            17
             5     202    205            18      8      8     325    323            21
             6     206    205            20      8     12     326    323            27

 Write/Rd secs    19.6   48.4         204.9  460.7  406.4    12.4   43.3         234.8

 Read       No.
             1     158    159            20      9      8     252    249            25
             2     158    159            14      9      8     251    242            25
             3     159    159            39      8      4     251    251            27
             4     160    155             9      9      7     251    253            13
             5     159    160            25      9      5     252    251             9
             6     160    159            10      9      9     253    233             9

 Total secs         85    125          1082   3085   2560      54     94          1209

 3. vmstat
                       Part 1 Part 2                              Part 1 Part 2
 Memory KB
 Max swapped         8  42216  40912  93204 522500 100288       0  58300  34848  98408
 Min free        11764   9224  11628   8196   8084   8080   11756   8432   8848   8204
 Min buffer         88     44     60     44     44     44     560     44     44     44
 Min cache       18868   4788   5228   1540   2260   1616   21296   4272   4452   1204
 Per second
 Max KB swaps in     0   4477      3   7186  13382   5070       0   4399      3   7888
 Max KB swaps out    0   5600      0   6861  11576   4980       0   7918    115   7420
 Max KB in          16   5059     21  11246  14398   7362       9   7993    966   9794
 Max KB out          7   5602      3   6864  11583   4985      10   7920    118   7428
 Max interrupts   1163   3313   1167   6164   6989   4853     791   3499   1180   5388
 Max context sw     71    992     69   1680   2281   1016     250   1281    198   1575
 % Utilisation
 User              100     60    100     19      7      6      98     21     99      9
 System              0     10      1     19     23     13       2     19      1     21
 Idle                0      0      0      0      0      0      14      7      0      0
 Wait I/O            0     31      0     60     70     82       0     54      0     69

  


To Start


Assembly Code

Following are details of compiled assembly code for stressInt Fixed Point Test.


 Compile command to produce full listing is cc stressint.c -lrt -lc -lm -O3 -S

  writeData:           errorcheck:          errorcheck:          readData:
                                            part 2
  .L3:                 .L10:                                     .L40:
  strr2, [r3, #32]     ldrr2, [r3, #16]     orrr8, r8, r4        ldrr9, [r3, #32]
  strr2, [r3, #36]     ldrip, [r3, #20]     andr6, r6, r4        ldrr8, [r3, #36]
  strr2, [r3, #40]     ldrr1, [r3, #4]      andr7, r7, r2        ldrsl, [r3, #48]
  strr2, [r3, #44]     ldrr8, [r3, #0]      orrr8, r8, ip        ldrr7, [r3, #52]
  strr1, [r3, #48]     ldrfp, [r3, #24]     orrr2, r1, r9        addsl, r9, sl
  strr1, [r3, #52]     orrsl, r2, ip        andr6, r6, ip        addr7, r8, r7
  strr1, [r3, #56]     andip, r2, ip        ldrr1, [r3, #92]     ldrr8, [r3, #16]
  strr1, [r3, #60]     ldrr0, [r3, #8]      ldrfp, [r3, #72]     addr1, sl, r1
  strr2, [r3, #64]     ldrr2, [r3, #28]     andr7, r7, r9        ldrr6, [r3, #40]
  strr2, [r3, #68]     orrr9, r8, r1        orrr8, r8, r0        ldrr5, [r3, #56]
  strr2, [r3, #72]     orrr4, sl, r4        orrr9, r2, sl        rsbr1, r8, r1
  strr2, [r3, #76]     andr8, r8, r1        andr6, r6, r0        ldrr8, [r3, #20]
  strr1, [r3, #80]     andip, ip, r6        ldrr2, [r3, #112]    addr0, r7, r0
  strr1, [r3, #84]     ldrr1, [r3, #12]     ldrr5, [r3, #76]     addr5, r6, r5
  strr1, [r3, #88]     orrr5, r9, r5        ldrip, [r3, #116]    ldrfp, [r3, #44]
  strr1, [r3, #92]     andr7, r8, r7        andr7, r7, sl        ldrr6, [r3, #60]
  strr2, [r3, #96]     ldrr9, [r3, #48]     orrr8, r8, r1        rsbr0, r8, r0
  strr2, [r3, #100]    orrr8, r4, fp        andr6, r6, r1        ldrr8, [r3, #24]
  strr2, [r3, #104]    andip, ip, fp        ldrr4, [r3, #96]     addr4, r5, r4
  strr2, [r3, #108]    ldrsl, [r3, #32]     orrr9, r9, fp        addfp, fp, r6
  strr1, [r3, #112]    ldrr4, [r3, #52]     andr7, r7, fp        rsbr4, r8, r4
  strr1, [r3, #116]    orrr5, r5, r0        orrr8, r8, r2        ldrr8, [r3, #28]
  strr1, [r3, #120]    orrr8, r8, r2        andr6, r6, r2        ldrr5, [r3, #8]
  strr1, [r3, #124]    andip, ip, r2        ldrsl, [r3, #100]    addip, fp, ip
  strr2, [r3, #128]    ldrr6, [r3, #56]     orrr9, r9, r5        rsbip, r8, ip
  strr2, [r3, #132]    andr7, r7, r0        andr7, r7, r5        ldrr8, [sp, #4]
  strr2, [r3, #136]    orrr5, r5, r1        orrr8, r8, ip        ldrr6, [r3, #0]
  strr2, [r3, #140]    ldrr0, [r3, #36]     andr6, r6, ip        ldrr7, [r3, #4]
  strr1, [r3, #144]    orrr8, r8, r9        ldrip, [sp, #0]      ldrr9, [r3, #12]
  strr1, [r3, #148]    andip, ip, r9        ldrr0, [r3, #104]    addr2, r2, #1
  strr1, [r3, #152]    ldrfp, [r3, #40]     orrr9, r9, r4        rsbr4, r5, r4
  strr1, [r3, #156]    andip, ip, r4        andr7, r7, r4        ldrr5, [sp, #8]
  ldrip, [r4, #0]      andr7, r7, r1        addip, ip, #1        cmpr2, r8
  addr0, r0, #1        orrr8, r8, r4        orrr9, r9, sl        rsbr1, r6, r1
  cmpr0, ip            orrr1, r5, sl        andr7, r7, sl        rsbr0, r7, r0
  addr3, r3, #128      ldrr5, [r3, #60]     ldrr1, [r3, #120]    rsbip, r9, ip
  bcc.L3               ldrr2, [r3, #44]     ldrfp, [r3, #108]    addr3, r3, r5
                       ldrr4, [r3, #80]     ldrr2, [r3, #124]    bne.L40
                       andr7, r7, sl        orrr9, r9, r0
                       orrr1, r1, r0        andr7, r7, r0
                       orrr8, r8, r6        strip, [sp, #0]
                       andr6, ip, r6        ldrr0, [sp, #4]
                       ldrr9, [r3, #64]     orrr8, r8, r1
                       ldrip, [r3, #84]     andr6, r6, r1
                       andr7, r7, r0        cmpip, r0
                       orrr1, r1, fp        orrr5, r9, fp
                       orrr8, r8, r5        orrr4, r8, r2
                       andr6, r6, r5        andr7, r7, fp
                       ldrsl, [r3, #68]     andr6, r6, r2
                       ldrr0, [r3, #88]     addr3, r3, #128
                       andr7, r7, fp        bne.L10
                       orrr1, r1, r2

   2 add                34 and                                   10 add
   1 branch              1 branch                                 1 branch
   1 compare             1 compare                               18 load
  33 store              34 load                                   8 subtract
                        32 or
                         1 strip

  37 total             103 total                                 37 total

  


To Start


Roy Longbottom at Linkedin Roy Longbottom June 2014



The Official Internet Home for my Benchmarks is via the link
Roy Longbottom's PC Benchmark Collection