정체 알고리즘의 성공 테스트

정체 알고리즘의 성공 테스트

특정 혼잡 알고리즘이 작동하는지 어떻게 테스트합니까? 대부분의 알고리즘에 대한 대표적인 작업 부하를 쉽게 다시 생성할 수 없기 때문에 묻습니다.

현재 두 가지 사항을 검토 중이지만 더 많은 제안을 받고 싶습니다.

  • 출력에서 "재전송된 세그먼트"netstat -s

현재 내 생각에는 정체로 인해 일정 비율의 패킷이 삭제될 수 있으므로 패킷 삭제와 서버에 정체 이벤트 알림이 전달되는 사이에 1:1 관계가 없을 수도 있지만 느슨한 상관 관계가 있을 수 있다고 생각합니다. 하나의 알고리즘으로 전환하면 손실된 패킷 수가 줄어들면 그려집니다.

이 그림에는 혼잡으로 인해 재전송된 세그먼트가 표시됩니까, 아니면 손실이 있는 링크로 제한됩니까? 그렇다면 (그리고 그럴 수도 있다고 생각합니다) 사용하기에 좋은 측정 기준이 아닐 정도로 물이 더욱 흐려질 수 있습니다.

  • TCP 연결의 평균 수명을 측정하는 데 사용할 수 있는 측정항목이 있나요?

여기서 내 생각은 더 일찍 끝나는 TCP 연결(오류 급증 및 패킷 손실 없음)은 데이터가 더 적은 지연으로 푸시되고 있음을 나타낼 수 있다는 것입니다.

답변1

이 그림에는 혼잡으로 인해 재전송된 세그먼트가 표시됩니까, 아니면 손실이 있는 링크로 제한됩니까? 그렇다면 (그리고 그럴 수도 있다고 생각합니다) 사용하기에 좋은 측정 기준이 아닐 정도로 물이 더욱 흐려질 수 있습니다.

segments retransmittedin에는 netstat -s질문에 나열된 것을 포함하여 어떤 이유로든 모든 커널의 TCP 재전송이 포함됩니다. 그 이유는 다음과 같습니다.

  • 링크 오류
  • 이더넷 스위치 정체
  • Qos 또는 리소스 고갈로 인해 로컬 호스트가 삭제됩니다.
  • 원격 호스트 삭제(아마도 원격 호스트의 qos/리소스 고갈 형태로 인해)

성능 테스트 엔지니어는 일상적으로 이러한 모든 변수를 다루고 적절하게 측정할 수 있는지 확인합니다. 가장 먼저 수행해야 할 테스트 중 하나는 케이블링/네트워크가 문제의 패킷 크기 및 트래픽 속도에서 깨끗하게 실행되는지 확인하는 것입니다. 이는 일반적으로 Ixia 또는 Spirent와 같은 전용 테스트 장비를 사용하여 수행됩니다.

네트워크 성능의 기준을 설정하고 나면 원하는 테스트를 실행할 수 있는 위치에 있게 됩니다. 네트워크가 깨끗하게 테스트되더라도 호스트 TCP 테스트 중에 스위치 인터페이스 오류/삭제를 모니터링하여 결과가 왜곡되지 않도록 해야 합니다.

정체 조건 생성에 대한 귀하의 생각과 관련하여 TCP 트래픽을 실행하기 전에 qos 클래스의 대기열 임계값 바로 아래에 의도적으로 iperf UDP 백그라운드 트래픽을 생성하는 것이 도움이 될 수 있습니다. 보유한 링크를 포화시킬 수 없는 경우 NIC를 1GE 또는 100M로 낮추는 것이 도움이 될 수도 있습니다.

이 모든 것이 복잡하게 들릴 수도 있고 어떤 면에서는 그럴 수도 있습니다. 그러나 qos 테스트는 모든 시스템 구성 요소에 대한 적절한 초점과 가시성을 통해 완전히 수행 가능합니다.

답변2

간결한 버전:

@ninjalj가 지적했듯이 워크로드 애플리케이션은 특정 조정이 워크로드 성능에 도움이 되었는지 여부에 대한 권위 있는 소스로 간주되어야 할 것입니다. 요구 사항이 대기 시간인지 아니면 시스템의 전체 처리량인지에 따라 동작 변경이 성능 요구 사항을 더 잘 충족하는지 여부를 판단할 수 있습니다.

이 경우 변경을 수행하고 httpd의 전체 대기 시간이 감소했는지 여부를 확인합니다.


구체적인 예가 포함된 더 긴 버전:

자세히 설명하기 위해 이것을 맥락에 맞게 설명하겠습니다. 아파치를 살펴보자 httpd. LogFormat및 지시문을 사용하여 요청을 완료하는 데 걸리는 시간(마이크로초)과 각 요청의 크기를 기록할 수 있습니다 CustomLog. 예를 들어:

LogFormat "%h %m %D %b" perflog
CustomLog /var/log/httpd/performance.log perflog

다음과 유사한 출력이 생성됩니다.

xxx.xxx.28.20 GET 41140 86
xxx.xxx.28.20 GET 34468 28
xxx.xxx.28.20 GET 47612 1434
xxx.xxx.28.20 GET 54860 868
xxx.xxx.28.20 POST 97055 6283
xxx.xxx.28.20 GET 33754 53
xxx.xxx.28.20 GET 68964 8416
xxx.xxx.28.20 GET 1143827 11528
xxx.xxx.28.20 GET 38055 61
xxx.xxx.64.208 HEAD 6255 -
xxx.xxx.28.20 GET 36922 142
xxx.xxx.28.20 GET 51871 5581

나는 GET이것에 대한 요청에만 관심을 가질 것입니다:

root@xxxxxxvlp14 /tmp $ grep GET /var/log/httpd/performance.log > work.log
root@xxxxxxvlp14 /tmp $ sed -i 's/-$/0/g' work.log
root@xxxxxvlp14 /tmp $ 

(어떤 이유로든 httpd정수 0 대신 하이픈을 사용하세요.)

그런 다음 프로그래밍 방식으로 이를 구분할 수 있습니다.

#!/bin/bash

totalRequests=$(cat /tmp/work.log | wc -l )

totalTime=$(awk 'BEGIN{ count=0 } {count = count + $3} END { print count }' /tmp/work.log)
averageTime=$( printf "%.2f" $(bc -l <<< "$totalTime / $totalRequests "))
minTime=$(sort -nk 3 work.log | head -1 | awk '{print $3}')
maxTime=$(sort -rnk 3 work.log | head -1 | awk '{print $3}')

totalBytes=$(awk 'BEGIN{ count=0 } {count = count + $4} END { print count }' /tmp/work.log)
minBytes=$(sort -nk 4 work.log | head -1 | awk '{print $4}')
maxBytes=$(sort -rnk 4 work.log | head -1 | awk '{print $4}')

echo "Total Requests In Sample: $totalRequests"

echo

echo "Total Time Taken: $totalTime ms (average: $averageTime ms)"
echo "Longest Request: $maxTime ms"
echo "Shortest Request: $minTime ms"

echo

echo "Total Data Moved: $totalBytes bytes"
echo "Largest Request: $maxBytes bytes"
echo "Smallest Request: $minBytes bytes"

효율성이 아닌 명확성을 위해 작성된 스크립트이므로 댓글을 달지 마십시오. 위의 내용은 다음을 생성합니다.

Total Requests In Sample: 207

Total Time Taken: 15138613 ms (average: 73133.40 ms)
Longest Request: 1143827 ms
Shortest Request: 1788 ms

Total Data Moved: 409825 bytes
Largest Request: 20476 bytes
Smallest Request: 0 bytes

분명히 위의 내용은 긴 샘플을 얻는 것이 중요한 이유를 보여줍니다. 숫자는 정확합니다(1분 30초 길이의 요청은 누군가 호기심을 위해 이미지/그래프가 포함된 Word 형식으로 보고서를 생성하는 것이었습니다).

따라서 아파치가 정상적인 활동에 대한 긴 샘플(아마 하루 종일)을 제공하도록 유도하고, 변경하고, 로그를 회전한 다음, 다시 로그 수집을 시작합니다(예: 추가 24시간 동안 대기).

각 서비스(NFS, 기타 HTTP 서버, Samba, FTP 서버 등)에는 정보를 수집하는 고유한 방법이 있지만 일반적으로일부시간과 처리량을 기록하는 수단입니다.

관련 정보