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-boun...@nginx.org> On Behalf Of Vladimir Homutov
Sent: Monday, January 18, 2021 10:11 PM
To: nginx-devel@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-boun...@nginx.org> On Behalf Of 
> Vladimir Homutov
> Sent: Monday, January 18, 2021 3:28 PM
> To: nginx-devel@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.z...@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@nginx.org
> http://mailman.nginx.org/mailman/listinfo/nginx-devel
> _______________________________________________
> nginx-devel mailing list
> nginx-devel@nginx.org
> http://mailman.nginx.org/mailman/listinfo/nginx-devel
> 

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

Reply via email to