twitter/pelikan

monoio + pelikan?

Closed this issue · 2 comments

segcache seems like a very parallelizable cacheing architecture. I'm wondering if monoio, which is a thread-per core async library which follows the philosophy behind projects like ScyllaDB and RedPanda, could be a suitable alternative networking layer/async runtime for pelikan/segcache to tokio.

The potential upside is 2x improvement in QPS and 3x improvement in query latency.

An alternative experiment is seeing how well disk-based cacheing stands up in an age of ever better storage technology and more efficient OS async IO support like io_uring based on monoio.

Here are some benchmarks comparing monoio, tokio and glommio: https://github.com/bytedance/monoio/blob/master/docs/en/benchmark.md. I think it is worth considering that monoio is based on io_uring. tokio-uring only supports io-uring for disk, and does not use direct IO (meaning it relies on slow OS page cache). I'm not sure if monoio uses DMA, but given that glommio does, I believe it ought to.

Edit:
Seems there is limited compat with tokio TcpStream:
https://github.com/bytedance/monoio/tree/master/monoio-compat

@jon-chuang - thanks for the suggestion, I hadn't heard of monoio yet.

We aren't using Tokio or async within Pelikan, so I don't think this is a good fit for us.

I see, I think I made a mistake, I see that the last commit to the rustcore dir is 2 years ago.

So I guess the experiment with tokio mentioned in your talk did not make it to the main codebase. Thanks!