https://github.com/eecheng87/saio
Scalable Asynchronous I/O motivated by io_uring
https://github.com/eecheng87/saio
aio iouring network-programming
Last synced: 1 day ago
JSON representation
Scalable Asynchronous I/O motivated by io_uring
- Host: GitHub
- URL: https://github.com/eecheng87/saio
- Owner: eecheng87
- License: mit
- Created: 2021-08-23T01:32:54.000Z (over 3 years ago)
- Default Branch: main
- Last Pushed: 2023-03-23T04:21:21.000Z (about 2 years ago)
- Last Synced: 2025-03-29T16:34:18.617Z (25 days ago)
- Topics: aio, iouring, network-programming
- Language: C
- Homepage:
- Size: 4.2 MB
- Stars: 8
- Watchers: 1
- Forks: 0
- Open Issues: 4
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
# SAIO (Scalable Asynchronous I/O Extension)
This project is considered as the insight into general solutions to scalability issues in AIO (asynchronous I/O) model.
We proposed a offloading framework for I/O-intensive applications, using zero-copy scheme and M on-N threading system, as a generic scalable solution along with its adoption process of event-driven servers.
This work extends our previous work [ESCA](https://github.com/eecheng87/dBatch/tree/preview) into asynchronous I/O model, which provides better scalability.
With SAIO, HTTP/HTTPS servers have been demonstrated to outperform typical configurations in the aspects of throughput and latency.
Moreover, we exhibit SAIO’s potential impact on TLS in kernel (kTLS).## Prerequisite
For Nginx and wrk:
```
sudo apt install build-essential libpcre3 libpcre3-dev zlib1g zlib1g-dev
sudo apt install libssl-dev libgd-dev libxml2 libxml2-dev uuid-dev
sudo apt install autoconf automake libtool
```## Download project
```
git clone https://github.com/eecheng87/SAIO.git
cd SAIO# download testbench
git submodule update --init
```## Build from source
SAIO has been deployed to lighttpd, Nginx (TLS+kTLS), Redis and memcached (TLS). Also, SAIO shows the impact on all of these targets### Nginx
```
# download and build Nginx with tls
make config TARGET=ngx CONFIG=tls
sudo make
make nginx CONFIG=tls# download and build Nginx with ktls
sudo modprobe tls
make config TARGET=ngx CONFIG=ktls
sudo make
make nginx CONFIG=ktls
```### Memcached
> Support for memcached is only available in the branch `mcache`, which is designed with multi-threading model.
```
# download and build memcached
make config TARGET=mcached
sudo make# download and build the benchmarking tool
make memtier# sample for launching memcached
LD_PRELOAD=/path/to/preload.so ./memcached -t 1# sample for launching memtier_benchmarking
./memtier_benchmark -p 11211 --protocol=memcache_text --clients=100 --threads=5 --ratio=1:1 --key-pattern=R:R --key-minimum=16 --key-maximum=16 --data-size=128 --test-time=5
```### Redis
```
# download and build Redis without tls
make config TARGET=redis
sudo make
make redis tls=no# download and build Redis with tls
make config TARGET=redis CONFIG=tls
sudo make
make redis tls=yes
```## Evaluation
The following experiments will evaluate throughput, latency, and scalability, which are extremely important for EDAs.
All experiments are run on Marvell ThunderX2 CN9975 powered R281-T91 Arm server with the characteristics shown in Table.| Component | Specification |
| ------------------ | ------------- |
| Thread(s) per core | 4 |
| NUMA node | 2 |
| Core(s) per socket | 28 |
| Memory | 128 GiB |
| CPU Architecture | Arm64 |### The structural scalability of Nginx

### Throughput of Nginx with varied connection number

### Tail latency of Nginx with different throughput
