From: Sebastian Gniazdowski <sgniazdowski@gmail.com>
To: zsh-workers@zsh.org
Subject: Re: Slowdown around 5.0.5-dev-0
Date: Thu, 15 Oct 2015 15:03:36 +0200 [thread overview]
Message-ID: <CAKc7PVDSH0CsHomXre_3ErbmtCU7HfECRob_9PD_8GdF=LEwYw@mail.gmail.com> (raw)
In-Reply-To: <151014213224.ZM15646@torch.brasslantern.com>
[-- Attachment #1: Type: text/plain, Size: 1123 bytes --]
On 15 October 2015 at 06:32, Bart Schaefer <schaefer@brasslantern.com> wrote:
> Given that we have direct evidence that it's beneficial to use NEWHEAPS
> in doshfunc() in at least one case, I'll go ahead and commit 36853 and
> we can see how it goes.
I've written a script that makes some memory testing easy:
https://github.com/psprint/zsh-tools/blob/master/mem-test.zsh
It runs copies of given zshells, which are directed to call specified
test function from the script. The test function then waits for the
main zsh to query memory size (via top). Example execution:
# Tests for zsh
string_test 480
array_test 3.21875
# Tests for zsh-head-both
string_test 5.1953125
array_test 3.05859375
# Tests for zsh-5.1.1-dev-0-clean
string_test 5.76171875
array_test 2.703125
Results are in megabytes of RES memory. The first set is for 5.0.2. It
seems there is something causing high memory usage, which isn't
activated for the array test, only for string_test.
I will write more more stressful functions to grasp any differences.
What test function could stress the recent changes?
Best regards,
Sebastian Gniazdowski
[-- Attachment #2: mem-test.zsh --]
[-- Type: application/octet-stream, Size: 2751 bytes --]
#!/bin/zsh
emulate -L zsh
setopt extendedglob
zshs=( /bin/zsh zsh-head-both zsh-5.1.1-dev-0-clean )
# Convert sizes to number of megabytes
to_mbytes() {
local size="$1"
#echo "Converting $1"
if [[ "$size" = [0-9]#[Mm]* ]]; then
size="${size%[Mm]*}"
elif [[ "$size" = [0-9]#[Kk]* ]]; then
size="${size%[Kk]*}"
(( size = size / 1024.0 ))
elif [[ "$size" = [0-9]# ]]; then
case $( uname ) in
*Linux*)
(( size = size / 1024.0 ))
;;
*)
(( size = size / (1024.0 * 1024.0) ))
;;
esac
else
echo "Bad size occured: $size"
fi
REPLY="$size"
}
#
# Children administration
#
trap "finished" SIGUSR1
finished() {
FINISHED=1
}
# Waits for signal from child process
# Gets its memory size
wait_get_mem() {
while [ "$FINISHED" -eq 0 ]; do
LANG=C sleep 0.5
done
case $( uname ) in
*Darwin*)
output=( "${(@f)"$( top -pid "$SUB_PID" -stats mem -l 1 )"}" )
to_mbytes "$output[-1]"
;;
*Linux*)
output=( "${(@f)"$( top -p "$SUB_PID" -bn 1 )"}" )
output=$output[-1]
output=( $=output )
to_mbytes "$output[6]"
;;
esac
kill -15 "$SUB_PID"
# Suitable for gnuplot - X Y
echo "$TEST $REPLY"
}
_finished_signal_wait() {
kill -SIGUSR1 "$MAIN_PID"
sleep 60
}
#
# Tests
#
tests=( string_test array_test )
string_test() {
local a=""
integer i=50000
while (( i -- )); do a+="$i"; done
_finished_signal_wait
}
array_test() {
typeset -a a
integer i=10000
while (( i -- )); do a+=( $i ); done
_finished_signal_wait
}
#
# Main code
#
# Detect main vs. for-test invocation
if [ -z "$1" ]; then
for current_zsh in "$zshs[@]"; do
type "$current_zsh" 2>/dev/null 1>&2 || { echo >&2 "Skipping non-accessible $current_zsh"; continue }
zsh_binary="${current_zsh##*/}"
echo "# Tests for $zsh_binary"
for test in "$tests[@]"; do
FINISHED=0
TEST="$test"
"$current_zsh" -c "source ./$0 $$ \"$current_zsh\" $test" &
SUB_PID=$!
wait_get_mem
done
echo
echo
done
# Example gnuplot invocation:
#set style data histogram
#set style fill solid border rgb "black"
#plot "result" index 0 using 2: xtic(1), "result" index 1 using 2: xtic(1), "result" index 2 using 2: xtic(1)
else
MAIN_PID="$1"
zsh_binary="${2##*/}"
shift
shift
# Echo status only when output is not to terminal
[ ! -t 1 ] && echo >&2 "Running [$zsh_binary]: $@"
# Run the test
"$@"
fi
next prev parent reply other threads:[~2015-10-15 13:04 UTC|newest]
Thread overview: 61+ messages / expand[flat|nested] mbox.gz Atom feed top
2015-10-10 10:54 Sebastian Gniazdowski
2015-10-10 17:58 ` Bart Schaefer
2015-10-10 18:11 ` Sebastian Gniazdowski
2015-10-10 18:32 ` Sebastian Gniazdowski
2015-10-11 0:06 ` Bart Schaefer
2015-10-11 6:20 ` Bart Schaefer
2015-10-11 8:39 ` Sebastian Gniazdowski
2015-10-11 16:17 ` Bart Schaefer
2015-10-11 16:48 ` Sebastian Gniazdowski
2015-10-11 17:31 ` Bart Schaefer
2015-10-11 18:05 ` Sebastian Gniazdowski
2015-10-11 21:22 ` Bart Schaefer
2015-10-12 8:21 ` Sebastian Gniazdowski
2015-10-12 14:01 ` Bart Schaefer
2015-10-12 16:50 ` Sebastian Gniazdowski
2015-10-13 0:33 ` Bart Schaefer
2015-10-13 8:21 ` Sebastian Gniazdowski
2015-10-13 15:52 ` Bart Schaefer
2015-10-14 6:50 ` Sebastian Gniazdowski
2015-10-14 13:27 ` Peter Stephenson
2015-10-14 16:25 ` Bart Schaefer
2015-10-14 16:50 ` Bart Schaefer
2015-10-15 4:32 ` Bart Schaefer
2015-10-15 13:03 ` Sebastian Gniazdowski [this message]
2015-10-16 0:35 ` Bart Schaefer
2015-10-17 9:12 ` Sebastian Gniazdowski
2015-10-17 9:24 ` Sebastian Gniazdowski
2015-10-18 16:19 ` Bart Schaefer
2015-10-18 20:40 ` Sebastian Gniazdowski
2015-10-18 21:07 ` Bart Schaefer
2015-10-18 21:31 ` Sebastian Gniazdowski
2015-10-19 17:21 ` Bart Schaefer
2015-10-22 12:49 ` Sebastian Gniazdowski
2015-10-22 15:00 ` Bart Schaefer
2015-10-22 16:28 ` Sebastian Gniazdowski
2015-10-22 16:33 ` Sebastian Gniazdowski
2015-10-23 15:40 ` Sebastian Gniazdowski
2015-10-23 15:57 ` Sebastian Gniazdowski
2015-10-23 19:26 ` Bart Schaefer
2015-10-23 23:50 ` Bart Schaefer
2015-10-24 6:09 ` Sebastian Gniazdowski
2015-10-24 7:37 ` Sebastian Gniazdowski
2015-10-24 8:04 ` Sebastian Gniazdowski
2015-10-24 19:39 ` Bart Schaefer
2015-10-25 7:35 ` Sebastian Gniazdowski
2015-10-25 17:23 ` Bart Schaefer
2015-10-25 20:56 ` Sebastian Gniazdowski
2015-10-26 0:49 ` Bart Schaefer
2015-10-26 7:41 ` Sebastian Gniazdowski
2015-10-26 7:47 ` Sebastian Gniazdowski
2015-10-24 6:27 ` Sebastian Gniazdowski
2015-10-24 10:54 ` Sebastian Gniazdowski
2015-10-24 11:25 ` Sebastian Gniazdowski
2015-10-24 16:31 ` Bart Schaefer
2015-10-24 16:41 ` Bart Schaefer
2015-10-23 6:32 ` Sebastian Gniazdowski
2015-10-16 0:37 ` Bart Schaefer
2015-10-13 13:07 ` Sebastian Gniazdowski
2015-10-13 13:31 ` Sebastian Gniazdowski
2015-10-12 12:05 ` Sebastian Gniazdowski
2015-10-12 15:13 ` Bart Schaefer
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to='CAKc7PVDSH0CsHomXre_3ErbmtCU7HfECRob_9PD_8GdF=LEwYw@mail.gmail.com' \
--to=sgniazdowski@gmail.com \
--cc=zsh-workers@zsh.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
Code repositories for project(s) associated with this public inbox
https://git.vuxu.org/mirror/zsh/
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).