Zsh Mailing List Archive
Messages sorted by: Reverse Date, Date, Thread, Author

Re: The speed of zsh

On Aug 24,  9:59pm, Zoltan Hidvegi wrote:
} Subject: The speed of zsh
} Somehow ksh spawns external commands twice as fast as zsh.

I suspect it has something to do with zsh's use of pipes for synchronizing
parent and child processes; the zsh parent doesn't do anything until the
child finishes its entersubsh() and closes the pipe.  Ksh probably doesn't
create the pipe in the first place.

It also occurs to me that with child_block()/child_unblock() in use, zsh
probably doesn't *need* the pipe-based synchronization any longer.  Take
it out and see what happens.

} The patch below improves zsh preformance by 10-15%.  An other 10% speed
} improvement would be possible by avoiding the
} child_block()/child_unblock() calls whenever possible (other shells do not
} use any system calls while executing builtin-only scritpts).

I think I said before that we could avoid those if we aren't going to fork
and if the job table is empty.  Maybe they're expensive enough to be worth
the extra test.  On what do you base the 10% figure?

(I'm reasonably sure that with no forks and nothing in the job table, zsh
needs neither the signal blocks nor the pipe sync.)

}   %   cumulative   self              self     total           
}  time   seconds   seconds    calls  ms/call  ms/call  name    
}   4.60    159.35    15.87   899991     0.02     0.04  paramsubst
}   3.96    173.02    13.67 20300232     0.00     0.00  halloc
}   1.58    227.07     5.46 15000174     0.00     0.00  hcalloc

Wow.  That's an awful lot of allocations (no wonder the heap makes so much
difference to zsh's speed), and paramsubst() is pretty expensive per call.

Bart Schaefer                             Brass Lantern Enterprises
http://www.well.com/user/barts            http://www.nbn.com/people/lantern

New male in /home/schaefer:
>N  2 Justin William Schaefer  Sat May 11 03:43  53/4040  "Happy Birthday"

Messages sorted by: Reverse Date, Date, Thread, Author