zsh-workers
 help / color / mirror / code / Atom feed
* Re: trying to make things a bit faster...
@ 1999-06-10 15:00 Sven Wischnowsky
  0 siblings, 0 replies; 3+ messages in thread
From: Sven Wischnowsky @ 1999-06-10 15:00 UTC (permalink / raw)
  To: zsh-workers


Peter Stephenson wrote:

> [ about p-mem-1 ]
> 
> I had this same idea.  I also found out it didn't make that much
> difference.  Actually, it wasn't quite the same:  it also skipped heaps
> which had less than a small amount of memory (16 or 32 bytes or something)
> left.  But it still didn't seem to make much difference.

But since it's really quite safe, why shouldn't we...

> [ about p-mem-2 ]
> 
> I only use the zsh memory routines on one machine, so I can't test this all
> that well.  (I'm still worried something nasty may be happening here with
> --enable-lfs, too, but in a compiler-dependent way.)

I've been testing most of these patches with some heavy uses of the
new completion system. In some cases it reduced the number of brk()s and 
sbrk()s from several hundred to less than fifty.
The sizes of the limits may be a bit high, but zsh can get really
hungry for memory.

> 
> > p-exec-1
> >   Several things:
> 
> I think we just have to put all this in and try it.

The ones in p-exec are all quite safe, btw.

> [ about p-exec-2 ]
> 
> I put in a DPUTS at the end of simplifyright() and it doesn't seem to get
> triggered for me either, so far.  I thought it was for really simple
> commands, like a single command given on the command line?  But they same
> to arrive with l->right null anyway.  There's no other case where
> simplification matters so much, so I suggest we just delete it.

Yes, I just didn't dare to do that without asking first.

> ...
> 
> It could be really ancient pfalstad stuff where he wanted to track how
> things we getting executed.  They're all cases where that seems to be the
> only possible use.

Again, yes. In the calling functions the modified structures are not
used again and when the trees were correctly duplicated, they are
never used again.

Bye
 Sven

diff -u os/exec.c Src/exec.c
--- os/exec.c	Tue Jun  8 15:23:06 1999
+++ Src/exec.c	Thu Jun 10 16:48:16 1999
@@ -717,7 +717,6 @@
 	/* Reset donetrap:  this ensures that a trap is only *
 	 * called once for each sublist that fails.          */
 	donetrap = 0;
-	simplifyright(list);
 	slist = list->left;
 
 	/* Loop through code followed by &&, ||, or end of sublist. */
diff -u os/text.c Src/text.c
--- os/text.c	Tue Jun  8 15:23:10 1999
+++ Src/text.c	Thu Jun 10 16:49:38 1999
@@ -169,7 +169,6 @@
 	    if (_List(n)->type & Z_DISOWN)
 		taddstr("|");
 	}
-	simplifyright(_List(n));
 	if (_List(n)->right) {
 	    if (tnewlins)
 		taddnl();
diff -u os/utils.c Src/utils.c
--- os/utils.c	Tue Jun  8 15:23:10 1999
+++ Src/utils.c	Thu Jun 10 16:48:07 1999
@@ -2075,30 +2075,6 @@
     return 0;
 }
 
-/* see if the right side of a list is trivial */
-
-/**/
-void
-simplifyright(List l)
-{
-    Cmd c;
-
-    /*---- when can this be useful? */
-
-    if (l == &dummy_list || !l->right)
-	return;
-    if (l->right->right || l->right->left->right ||
-	l->right->left->flags || l->right->left->left->right ||
-	l->left->flags)
-	return;
-    c = l->left->left->left;
-    if (c->type != SIMPLE || (c->args && nonempty(c->args)) ||
-	(c->redir && nonempty(c->redir)) || (c->vars && nonempty(c->vars)))
-	return;
-    l->right = NULL;
-    return;
-}
-
 /* the ztypes table */
 
 /**/

--
Sven Wischnowsky                         wischnow@informatik.hu-berlin.de


^ permalink raw reply	[flat|nested] 3+ messages in thread

* Re: trying to make things a bit faster...
  1999-06-08 13:35 Sven Wischnowsky
@ 1999-06-10  9:27 ` Peter Stephenson
  0 siblings, 0 replies; 3+ messages in thread
From: Peter Stephenson @ 1999-06-10  9:27 UTC (permalink / raw)
  To: zsh-workers

Sven Wischnowsky wrote:
> p-mem-1
>   This is a relatively small and safe patch that makes zhalloc() a bit
>   faster. Previously, it had to go through all heaps until it found
>   one with enough free memory. but often the first heaps in the list
>   were completely full. So this patch adds a pointer to the first heap
>   with free memory and keeps it up-to-date on heap operations. Then
>   zhalloc() can start it's search at this heap.

I had this same idea.  I also found out it didn't make that much
difference.  Actually, it wasn't quite the same:  it also skipped heaps
which had less than a small amount of memory (16 or 32 bytes or something)
left.  But it still didn't seem to make much difference.

> p-mem-2
>   (I'm not too sure about this one... And it only has an effect when
>   using the zsh allocator.)
>   zsh has the habit of returning memory to the system as soon as
>   possible and to get as few memory from the system as needed. This
>   sometimes results in an impressive number of sbrk()s and brk()s.
>   So this patch makes it sbrk() more memory than it actually needs
>   (thinking about future allocs) and return memory only if the size of 
>   the free chunk at the end exceeds a certain limit.
>   It also increases some other limits (heap size, maximum size of
>   small blocks, number of small blocks allocated in advance).

I only use the zsh memory routines on one machine, so I can't test this all
that well.  (I'm still worried something nasty may be happening here with
--enable-lfs, too, but in a compiler-dependent way.)

> p-exec-1
>   Several things:

I think we just have to put all this in and try it.

> p-exec-2
>   The most interesting of all these patches. It can only be applied on 
>   top of p-exec-1 and saves even more calls to zhalloc().
>   It changes the execution code to not duplicate the node-tree any
>   more (well, only in very few places). This also means that functions 
>   and the like are not simplified/expanded any more when duplicated
>   into real/heap memory.
>   Unfortunately, there are some places which make me fear that we
>   can't do this without some more work (I've put comments like
>   /*---- ... */ in those places): in exec.c we call simplifyright()
>   which changes the node tree it gets -- we can't do that anymore if
>   the tree is not duplicated. I tried to trigger the case where it
>   really modifies the tree but couldn't get it to happen. Does anyone
>   remember what this was for?

I put in a DPUTS at the end of simplifyright() and it doesn't seem to get
triggered for me either, so far.  I thought it was for really simple
commands, like a single command given on the command line?  But they same
to arrive with l->right null anyway.  There's no other case where
simplification matters so much, so I suggest we just delete it.

>   Also, there are three places in exec.c
>   where the node tree is modified directly, setting some pointers to
>   NULL. Again, I don't remember what this was for and when I changed
>   those assignments to (the equivalent of) `foo = (List) -1' in the
>   version that duplicates node trees, I couldn't get zsh to use such a
>   pointer. Does anyone remember why we have these assignments?
>   Finally, this patch avoids ztrdup()ing the pwd for every job (I
>   wanted to put that into p-exec-1 and then forgot to do so).

It could be really ancient pfalstad stuff where he wanted to track how
things we getting executed.  They're all cases where that seems to be the
only possible use.

Completion with correction, which was pretty slow before, seems a lot
faster.  I can't seem myself removing these patches unless somebody can
think of a good reason.

-- 
Peter Stephenson <pws@ibmth.df.unipi.it>       Tel: +39 050 844536
WWW:  http://www.ifh.de/~pws/
Dipartimento di Fisica, Via Buonarroti 2, 56127 Pisa, Italy


^ permalink raw reply	[flat|nested] 3+ messages in thread

* trying to make things a bit faster...
@ 1999-06-08 13:35 Sven Wischnowsky
  1999-06-10  9:27 ` Peter Stephenson
  0 siblings, 1 reply; 3+ messages in thread
From: Sven Wischnowsky @ 1999-06-08 13:35 UTC (permalink / raw)
  To: zsh-workers


I've been playing with a couple of patches that try to make zsh faster 
for some time now. To give you the opportunity to have a look at them
I append them below. I think they shouldn't be put into the baseline 
before we had some discussion about them (but Peter wouldn't do that
anyway).

The patches are:

p-mem-1
  This is a relatively small and safe patch that makes zhalloc() a bit
  faster. Previously, it had to go through all heaps until it found
  one with enough free memory. but often the first heaps in the list
  were completely full. So this patch adds a pointer to the first heap
  with free memory and keeps it up-to-date on heap operations. Then
  zhalloc() can start it's search at this heap.
  This will not make zsh fast as light, but it's very cheap and the
  number of heap allocations makes this interesting.

p-mem-2
  (I'm not too sure about this one... And it only has an effect when
  using the zsh allocator.)
  zsh has the habit of returning memory to the system as soon as
  possible and to get as few memory from the system as needed. This
  sometimes results in an impressive number of sbrk()s and brk()s.
  So this patch makes it sbrk() more memory than it actually needs
  (thinking about future allocs) and return memory only if the size of 
  the free chunk at the end exceeds a certain limit.
  It also increases some other limits (heap size, maximum size of
  small blocks, number of small blocks allocated in advance).

p-exec-1
  Several things:
  - It avoids allocating empty lists in the code (e.g. in functions
    when they are defined). zsh does this a lot: for every command we
    have three lists (redirection, variables, arguments) and many of
    them are empty. Since zsh duplicates such code trees before
    executing them, having NULL pointers instead of empty lists can
    quickly save us several thousands (in fact: tens of thousands)
    calls to zhalloc(), e.g. when using the new completion stuff.
  - It avoids building the job text for those commands that can not be 
    stopped (e.g. when executing a zle widget). It would be better if
    we found a way to avoid all this job stuff altogether for those
    commands that are guarenteed to be executed in the current shell.
  - In execfor() it avoids the call to dupstruct() for the last
    argument.
  - It avoids allocation in math environments (the value stack and
    array). These were zalloc()ed, never changed, and of static size.
    Really no need to allocate them the hard way.
  - It avoids some more allocation: for the underscore parameter (this 
    was done for every command, I think we should keep that cheap and
    make the use of $_ a bit more expensive) and in execbuiltin()
    (where we allocated a buffer containing the arguments again and
    again only to find out at the end that noone requested xtrace --
    the only place where that buffer would have been used).
  Finally a bug-fix: in execfor() and execselect(), when they are
  called without arguments (using the positional parameters), the
  contents of the parameters were ztrdup()ed but never freed. I
  changed that to dupstring().

p-exec-2
  The most interesting of all these patches. It can only be applied on 
  top of p-exec-1 and saves even more calls to zhalloc().
  It changes the execution code to not duplicate the node-tree any
  more (well, only in very few places). This also means that functions 
  and the like are not simplified/expanded any more when duplicated
  into real/heap memory.
  Unfortunately, there are some places which make me fear that we
  can't do this without some more work (I've put comments like
  /*---- ... */ in those places): in exec.c we call simplifyright()
  which changes the node tree it gets -- we can't do that anymore if
  the tree is not duplicated. I tried to trigger the case where it
  really modifies the tree but couldn't get it to happen. Does anyone
  remember what this was for? Also, there are three places in exec.c
  where the node tree is modified directly, setting some pointers to
  NULL. Again, I don't remember what this was for and when I changed
  those assignments to (the equivalent of) `foo = (List) -1' in the
  version that duplicates node trees, I couldn't get zsh to use such a
  pointer. Does anyone remember why we have these assignments?
  Finally, this patch avoids ztrdup()ing the pwd for every job (I
  wanted to put that into p-exec-1 and then forgot to do so).


Ok. Any comments?

Bye
 Sven

begin 600 patches.tar.gz
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
',=N"`$`!`%E_
`
end

--
Sven Wischnowsky                         wischnow@informatik.hu-berlin.de


^ permalink raw reply	[flat|nested] 3+ messages in thread

end of thread, other threads:[~1999-06-10 15:00 UTC | newest]

Thread overview: 3+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
1999-06-10 15:00 trying to make things a bit faster Sven Wischnowsky
  -- strict thread matches above, loose matches on Subject: below --
1999-06-08 13:35 Sven Wischnowsky
1999-06-10  9:27 ` Peter Stephenson

Code repositories for project(s) associated with this public inbox

	https://git.vuxu.org/mirror/zsh/

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).