Hacking (WIP) Wii U SD benchmark utility

Ape8000

Well-Known Member
OP
Member
Joined
Feb 26, 2011
Messages
296
Trophies
1
XP
1,031
Country
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
1k byte = 3.14 s, 0.32 MBps
10k byte = 4.38 s, 2.28 MBps
100k byte = 15.86 s, 6.31 MBps
1M byte = 118.66 s, 8.43 MBps
1k byte in 1M = 1.63 s, 0.61 MBps
10k byte in 10M = 2.28 s, 4.39 MBps
100k byte in 100M = 16.98 s, 5.89 MBps
1M byte in 1G = 150.81 s, 6.63 MBps
1k byte in 10M = 21.85 s, 0.46 MBps

SanDisk Ultra 128G Class 10 U1 I, 32k clusters
1k byte = 2.88 s, 0.35 MBps
10k byte = 3.95 s, 2.53 MBps
100k byte = 14.13 s, 7.08 MBps
1M byte = 107.40 s, 9.31 MBps
1k byte in 1M = 1.58 s, 0.63 MBps
10k byte in 10M = 2.26 s, 4.42 MBps
100k byte in 100M = 16.95 s, 5.90 MBps
1M byte in 1G = 149.93 s, 6.67 MBps
1k byte in 10M = 22.74 s, 0.44 MBps

SanDisk Ultra 128G Class 10 U1 I, 64k clusters
1k byte = 2.92 s, 0.34 MBps
10k byte = 3.96 s, 2.53 MBps
100k byte = 14.10 s, 7.09 MBps
1M byte = 107.04 s, 9.34 MBps
1k byte in 1M = 1.50 s, 0.67 MBps
10k byte in 10M = 2.45 s, 4.08 MBps
100k byte in 100M = 16.66 s, 6.00 MBps
1M byte in 1G = 147.60 s, 6.78 MBps
1k byte in 10M = 26.20 s, 0.38 MBps

SanDisk Ultra 200G (full), 32k clusters
1k byte = 2.96 s, 0.34 MBps
10k byte = 4.01 s, 2.49 MBps
100k byte = 14.62 s, 6.84 MBps
1M byte = 111.19 s, 8.99 MBps
1k byte in 1M = 1.55 s, 0.65 MBps
10k byte in 10M = 2.27 s, 4.41 MBps
100k byte in 100M = 17.45 s, 5.73 MBps
1M byte in 1G = 155.33 s, 6.44 MBps
1k byte in 10M = 23.80 s, 0.42 MBps

Toshiba 4G Class 4 (from 3DS), 4k clusters
1k byte = 2.84 s, 0.35 MBps
10k byte = 3.88 s, 2.58 MBps
100k byte = 13.91 s, 7.19 MBps
1M byte = 104.25 s, 9.59 MBps
1k byte in 1M = 1.48 s, 0.68 MBps
10k byte in 10M = 2.14 s, 4.67 MBps
100k byte in 100M = 16.50 s, 6.06 MBps
1M byte in 1G = 149.52 s, 6.69 MBps
1k byte in 10M = 21.03 s, 0.48 MBps

Patriot 128GB Class 10 U1 I, 32k clusters
Very disappointing for a U1 card. Loading times are extremely noticeably slower.
1k byte = 3.85 s, 0.26 MBps
10k byte = 4.85 s, 2.06 MBps
100k byte = 17.31 s, 5.78 MBps
1M byte = 135.15 s, 7.40 MBps
1k byte in 1M = 2.08 s, 0.48 MBps
10k byte in 10M = 2.87 s, 3.48 MBps
100k byte in 100M = 21.67 s, 4.61 MBps
1M byte in 1G = 192.42 s, 5.20 MBps
1k byte in 10M = 30.49 s, 0.33 MBps
 

Attachments

  • sdtest.zip
    36.2 KB · Views: 190
  • sdtest_full.zip
    1.5 MB · Views: 193
Last edited by Ape8000, , Reason: uploaded v0.2 - fixed timers

Ape8000

Well-Known Member
OP
Member
Joined
Feb 26, 2011
Messages
296
Trophies
1
XP
1,031
Country
United States
You can just provide the files within the archive. They should be just a few KB compressed
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 Ape8000,

Ape8000

Well-Known Member
OP
Member
Joined
Feb 26, 2011
Messages
296
Trophies
1
XP
1,031
Country
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)
 

Site & Scene News

Popular threads in this forum

General chit-chat
Help Users
  • No one is chatting at the moment.
    K3Nv2 @ K3Nv2: https://youtu.be/MddR6PTmGKg?si=mU2EO5hoE7XXSbSr