i386/68719: [usb] USB 2.0 mobil rack+ fat32 performance problem

Dominic Marks dom at goodforbusiness.co.uk
Fri May 27 05:30:07 PDT 2005


The following reply was made to PR i386/68719; it has been noted by GNATS.

From: Dominic Marks <dom at goodforbusiness.co.uk>
To: bug-followup at FreeBSD.org,
 banhalmi at field.hu,
 freebsd-fs at freebsd.org
Cc:  
Subject: Re: i386/68719: [usb] USB 2.0 mobil rack+ fat32 performance problem
Date: Fri, 27 May 2005 13:28:57 +0100

 (Posted to freebsd-fs as the PR is assigned to freebsd-usb@, but it seems to 
 be more related to the msdos filesystem than the USB system so perhaps it 
 should be reassigned?)
 
 I've been evaluating the performance of some usb2 hard discs with FreeBSD and 
 I found this PR (68719). The submitter is correct that performance with 
 msdosfs is severely limited.
 
 I tested a 'LaCie' USB2 disc:
 
 da0 at umass-sim0 bus 0 target 0 lun 0
 da0: <Maxtor 7Y250P0 YAR4> Fixed Direct Access SCSI-2 device 
 da0: 40.000MB/s transfers
 da0: 239372MB (490234752 512 byte sectors: 255H 63S/T 30515C)
 
 egg# diskinfo -t da0
  ...
 Seek times:
         Full stroke:      250 iter in   5.271879 sec =   21.088 msec
         Half stroke:      250 iter in   4.055049 sec =   16.220 msec
         Quarter stroke:   500 iter in   6.696545 sec =   13.393 msec
         Short forward:    400 iter in   2.316910 sec =    5.792 msec
         Short backward:   400 iter in   2.052681 sec =    5.132 msec
         Seq outer:       2048 iter in   1.574044 sec =    0.769 msec
         Seq inner:       2048 iter in   1.576574 sec =    0.770 msec
 Transfer rates:
         outside:       102400 kbytes in   3.445316 sec =    29722 kbytes/sec
         middle:        102400 kbytes in   3.441593 sec =    29754 kbytes/sec
         inside:        102400 kbytes in   3.435809 sec =    29804 kbytes/sec
 
 I used 10GB chunks of data to test the USB disc. Each test used a different 
 10GB of data to avoid caching distorting results. I made the following 
 measurements with both UFS2 and FAT32.
 
 1. Local disc copy from a new SATA-150 disc.
 2. Ftp copy over a local 100Mbit network from a server with a SATA-150 disc. 
 3. Create a zero-file using dd to test simple write performance.
 
 Client with attached USB disc: P4 2.6Ghz 768MB DDR, if_fxp, 1x ATA-100 disc
 Server used for FTP: Celeron 2.4GHz 1.5GB DDR, if_em, 4x SATA-150 discs.
 
 Both the client and server are running FreeBSD 5.4-STABLE built at
 Thu May 26 22:52:15 BST 2005.
 
 In test 1 I could not achieve any better than 5.1MB/s on an msdosfs 
 filesystem. Using UFS2 and softupdates a transfer rate of 22~25MB/s was 
 possible. Both test data sets were copied from the systems ATA-100 disc. In 
 both tests at these peaks gstat reports the device is 100% busy.
 
 A snapshot from gstat(8) during test 1. da0s1 is the fat32 filesystem.
 
 dT: 0.501  flag_I 500000us  sizeof 240  i -1
  L(q)  ops/s    r/s   kBps   ms/r    w/s   kBps   ms/w   %busy Name
     2     90     90   3363    5.2      0      0    0.0   38.2| ad0
     2     90     90   3363    5.2      0      0    0.0   38.4| ad0s1
       ...
     2     90     90   3363    5.3      0      0    0.0   39.0| ad0s1g
    96   1295      2      8  163.9   1293   5170  141.6   99.8| da0
    96   1295      2      8  163.9   1293   5170  143.1   99.9| da0s1
 
 
 In test 2 again the msdosfs filesystem could not achieve higher than 5MB/s. 
 With UFS2 the limit of the network was reached before the limit of the USB2 
 bus so the transfer was limited to 10.5MB/s average. During this period gstat 
 reported about 35-45% activity on the device which matches up as I would have 
 expected.
 
 I managed to improve the performance in these results a little by upping 
 MAXPHYS to 256, and then to 512 on the client. Going from 128 to 256 improved 
 the diskinto -t transfer rates by about 3MB/s increasing it to 512 seemed to 
 have no further benefit. Enabling polling for the fxp interface helped as 
 well by reducing the interrupt rate from ~8k/s to 2k/s during the second 
 test.
 
 Finally, I used dd to test just the filesystem-write.
 
 ufs2:
 
 egg# dd if=/dev/zero of=/mnt/file.test bs=64k count=10000
 10000+0 records in
 10000+0 records out
 655360000 bytes transferred in 25.093943 secs (26116262 bytes/sec)
 
 And from gstat during the `dd':
 
 dT: 0.501  flag_I 500000us  sizeof 240  i -1
  L(q)  ops/s    r/s   kBps   ms/r    w/s   kBps   ms/w   %busy Name
       ...
     2     50      2     32   47.8     48  24510   45.7   97.8| da0
     2     50      2     32   47.9     48  24510   45.7   97.8| da0s1
 
 msdosfs:
 
 egg# dd if=/dev/zero of=/mnt/file2.test bs=64k count=10000
 10000+0 records in
 10000+0 records out
 655360000 bytes transferred in 123.332992 secs (5313744 bytes/sec)
 
 gstat:
 
 dT: 0.501  flag_I 500000us  sizeof 240  i -1
  L(q)  ops/s    r/s   kBps   ms/r    w/s   kBps   ms/w   %busy Name
       ...
   163   1314      0      0    0.0   1314   5258  145.4  100.0| da0
   163   1314      0      0    0.0   1314   5258  146.5  100.0| da0s1
 
 The ECHI controller is:
 
 ehci0: <EHCI (generic) USB 2.0 controller> mem 0xffa80800-0xffa80bff irq 23 at 
 device 29.7 on pci0
 usb4: EHCI version 1.0
 usb4: companion controllers, 2 ports each: usb0 usb1 usb2 usb3
 usb4: <EHCI (generic) USB 2.0 controller> on ehci0
 usb4: USB revision 2.0
 uhub4: Intel EHCI root hub, class 9/0, rev 2.00/1.00, addr 1
 uhub4: 8 ports with 8 removable, self powered
 
 I have not made any tests of read performance but from looking at the results 
 I do not expect that it will be significantly better than write performance. 
 I may do some when I get more time to investigate and follow up if the 
 results are unexpected.
 
 Hopefully this will generate some interest in the problem, it is beyond my 
 time and expertise but it would be very nice to be able to access MS-DOS 
 formatted filesystems at a reasonable speed!
 
 Thank you,
 -- 
 Dominic
 GoodforBusiness.co.uk
 I.T. Services for SMEs in the UK.


More information about the freebsd-usb mailing list