문제

스톱워치 벤치마킹을 사용하는 사람이 있습니까? 아니면 성능 도구를 항상 사용해야합니까? Java에 사용할 수있는 좋은 무료 도구가 있습니까? 어떤 도구를 사용하십니까?

내 우려를 명확히하기 위해 STOPWATCH 벤치마킹은 운영 체제 스케줄링으로 인해 오류가 발생합니다. 주어진 프로그램 실행에서 OS는 타이밍 타이밍의 중간에 다른 프로세스 (또는 여러)를 예약 할 수 있습니다. Java에서는 JVM 스케줄러가 믹스에 조금 더 임의성을 던지기 때문에 스레드 애플리케이션을 시간에 시간을 보내려고하면 상황이 조금 더 나쁩니다.

벤치마킹시 운영 체제 스케줄링을 어떻게 해결합니까?

도움이 되었습니까?

해결책

정체 된 경우 스톱워치 벤치마킹은 괜찮습니다 충분한 의미가있는 반복. 일반적으로 단일 숫자 수의 총 경과 시간이 필요합니다. 그렇지 않으면, 예약 및 다른 O/S 중단으로 결과가 쉽게 크게 왜곡됩니다.

이를 위해 나는 오래 전에 구축 한 작은 정적 방법을 사용합니다. System.currentTimeMillis().

내가 사용한 프로파일 링 작업을 위해 Jprofiler 몇 년 동안, 그것을 아주 좋았습니다. 나는 최근에 살펴 보았다 Yourkit, 웹 사이트에서 훌륭해 보이지만 개인적으로 전혀 사용하지 않았습니다.

스케줄링 중단에 대한 질문에 답하기 위해, 일관성이 달성 될 때까지 반복적 인 실행을 수행하면 실제로 프로세스 스케줄링에서 비정상적인 결과를 제거하기 위해 작동합니다. 또한 스레드 스케줄링은 5 초에서 30 초의 실행에 실질적인 영향을 미치지 않는다는 것을 알게되었습니다. 마지막으로, 몇 초의 임계 값 스케줄링을 통과 한 후, 내 경험에 따르면 결과에 대한 무시할만한 영향이 있습니다. 5 초의 실행은 시간/반복을위한 5 분 실행과 일관되게 평균적으로 평균적으로 평균적으로 알 수 있습니다.

테스트 된 코드를 실생활에서 시간이 지남에 따라 실행될 것으로 예상되는 횟수에 따라 테스트 된 코드를 JIT를 "워밍업"하는 데 약 10,000 번 전행하는 것을 고려할 수도 있습니다.

다른 팁

충분히 큰 시간 간격을 측정하는 한 완전히 유효합니다. 총 경과 시간이 1 초 이상이되도록 테스트하려는 것의 20-30 실행을 실행합니다. System.CurrentTimeMillis ()를 기반으로 한 시간 계산이 0ms 또는 ~ 30ms 인 경향이 있음을 알았습니다. 나는 당신이 그보다 더 정확한 것을 얻을 수 있다고 생각하지 않습니다. 작은 시간 간격을 실제로 측정 해야하는 경우 System.nanoTime ()을 시도해 볼 수 있습니다.

프로파일 러는보다 자세한 정보를 제공하여 성능 문제를 진단하고 수정하는 데 도움이 될 수 있습니다.

실제 측정 측면에서 스톱워치 시간은 사용자가 알아 차리는 것이므로, 물건이 허용 가능한 한계 내에 있는지 확인하려면 스톱워치 시간은 정상입니다.

그러나 실제로 문제를 해결하려면 프로파일 러가 실제로 도움이 될 수 있습니다.

스톱워치는 실제로 최고의 벤치 마크입니다!

실제 끝에서 최종 사용자 응답 시간은 실제로 중요한 시간입니다.

예를 들어 대부분의 테스트 도구는 브라우저가 페이지를 렌더링하는 데 걸리는 시간이 포함되어 있지 않으므로 CSS가 잘못 쓰여진 CSS가있는 과도한 페이지가 테스트에 대한 두 번째 응답 시간이 표시됩니다. 도구, 그러나 5 초 더 + 사용자에게 응답 시간.

이 도구는 자동화 된 테스트 및 문제 결정에 적합하지만 실제로 측정하고 싶은 것을 보지 못합니다.

타이밍을 테스트하는 방법에 따라 다른 답변을 얻을 수 있으므로 현실적인 반복 수를 테스트해야합니다. 한 번만 작업을 수행하면 많은 반복의 평균을 취하는 것이 오도 될 수 있습니다. JVM이 예열 된 후 걸리는 시간을 알고 싶다면 타이밍에 포함되지 않은 많은 (예 : 10,000) 반복을 실행할 수 있습니다.

나는 또한 당신이 사용하는 것이 좋습니다 System.nanoTime() 훨씬 더 정확합니다. 테스트 시간이 약 10 마이크로 초 이하인 경우 너무 자주 호출하고 싶지 않거나 결과를 변경할 수 있습니다. (예 : 5 초 동안 테스트하고 있고 이것이 언제 올라가는 지 알고 싶습니다. 반복이 매우 빠르다는 것을 알고 있다면 1000 개의 반복마다 나노 타임 만 얻습니다)

벤치마킹시 운영 체제 스케줄링을 어떻게 해결합니까?

벤치 마크 충분히 길다 당신이 사용할 기계를 대표하는 시스템에서. OS가 응용 프로그램 속도가 느려지면 결과의 일부가되어야합니다.

OS가 없다면 내 프로그램이 더 빠를 것입니다.

사용중인 경우 Linux, 당신은 다음과 같은 도구를 사용할 수 있습니다 numactl, chrt 그리고 taskset CPU의 사용 및 스케줄링을 제어합니다.

프로파일 러는 타이밍을 방해 할 수 있으므로 스톱워치 타이밍의 조합을 사용하여 전반적인 성능 문제를 식별 한 다음 프로파일 러를 사용하여 시간이 소요되는 위치를 해결합니다. 필요에 따라 프로세스를 반복하십시오.

결국, 그것은 아마도 "시계 벤치마킹"직후에 두 번째로 인기있는 벤치마킹 형태 일 것입니다. 우리는 "이 활동은 느리게 보이고 빠르게 보입니다."라고 말합니다.

일반적으로 최적화하는 것이 가장 중요한 것은 사용자 경험을 방해하는 것입니다. 이는 가장 자주 행동을 수행하는 작업과 동시에 진행되는 모든 일의 기능입니다. 다른 형태의 벤치마킹은 종종 이것에 대해 제로에 도움이됩니다.

중요한 질문은 수술의 복잡성과 시간이라고 생각합니다.

나는 때때로 물리적 스톱워치 측정을 사용하여 계산하는 데 몇 분, 몇 시간, 며칠 또는 몇 주가 걸리는지 확인합니다 (몇 초와 분이 몇 초가더라도 며칠의 순서에서 실행 시간이 들리지 않는 응용 프로그램으로 작업하고 있습니다. 가장 일반적인 시간에 걸쳐).

그러나 링크 된 기사에 언급 된 Java Millis 통화와 같이 컴퓨터의 모든 종류의 클럭 시스템에 대한 호출로 제공되는 자동화는 수동으로 무언가가 실행되는지를 보는 것보다 훨씬 우수합니다.

프로파일 러는 작동 할 때 좋지만, 우리의 응용 프로그램에 적용하는 데 문제가 있었는데, 여기에는 일반적으로 동적 코드 생성, DLL의 동적로드 및 제 시간에 제기 된 두 가지 스크립팅 언어에서 수행되는 작업이 포함됩니다. 내 응용 프로그램. 그들은 종종 단일 소스 언어와 복잡한 소프트웨어에 대한 기타 비현실적인 기대를 가정하는 것으로 제한됩니다.

나는 오늘 많은 dbase 파일에서 정보를 검색하고 수집 한 프로그램을 실행했습니다. 한시간 실행하려면. 나는 코드를 살펴보고 병목 현상이 무엇인지에 대한 교육을받은 추측을했고, 알고리즘을 약간 개선했으며, 이번에는 프로그램을 다시 실행했습니다. 2.5 분.

새 버전이 크게 개선되었다고 말하면 멋진 프로파일 링 도구 나 벤치 마크 스위트가 필요하지 않았습니다. 달리기 시간을 더욱 최적화해야한다면 좀 더 정교한 분석을 수행했을 것입니다. 그러나 이것은 필요하지 않았습니다. 이런 종류의 "스톱워치 벤치마킹"은 상당히 많은 경우에서 허용되는 솔루션이며 더 고급 도구에 의존하는 것은 실제로 이러한 경우에 더 많은 시간이 걸릴 것입니다.

스톱워치 벤치마킹이 너무 끔찍하다고 생각하지 않지만 Solaris 또는 OS X 시스템에 들어갈 수 있다면 DTRACE를 확인해야합니다. 응용 프로그램에서 타이밍에 대한 훌륭한 정보를 얻는 데 사용했습니다.

나는 항상 훨씬 쉬운 스톱워치 벤치마킹을 사용합니다. 결과는 나에게 매우 정확할 필요는 없습니다. 정확한 결과가 필요하면 스톱워치 벤치마킹을 사용하지 않아야합니다.

나는 항상 그것을한다. 나는 오히려 프로파일 러를 사용하지만 내가 작업하는 도메인 별 언어의 공급 업체는 제공하지 않습니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top