9fans - fans of the OS Plan 9 from Bell Labs
 help / color / mirror / Atom feed
From: andrey mirtchovski <mirtchovski@gmail.com>
To: Fans of the OS Plan 9 from Bell Labs <9fans@9fans.net>
Subject: Re: [9fans] Making read(1) an rc(1) builtin?
Date: Tue,  5 Apr 2011 15:53:43 -0600	[thread overview]
Message-ID: <BANLkTikvRYCKZ_2FmhdzrRnjacnPXposJg@mail.gmail.com> (raw)
In-Reply-To: <C4B72BD0-6CB4-4009-A6AA-9D4AEF09B197@fastmail.fm>

i threw in the line reading code from /sys/src/cmd/read.c into rc.
here are the results:

9grid% cat builtinread
#!/tmp/rcread
for (i in `{seq 1 10000}) { echo $i | read } > /dev/null
9grid% cat origread
#!/bin/rc
for (i in `{seq 1 10000}) { echo $i | read } > /dev/null
9grid% cat noread
#!/bin/rc
for(i in `{seq 1 10000}) { echo $i } > /dev/null

9grid% time builtinread; time origread
1.49u 14.63s 17.61r 	 builtinread
1.63u 21.99s 18.58r 	 origread

I do see a decrease of the context switches by half, but that time is
certainly taken by rc itself.

just the effects of the echo preceding the read:
9grid% time noread
0.87u 9.36s 13.20r 	 noread
9grid%

and just by itself (the rc builtin doesn't support arguments, this
should illustrate that it is in fact a builtin):

9grid% read < /tmp/test
test
9grid% read /tmp/test
(broken)
(broken)
9grid% /bin/read /tmp/test
test
9grid%


under a debugging ramdisk we can see the difference in reads for the
two programs (you can guess that the context switch and the reading of
the binary are lost in the noise of reading a file char-by-char:
9grid% read < test
ramfs 518560:<-Twalk tag 12 fid 579 newfid 693 nwname 1 0:test
ramfs 518560:->Rwalk tag 12 nwqid 1 0:(0000000000000003 3 )
ramfs 518560:<-Topen tag 12 fid 693 mode 0
ramfs 518560:->Ropen tag 12 qid (0000000000000003 3 ) iounit 8192
ramfs 518560:<-Tread tag 12 fid 693 offset 0 count 1
ramfs 518560:->Rread tag 12 count 1 't'
ramfs 518560:<-Tread tag 12 fid 693 offset 1 count 1
ramfs 518560:->Rread tag 12 count 1 'e'
ramfs 518560:<-Tread tag 12 fid 693 offset 2 count 1
ramfs 518560:->Rread tag 12 count 1 's'
ramfs 518560:<-Tread tag 12 fid 693 offset 3 count 1
ramfs 518560:->Rread tag 12 count 1 't'
ramfs 518560:<-Tread tag 12 fid 693 offset 4 count 1
ramfs 518560:->Rread tag 12 count 1 '
'
test
ramfs 518560:<-Tclunk tag 12 fid 693
ramfs 518560:->Rclunk tag 12
9grid% ./read < test
ramfs 518560:<-Twalk tag 12 fid 579 newfid 693 nwname 1 0:test
ramfs 518560:->Rwalk tag 12 nwqid 1 0:(0000000000000003 3 )
ramfs 518560:<-Topen tag 12 fid 693 mode 0
ramfs 518560:->Ropen tag 12 qid (0000000000000003 3 ) iounit 8192
ramfs 518560:<-Twalk tag 12 fid 579 newfid 644 nwname 1 0:read
ramfs 518560:->Rwalk tag 12 nwqid 1 0:(0000000000000002 8 )
ramfs 518560:<-Topen tag 12 fid 644 mode 3
ramfs 518560:->Ropen tag 12 qid (0000000000000002 8 ) iounit 8192
ramfs 518560:<-Tread tag 12 fid 644 offset 0 count 32
ramfs 518560:->Rread tag 12 count 32 '000001eb 00007e20 00001084
00000420 00003e21 000013b7 00000000 000016c6'
ramfs 518560:<-Tclunk tag 12 fid 644
ramfs 518560:->Rclunk tag 12
ramfs 518560:<-Tread tag 12 fid 693 offset 0 count 1
ramfs 518560:->Rread tag 12 count 1 't'
ramfs 518560:<-Tread tag 12 fid 693 offset 1 count 1
ramfs 518560:->Rread tag 12 count 1 'e'
ramfs 518560:<-Tread tag 12 fid 693 offset 2 count 1
ramfs 518560:->Rread tag 12 count 1 's'
ramfs 518560:<-Tread tag 12 fid 693 offset 3 count 1
ramfs 518560:->Rread tag 12 count 1 't'
ramfs 518560:<-Tread tag 12 fid 693 offset 4 count 1
ramfs 518560:->Rread tag 12 count 1 '
'
test
ramfs 518560:<-Tclunk tag 12 fid 693
ramfs 518560:->Rclunk tag 12
9grid%

so, an optimized /sys/src/cmd/read.c that doesn't read char-by-char
should give us an improvement, right? right:
9grid% newaread
1.52u 22.56s 15.66r 	 newaread

and that's just for the silly "test" string. the improvement would be
bigger for longer strings.

code for aread is on sources: /contrib/andrey/aread.c

YMMV.



  reply	other threads:[~2011-04-05 21:53 UTC|newest]

Thread overview: 47+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2011-04-03 22:30 smiley at zenzebra.mv.com
2011-04-03 23:22 ` pmarin
2011-04-03 23:41 ` Tristan Plumb
2011-04-04  2:02   ` Ethan Grammatikidis
2011-04-04  2:53   ` erik quanstrom
2011-04-04  7:54     ` Tristan Plumb
2011-04-04  9:26     ` roger peppe
2011-04-04 21:35       ` smiley
2011-04-04 21:46         ` Anthony Sorace
2011-04-04 22:03           ` erik quanstrom
2011-04-05  8:57           ` Balwinder S Dheeman
2011-04-04 22:00         ` Oleg Finkelshteyn
2011-04-04 22:33         ` erik quanstrom
2011-04-04 23:01         ` Lyndon Nerenberg
2011-04-05  8:58         ` yy
2011-04-05 19:54           ` Ethan Grammatikidis
2011-04-05 19:56             ` erik quanstrom
2011-04-05 20:54               ` Ethan Grammatikidis
2011-04-05 21:53                 ` andrey mirtchovski [this message]
2011-04-06 16:32                   ` Bakul Shah
2011-04-06 16:43                     ` roger peppe
2011-04-06 18:15                       ` erik quanstrom
2011-04-06 18:37                         ` Yaroslav
2011-04-07  8:45                           ` Greg Comeau
2011-04-06 18:18                     ` erik quanstrom
2011-04-07  8:45                     ` Greg Comeau
2011-04-05  9:10         ` roger peppe
2011-04-05 15:47           ` ron minnich
2011-04-05 15:52             ` Jacob Todd
2011-04-05 15:57               ` erik quanstrom
2011-04-05 16:04               ` Rudolf Sykora
2011-04-05 17:17                 ` ron minnich
2011-04-05 17:49             ` smiley
2011-04-05 18:01               ` erik quanstrom
2011-04-05 19:50               ` Yaroslav
2011-04-06 15:27                 ` smiley
2011-04-06 15:32                   ` Jacob Todd
2011-04-07  1:26                     ` [9fans] Busy mouse WAS: " smiley
2011-04-07 11:49                       ` erik quanstrom
2011-04-07 19:59                         ` smiley
2011-04-07 20:19                           ` erik quanstrom
2011-04-09 12:26                             ` smiley
2011-04-09 12:33                               ` erik quanstrom
2011-04-05 16:28         ` [9fans] " dexen deVries
2011-04-05 17:05         ` Bakul Shah
2011-04-03 23:51 ` Lyndon Nerenberg (VE6BBM/VE7TFX)
2011-04-04  3:01 ` erik quanstrom

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=BANLkTikvRYCKZ_2FmhdzrRnjacnPXposJg@mail.gmail.com \
    --to=mirtchovski@gmail.com \
    --cc=9fans@9fans.net \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).