lkml.org 
[lkml]   [2004]   [May]   [8]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
/
Date
From
SubjectRe: RCU scaling on large systems
On Fri, May 07, 2004 at 07:04:36PM -0500, Jack Steiner wrote:
> On Fri, May 07, 2004 at 04:32:35PM -0700, Andrew Morton wrote:
> > Jack Steiner <steiner@sgi.com> wrote:
> > >
> > > The calls to RCU are coming from here:
> > >
> > > [11]kdb> bt
> > > Stack traceback for pid 3553
> > > 0xe00002b007230000 3553 3139 1 11 R 0xe00002b0072304f0 *ls
> > > 0xa0000001000feee0 call_rcu
> > > 0xa0000001001a3b20 d_free+0x80
> > > 0xa0000001001a3ec0 dput+0x340
> > > 0xa00000010016bcd0 __fput+0x210
> > > 0xa00000010016baa0 fput+0x40
> > > 0xa000000100168760 filp_close+0xc0
> > > 0xa000000100168960 sys_close+0x180
> > > 0xa000000100011be0 ia64_ret_from_syscall
> > >
> > > I see this same backtrace from numerous processes.
> >
> > eh? Why is dput freeing the dentry? It should just be leaving it in cache.
> >
> > What filesystem is being used? procfs?
>
> Good possibility. I verified that /proc DOES cause a call to call_rcu.
>
> I also did an strace on "ls". I see the following. Does
> this make sense??? Note open of /proc/meminfo...
>
> [root@piton tmp]# strace -o zzz ls
> espdbd.sock jd_sockV4 ProPack-installer s.eventmond zz zzz
>
> [root@piton tmp]# egrep 'open|close|fork|exec' zzz
> execve("/bin/ls", ["ls"], [/* 26 vars */]) = 0
> open("/etc/ld.so.preload", O_RDONLY) = -1 ENOENT (No such file or
> directory)
> open("/etc/ld.so.cache", O_RDONLY) = 3
> close(3) = 0
> open("/lib/libacl.so.1", O_RDONLY) = 3
> close(3) = 0
> open("/lib/libtermcap.so.2", O_RDONLY) = 3
> close(3) = 0
> open("/lib/tls/libc.so.6.1", O_RDONLY) = 3
> close(3) = 0
> open("/usr/src/redhat/xfs-cmds/attr/libattr/.libs/tls/libattr.so.1",
> O_RDONLY) = -1 ENOENT (No such file or directory)
> open("/usr/src/redhat/xfs-cmds/attr/libattr/.libs/libattr.so.1",
> O_RDONLY) = -1 ENOENT (No such file or directory)
> open("/lib/libattr.so.1", O_RDONLY) = 3
> close(3) = 0
> open("/usr/lib/locale/locale-archive", O_RDONLY) = 3
> close(3) = 0
> open(".", O_RDONLY|O_NONBLOCK|O_DIRECTORY) = 3
> close(3) = 0
> open("/etc/mtab", O_RDONLY) = 3
> close(3) = 0
> >>>> open("/proc/meminfo", O_RDONLY) = 3
> close(3) = 0
>
> Full output of strace:
> [root@piton tmp]# cat zzz
> execve("/bin/ls", ["ls"], [/* 26 vars */]) = 0
> uname({sys="Linux", node="piton.americas.sgi.com", ...}) = 0
> brk(0) = 0x6000000000004000
> open("/etc/ld.so.preload", O_RDONLY) = -1 ENOENT (No such
> file or directory)
> open("/etc/ld.so.cache", O_RDONLY) = 3
> fstat(3, {st_mode=S_IFREG|0644, st_size=82621, ...}) = 0
> mmap(NULL, 82621, PROT_READ, MAP_PRIVATE, 3, 0) =
> 0x2000000000040000
> close(3) = 0
> open("/lib/libacl.so.1", O_RDONLY) = 3
> read(3, "\177ELF\2\1\1\0\0\0\0\0\0\0\0\0\3\0002\0\1\0\0\0
> \'\0\0"..., 640) = 640
> fstat(3, {st_mode=S_IFREG|0644, st_size=187607, ...}) = 0
> mmap(NULL, 160576, PROT_READ|PROT_EXEC, MAP_PRIVATE, 3, 0) =
> 0x2000000000058000
> mprotect(0x2000000000070000, 62272, PROT_NONE) = 0
> mmap(0x2000000000078000, 32768, PROT_READ|PROT_WRITE,
> MAP_PRIVATE|MAP_FIXED, 3, 0x10000) = 0x2000000000078000
> close(3) = 0
> open("/lib/libtermcap.so.2", O_RDONLY) = 3
> read(3, "\177ELF\2\1\1\0\0\0\0\0\0\0\0\0\3\0002\0\1\0\0\0
> \31\0"..., 640) = 640
> fstat(3, {st_mode=S_IFREG|0755, st_size=26088, ...}) = 0
> mmap(NULL, 16384, PROT_READ|PROT_WRITE,
> MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x2000000000080000
> mmap(NULL, 89656, PROT_READ|PROT_EXEC, MAP_PRIVATE, 3, 0) =
> 0x2000000000084000
> mprotect(0x200000000008c000, 56888, PROT_NONE) = 0
> mmap(0x2000000000094000, 32768, PROT_READ|PROT_WRITE,
> MAP_PRIVATE|MAP_FIXED, 3, 0) = 0x2000000000094000
> close(3) = 0
> open("/lib/tls/libc.so.6.1", O_RDONLY) = 3
> read(3,
> "\177ELF\2\1\1\0\0\0\0\0\0\0\0\0\3\0002\0\1\0\0\0\320\252"...,
> 640) = 640
> fstat(3, {st_mode=S_IFREG|0755, st_size=9329267, ...}) = 0
> mmap(NULL, 2519264, PROT_READ|PROT_EXEC, MAP_PRIVATE, 3, 0) =
> 0x200000000009c000
> mmap(0x20000000002ec000, 81920, PROT_READ|PROT_WRITE,
> MAP_PRIVATE|MAP_FIXED, 3, 0x240000) = 0x20000000002ec000
> mmap(0x2000000000300000, 12512, PROT_READ|PROT_WRITE,
> MAP_PRIVATE|MAP_FIXED|MAP_ANONYMOUS, -1, 0) = 0x2000000000300000
> close(3) = 0
> open("/usr/src/redhat/xfs-cmds/attr/libattr/.libs/tls/libattr.so.1",
> O_RDONLY) = -1 ENOENT (No such file or directory)
> stat("/usr/src/redhat/xfs-cmds/attr/libattr/.libs/tls",
> 0x60000fffffffad00) = -1 ENOENT (No such file or directory)
> open("/usr/src/redhat/xfs-cmds/attr/libattr/.libs/libattr.so.1",
> O_RDONLY) = -1 ENOENT (No such file or directory)
> stat("/usr/src/redhat/xfs-cmds/attr/libattr/.libs",
> 0x60000fffffffad00) = -1 ENOENT (No such file or directory)
> open("/lib/libattr.so.1", O_RDONLY) = 3
> read(3,
> "\177ELF\2\1\1\0\0\0\0\0\0\0\0\0\3\0002\0\1\0\0\0\240\31"...,
> 640) = 640
> fstat(3, {st_mode=S_IFREG|0644, st_size=55577, ...}) = 0
> mmap(NULL, 102360, PROT_READ|PROT_EXEC, MAP_PRIVATE, 3, 0) =
> 0x2000000000304000
> mprotect(0x2000000000310000, 53208, PROT_NONE) = 0
> mmap(0x2000000000314000, 49152, PROT_READ|PROT_WRITE,
> MAP_PRIVATE|MAP_FIXED, 3, 0) = 0x2000000000314000
> close(3) = 0
> mmap(NULL, 16384, PROT_READ|PROT_WRITE,
> MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x2000000000320000
> mmap(NULL, 32768, PROT_READ|PROT_WRITE,
> MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x2000000000324000
> mmap(NULL, 16384, PROT_READ|PROT_WRITE,
> MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x200000000032c000
> mmap(NULL, 16384, PROT_READ|PROT_WRITE,
> MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x2000000000330000
> munmap(0x2000000000040000, 82621) = 0
> brk(0) = 0x6000000000004000
> brk(0x6000000000028000) = 0x6000000000028000
> brk(0) = 0x6000000000028000
> open("/usr/lib/locale/locale-archive", O_RDONLY) = 3
> fstat(3, {st_mode=S_IFREG|0644, st_size=34848240, ...}) = 0
> mmap(NULL, 34848240, PROT_READ, MAP_PRIVATE, 3, 0) =
> 0x2000000000334000
> close(3) = 0
> rt_sigaction(SIGTERM, {0x400000000001e9a0, [], SA_RESTART},
> {SIG_DFL}, 8) = 0
> rt_sigaction(SIGKILL, {0x400000000001e9a0, [], SA_RESTART},
> {SIG_DFL}, 8) = -1 EINVAL (Invalid argument)
> rt_sigaction(SIGSTOP, {0x400000000001e9a0, [], SA_RESTART},
> {SIG_DFL}, 8) = -1 EINVAL (Invalid argument)
> ioctl(1, TCGETS or SNDCTL_TMR_TIMEBASE, {B9600 opost isig icanon
> echo ...}) = 0
> ioctl(1, TIOCGWINSZ, {ws_row=38, ws_col=137, ws_xpixel=0,
> ws_ypixel=0}) = 0
> open(".", O_RDONLY|O_NONBLOCK|O_DIRECTORY) = 3
> fstat(3, {st_mode=S_IFDIR|S_ISVTX|0777, st_size=4096, ...}) = 0
> fcntl(3, F_SETFD, FD_CLOEXEC) = 0
> getdents64(0x3, 0x60000000000095d8, 0x4000) = 432
> getdents64(0x3, 0x60000000000095d8, 0x4000) = 0
> close(3) = 0
> open("/etc/mtab", O_RDONLY) = 3
> fstat(3, {st_mode=S_IFREG|0644, st_size=1533, ...}) = 0
> mmap(NULL, 65536, PROT_READ|PROT_WRITE,
> MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x2000000002470000
> read(3, "/dev/xscsi/pci01.03.0-1/target1/"..., 16384) = 1533
> close(3) = 0
> munmap(0x2000000002470000, 65536) = 0
> >>>> open("/proc/meminfo", O_RDONLY) = 3
> fstat(3, {st_mode=S_IFREG|0444, st_size=0, ...}) = 0
> mmap(NULL, 65536, PROT_READ|PROT_WRITE,
> MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x2000000002470000
> read(3, "MemTotal: 22874016 kB\nMemFre"..., 1024) = 653
> close(3) = 0
> munmap(0x2000000002470000, 65536) = 0
> fstat(1, {st_mode=S_IFCHR|0620, st_rdev=makedev(136, 2), ...}) =
> 0
> mmap(NULL, 65536, PROT_READ|PROT_WRITE,
> MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x2000000002470000
> write(1, "espdbd.sock jd_sockV4\tProPack-i"..., 62) = 62
> munmap(0x2000000002470000, 65536) = 0
> exit_group(0) = ?
>
> --
> Thanks
>
> Jack Steiner (steiner@sgi.com) 651-683-5302
> Principal Engineer SGI - Silicon Graphics, Inc.
>
>

--
Thanks

Jack Steiner (steiner@sgi.com) 651-683-5302
Principal Engineer SGI - Silicon Graphics, Inc.


-
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/

\
 
 \ /
  Last update: 2005-03-22 14:03    [from the cache]
©2003-2011 Jasper Spaans