Re: [PATCH v5 1/4] p0004-read-tree: perf test to time read-tree
On 4/6/2017 4:20 PM, René Scharfe wrote:
Show 60 quoted lines
> Am 05.04.2017 um 19:38 schrieb git@jeffhostetler.com:
>> From: Jeff Hostetler <jeffhost@microsoft.com>
>>
>> Signed-off-by: Jeff Hostetler <jeffhost@microsoft.com>
>> ---
>> t/perf/p0004-read-tree.sh | 116 ++++++++++++++++++++++++++++++++++++++++++++++
>> 1 file changed, 116 insertions(+)
>> create mode 100755 t/perf/p0004-read-tree.sh
>>
>> diff --git a/t/perf/p0004-read-tree.sh b/t/perf/p0004-read-tree.sh
>> new file mode 100755
>> index 0000000..5d8bbf5
>> --- /dev/null
>> +++ b/t/perf/p0004-read-tree.sh
>> @@ -0,0 +1,116 @@
>> +#!/bin/sh
>> +
>> +test_description="Tests performance of read-tree"
>> +
>> +. ./perf-lib.sh
>> +
>> +test_perf_default_repo
>> +test_checkout_worktree
>> +
>> +## usage: dir depth width files
>> +make_paths () {
>> + for f in $(seq $4)
>> + do
>> + echo $1/file$f
>> + done;
>> + if test $2 -gt 0;
>> + then
>> + for w in $(seq $3)
>> + do
>> + make_paths $1/dir$w $(($2 - 1)) $3 $4
>> + done
>> + fi
>> + return 0
>> +}
>
> "make_paths xxx_dir_xxx 5 10 9" takes more than a minute for me.
> Providing its results as a file would be quicker but less flexible.
> The following command prints the same result in less than a second.
>
> awk -v dir=xxx_dir_xxx -v depth=5 -v width=10 -v files=9 '
> function make_paths(dir, depth, width, files, i)
> {
> for (i = 1; i <= files; i++) {
> print dir "/file" i
> }
> if (depth > 0) {
> for (i = 1; i <= width; i++) {
> make_paths(dir "/dir" i, depth - 1, width, files)
> }
> }
> }
> END {make_paths(dir, depth, width, files)}
> ' </dev/null
>
> It's faster because it avoids calling seq thousands of times.Very nice!!! I'll give that a try. Thanks!
Show 11 quoted lines
>
>> +
>> +fill_index () {
>> + make_paths $1 $2 $3 $4 |
>> + sed "s/^/100644 $EMPTY_BLOB /" |
>
> You could add the prefix to the script above and avoid this sed call
> as well.
>
> René
>