On 06/22/12 10:06, Konstantin Belousov wrote:
Author: kib
Date: Fri Jun 22 07:06:40 2012
New Revision: 237433
URL: http://svn.freebsd.org/changeset/base/237433

Log:
   Implement mechanism to export some kernel timekeeping data to
   usermode, using shared page.  The structures and functions have vdso
   prefix, to indicate the intended location of the code in some future.

   The versioned per-algorithm data is exported in the format of struct
   vdso_timehands, which mostly repeats the content of in-kernel struct
   timehands. Usermode reading of the structure can be lockless.
   Compatibility export for 32bit processes on 64bit host is also
   provided. Kernel also provides usermode with indication about
   currently used timecounter, so that libc can fall back to syscall if
   configured timecounter is unknown to usermode code.

   The shared data updates are initiated both from the tc_windup(), where
   a fast task is queued to do the update, and from sysctl handlers which
   change timecounter. A manual override switch
   kern.timecounter.fast_gettime allows to turn off the mechanism.

   Only x86 architectures export the real algorithm data, and there, only
   for tsc timecounter. HPET counters page could be exported as well, but
   I prefer to not further glue the kernel and libc ABI there until
   proper vdso-based solution is developed.

   Minimal stubs neccessary for non-x86 architectures to still compile
   are provided.

   Discussed with:      bde
   Reviewed by: jhb
   Tested by:   flo
   MFC after:   1 month


@@ -1360,6 +1367,7 @@ tc_windup(void)
  #endif

        timehands = th;
+       taskqueue_enqueue_fast(taskqueue_fast,&tc_windup_push_vdso_task);
  }

  /* Report or change the active timecounter hardware. */

This taskqueue_enqueue_fast() will schedule extra thread to run each time hardclock() fires. One thread may be not a big problem, but together with callout swi and possible other threads woken up there it will wake up several other CPU cores from sleep just to put them back in few microseconds. Now davide@ and me are trying to fix that by avoiding callout SWI use for simple tasks. Please, let's not create another problem same time.

--
Alexander Motin
_______________________________________________
svn-src-head@freebsd.org mailing list
http://lists.freebsd.org/mailman/listinfo/svn-src-head
To unsubscribe, send any mail to "svn-src-head-unsubscr...@freebsd.org"

Reply via email to