From: Jens Axboe <axboe@kernel.dk>
To: Dmitry Kadashev <dkadashev@gmail.com>, Victor Stewart <v@nametag.social>
Cc: Josef <josef.grieb@gmail.com>,
Norman Maurer <norman.maurer@googlemail.com>,
io-uring <io-uring@vger.kernel.org>
Subject: Re: "Cannot allocate memory" on ring creation (not RLIMIT_MEMLOCK)
Date: Fri, 18 Dec 2020 10:22:55 -0700 [thread overview]
Message-ID: <6f951d4f-9503-e214-50d3-405d96ae536e@kernel.dk> (raw)
In-Reply-To: <CAOKbgA5g5=eC11JTUtZbZUbFj6rLmS+aVH_C4anB13pBZG+BMA@mail.gmail.com>
On 12/18/20 2:20 AM, Dmitry Kadashev wrote:
> On Thu, Dec 17, 2020 at 8:43 PM Victor Stewart <v@nametag.social> wrote:
>>
>> On Thu, Dec 17, 2020 at 11:12 AM Dmitry Kadashev <dkadashev@gmail.com> wrote:
>>>
>>> On Thu, Dec 17, 2020 at 5:38 PM Josef <josef.grieb@gmail.com> wrote:
>>>>
>>>>>> That is curious. This ticket mentions Shmem though, and in our case it does
>>>> > not look suspicious at all. E.g. on a box that has the problem at the moment:
>>>> > Shmem: 41856 kB. The box has 256GB of RAM.
>>>> >
>>>> > But I'd (given my lack of knowledge) expect the issues to be related anyway.
>>>>
>>>> what about mapped? mapped is pretty high 1GB on my machine, I'm still
>>>> reproduce that in C...however the user process is killed but not the
>>>> io_wq_worker kernel processes, that's also the reason why the server
>>>> socket still listening(even if the user process is killed), the bug
>>>> only occurs(in netty) with a high number of operations and using
>>>> eventfd_write to unblock io_uring_enter(IORING_ENTER_GETEVENTS)
>>>>
>>>> (tested on kernel 5.9 and 5.10)
>>>
>>> Stats from another box with this problem (still 256G of RAM):
>>>
>>> Mlocked: 17096 kB
>>> Mapped: 171480 kB
>>> Shmem: 41880 kB
>>>
>>> Does not look suspicious at a glance. Number of io_wq* processes is 23-31.
>>>
>>> Uptime is 27 days, 24 rings per process, process was restarted 4 times, 3 out of
>>> these four the old instance was killed with SIGKILL. On the last process start
>>> 18 rings failed to initialize, but after that 6 more were initialized
>>> successfully. It was before the old instance was killed. Maybe it's related to
>>> the load and number of io-wq processes, e.g. some of them exited and a few more
>>> rings were initialized successfully.
>>
>> have you tried using IORING_SETUP_ATTACH_WQ?
>>
>> https://lkml.org/lkml/2020/1/27/763
>
> No, I have not, but while using that might help to slow down progression of the
> issue, it won't fix it - at least if I understand correctly. The problem is not
> that those rings can't be created at all - there is no problem with that on a
> freshly booted box, but rather that after some (potentially abrupt) owning
> process terminations under load kernel gets into a state where - eventually - no
> new rings can be created at all. Not a single one. In the above example the
> issue just haven't progressed far enough yet.
>
> In other words, there seems to be a leak / accounting problem in the io_uring
> code that is triggered by abrupt process termination under load (just no
> io_uring_queue_exit?) - this is not a usage problem.
Right, I don't think that's related at all. Might be a good idea in general
depending on your use case, but it won't really have any bearing on the
particular issue at hand.
--
Jens Axboe
next prev parent reply other threads:[~2020-12-18 17:23 UTC|newest]
Thread overview: 52+ messages / expand[flat|nested] mbox.gz Atom feed top
2020-12-17 8:19 "Cannot allocate memory" on ring creation (not RLIMIT_MEMLOCK) Dmitry Kadashev
2020-12-17 8:26 ` Norman Maurer
2020-12-17 8:36 ` Dmitry Kadashev
2020-12-17 8:40 ` Dmitry Kadashev
2020-12-17 10:38 ` Josef
2020-12-17 11:10 ` Dmitry Kadashev
2020-12-17 13:43 ` Victor Stewart
2020-12-18 9:20 ` Dmitry Kadashev
2020-12-18 17:22 ` Jens Axboe [this message]
2020-12-18 15:26 ` Jens Axboe
2020-12-18 17:21 ` Josef
2020-12-18 17:23 ` Jens Axboe
2020-12-19 2:49 ` Josef
2020-12-19 16:13 ` Jens Axboe
2020-12-19 16:29 ` Jens Axboe
2020-12-19 17:11 ` Jens Axboe
2020-12-19 17:34 ` Norman Maurer
2020-12-19 17:38 ` Jens Axboe
2020-12-19 20:51 ` Josef
2020-12-19 21:54 ` Jens Axboe
2020-12-19 23:13 ` Jens Axboe
2020-12-19 23:42 ` Josef
2020-12-19 23:42 ` Pavel Begunkov
2020-12-20 0:25 ` Jens Axboe
2020-12-20 0:55 ` Pavel Begunkov
2020-12-21 10:35 ` Dmitry Kadashev
2020-12-21 10:49 ` Dmitry Kadashev
2020-12-21 11:00 ` Dmitry Kadashev
2020-12-21 15:36 ` Pavel Begunkov
2020-12-22 3:35 ` Pavel Begunkov
2020-12-22 4:07 ` Pavel Begunkov
2020-12-22 11:04 ` Dmitry Kadashev
2020-12-22 11:06 ` Dmitry Kadashev
2020-12-22 13:13 ` Dmitry Kadashev
2020-12-22 16:33 ` Pavel Begunkov
2020-12-23 8:39 ` Dmitry Kadashev
2020-12-23 9:38 ` Dmitry Kadashev
2020-12-23 11:48 ` Dmitry Kadashev
2020-12-23 12:27 ` Pavel Begunkov
2020-12-20 1:57 ` Pavel Begunkov
2020-12-20 7:13 ` Josef
2020-12-20 13:00 ` Pavel Begunkov
2020-12-20 14:19 ` Pavel Begunkov
2020-12-20 15:56 ` Josef
2020-12-20 15:58 ` Pavel Begunkov
2020-12-20 16:14 ` Jens Axboe
2020-12-20 16:59 ` Josef
2020-12-20 18:23 ` Josef
2020-12-20 18:41 ` Pavel Begunkov
2020-12-21 8:22 ` Josef
2020-12-21 15:30 ` Pavel Begunkov
2020-12-21 10:31 ` Dmitry Kadashev
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=6f951d4f-9503-e214-50d3-405d96ae536e@kernel.dk \
--to=axboe@kernel.dk \
--cc=dkadashev@gmail.com \
--cc=io-uring@vger.kernel.org \
--cc=josef.grieb@gmail.com \
--cc=norman.maurer@googlemail.com \
--cc=v@nametag.social \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.