aqa-tests
aqa-tests copied to clipboard
Add FrameworkBenchmarks performance test
FrameworkBenchmarks is mentioned in https://github.com/adoptium/aqa-tests/issues/1112 .
Personnaly I am using this test a lot, it's open, popular, and covers a wide range of frameworks.
https://github.com/TechEmpower/FrameworkBenchmarks/tree/master/frameworks/Java
Grinder not working, so I will rebuild this later. https://ci.adoptopenjdk.net/view/Test_grinder/job/Grinder/4964/
Verified on my test machine, works well.
Infra Issue created: https://github.com/adoptium/infrastructure/issues/2597
Its unable to delete workspace because of the json file from this benchmark... could it be the case that something still has that file open, when we try to delete the workspace, which blocks the deletion?
yes, I suspect the previous benchmark job failed in a bad state and left the process running (holding the file). The new job landed on the same machine cannot delete the workspace due to the file.
At this point, the machine needs to be cleaned up. Also, we need to enhance the test framework to terminate the leftover processes and clean up the workspace. If this cannot be properly handled at the test level, it should be handled at TKG/Jenkins level.
@llxia @smlambert I have tested this locally.
- I am beginning with this list, the total list is at https://github.com/TechEmpower/FrameworkBenchmarks/tree/master/frameworks/Java
These frameworks are more popular... I think. Some tests might seem dupicate from
external
, but this is different.
external tests runs framework inner unit tests to ensure frameworks behaving correctly.
perf framework tests stresses common worloads to ensure frameworks are performing well under test VMs.
- The pitfall is some frameworks are hardcoded with compile target 11, so most of these won't be running on jdk8,
- I am copying TEST_JDK_HOME into docker to finish the benchmark, trying to minimize our modifications.
- These benchmarks are very sensitive and takes a long time to finish, might worth enabling several of them as sanity during weekly or ga release.
The issue seen with not being able to delete workspace seems to be related to the results directory being created as root (instead of Jenkins). See https://github.com/adoptium/infrastructure/issues/2597#issuecomment-1153974613
@joeyleeeeeee97 do you see the results
folder in your local run? I suspect it is produced by docker as it mounted the local dir https://github.com/TechEmpower/FrameworkBenchmarks#explanation-of-the-tfb-script
@llxia Yes. Should I change the permission in results
in running script to get removable results?
Yes, we need to change to jenkins
. Currently, the results folder is owned by root
which cannot be removed by jenkins
user.
@llxia I added a extra step to make results removable. docker run --entrypoint /bin/bash --rm --network tfb -v /var/run/docker.sock:/var/run/docker.sock -v ${TEST_RESROOT}:/FrameworkBenchmarks techempower/tfb -c "chmod -R 777 /FrameworkBenchmarks/results"
FrameworkBenchmarks is running with root, I raise an issue for them.
http://ci.dragonwell-jdk.io/job/Test_openjdk11_dragonwell_special.perf_x86-64_linux/9/console
18:05:44 TEST TARGETS SUMMARY
18:05:44 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
18:05:44 PASSED test targets:
18:05:44 FrameworkBenchmarks-netty_0
18:05:44 FrameworkBenchmarks-quarkus_0
18:05:44 FrameworkBenchmarks-spring_0
18:05:44 FrameworkBenchmarks-spring-jpa_0
18:05:44 FrameworkBenchmarks-spark_0
18:05:44 FrameworkBenchmarks-servlet3_0
18:05:44 FrameworkBenchmarks-servlet_0
18:05:44
18:05:44 TOTAL: 7 EXECUTED: 7 PASSED: 7 FAILED: 0 DISABLED: 0 SKIPPED: 0
@llxia @ShelleyLambert
As aspecial.perf
yet, please take a look
@smlambert Update: Removed changes in testenv. This test is not pinned to any specific hardware, only needs to have docker.
To dispatch these to docker, maybe we could:
- Install docker on all
ci.role.perf
machines if this is acceptable. - Add
DOCKER_REQUIRED
when running some test pipelines, but this also relies on that we have some machines that both labeledci.role.perf
andsw.tool.docker
, currently we have these
if (GROUP == "external" || (GROUP == "perf" && LEVEL == "special") ) {
DOCKER_REQUIRED = true
DOCKERIMAGE_TAG = "nightly"
if (LEVEL == "sanity" || LEVEL == "extended") {
EXTRA_DOCKER_ARGS = '-v ${TEST_JDK_HOME}:/opt/java/openjdk'
}
}
For example,If we pin `special.perf` tests on these machines, does this affects bumbleBench test results?
Personally I think adding DOCKER_REQUIRED
is better because in long term we might have other tests rely on docker, for example some system tests and some other perf tests might need a docker.
I am glad you are asking these questions @joeyleeeeeee97 - I agree we need more machines that can support container based testing (ie. with Docker installed).
If we pin special.perf to https://ci.adoptopenjdk.net/label/sw.tool.docker&&ci.role.perf/ that implies we can only run these benchmarks on 2 platforms at the project (x86-64_linux and s390x_linux), when the tests get sent to the other platforms (which based on the playlist, since there are no platform restrictions, we will try to do, they will fail with "no machines available with that tag").
I think we have to ensure that we have Docker installed on a broad base of platforms, and then add a platformCapabilities tag to the playlist in this PR to exclude the systems where we are not able to run Docker.
-
ensure that we have Docker installed on a broad base of platforms I think we could follow this in this infrastructure issue, I will try to add these machines using ansible.
-
add a platformCapabilities tag to the playlist in this PR to exclude the systems Currently only enable x86 arch
<platformRequirements>os.linux,arch.x86,bits.64</platformRequirements>
Do we have a or
semantic in platformRequirements? like
<platformRequirements>os.linux,(arch.x86|arch.390),bits.64</platformRequirements>