[Bug 222356] www/firefox: file-backed shared memory performance

bugzilla-noreply at freebsd.org bugzilla-noreply at freebsd.org
Mon Sep 18 20:16:33 UTC 2017


https://bugs.freebsd.org/bugzilla/show_bug.cgi?id=222356

--- Comment #10 from Tijl Coosemans <tijl at FreeBSD.org> ---
(In reply to Konstantin Belousov from comment #9)
That makes Firefox usable again, thanks.  There's still some disk I/O that
seems too much to be just metadata, but I could be wrong about that.

If I add a call to fsync before close in the test program above there's still a
lot of disk I/O that is fixed by the patch below but it made no difference on
Firefox.  The only other thing I can think of is that write(2) on an unlinked
file still goes straight to the file system, but a patch for that wasn't
immediately obvious to me.  I've added the backtrace below.

Index: sys/kern/vfs_syscalls.c
===================================================================
--- sys/kern/vfs_syscalls.c     (revision 323578)
+++ sys/kern/vfs_syscalls.c     (working copy)
@@ -3346,6 +3346,8 @@ kern_fsync(struct thread *td, int fd, bool fullsync)
        if (error != 0)
                return (error);
        vp = fp->f_vnode;
+       if ((vp->v_vflag & VV_NOSYNC) != 0)
+               goto drop;
 #if 0
        if (!fullsync)
                /* XXXKIB: compete outstanding aio writes */;

db> t 982
Tracing pid 982 tid 100143 td 0xfffff800049b8560
sched_switch() at sched_switch+0x263/frame 0xfffffe0096d7d310
mi_switch() at mi_switch+0xd4/frame 0xfffffe0096d7d340
sleepq_wait() at sleepq_wait+0x3a/frame 0xfffffe0096d7d370
_sleep() at _sleep+0x22d/frame 0xfffffe0096d7d3f0
waitrunningbufspace() at waitrunningbufspace+0x77/frame 0xfffffe0096d7d410
bufwrite() at bufwrite+0x199/frame 0xfffffe0096d7d450
cluster_wbuild() at cluster_wbuild+0x7dd/frame 0xfffffe0096d7d500
cluster_write() at cluster_write+0x5da/frame 0xfffffe0096d7d5e0
ffs_write() at ffs_write+0x3e2/frame 0xfffffe0096d7d680
VOP_WRITE_APV() at VOP_WRITE_APV+0x103/frame 0xfffffe0096d7d790
vn_write() at vn_write+0x1b6/frame 0xfffffe0096d7d810
vn_io_fault1() at vn_io_fault1+0x168/frame 0xfffffe0096d7d950
vn_io_fault() at vn_io_fault+0x189/frame 0xfffffe0096d7d9c0
dofilewrite() at dofilewrite+0x89/frame 0xfffffe0096d7da10
kern_writev() at kern_writev+0x68/frame 0xfffffe0096d7da60
sys_write() at sys_write+0x86/frame 0xfffffe0096d7dab0
amd64_syscall() at amd64_syscall+0x562/frame 0xfffffe0096d7dbf0
Xfast_syscall() at Xfast_syscall+0xfb/frame 0xfffffe0096d7dbf0
--- syscall (4, FreeBSD ELF64, sys_write), rip = 0x80099660a, rsp =
0x7fffffffea88, rbp = 0x7fffffffeaf0 ---
db> show lockedvnods
Locked vnodes
vnode 0xfffff800686793b0: tag ufs, type VREG
    usecount 1, writecount 1, refcount 546 mountedhere 0
    flags (VV_NOSYNC|VI_ACTIVE)
    v_object 0xfffff80068684870 ref 0 pages 4352 cleanbuf 543 dirtybuf 1
    lock type ufs: EXCL by thread 0xfffff800049b8560 (pid 982, nosync, tid
100143)
        ino 3945559, on dev ada0p5

-- 
You are receiving this mail because:
You are the assignee for the bug.


More information about the freebsd-gecko mailing list