tech-userlevel archive

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

Re: NetBSD truss(1), coredumper(1) and performance bottlenecks



    Date:        Fri, 24 May 2019 13:57:26 +0200
    From:        Kamil Rytarowski <n54%gmx.com@localhost>
    Message-ID:  <049cb255-b647-a241-7d41-4ec2a11517f8%gmx.com@localhost>


  | It prints now program name for the -f option and decodes properly text
  | string for read(2).
  |
  | =2E/truss -o /tmp/log.txt -f /usr/src/build.sh
  |
  | Part of log.txt:
  |
  |  8836 sh read(12, "#!/bin/sh\n#\n#\t$NetBSD: osrelease", 1016)=3D  0x3f8
  |  8836 sh read(12, "O EVENT SHALL THE FOUNDATION OR ", 1016)=3D  0x3f8
  |  8836 sh open("/usr/src/sys/conf/../sys/param.h"..., O_RDONLY)=3D  0x3
  |  8836 sh dup2()                                            =3D  0
  |  8836 sh close(3)                                          =3D  0
  |  8836 sh read(0, "/", 1)                                   =3D  0x1
  |  8836 sh read(0, "*", 1)                                   =3D  0x1
  |  8836 sh read(0, "\t", 1)                                  =3D  0x1

That's executing the read builtin command - that's the one place in
sh where it has to read 1 byte at a time still, as it is reading
stdin (which is obvious there from the read(0,...)) and it isn't
allowed to read more than one line, so that whatever follows is
available for whatever is to read stdin next.

I'm not sure exactly where that comes from however, build.sh only
uses read in one place that I can see ...

        if [ -n "${BUILDINFO}" ]; then
                printf "%b\n" "${BUILDINFO}" | \
                while read -r line ; do
                        [ -s "${line}" ] && continue
                        statusmsg2 "BUILDINFO:"  "${line}"
                done
        fi

which doesn't have it reading param.h I don't think...

So, is that from something that make runs?   There are often
better ways to do things that while read loops (but not always).

kre



Home | Main Index | Thread Index | Old Index