On Mon, 28 Nov 2005, Bruce Evans wrote:
is something I'm quite willing to discuss, but the evidence seems to
suggest that if we want to improve the performance of this class of
applications, we need to provide time keeping services that match their
requirements (run frequently with fairly weak requirements on
precision). I'm entirely open to exposing this service in different
ways, or offering a different notion of "cheaper, suckier". For
example, I could imagine exposing an interface intended to return
timing information specifically for HZ-driven sleep mechanisms, such as
poll() and select(). The advantage, for experimental purposes, in the
approach I committed is that it allows us to easily test the impact of
such changes on applications without modifing the application. The
disadvantage is that we'll want to change it, but given that I am not
yet clear we fully understand the requirements, that is probably
inevitable.
The environment variable (or a sysctl/sysconf variable like
vfs.timestamp_ precision but per-process or per-user) is probably
needed, since you don't want to teach all applications about unportable
CLOCK_*.
This is an interesting issue, and one I have conflicted feelings about.
On the one hand, introducing non-portable interfaces to implement what
applications expect from portable ones has a certain bad feeling to it
(and negative implications for how applications behave when not properly
adapted). On the other hand, our ports system is all about adapting
applications to run and package properly on FreeBSD, and modern "portable"
applications achieve their portabability through extensive localization to
each target platform. I.e., we can actually expect that for particularly
performance-sensitive adaptations, minor changes such as changing the
clockid_t passed to a time call in order to optimize critical runloops can
be done. Likewise, we can hope to influence important service libraries,
such as X client libraries, libisc, libevent, and so on. So the idea that
we can affect some critical applications is somewhat realistic.
For example, the MySQL port already contains fairly extensive
this-and-that in order to make it work on FreeBSD at all well (for
example, linking against LinuxThreads). Likewise, other key applications
such as Apache have FreeBSD customizations to use accept filters, and
still others are tweaked to use kqueue. I started reading through MySQL
source code a few days ago to learn more about how time stamps are
actually used, and discovered that they are used for a lot of things --
some for event model stuff (such as for calls into select()), but in other
places for internal performance measurement or to allow useful time stamps
to be preserved in data records. This suggests to me that the best place
to make the quality selection is in the application or framework itself,
not on a per-process or per-application basis -- we can provide a knob to
support that where the application isn't adapted, but having applications
adapted makes a fair amount of sense if they are performance critical and
widespread.
None of this helps us with kernel time measurement and context switch
costs, though, which still need to be addressed.
Robert N M Watson
_______________________________________________
cvs-all@freebsd.org mailing list
http://lists.freebsd.org/mailman/listinfo/cvs-all
To unsubscribe, send any mail to "[EMAIL PROTECTED]"