From owner-freebsd-bugs@FreeBSD.ORG Wed Jan 30 03:50:01 2008 Return-Path: Delivered-To: freebsd-bugs@hub.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id 1C53816A41A for ; Wed, 30 Jan 2008 03:50:01 +0000 (UTC) (envelope-from gnats@FreeBSD.org) Received: from freefall.freebsd.org (freefall.freebsd.org [IPv6:2001:4f8:fff6::28]) by mx1.freebsd.org (Postfix) with ESMTP id E758413C44B for ; Wed, 30 Jan 2008 03:50:00 +0000 (UTC) (envelope-from gnats@FreeBSD.org) Received: from freefall.freebsd.org (gnats@localhost [127.0.0.1]) by freefall.freebsd.org (8.14.2/8.14.2) with ESMTP id m0U3o07F016942 for ; Wed, 30 Jan 2008 03:50:00 GMT (envelope-from gnats@freefall.freebsd.org) Received: (from gnats@localhost) by freefall.freebsd.org (8.14.2/8.14.1/Submit) id m0U3o0Qt016941; Wed, 30 Jan 2008 03:50:00 GMT (envelope-from gnats) Resent-Date: Wed, 30 Jan 2008 03:50:00 GMT Resent-Message-Id: <200801300350.m0U3o0Qt016941@freefall.freebsd.org> Resent-From: FreeBSD-gnats-submit@FreeBSD.org (GNATS Filer) Resent-To: freebsd-bugs@FreeBSD.org Resent-Reply-To: FreeBSD-gnats-submit@FreeBSD.org, KOIE Hidetaka Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id 4CB8416A41A for ; Wed, 30 Jan 2008 03:43:36 +0000 (UTC) (envelope-from nobody@FreeBSD.org) Received: from www.freebsd.org (www.freebsd.org [IPv6:2001:4f8:fff6::21]) by mx1.freebsd.org (Postfix) with ESMTP id 34E8C13C43E for ; Wed, 30 Jan 2008 03:43:36 +0000 (UTC) (envelope-from nobody@FreeBSD.org) Received: from www.freebsd.org (localhost [127.0.0.1]) by www.freebsd.org (8.14.2/8.14.2) with ESMTP id m0U3fnDU015256 for ; Wed, 30 Jan 2008 03:41:49 GMT (envelope-from nobody@www.freebsd.org) Received: (from nobody@localhost) by www.freebsd.org (8.14.2/8.14.1/Submit) id m0U3fnDP015255; Wed, 30 Jan 2008 03:41:49 GMT (envelope-from nobody) Message-Id: <200801300341.m0U3fnDP015255@www.freebsd.org> Date: Wed, 30 Jan 2008 03:41:49 GMT From: KOIE Hidetaka To: freebsd-gnats-submit@FreeBSD.org X-Send-Pr-Version: www-3.1 Cc: Subject: kern/120138: steal_thresh may be set a wrong value in sched_ule.c X-BeenThere: freebsd-bugs@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: Bug reports List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Wed, 30 Jan 2008 03:50:01 -0000 >Number: 120138 >Category: kern >Synopsis: steal_thresh may be set a wrong value in sched_ule.c >Confidential: no >Severity: non-critical >Priority: low >Responsible: freebsd-bugs >State: open >Quarter: >Keywords: >Date-Required: >Class: sw-bug >Submitter-Id: current-users >Arrival-Date: Wed Jan 30 03:50:00 UTC 2008 >Closed-Date: >Last-Modified: >Originator: KOIE Hidetaka >Release: FreeBSD 8.0-CURRENT amd64 >Organization: surigiken >Environment: System: FreeBSD guriandgura 8.0-CURRENT FreeBSD 8.0-CURRENT #0: Sat Jan 26 13:56 :29 JST 2008 koie@guriandgura:/usr/obj/usr/src/sys/GURIANDGURA amd64 >Description: If mp_ncpus is not a power of 2, ffs(mp_ncpus) != floor(log2(mp_ncpu)). But I'm not seen an irregular system, I don't verify whether the problem occurs. >How-To-Repeat: #include #include #include main() { int i; for (i = 1 ;i < 10;i++) printf("%d %d %d %d\n", i, ffs(i)-1, fls(i)-1, (int)floor(log(i)/log(2))); } >Fix: use fls(). Patch attached with submission follows: --- sched_ule.c.orig 2008-01-30 12:08:11.896645510 +0900 +++ sched_ule.c 2008-01-30 12:15:32.154540563 +0900 @@ -1365,11 +1365,11 @@ sched_initticks(void *dummy) */ balance_interval = realstathz; /* - * Set steal thresh to log2(mp_ncpu) but no greater than 4. This + * Set steal thresh to floor(log2(mp_ncpu)) but no greater than 4. This * prevents excess thrashing on large machines and excess idle on * smaller machines. */ - steal_thresh = min(ffs(mp_ncpus) - 1, 4); + steal_thresh = min(fls(mp_ncpus) - 1, 4); affinity = SCHED_AFFINITY_DEFAULT; #endif } >Release-Note: >Audit-Trail: >Unformatted: