2012-12-02 3 views
6

가능한 한 실시간으로 프로세스를 실행해야합니다.리눅스에서 실시간으로 사소한 페이지 결함을 방지합니다.

모든 통신은 공유 메모리 - 메모리 맵 파일 - 시스템 호출 없음 -을 통해 공유 메모리에서 대기 중입니다.

과정은 실시간 우선 순위에서 실행되며 모든 메모리는 성공하고 프로세스가 모든 메모리가 잠겨 가지고 ulimits 충분히 가지고 mlockall(MCL_CURRENT|MCL_FUTURE)에 잠겨 있습니다.

나는 그것을 실행할 때 perf stat -p PID 여전히 사소한 페이지 오류 수를 얻습니다.

나는 프로세스 친 화성과 무첨가 둘 다로 이것을 테스트했다.

질문 :

전혀 그들을 제거하는 것이 가능 - 사소한 페이지 오류를?

답변

0

올바른 질문을 이해하면 사소한 페이지 오류를 완전히 피할 수 없습니다. 리눅스를 포함한 대부분의 최신 OS에서 OS는 프로그램 시작시 모든 텍스트 및 데이터 세그먼트를 메모리에로드하지 않습니다. 내부 데이터 구조를 할당하고 텍스트와 데이터가 필요할 때 페이지가 근본적으로 오류가 발생합니다. 이렇게하면 페이지 폴트 물리적 메모리가 프로세스에서 사용 가능하게되어 백업 저장소에서 페이지를 스와핑합니다. 따라서 가능하지 않은 백업 저장소에 액세스하지 않고 사소한 페이지 오류를 피할 수 있습니다.

+0

TLB 미스로 인한 부 페이지 오류에 대해 얘기하고 있습니다. – Artyom

+0

TLB 미스는 대부분의 최신 CPU에서 하드웨어 처리됩니다. 운영 체제에서는 보이지 않아야합니다. 일부 메모리 액세스가 느려지고 하드웨어 성능 모니터링 카운터 (인텔의 DTLB_LOAD_MISSES.ANY) 만 증가합니다. – osgx

+0

부 페이지 오류를 줄이려면 어떻게해야합니까? 메모리가 많지만 CPU 사용량이 너무 많아 다른 작업을 수행 할 수없는 사소한 페이지 결함 문제가 계속 발생합니다. –

5

메모리 매핑 된 파일을 POSIX 공유 메모리 shm_open + 메모리 잠금으로 전환하여이 문제를 해결했습니다.