From owner-freebsd-current@FreeBSD.ORG Fri Dec 3 18:14:49 2010 Return-Path: Delivered-To: freebsd-current@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id CCB21106564A; Fri, 3 Dec 2010 18:14:49 +0000 (UTC) (envelope-from avg@freebsd.org) Received: from citadel.icyb.net.ua (citadel.icyb.net.ua [212.40.38.140]) by mx1.freebsd.org (Postfix) with ESMTP id D165E8FC15; Fri, 3 Dec 2010 18:14:47 +0000 (UTC) Received: from odyssey.starpoint.kiev.ua (alpha-e.starpoint.kiev.ua [212.40.38.101]) by citadel.icyb.net.ua (8.8.8p3/ICyb-2.3exp) with ESMTP id UAA29313; Fri, 03 Dec 2010 20:14:46 +0200 (EET) (envelope-from avg@freebsd.org) Message-ID: <4CF93395.3060601@freebsd.org> Date: Fri, 03 Dec 2010 20:14:45 +0200 From: Andriy Gapon User-Agent: Mozilla/5.0 (X11; U; FreeBSD amd64; en-US; rv:1.9.2.12) Gecko/20101029 Lightning/1.0b2 Thunderbird/3.1.6 MIME-Version: 1.0 To: Jung-uk Kim References: <4CF92852.20705@freebsd.org> <201012031305.53750.jkim@FreeBSD.org> In-Reply-To: <201012031305.53750.jkim@FreeBSD.org> X-Enigmail-Version: 1.1.2 Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: 7bit Cc: freebsd-current@freebsd.org Subject: Re: non-invariant tsc and cputicker X-BeenThere: freebsd-current@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: Discussions about the use of FreeBSD-current List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Fri, 03 Dec 2010 18:14:49 -0000 on 03/12/2010 20:05 Jung-uk Kim said the following: > On Friday 03 December 2010 12:26 pm, Andriy Gapon wrote: >> FreeBSD uses cpu_ticks [function pointer] in a few places for a few >> things like process CPU time accounting. On x86 cpu_ticks always >> points to rdtsc. If TSC is not invariant that leads to incorrect >> accounting of "CPU ticks". The code pretends to try to handle >> changing cpufreq levels, but does that incorrectly. > > Arg... Probably it is my fault. :-( > >> I think that we could use a selected timecounter instead of "raw" >> TSC if the latter is not invariant. In this case cpu_ticks calls >> would be slightly costlier, but always correct. >> >> The change is quite trivial: >> http://people.freebsd.org/~avg/tsc-cputicker.diff >> >> What do you think? > > Why don't we just fix it properly? Patch? :-) It seems that it is not too trivial to do and is prone to error accumulation given how the ticks are added up. Besides, why using a timecounter would not be a proper fix? >> P.S. it's probably a good idea to merge i386 and amd64 tsc.c files >> into a common x86 version, which would be the same as i386 version, >> which seems to be generic enough. > > Agreed. Cool! -- Andriy Gapon