[Bug 268532] [patch] [libthr] pthread_mutex_destroy/pshared_gc slow when destroying many process shared locks

From: <bugzilla-noreply_at_freebsd.org>
Date: Sat, 24 Dec 2022 05:42:07 UTC
https://bugs.freebsd.org/bugzilla/show_bug.cgi?id=268532

            Bug ID: 268532
           Summary: [patch] [libthr] pthread_mutex_destroy/pshared_gc slow
                    when destroying many process shared locks
           Product: Base System
           Version: CURRENT
          Hardware: Any
                OS: Any
            Status: New
          Severity: Affects Only Me
          Priority: ---
         Component: bin
          Assignee: bugs@FreeBSD.org
          Reporter: atle.solbakken@gmail.com

Created attachment 238992
  --> https://bugs.freebsd.org/bugzilla/attachment.cgi?id=238992&action=edit
Patch

The garbage collection function of process shared locks, pshared_gc, is called
whenever a process shared lock is destroyed. The GC function has a loop which
checks entries in a hashmap of linked lists, looping through all registered
locks.

If a process has a lot of process shared locks, like more than a few hundred,
the GC function causes destruction of these locks to take a long time
(exponential). This is noticeable especially if many locks are to be destroyed
at the same time.

There are probably multiple solutions for this, like calling the GC function
only every X lock destruction, by having a time limit or by calling it upon
some other event.

The provided patch limits how often the GC function can run to at most every 25
milliseconds per process. If i understand it correctly, the only potential GC
required after lock destruction should be in other processes, which have their
own timers.

Best regards
Atle

-- 
You are receiving this mail because:
You are the assignee for the bug.