Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

async PERF_TEST always returns 0 cycles #2587

Open
travisdowns opened this issue Dec 17, 2024 · 0 comments · May be fixed by #2588
Open

async PERF_TEST always returns 0 cycles #2587

travisdowns opened this issue Dec 17, 2024 · 0 comments · May be fixed by #2588

Comments

@travisdowns
Copy link
Contributor

If you write a PERF_TEST (or any other variation like PERF_TEST_F/C etc) whose testing method is async, the "cycles" column is always zero.

travisdowns added a commit to travisdowns/seastar that referenced this issue Dec 17, 2024
Simplify and coroutinize main loop. This reduces the duplicated portion
in the main loop which handles the 4 compile-time cases of

{void returning, size_t returning} x {sync, async}

test case methods. We duplicate only as much as need to keep the main
loop efficient but try to share the remainder. We can also remove a lot
of boilerplate which is no longer needed in C++.

This fixes scylladb#2587 because the underlying bug there was a change in
one of the duplicated sections but not the other.

Performance should be similar after this change: any benchmark that does
substantial work won't see a change. Very short benchmarks are
sensitive to the work in the main loop and this is slightly better in
some cases and slightly worse in others. This was evaluated with
perf_tests_perf benchmark in this series.

We delegate the choice of whether to yield in the benchmark not to the
code under test (in the future returning case).

Fixes scylladb#2587.
@travisdowns travisdowns linked a pull request Dec 17, 2024 that will close this issue
travisdowns added a commit to travisdowns/seastar that referenced this issue Dec 18, 2024
Simplify and coroutinize main loop. This reduces the duplicated portion
in the main loop which handles the 4 compile-time cases of

{void returning, size_t returning} x {sync, async}

test case methods. We duplicate only as much as need to keep the main
loop efficient but try to share the remainder. We can also remove a lot
of boilerplate which is no longer needed in C++.

This fixes scylladb#2587 because the underlying bug there was a change in
one of the duplicated sections but not the other.

Performance should be similar after this change: any benchmark that does
substantial work won't see a change. Very short benchmarks are
sensitive to the work in the main loop and this is slightly better in
some cases and slightly worse in others. This was evaluated with
perf_tests_perf benchmark in this series.

We delegate the choice of whether to yield in the benchmark not to the
code under test (in the future returning case).

Fixes scylladb#2587.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging a pull request may close this issue.

1 participant