Menu Close

16.7.8. 대기 시간 테스트 실행

kubeconfig 파일이 현재 폴더에 있다고 가정하면 테스트 모음을 실행하는 명령은 다음과 같습니다.

$ docker run -v $(pwd)/:/kubeconfig -e KUBECONFIG=/kubeconfig/kubeconfig registry.redhat.io/openshift4/cnf-tests-rhel8:v4.9 /usr/bin/test-run.sh

이 명령을 사용하면 실행 중인 컨테이너 내부에서 kubeconfig 파일을 사용할 수 있습니다.

주의

검색 모드에서 대기 시간 테스트를 실행해야 합니다. 검색 모드에서 실행하지 않는 경우 대기 시간 테스트에서 클러스터 구성을 변경할 수 있습니다.

OpenShift Container Platform 4.9에서는 CNF-test 컨테이너에서 대기 시간 테스트를 실행할 수도 있습니다. 대기 시간 테스트를 사용하면 노드 튜닝이 워크로드에 충분한지 확인할 수 있습니다.

시스템의 대기 시간을 측정하는 세 가지 툴:

  • hwlatdetect
  • quitlictest
  • oslat

각 도구에는 특정 용도가 있습니다. 툴을 순서대로 사용하여 안정적인 테스트 결과를 얻을 수 있습니다.

  1. hwlatdetect 도구는 베어 하드웨어에서 달성할 수 있는 기준을 측정합니다. 다음 대기 시간 테스트를 진행하기 전에 hwlatdetect 에서 측정한 수가 운영 체제 튜닝을 통해 하드웨어 대기 시간 급증을 수정할 수 없기 때문에 필요한 임계값을 충족하는지 확인합니다.
  2. cycle lictest 도구는 hwlatdetect 가 통과한 후 타이머 대기 시간을 확인합니다. cycle lictest 도구는 반복 타이머를 스케줄링하고 원하는 실제 트리거 시간 간의 차이점을 측정합니다. 차이점은 인터럽트 또는 프로세스 우선 순위로 인해 발생하는 튜닝의 기본 문제를 찾을 수 있습니다.
  3. oslat 툴은 CPU를 많이 사용하는 DPDK 애플리케이션과 유사하게 작동하며 CPU 사용량이 많은 데이터 처리를 시뮬레이션하는 busy 루프에 대한 모든 중단 및 중단을 측정합니다.

기본적으로 대기 시간 테스트는 비활성화되어 있습니다. 대기 시간 테스트를 활성화하려면 LATENCY_TEST_RUN 환경 변수를 테스트 호출에 추가하고 해당 값을 true 로 설정해야 합니다. 예: LATENCY_TEST_RUN=true

테스트에서는 다음 환경 변수를 도입합니다.

  • LATENCY_TEST_CPUS 변수는 대기 시간 테스트를 실행하는 Pod에서 사용하는 CPU 수를 지정합니다.
  • LATENCY_TEST_RUNTIME 변수는 대기 시간 테스트 실행에 필요한 시간(초)을 지정합니다.
  • CYCLICTEST_MAXIMUM_LATENCY 변수는 cyclelic test 실행 중에 모든 스레드가 다시 시작하기 전에 예상하는 최대 대기 시간을 지정합니다.
  • HWLATDETECT_MAXIMUM_LATENCY 변수는 워크로드 및 운영 체제에 대해 마이크로초 내에 허용되는 최대 하드웨어 대기 시간을 지정합니다.
  • OSLAT_MAXIMUM_LATENCY 변수는 oslat 테스트 결과에 대해 마이크로초 단위로 최대 허용 가능한 대기 시간을 지정합니다.
  • MAXIMUM_LATENCY 는 모든 테스트에 적용할 수 있는 통합 변수입니다.
참고

특정 테스트와 관련된 변수가 통합 변수보다 우선합니다.

ginkgo.focus 플래그를 사용하여 특정 테스트를 실행할 수 있습니다.

16.7.8.1. hwlatdetect 실행

hwlatdetect 를 수행하려면 다음 명령을 실행합니다.

$ docker run -v $(pwd)/:/kubeconfig -e KUBECONFIG=/kubeconfig/kubeconfig -e LATENCY_TEST_RUN=true -e DISCOVERY_MODE=true -e ROLE_WORKER_CNF=worker-cnf -e LATENCY_TEST_RUNTIME=600 -e MAXIMUM_LATENCY=20  registry.redhat.io/openshift4/cnf-tests-rhel8:v4.9 /usr/bin/test-run.sh -ginko.focus=”hwladetect”

위의 명령은 10분(600초) 동안 hwlatdetect 도구를 실행합니다. 최대 관찰 대기 시간이 MAXIMU M_LATENCY(20 s)보다 낮고 명령줄에 SUCCESS! 가 표시되면 테스트가 성공적으로 실행됩니다.

실패 출력 예

$ docker run -v $KUBECONFIG:/root/kubeconfig:Z -e KUBECONFIG=/root/kubeconfig -e PERF_TEST_PROFILE=performance -e ROLE_WORKER_CNF=worker-cnf -e LATENCY_TEST_RUN=true -e LATENCY_TEST_RUNTIME=40 -e MAXIMUM_LATENCY=1 -e LATENCY_TEST_CPUS=10 -e DISCOVERY_MODE=true quay.io/titzhak/cnf-tests:latest usr/bin/test-run.sh -ginkgo.focus="hwlatdetect" 1
running /usr/bin//validationsuite -ginkgo.focus=hwlatdetect
...
Discovery mode enabled, skipping setup
running /usr/bin//cnftests -ginkgo.focus=hwlatdetect
I0812 09:53:57.108148      19 request.go:668] Waited for 1.049207747s due to client-side throttling, not priority and fairness, request: GET:https://api.cnfdc8.t5g.lab.eng.bos.redhat.com:6443/apis/autoscaling/v1?timeout=32s
Running Suite: CNF Features e2e integration tests
=================================================
Random Seed: 1628762033
Will run 1 of 138 specs

SSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSS
------------------------------
• [SLOW TEST:26.144 seconds]
[performance] Latency Test
/go/src/github.com/openshift-kni/cnf-features-deploy/vendor/github.com/openshift-kni/performance-addon-operators/functests/4_latency/latency.go:84
  with the hwlatdetect image
  /go/src/github.com/openshift-kni/cnf-features-deploy/vendor/github.com/openshift-kni/performance-addon-operators/functests/4_latency/latency.go:224
    should succeed
    /go/src/github.com/openshift-kni/cnf-features-deploy/vendor/github.com/openshift-kni/performance-addon-operators/functests/4_latency/latency.go:232
------------------------------
SSSSSSSSSSSSSSSSSSSSSS

detector: tracer
   parameters:
        Latency threshold: 1us 2
        Sample window:     10000000us
        Sample width:      950000us
     Non-sampling period:  9050000us
        Output File:       None

Starting test
test finished
Max Latency: 35us 3
Samples recorded: 2
Samples exceeding threshold: 2
ts: 1628174377.074638224, inner:20, outer:35
ts: 1628174387.359881340, inner:21, outer:34
; err: exit status 1
goroutine 1 [running]:
k8s.io/klog.stacks(0xc000070200, 0xc000106400, 0x21b, 0x3c2)
	/remote-source/app/vendor/k8s.io/klog/klog.go:875 +0xb9
k8s.io/klog.(*loggingT).output(0x5bed00, 0xc000000003, 0xc00010a0e0, 0x53ea81, 0x7, 0x33, 0x0)
	/remote-source/app/vendor/k8s.io/klog/klog.go:826 +0x35f
k8s.io/klog.(*loggingT).printf(0x5bed00, 0x3, 0x5082da, 0x33, 0xc000113f58, 0x2, 0x2)
	/remote-source/app/vendor/k8s.io/klog/klog.go:707 +0x153
k8s.io/klog.Fatalf(...)
	/remote-source/app/vendor/k8s.io/klog/klog.go:1276
main.main()
	/remote-source/app/cnf-tests/pod-utils/hwlatdetect-runner/main.go:51 +0x897

1
사용자가 제공하는 docker 인수입니다.
2
MAX_LATENCY 또는 HWLATDETECT_MAX_LATENCY 환경 변수를 사용하여 사용자가 구성한 대기 시간 임계값입니다.
3
테스트 중에 측정된 최대 대기 시간 값입니다.