From owner-freebsd-hackers@freebsd.org Wed Oct 2 14:05:32 2019 Return-Path: Delivered-To: freebsd-hackers@mailman.nyi.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1]) by mailman.nyi.freebsd.org (Postfix) with ESMTP id 39B9A130082 for ; Wed, 2 Oct 2019 14:05:32 +0000 (UTC) (envelope-from kostikbel@gmail.com) Received: from kib.kiev.ua (kib.kiev.ua [IPv6:2001:470:d5e7:1::1]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) server-signature RSA-PSS (4096 bits)) (Client did not present a certificate) by mx1.freebsd.org (Postfix) with ESMTPS id 46jyZz1s1Pz4Sqy for ; Wed, 2 Oct 2019 14:05:31 +0000 (UTC) (envelope-from kostikbel@gmail.com) Received: from tom.home (kib@localhost [127.0.0.1]) by kib.kiev.ua (8.15.2/8.15.2) with ESMTPS id x92E5NDj036059 (version=TLSv1.3 cipher=TLS_AES_256_GCM_SHA384 bits=256 verify=NO); Wed, 2 Oct 2019 17:05:26 +0300 (EEST) (envelope-from kostikbel@gmail.com) DKIM-Filter: OpenDKIM Filter v2.10.3 kib.kiev.ua x92E5NDj036059 Received: (from kostik@localhost) by tom.home (8.15.2/8.15.2/Submit) id x92E5NtI036058; Wed, 2 Oct 2019 17:05:23 +0300 (EEST) (envelope-from kostikbel@gmail.com) X-Authentication-Warning: tom.home: kostik set sender to kostikbel@gmail.com using -f Date: Wed, 2 Oct 2019 17:05:23 +0300 From: Konstantin Belousov To: Sebastian Huber Cc: FreeBSD Subject: Re: Make timehands count selectable at boottime? Message-ID: <20191002140523.GB44691@kib.kiev.ua> References: <0d534569-504f-52c2-f09c-b977fe80843d@embedded-brains.de> <20191001143718.GU44691@kib.kiev.ua> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: User-Agent: Mutt/1.12.2 (2019-09-21) X-Spam-Status: No, score=-1.0 required=5.0 tests=ALL_TRUSTED,BAYES_00, DKIM_ADSP_CUSTOM_MED,FORGED_GMAIL_RCVD,FREEMAIL_FROM, NML_ADSP_CUSTOM_MED autolearn=no autolearn_force=no version=3.4.2 X-Spam-Checker-Version: SpamAssassin 3.4.2 (2018-09-13) on tom.home X-Rspamd-Queue-Id: 46jyZz1s1Pz4Sqy X-Spamd-Bar: / Authentication-Results: mx1.freebsd.org; dkim=none; dmarc=fail reason="No valid SPF, No valid DKIM" header.from=gmail.com (policy=none); spf=softfail (mx1.freebsd.org: 2001:470:d5e7:1::1 is neither permitted nor denied by domain of kostikbel@gmail.com) smtp.mailfrom=kostikbel@gmail.com X-Spamd-Result: default: False [-0.99 / 15.00]; ARC_NA(0.00)[]; NEURAL_HAM_MEDIUM(-0.99)[-0.994,0]; DMARC_POLICY_SOFTFAIL(0.10)[gmail.com : No valid SPF, No valid DKIM,none]; FROM_HAS_DN(0.00)[]; FREEMAIL_FROM(0.00)[gmail.com]; IP_SCORE(0.00)[ip: (-2.71), ipnet: 2001:470::/32(-4.53), asn: 6939(-3.34), country: US(-0.05)]; MIME_GOOD(-0.10)[text/plain]; HAS_XAW(0.00)[]; NEURAL_HAM_LONG(-1.00)[-1.000,0]; R_SPF_SOFTFAIL(0.00)[~all:c]; IP_SCORE_FREEMAIL(0.00)[]; TO_MATCH_ENVRCPT_SOME(0.00)[]; TO_DN_ALL(0.00)[]; RCPT_COUNT_TWO(0.00)[2]; SUBJECT_ENDS_QUESTION(1.00)[]; FROM_EQ_ENVFROM(0.00)[]; R_DKIM_NA(0.00)[]; FREEMAIL_ENVFROM(0.00)[gmail.com]; ASN(0.00)[asn:6939, ipnet:2001:470::/32, country:US]; MIME_TRACE(0.00)[0:+]; RCVD_TLS_ALL(0.00)[]; RCVD_COUNT_TWO(0.00)[2] X-BeenThere: freebsd-hackers@freebsd.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Technical Discussions relating to FreeBSD List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Wed, 02 Oct 2019 14:05:32 -0000 On Wed, Oct 02, 2019 at 08:48:33AM +0200, Sebastian Huber wrote: > On 01/10/2019 16:37, Konstantin Belousov wrote: > > On Tue, Oct 01, 2019 at 12:48:46PM +0200, Sebastian Huber wrote: > >> Hello, > >> > >> a recent commit made the timehands count selectable at boottime: > >> > >> https://reviews.freebsd.org/D21563 > >> > >> What was the reason for this change? > > > > See the followup thread on the svn-src@ list for this revision. > > Thanks for the hint. So, this change is related to the PPS handling and > the things which happen between a pps_capture() and pps_event(). Well, it is my reaction to the reports that there might be issues for some people. Apparently, the PPS issues were fixed by other means, see r352196. > > What I don't understand is why more timehands are a problem for the > consumer side. For example: > > void > binuptime(struct bintime *bt) > { > struct timehands *th; > u_int gen; > > do { > th = timehands; > gen = atomic_load_acq_int(&th->th_generation); > *bt = th->th_offset; > bintime_addx(bt, th->th_scale * tc_delta(th)); > atomic_thread_fence_acq(); > } while (gen == 0 || gen != th->th_generation); > } > > With more timehands the time frame in which th->th_generation remains > constant is longer the more timehands you have. So, it is less likely > that you have to execute the loop body twice. The count of timehands is > limited by the timecounter frequency and mask, and the hz configuration. And then the timehands you are looking at might be more stale. Ideally we would use one timehands, making the readers spin while update is done, but the fear is that the spin is too long for SMP, and that UP would suffer up to deadlock.