perf: test: Speed up running brstack test
PATCH 1/1 perf: test: Speed up running brstack test
From: James Clark <[email protected]>
The brstack test runs quite slowly in software models. Part of the reason is "xargs -n1" is quite inefficient in replacing spaces with newlines. While that's not noticeable on normal machines, it is on software models. Use "tr -s ' ' '\n'" instead which can do the same transformation, but is much faster. For comparison on an M1 Macbook Pro:
$ time seq -s ' ' 10000 | xargs -n1 > /dev/null
real 0m2.729s user 0m2.009s sys 0m0.914s $ time seq -s ' ' 10000 | tr -s ' ' '\n' | grep '.' > /dev/null
real 0m0.002s user 0m0.001s sys 0m0.001s
The "grep '.'" is also needed to remove any remaining blank lines.
---
Originally part of this series[1], but I've dropped any Arm specifics, and it stands on its own. No reason this needs to wait on Arm BRBE support (which I'm working on now). I don't expect to have other changes to this test related to BRBE anymore.
[1] https://lore.kernel.org/all/[email protected]/
tools/perf/tests/shell/test_brstack.sh | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-)
tools/perf/tests/shell/test_brstack.sh +2 -2
@@ -30,7 +30,7 @@ test_user_branches() { echo "Testing user branch stack sampling" perf record -o $TMPDIR/perf.data --branch-filter any,save_type,u -- ${TESTPROG} > /dev/null 2>&1 - perf script -i $TMPDIR/perf.data --fields brstacksym | xargs -n1 > $TMPDIR/perf.script + perf script -i $TMPDIR/perf.data --fields brstacksym | tr -s ' ' '\n' > $TMPDIR/perf.script # example of branch entries: # brstack_foo+0x14/brstack_bar+0x40/P/-/-/0/CALL
@@ -59,7 +59,7 @@ test_filter() { echo "Testing branch stack filtering permutation ($test_filter_filter,$test_filter_expect)" perf record -o $TMPDIR/perf.data --branch-filter $test_filter_filter,save_type,u -- ${TESTPROG} > /dev/null 2>&1 - perf script -i $TMPDIR/perf.data --fields brstack | xargs -n1 > $TMPDIR/perf.script + perf script -i $TMPDIR/perf.data --fields brstack | tr -s ' ' '\n' | grep '.' > $TMPDIR/perf.script # fail if we find any branch type that doesn't match any of the expected ones # also consider UNKNOWN branch types (-)
Signature · 1 line
2.45.2
Quoted 25 lines · Rob Herring (Arm)
From: James Clark <[email protected]>
The brstack test runs quite slowly in software models. Part of the reason is "xargs -n1" is quite inefficient in replacing spaces with newlines. While that's not noticeable on normal machines, it is on software models. Use "tr -s ' ' '\n'" instead which can do the same transformation, but is much faster. For comparison on an M1 Macbook Pro:
$ time seq -s ' ' 10000 | xargs -n1 > /dev/nullreal 0m2.729s user 0m2.009s sys 0m0.914s $ time seq -s ' ' 10000 | tr -s ' ' '\n' | grep '.' > /dev/nullreal 0m0.002s user 0m0.001s sys 0m0.001sThe "grep '.'" is also needed to remove any remaining blank lines.
Signed-off-by James Clark <[email protected]>Signed-off-by Anshuman Khandual <[email protected]>[robh: Drop changing loop iterations on arm64. Squash blank line fix and redo commit msg]Signed-off-by Rob Herring (Arm) <[email protected]>
Quoted 8 lines
---
Originally part of this series[1], but I've dropped any Arm specifics, and it stands on its own. No reason this needs to wait on Arm BRBE support (which I'm working on now). I don't expect to have other changes to this test related to BRBE anymore.
Quoted 25 lines
tools/perf/tests/shell/test_brstack.sh | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-)tools/perf/tests/shell/test_brstack.sh +2
-2@@ -30,7 +30,7 @@ test_user_branches() { echo "Testing user branch stack sampling" perf record -o $TMPDIR/perf.data --branch-filter any,save_type,u -- ${TESTPROG} > /dev/null 2>&1 - perf script -i $TMPDIR/perf.data --fields brstacksym | xargs -n1 > $TMPDIR/perf.script + perf script -i $TMPDIR/perf.data --fields brstacksym | tr -s ' ' '\n' > $TMPDIR/perf.script # example of branch entries: # brstack_foo+0x14/brstack_bar+0x40/P/-/-/0/CALL@@ -59,7 +59,7 @@ test_filter() { echo "Testing branch stack filtering permutation ($test_filter_filter,$test_filter_expect)" perf record -o $TMPDIR/perf.data --branch-filter $test_filter_filter,save_type,u -- ${TESTPROG} > /dev/null 2>&1 - perf script -i $TMPDIR/perf.data --fields brstack | xargs -n1 > $TMPDIR/perf.script + perf script -i $TMPDIR/perf.data --fields brstack | tr -s ' ' '\n' | grep '.' > $TMPDIR/perf.script # fail if we find any branch type that doesn't match any of the expected ones # also consider UNKNOWN branch types (-)
Quoted 19 lines · Rob Herring (Arm)
From: James Clark <[email protected]>
The brstack test runs quite slowly in software models. Part of the reason is "xargs -n1" is quite inefficient in replacing spaces with newlines. While that's not noticeable on normal machines, it is on software models. Use "tr -s ' ' '\n'" instead which can do the same transformation, but is much faster. For comparison on an M1 Macbook Pro:
$ time seq -s ' ' 10000 | xargs -n1 > /dev/nullreal 0m2.729s user 0m2.009s sys 0m0.914s $ time seq -s ' ' 10000 | tr -s ' ' '\n' | grep '.' > /dev/nullreal 0m0.002s user 0m0.001s sys 0m0.001s
Quoted 6 lines
The "grep '.'" is also needed to remove any remaining blank lines.
Signed-off-by James Clark <[email protected]>Signed-off-by Anshuman Khandual <[email protected]>[robh: Drop changing loop iterations on arm64. Squash blank line fix and redo commit msg]Signed-off-by Rob Herring (Arm) <[email protected]>
Quoted 33 lines
---
Originally part of this series[1], but I've dropped any Arm specifics, and it stands on its own. No reason this needs to wait on Arm BRBE support (which I'm working on now). I don't expect to have other changes to this test related to BRBE anymore.[1] https://lore.kernel.org/all/[email protected]/
tools/perf/tests/shell/test_brstack.sh | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-)tools/perf/tests/shell/test_brstack.sh +2
-2@@ -30,7 +30,7 @@ test_user_branches() { echo "Testing user branch stack sampling" perf record -o $TMPDIR/perf.data --branch-filter any,save_type,u -- ${TESTPROG} > /dev/null 2>&1 - perf script -i $TMPDIR/perf.data --fields brstacksym | xargs -n1 > $TMPDIR/perf.script + perf script -i $TMPDIR/perf.data --fields brstacksym | tr -s ' ' '\n' > $TMPDIR/perf.script # example of branch entries: # brstack_foo+0x14/brstack_bar+0x40/P/-/-/0/CALL@@ -59,7 +59,7 @@ test_filter() { echo "Testing branch stack filtering permutation ($test_filter_filter,$test_filter_expect)" perf record -o $TMPDIR/perf.data --branch-filter $test_filter_filter,save_type,u -- ${TESTPROG} > /dev/null 2>&1 - perf script -i $TMPDIR/perf.data --fields brstack | xargs -n1 > $TMPDIR/perf.script + perf script -i $TMPDIR/perf.data --fields brstack | tr -s ' ' '\n' | grep '.' > $TMPDIR/perf.script # fail if we find any branch type that doesn't match any of the expected ones # also consider UNKNOWN branch types (-)
Quoted 19 lines · Rob Herring (Arm)
From: James Clark <[email protected]>
The brstack test runs quite slowly in software models. Part of the reason is "xargs -n1" is quite inefficient in replacing spaces with newlines. While that's not noticeable on normal machines, it is on software models. Use "tr -s ' ' '\n'" instead which can do the same transformation, but is much faster. For comparison on an M1 Macbook Pro:
$ time seq -s ' ' 10000 | xargs -n1 > /dev/nullreal 0m2.729s user 0m2.009s sys 0m0.914s $ time seq -s ' ' 10000 | tr -s ' ' '\n' | grep '.' > /dev/nullreal 0m0.002s user 0m0.001s sys 0m0.001s
Quoted 6 lines
The "grep '.'" is also needed to remove any remaining blank lines.
Signed-off-by James Clark <[email protected]>Signed-off-by Anshuman Khandual <[email protected]>[robh: Drop changing loop iterations on arm64. Squash blank line fix and redo commit msg]Signed-off-by Rob Herring (Arm) <[email protected]>
Thanks,
Namhyung
Quoted 36 lines
---
Originally part of this series[1], but I've dropped any Arm specifics, and it stands on its own. No reason this needs to wait on Arm BRBE support (which I'm working on now). I don't expect to have other changes to this test related to BRBE anymore.[1] https://lore.kernel.org/all/[email protected]/
tools/perf/tests/shell/test_brstack.sh | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-)tools/perf/tests/shell/test_brstack.sh +2
-2@@ -30,7 +30,7 @@ test_user_branches() { echo "Testing user branch stack sampling" perf record -o $TMPDIR/perf.data --branch-filter any,save_type,u -- ${TESTPROG} > /dev/null 2>&1 - perf script -i $TMPDIR/perf.data --fields brstacksym | xargs -n1 > $TMPDIR/perf.script + perf script -i $TMPDIR/perf.data --fields brstacksym | tr -s ' ' '\n' > $TMPDIR/perf.script # example of branch entries: # brstack_foo+0x14/brstack_bar+0x40/P/-/-/0/CALL@@ -59,7 +59,7 @@ test_filter() { echo "Testing branch stack filtering permutation ($test_filter_filter,$test_filter_expect)" perf record -o $TMPDIR/perf.data --branch-filter $test_filter_filter,save_type,u -- ${TESTPROG} > /dev/null 2>&1 - perf script -i $TMPDIR/perf.data --fields brstack | xargs -n1 > $TMPDIR/perf.script + perf script -i $TMPDIR/perf.data --fields brstack | tr -s ' ' '\n' | grep '.' > $TMPDIR/perf.script # fail if we find any branch type that doesn't match any of the expected ones # also consider UNKNOWN branch types (-)Signature · 1 line
2.45.2
Quoted 32 lines · Rob Herring (Arm)
From: James Clark <[email protected]>
The brstack test runs quite slowly in software models. Part of the reason is "xargs -n1" is quite inefficient in replacing spaces with newlines. While that's not noticeable on normal machines, it is on software models. Use "tr -s ' ' '\n'" instead which can do the same transformation, but is much faster. For comparison on an M1 Macbook Pro:
$ time seq -s ' ' 10000 | xargs -n1 > /dev/nullreal 0m2.729s user 0m2.009s sys 0m0.914s $ time seq -s ' ' 10000 | tr -s ' ' '\n' | grep '.' > /dev/nullreal 0m0.002s user 0m0.001s sys 0m0.001sThe "grep '.'" is also needed to remove any remaining blank lines.
Signed-off-by James Clark <[email protected]>Signed-off-by Anshuman Khandual <[email protected]>[robh: Drop changing loop iterations on arm64. Squash blank line fix and redo commit msg]Signed-off-by Rob Herring (Arm) <[email protected]>---
Originally part of this series[1], but I've dropped any Arm specifics, and it stands on its own. No reason this needs to wait on Arm BRBE support (which I'm working on now). I don't expect to have other changes to this test related to BRBE anymore.
Quoted 4 lines
[1] https://lore.kernel.org/all/[email protected]/
tools/perf/tests/shell/test_brstack.sh | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-)
Ping!
Quoted 26 lines
tools/perf/tests/shell/test_brstack.sh +2
-3@@ -30,7 +30,7 @@ test_user_branches() { echo "Testing user branch stack sampling" perf record -o $TMPDIR/perf.data --branch-filter any,save_type,u -- ${TESTPROG} > /dev/null 2>&1 - perf script -i $TMPDIR/perf.data --fields brstacksym | xargs -n1 > $TMPDIR/perf.script + perf script -i $TMPDIR/perf.data --fields brstacksym | tr -s ' ' '\n' > $TMPDIR/perf.script # example of branch entries: # brstack_foo+0x14/brstack_bar+0x40/P/-/-/0/CALL@@ -59,7 +59,7 @@ test_filter() { echo "Testing branch stack filtering permutation ($test_filter_filter,$test_filter_expect)" perf record -o $TMPDIR/perf.data --branch-filter $test_filter_filter,save_type,u -- ${TESTPROG} > /dev/null 2>&1 - perf script -i $TMPDIR/perf.data --fields brstack | xargs -n1 > $TMPDIR/perf.script + perf script -i $TMPDIR/perf.data --fields brstack | tr -s ' ' '\n' | grep '.' > $TMPDIR/perf.script # fail if we find any branch type that doesn't match any of the expected ones # also consider UNKNOWN branch types (-) --2.45.2
Quoted 33 lines · Rob Herring
Quoted 32 lines · Rob Herring (Arm)
From: James Clark <[email protected]>
The brstack test runs quite slowly in software models. Part of the reason is "xargs -n1" is quite inefficient in replacing spaces with newlines. While that's not noticeable on normal machines, it is on software models. Use "tr -s ' ' '\n'" instead which can do the same transformation, but is much faster. For comparison on an M1 Macbook Pro:
$ time seq -s ' ' 10000 | xargs -n1 > /dev/nullreal 0m2.729s user 0m2.009s sys 0m0.914s $ time seq -s ' ' 10000 | tr -s ' ' '\n' | grep '.' > /dev/nullreal 0m0.002s user 0m0.001s sys 0m0.001sThe "grep '.'" is also needed to remove any remaining blank lines.
Signed-off-by James Clark <[email protected]>Signed-off-by Anshuman Khandual <[email protected]>[robh: Drop changing loop iterations on arm64. Squash blank line fix and redo commit msg]Signed-off-by Rob Herring (Arm) <[email protected]>---
Originally part of this series[1], but I've dropped any Arm specifics, and it stands on its own. No reason this needs to wait on Arm BRBE support (which I'm working on now). I don't expect to have other changes to this test related to BRBE anymore.
Quoted 6 lines
Quoted 4 lines
[1] https://lore.kernel.org/all/[email protected]/
tools/perf/tests/shell/test_brstack.sh | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-)Ping!
Thanks, applied.
- Arnaldo