2016-08-01 2 views
0

System.nanoTime()은 Java + Linux의 CPU 코어에서 일관성이 없다고 들었습니다. 그렇다면 루프백을 통해 단방향 메시지의 대기 시간을 측정하려면 어떻게해야합니까? 같은 기계에있는 입니다. 흐름은 다음과 같습니다Java + Linux에서 CPU 코어의 대기 시간을 측정하는 올바른 방법은 무엇입니까?

  • 클라이언트는 현재 (이
  • 서버가
  • 서버는
  • 서버 메시지에서 타임 스탬프를 구문 분석 메시지 계산에게 단방향 지연 시간을 얻을 수있는 타임 스탬프 서버로 메시지를 전송 - 타임 스탬프)

서버와 클라이언트는 동일한 시스템에서 실행 중이지만 다른 CPU 코어에 고정되어 있습니다.

답변

1

System.nanoTime()을 사용할 수 있습니다. Windows XP를 실행하는 멀티 소켓 컴퓨터와 같은 구형 OS에서만 문제가됩니다.

기계 내.

  • 다른 스레드의 타임 스탬프를 읽어 하나 개의 스레드에 타임 스탬프를 작성합니다.

참고 : 이러한 방식으로 측정 지연은 조정 누락과 같은 심각한 문제가 있습니다. 더 나은 접근법은 측정하려는 목표 처리량을 기준으로 테스트를 시작할시기를 계산할 때 계산하는 것입니다.

  • 아직 시간 경과하지 않은 경우 해당 시간 동안 대기 중입니다.
  • 실제로 보낸 시간 대신 메시지를 보내야하는 시간을 작성하십시오.
  • 타임 스탬프를 읽고 비교하십시오.
  • 레코드를 배포하십시오.

당신은

  • 이 다른 쪽 끝을 다시 보내
  • 는이 타임 스탬프 보내 왕복 테스트를 수행하여도 컴퓨터간에) System.nanoTime을 (사용할 수 있습니다.
  • 현재 시간과 비교하십시오.
+0

고마워요! 협동 탈락이 과도 할 수 있음을 알았습니다. 한 번에 하나씩 수백만 메시지의 단방향 대기 시간을 측정 한 다음 (두 메시지를 동시에 보내지 마십시오) 평균, 백분위 수, 표준 등을 계산할 수 없습니까? – TakeSoUp

+0

@TakeSoUp 대기 시간은 stddev가 정규 분포를 따르지 않으므로 의미가 없습니다. 협조 누락은 최대 처리량에 거의 도달 할 때 문제가됩니다. 최대 10 % 만 말하는 경우 중요하지 않을 수 있습니다. 추측 할 필요가 없으므로 측정하는 것이 더 좋습니다. –

관련 문제