-
Notifications
You must be signed in to change notification settings - Fork 53
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
Reliable benchmarks without throttling side-effects #19
Comments
Anything you need here? I think you should be the one to run the benchmarks and create a new graph as you have the control over the environment then :) |
You're right. I will do soon the update. |
Last version of BULL has been compiled for Java 11:
Any idea @fborriello ? |
@arey yes it is, if you need the java 8 build, set the bull-version to: |
Done. MapStruct and Selma are new before the manual version ... |
Hi @arey - that simply should not be the case - look at my results on an I7 6700k:
As you use an Intel CPU please keep in mind that it throttles excessively not only based on temperature but even based on time (e.g. the maximum frequency is only held for at max 10 seconds, then you get throttling no matter the temp) on newer generation consumer intel cpus (especially in notebooks). For stable results please use a desktop pc + cpu with a fixed clock speed or something like this may arise again - it makes the results seem untrustworthy. Kind regards, |
Does it make sense to run the benchmarks on a CI? For example on Azure Pipelines or Travis CI? |
That would surely make sense as those should be properly cooled server CPUs which are not configured with short-term max boosting in mind. But you would lose control on what exact hardware the tests were run (which RAM and CPU) ? (correct me if Azure or Travis allows for this) |
Thanks @roookeee for this point of attention. |
Can't help you with setting a fixed clock speed on windows - sorry. Although imperfect maybe using VirtualBox or some other virtualization and starting a Linux distro would work as limiting the cpu frequency in Linux is quite easy to achieve |
these |
https://en.wikichip.org/wiki/intel/thermal_velocity_boost
That's a good starting point to do research, Intel themself of course don't have public PDFs that read "yeah it will throttle in 10 secs because a notebook can't handle 20% power draw on all 8 cores" The boost of 100-200MHZ may seem slow, but remember that the overheating will throttle below baseclock afterwards which will be a decrease from e.g. 4.2GHz to 2.8GHz. But there is a reason why people make fun of Intels > 5 GHz claims that can only be hold for a couple of seconds on non-water cooled devices :) |
Do you think the benchmark launch by GitHub actions is more stable than those one of my macbook? We have some information about the OS but non on the hardware: https://github.com/arey/java-object-mapper-benchmark/runs/704112001?check_suite_focus=true |
The handwritten mapper should be within 3-5% of the mapper frameworks. This means that the results are "bad" again, as selma is outperforming everything when before it was not nearly the best :/ |
Currently the benchmark is executed in parallel. Every mapper is executed on its own. Perhaps that leads to inconsistent results. Maybe we need to try running everything one by one on the same machine, similar to how @arey executes the logic locally on his laptop. And I agree with @roookeee the handwritten mapper should be close to MapStruct and Selma. Both MapStruct and Selma generate Java code which should lead to similar benchmark for them. |
In the GitHub actions documentation I found the VM resources of the runners:
Do you think we could try to use an ARM32 architecture which should not based on Intel CPU? It's required a self-hosted runner. |
I would propose a sequential instead of a parallel build (as outlined by @filiphr). Furthermore I don't think ARM is a big target of Java and/or represents a big part of serverside / clientside Java programs. Having 2 cores and running mappers in parallel is bound to be affecting performance, so just do them one after another. |
Ok I'm trying a sequential benchmark: https://github.com/arey/java-object-mapper-benchmark/actions/runs/139813857 |
Just FYI running in parallel means running on different runners. I doubt that actions are running in the same time on the same runner. However, GitHub must be doing something for resource sharing on their infrastructure. |
I just saw your commit @arey. What I meant when running sequentially was to run everything in one action. I think that running in different actions means that they are running on different runners, so there might be no difference between parallel or not |
You're right @filiphr the results are the same. |
Most mappers (Orika, BULL etc.) in this repository had new releases since the last benchmark run from february - let's get some up to date data and update the readme's table + image.
The text was updated successfully, but these errors were encountered: