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

Zhao, Ping ping.zhao at intel.com
Tue Jan 19 03:32:30 UTC 2021


It depends on if disk io is the performance hot spot or not. If yes, io_uring shows improvement than libaio. With 4KB/100KB length 1 Nginx thread it's hard to see performance difference because iostat is only around ~10MB/100MB per second. Disk io is not the performance bottle neck, both libaio and io_uring have the same performance. If you increase request size or Nginx threads number, for example 1MB length or Nginx thread number 4. In this case, disk io became the performance bottle neck, you will see io_uring performance improvement. 


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

18.01.2021 11:24, Zhao, Ping пишет:
> 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.
> 
> Regards,
> Ping

yes, I see that your implementation is different.
I wonder, if you can see any difference in performance depending on request size? Is it always constant?

> 
> -----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
> 
> Hello,
> 
> what size of request did you use in your testing?
> The previous attempt to use uring
> (http://mailman.nginx.org/pipermail/nginx-devel/2020-November/013632.h
> tml) 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
> http://mailman.nginx.org/mailman/listinfo/nginx-devel
> _______________________________________________
> nginx-devel mailing list
> nginx-devel at nginx.org
> http://mailman.nginx.org/mailman/listinfo/nginx-devel
> 

_______________________________________________
nginx-devel mailing list
nginx-devel at nginx.org
http://mailman.nginx.org/mailman/listinfo/nginx-devel


More information about the nginx-devel mailing list