More SD Card issues

Joel Sherrill joel.sherrill at OARcorp.com
Thu Oct 16 13:37:55 UTC 2008


Chris,

Thanks for posting all the info.  One thing I noticed
and changed on the CVS head was that in utils-cp.c,
the read() used MAXBSIZE which is 64K and declares
the buffer as a static variable.  Performing a 64K read/write
would likely put extreme pressure on the buffers
and the lower buffer configurations would very likely
be thrashing. 

I didn't think it was cool to declare a 64K array and,
in fact, this is too large an object on
a few architectures.  I (arbitrarily) lowered it to
1K and meant to email you to check the performance
at various sizes so we could settle on something
reasonable size and (consider) malloc'ing and free it.

--joel

Chris Johns wrote:
> Robert S. Grimes wrote:
>   
>> The SD card driver seems to be working pretty well.  A simple test where
>> I write one megabyte of data in 256 byte chunks takes about 57 seconds,
>> for ~18.5 kilobytes/second to disk  This seems pretty reasonable, as the
>> data sheet says the "Block Write Access Time" for "Binary Products" is
>> 24 milliseconds typical, 250 milliseconds max; using the 24 ms for 512
>> byte blocks, which translates to 21,333 kilobytes per second.  Seem right?
>>
>>     
>
> Well done on getting your SD card up and running.
>
> I can only comment on the performance side of things and it would seem fine
> given the figure you provide. The write of a single file in this way is good
> but a better test is to copy a groups of files. With the right cache setting I
> would hope to see the same performance.
>
> I did some analysis of the cache once I had completed my changes. I ran my
> tests on a 300MHz Pentium Compact PC with 512M of RAM and a 4.3G Fujitsu
> (MPD3043AT) disk. I formatted the disk using FreeDOS and then copied the
> install directory from the CDROM to disk. I then used the shell in RTEMS to
> make copies of the install directory in a tree layout until I had 26.176M of
> data in 1215 files and 168 directories. One directory had 305 files so this
> pushed the limits on the file system and the cache. The RTEMS shell copy
> command is the BSD shell copy command and it does a couple of stats on the
> directory for a file that is not present and so all 305 entries needed to be
> checked. The table shows the results for various cache sizes:
>
>            Buffers  RA  WB Time (secs) Rate (KB/sec) Files/sec
> Default     64     32  16     495       52.862        2.45
>             512     32  16     140      186.907        8.68
>             512     64  32     130      201.284        9.35
>            1024     64  32     105      249.209       11.57
>
> Buffers = number of buffers in the pool (512 bytes)
> RA = number of read-ahead buffers
> WB = number of write-back buffers
>
> The data rate is half the actual rate on the bus because we had to read this
> data into memory then write it out. The 512K cache did help. An interesting
> thing was the sound of the disk for each of these settings. The default was
> bashing the disk and lots of noise. The last set of values was quiet and the
> disk did not sound under any stress.
>
> A look at the shell's cpuuse command showed 80% of the time was spent in the
> ATA task, 8% in the file system and copy code and 12% in idle. That idle time
> is interesting and I am not sure why it was there. For this type of disk the
> ATA driver is where the effort would need to be spent to improve performance.
>
> Regards
> Chris
> _______________________________________________
> rtems-users mailing list
> rtems-users at rtems.com
> http://rtems.rtems.org/mailman/listinfo/rtems-users
>   


-- 
Joel Sherrill, Ph.D.             Director of Research & Development
joel.sherrill at OARcorp.com        On-Line Applications Research
Ask me about RTEMS: a free RTOS  Huntsville AL 35805
   Support Available             (256) 722-9985





More information about the users mailing list