Pure Go bindings for memif
Internship Projects/Mentors
Title | Pure Go bindings for memif |
Status | Approved by TSC |
Difficulty | Medium |
Description
Memif is a very high performance memory based interface available in vpp or via the C libmemif. It functions by exchanging shard memory over a unix file socket, and then tx/rx-ing packets over that shared memory. libmemif exists for writing programs in C/C++ and other languages for interacting with memif. Go can bind to C via CGO, but CGO is a miserable developer experience compared to pure Go.
This project is to write a Pure Go library for interacting with memif sufficient to allow the writing of packet processors in Go that can utilize memif without linking in C code or using CGO.
Additional Information
Learning Objectives
The intern is expected to learn:
Learn to use Github for SCM and Github Actions for CI
How to use Go to pass file descriptors over unix file sockets
How to write high performance memory protocols (memif in this case) over shared memory in Go
How to write functional and performance tests in Go, as well as build robust CI utilizing those tests
How to present a technical topic in a Webinar
Expected Outcome
Deliverables:
Pure Go implementation of memif that can interact with existing implementations in C
Functional testing for the pure Go implementation of memif
Perf testing for the pure Go implementation of memif
CI incorporating both Functional and Performance testing
Presentation of FD.io Webinar on the pure Go memif implementation
Relation to LF Networking
FD.io VPP utilizes memif as a high performance interface between different CNFs. The more broadly memif is adoptable, the better for VPP.
Education Level
Undergraduate should be fine as long as they have programming experience. This projects presumes the ability to program generally.
Skills
Skills in Go are highly preferred. Ability to read C code is extremely helpful.
Future plans
Promotion to those interested in playing with packet processing in Go.
Preferred Hours and Length of Internship
Either 40 hours a week for 12 weeks or 20 hours a week for 24 weeks are acceptable.
Mentor(s) Names and Contact Info
Ed Warnicke - hagbard@gmail.com - edwarnicke on the FD.io slack
Frederick Kautz - fkautz@gmail.com - fkautz on the CNCF slack