Glenn Fowler wrote:
[I split the email thread into multiple topics]
> I think the point is that if the common usage is to
> sum many different files, or one file at a time over
> long spans of time then the performance of getting
> the bytes from the filesystem to user space may
> outweigh any cache optimization gains
> 
> the ast apps are already at a disadvantage because they
> pull in extra .so's over the base case(s) they are measured against
> 
> what I need is a big view analysis of at least a few more variables
> so that resonable decisions can be made of ifdef'ing up the code
> 
> e.g.,
> 
> what is the startup cost of the extra .so's?

Example:
"truss -d" for the old "mkfifo" looks like this:
-- snip --
Base time stamp:  1253739410.3487  [ Wed Sep 23 22:56:50 CEST 2009 ]
 0.0000
execve("/home/test001/ksh93/svn/scripts/benchmarks/tmp/oldcmd/mkfifo",
0xFFBFFB5C, 0xFFBFFB68)  argc = 2
 0.0040 mmap(0x00000000, 8192, PROT_READ|PROT_WRITE,
MAP_PRIVATE|MAP_ANON, -1, 0) = 0xFF3A0000
 0.0041 mmap(0x00000000, 8192, PROT_READ|PROT_WRITE,
MAP_PRIVATE|MAP_ANON, -1, 0) = 0xFF390000
 0.0043 memcntl(0xFF3B0000, 31928, MC_ADVISE, MADV_WILLNEED, 0, 0) = 0
 0.0043 memcntl(0x00010000, 2332, MC_ADVISE, MADV_WILLNEED, 0, 0) = 0
 0.0044 resolvepath("/usr/lib/ld.so.1", "/lib/ld.so.1", 1023) = 12
 0.0045
resolvepath("/home/test001/ksh93/svn/scripts/benchmarks/tmp/oldcmd/mkfifo",
"/home/test001/ksh93/svn/scripts/benchmarks/tmp/oldcmd/mkfifo", 1023) =
60
 0.0047
stat64("/home/test001/ksh93/svn/scripts/benchmarks/tmp/oldcmd/mkfifo",
0xFFBFF780) = 0
 0.0047 open("/var/ld/ld.config", O_RDONLY)             Err#2 ENOENT
 0.0048 stat64("/lib/libc.so.1", 0xFFBFEF18)            = 0
 0.0049 resolvepath("/lib/libc.so.1", "/lib/libc.so.1", 1023) = 14
 0.0050 open("/lib/libc.so.1", O_RDONLY)                = 3
 0.0052 mmapobj(3, 0x00020000, 0xFF3F79A8, 0xFFBFEFAC, 0x00000000) = 0
 0.0052 close(3)                                        = 0
 0.0054 memcntl(0xFF200000, 200528, MC_ADVISE, MADV_WILLNEED, 0, 0) = 0
 0.0055 mmap(0x00000000, 8192, PROT_READ|PROT_WRITE|PROT_EXEC,
MAP_PRIVATE|MAP_ANON, -1, 0) = 0xFF380000
 0.0060 mmap(0x00010000, 24576, PROT_READ|PROT_WRITE|PROT_EXEC,
MAP_PRIVATE|MAP_ANON|MAP_ALIGN, -1, 0) = 0xFF370000
 0.0061 getcontext(0xFFBFF5F0)
 0.0062 getrlimit(RLIMIT_STACK, 0xFFBFF5D0)             = 0
 0.0062 getpid()                                        = 25515 [25514]
 0.0063 setustack(0xFF372A88)
 0.0065 umask(0)                                        = 022
 0.0066 brk(0x00022530)                                 = 0
 0.0067 brk(0x00024530)                                 = 0
 0.0068 stat64("/usr/lib/locale/en_US.UTF-8/en_US.UTF-8.so.3",
0xFFBFE9A8) = 0
 0.0069 resolvepath("/usr/lib/locale/en_US.UTF-8/en_US.UTF-8.so.3",
"/usr/lib/locale/en_US.UTF-8/en_US.UTF-8.so.3", 1023) = 44
 0.0070 open("/usr/lib/locale/en_US.UTF-8/en_US.UTF-8.so.3", O_RDONLY) =
3
 0.0071 mmapobj(3, 0x00020000, 0xFF380600, 0xFFBFEA3C, 0x00000000) = 0
 0.0071 close(3)                                        = 0
 0.0072 memcntl(0xFEF70000, 9776, MC_ADVISE, MADV_WILLNEED, 0, 0) = 0
 0.0073 stat64("/usr/lib/locale/en_US.UTF-8/libc.so.1", 0xFFBFE860)
Err#2 ENOENT
 0.0074 stat64("/usr/lib/locale/en_US.UTF-8/methods_unicode.so.3",
0xFFBFE860) = 0
 0.0075 resolvepath("/usr/lib/locale/en_US.UTF-8/methods_unicode.so.3",
"/usr/lib/locale/common/methods_unicode.so.3", 1023) = 43
 0.0076 open("/usr/lib/locale/en_US.UTF-8/methods_unicode.so.3",
O_RDONLY) = 3
 0.0078 mmapobj(3, 0x00020000, 0xFF380C68, 0xFFBFE8F4, 0x00000000) = 0
 0.0078 close(3)
-- snip --

the same for the new (AST-based) "mkfifo" version looks like this:
-- snip --
Base time stamp:  1253739365.6076  [ Wed Sep 23 22:56:05 CEST 2009 ]
 0.0000 execve("/usr/bin/mkfifo", 0xFFFFFFFF7FFFFAC8,
0xFFFFFFFF7FFFFAE0)  argc = 2
 0.0042 mmap(0x00000000, 8192, PROT_READ|PROT_WRITE,
MAP_PRIVATE|MAP_ANON, -1, 0) = 0xFFFFFFFF7F500000
 0.0044 mmap(0x00000000, 8192, PROT_READ|PROT_WRITE,
MAP_PRIVATE|MAP_ANON, -1, 0) = 0xFFFFFFFF7F400000
 0.0045 memcntl(0xFFFFFFFF7F600000, 42272, MC_ADVISE, MADV_WILLNEED, 0,
0) = 0
 0.0046 memcntl(0x100000000, 6976, MC_ADVISE, MADV_WILLNEED, 0, 0) = 0
 0.0046 resolvepath("/usr/lib/sparcv9/ld.so.1", "/lib/sparcv9/ld.so.1",
1023) = 20
 0.0047 resolvepath("/usr/bin/mkfifo", "/usr/bin/mkfifo", 1023) = 15
 0.0048 stat("/usr/bin/mkfifo", 0xFFFFFFFF7FFFF618)     = 0
 0.0049 open("/var/ld/64/ld.config", O_RDONLY)          Err#2 ENOENT
 0.0050 stat("/lib/64/libc.so.1", 0xFFFFFFFF7FFFED00)   = 0
 0.0051 resolvepath("/lib/64/libc.so.1", "/lib/sparcv9/libc.so.1", 1023)
= 22
 0.0052 open("/lib/64/libc.so.1", O_RDONLY)             = 3
 0.0052 mmap(0x00000000, 8192, PROT_READ|PROT_WRITE|PROT_EXEC,
MAP_PRIVATE|MAP_ANON, -1, 0) = 0xFFFFFFFF7F300000
 0.0054 mmapobj(3, 0x00020000, 0xFFFFFFFF7F300030, 0xFFFFFFFF7FFFE83C,
0x00000000) = 0
 0.0055 close(3)                                        = 0
 0.0057 memcntl(0xFFFFFFFF7F000000, 228176, MC_ADVISE, MADV_WILLNEED, 0,
0) = 0
 0.0062 mmap(0x00010000, 24576, PROT_READ|PROT_WRITE|PROT_EXEC,
MAP_PRIVATE|MAP_ANON|MAP_ALIGN, -1, 0) = 0xFFFFFFFF7EF00000
 0.0063 getcontext(0xFFFFFFFF7FFFF120)
 0.0064 getrlimit(RLIMIT_STACK, 0xFFFFFFFF7FFFF0E0)     = 0
 0.0064 getpid()                                        = 25508 [25507]
 0.0065 setustack(0xFFFFFFFF7EF02AC0)
 0.0067 stat("/lib/64/libast.so.1", 0xFFFFFFFF7FFFE9E0) Err#2 ENOENT
 0.0068 stat("/usr/lib/64/libast.so.1", 0xFFFFFFFF7FFFE9E0) = 0
 0.0069 resolvepath("/usr/lib/64/libast.so.1",
"/usr/lib/sparcv9/libast.so.1", 1023) = 28
 0.0070 open("/usr/lib/64/libast.so.1", O_RDONLY)       = 3
 0.0072 mmapobj(3, 0x00020000, 0xFFFFFFFF7F301338, 0xFFFFFFFF7FFFE51C,
0x00000000) = 0
 0.0072 close(3)                                        = 0
 0.0074 memcntl(0xFFFFFFFF7EB00000, 138392, MC_ADVISE, MADV_WILLNEED, 0,
0) = 0
 0.0082 readlink("/proc/self/path/a.out", "/usr/bin/mkfifo", 1025) = 15
 0.0085 sysconfig(_CONFIG_PAGESIZE)                     = 8192
 0.0086 brk(0x100104BC0)                                = 0
 0.0086 brk(0x10010CBC0)                                = 0
 0.0087 stat("/platform/SUNW,A70/lib/sparcv9/libc_psr.so.1",
0xFFFFFFFF7FFFDDD0) = 0
 0.0088 resolvepath("/platform/SUNW,A70/lib/sparcv9/libc_psr.so.1",
"/platform/sun4u-us3/lib/sparcv9/libc_psr.so.1", 1023) = 45
 0.0090 open("/platform/SUNW,A70/lib/sparcv9/libc_psr.so.1", O_RDONLY) =
3
 0.0091 mmapobj(3, 0x00020000, 0xFFFFFFFF7F301E60, 0xFFFFFFFF7FFFD90C,
0x00000000) = 0
 0.0091 close(3)                                        = 0
 0.0092 mmap(0x00000000, 8192, PROT_READ|PROT_WRITE|PROT_EXEC,
MAP_PRIVATE|MAP_ANON, -1, 0) = 0xFFFFFFFF7E900000
 0.0093 schedctl()                                      =
0xFFFFFFFF7E8E8000
 0.0094 sigaction(SIGSEGV, 0xFFFFFFFF7FFFEA90, 0xFFFFFFFF7FFFEB80) = 0
 0.0095 sigaction(SIGSEGV, 0xFFFFFFFF7FFFEA90, 0xFFFFFFFF7FFFEB80) = 0
 0.0095 sigfillset(0xFFFFFFFF7F252904)                  = 0
 0.0096 lwp_sigmask(SIG_SETMASK, 0x00000000, 0x00000000) = 0xFFBFFEFF
[0x0000FFFF]
 0.0097 brk(0x10010CBC0)                                = 0
 0.0097 brk(0x100110BC0)                                = 0
 0.0099 stat("/usr/lib/locale/en_US.UTF-8/sparcv9/en_US.UTF-8.so.3",
0xFFFFFFFF7FFFDC50) = 0
 0.0101
resolvepath("/usr/lib/locale/en_US.UTF-8/sparcv9/en_US.UTF-8.so.3",
"/usr/lib/locale/en_US.UTF-8/sparcv9/en_US.UTF-8.so.3", 1023) = 52
 0.0102 open("/usr/lib/locale/en_US.UTF-8/sparcv9/en_US.UTF-8.so.3",
O_RDONLY) = 3
 0.0103 mmapobj(3, 0x00020000, 0xFFFFFFFF7E9009C0, 0xFFFFFFFF7FFFD78C,
0x00000000) = 0
 0.0104 close(3)                                        = 0
 0.0105 memcntl(0xFFFFFFFF7E500000, 16168, MC_ADVISE, MADV_WILLNEED, 0,
0) = 0
 0.0106 stat("/usr/lib/locale/en_US.UTF-8/sparcv9/libc.so.1",
0xFFFFFFFF7FFFD9D0) Err#2 ENOENT
 0.0107 stat("./libc.so.1", 0xFFFFFFFF7FFFD9D0)         Err#2 ENOENT
 0.0108 stat("/usr/lib/locale/en_US.UTF-8/sparcv9/methods_unicode.so.3",
0xFFFFFFFF7FFFD9D0) = 0
 0.0109
resolvepath("/usr/lib/locale/en_US.UTF-8/sparcv9/methods_unicode.so.3",
"/usr/lib/locale/common/sparcv9/methods_unicode.so.3", 1023) = 51
 0.0110 open("/usr/lib/locale/en_US.UTF-8/sparcv9/methods_unicode.so.3",
O_RDONLY) = 3
 0.0111 mmapobj(3, 0x00020000, 0xFFFFFFFF7E9015F0, 0xFFFFFFFF7FFFD50C,
0x00000000) = 0
 0.0112 close(3)
-- snip --

The difference here is 0.0034 seconds. This sounds tiny but this sum-up
over 1000000 iterations in the benchmarks of the Sun performance people
and the C team will only look at the absolute numbers and treat these
extra costs as "regression" (which means the change cannot make it into
OS/Net with today's rules).

----

Bye,
Roland

-- 
  __ .  . __
 (o.\ \/ /.o) roland.ma...@nrubsig.org
  \__\/\/__/  MPEG specialist, C&&JAVA&&Sun&&Unix programmer
  /O /==\ O\  TEL +49 641 3992797
 (;O/ \/ \O;)
_______________________________________________
perf-discuss mailing list
perf-discuss@opensolaris.org

Reply via email to