Added stress test for large ecs worlds#16591
Added stress test for large ecs worlds#16591alice-i-cecile merged 17 commits intobevyengine:mainfrom
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 <8494645+chescock@users.noreply.github.com>
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. |
nakedible
left a comment
There was a problem hiding this comment.
Minor comments, fine to merge as is by me.
BD103
left a comment
There was a problem hiding this comment.
Looks good! Some small nits, but nothing blocking :)
Co-authored-by: BD103 <59022059+BD103@users.noreply.github.com>
# 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 <8494645+chescock@users.noreply.github.com> Co-authored-by: BD103 <59022059+BD103@users.noreply.github.com>
# 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 <8494645+chescock@users.noreply.github.com> Co-authored-by: BD103 <59022059+BD103@users.noreply.github.com>
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.