-
Notifications
You must be signed in to change notification settings - Fork 839
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
Arrow Rust + Conbench Integration #1289
Conversation
Codecov Report
@@ Coverage Diff @@
## master #1289 +/- ##
=======================================
Coverage 83.04% 83.04%
=======================================
Files 180 180
Lines 52424 52424
=======================================
Hits 43537 43537
Misses 8887 8887
Continue to review full report at Codecov.
|
359e459
to
dc59492
Compare
conbench/.flake8
Outdated
@@ -0,0 +1,19 @@ | |||
# Licensed to the Apache Software Foundation (ASF) under one |
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.
From a Python perspective, it's probably a mistake to name this directory conbench
. Thoughts on what you would like arrow-rs/conbench/
to be named?
arrow-rs/_conbench/
?arrow-rs/conbench-benchmarks/
?arrow-rs/conbench-integration/
?
I pulled the branch locally and followed the instructions in the README and benchmarks are currently running. It looks like it will take a while so I will check in on results in the morning and continue reviewing the PR. |
Nice! 99% of the time is spent executing Note that this is only the first step – you should see json formatted benchmark results spew to your terminal, but they won't yet publish to the Arrow Conbench server[1]. You'll want to work with @ElenaHenderson on getting the results to publish to the Arrow Conbench server via buildkite etc. |
@@ -0,0 +1,130 @@ | |||
# Byte-compiled / optimized / DLL files |
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.
This is just the GitHub generated .gitignore
for Python packages. I can trim in down, but I usually don't bother.
One of the tests failed because it makes an assumption that a ~/git/arrow-rs/conbench$ conbench arrow-rs --src-dir=`pwd`/.. I see that the Python code should have changed the directory so I am not sure what went wrong. I will start debugging this tonight. We may also want to have our tests write output to a temporary directory rather than making any assumptions about current working directory. |
If you pull the latest, I just removed the need for
PS. I don't work on arrow at all anymore, so I better go back to my day job now – just didn't want to leave you hanging. Cheers! |
Thanks @dianaclarke I can take it from here for sure .. and it turns out this benchmark was failing even before this PR. I should have checked that first. |
Ah, I was getting an error with But I can |
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.
LGTM. After commenting out the failing csv_writer
bench, conbench runs to completion and produces reports. A fix to csv_writer
has already been merged to master.
If there are no objections, I plan to merge this PR next week so that I can proceed to the next step of integrating this with CI. The changes in this PR are self-contained so I think it is low risk to merge. |
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.
Thank you @dianaclarke ! Great to see conbench finally lands in arrow-rs :)
Here's a minimal Arrow Rust + Conbench[1] proof of concept.
[1] https://github.com/conbench/conbench
A few notes (areas for improvement, caveats, etc):
Criterion results are in nanoseconds, but the smallest unit
Conbench currently speaks is seconds (because Conbench was initially
for macro not micro benchmarking). I suspect most places in Conbench
would work just fine if nanoseconds were passed in, but I need to
audit the code for any places that assume seconds if it isn't a
throughput benchmark.
If the Criterion benchmarks were named better, I could tag them
better in Conbench. For example, I suspect sqrt_20_12, sqrt_20_9,
sqrt_22_12, and sqrt_22_14 are parameterized variations of the same
benchmark, and if they were named something like "sqrt, foo=20,
bar=12", I could batch them together & tag their parameters so that
Conbench would automatically graph them in relation to each other. I
was sort of able to do this with the following benchmarks (because
there was a machine readable pattern). Anyhoo, that's easy enough to
do down the road as a last integration step, and it does appear from
the Criterion docs that they have their own recommendations for how to
do this.
While Criterion benchmarks can also measure throughput in some
cases, all the arrow-datafusion benchmarks were in elapsed time (not
sure about the arrow-rs benchmarks), so I didn't bother writing code
to support potential throughput results from
arrow-datafusion/arrow-rs, but we may need to revisit that.
We probably want to add some additional context, like the
arrow-rs/arrow-datafusion version, rust version, any compiler flags,
etc.