Received: from maia.hub.org (unknown [200.46.208.211]) by mail.postgresql.org (Postfix) with ESMTP id 70215634564 for ; Tue, 2 Feb 2010 14:44:04 -0400 (AST) Received: from mail.postgresql.org ([200.46.204.86]) by maia.hub.org (mx1.hub.org [200.46.208.211]) (amavisd-maia, port 10024) with ESMTP id 58286-03 for ; Tue, 2 Feb 2010 18:43:42 +0000 (UTC) X-Greylist: from auto-whitelisted by SQLgrey-1.7.6 Received: from mail.anarazel.de (mail.anarazel.de [217.115.131.40]) by mail.postgresql.org (Postfix) with ESMTP id B107A6438F5 for ; Tue, 2 Feb 2010 13:49:38 -0400 (AST) Received: from alap2.localnet (p579FAFE6.dip.t-dialin.net [87.159.175.230]) by mail.anarazel.de (Postfix) with ESMTPSA id CFE8F448003; Tue, 2 Feb 2010 18:43:52 +0100 (CET) From: Andres Freund To: Robert Haas Subject: Re: [HACKERS] Re: Faster CREATE DATABASE by delaying fsync (was 8.4.1 ubuntu karmic slow createdb) Date: Tue, 2 Feb 2010 18:43:15 +0100 User-Agent: KMail/1.13.0 (Linux/2.6.33-rc5-andres-00243-g6ea299e; KDE/4.3.95; x86_64; ; ) Cc: Greg Stark , Tom Lane , pgsql-hackers@postgresql.org, pgsql-performance@postgresql.org, Michael Clemmons , Hannu Krosing , Scott Marlowe References: <4427a97a0912101235x3ade510blcc00d5ce9883c6b6@mail.gmail.com> <407d949e1001291056q22915b1cqbce5fbc918a15d69@mail.gmail.com> <603c8f071002020936k5723e30kd4eac594092aba3b@mail.gmail.com> In-Reply-To: <603c8f071002020936k5723e30kd4eac594092aba3b@mail.gmail.com> MIME-Version: 1.0 Content-Type: Text/Plain; charset="iso-8859-1" Content-Transfer-Encoding: 7bit Message-Id: <201002021843.49983.andres@anarazel.de> X-Virus-Scanned: Maia Mailguard 1.0.1 X-Spam-Status: No, hits=-2.447 tagged_above=-10 required=5 tests=AWL=0.152, BAYES_00=-2.599 X-Spam-Level: X-Archive-Number: 201002/15 X-Sequence-Number: 37436 On Tuesday 02 February 2010 18:36:12 Robert Haas wrote: > On Fri, Jan 29, 2010 at 1:56 PM, Greg Stark wrote: > > On Tue, Jan 19, 2010 at 3:25 PM, Tom Lane wrote: > >> That function *seriously* needs documentation, in particular the fact > >> that it's a no-op on machines without the right kernel call. The name > >> you've chosen is very bad for those semantics. I'd pick something > >> else myself. Maybe "pg_start_data_flush" or something like that? > > > > I would like to make one token argument in favour of the name I > > picked. If it doesn't convince I'll change it since we can always > > revisit the API down the road. > > > > I envision having two function calls, pg_fsync_start() and > > pg_fsync_finish(). The latter will wait until the data synced in the > > first call is actually synced. The fall-back if there's no > > implementation of this would be for fsync_start() to be a noop (or > > something unreliable like posix_fadvise) and fsync_finish() to just be > > a regular fsync. > > > > I think we can accomplish this with sync_file_range() but I need to > > read up on how it actually works a bit more. In this case it doesn't > > make a difference since when we call fsync_finish() it's going to be > > for the entire file and nothing else will have been writing to these > > files. But for wal writing and checkpointing it might have very > > different performance characteristics. > > > > The big objection to this is that then we don't really have an api for > > FADV_DONT_NEED which is more about cache policy than about syncing to > > disk. So for example a sequential scan might want to indicate that it > > isn't planning on reading the buffers it's churning through but > > doesn't want to force them to be written sooner than otherwise and is > > never going to call fsync_finish(). > > I took a look at this patch today and I agree with Tom that > pg_fsync_start() is a very confusing name. I don't know what the > right name is, but this doesn't fsync so I don't think it shuld have > fsync in the name. Maybe something like pg_advise_abandon() or > pg_abandon_cache(). The current name is really wishful thinking: > you're hoping that it will make the kernel start the fsync, but it > might not. I think pg_start_data_flush() is similarly optimistic. What about: pg_fsync_prepare(). That gives the reason why were doing that and doesnt promise that it is actually doing an fsync. I dislike really having "cache" in the name, because the primary aim is not to discard the cache... Andres