2013-10-24 2 views
1

증가하는 목록에만 사용되는 mmap/MAP_ANONYMOUS과 함께 다수의 페이지를 할당했습니다.여러 개의 익명 페이지에 대한 사전 오류

커널을 Linux에서 액세스하기 전에 여러 페이지를 미리 지능적으로 사전 오류 처리 할 수있는 방법이 있습니까?

MAP_POPULATE 플래그는 MAP_ANONYMOUS에 대해 운영되지 않는 것으로 보입니다.

내가 할 수있는 원인 스타일의 포인터를 통해 단지 루프의 : 새로운 상황 변화에 액세스 각각의 새로운 페이지에 대한 강제 때문에

for (i = 1; i < num_pages_to_prefault; i++) 
    *((char *)pointer_to_current_page + i * sysconf(_SC_PAGE_SIZE)) = 0; 

그러나 이것은 어느 스레드 안전 않으며, 특히 효율적이다.

는 내가 원하는 만 하나 컨텍스트 스위치의 원인과 페이지의 번호를 prefault하거나 매핑 또는 내 상주 세트에 이미되지 않은 경우 그대로 그들을 떠나

prefault_memory(void * start_address, size_t length); 

같은 것입니다.

+0

'mlock'은 어떻게 사용합니까? –

+2

필자는 한번도 사용하지 않았지만'madvise()'를'MADV_WILLNEED' 또는'MADV_SEQUENTIAL'과 함께 사용했을 가능성이 있습니까? – Macattack

+0

@Macattack 고맙습니다. 'MADV_WILLNEED'는 내가 필요한 것입니다. Linux는 이러한 조언을 따르는 것 같습니다. 앞서 4Mb의 덩어리에서 오류가 발생하면 속도가 25 % 나 빨라집니다. 이 글을 대답으로 올린다면 나는 당신에게 신용을 줄 것이다. –

답변

3

찾고있는 전화는 madvise()이고 MADV_WILLNEED입니다.

+0

최신 커널 만이이를 지원합니다. 내 dev 시스템에서는 매력처럼 작동하지만 이전 커널 버전을 실행하는 클러스터에서는 작동하지 않습니다. 그 다른 것을 필요로 할 것입니다. –