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
각 도구에는 특정 용도가 있습니다. 툴을 순서대로 사용하여 안정적인 테스트 결과를 얻을 수 있습니다.
-
hwlatdetect
도구는 베어 하드웨어에서 달성할 수 있는 기준을 측정합니다. 다음 대기 시간 테스트를 진행하기 전에hwlatdetect
에서 측정한 수가 운영 체제 튜닝을 통해 하드웨어 대기 시간 급증을 수정할 수 없기 때문에 필요한 임계값을 충족하는지 확인합니다. -
cycle
lictest
도구는hwlatdetect
가 통과한 후 타이머 대기 시간을 확인합니다. cyclelictest
도구는 반복 타이머를 스케줄링하고 원하는 실제 트리거 시간 간의 차이점을 측정합니다. 차이점은 인터럽트 또는 프로세스 우선 순위로 인해 발생하는 튜닝의 기본 문제를 찾을 수 있습니다. -
oslat
툴은 CPU를 많이 사용하는 DPDK 애플리케이션과 유사하게 작동하며 CPU 사용량이 많은 데이터 처리를 시뮬레이션하는 busy 루프에 대한 모든 중단 및 중단을 측정합니다.
기본적으로 대기 시간 테스트는 비활성화되어 있습니다. 대기 시간 테스트를 활성화하려면 LATENCY_TEST_RUN
환경 변수를 테스트 호출에 추가하고 해당 값을 true
로 설정해야 합니다. 예: LATENCY_TEST_RUN=true
테스트에서는 다음 환경 변수를 도입합니다.
-
LATENCY_TEST_CPUS
변수는 대기 시간 테스트를 실행하는 Pod에서 사용하는 CPU 수를 지정합니다. -
LATENCY_TEST_RUNTIME
변수는 대기 시간 테스트 실행에 필요한 시간(초)을 지정합니다. -
CYCLICTEST_MAXIMUM_LATENCY
변수는 cyclelictest
실행 중에 모든 스레드가 다시 시작하기 전에 예상하는 최대 대기 시간을 지정합니다. -
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