(WIP) Wii U SD benchmark utility

Discussion in 'Wii U - Hacking & Backup Loaders' started by Yardape8000, May 15, 2016.

  1. Yardape8000
    OP

    Yardape8000 GBAtemp Regular

    Member
    289
    277
    Feb 26, 2011
    United States
    I wrote up a quick SD benchmark utility for the homebrew launcher.

    Before use:
    Run the createFiles.bat file in the sdtest/data folder.
    This will create the 1.2GB of test files. Run it from the SD card.
    Sorry I assume it's windows only.
    The batch file should create the files the quickest if ran on the SD card.
    Download the sdtest_full.zip if you cannot get the bat file in the sdtest.zip file to work.
    Unzip to hard drive the copy to SD.

    Code
    Releases

    It tests random reads of 1k, 10k, 100k & 1M files.

    It also does a test to see what happens if a program such as loadiine put all files in 1 larger uncompressed file. This would save on multiple file open/close and other SD slowdowns. These tests do not reflect the overhead of looking of the files in a table to know where they reside in the large file, but I do not think the overhead would slow things down greatly.

    1k in 1M tests the speed of accessing 1000 random 1k blocks in a 1M file.
    10k in 10M tests the speed of accessing 1000 random 10k blocks in a 10M file.
    etc,
    1k in 10M tests the speed of accessing 10000 random 1k blocks in a 10M file.

    A testdata.txt result file is saved in the sdtest folder

    Here are some benchmarks on my cards.

    I believe they show that you just need to buy a quality card. Class 10 is not any faster then Class 4. The Patriot Class 10 is actually a lot slower. I will never buy Patriot again. The main reason for a class 10 is the speed to transfer files for a PC to the card.

    There also seems to be little benefit from using 64k clusters, as compared to a 3DS where it is noticeably quicker.

    Samsung EVO+ 64G Class 10 U1 I, 32k clusters
    Warning: Spoilers inside!

    SanDisk Ultra 128G Class 10 U1 I, 32k clusters
    Warning: Spoilers inside!

    SanDisk Ultra 128G Class 10 U1 I, 64k clusters
    Warning: Spoilers inside!

    SanDisk Ultra 200G (full), 32k clusters
    Warning: Spoilers inside!

    Toshiba 4G Class 4 (from 3DS), 4k clusters
    Warning: Spoilers inside!

    Patriot 128GB Class 10 U1 I, 32k clusters
    Very disappointing for a U1 card. Loading times are extremely noticeably slower.
    Warning: Spoilers inside!
     

    Attached Files:

    Last edited by Yardape8000, May 15, 2016 - Reason: uploaded v0.2 - fixed timers
    Antonio Ricardo likes this.
  2. smileyhead

    smileyhead Bow ties are cool.

    Member
    GBAtemp Patron
    smileyhead is a Patron of GBAtemp and is helping us stay independent!

    Our Patreon
    2,425
    5,022
    Aug 31, 2015
    Hungary
    Budakeszi, Hungary
    Not necessarily. Linux users can use BAT files with Wine. :)
     
  3. proflayton123

    proflayton123 悲しみ

    Member
    5,608
    2,057
    Jan 11, 2016
    Japan
    日本
    Nice works ^~^
     
  4. Jojse

    Jojse GBAtemp Regular

    Member
    172
    31
    Jan 28, 2006
    Thanks for this, nice to see what card to use with wiiu...
     
  5. Maschell

    Maschell GBAtemp Advanced Fan

    Member
    887
    1,282
    Jun 14, 2008
    Gambia, The
    You can just provide the files within the archive. They should be just a few KB compressed
     
  6. Yardape8000
    OP

    Yardape8000 GBAtemp Regular

    Member
    289
    277
    Feb 26, 2011
    United States
    The bat file should make the files quicker.
    Maybe tomorrow I'll add another zip with them included. Added sdtest_full.zip, but I recommend the original sdtest.zip with the bat file for speed of file creation.
    Some users may also have problems with the administrative rights with the batch file.
     
    Last edited by Yardape8000, May 15, 2016
  7. Yardape8000
    OP

    Yardape8000 GBAtemp Regular

    Member
    289
    277
    Feb 26, 2011
    United States
    New version with fixed timers has been updated in the main post.
    90MBs rates were completely wrong.
    There are also results from Class 4 and 64k clusters, along with my interpretation of the results.

    I was having problems getting timers to work. Here are my notes in case anyone has ideas on how to fix them.
    For now I just check the OSGetTick after every read and keep track of when it rolls over.

    extern u64 (* OSGetTick)(void);
    is really 32bit. The high 32 bits (0xFFFFFFFF00000000) are the tick count.
    The low bits (0x00000000FFFFFFFF) are a constant value of 1.
    1 second = 248625000/4 ticks.
    The count rolls over at 69s.

    clock() will compile but does not link. problem with _times_r

    time(time_t *_timer) and gettimeofday(struct timeval *__p, void *__tz) do not seem to change in value often. Being time values, they should change after sleep(1)