Sto implementando il comando cp (file copy) usando mmap(). Per quello ho mappato il file sorgente in MAP_PRIVATE (come voglio solo leggere) la modalità e il file di destinazione in modalità MAP_SHARED (Come devo scrivere il contenuto modificato del file di destinazione).Come disabilitare Copy-on-write e zero riempito su richiesta per mmap()
Durante questa operazione ho osservato la penalità delle prestazioni a causa di numerosi errori di pagina minori dovuti a 2 motivi. 1) Zero riempimento su richiesta mentre si chiama mmap (MAP_PRIVATE) per il file sorgente. 2) Copia su scrittura mentre si chiama mmap (MAP_SHARED) per il file di destinazione.
C'è un modo per disabilitare Zero-fill-on-demand e Copy-on-write?
Grazie, Harish
Sono sorpreso che si vede una penalizzazione delle prestazioni per riempimento a zero, come lo si misura? Non si desidera disabilitare COW, è fondamentale il modo in cui la memoria virtuale funziona e migliora le prestazioni. Hai considerato che usare 'write (2)' potrebbe essere più efficiente per la copia? Specificare la mappa privata come buffer da scrivere. Evita anche il passo dell'espansione del nuovo file, dal momento che 'write (2)' lo farà per te. – cdarke
Sto misurando l'errore di pagina minore da getrusage(). Mostra che ci sono quasi 50000 errori di pagina minori per copiare 1gb di file con mmam() (quasi 25000 per leggere mmap (MAP_PRIVATE) e lo stesso per scrivere mmap (MAP_SHARED)). Sì, ho controllato che write (2) è più efficiente di mmap() per la copia, ma penso che mmap() possa essere efficiente se disabilitiamo Zero-fill-on-demand e Copy-on-write. – Harish
Harish, controlla le syscalls 'madvice()' e 'mlock()'. Possono influire sul numero di errori di pagina. E per una copia veloce dei file, controlla syscall 'sendfile()'. – osgx