[ofa-general] Question on IB RDMA read timing.

Dotan Barak dotanb at dev.mellanox.co.il
Thu Oct 18 02:10:37 PDT 2007


Bharath Ramesh, if you wish you can send the source to me and i will 
review it.


Dotan

Rick Jones wrote:
> Gleb Natapov wrote:
>> On Wed, Oct 17, 2007 at 09:44:04AM +0200, Dotan Barak wrote:
>>
>>> Hi.
>>>
>>> Bharath Ramesh wrote:
>>>
>>>> I wrote a simple test program to actual time it takes for RDMA read 
>>>> over
>>>> IB. I find a huge difference in the numbers returned by timing. I was
>>>> wondering if someone could help me in finding what I might be doing
>>>> wrong in the way I am measuring the time.
>>>>
>>>> Steps I do for timing is as follows.
>>>>
>>>> 1) Create the send WR for RDMA Read.
>>>> 2) call gettimeofday ()
>>>> 3) ibv_post_send () the WR
>>>> 4) Loop around ibv_poll_cq () till I get the completion event.
>>>> 5) call gettimeofday ();
>>>>
>>>> The difference in time would give me the time it takes to perform RDMA
>>>> read over IB. I constantly get around 35 microsecs as the timing which
>>>> seems to be really large considering the latency of IB. I am measuring
>>>> the time for transferring 4K bytes of data. If anyone wants I can send
>>>> the code that I have written. I am not subscribed to the list, if you
>>>> could please cc me in the reply.
>>>>  
>>>
>>> I don't familiar with the implementation of gettimeofday, but i 
>>> believe that this function do a context switch
>>> (and/or spend some time in the function to fill the struct that you 
>>> supply to it)
>>>
>>
>> Here:
>>     struct timeval tv_s, tv_e;
>>     gettimeofday(&tv_s, NULL);
>>     gettimeofday(&tv_e, NULL);
>>     printf("%d\n", tv_e.tv_usec - tv_s.tv_usec);
>> Compile and run it. The overhead of two calls to gettimeofday is at most
>> 1 microsecond.
>
> Unless there is contention with other gettimeofday() calls on the 
> system - on SMP etc there are locks involved in making sure that each 
> call to gettimeofday() does not go backwards and the like, and on some 
> systems, with enough callers to gettimeofday() one can run into lock 
> contention.  So, while 99 times out of ten gettimeofday() may be 
> "cheap" it really isn't a good idea to ass-u-me it will always be cheap.
>
> And besides, the most efficient call is the one which is never made, 
> so the suggestion to perform N operations between the calls is 
> probably still a good one.  Even for measuring the overhead of 
> gettimeofday() :)
>
> Also, while it may not be so much the case these days, certainly in 
> the past there were "gettimeofday()" implementations which may have 
> rather coarse granularity.
>
> Now, some CPUs offer interval timer/registers/whatever - for example 
> the ITC on Itanium or CR16 on PA-RISC, I'm sure there are other 
> examples - which can be used for measuring very short things.  Under 
> some OSes - HP-UX and Solaris are two with which I am familiar - there 
> is a "gethrtime()" interface which uses those without the user having 
> to deal with inline assembly.  That should have lower overhead than 
> gettimeofday() although even then it would probably be best, if one is 
> indeed going for the average, to use those to measure the time to 
> perform N operations.
>
> If one does use gethrtime(), it should only be for measuring short 
> things, and those "timestamps" should not be interspersed with those 
> from gettimeofday(). The two are really separate "timespaces" if you 
> will. Gethrtime() does not get tick adjustment like gettimeofday() 
> does/can.
>
> rick jones
>
> FWIW, netperf uses gettimeofday() to measure the overall runtime of a 
> netperf test, and gethrtime() (when available) to measure the 
> individual times for "transactions" such as the exchange of a 
> request/response, or time spend in send() or recv() or whatnot.
>
>> -- 
>>             Gleb.
>> _______________________________________________
>> general mailing list
>> general at lists.openfabrics.org
>> http://lists.openfabrics.org/cgi-bin/mailman/listinfo/general
>>
>> To unsubscribe, please visit 
>> http://openib.org/mailman/listinfo/openib-general
>
>




More information about the general mailing list