Followup to “The Common Communications Interface (CCI)”
A few people have made remarks to me about the pair of CCI guest blog entries from Scott Atchley of Oak Ridge (entry 1, entry 2) indicating that they didn’t quite “get it”. So let me try to put Scott’s words in concrete terms…
CCI is an API that represents a unification of low-level “native” network APIs. Specifically: many network vendors are doing essentially the same things in their low-level “native” network APIs. In the HPC world, MPI hides all these different low-level APIs. But there are real-world non-HPC apps out there that need extreme network performance, and therefore write their own unification layers for verbs, portals, MX, …etc. Ick!
So why don’t we unify all these low-level native network APIs?
NOTE: This is quite similar to how we unified the high-level network APIs into MPI.
Two other key facts are important to realize here:
- A CCI open source reference implementation that supports multiple different network types is available for download.
- At least one vendor has firmware implementing CCI; it’s not just a(nother) software abstraction layer.
There are some important consequences of these facts:
- It’s not vaporware. It exists. It works. It gives good performance (the CCI Forum web site is a trivial top-level page; the Oak Ridge CCI site has more detail).
- The software was architected around a plugin interface; supporting another network is simply a matter of writing another plugin (quite similar to the OpenFabrics libibverbs library).
- CCI doesn’t have to be yet-another-software-layer (like uDAPL).
- Specifically: CCI was very carefully designed such that it could be implemented in firmware (i.e., the software API is a thin shim to native CCI concepts in firmware).
If CCI uses plugins just like libibverbs, why did we bother? I.e., why didn’t we just use libibverbs?
Don’t forget that one of the tenants of CCI is simplicity (the others are portability, performance, scalability, and robustness). In short: CCI is far simpler than the libibverbs API.
The CCI implementation is currently open to a limited number of early beta users. While the group is working on making the software ready for 1.0, read the full CCI API specification on the Oak Ridge CCI site; post comments below if you’re interested in more detail.