[PATCH] Add io_uring support in AIO(async io) module

Zhao, Ping ping.zhao at intel.com
Mon Jan 18 08:24:58 UTC 2021

Hi Vladimir,

I tested with response from 4KB to 1MB length which are ok. The procedure is first storing all the cache files on a nvme disk(~20T), then check the iostat & NIC bandwidth since then Nginx will use the cache files on disk with io_uring or libaio. So my patch didn't impact sendfile procedure, it provides another implementation of legacy libaio.


-----Original Message-----
From: nginx-devel <nginx-devel-bounces at nginx.org> On Behalf Of Vladimir Homutov
Sent: Monday, January 18, 2021 3:28 PM
To: nginx-devel at nginx.org
Subject: Re: [PATCH] Add io_uring support in AIO(async io) module

On Thu, Jan 14, 2021 at 05:53:17AM +0000, Zhao, Ping wrote:
> # HG changeset patch
> # User Ping Zhao <ping.zhao at intel.com> # Date 1610554205 18000
> #      Wed Jan 13 11:10:05 2021 -0500
> # Node ID 95886c3353dc80a3da215027c1e0f2141e47e911
> # Parent  b055bb6ef87e49232a7fcb4e5334b8efda3b6499
> Add io_uring support in AIO(async io) module.
> Hello, This is a patch to support io_uring in AIO(async io) module.
> Basically you don't need change your configurations. If you're using new kernel(above v5.1) which supports io_uring, and you have   "aio on" in your configuration. Nginx will use io_uring for FILE_AIO access which can achieve performance improvement than legacy   libaio.
> Checked with iostat which shows nvme disk io has 30%+ performance improvement with 1 thread.
> Use wrk with 100 threads 200 connections(-t 100 -c 200) with 25000 random requests.
>                   iostat(B/s)
> libaio        ~1.0 GB/s
> io_uring   1.3+ GB/s


what size of request did you use in your testing?
The previous attempt to use uring
seem to have issues with big requests and fallback to sendfile in such cases. Note that from the standpoint of HTTP server, most requests are usually larger than 4Kb.
nginx-devel mailing list
nginx-devel at nginx.org

More information about the nginx-devel mailing list