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