Skip to content

Fully asynchronous I/O interface extended from SAIO

License

Notifications You must be signed in to change notification settings

eecheng87/fastio

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

53 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

fastio

FastIO is an asynchronous I/O interface that has been developed based on our previous work, SAIO. This project is built upon the concept of the io_uring kernel subsystem. In FastIO, system calls are handled by kernel workers in a polling manner, which eliminates the need for trapping into the kernel. Additionally, FastIO uses wq-worker to offload tasks that handle data not stored in cache, thus reducing the number of CPU mode switches. This approach improves the performance of system call-intensive applications, such as key-value servers. Through evaluations, we have demonstrated that FastIO can linearly scale the throughput of network servers, such as Redis.

Build from source

git clone https://github.com/eecheng87/fastio.git && cd fastio

# choose target, echos server or redis
make config TARGET=echo
make config TARGET=redis

# build kernel module
sudo make

# load kernel module
make reload

# buildl echo server & launch it
cd echo && make
./proactor_echo_server 12345

configure the value of max_ker_worker in fastio.conf to spawn varied number of kernel workers.

Performance

We compare the throughput (RPS) of conventional echo-server and the proactor-like echo-server on the top of FastIO. We choose rust_echo_bench as client. Both server and client are running on eMAG 8180 powered Ampere Arm server with 32 physical cores.

type/connection numbers 25
epoll 82896
fastio (1) 82802
fastio (2) 161260
fastio (3) 257491
fastio (4) 301168
fastio (5) 393052

fastio (*) refers to server running with * kernel workers.