Lionel Cons
2013-11-27 22:38:42 UTC
We've observing a *severe* performance regression between ksh
2010-03-05 and 2013-10-08 on Solaris 11, AMD64, LANG is en_US.UTF-8:
# prepare
$ timex seq 1400000 >xxx
# run new ksh
$ timex ~/bin/ksh -c 'function nanosort { typeset -A a ; integer k=0;
while read i ; do key="$i$((k++))" ; a["$key"]="$i" ; done ; printf
"%s\n" "${a[@]}"
; } ; print "${.sh.version}" ; nanosort <xxx >yyy'
Version AIJMP 93v- 2013-10-08
real 32.59
user 32.19
sys 0.30
# run old ksh - much faster
$ timex /bin/ksh -c 'function nanosort { typeset -A a ; integer k=0;
while read i ; do key="$i$((k++))" ; a["$key"]="$i" ; done ; printf
"%s\n" "${a[@]}" ; } ; print "${.sh.version}" ; nanosort <xxx >yyy'
Version JM 93t+ 2010-03-05
real 14.59
user 13.92
sys 0.56
Can anyone explain this? IO-wise the new ksh is better but consumes
much more CPU time, while the old ksh issues more IO requests but
consumes only half as much CPU time.
Lionel
2010-03-05 and 2013-10-08 on Solaris 11, AMD64, LANG is en_US.UTF-8:
# prepare
$ timex seq 1400000 >xxx
# run new ksh
$ timex ~/bin/ksh -c 'function nanosort { typeset -A a ; integer k=0;
while read i ; do key="$i$((k++))" ; a["$key"]="$i" ; done ; printf
"%s\n" "${a[@]}"
; } ; print "${.sh.version}" ; nanosort <xxx >yyy'
Version AIJMP 93v- 2013-10-08
real 32.59
user 32.19
sys 0.30
# run old ksh - much faster
$ timex /bin/ksh -c 'function nanosort { typeset -A a ; integer k=0;
while read i ; do key="$i$((k++))" ; a["$key"]="$i" ; done ; printf
"%s\n" "${a[@]}" ; } ; print "${.sh.version}" ; nanosort <xxx >yyy'
Version JM 93t+ 2010-03-05
real 14.59
user 13.92
sys 0.56
Can anyone explain this? IO-wise the new ksh is better but consumes
much more CPU time, while the old ksh issues more IO requests but
consumes only half as much CPU time.
Lionel