-
-
Notifications
You must be signed in to change notification settings - Fork 3.6k
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
Added stress test for large ecs worlds #16591
Added stress test for large ecs worlds #16591
Conversation
One option is to remember That might also help reduce noise when testing changes to the implementation of |
I'm a fan of passing it as an argument, I'll do that. I'm hesitant to use |
Co-authored-by: Chris Russell <[email protected]>
I agree that using a closure is simpler! But in case you're curious: Locals store their value right in the param state, not in a Resource or anything. So accessing them should be just a pointer offset from the system struct, same as a closure capture. |
It might be worth trying this as a stress test example since it's so noisy. That way we could bench using tracy and run it for longer to reduce the noise. |
Okay, I made some changes and I'm a lot happier with it. Two questions remain:
I'll also do a separate bench for just comparing access comparisons, but that'll be a separate PR. |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Minor comments, fine to merge as is by me.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Looks good! Some small nits, but nothing blocking :)
Co-authored-by: BD103 <[email protected]>
# Objective We currently have no benchmarks for large worlds with many entities, components and systems. Having a benchmark for a world with many components is especially useful for the performance improvements needed for relations. This is also a response to this [comment from cart](bevyengine#14385 (comment)). > I'd like both a small bevy_ecs-scoped executor benchmark that generates thousands of components used by hundreds of systems. ## Solution I use dynamic components and components to construct a benchmark with 2000 components, 4000 systems, and 10000 entities. ## Some notes - ~I use a lot of random entities, which creates unpredictable performance, I should use a seeded PRNG.~ - Not entirely sure if everything is ran concurrently currently. And there are many conflicts, meaning there's probably a lot of first-come-first-serve going on. Not entirely sure if these benchmarks are very reproducible. - Maybe add some more safety comments - Also component_reads_and_writes() is about to be deprecated bevyengine#16339, but there's no other way to currently do what I'm trying to do. --------- Co-authored-by: Chris Russell <[email protected]> Co-authored-by: BD103 <[email protected]>
Objective
We currently have no benchmarks for large worlds with many entities, components and systems.
Having a benchmark for a world with many components is especially useful for the performance improvements needed for relations. This is also a response to this comment from cart.
Solution
I use dynamic components and components to construct a benchmark with 2000 components, 4000 systems, and 10000 entities.
Some notes
I use a lot of random entities, which creates unpredictable performance, I should use a seeded PRNG.component_reads_and_writes
#16339, but there's no other way to currently do what I'm trying to do.