[PATCH] test: use dtach(1) instead of screen(1) in emacs tests.

Pieter Praet pieter at praet.org
Tue Nov 15 08:53:57 PST 2011


On Fri, 11 Nov 2011 10:09:17 +0200, Tomi Ollila <tomi.ollila at iki.fi> wrote:
> On Fri, 11 Nov 2011 01:17:37 +0100, Pieter Praet <pieter at praet.org> wrote:
> > On Thu, 10 Nov 2011 14:22:17 -0800, Jameson Graef Rollins <jrollins at finestructure.net> wrote:
> > > From: Tomi Ollila <tomi.ollila at iki.fi>
> > > 
> > > dtach is lighter than screen and is not setuid/setgid program so
> > > TMPDIR does not get reset by dynamic loader when executed.
> > > 
> > 
> > `dtach' may be lighter than `screen', but contrary to my expectations,
> > it appears to be far less efficient:
> > 
> > |      | original [1] | w/ screen [2] | w/ dtach [3] |
> > |------+--------------+---------------+--------------|
> > | real |    0m17.570s |     0m20.132s |    0m28.567s |
> > | user |     0m2.453s |      0m2.593s |     0m2.753s |
> > | sys  |     0m1.700s |      0m1.577s |     0m1.753s |
> 
> This sounds interesting; how were these runs measured?
> Just using shell builtin time command ?
> 

Correct.

> Does time measure the time of the process and it's subprocesses
> or just the process. In any way 20 vs 28 second 'real' time difference
> could indicate that there are more other processes running and
> the context switch time affects user and system time.
> 

I just ran this rather crude ad-hoc script while off to make some coffee :)

  #+begin_src sh
    revs=(749abb74 760b311b tmp)
    loop=5
    cd ~/src/dev/notmuch
    until [ ${loop} == 0 ] ; do
        for i in ${revs[*]} ; do
            git co ${i}
            rm -rf /dev/shm/notmuch/*
            make clean >/dev/null 2>&1
            make >/dev/null 2>&1
            sync
            time make test OPTIONS="--root=/dev/shm/notmuch" | tail -
        done
        loop=$[${loop}-1]
    done
  #+end_src

So, I try to start with a blank slate and then simply time the entire
test suite.  This for each of the relevant commits ("tmp" is a branch on
top of 760b311b, containing only the dtach patch), five times in a row.

The results remained consistent between iterations (17s, 20s, 28s "real"
time, without exception), so they should be fairly accurate.

> Or, dtach does some stupid io things. Or screen does some advanced
> optimizations. Or emacs works more effectively when TERM=screen.
> Or the 'virtual' window size emacs sees is unsuitable...
> 
> 
> > 
> > > Signed-off-by: Jameson Graef Rollins <jrollins at finestructure.net>
> > > ---
> > > This tweaks the original patch slightly by removing the no-longer needed
> > > screenrc variables.
> > > 
> > >  test/test-lib.sh |    5 ++---
> > >  1 files changed, 2 insertions(+), 3 deletions(-)
> > > 
> > > diff --git a/test/test-lib.sh b/test/test-lib.sh
> > > index c81c709..c0fe037 100755
> > > --- a/test/test-lib.sh
> > > +++ b/test/test-lib.sh
> > > @@ -50,8 +50,6 @@ TZ=UTC
> > >  TERM=dumb
> > >  export LANG LC_ALL PAGER TERM TZ
> > >  GIT_TEST_CMP=${GIT_TEST_CMP:-diff -u}
> > > -export SCREENRC=/dev/null
> > > -export SYSSCREENRC=/dev/null
> > >  
> > >  # Protect ourselves from common misconfiguration to export
> > >  # CDPATH into the environment
> > > @@ -844,7 +842,8 @@ test_emacs () {
> > >  	if [ -z "$EMACS_SERVER" ]; then
> > >  		EMACS_SERVER="notmuch-test-suite-$$"
> > >  		# start a detached screen session with an emacs server
> > > -		screen -S "$EMACS_SERVER" -d -m "$TMP_DIRECTORY/run_emacs" \
> > > +		TERM=xterm dtach -n "$TMP_DIRECTORY/dtach-emacs-socket-$$" \
> > 
> > It's worth noting that $TERM is only set to "xterm" to deceive `dtach',
> > so thankfully, xterm (and all its deps) aren't actually required to run
> > the tests.
> 
> Actually, emacs SIGSEGVs if there is unsuitable TERM in use. I don't know
> what it originally was.
> 

Hmm, I may have jumped to conclusions there.  I'm glad the part about
being spared from xterm and friends was right, though... :)

> > 
> > > +			"$TMP_DIRECTORY/run_emacs" \
> > >  			--no-window-system \
> > >  			--eval "(setq server-name \"$EMACS_SERVER\")" \
> > >  			--eval '(server-start)' \
> > > -- 
> > > 1.7.7.1
> > > 
> > > _______________________________________________
> > > notmuch mailing list
> > > notmuch at notmuchmail.org
> > > http://notmuchmail.org/mailman/listinfo/notmuch
> > 
> > 
> > Peace
> > 
> > -- 
> > Pieter
> > 
> > [1] @ commit 749abb74
> > [2] @ commit 760b311b
> > [3] @ commit 760b311b + id:"1320963737-1666-1-git-send-email-jrollins at finestructure.net"
> > _______________________________________________
> > notmuch mailing list
> > notmuch at notmuchmail.org
> > http://notmuchmail.org/mailman/listinfo/notmuch
> > 
> 
> Tomi


Peace

-- 
Pieter


More information about the notmuch mailing list