[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Bash performance when declaring variables (was: Re: [Help-bash] make fun
From: |
Eduardo A . Bustamante López |
Subject: |
Bash performance when declaring variables (was: Re: [Help-bash] make function local) |
Date: |
Thu, 16 Apr 2015 11:48:12 -0500 |
User-agent: |
Mutt/1.5.23 (2014-03-12) |
On Thu, Apr 16, 2015 at 11:07:34AM -0400, Chet Ramey wrote:
[...]
> I knew that rang a bell somewhere. mt_hash is a function in the bash
> malloc library that keeps track of all allocations and deallocations in
> a table. It's part of the debugging that is enabled when you build from
> the devel code. It's been well-known for a long time that the debugging
> code in malloc slows bash down considerably; that's why it's not enabled
> as part of bash releases.
Actually, this is the post that motivated me to look into this:
(yes, the conclusion is idiotic, but I guess the rest of the post is pretty
okay).
http://spencertipping.com/posts/2013.0814.bash-is-irrecoverably-broken.html
Now, there is some truth to what he says:
dualbus@yaqui ...src/gnu/bash % time ./bash -c 'i=0; while ((i++<1000)); do
declare a$RANDOM$RANDOM=1; done'
./bash -c 'i=0; while ((i++<1000)); do declare a$RANDOM$RANDOM=1; done' 0.01s
user 0.06s system 93% cpu 0.077 total
dualbus@yaqui ...src/gnu/bash % time ./bash -c 'i=0; while ((i++<10000)); do
declare a$RANDOM$RANDOM=1; done'
./bash -c 'i=0; while ((i++<10000)); do declare a$RANDOM$RANDOM=1; done' 0.16s
user 0.48s system 98% cpu 0.643 total
dualbus@yaqui ...src/gnu/bash % time ./bash -c 'i=0; while ((i++<100000)); do
declare a$RANDOM$RANDOM=1; done'
./bash -c 'i=0; while ((i++<100000)); do declare a$RANDOM$RANDOM=1; done'
15.44s user 6.51s system 99% cpu 21.959 total
I built bash like this:
CFLAGS='-pg -g -O0' ./configure --silent && make -sj4 DEBUG= MALLOC_DEBUG=
To make sure the malloc debugging code doesn't interfere.
I got a gprof profile with that last run, which gave:
Each sample counts as 0.01 seconds.
% cumulative self self total
time seconds seconds calls s/call s/call name
71.42 12.07 12.07 1100104 0.00 0.00 hash_search
21.18 15.65 3.58 275435 0.00 0.00 morecore
1.63 15.93 0.28 6800525 0.00 0.00 internal_malloc
0.71 16.05 0.12 6200116 0.00 0.00 internal_free
0.59 16.15 0.10 300001 0.00 0.00 expand_word_internal
0.24 16.19 0.04 6800474 0.00 0.00 sh_xmalloc
0.18 16.22 0.03 7203779 0.00 0.00 is_basic
0.18 16.25 0.03 1932530 0.00 0.00 is_basic
0.18 16.28 0.03 200002 0.00 0.00 subexpr
0.18 16.31 0.03 100008 0.00 0.00 find_special_var
0.15 16.33 0.03 pagealign
Notice how it spends most of the time in these two functions. Yeah, it's not
mt_* like I said, because I did this a time ago and forgot to take notes.
Does this matter much? I don't know. Having 100,000 variables declared does
seem like something stupid. Still, it shouldn't have that quadratic increase in
performance (I didn't even try for 1,000,000 because it was very slow), because
it is a hash table.
--
Eduardo Bustamante
https://dualbus.me/
- Re: [Help-bash] make function local, (continued)
- Re: [Help-bash] make function local, Peng Yu, 2015/04/10
- Re: [Help-bash] make function local, Eduardo A . Bustamante López, 2015/04/10
- Re: [Help-bash] make function local, Greg Wooledge, 2015/04/10
- Re: [Help-bash] make function local, Chet Ramey, 2015/04/11
- Re: [Help-bash] make function local, Greg Wooledge, 2015/04/13
- Re: [Help-bash] make function local, Chet Ramey, 2015/04/13
- Re: [Help-bash] make function local, Chet Ramey, 2015/04/10
- Re: [Help-bash] make function local, Eduardo A . Bustamante López, 2015/04/12
- Re: [Help-bash] make function local, Chet Ramey, 2015/04/13
- Re: [Help-bash] make function local, Chet Ramey, 2015/04/16
- Bash performance when declaring variables (was: Re: [Help-bash] make function local),
Eduardo A . Bustamante López <=
- Re: Bash performance when declaring variables, Chet Ramey, 2015/04/17
- Re: Bash performance when declaring variables, Eduardo A . Bustamante López, 2015/04/17
- Re: [Help-bash] make function local, Chet Ramey, 2015/04/16
- Re: [Help-bash] make function local, Dan Douglas, 2015/04/16
- Re: [Help-bash] make function local, Chet Ramey, 2015/04/16
- Re: [Help-bash] make function local, Dan Douglas, 2015/04/10
Re: [Help-bash] make function local, Linda Walsh, 2015/04/17
Re: [Help-bash] make function local, Eduardo A . Bustamante López, 2015/04/17