2012-09-11 - More USB Testing
Jamey, Sarah and Theo did one last round of heroic USB latency testing.
We noticed that the FC spends a lot of time in SMP APIC interrupt. So we tried turning off
config_no_hz. It made things worse ... we think. We didn't get very detailed analysis.
Takeaway: it's not USB (the bus) that's "the problem". There is some slow stuff (~100's μs) in usbfs. The completion callback gets called very quickly. So it's probably not hardware, host controller driver, and usb core (they're good enough). The usbfs completion callback is slower than we like, but isn't the biggest source of delay. Biggest source of delay is coming out of idle and handling timers.
Once you're logged into the flight computer run
$ telinit 4
to free up the serial port for other uses.
The ftraces are in :
/root/traces/<date of test>
Here's a graph of where the time is going:
Here, have a fragment of function-tracer output showing:
- the CPU coming out of idle,
- a USB host controller interrupt being handled,
- returning to the userspace test app,
- and running all the syscalls in the test app's completion handler.