Commit r345200 (new ARC reclamation threads) looks suspicious to me - second potential problem
Lev Serebryakov
lev at FreeBSD.org
Wed May 22 15:50:22 UTC 2019
On 22.05.2019 18:19, Alexander Motin wrote:
>>> But looks like `arc_kmem_reap_soon()` is synchronous on FreeBSD! So,
>>> this `delay()` looks very wrong. Am I right?
>
> Why is it wrong?
One second pause after synchronous operation to wait it completion?
There one more questionable piece of code:
6936 static void
6937 arc_lowmem(void *arg __unused, int howto __unused)
6938 {
....
6947 arc_reduce_target_size(to_free);
6948
6949 mutex_enter(&arc_adjust_lock);
6950 arc_adjust_needed = B_TRUE;
6951 zthr_wakeup(arc_adjust_zthr);
4587 static void
4588 arc_reduce_target_size(int64_t to_free)
4589 {
...
4612 if (asize > arc_c) {
4613 DTRACE_PROBE2(arc__shrink_adjust, uint64_t, asize,
4614 uint64_t, arc_c);
4615 /* See comment in arc_adjust_cb_check() on why
lock+flag */
4616 mutex_enter(&arc_adjust_lock);
4617 arc_adjust_needed = B_TRUE;
4618 mutex_exit(&arc_adjust_lock);
4619 zthr_wakeup(arc_adjust_zthr);
4620 }
4621 }
Looks like lock/flag/wakeup sequence (which is now very cheap — mutexes
are not cheap, and this mutex could become contended in low-memory
situation) could be called twice.
Looks like `arc_reduce_target_size()` should return boolean value and
unconditional signalling in `arc_lowmem()` should become conditional.
--
// Lev Serebryakov
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 963 bytes
Desc: OpenPGP digital signature
URL: <http://lists.freebsd.org/pipermail/freebsd-hackers/attachments/20190522/275b225f/attachment.sig>
More information about the freebsd-hackers
mailing list