NFS Performance

Till Straumann strauman at slac.stanford.edu
Wed Aug 30 15:43:38 UTC 2006


Joel Sherrill wrote:

> Steven Johnson wrote:
>
>> Joel, Thanks for the pointer. setvbuf worked like a treat.  So, we don't
>> have to hack stdio.h, thanks for the suggestion.
>>
>>   
>
> I'm glad setvbuf worked.  It is always nice to not hack at a standard 
> include file.
>
>> Following are some benchmarks we got with different block sizes.  MPC862
>> Processor (PowerPC) at 100Mhz, with 50Mhz SDRAM main memory and using
>> the FEC (Fast Ethernet Controller @ 100Mbit/s, full duplex), its a
>> custom design and doesn't use a standard BSP, but isn't dissimilar to
>> the standard MPC862 BSP:
>>
>> Times to transfer the 7.4M test file timed using ticks_since_boot, (1
>> tick is 10ms on our target):
>> Buffer Size @ Ticks to transfer = ~Mbit/s
>>
>> 256 @ 4265  = ~1.4Mbit/s
>> 512 @ 2221  = ~2.7Mbit/s
>> 1024 @ 1239 = ~4.8Mbit/s
>> 2048 @ 712 = ~8.4Mbit/s
>> 4096 @ 439 = ~13.7Mbit/s
>> 8192 @ 298 = ~20.2Mbit/s
>> 16384 @ 299 =~20.2Mbit/s
>> 32768 @ 298 =~20.2Mbit/s
>>   
>
>
> You don't mention what the NFS server is and how it does from
> a similar host.
>
>> So, as Till said:
>>
>>  
>>
>>> The UDP packet size limit imposes a
>>> limit of 8k per RPC call
>>>     
>>
>>
>> And this is demonstrated by the above figures.
>>
>> I understand we may be able to get it faster with some sort of
>> multi-threaded reader, but for our purposes ~20Mbit/s is more than fast
>> enough.  Obviously the mileage will vary on different platforms, but
>> it's worth noting and trying if you are using NFS and need a bit more
>> speed.
>> Not that I've timed it, but I would expect the latency of bigger buffers
>> would be greater than the small one (it physically takes longer to
>> receive 8K than 1K) so the trade off between buffer size and average
>> latency would be different from application to application.
>> I also don't think this needs to be incorporated into the NFS code
>> anywhere, but it's worth noting in the README, 
>
done - I incorporated the comments I posted yesterday into the README.
Also, I added a test code.

-- T.

>> and maybe a Wiki page on
>> it wouldn't hurt.  I'll put Till's comments on getting further
>> performance, details on setvbuf and my results in the Wiki for posterity
>> in the next few days.
>>   
>
> Thanks for putting this in the Wiki.  It certainly needs to become 
> part of the collective
> knowledge base.  Please include a code fragment for your open/setvbuf 
> combo.
>
> --joel
>
>> Steven J
>>
>>
>>
>> Joel Sherrill wrote:
>>
>>  
>>
>>> Steven Johnson wrote:
>>>
>>>    
>>>
>>>> Hi,
>>>>
>>>> We are using the NFS Client stack as found in the RTEMS CVS.  We
>>>> experienced the slow performance that the readme talks about.  We were
>>>> getting around 3.5Mbit/s on a 100MBit link.  Our Processor is a 100Mhz
>>>> MPC862, and we are using the FEC.
>>>>
>>>> This isn't fast enough for us, as we need around 6-7 Mbit/s so we can
>>>> read media files and play them in real time from the NFS Share.
>>>>
>>>> So we investigated the causes.
>>>>
>>>> The single biggest thing we found is BUFSIZ in stdio.h.
>>>>
>>>> It was defined as 1024, which gave us ~3.5Mbit/s
>>>> We Changed it to 8192, and NFS Performance on our board jumped to
>>>> ~19.53MBit/s
>>>> We also tried 32768, which gave us ~19.99MBit/s
>>>>
>>>> (This is all Read performance, we don't know how fast write is, 
>>>> because
>>>> we don't write with our application).
>>>>
>>>> Also, the readme for the NFS Client indicates performance sucks due 
>>>> to a
>>>> lack of read ahead buffering.  Changing BUFSIZ to 8192 seems to 
>>>> provide
>>>> read ahead buffering, because if we read 512 bytes, 8192 bytes are
>>>> transferred from the file, and another request for 8192 bytes only
>>>> occurs when we have exhausted that data.
>>>>
>>>> Anyway, I'm just reporting this so that anyone else who needs NFS to
>>>> perform better can know what we did to achieve dramatic speed 
>>>> increases.
>>>>
>>>>         
>>>
>>> Interesting.  Since hacking stdio.h is generally not a good thing. 
>>> Can you try using
>>> one of the setbuf methods on the file descriptor and seeing if that
>>> accomplishes the
>>> same thing.
>>>
>>> If it does, then perhaps an open on a NFS client should implicitly
>>> increase the buffer
>>> size.
>>>
>>> This would limit the impact of the change.
>>>
>>> 20 Mbit/s is pretty nice performance from any computer but a 100 Mhz
>>> PowerPC
>>> makes it impressive.
>>>
>>> --joel
>>>
>>>    
>>>
>>>> Steven J
>>>>         
>>>
>>>
>>>     
>>
>>
>>   
>
>




More information about the users mailing list