pg_test_timing다음을 수행하는 도구입니다. 시스템의 타이밍 오버헤드를 측정하고 시스템 시간은 절대로 뒤로 이동하지 않습니다. 속도가 느린 시스템 타이밍 데이터를 수집하면 정확도가 떨어질 수 있습니다.분석 설명결과.
pg_test_timing수락합니다 다음 명령줄 옵션:
테스트 기간을 초 단위로 지정합니다. 더 길게 지속 시간은 약간 더 나은 정확도를 제공하며, 시스템 시계 이동과 관련된 문제를 발견할 가능성이 높습니다. 뒤로. 기본 테스트 기간은 3초입니다.
인쇄pg_test_timing버전 및 종료.
다음에 관한 도움말 표시pg_test_timing명령줄 인수, 그리고 나가세요.
좋은 결과는 대부분의(90%) 개별 토토을 보여줍니다. 호출에는 1마이크로초 미만이 소요됩니다. 루프 오버헤드당 평균 100나노초 미만으로 훨씬 낮아질 것입니다. 이 예는 TSC 클럭 소스를 사용하는 Intel i7-860 시스템은 탁월한 성능을 보여줍니다. 성능:
3초 동안 타이밍 오버헤드를 테스트합니다.
오버헤드를 포함한 루프당 시간: 35.96nsec
타이밍 기간의 히스토그램:
< usec: 카운트 퍼센트
16:2 0.00000%
8:13 0.00002%
4: 126 0.00015%
2: 2999652 3.59518%
1: 80435604 96.40465%
루프당 시간에는 다른 단위가 사용된다는 점에 유의하세요. 히스토그램보다 루프는 몇 분 안에 해결될 수 있습니다. 나노초(nsec), 개별 토토 호출은 1마이크로초(usec)까지 분해됩니다.
쿼리 실행기가 다음을 사용하여 명령문을 실행할 때분석 설명, 개별 작업 시간이 정해지고 요약도 표시됩니다. 귀하의 간접비 시스템은를 사용하여 행을 계산하여 확인할 수 있습니다.psql프로그램:
CREATE TABLE t AS SELECT * FROM generate_series(1,100000); \타이밍 SELECT COUNT(*) FROM t; 설명 분석 선택 개수(*) FROM t;
측정된 i7-860 시스템은 9.8ms 내에 카운트 쿼리를 실행합니다. 동안분석 설명버전 16.6ms가 소요되며 각각 100,000개가 조금 넘는 행을 처리합니다. 그 6.8 ms 차이는 행당 타이밍 오버헤드가 68ns임을 의미합니다. pg_test_timing이 예상한 것의 두 배입니다. 그것마저도 상대적으로 적은 양의 오버헤드로 인해 완전히 시간이 초과되었습니다. count 문은 거의 70% 더 오래 걸립니다. 더 실질적인 것에 쿼리를 수행하면 타이밍 오버헤드가 덜 문제가 될 것입니다.
일부 최신 Linux 시스템에서는 언제든지 타이밍 데이터를 수집하는 데 사용되는 클럭 소스입니다. 잠시 예는 다음으로 전환할 때 발생할 수 있는 속도 저하를 보여줍니다. 더 느린 acpi_pm 시간 소스, 동일한 시스템에서 위의 빠른 결과:
# 고양이 /sys/devices/system/clocksource/clocksource0/available_clocksource
tsc hpet acpi_pm
# echo acpi_pm /sys/devices/system/clocksource/clocksource0/current_clocksource
# pg_test_timing
오버헤드를 포함한 루프당 시간: 722.92nsec
타이밍 기간의 히스토그램:
< usec: 카운트 퍼센트
16:3 0.00007%
8: 563 0.01357%
4: 3241 0.07810%
2: 2990371 72.05956%
1: 1155682 27.84870%
이 구성에서는 샘플분석 설명위에서는 115.9ms가 걸립니다. 그건 1061nsec의 토토 오버헤드, 다시 말해, 이 유틸리티로 직접 측정됩니다. 그만큼 토토 오버헤드가 크다 실제 쿼리 자체가 시간으로 계산하면 대부분이 소비됩니다. 대신 오버헤드. 이 구성에서는 모든분석 설명여러 시간이 포함된 총계 시기에 따라 운영이 크게 부풀려질 것입니다. 간접비.
FreeBSD에서는 시간 소스를 즉시 변경할 수도 있습니다. 부팅 중에 선택한 타이머에 대한 정보를 기록합니다.
dmesg | grep "타임카운터" sysctl kern.timecounter.hardware=TSC
다른 시스템에서는 시간 소스 설정만 허용할 수 있습니다. 신병. 이전 Linux 시스템에서 "시계" 커널 설정은 이런 종류의 변화를 만드는 유일한 방법입니다. 그리고 심지어 좀 더 최근에는 클럭 소스에 대해 볼 수 있는 유일한 옵션은 다음과 같습니다. "지피". Jiffies는 오래된 Linux 소프트웨어 시계입니다. 지원될 때 좋은 해상도를 가질 수 있는 구현 다음 예와 같이 충분히 빠른 타이밍 하드웨어로:
$ cat /sys/devices/system/clocksource/clocksource0/available_clocksource
지피
$dmesg | grep time.c
time.c: 3.579545MHz WALL PM GTOD PIT/TSC 타이머를 사용합니다.
time.c: 2400.153MHz 프로세서가 감지되었습니다.
$ pg_test_timing
3초 동안 타이밍 오버헤드를 테스트합니다.
루프 오버헤드를 포함한 타이밍 기간당: 97.75ns
타이밍 기간의 히스토그램:
< usec: 카운트 퍼센트
32:1 0.00000%
16:1 0.00000%
8:22 0.00007%
4: 3010 0.00981%
2: 2993204 9.75277%
1: 27694571 90.23734%
정확한 타이밍 정보 수집은 일반적으로 다음에서 수행됩니다. 다양한 수준의 하드웨어 시계를 사용하는 컴퓨터 정확성. 일부 하드웨어에서는 운영 체제가 다음을 통과할 수 있습니다. 시스템 시계 시간은 프로그램에 거의 직접적으로 적용됩니다. 시스템 시계 단순히 타이밍을 제공하는 칩에서 파생될 수도 있습니다. 인터럽트, 알려진 시간 간격으로 주기적 틱. ~ 안에 두 경우 모두 운영 체제 커널은 클럭 소스를 제공합니다. 이러한 세부 정보를 숨깁니다. 하지만 그 클럭 소스의 정확성은 결과를 얼마나 빨리 반환할 수 있는지에 따라 다릅니다. 기본 하드웨어.
시간을 부정확하게 유지하면 시스템이 불안정해질 수 있습니다. 클록 소스에 대한 변경 사항을 매우 주의 깊게 테스트하십시오. 운영 중 시스템 기본값은 때때로 신뢰성보다 신뢰성을 높이기 위해 만들어집니다. 최고의 정확성. 가상 머신을 사용하는 경우 호환되는 권장 시간 소스로 들어갑니다. 가상 하드웨어는 타이머를 에뮬레이션할 때 추가적인 어려움에 직면합니다. 종종 운영 체제별 설정이 제안됩니다. 벤더.
타임 스탬프 카운터(TSC) 클럭 소스가 가장 현재 세대 CPU에서 사용할 수 있는 정확한 것입니다. 그것은 지원되는 시스템 시간을 추적하는 기본 방법 운영 체제와 TSC 시계가 안정적입니다. 있다 TSC가 정확한 타이밍을 제공하지 못하는 여러 가지 이유 소스를 사용하면 신뢰할 수 없게 됩니다. 구형 시스템에는 TSC가 있을 수 있습니다. CPU 온도에 따라 달라지는 클럭 타이밍에 사용할 수 없습니다. 일부 오래된 멀티코어에서 TSC를 사용하려고 합니다. CPU는 서로 일치하지 않는 보고된 시간을 제공할 수 있습니다. 다중 코어. 이로 인해 시간이 거꾸로 흐를 수 있습니다. 이 프로그램이 확인하는 문제입니다. 그리고 심지어 최신 시스템도 매우 공격적인 방식으로 정확한 TSC 타이밍을 제공하지 못할 수 있습니다. 절전 구성.
최신 운영 체제에서는 알려진 TSC 문제를 확인할 수 있습니다. 더 느리고 안정적인 클럭 소스로 전환합니다. 본. 시스템이 TSC 시간을 지원하지만 기본적으로 TSC 시간을 지원하지 않는 경우 즉, 정당한 이유로 비활성화될 수 있습니다. 그리고 일부 운영 시스템이 가능한 모든 문제를 올바르게 감지하지 못할 수도 있습니다. 알려진 상황에서도 TSC를 사용할 수 있습니다. 부정확합니다.
고정밀 이벤트 타이머(HPET)가 선호되는 타이머입니다. 사용 가능하고 TSC가 정확하지 않은 시스템에서. 그만큼 타이머 칩 자체는 최대 100나노초까지 허용하도록 프로그래밍 가능 하지만 화면에서는 그 정도의 정확성을 볼 수 없을 수도 있습니다. 시스템 시계.
고급 구성 및 전원 인터페이스(ACPI)는 Linux가 타이머라고 부르는 전원 관리(PM) 타이머 acpi_pm. acpi_pm에서 파생된 시계는 기껏해야 다음을 제공합니다. 300나노초 분해능.
8254를 포함한 구형 PC 하드웨어에 사용되는 타이머 프로그래밍 가능한 간격 타이머(PIT), 실시간 시계(RTC), APIC(Advanced Programmable Interrupt Controller) 타이머, 그리고 사이클론 타이머. 이 타이머는 밀리초를 목표로 합니다. 해결.