From owner-freebsd-arch Sun Feb 17 0:30: 7 2002 Delivered-To: freebsd-arch@freebsd.org Received: from apollo.backplane.com (apollo.backplane.com [216.240.41.2]) by hub.freebsd.org (Postfix) with ESMTP id 3436D37B402; Sun, 17 Feb 2002 00:30:01 -0800 (PST) Received: (from dillon@localhost) by apollo.backplane.com (8.11.6/8.9.1) id g1H8TME68268; Sun, 17 Feb 2002 00:29:22 -0800 (PST) (envelope-from dillon) Date: Sun, 17 Feb 2002 00:29:22 -0800 (PST) From: Matthew Dillon Message-Id: <200202170829.g1H8TME68268@apollo.backplane.com> To: Julian Elischer Cc: Alfred Perlstein , Poul-Henning Kamp , arch@FreeBSD.ORG, jhb@FreeBSD.ORG, peter@wemm.org, jake@locore.ca Subject: Re: gettimeofday() and crhold()/crfree() (was Re: gettimeofday() References: Sender: owner-freebsd-arch@FreeBSD.ORG Precedence: bulk List-ID: List-Archive: (Web Archive) List-Help: (List Instructions) List-Subscribe: List-Unsubscribe: X-Loop: FreeBSD.ORG :either way, could you do you timing tests on a NON-INVARIANT :kernel to judge the difference this makes? :In the mean while, John, is it really necessary to have this there? :I can remove it (and the KASSERTS) in a flash if you'll let me... Sure, here they are... actually fairly significant, I didn't expect complete removal of invariants to have this much of an effect. I fear someone has done something with invariants that's eating more cpu then it should :-( As a bonus, I've also included the patch set I am using against the current -current which identifies the KASSERTs and INVARIANTS I removed to make your code work as advertised with INVARIANTS turned on. This patch set is fairly well tested. I did not include the patch for removing Giant from gettimeofday() (I'll be comitting the gettimeofday giant removal patch on sunday). I'll also re-run the buildworld test with invariants turned off and post a followup to my buildworld posting tomorrow. -Matt (matt's mutex pool adjustments and julian's initial commit now part of current) CURRENT 2xCPU SMP BUILD and removal of Giant for gettimeofday() INVARIANTS TURNED OFF GLOBALLY. one TG running: 576089/sec two TGs running: 429141/sec per TG CURRENT 2xCPU SMP BUILD and ucred invariants blasted to bits and removal of Giant for gettimeofday(). INVARIANTS TURNED ON GLOBALLY one TG running: 462478/sec two TGs running: 361962/sec per TG Index: i386/i386/trap.c =================================================================== RCS file: /home/ncvs/src/sys/i386/i386/trap.c,v retrieving revision 1.212 diff -u -r1.212 trap.c --- i386/i386/trap.c 17 Feb 2002 01:09:54 -0000 1.212 +++ i386/i386/trap.c 17 Feb 2002 08:19:55 -0000 @@ -255,7 +255,9 @@ sticks = td->td_kse->ke_sticks; td->td_frame = &frame; +#if 0 KASSERT(td->td_ucred == NULL, ("already have a ucred")); +#endif if (td->td_ucred != p->p_ucred) cred_update_thread(td); @@ -643,7 +645,7 @@ userret(td, &frame, sticks); mtx_assert(&Giant, MA_NOTOWNED); userout: -#ifdef INVARIANTS +#if 0 mtx_lock(&Giant); crfree(td->td_ucred); mtx_unlock(&Giant); @@ -954,7 +956,9 @@ sticks = td->td_kse->ke_sticks; td->td_frame = &frame; +#if 0 KASSERT(td->td_ucred == NULL, ("already have a ucred")); +#endif if (td->td_ucred != p->p_ucred) cred_update_thread(td); params = (caddr_t)frame.tf_esp + sizeof(int); @@ -1099,7 +1103,7 @@ */ STOPEVENT(p, S_SCX, code); -#ifdef INVARIANTS +#if 0 mtx_lock(&Giant); crfree(td->td_ucred); mtx_unlock(&Giant); Index: kern/kern_fork.c =================================================================== RCS file: /home/ncvs/src/sys/kern/kern_fork.c,v retrieving revision 1.131 diff -u -r1.131 kern_fork.c --- kern/kern_fork.c 17 Feb 2002 01:09:55 -0000 1.131 +++ kern/kern_fork.c 17 Feb 2002 08:19:55 -0000 @@ -799,7 +799,7 @@ kthread_exit(0); } PROC_UNLOCK(p); -#ifdef INVARIANTS +#if 0 mtx_lock(&Giant); crfree(td->td_ucred); mtx_unlock(&Giant); Index: kern/subr_trap.c =================================================================== RCS file: /home/ncvs/src/sys/kern/subr_trap.c,v retrieving revision 1.208 diff -u -r1.208 subr_trap.c --- kern/subr_trap.c 17 Feb 2002 01:09:55 -0000 1.208 +++ kern/subr_trap.c 17 Feb 2002 08:19:57 -0000 @@ -131,7 +131,9 @@ #endif KASSERT(TRAPF_USERMODE(framep), ("ast in kernel mode")); +#if 0 KASSERT(td->td_ucred == NULL, ("leaked ucred")); +#endif #ifdef WITNESS if (witness_list(td)) panic("Returning to user mode with mutex(s) held"); @@ -187,7 +189,7 @@ } userret(td, framep, sticks); -#ifdef INVARIANTS +#if 0 mtx_lock(&Giant); crfree(td->td_ucred); mtx_unlock(&Giant); To Unsubscribe: send mail to majordomo@FreeBSD.org with "unsubscribe freebsd-arch" in the body of the message