From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from euclid.skiles.gatech.edu (list@euclid.skiles.gatech.edu [130.207.146.50]) by coral.primenet.com.au (8.7.5/8.7.3) with ESMTP id HAA04250 for ; Sun, 25 Aug 1996 07:23:24 +1000 (EST) Received: (from list@localhost) by euclid.skiles.gatech.edu (8.7.3/8.7.3) id RAA05698; Sat, 24 Aug 1996 17:16:37 -0400 (EDT) Resent-Date: Sat, 24 Aug 1996 17:16:37 -0400 (EDT) From: "Bart Schaefer" Message-Id: <960824141541.ZM453@candle.brasslantern.com> Date: Sat, 24 Aug 1996 14:15:41 -0700 In-Reply-To: Zoltan Hidvegi "The speed of zsh" (Aug 24, 9:59pm) References: <199608241959.VAA01891@hzoli.ppp.cs.elte.hu> Reply-To: schaefer@nbn.com X-Mailer: Z-Mail (4.0b.729 29jul96) To: Zoltan Hidvegi , zsh-workers@math.gatech.edu (Zsh hacking and development) Subject: Re: The speed of zsh MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Resent-Message-ID: <"bwZNL3.0.yO1.q4t7o"@euclid> Resent-From: zsh-workers@math.gatech.edu X-Mailing-List: archive/latest/2066 X-Loop: zsh-workers@math.gatech.edu Precedence: list Resent-Sender: zsh-workers-request@math.gatech.edu 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"