[openib-general] Looking for a Mellanox VAPI example C/C++ code

Mike Houston mhouston at graphics.stanford.edu
Sun Feb 13 11:33:02 PST 2005


This has been a running request now for quite some time.  Everyone says 
its a good idea, but it's hard to get it actually done.  (And before 
people say, "this is an open source project so why don't you do it 
yourself", keep reading)  Since the spec is slowly evolving, we really 
need the OpenIB developers or the IBTA to write a programmer's manual 
for VAPI.  Folks working on the ULPs should do the same. 

I learned (poorly) how to use VAPI by reading the original Mellanox 
perf_main code, which was a truly awful experience.  This has lead to me 
writing a VERY fragile NAL using VAPI that has performance 
characteristics which are very difficult to reason about. 

Without updated API documentation and programming guides, IB is going to 
be a hard sell to many folks unless their important apps already work 
perfectly an fast on IB somehow.  For example, what fields do I set in 
the many different structs to get good performance?  The event handlers 
are cool, but how do you actually use them?  How do I figure out if a 
cool feature is actually supported, i.e. caps bits?  We need something 
like a "HelloIB" for all of the different ways to access the IB hardware 
(*DAPL, VAPI, SDP (with all the socket extensions, etc)), along with a 
programmer's guide.  Something like if you had to teach an intro 
undergrad course on networking, but instead of using TCP, you had to 
teach using IB.  What would your slides look like?  What would the 
homework/project questions and solutions be...  i.e UD vs. RC.  
send/recv vs. RDMA (read/write).  Basic explanations of 
WQEs/SRQs/CQs/QPs/etc.

If you look at the OpenIB archive of this list, you can find an example 
or two of how to write a ping test.  But, getting good performance 
through VAPI seems to still be a dark art.  It's obviously doable since 
the OSU folks are getting pretty good performance with their MVAPICH MPI 
implementation on IB.  I can get pretty good performance point to point, 
but 1->N, N->1, M->N, and all to all continue to be a problem for me.

This is why I've made heavy use out of SDP, but to get all the 
performance of IB, especially on PCIe, it looks like we will have to 
write code pretty close to the metal, be it VAPI or kDAPL(?).

This is just my opinion as and end user, I could be wrong.

-Mike

Sinate wrote:

> Hi. I'm trying to find a simple Mellanox VAPI example (sends some data 
> from one host to another, nothing fancy), in C or C++.
>
> I can stare at the Mellanox VAPI reference files, but it doesn't get 
> me any where if I want to build a C/C++ program to do something.
>
> Sorry if this is the wrong place to ask.
>
> Cheers.
> _______________________________________________
> openib-general mailing list
> openib-general at openib.org
> http://openib.org/mailman/listinfo/openib-general
>
> To unsubscribe, please visit 
> http://openib.org/mailman/listinfo/openib-general




More information about the general mailing list