IT이야기

Java에서 단일 스레드 복잡한 알고리즘을 측정하기 위한 최고의 매크로 벤치마킹 도구/프레임워크

cyworld 2021. 9. 27. 21:36
반응형

Java에서 단일 스레드 복잡한 알고리즘을 측정하기 위한 최고의 매크로 벤치마킹 도구/프레임워크는 무엇입니까?


단일 스레드, 로컬, 복잡한 알고리즘인 Java 코드에 대한 몇 가지 성능 측정(주로 런타임)을 만들고 싶습니다. (따라서 매크로 벤치마크가 JVM 구현을 측정하는 것을 원하지 않습니다.)

도구를 사용하여

  • 복잡성을 분석합니다 . 즉, 내 코드가 매개변수 n(검색 깊이)에 대해 어떻게 확장되는지 확인합니다. (나는 이미 n에서 매개변수화된 junit 테스트를 가지고 있습니다.)
  • 코드 기반에 대한 일부 변경으로 인해 코드가 느려지는 경우 경고를 받으려면 몇 가지 추세 분석수행 하십시오.

이를 위해 다음과 같은 도구나 프레임워크를 사용하고 싶습니다.

  • 않는 통계를 최적으로 평균값, 표준 편차와 신뢰 구간을 계산. 이건 매우 중요합니다.
  • 매개변수화 할 수 있습니다 (위의 매개변수 n 참조). 이것은 또한 매우 중요합니다.
  • 멋진 플롯을 생성할 수 있으면 좋겠지만 필수는 아닙니다.
  • 내 프로그램이 느려지면 경고하기 위해 자동화된 (junit-) 테스트에서 사용할 수 있지만 이것은 필수가 아니라 단지 플러스입니다.

이러한 요구 사항을 충족하는 도구/프레임워크는 무엇입니까? 복잡성 및 추세 분석에 적합한 것은 무엇이며 그 이유는 무엇입니까?


아래는 내가 찾은 모든 도구의 알파벳순 목록입니다. 언급된 측면은 다음과 같습니다.

  • 쉽게 매개변수화할 수 있습니까?
  • Java 라이브러리입니까 아니면 최소한 Java 프로그램에 쉽게 통합할 수 있습니까?
  • 예를 들어 준비 단계를 사용하여 JVM 마이크로 벤치마킹을 처리할 수 있습니까?
  • 결과를 시각적으로 그릴 수 있습니까?
  • 측정된 값을 지속적으로 저장할 수 있습니까?
  • 새로운 커밋으로 인해 속도가 느려졌음을 경고하는 추세 분석을 수행할 수 있습니까?
  • 통계(최소 최대, 최소, 평균 및 표준 편차)를 제공하고 사용합니까?

자동 조종 장치

매개변수화 가능; 펄 라이브러리; JVM 마이크로 벤치마킹 없음; 플로팅; 고집; 유행 분석!?; 좋은 통계(결과가 안정화될 때까지 주어진 테스트를 실행하고 이상값을 강조 표시).

벤치마킹 프레임워크

매개변수화할 수 없음; 자바 라이브러리; JVM 마이크로 벤치마킹; 음모 없음; 지속성 없음; 추세 분석 없음; 통계.

통계를 매우 잘 수행합니다. 평균, 최대, 최소 및 표준 편차 외에도 95% 신뢰 구간(부트스트래핑을 통해) 및 직렬 상관 관계(예: 프로그램이 비결정적으로 동작하는 경우 발생할 수 있는 진동 실행 시간에 대해 경고하기 위해)도 계산합니다. HashSets를 사용하기 때문입니다). 정확한 측정값을 얻기 위해 프로그램을 반복해야 하는 빈도를 결정하고 보고 및 경고(예: 이상값 및 직렬 상관 관계)를 위해 이를 해석합니다.

또한 마이크로 벤치마킹은 매우 잘 수행됩니다( 자세한 내용 은 Java로 빠르고 안정적인 벤치마크 생성? 참조).

불행히도 프레임워크는 다른 많은 도우미 클래스와 함께 번들로 제공되는 util 패키지로 제공됩니다. 벤치마크 클래스는 JSci(A science API for Java)와 Mersenne Twister( http://www.cs.gmu.edu/~sean/research/ )에 의존합니다 . 저자인 Brent Boyer는 시간을 내서 라이브러리를 축소하고 사용자가 측정값(예: 상관 관계 및 이상값)을 시각적으로 검사할 수 있도록 더 간단한 그래퍼를 추가할 것입니다.

캘리퍼스

매개변수화 가능; 자바 라이브러리; JVM 마이크로 벤치마킹; 플로팅; 고집; 추세 분석 없음; 통계.

Android 앱에 맞게 조정된 비교적 새로운 프로젝트입니다. 젊지만 유망해 보입니다. 구글 구아바에 의존 :(

커먼즈 모니터링

매개변수화할 수 없습니다!?; 자바 라이브러리; JVM 마이크로 벤치마킹 없음!?; 플로팅; 서블릿을 통한 지속성; 트렌드 분석 없음!?; 통계가 없다!?.

AOP 계측을 지원합니다.

자몬

매개변수화할 수 없음; 자바 라이브러리; JVM 마이크로 벤치마킹 없음; 추가 도구(Jarep 또는 JMX)를 사용한 플로팅, 지속성 및 추세 분석 통계.

우수한 모니터링은 log4j와 얽혀 있으며 프로그래밍 방식으로 데이터에 액세스하거나 쿼리할 수 있으며 프로그램은 결과에 대해 조치를 취할 수 있습니다.

자바 사이먼

매개변수화할 수 없습니다!?; 자바 라이브러리; JVM 마이크로 벤치마킹 없음; Jarep으로만 플로팅; JMX에서만 지속성; 추세 분석 없음; 통계가 없다!?.

Jamon의 경쟁자, 모니터 계층 구조를 지원합니다.

제트기

매개변수화할 수 없음; 자바 라이브러리; JVM 마이크로 벤치마킹; 플로팅; 고집; 추세 분석 없음; 통계가 없습니다.

좋은 경량 모니터링 도구, 종속성 없음 :) 충분한 통계를 제공하지 않으며(표준 편차 없음) 그에 따라 플러그인을 확장하는 것이 상당히 어려워 보입니다(집계 및 집계에는 최소, 최대 및 평균에 대한 고정 getter만 있음).

제이미터

매개변수화 가능!?; 자바 라이브러리; JVM 마이크로 벤치마킹 없음!?; 플로팅; 고집; 유행 분석!?; 통계!?.

부하 테스트 웹 응용 프로그램에 맞게 조정된 우수한 모니터링 라이브러리입니다.

자바 마이크로벤치마크 하네스( jmh)

매개변수화 가능(Java API를 통한 사용자 정의 호출자); 자바 라이브러리; JVM 마이크로벤치마킹 줄거리 없음; 지속성 없음; 추세 분석 없음; 통계.

Oracle의 HotSpot 전문가가 구축한 벤치마킹 하네스는 OpenJDK 성능 작업에 사용되는 HotSpot의 마이크로 벤치마킹에 매우 적합합니다. 신뢰할 수 있는 벤치마킹 환경을 제공하기 위해 극단적인 조치를 취합니다. 사람이 읽을 수 있는 출력 외에도 jmh는 결과를 처리하는 Java API를 제공합니다(예: 타사 플로터 및 지속성 제공자용).

junit-벤치마크

매개변수화 가능; 자바 라이브러리; JVM 마이크로 벤치마킹; 플로팅; 지속성(CONSOLE, XML 또는 데이터베이스 H2 사용); 그래픽 경향 분석; 통계(최대, 최소, 평균, 표준 편차, 그러나 추가 통계를 위해 쉽게 확장할 수 없음).

junit 테스트에 junit-4-rule을 추가하기만 하면 됩니다. :)

junit-Benchmarks는 Apache 2 라이선스에 따라 오픈 소스입니다.

업데이트 : 프로젝트가 다음으로 이동되었습니다.jmh

주니퍼프

주로 성능(JUnit 테스트 데코레이터 사용 TimedTest) 및 확장성( JUnit 테스트 데코레이터 사용 )에 대한 추세 분석을 수행 LoadTest합니다.

매개변수화 가능; 자바 라이브러리; JVM 마이크로 벤치마킹 없음; 음모 없음; 지속성 없음; 통계가 없습니다.

perf4j

매개변수화할 수 없음; 자바 라이브러리; JVM 마이크로 벤치마킹 없음; 플로팅; JMX를 통한 지속성; log4j appender를 통한 경향 분석; 통계.

로깅 프레임워크를 기반으로 하며 AOP를 사용할 수 있습니다.

프로젝트 브로드웨이

매우 일반적인 개념: 모니터는 사전 정의된 조건을 관찰하고 충족될 때 대응하는 방법을 지정합니다.

빠른 mcbenchmark

주요 초점은 매개변수화 가능성에 있습니다. 알고리즘이 확장되는지 확인합니다. 즉, O(n), O(n log(n)), O(n²)...

자바 라이브러리; JVM 마이크로 벤치마킹; 음모 없음; 고집; 유행 분석; 통계가 없습니다.

그라인더

parameterizable; Jython library; no JVM micro benchmarking; plotting; persistence; no trend analysis; no good statistics, but easily extensible.

Depends on Jython, HTTPClient, JEditSyntax, ApacheXMLBeans, PicoContainer.

TPTP

parameterizable!?; Java tool platform; no JVM micro benchmarking!?; plotting; persistence; graphical trend analysis; no statistics!?

The Test & Performance Tools Platform is a huge generic and extensible tool platform (based on Eclipse and four EMF models). Hence it is powerful but quite complex, can slow Eclipse down, and extending it for your own needs (e.g. with statistics so that they influence the number of iterations) seems to be very difficult.

Usemon

parameterizable!?; Java library; no JVM micro benchmarking; plotting; persistence; trend analysis!?; statistics!?.

Tool is tailored towards monitoring in large clusters.


Another alternative is caliper from google. It allows parameterized testing.


Try using http://labs.carrotsearch.com/junit-benchmarks.html. This is an extention to JUni4, features:

Records execution time average and standard deviation.
Garbage collector activity recording.
Per-benchmark JVM warm-up phase.
Per-run and historical chart generation.
Optional results persistence in the H2 SQL database (advanced querying, historical analysis).

ReferenceURL : https://stackoverflow.com/questions/7146207/what-is-the-best-macro-benchmarking-tool-framework-to-measure-a-single-threade

반응형