On Mon, 28 Oct 2013, Chris McClelland wrote:

> > It seems clear from the traces that this isn't a problem in libusb.
> 
> Agreed. But (a) I needed someone to sanity-check my approach using the
> async API, and (b) I knew that you look at this list, and I hoped you might
> have some suggestions. And you did!
> 
> OK so I tried a few things:
> 
> 1) Rather than read the SDRAM, have the FPGA just send back 16MiB of zeros.
> With this, I could NOT get it to fail. From the USB perspective, the only
> difference is the produce-rate of IN packets: without the SDRAM reads, the
> FPGA can produce data at about twice as fast, fast enough to saturate an
> otherwise-idle bus. Why that should make a difference I don't know.
> 
> 2) Try exactly the same host code and firmware, but a completely different
> PCB, also with a 16MiB SDRAM. With this, the failure happens much earlier -
> whilst the FPGA is being programmed in fact.
> 
> 3) Try different cables. No change.
> 
> 4) Try a different port on the hub. Surprisingly, this fixed it, albeit at
> a reduced throughput.
> 
> 
> > Have you noticed any difference in the time it takes the program to run
> > with the hub present compared to a direct connection?  If it takes
> > longer with the hub, that's a good indication you're getting a lot of
> > failures and retries.
> 
> Not significantly slower.

Operating on the other port must have been significantly slower than a 
direct connection.  Otherwise you wouldn't have mentioned the reduced 
throughput.

>  Here are some timings (from gettimeofday()) for
> the direct connection, in microseconds per 64KiB chunk, firstly eight runs
> of reading back 1GiB of zeros, and secondly four runs of reading back 16MiB
> from SDRAM:
> 
> Direct connection (uS/64KiB), readback zeros (doesn't fail):
>      0     1     2     3     4     5     6     7
> max: 12369 20450 17668 14060 20200 20706 13874 16654
> min: 924   893   956   919   917   918   938   940
> avg: 1818  1829  1833  1827  1830  1828  1830  1833
> 
> Direct connection (uS/64KiB), readback from SDRAM (doesn't fail):
>      0     1     2     3
> max: 20393 10668 12718 16280
> min: 880   894   869   874
> avg: 2942  2853  2888  2871
> 
> And here are the same timings for the connection via the hub (using the
> original port, so the four SDRAM readback tests failed to read the last
> chunk, but the eight read-zeros succeeds):
> 
> Connection via hub (uS/64KiB), readback zeros (doesn't fail):
>      0     1     2     3     4     5     6     7
> max: 13997 15339 13518 19416 17600 19487 15494 13272
> min: 908   896   913   943   916   906   933   924
> avg: 1949  1960  1962  1961  1960  1958  1962  1968
> 
> Connection via hub (uS/64KiB), readback from SDRAM (DOES fail):
>      0     1     2     3
> max: 10227 12610 18895 11823
> min: 950   910   1006  897
> avg: 3009  3099  3007  3050
> 
> 
> > Maybe it's not the hub itself but one of the USB cables or connections.
> > Have you tried using a different brand of hub?  Maybe a powered hub?
> 
> I tried several different cables, which made no difference, and a different
> port on the hub, which DID make a difference (no more hangs, but the
> throughput is reduced to about 10MiB/s compared to about 17MiB/s with the
> original port). The hub itself is powered.
> 
> To be honest I'm beginning to think my hub is just not very good, or
> perhaps not very compliant. It works fine on x64 Linux and Windows, but has
> what appear to be timing-dependent intermittent issues with the RPi. Also,
> the RPi itself has in the past had almost unusable USB support, which has
> improved enormously with successive Raspbian releases. I'll buy a couple of
> other hubs and see if they're any better, but as to my original fear that
> this is some systemic problem with my code that will affect other platforms
> in time: I suspect those fears are unfounded.

Okay.  Good luck!

Alan Stern


------------------------------------------------------------------------------
October Webinars: Code for Performance
Free Intel webinars can help you accelerate application performance.
Explore tips for MPI, OpenMP, advanced profiling, and more. Get the most from 
the latest Intel processors and coprocessors. See abstracts and register >
http://pubads.g.doubleclick.net/gampad/clk?id=60135991&iu=/4140/ostg.clktrk
_______________________________________________
libusbx-devel mailing list
libusbx-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/libusbx-devel

Reply via email to