From owner-freebsd-gecko@freebsd.org Sat Sep 16 16:44:42 2017 Return-Path: Delivered-To: freebsd-gecko@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id E4D83E2147A for ; Sat, 16 Sep 2017 16:44:42 +0000 (UTC) (envelope-from bugzilla-noreply@freebsd.org) Received: from mailman.ysv.freebsd.org (unknown [127.0.1.3]) by mx1.freebsd.org (Postfix) with ESMTP id C908580BD2 for ; Sat, 16 Sep 2017 16:44:42 +0000 (UTC) (envelope-from bugzilla-noreply@freebsd.org) Received: by mailman.ysv.freebsd.org (Postfix) id C876FE21479; Sat, 16 Sep 2017 16:44:42 +0000 (UTC) Delivered-To: gecko@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id C824EE21478 for ; Sat, 16 Sep 2017 16:44:42 +0000 (UTC) (envelope-from bugzilla-noreply@freebsd.org) Received: from kenobi.freebsd.org (kenobi.freebsd.org [IPv6:2001:1900:2254:206a::16:76]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client did not present a certificate) by mx1.freebsd.org (Postfix) with ESMTPS id 9E2C080BCF for ; Sat, 16 Sep 2017 16:44:42 +0000 (UTC) (envelope-from bugzilla-noreply@freebsd.org) Received: from bugs.freebsd.org ([127.0.1.118]) by kenobi.freebsd.org (8.15.2/8.15.2) with ESMTP id v8GGigQv010489 for ; Sat, 16 Sep 2017 16:44:42 GMT (envelope-from bugzilla-noreply@freebsd.org) From: bugzilla-noreply@freebsd.org To: gecko@FreeBSD.org Subject: [Bug 222356] www/firefox: file-backed shared memory performance Date: Sat, 16 Sep 2017 16:44:42 +0000 X-Bugzilla-Reason: AssignedTo X-Bugzilla-Type: changed X-Bugzilla-Watch-Reason: None X-Bugzilla-Product: Ports & Packages X-Bugzilla-Component: Individual Port(s) X-Bugzilla-Version: Latest X-Bugzilla-Keywords: X-Bugzilla-Severity: Affects Only Me X-Bugzilla-Who: tijl@FreeBSD.org X-Bugzilla-Status: New X-Bugzilla-Resolution: X-Bugzilla-Priority: --- X-Bugzilla-Assigned-To: gecko@FreeBSD.org X-Bugzilla-Flags: maintainer-feedback? X-Bugzilla-Changed-Fields: Message-ID: In-Reply-To: References: Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable X-Bugzilla-URL: https://bugs.freebsd.org/bugzilla/ Auto-Submitted: auto-generated MIME-Version: 1.0 X-BeenThere: freebsd-gecko@freebsd.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: Gecko Rendering Engine issues List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sat, 16 Sep 2017 16:44:43 -0000 https://bugs.freebsd.org/bugzilla/show_bug.cgi?id=3D222356 --- Comment #2 from Tijl Coosemans --- (In reply to Konstantin Belousov from comment #1) There are calls to msync and fsync in Firefox but they seem unrelated. The patch makes no difference (with Firefox patched to use MAP_NOSYNC but no ot= her changes). At some point I also got strange build failures building Firefox= so I suspect the patch isn't safe. Firefox wraps shared memory support in a C++ class. The destructor unmaps = the memory and closes the descriptor. The implementation isn't smart enough to keep a pool or something. I see a lot of disk activity (process in wdrain state) when switching tabs, probably because some C++ objects related to the now inactive tab are destroyed at that point. And when all mappings are removed and all descriptors are closed FreeBSD flushes pages to disk (vm_object_terminate?). When a file has zero links this flushing isn't nee= ded. There's no point in writing data to disk that cannot be read again. The f= ile is essentially extra swap space and pages should only be flushed to disk un= der memory pressure, even without MAP_NOSYNC. The following test program creates a data file on the first run and on the second run it unlinks the file and uses mmap. The second run shouldn't cau= se any disk activity but it does on FreeBSD. #include #include #include #include #include #include int main(void) { struct stat stat; int fd; size_t sz; char *base; sz =3D 1024 * 4096; fd =3D open("nosync.data", O_RDWR | O_CREAT, 0600); fstat(fd, &stat); if(stat.st_size !=3D sz) { ftruncate(fd, sz); base =3D malloc(sz); memset(base, '0', sz); write(fd, base, sz); } else { unlink("nosync.data"); base =3D mmap(NULL, sz, PROT_READ | PROT_WRITE, MAP_SHARED | MAP_NOSYNC, fd, 0); memset(base, (*base - '0' + 1) % 10 + '0', sz); } return(0); } --=20 You are receiving this mail because: You are the assignee for the bug.=