What is CamIO?
CamIO is a unified Input/Ouput interface and library. It is specially designed to support the latest and fastest I/O interfaces (like Netmap, DPDK and SolarCapture) whilst remaining backwards compatible with tried and tested abstractions like sockets, pipes and files. Using CamIO allows application writers to focus on the important aspects of writing solution logic whilst ignoring the complexities of I/O management.
CamIO is a refinement of several I/O interfaces that we've built to support our ongoing research. It is:
- Fast - CamIO adds a bare minimum of abstraction overhead, amounting to only a few tens of cycles on the native performance
- Flexible - CamIO applications are empowered with new transports and optimisations as soon as they appear, without changing applications to know about them.
- Dynamic - CamIO applications are adaptable to their environments because transports are late-bound to the application. In some cases, shared memory is the right transport, in other cases, TCP over SSL is the right transport. CamIO applications get to choose from both, at runtime.
State of the art
Existing I/O abstractions range from “standard” Unix abstractions such as files and sockets, through to more exotic interfaces like shared memory or hardware mapped interfaces (e.g. DPDK, Netmap, DAG). These have three key failings:
- Static s - Applications are written with a particular interface in mind and bound to them at design dime.
- Incompatible - Different abstractions make it hard to port code from one interface to the next. This limits opportunities to use new performance improvements as they arise.
- Cumbersome - It is complicated to correctly set all of the different options associated with different interfaces and the many ways to access them.