2014-05-06 11 views
5

Sembra a me come MAP_POPULATE non è solo per mappature privati, in contraddizione con ciò che la pagina uomo dice:Linux mmap() con MAP_POPULATE, pagina man sembra dare informazioni sbagliate

MAP_POPULATE (dal Linux 2.5 .46) Compilare le tabelle di pagina (pre-default) per una mappatura. Per un mapping di file, ciò causa read-ahead sul file. Gli accessi successivi alla mappatura non saranno bloccati da errori di pagina. MAP_POPULATE è supportato solo per i mapping privati ​​da Linux 2.6.23.

Sulla base della mia un'ispezione sommaria dei sorgenti del kernel Linux per mmap.c, sembra che MAP_POPULATE non ha assolutamente alcun rapporto con MAP_PRIVATE di sorta in versions going back as far as 2.6.34.

Ecco un estratto del codice più recente dal mmap.c come dell'attuazione 3.14 kernel:

... 
1364   addr = mmap_region(file, addr, len, vm_flags, pgoff); 
1365   if (!IS_ERR_VALUE(addr) && 
1366    ((vm_flags & VM_LOCKED) || 
1367    (flags & (MAP_POPULATE | MAP_NONBLOCK)) == MAP_POPULATE)) 
1368     *populate = len; 
1369   return addr; 
... 

Mi sbaglio nella mia osservazione?

+0

Ho letto quell'osservazione come "prima del 2.6.23, MAP_POPULATE non era supportato per i mapping privati" (senza informazioni su MAP_POPULATE per i mapping non privati). –

+0

Immagino che possa essere interpretato anche in questo modo. Forse "loro" hanno bisogno di cambiare la lingua in modo che sia meno ambigua. –

risposta

5

La formulazione è stata aggiornata da quando hai fatto la domanda:

Before: MAP_POPULATE is only supported for private mappings since Linux 2.6.23. 
After: MAP_POPULATE is supported for private mappings only since Linux 2.6.23. 

In altre parole, è possibile utilizzare MAP_POPULATE per mappature privati, ma è necessario almeno Linux 2.6.23.

Spero che questo lo chiarisca!

+0

Non credo che la formulazione aiuti affatto con l'ambiguità. Quando un collega e io l'abbiamo letto l'altro giorno, l'abbiamo interpretato come "MAP_POPULATE è supportato (solo per le mappature private) da Linux 2.6.23". Sembra, cioè, che supporti solo i mapping privati ​​nelle versioni successive del kernel. Consiglierei qualcosa del tipo 'Dal momento che Linux 2.6.23 MAP_POPULATE funziona sia per i mapping privati ​​che per quelli condivisi. Prima della 2.6.23, erano supportati solo i mapping condivisi –

Problemi correlati