NetBSD-Bugs archive

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]

Re: bin/50350: rump/rumpkern/t_sp/stress_{long,short} fail on Core 2 Quad



The following reply was made to PR bin/50350; it has been noted by GNATS.

From: Andreas Gustafsson <gson%gson.org@localhost>
To: "J. Hannken-Illjes" <hannken%eis.cs.tu-bs.de@localhost>
Cc: gnats-bugs%NetBSD.org@localhost
Subject: Re: bin/50350: rump/rumpkern/t_sp/stress_{long,short} fail on Core 2 Quad
Date: Fri, 8 Mar 2019 10:24:36 +0200

 J. Hannken-Illjes wrote:
 > I'm quite sure the fstrans commit only triggers a hidden bug here.
 
 That's what I thought, too, but now that I've looked at the rumpkern
 process with gdb, I'm not so sure anymore.
 
 Here's what I did:
 
   Build a release from 2019.03.07.11.09.48 sources with -V MKDEBUG=yes COPTS=-g
   Boot it and log in
   # cd /usr/tests/rump/rumpkern/
   # ./t_sp stress_short
   (let it run for a couple of minutes)
   ^Z
   # bg
   # gdb rump_server
   (gdb) attach <pid of rump_server_process>
   (gdb) info threads
 
 This showed a total of 162 LWPs, most of which were
 sleeping in ___lwp_park60, but one was in rumpns_membar_sync()
 called from fstrans_alloc_lwp_info():
 
   (gdb) thread 108
   #0  0x000076b82d6aaa17 in rumpns_membar_sync () from /usr/lib/librump.so.0
   #1  0x000076b82c634b13 in fstrans_alloc_lwp_info (mp=mp@entry=0x76b82d5ac000)
       at /usr/src/lib/librumpvfs/../../sys/rump/../kern/vfs_trans.c:341
   #2  0x000076b82c6352e9 in fstrans_get_lwp_info (do_alloc=true,
       mp=0x76b82d5ac000)
       at /usr/src/lib/librumpvfs/../../sys/rump/../kern/vfs_trans.c:410
   #3  _fstrans_start (wait=1, lock_type=FSTRANS_SHARED, mp=0x76b82d5ac000)
       at /usr/src/lib/librumpvfs/../../sys/rump/../kern/vfs_trans.c:454
   #4  fstrans_start (mp=0x76b82d5ac000)
       at /usr/src/lib/librumpvfs/../../sys/rump/../kern/vfs_trans.c:492
   #5  0x000076b82d65f3ff in vop_pre (vp=0x76b82c501d20, vp=0x76b82c501d20,
       op=FST_YES, mpsafe=<synthetic pointer>, mp=<synthetic pointer>)
       at /usr/src/lib/librump/../../sys/rump/../kern/vnode_if.c:77
   #6  VOP_LOCK (vp=0x76b82c501d20, flags=<optimized out>)
       at /usr/src/lib/librump/../../sys/rump/../kern/vnode_if.c:1281
   #7  0x000076b82c62f442 in vn_lock (vp=0x76b82c501d20, flags=131074)
       at /usr/src/lib/librumpvfs/../../sys/rump/../kern/vfs_vnops.c:1043
   #8  0x000076b82c642215 in namei_start (startdir_ret=0x76b819ccfba8, isnfsd=0,
       state=0x76b819ccfc50)
       at /usr/src/lib/librumpvfs/../../sys/rump/../kern/vfs_lookup.c:681
   #9  namei_oneroot (isnfsd=0, inhibitmagic=0, neverfollow=0,
       state=0x76b819ccfc50)
       at /usr/src/lib/librumpvfs/../../sys/rump/../kern/vfs_lookup.c:1156
   #10 namei_tryemulroot (state=state@entry=0x76b819ccfc50,
       neverfollow=neverfollow@entry=0, inhibitmagic=inhibitmagic@entry=0,
       isnfsd=isnfsd@entry=0)
       at /usr/src/lib/librumpvfs/../../sys/rump/../kern/vfs_lookup.c:1510
   #11 0x000076b82c6446f2 in namei (ndp=0x76b819ccfdc8)
       at /usr/src/lib/librumpvfs/../../sys/rump/../kern/vfs_lookup.c:1546
   #12 0x000076b82c62fcf3 in vn_open (ndp=0x76b819ccfdc8, fmode=3, cmode=0)
       at /usr/src/lib/librumpvfs/../../sys/rump/../kern/vfs_vnops.c:176
   #13 0x000076b82c63995a in do_open (l=l@entry=0x76b82d105000, dvp=0x0,
       pb=0x76b82d591240, open_flags=open_flags@entry=2,
       open_mode=open_mode@entry=0, fd=fd@entry=0x76b819ccfeec)
       at /usr/src/lib/librumpvfs/../../sys/rump/../kern/vfs_syscalls.c:1590
   #14 0x000076b82c639aa9 in do_sys_openat (l=0x76b82d105000,
       fdat=fdat@entry=-100, path=<optimized out>, flags=2, mode=0,
       fd=fd@entry=0x76b819ccfeec)
       at /usr/src/lib/librumpvfs/../../sys/rump/../kern/vfs_syscalls.c:1674
   #15 0x000076b82c639bfc in sys_open (l=<optimized out>, uap=<optimized out>,
       retval=0x76b819ccff10)
       at /usr/src/lib/librumpvfs/../../sys/rump/../kern/vfs_syscalls.c:1695
   #16 0x000076b82da01359 in sy_call (rval=0x76b819ccff10, uap=0x76b82b99f0c0,
       l=0x76b82d105000, sy=0x76b82d8eec38 <rumpns_sysent+120>)
       at /usr/src/sys/rump/kern/lib/libsysproxy/../../../../sys/syscallvar.h:65
   #17 sy_invoke (code=5, rval=0x76b819ccff10, uap=0x76b82b99f0c0,
       l=0x76b82d105000, sy=0x76b82d8eec38 <rumpns_sysent+120>)
       at /usr/src/sys/rump/kern/lib/libsysproxy/../../../../sys/syscallvar.h:94
   #18 hyp_syscall (num=5, arg=0x76b82b99f0c0, retval=0x76b819ccff90)
       at /usr/src/sys/rump/kern/lib/libsysproxy/sysproxy.c:72
   #19 0x000076b82d206bd0 in rumpsyscall (regrv=0x76b819ccff80,
       data=0x76b82b99f0c0, sysnum=5)
       at /usr/src/lib/librumpuser/rumpuser_sp.c:267
   #20 serv_handlesyscall (rhdr=0x76b82b9a3308, rhdr=0x76b82b9a3308,
       data=0x76b82b99f0c0 "\265\031\340\322", spc=0x76b82d40c3b0)
       at /usr/src/lib/librumpuser/rumpuser_sp.c:690
   #21 serv_workbouncer (arg=<optimized out>)
       at /usr/src/lib/librumpuser/rumpuser_sp.c:773
   #22 0x000076b82ce0b7d8 in pthread__create_tramp (cookie=0x76b81db2c000)
       at /usr/src/lib/libpthread/pthread.c:593
   #23 0x000076b82ca8b350 in ?? () from /usr/lib/libc.so.12
 
 fstrans_alloc_lwp_info() was looping over the fstrans_fli_head list,
 and tracing it manually, I was unable to get to the end of the list,
 so I wrote a gdb loop to print the entire list:
 
   set pager off
   set var $n = fstrans_fli_head.lh_first
   while $n
       set var $n = $n->fli_list.le_next
       print $n
   end
 
 This printed:
 
   $608 = (struct fstrans_lwp_info *) 0x76b8193b0740
   $609 = (struct fstrans_lwp_info *) 0x76b8193b0790
   $610 = (struct fstrans_lwp_info *) 0x76b8193b07e0
   [...]
   $218906 = (struct fstrans_lwp_info *) 0x76b82d53cd20
   $218907 = (struct fstrans_lwp_info *) 0x76b82d53ce10
   $218908 = (struct fstrans_lwp_info *) 0x0
 
 Thats 218,300 elements.  Is the list really supposed to get that large?
 -- 
 Andreas Gustafsson, gson%gson.org@localhost
 


Home | Main Index | Thread Index | Old Index