PERFMON(4)

명칭
perfmon - CPU 의 성능 모니터링을 하는 인터페이스

서식
cpu "I586_CPU" cpu "I686_CPU" options PERFMON

해설
perfmon 드라이버에 의해 Intel 의 Pentium (와)과 Pentium Pro 의 CPU 내부의 성능 모니터링 기능에 액세스 할 수 있습니다. 이러한 프로세서에는 다채로운 이벤트에 대해 발생 회수 또는 (CPU 사이클에서의) 지속 시간의 어느 쪽인지를 측정하도록(듯이) 설정할 수 있다 2 개의 내부 카운터와 같이 클락 사이클을 센다 1 개의 사이클 카운터가 실장되고 있습니다. perfmon 드라이버에서는 이러한 기능에 대해서 디바이스 형식에 의한 인터페이스를 제공 합니다.

성능 모니터링을 하는 카운터에의 모든 액세스는 디바이스형 특수 파일의 “/dev/perfmon” (을)를 매개로서 처리됩니다. 이 디바이스가 제공한다 ioctl(2) 리퀘스트는 많이 있어 <machine/perfmon.h> 중(안)에서 정의되어 이 파일안에는 Pentium (와)과 Pentium Pro 프로세서의 양쪽 모두의 다양한 카운터의 정의도 있습니다.

주의 사항: 이용 가능한 이벤트의 집합은 프로세서마다 다릅니다. 사용되는 이벤트 코드가 측정되는 CPU 의 형식에 대해서 적정인 것을 확인하는 것은 프로그래머의 책임입니다.

이하의 ioctl(2) 리퀘스트가 정의되고 있습니다:

PMIOSETUP
    (struct pmc) 구조체에 정의되고 있는 파라미터와 플래그로 카운터를 설정합니다. 이하의 필드가 struct pmc 에 정의되고 있습니다:

    int pmc_num
        지정하는 카운터 번호입니다. NPMC (현재는 2)보다 작지 않으면 안됩니다.

    u_char pmc_event
        모니터 해야 할 특정의 이벤트 코드로, <machine/perfmon.h> 에 정의되고 있습니다.

    u_char pmc_unit
        이벤트의 형태에 대응하는 장치의 마스크의 값입니다 ( Intel 의 문서를 참조).

    u_char pmc_flags
        카운터의 기능을 변경하는 플래그 (아래와 같이 참조)입니다.

    u_char pmc_mask
        카운터의 마스크의 값입니다. 즉, 본래, 이 값은 지정된 수의 클락 이상 (또는 이하)의 사이 계속하는 이벤트에 카운트를 제한하기 위해 사용되고 귀의치 입니다.

    다음과 같은 pmc_flags 의 값이 정의되고 있습니다:
    PMCF_USR
        이벤트를 유저 모드로 카운트 합니다.
    PMCF_OS
        이벤트를 커널 모드로 카운트 합니다.
    PMCF_E
        이벤트를 지속 시간은 아니고 그 수로 카운트 합니다.
    PMCF_INV
        카운터의 마스크의 비교의 의미를 역전합니다.

PMIOGET
    (struct pmc) 지정된 카운터의 현재의 설정을 돌려줍니다.

PMIOSTART

PMIOSTOP
    (int) 지정한 카운터를 기동 (정지)합니다. 하드웨어의 결함에 의해, 번호순서에 기동과 정지를 하지 않으면 안됩니다. (즉, 카운터 0 은 반드시 우선 카운터 1 을 정지하고 나서 정지하지 않으면 안됩니다). 드라이버에서는 이 제약을 강제하고 있지 않습니다 (라고 하는 것도 장래의 CPU 에서는 이 제약은 없어질지도 모릅니다).

PMIORESET
    (int) 지정된 카운터를 0 에 리셋트 합니다. 카운터는 리셋트 하기 전에 PMIOSTOP 에 의해 정지되지 않으면 안됩니다. 모든 카운터는 자동적으로 PMIOSETUP 에 의해 리셋트 됩니다.

PMIOREAD
    (struct pmc_data) 카운터의 현재의 값을 꺼냅니다. pmc_data 구조체에는 다음과 같은 2 개의 필드가 정의되고 있습니다:

    int pmcd_num
        읽어내는 카운터의 번호.
    int pmcd_value
        64 비트의 부호 첨부 정수에서의 종료치.

    장래, Pentium Pro 프로세서로부터 카운터를 직접 읽어내기 위해 RDPMC 인스트럭션을 사용 할 수 있는 것처럼 되겠지요.

PMIOTSTAMP
    (struct pmc_tstamp) 타임 스탬프 카운터를 읽어냅니다. pmc_tstamp 구조체에서는 2 개의 필드가 정의되고 있습니다:

    int pmct_rate
        카운터의 MHz 에서의 대체로의 속도입니다.
    quad_t pmct_value
        64 비트 정수에서의 카운터의 현재의 값입니다.

    pmct_rate 필드에게 줄 수 있는 카운터의 속도는, 교정이 곤란한 일이나 클락의 진행이 불완전한 때문에, 때때로 정확하지 않는 것에 주의하는 것이 중요합니다. 이 필드에 대해서는 클락이 새기는 속도를 실제로 표시하는 것이라고 하는 것보다도 단서인가 또는 적정 사노 검사정도 생각해야 합니다.

관련 파일
/dev/perfmon
    카운터에의 캐릭터형 디바이스의 인터페이스
/usr/include/machine/perfmon.h
    구조체와 이벤트 코드를 정의하고 있는 인클루드 파일
/usr/share/examples/perfmon
    모든 ioctl() 명령의 사용을 구체적으로 예시한 샘플의 원시 코드

관련 항목
ioctl(2) Intel Corporation, Pentium Pro Family Developer's Manual, January 1996, vol. 3, Operating System Writer's Manual. 인텔 재팬 주식회사, Pentium Pro 파미리디베롭파즈마뉴알, January 1996, 하권, 오페레이팅시스템라이타즈마뉴알.

역사
The perfmon 디바이스는 FreeBSD 2.2 그리고 처음으로 나타났습니다.

저자
perfmon 드라이버는 Garrett A. Wollman, MIT Laboratory for Computer Science 하지만 썼습니다.