Hi all, I'd like to share a new DPDK open source project, libtpa(Transport Protocol Acceleration)[0], which is just another userspace TCP stack implementation so far, written from scratch.
I started this project 3 years ago, while I was searching for a feasible open source project with no luck. There were indeed quite a few options, but none of them actually met my needs. I then started writing one. Likely, there are still other guys out there looking for a high performance and stable userspace TCP stack. This is what this email and libtpa for. Libtpa is fast. To demonstrate that, we did a hacky redis integration. The benchmark shows that libtpa can boost the performance more than 5 times, from 0.21m rps to 1.14m rps[1]. Right, it can achieve 1 million rps just with one CPU thread. Meanwhile, the p99 latency decreases from 0.815ms to 0.159ms. Regarding the stableness, I'd say it's not bad, all kudos to the comprehensive testing. I've written more than 200 tests. Together with the testing arguments matrix[2], it can result in a big variety of test cases. Therefore, most of the bugs are captured before deployment. Having said that, I'd still suggest you to do as much testing as you can if you want to use it, for libtpa is still under active development and it's just v1.0-rc0 being released. Tons of changes have been made since the last stable release. There is one more thing I'm a bit proud of about libtpa: as a DPDK based project, libtpa has rich set of debug tools[3]. The sock tracing is particularly handy on debugging that libtpa doesn't ship a tcpdump like tool, simply for we don't really need one. The TCP part then may not sound that exciting. It's basically just an initial TCP implementation, with standard congestion avoid algorithm (New Reno). Libtpa implements slightly more than that though, such as SACK, congestion window validation, spurious retransmission detection, keepalive, etc. That's all. Comments, questions, patches and testing are all welcome! Thanks, Yuanhan Liu --- [0]: libtpa: https://github.com/bytedance/libtpa [1]: redis: https://github.com/bytedance/libtpa/tree/main/doc/redis.rst [2]: matrix shell: https://github.com/bytedance/libtpa/tree/main/doc/internals.rst [3]: user guide: https://github.com/bytedance/libtpa/tree/main/doc/user_guide.rst