[U-Boot] usb_test_unit_ready called every block read - performance

Marek Vasut marek.vasut at gmail.com
Sun Aug 19 01:17:15 CEST 2012


Dear Steve Heckman,

> Oh yeah, forgot about that...;)
> 
> I just downloaded the ext4 branch tarball and built it.
> 
> The test_unit_ready calls were still in there.
> 
> With or without those it took 0m 45s to load a ~150MB image.
> 
> In our original branch (2011.12), the test_unit_ready calls had more of an
> impact. The stock 2011.12 u-boot image took 6m 22s to load the 150MB file.
> Without test_unit_ready, it took 3m 15s. Without test_unit_ready and
> wait_ms(5) in usb_stor_BBB_transport() it took 0m 16s.
> 
> In the ext4 branch, I removed test_unit_ready and the mdelay(5) call
> from usb_stor_BBB_transport() function and was able to load the same file
> in 0m 8s.
> 
> So, removing the mdelay(5) call is the biggest improvement. Removing both
> is the best.
> 
> To recap:
> 
>         with w/o  w/o
>         TUR  TUR  TUR and 5ms wait
> 2011.12 6:25 3:15 0:16
> ext4    0:45 0:45 0:08
> 
> Note: all these time include the 3-4 seconds it takes to do the "usb
> start".

Coolness ! :-) Please just retest by applying those ext4 patches on top of uboot 
usb and see how fast it goes :)

> Regards,
> -Steve
> 
> On Wed, Aug 15, 2012 at 10:19 AM, Jim Shimer <mgi2475 at motorola.com> wrote:
> > Hi Marek,
> > 
> > I looked at the ext4 branch.  It looks like he has the patch to remove
> > the usb_test_unit_ready() calls which were not needed. Actually those
> > calls are commented out on that branch:
> > #if 0
> > 
> >         if (usb_test_unit_ready(srb, ss)) {
> >         
> >                 printf("Device NOT ready\n   Request Sense returned %02X
> > 
> > %02X"
> > 
> >                        " %02X\n", srb->sense_buf[2], srb->sense_buf[12],
> >                        
> >                         srb->sense_buf[13]);
> >                 
> >                 return 0;
> >         
> >         }
> > 
> > #endif
> > 
> > In the u-boot-usb.git, this code is removed so at some point there will
> > be a merge conflict.
> > 
> > Also the ext4 branch still has the mdelay(5) always being done in
> > usb_stor_BBB_transport() line 696 which we found to be the largest
> > performance killer.
> > 
> > Regards,
> > Jim
> > 
> > On Sun, Aug 12, 2012 at 7:54 PM, Marek Vasut <marex at denx.de> wrote:
> >> Dear Jim Shimer,
> >> 
> >> > While tuning ext2load, we found that usb_test_unit_ready was being
> >> 
> >> called
> >> 
> >> > every block read.  We compared the usb block storage to the scsi block
> >> > storage cmd_scsi.c, and found that the scsi device was only calling
> >> > its scsi_setup_test_unit_ready() during scsi_can.  It appears that
> >> > usb_test_unit_ready() really only needs to be called once during
> >> > usb_stor_scan(), via usb_stor_get_info().   Is there a particular
> >> > reason usb_test_unit_ready is called for every block read, or do you
> >> > think its
> >> 
> >> ok
> >> 
> >> > to only call during usb_stor_scan()?  We're finding this speeds up
> >> 
> >> ext2load
> >> 
> >> > quite a bit.
> >> 
> >> Jim, did we get anywhere on this one ? Can you try with the new ext4
> >> code in
> >> Wolfgangs' u-boot-master/ext4 branch?
> >> 
> >> > Regards,
> >> > Jim
> >> 
> >> Best regards,
> >> Marek Vasut
> > 
> > --
> > *James H Shimer*
> > Motorola Mobility T3-12-HH72
> > 900 Chelmsford Street
> > Lowell MA 08151
> > 978-614-3550


More information about the U-Boot mailing list