* [U-Boot] usb_test_unit_ready called every block read - performance
@ 2012-07-30 19:18 Jim Shimer
2012-07-30 22:54 ` Marek Vasut
2012-08-12 23:54 ` Marek Vasut
0 siblings, 2 replies; 16+ messages in thread
From: Jim Shimer @ 2012-07-30 19:18 UTC (permalink / raw)
To: u-boot
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.
Regards,
Jim
--
*James H Shimer*
Motorola Mobility T3-12-HH72
900 Chelmsford Street
Lowell MA 08151
978-614-3550
^ permalink raw reply [flat|nested] 16+ messages in thread
* [U-Boot] usb_test_unit_ready called every block read - performance
2012-07-30 19:18 [U-Boot] usb_test_unit_ready called every block read - performance Jim Shimer
@ 2012-07-30 22:54 ` Marek Vasut
2012-07-30 23:35 ` Jim Shimer
2012-08-12 23:54 ` Marek Vasut
1 sibling, 1 reply; 16+ messages in thread
From: Marek Vasut @ 2012-07-30 22:54 UTC (permalink / raw)
To: u-boot
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.
Could it be because the USB is actually quite slower than SCSI and the device
might get congested? It seems the code was there ever since (I can't seem to
find the origin of it) and we might actually want to try if this doesn't break
some usb 1.x things.
> Regards,
> Jim
Best regards,
Marek Vasut
^ permalink raw reply [flat|nested] 16+ messages in thread
* [U-Boot] usb_test_unit_ready called every block read - performance
2012-07-30 22:54 ` Marek Vasut
@ 2012-07-30 23:35 ` Jim Shimer
2012-07-30 23:41 ` Marek Vasut
0 siblings, 1 reply; 16+ messages in thread
From: Jim Shimer @ 2012-07-30 23:35 UTC (permalink / raw)
To: u-boot
Marek,
I don't have a USB 1.x device to do that regression. Taking the call to
usb_test_unit_ready out of the block reads/writes and leaving it only in
get info really speed up ext2load. With the recent cache changes on top of
this and the 5ms delay, we're getting fairly close to the Linux USB
transfer times and are happy with the results. Can you look into
integrating this?
-Jim
On Mon, Jul 30, 2012 at 6:54 PM, Marek Vasut <marex@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.
>
> Could it be because the USB is actually quite slower than SCSI and the
> device
> might get congested? It seems the code was there ever since (I can't seem
> to
> find the origin of it) and we might actually want to try if this doesn't
> break
> some usb 1.x things.
>
> > Regards,
> > Jim
>
> Best regards,
> Marek Vasut
>
--
*James H Shimer*
Motorola Mobility T3-12-HH72
900 Chelmsford Street
Lowell MA 08151
978-614-3550
^ permalink raw reply [flat|nested] 16+ messages in thread
* [U-Boot] usb_test_unit_ready called every block read - performance
2012-07-30 23:35 ` Jim Shimer
@ 2012-07-30 23:41 ` Marek Vasut
2012-07-31 2:17 ` Jim Shimer
0 siblings, 1 reply; 16+ messages in thread
From: Marek Vasut @ 2012-07-30 23:41 UTC (permalink / raw)
To: u-boot
Dear Jim Shimer,
> Marek,
>
> I don't have a USB 1.x device to do that regression. Taking the call to
> usb_test_unit_ready out of the block reads/writes and leaving it only in
> get info really speed up ext2load. With the recent cache changes on top of
> this and the 5ms delay, we're getting fairly close to the Linux USB
> transfer times and are happy with the results. Can you look into
> integrating this?
Can you send a patch that'll yank it out? I should be able to test it in a bit.
> -Jim
>
> On Mon, Jul 30, 2012 at 6:54 PM, Marek Vasut <marex@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.
> >
> > Could it be because the USB is actually quite slower than SCSI and the
> > device
> > might get congested? It seems the code was there ever since (I can't seem
> > to
> > find the origin of it) and we might actually want to try if this doesn't
> > break
> > some usb 1.x things.
> >
> > > Regards,
> > > Jim
> >
> > Best regards,
> > Marek Vasut
Best regards,
Marek Vasut
^ permalink raw reply [flat|nested] 16+ messages in thread
* [U-Boot] usb_test_unit_ready called every block read - performance
2012-07-30 23:41 ` Marek Vasut
@ 2012-07-31 2:17 ` Jim Shimer
2012-07-31 4:43 ` Wolfgang Denk
2012-08-14 17:50 ` Marek Vasut
0 siblings, 2 replies; 16+ messages in thread
From: Jim Shimer @ 2012-07-31 2:17 UTC (permalink / raw)
To: u-boot
Hi Marek,
Here's a patch.
-Jim
On Mon, Jul 30, 2012 at 7:41 PM, Marek Vasut <marek.vasut@gmail.com> wrote:
> Dear Jim Shimer,
>
> > Marek,
> >
> > I don't have a USB 1.x device to do that regression. Taking the call to
> > usb_test_unit_ready out of the block reads/writes and leaving it only in
> > get info really speed up ext2load. With the recent cache changes on top
> of
> > this and the 5ms delay, we're getting fairly close to the Linux USB
> > transfer times and are happy with the results. Can you look into
> > integrating this?
>
> Can you send a patch that'll yank it out? I should be able to test it in a
> bit.
>
> > -Jim
> >
> > On Mon, Jul 30, 2012 at 6:54 PM, Marek Vasut <marex@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.
> > >
> > > Could it be because the USB is actually quite slower than SCSI and the
> > > device
> > > might get congested? It seems the code was there ever since (I can't
> seem
> > > to
> > > find the origin of it) and we might actually want to try if this
> doesn't
> > > break
> > > some usb 1.x things.
> > >
> > > > Regards,
> > > > Jim
> > >
> > > Best regards,
> > > Marek Vasut
>
> Best regards,
> Marek Vasut
>
--
*James H Shimer*
Motorola Mobility T3-12-HH72
900 Chelmsford Street
Lowell MA 08151
978-614-3550
-------------- next part --------------
A non-text attachment was scrubbed...
Name: 0001-Optimize-USB-load-ext2load-by-removing-uneeded-test-.patch
Type: application/octet-stream
Size: 1523 bytes
Desc: not available
URL: <http://lists.denx.de/pipermail/u-boot/attachments/20120730/a13564cc/attachment.obj>
^ permalink raw reply [flat|nested] 16+ messages in thread
* [U-Boot] usb_test_unit_ready called every block read - performance
2012-07-31 2:17 ` Jim Shimer
@ 2012-07-31 4:43 ` Wolfgang Denk
2012-08-14 17:50 ` Marek Vasut
1 sibling, 0 replies; 16+ messages in thread
From: Wolfgang Denk @ 2012-07-31 4:43 UTC (permalink / raw)
To: u-boot
Dear Jim Shimer,
In message <CACjqNxspYVs8Rsqq8Mgnsop15Js6HTdXQXX=v-cWEVBpmN_PPw@mail.gmail.com> you wrote:
>
> Here's a patch.
Please read http://www.denx.de/wiki/U-Boot/Patches
User git-format-patch and git-send-email (or makae sure yourself to
stick to the mandatory format, which includes for example the
"[PATCH]" marker in the subject, and submit inline, not as MIME
atachment.
Finally: it appears you introduce a new config option
CONFIG_USB_LEGACY_RW - this MUST be documented.
Best regards,
Wolfgang Denk
--
DENX Software Engineering GmbH, MD: Wolfgang Denk & Detlev Zundel
HRB 165235 Munich, Office: Kirchenstr.5, D-82194 Groebenzell, Germany
Phone: (+49)-8142-66989-10 Fax: (+49)-8142-66989-80 Email: wd at denx.de
An optimist believes we live in the best world possible; a pessimist
fears this is true.
^ permalink raw reply [flat|nested] 16+ messages in thread
* [U-Boot] usb_test_unit_ready called every block read - performance
2012-07-30 19:18 [U-Boot] usb_test_unit_ready called every block read - performance Jim Shimer
2012-07-30 22:54 ` Marek Vasut
@ 2012-08-12 23:54 ` Marek Vasut
2012-08-14 13:55 ` Steve Heckman
2012-08-15 14:19 ` Jim Shimer
1 sibling, 2 replies; 16+ messages in thread
From: Marek Vasut @ 2012-08-12 23:54 UTC (permalink / raw)
To: u-boot
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
^ permalink raw reply [flat|nested] 16+ messages in thread
* [U-Boot] usb_test_unit_ready called every block read - performance
2012-08-12 23:54 ` Marek Vasut
@ 2012-08-14 13:55 ` Steve Heckman
2012-08-14 17:48 ` Marek Vasut
2012-08-15 14:19 ` Jim Shimer
1 sibling, 1 reply; 16+ messages in thread
From: Steve Heckman @ 2012-08-14 13:55 UTC (permalink / raw)
To: u-boot
Marek,
I've been working with Jim on this.
The latest u-boot code we tried (2012.07) does seem to be much faster
WRT reading ext volumes from USB media. We were still able to eke
out a bit more speed by removing the Test Unit Ready calls per Read/Write.
In my experience, you only call Test Unit Ready during initialization of
a device (e.g., SCSI) or after device reset.
We still haven't heard a reason why it is being done for each Read and
Write
operation. Was it put in to work around bad hardware?
Thanks,
Steve Heckman
On Sun, Aug 12, 2012 at 7:54 PM, Marek Vasut <marex@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
>
^ permalink raw reply [flat|nested] 16+ messages in thread
* [U-Boot] usb_test_unit_ready called every block read - performance
2012-08-14 13:55 ` Steve Heckman
@ 2012-08-14 17:48 ` Marek Vasut
0 siblings, 0 replies; 16+ messages in thread
From: Marek Vasut @ 2012-08-14 17:48 UTC (permalink / raw)
To: u-boot
Dear Steve Heckman,
> Marek,
>
> I've been working with Jim on this.
>
> The latest u-boot code we tried (2012.07) does seem to be much faster
> WRT reading ext volumes from USB media. We were still able to eke
> out a bit more speed by removing the Test Unit Ready calls per Read/Write.
> In my experience, you only call Test Unit Ready during initialization of
> a device (e.g., SCSI) or after device reset.
>
> We still haven't heard a reason why it is being done for each Read and
> Write
> operation. Was it put in to work around bad hardware?
I have zero idea, it was there ever since ... let's apply similar patch and see
how it fares.
> Thanks,
> Steve Heckman
>
> On Sun, Aug 12, 2012 at 7:54 PM, Marek Vasut <marex@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
Best regards,
Marek Vasut
^ permalink raw reply [flat|nested] 16+ messages in thread
* [U-Boot] usb_test_unit_ready called every block read - performance
2012-07-31 2:17 ` Jim Shimer
2012-07-31 4:43 ` Wolfgang Denk
@ 2012-08-14 17:50 ` Marek Vasut
2012-08-14 17:57 ` Steve Heckman
1 sibling, 1 reply; 16+ messages in thread
From: Marek Vasut @ 2012-08-14 17:50 UTC (permalink / raw)
To: u-boot
Dear Jim Shimer,
> Hi Marek,
>
> Here's a patch.
>
> -Jim
[...]
I applied modified patch, please check u-boot-usb.git if you agree.
btw please read http://www.denx.de/wiki/U-Boot/Patches
Best regards,
Marek Vasut
^ permalink raw reply [flat|nested] 16+ messages in thread
* [U-Boot] usb_test_unit_ready called every block read - performance
2012-08-14 17:50 ` Marek Vasut
@ 2012-08-14 17:57 ` Steve Heckman
2012-08-15 14:04 ` Jim Shimer
0 siblings, 1 reply; 16+ messages in thread
From: Steve Heckman @ 2012-08-14 17:57 UTC (permalink / raw)
To: u-boot
Marek,
That looks good to me. Jim?
Thanks,
Steve
On Tue, Aug 14, 2012 at 1:50 PM, Marek Vasut <marex@denx.de> wrote:
> Dear Jim Shimer,
>
> > Hi Marek,
> >
> > Here's a patch.
> >
> > -Jim
> [...]
>
> I applied modified patch, please check u-boot-usb.git if you agree.
>
> btw please read http://www.denx.de/wiki/U-Boot/Patches
>
> Best regards,
> Marek Vasut
>
^ permalink raw reply [flat|nested] 16+ messages in thread
* [U-Boot] usb_test_unit_ready called every block read - performance
2012-08-14 17:57 ` Steve Heckman
@ 2012-08-15 14:04 ` Jim Shimer
0 siblings, 0 replies; 16+ messages in thread
From: Jim Shimer @ 2012-08-15 14:04 UTC (permalink / raw)
To: u-boot
Marek/Benoit,
Thanks so much for integrating this. I like the way you reused the flags,
and simplified the code.
Regards,
Jim
On Tue, Aug 14, 2012 at 1:57 PM, Steve Heckman <mgi2481@motorola.com> wrote:
> Marek,
>
> That looks good to me. Jim?
>
> Thanks,
> Steve
>
> On Tue, Aug 14, 2012 at 1:50 PM, Marek Vasut <marex@denx.de> wrote:
>
>> Dear Jim Shimer,
>>
>> > Hi Marek,
>> >
>> > Here's a patch.
>> >
>> > -Jim
>> [...]
>>
>> I applied modified patch, please check u-boot-usb.git if you agree.
>>
>> btw please read http://www.denx.de/wiki/U-Boot/Patches
>>
>> Best regards,
>> Marek Vasut
>>
>
>
--
*James H Shimer*
Motorola Mobility T3-12-HH72
900 Chelmsford Street
Lowell MA 08151
978-614-3550
^ permalink raw reply [flat|nested] 16+ messages in thread
* [U-Boot] usb_test_unit_ready called every block read - performance
2012-08-12 23:54 ` Marek Vasut
2012-08-14 13:55 ` Steve Heckman
@ 2012-08-15 14:19 ` Jim Shimer
2012-08-15 16:45 ` Steve Heckman
2012-08-18 23:16 ` Marek Vasut
1 sibling, 2 replies; 16+ messages in thread
From: Jim Shimer @ 2012-08-15 14:19 UTC (permalink / raw)
To: u-boot
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@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
^ permalink raw reply [flat|nested] 16+ messages in thread
* [U-Boot] usb_test_unit_ready called every block read - performance
2012-08-15 14:19 ` Jim Shimer
@ 2012-08-15 16:45 ` Steve Heckman
2012-08-18 23:17 ` Marek Vasut
2012-08-18 23:16 ` Marek Vasut
1 sibling, 1 reply; 16+ messages in thread
From: Steve Heckman @ 2012-08-15 16:45 UTC (permalink / raw)
To: u-boot
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".
Regards,
-Steve
On Wed, Aug 15, 2012 at 10:19 AM, Jim Shimer <mgi2475@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@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
>
>
^ permalink raw reply [flat|nested] 16+ messages in thread
* [U-Boot] usb_test_unit_ready called every block read - performance
2012-08-15 14:19 ` Jim Shimer
2012-08-15 16:45 ` Steve Heckman
@ 2012-08-18 23:16 ` Marek Vasut
1 sibling, 0 replies; 16+ messages in thread
From: Marek Vasut @ 2012-08-18 23:16 UTC (permalink / raw)
To: u-boot
Dear Jim Shimer,
> 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.
The ext4 branch doesn't contain a few other things indeed. Can you try applying
the ext4 patches on uboot-usb and retest?
> Regards,
> Jim
>
> On Sun, Aug 12, 2012 at 7:54 PM, Marek Vasut <marex@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
Best regards,
Marek Vasut
^ permalink raw reply [flat|nested] 16+ messages in thread
* [U-Boot] usb_test_unit_ready called every block read - performance
2012-08-15 16:45 ` Steve Heckman
@ 2012-08-18 23:17 ` Marek Vasut
0 siblings, 0 replies; 16+ messages in thread
From: Marek Vasut @ 2012-08-18 23:17 UTC (permalink / raw)
To: u-boot
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@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@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
^ permalink raw reply [flat|nested] 16+ messages in thread
end of thread, other threads:[~2012-08-18 23:17 UTC | newest]
Thread overview: 16+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2012-07-30 19:18 [U-Boot] usb_test_unit_ready called every block read - performance Jim Shimer
2012-07-30 22:54 ` Marek Vasut
2012-07-30 23:35 ` Jim Shimer
2012-07-30 23:41 ` Marek Vasut
2012-07-31 2:17 ` Jim Shimer
2012-07-31 4:43 ` Wolfgang Denk
2012-08-14 17:50 ` Marek Vasut
2012-08-14 17:57 ` Steve Heckman
2012-08-15 14:04 ` Jim Shimer
2012-08-12 23:54 ` Marek Vasut
2012-08-14 13:55 ` Steve Heckman
2012-08-14 17:48 ` Marek Vasut
2012-08-15 14:19 ` Jim Shimer
2012-08-15 16:45 ` Steve Heckman
2012-08-18 23:17 ` Marek Vasut
2012-08-18 23:16 ` Marek Vasut
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox