Rockbox mail archive
Subject: Performance framework
I am currently running some tests on the read/write performance of the
fuze+ after someone reported some poor read speed compared to the actual
card capacity. After troubleshooting some of the issues I realised that
some of the *loss* was actually coming from the latencies between our
different subsystems (usb, storage) and thus hard to track down without
I know we have profiler option but it is not very useful if you want some
relevant number so I decided to create my own performance framework to
report relevant events. My approach is that each event should contain the
minimum information to make useful statistics offline. Example:
- on event when storage_read_sectors in called, containing the drive number
and sector count
- on event when returning from storage_read_sectors, containing the drive
Why is this useful ? Well you can get lots of information out it, for
example draw the average read speed depending on the sector count, also get
min and max speed and so on.
next step will be to record USB events like:
- control/bulk/int transfer completed in usb driver
- control/bulk/int transfer handled by stack
- UMS read/write handled by usb storage driver
And with this plus the previous information, you can get the actual
latencies from core driver to stack to function drivers to storage.
If you have any thoughts on this or actual ideas of things to measure,
please give me some feedback ! That would be great to figure out some of
performance problems and just get some useful statistics.
Currently the code is not published, it needs a lot of cleanup. There will
be a configure option for it and maybe we can have some runtime on/off
switches for subsystems like storage, usb or whatever.
Received on 2013-08-16
Page was last modified "Jan 10 2012" The Rockbox Crew