페이지 폴트 수를 예측하거나 계산하는 방법이 있습니까?

페이지 폴트 수를 예측하거나 계산하는 방법이 있습니까?

저는 하드웨어 성능 카운터(HPC) 작업을 하고 있으며 이러한 카운터를 사용하여 특정 이벤트를 정확하게 측정하려고 합니다.

나는 하드웨어 성능 카운터의 불확실성(부정확성)이 다음으로 인해 발생할 수 있다는 것을 발견했습니다.페이지 오류런타임에 발생합니다. 페이지 폴트 수는 명령어 및 분기 수에 직접적인 영향을 미칩니다.

내 질문: 소스 코드의 정적 분석을 사용하여 페이지 오류 수를 예측(또는 계산)하는 방법이 있습니까? 그렇지 않다면 이를 동적으로 달성할 수 있습니까?

답변1

모든 페이지 오류에 대한 로그를 절대적으로 생성할 수 있지만 이를 안정적으로 예측할 수는 없습니다. 가상 메모리를 끄고 소프트웨어가 RAM 또는 L2에 적합한지 확인하세요. 아마도 Zram이 도움이 될 것입니다. 더 나은 결과를 원한다면 값을 설정하고 실시간 운영 체제를 사용할 수도 있습니다.

답변2

실시간으로 처리해야 할 일이 있는 것 같습니다. 이 경우 페이지 폴트가 중요하지 않은지 확인하는 올바른 방법은 이를 예측하려고 시도하는 것이 아니라(거의 불가능함) 페이지 폴트가 언제 어디서 발생하는지 관리하는 것입니다.

POSIX 호환 및 POSIX 유사 시스템에서 이를 수행하는 가장 쉬운 방법은 시작 시 및 플래그 세트를 mlockall()사용하여 libc에서 함수를 호출하는 것입니다. 이는 세 가지 작업을 수행합니다.MCL_CURRENTMCL_FUTURE

  1. 이는 프로세스에 의해 매핑된 메모리가 교체되는 것을 방지합니다(적어도 호출할 때까지는 munlockall()).
  2. 오작동을 일으킨다모두현재 매핑된 페이지입니다. 첫 번째 요점과 함께 이는 매핑된 메모리 영역에 대한 액세스가 페이지 오류를 생성하지 않음을 의미합니다.
  3. 새로 매핑된 페이지가 매핑되면 오류가 발생합니다. 즉, 메모리 할당 호출은 해당 메모리 영역의 내용을 메모리로 가져오는 데 필요한 페이지 오류 수만큼 정확하게 트리거되며 할당이 완료된 후 후속 액세스에서는 페이지 오류가 트리거되지 않습니다.

이는 문제만 해결한다는 점에 유의하세요.당신의프로그램. 시스템에서 실행 중인 다른 코드로부터 여전히 간섭을 받을 수 있지만 불행하게도 이에 대해 할 수 있는 일이 많지 않습니다(실시간 예약 우선 순위로 실행하는 것 외에는 별 도움이 되지 않습니다).

관련 정보