Skip to content

[benchmarker] Add timeline artifact - #1664

Merged
BenjaminPelletier merged 6 commits into
interuss:mainfrom
BenjaminPelletier:benchmarker-timeline
Aug 26, 2026
Merged

[benchmarker] Add timeline artifact#1664
BenjaminPelletier merged 6 commits into
interuss:mainfrom
BenjaminPelletier:benchmarker-timeline

Conversation

@BenjaminPelletier

Copy link
Copy Markdown
Member

This PR adds a timeline artifact to benchmarker which shows all the operations of interest happening in parallel visually:

Screenshot 2026-08-24 at 7 39 56 PM

Example generated from the changes to single_s2_cell.jsonnet:

timeline.zip

I specified the configuration and "product spec", but nearly all the implementation is via Gemini. I'm not too concerned about perfect architecture as I expect this to be "dead end" code only used for generating this artifact and not as a building block for anything else in the future.

@BenjaminPelletier
BenjaminPelletier marked this pull request as ready for review August 25, 2026 03:10

@mickmis mickmis left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Note: I've not actually reviewed the html templates. Looking at the screenshot outcome sounds good enough to me.
LGTM

Comment on lines 84 to +96
@@ -93,7 +93,7 @@ local shape = {
},
},
flight_execution: {
end_flight_after_start: '10s',
end_flight_after_start: '5s',

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

For my own understanding, are those parameters changes only cosmetic for the timeline to display better, or are they significant for something else? Notably in regard to the recent discussions about benchmarker vs locust behavior.

Copy link
Copy Markdown
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

These adjustments are a continued attempt to get to a "good" set of scenarios for representative load testing. The two aspects of "good" are that 1) the behavior of the load is representative of real life (e.g., it doesn't have an artificially short window for something to happen that could be fine taking longer in real life) and 2) it executes as quickly as possible (we don't want to wait many hours for a test run unless absolutely necessary).

The 10s -> 5s change for flight_execution.end_flight_after_start addresses the second issue by hopefully making each flight 5s faster without violating the first issue. The fixed_spacing addresses the first issue by making sure there's enough time to delete the operational intent without colliding with the start of the next flight. The uniform_random_spacing also addresses the first issue by attempting to more smoothly decorrelate the start times of virtual users in a group. I expect we'll continue to refine these values as we gather more information via better tools (this PR is a big one I think) and more measurements.

return round(value / resolution) * resolution


def format_duration_shorthand(duration: float | datetime.timedelta) -> str:

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

nit: this package exists, to be considered if it's worth it or not if we will need more of that kind of human-readable display of values

Copy link
Copy Markdown
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I do like not needing to maintain code ourselves, but it looks like that package does longhand representations -- these are short, with a particular logic to "significant units" (like significant figures) so I don't think human-readable is a substitute candidate in this case.

@BenjaminPelletier BenjaminPelletier left a comment

Copy link
Copy Markdown
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Note: I've not actually reviewed the html templates. Looking at the screenshot outcome sounds good enough to me.

I agree reviewing the rendered HTML seems good enough in this case as the architecture of the HTML template should not substantively impact anyone since developers will not build upon it more and users will not see it.

Comment on lines 84 to +96
@@ -93,7 +93,7 @@ local shape = {
},
},
flight_execution: {
end_flight_after_start: '10s',
end_flight_after_start: '5s',

Copy link
Copy Markdown
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

These adjustments are a continued attempt to get to a "good" set of scenarios for representative load testing. The two aspects of "good" are that 1) the behavior of the load is representative of real life (e.g., it doesn't have an artificially short window for something to happen that could be fine taking longer in real life) and 2) it executes as quickly as possible (we don't want to wait many hours for a test run unless absolutely necessary).

The 10s -> 5s change for flight_execution.end_flight_after_start addresses the second issue by hopefully making each flight 5s faster without violating the first issue. The fixed_spacing addresses the first issue by making sure there's enough time to delete the operational intent without colliding with the start of the next flight. The uniform_random_spacing also addresses the first issue by attempting to more smoothly decorrelate the start times of virtual users in a group. I expect we'll continue to refine these values as we gather more information via better tools (this PR is a big one I think) and more measurements.

return round(value / resolution) * resolution


def format_duration_shorthand(duration: float | datetime.timedelta) -> str:

Copy link
Copy Markdown
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I do like not needing to maintain code ourselves, but it looks like that package does longhand representations -- these are short, with a particular logic to "significant units" (like significant figures) so I don't think human-readable is a substitute candidate in this case.

@BenjaminPelletier
BenjaminPelletier merged commit ae789a3 into interuss:main Aug 26, 2026
24 checks passed
@BenjaminPelletier
BenjaminPelletier deleted the benchmarker-timeline branch August 26, 2026 16:14
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

Status: Done

Development

Successfully merging this pull request may close these issues.

2 participants