[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: Why are long functions slower?
From: |
Eduardo A . Bustamante López |
Subject: |
Re: Why are long functions slower? |
Date: |
Sun, 15 Oct 2017 13:53:15 -0500 |
User-agent: |
NeoMutt/20170609 (1.8.3) |
On Tue, Oct 10, 2017 at 03:46:38PM +0200, Bernhard M. Wiedemann wrote:
> Hi,
>
> today I was debugging performance issues with a 200KB bash script [1]
> with bash-4.3 and 4.4
> and it seems that much of it came from a function call that took 0.1
> seconds (and it was done in a loop for 37000 files)
> even though it basically just consisted of an
> if [[ 0 != 0 ]] ; then
Hi Bernhard,
I have some questions:
1. Which specific versions of 4.3 and 4.4?
2. Did you compile bash from source? (if so, what did you use for CFLAGS and
the configure script parameters? are you
using bash's malloc or the system malloc?)
3. ... Or did you use a distro package? (if so, can you provide links to the
specific packages used?)
4. Do you have precise timing information? How specifically did you test? How
many iterations? etc
From what I can tell, most of the overhead should be in `execute_function'
(execute_cmd.c):
- calls `tc = (COMMAND *)copy_command (function_cell (var));' for every
function invocation. For large functions, this
means a lot of copying.
- It also calls `dispose_command(tc)' to dispose of this temporary COMMAND
structure.
There were no changes there between 4.3.30 and 4.4.12. The only noticeable
change I can see is the addition of the
`restore_funcarray_state' function and `struct func_array_state', used to
restore the contents of FUNCNAME between
function invocations. Although from my observation, this doesn't seem to have a
noticeable effect in performance.
signature.asc
Description: PGP signature