Skip site navigation (1)Skip section navigation (2)
Date:      Mon, 15 Nov 2021 13:17:28 -0500
From:      Chris Ross <cross+freebsd@distal.com>
To:        Andriy Gapon <avg@freebsd.org>
Cc:        Mark Johnston <markj@freebsd.org>, freebsd-fs <freebsd-fs@freebsd.org>
Subject:   Re: swap_pager: cannot allocate bio
Message-ID:  <471B80F4-B8F4-4D5A-9DEB-3F1E00F42A68@distal.com>
In-Reply-To: <b2121d25-0782-5cc3-2b55-33ba11c41995@FreeBSD.org>
References:  <9FE99EEF-37C5-43D1-AC9D-17F3EDA19606@distal.com> <09989390-FED9-45A6-A866-4605D3766DFE@distal.com> <op.1cpimpsmkndu52@joepie> <4E5511DF-B163-4928-9CC3-22755683999E@distal.com> <YY7KSgGZY9ehdjzu@nuc> <19A3AAF6-149B-4A3C-8C27-4CFF22382014@distal.com> <6DA63618-F0E9-48EC-AB57-3C3C102BC0C0@distal.com> <35c14795-3b1c-9315-8e9b-a8dfad575a04@FreeBSD.org> <YZJzy%2ByI40wXFYjd@nuc> <b2121d25-0782-5cc3-2b55-33ba11c41995@FreeBSD.org>

next in thread | previous in thread | raw e-mail | index | archive | help


> On Nov 15, 2021, at 10:08, Andriy Gapon <avg@freebsd.org> wrote:
> My point was that waiting for the free memory was not strictly needed =
yet given 12G free, but that's kind of obvious.

I am kind of curious about this.  You were noting Andriy that there was =
free emory.  Is there any way to confirm if this is a NUMA issue, and if =
it is, would there be any way around it?  Mark, you mentioned making =
that less strict as a general improvement, but not a real fix to the =
issue that=E2=80=99s hitting me here.  I am curious if you thought it =
was still worth making.  It sounds like it to me.  I mean, allocating =
memory at all sounds better than failing to allocate memory.  Are there =
cases where that wouldn=E2=80=99t be true?

> Yes, I propose to remove the wait for ARC evictions from arc_lowmem().
>=20
> Another thing that may help a bit is having a greater "slack" between =
a threshold where the page daemon starts paging out and a threshold =
where memory allocations start to wait (via vm_wait_domain).
>=20
> Also, I think that for a long time we had a problem (but not sure if =
it's still present) where allocations succeeded without waiting until =
the free memory went below certain threshold M, but once a thread =
started waiting in vm_wait it would not be woken up until the free =
memory went above another threshold N.  And the problem was that N >> M. =
 In other words, a lot of memory had to be freed (and not grabbed by =
other threads) before the waiting thread would be woken up.

Thank you both for your inputs.  Let me know if you=E2=80=99d like me to =
try anything, and I=E2=80=99ll kick (reboot) the system and can build a =
new kernel when you=E2=80=99d like.  I did get another procstat -kka out =
of it this morning, and the system has since gone less responsive, but I =
assume that new procstat won=E2=80=99t show anything last night=E2=80=99s =
didn=E2=80=99t.

                  - Chris=




Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?471B80F4-B8F4-4D5A-9DEB-3F1E00F42A68>