From owner-freebsd-fs@FreeBSD.ORG Thu Nov 28 00:25:46 2013 Return-Path: Delivered-To: freebsd-fs@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) (using TLSv1 with cipher ADH-AES256-SHA (256/256 bits)) (No client certificate requested) by hub.freebsd.org (Postfix) with ESMTPS id 6B346ACE for ; Thu, 28 Nov 2013 00:25:46 +0000 (UTC) Received: from esa-jnhn.mail.uoguelph.ca (esa-jnhn.mail.uoguelph.ca [131.104.91.44]) by mx1.freebsd.org (Postfix) with ESMTP id 2E58F8A8 for ; Thu, 28 Nov 2013 00:25:45 +0000 (UTC) X-IronPort-Anti-Spam-Filtered: true X-IronPort-Anti-Spam-Result: AqEEAGWMllKDaFve/2dsb2JhbABZhBKCerVJgTd0giUBAQUjVgwPEQMBAgECAg0ZAiMuCAYTh28DD68KiFwNiAIXgSmLSIFAAQEbNAcGgmWBSAOJQoxnjkWFOYNHHoE1OQ X-IronPort-AV: E=Sophos;i="4.93,786,1378872000"; d="scan'208";a="74150570" Received: from muskoka.cs.uoguelph.ca (HELO zcs3.mail.uoguelph.ca) ([131.104.91.222]) by esa-jnhn.mail.uoguelph.ca with ESMTP; 27 Nov 2013 19:25:44 -0500 Received: from zcs3.mail.uoguelph.ca (localhost.localdomain [127.0.0.1]) by zcs3.mail.uoguelph.ca (Postfix) with ESMTP id 486B7B3F41; Wed, 27 Nov 2013 19:25:45 -0500 (EST) Date: Wed, 27 Nov 2013 19:25:45 -0500 (EST) From: Rick Macklem To: Kirk McKusick Message-ID: <1525534748.22295409.1385598345290.JavaMail.root@uoguelph.ca> In-Reply-To: <201311272320.rARNKEKQ045789@chez.mckusick.com> Subject: Re: RFC: NFS client patch to reduce sychronous writes MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 7bit X-Originating-IP: [172.17.91.202] X-Mailer: Zimbra 7.2.1_GA_2790 (ZimbraWebClient - FF3.0 (Win)/7.2.1_GA_2790) Cc: FreeBSD FS X-BeenThere: freebsd-fs@freebsd.org X-Mailman-Version: 2.1.16 Precedence: list List-Id: Filesystems List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Thu, 28 Nov 2013 00:25:46 -0000 Ok, the attchment seemed to get stripped off. Here's the code. Apologies if the mail system I use eats the whitespace, rick #include #include #include #include main(int argc, char *argv[]) { int x, i; char *cp; printf("before open\n"); x = open(argv[1], O_RDWR | O_CREAT, 0666); printf("aft open=%d\n", x); cp = mmap((void *)0, 4096, PROT_READ | PROT_WRITE, MAP_SHARED, x, 0); #ifdef WRITEIT lseek(x, 4090, SEEK_SET); write(x, "B", 1); printf("wrote B at 4090\n"); #endif if (cp != NULL) { *(cp + 4080) = 'A'; if (msync(cp, 0, MS_SYNC) < 0) printf("msync failed\n"); } close(x); } ----- Original Message ----- > > Date: Wed, 27 Nov 2013 17:50:48 -0500 (EST) > > From: Rick Macklem > > To: Konstantin Belousov > > Subject: Re: RFC: NFS client patch to reduce sychronous writes > > > > Kostik wrote: > >> Sorry, I do not understand the question. mmap(2) itself does not > >> change > >> file size. But if mmaped area includes the last page, I still > >> think > >> that the situation I described before is possible. > > > > Yes, I'll need to look at this. If it is a problem, all I can think > > of > > is bzeroing all new pages when they're allocated to the buffer > > cache. > > > > Thanks for looking at it, rick > > ps: Btw, jhb@'s patch didn't have the bzeroing in it. > > The ``fix'' of bzero'ing every buffer cache page was made to UFS/FFS > for this problem and it killed write performance of the filesystem > by nearly half. We corrected this by only doing the bzero when the > file is mmap'ed which helped things considerably (since most files > being written are not also bmap'ed). > > Kirk >