Skip site navigation (1)Skip section navigation (2)
Date:      Thu, 25 Nov 2010 17:44:07 -0800
From:      mdf@FreeBSD.org
To:        FreeBSD Arch <freebsd-arch@freebsd.org>
Subject:   Fixing sysctl LOR
Message-ID:  <AANLkTi=yTwfMh8tLtfEFcjQmPYggxo6Nk1T=TeOieYvA@mail.gmail.com>

next in thread | raw e-mail | index | archive | help
My previous thought on the matter was incorrect.  This patch (and two
small cleanups before it) mean the sysctl lock is no longer held
across the call to oid_handler, which means that WITNESS will no
longer make entries where sysctl lock is taken before any random lock
in the handler.

The idea is simple; keep track of the number of threads running the
handler so that the oid is not deleted (and sysctl_ctx_free(9) doesn't
return) before all threads are drained.  It does unfortunately mean
that the sysctl lock is  only taken in exclusive mode, but since it's
held for less time I don't anticipate a significant loss of
concurrency.  If there is a simple benchmark someone can recommend I'd
be happy to check the difference.

I would like at some point to also reduce the number of calls to
sysctl(2) made by sysctl(8); this would also help performance.  Among
other things I wonder if eliminating the numerical array to describe
an oid would be acceptable; in a few circumstances it would mean
longer comparisons (strcmp versus integer comparison) but for many
uses it eliminates the name2oid step, and it would also mean there's
no longer a need for fixed numbered entries.

Cleanup:
http://people.freebsd.org/~mdf/0001-Use-the-SYSCTL_CHILDREN-macro-in-kern_sysctl.c-to-he.patch
http://people.freebsd.org/~mdf/0002-Slightly-modify-the-logic-in-sysctl_find_oid-to-redu.patch

The patch:
http://people.freebsd.org/~mdf/0003-Do-not-hold-the-sysctl-lock-across-a-call-to-the-han.patch

Thanks,
matthew



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?AANLkTi=yTwfMh8tLtfEFcjQmPYggxo6Nk1T=TeOieYvA>