Zhao, Ping
February 04, 2021 07:56PM
Hi Mikhail,

I think it could be the kernel difference. I'll try to repro with your kernel.
I directly build the kernel from kernel org. This is the commit id I used:

commit 6b9830fecd4a87d7ebb4d93484fef00f46d0fa0f (HEAD -> linux-5.7.y, tag: v5.7.19, origin/linux-5.7.y)
Author: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Date: Thu Aug 27 09:30:50 2020 +0200

Linux 5.7.19

Also I'll send another mail later with 'sendfile on' and 'aio off' test result. Maybe I can do this first.

BR,
Ping

-----Original Message-----
From: nginx-devel <nginx-devel-bounces@nginx.org> On Behalf Of Mikhail Isachenkov
Sent: Thursday, February 4, 2021 4:55 PM
To: nginx-devel@nginx.org
Subject: Re: [PATCH] Add io_uring support in AIO(async io) module

Hi Zhao Ping,

My test is much simpler than yours. I created
/usr/local/html/(11111...99999) files on SSD (100 kb size) and wrote small lua script for wrk that adds 5 random digits to request. There are no such errors without patch with aio enabled.
These files does not change during test.

I'll try to reproduce this on CentOS 8 -- which repository do you use to install 5.x kernel?

Also, could you please run the test with 'sendfile on' and 'aio off' to get reference numbers for sendfile too?

Thanks in advance!

04.02.2021 10:08, Zhao, Ping пишет:
> Another possible cause is that "/usr/local/html/64746" was changed/removed when other user tried to read it.
>
> -----Original Message-----
> From: Zhao, Ping
> Sent: Thursday, February 4, 2021 10:33 AM
> To: nginx-devel@nginx.org
> Subject: RE: [PATCH] Add io_uring support in AIO(async io) module
>
> Hi Mikhail,
>
> I didn't see this error in my log. Following is my OS/Kernel:
> CentOS: 8.1.1911
> Kernel: 5.7.19
> Liburing: liburing-1.0.7-3.el8.x86_64,
> liburing-devel-1.0.7-3.el8.x86_64 (from yum repo)
>
> Regarding the error: 11: Resource temporarily unavailable. It's probably that too many read "/usr/local/html/64746" at one time which is still locked by previous read. I tried to repro this error with single file but it seems nginx auto store the signal file in memory and I don't see error. How do you perform the test? I want to repro this if possible.
>
> My nginx reported this error before:
> 2021/01/04 05:04:29 [alert] 50769#50769: *11498 pread() read only 7101 of 15530 from "/mnt/cache1/17/68aae9d816ec02340ee617b7ee52a117", client: 11.11.11.3, server: _, request: "GET /_100kobject?version=cdn003191&thread=64 HTTP/1.1", host: "11.11.11.1:8080"
> Which is fixed by my 2nd patch(Jan 25) already.
>
> BR,
> Ping
>
> -----Original Message-----
> From: nginx-devel <nginx-devel-bounces@nginx.org> On Behalf Of Mikhail
> Isachenkov
> Sent: Wednesday, February 3, 2021 10:11 PM
> To: nginx-devel@nginx.org
> Subject: Re: [PATCH] Add io_uring support in AIO(async io) module
>
> Hi Ping Zhao,
>
> When I try to repeat this test, I've got a huge number of these errors:
>
> 2021/02/03 10:22:48 [crit] 30018#30018: *2 aio read
> "/usr/local/html/64746" failed (11: Resource temporarily unavailable)
> while sending response to client, client: 127.0.0.1, server:
> localhost,
> request: "GET /64746 HTTP/1.1", host: "localhost"
>
> I tested this patch on Ubuntu 20.10 (5.8.0-1010-aws kernel version) and Fedora 33 (5.10.11-200.fc33.x86_64) with the same result.
>
> Did you get any errors in error log with patch applied? Which OS/kernel did you use for testing? Did you perform any specific tuning before running?
>
> 25.01.2021 11:24, Zhao, Ping пишет:
>> Hello, add a small update to correct the length when part of request already received in previous.
>> This case may happen when using io_uring and throughput increased.
>>
>> # HG changeset patch
>> # User Ping Zhao <ping.zhao@intel.com> # Date 1611566408 18000
>> # Mon Jan 25 04:20:08 2021 -0500
>> # Node ID f2c91860b7ac4b374fff4353a830cd9427e1d027
>> # Parent 1372f9ee2e829b5de5d12c05713c307e325e0369
>> Correct length calculation when part of request received.
>>
>> diff -r 1372f9ee2e82 -r f2c91860b7ac src/core/ngx_output_chain.c
>> --- a/src/core/ngx_output_chain.c Wed Jan 13 11:10:05 2021 -0500
>> +++ b/src/core/ngx_output_chain.c Mon Jan 25 04:20:08 2021 -0500
>> @@ -531,6 +531,14 @@
>>
>> size = ngx_buf_size(src);
>> size = ngx_min(size, dst->end - dst->pos);
>> +#if (NGX_HAVE_FILE_IOURING)
>> + /*
>> + * check if already received part of the request in previous,
>> + * calculate the remain length
>> + */
>> + if(dst->last > dst->pos && size > (dst->last - dst->pos))
>> + size = size - (dst->last - dst->pos); #endif
>>
>> sendfile = ctx->sendfile && !ctx->directio;
>>
>> -----Original Message-----
>> From: nginx-devel <nginx-devel-bounces@nginx.org> On Behalf Of Zhao,
>> Ping
>> Sent: Thursday, January 21, 2021 9:44 AM
>> To: nginx-devel@nginx.org
>> Subject: RE: [PATCH] Add io_uring support in AIO(async io) module
>>
>> Hi Vladimir,
>>
>> No special/extra configuration needed, but need check if 'aio on' and 'sendfile off' is correctly set. This is my Nginx config for reference:
>>
>> user nobody;
>> daemon off;
>> worker_processes 1;
>> error_log error.log ;
>> events {
>> worker_connections 65535;
>> use epoll;
>> }
>>
>> http {
>> include mime.types;
>> default_type application/octet-stream;
>> access_log on;
>> aio on;
>> sendfile off;
>> directio 2k;
>>
>> # Cache Configurations
>> proxy_cache_path /mnt/cache0 levels=2 keys_zone=nginx-cache0:400m max_size=1400g inactive=4d use_temp_path=off; ......
>>
>>
>> To better measure the disk io performance data, I do the following steps:
>> 1. To exclude other impact, and focus on disk io part.(This patch only impact disk aio read process) Use cgroup to limit Nginx memory usage. Otherwise Nginx may also use memory as cache storage and this may cause test result not so straight.(since most cache hit in memory, disk io bw is low, like my previous mail found which didn't exclude the memory cache impact)
>> echo 2G > memory.limit_in_bytes
>> use ' cgexec -g memory:nginx' to start Nginx.
>>
>> 2. use wrk -t 100 -c 1000, with random 25000 http requests.
>> My previous test used -t 200 connections, comparing with -t 1000, libaio performance drop more when connections numbers increased from 200 to 1000, but io_uring doesn't. It's another advantage of io_uring.
>>
>> 3. First clean the cache disk and run the test for 30 minutes to let Nginx store the cache files to nvme disk as much as possible.
>>
>> 4. Rerun the test, this time Nginx will use ngx_file_aio_read to
>> extract the cache files in nvme cache disk. Use iostat to track the
>> io data. The data should be align with NIC bw since all data should
>> be from cache disk.(need exclude memory as cache storage impact)
>>
>> Following is the test result:
>>
>> Nginx worker_processes 1:
>> 4k 100k 1M
>> Io_uring 220MB/s 1GB/s 1.3GB/s
>> Libaio 70MB/s 250MB/s 600MB/s(with -c 200, 1.0GB/s)
>>
>>
>> Nginx worker_processes 4:
>> 4k 100k 1M
>> Io_uring 800MB/s 2.5GB/s 2.6GB/s(my nvme disk io maximum bw)
>> libaio 250MB/s 900MB/s 2.0GB/s
>>
>> So for small request, io_uring has huge improvement than libaio. In previous mail, because I didn't exclude the memory cache storage impact, most cache file is stored in memory, very few are from disk in case of 4k/100k. The data is not correct.(for 1M, because the cache is too big to store in memory, it wat in disk) Also I enabled directio option "directio 2k" this time to avoid this.
>>
>> Regards,
>> Ping
>>
>> -----Original Message-----
>> From: nginx-devel <nginx-devel-bounces@nginx.org> On Behalf Of
>> Vladimir Homutov
>> Sent: Wednesday, January 20, 2021 12:43 AM
>> To: nginx-devel@nginx.org
>> Subject: Re: [PATCH] Add io_uring support in AIO(async io) module
>>
>> On Tue, Jan 19, 2021 at 03:32:30AM +0000, Zhao, Ping wrote:
>>> 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.
>>
>> Can you please provide full test results with specific nginx configuration?
>>
>> _______________________________________________
>> 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
>>
>
> --
> Best regards,
> Mikhail Isachenkov
> NGINX Professional Services
> _______________________________________________
> 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
>

--
Best regards,
Mikhail Isachenkov
NGINX Professional Services
_______________________________________________
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
Subject Author Views Posted

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

Zhao, Ping 1478 January 14, 2021 12:54AM

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

Vladimir Homutov 419 January 18, 2021 02:30AM

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

Zhao, Ping 361 January 18, 2021 03:26AM

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

Vladimir Homutov 384 January 18, 2021 09:12AM

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

Zhao, Ping 329 January 18, 2021 10:34PM

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

Vladimir Homutov 316 January 19, 2021 11:44AM

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

Zhao, Ping 305 January 20, 2021 08:46PM

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

Zhao, Ping 295 January 25, 2021 03:26AM

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

Mikhail Isachenkov 332 February 03, 2021 09:12AM

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

Zhao, Ping 302 February 03, 2021 09:34PM

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

Zhao, Ping 300 February 04, 2021 02:10AM

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

Mikhail Isachenkov 310 February 04, 2021 03:56AM

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

Zhao, Ping 346 February 04, 2021 07:56PM

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

Zhao, Ping 300 February 05, 2021 01:44AM

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

Zhao, Ping 302 February 06, 2021 09:18PM

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

Mikhail Isachenkov 336 February 08, 2021 12:18PM

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

Zhao, Ping 354 February 09, 2021 03:38AM

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

Mikhail Isachenkov 352 February 09, 2021 08:32AM

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

Zhao, Ping 313 February 15, 2021 01:10AM

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

Mikhail Isachenkov 332 February 15, 2021 03:12AM

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

Vadim Fedorenko 310 February 15, 2021 06:06AM

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

Zhao, Ping 343 February 22, 2021 02:40AM

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

Zhao, Ping 298 February 25, 2021 02:00AM

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

Mikhail Isachenkov 311 February 25, 2021 06:02AM

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

Zhao, Ping 289 February 25, 2021 08:24PM

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

Mikhail Isachenkov 328 February 26, 2021 03:42AM

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

Zhao, Ping 334 February 27, 2021 07:50AM

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

Maxim Dounin 373 March 22, 2021 12:18PM

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

Vadim Fedorenko 326 February 21, 2021 04:56PM

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

Zhao, Ping 364 February 22, 2021 03:28AM

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

pingzhao 292 August 25, 2021 09:50PM

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

splitice 375 August 25, 2021 10:28PM



Sorry, you do not have permission to post/reply in this forum.

Online Users

Guests: 233
Record Number of Users: 8 on April 13, 2023
Record Number of Guests: 421 on December 02, 2018
Powered by nginx      Powered by FreeBSD      PHP Powered      Powered by MariaDB      ipv6 ready