2015-05-26 14 views
8

Desidero allocare memoria sulle enormi pagine utilizzate da una macchina Linux. Vedo che ci sono due modi per farlo, usando mmap e madvise.Utilizzo di mmap e madvise per pagine enormi

Cioè, utilizzando il flag MAP_HUGETLB con la chiamata mmap -

base_ptr_ = mmap(NULL, memory_size_, PROT_READ | PROT_WRITE, MAP_PRIVATE | MAP_ANONYMOUS | MAP_HUGETLB, -1, 0); 

E la bandiera MADV_HUGEPAGE con la chiamata madvise -

madvise(base_ptr_, memory_size_, MADV_HUGEPAGE); 

Qualcuno potrebbe spiegare la differenza tra i due?

risposta

9

Entrambe le funzioni eseguono operazioni diverse, che possono o non possono materia nel contesto:

  • madvise imposta un flag per tutte le mappature memoria corrispondenti alla regione passata ad esso, dicendo al filo khugepaged kernel che può considerare le suddette mappature per la promozione su pagine enormi. Ciò funzionerà solo se è abilitato il supporto trasparente per le pagine enormi (lo stato del supporto trasparente per le pagine enormi è disponibile in /sys/kernel/mm/transparent_hugepage/enabled), che sarà il caso nella maggior parte delle distro, ma potrebbe essere disabilitato sui sistemi incorporati.

  • mmap effettivamente andare avanti e prenotare le pagine dal interna hugetlbfs monte del kernel, il cui stato può essere visto sotto /sys/kernel/mm/hugepages. Le pagine in questione devono essere disponibili per il momento in cui viene invocato mmap (vedere HugePages_Free in /proc/meminfo) o mmap non riuscirà.

I due meccanismi hanno un proprio file doc nel kernel: hugetlbpage.txt e transhuge.txt

+0

Quindi, dato ci sono abbastanza pagine disponibili ... 'mmap' è l'opzione più affidabile? È corretto? – subzero

+3

Dipende, se controlli tutto ciò che si trova sulla macchina e sai esattamente come si comporterà il tuo programma, allora 'mmap' ti permetterà di specificare esattamente come comportarti. Se non sei sicuro di come verrà utilizzata la memoria (si frammenterà? Ci sono altri utenti enormi di pagine nel sistema), allora l'enorme pagina trasparente ti darà il miglior risultato possibile alla fine. –

Problemi correlati