Estoy implementando el comando cp (copia de archivo) usando mmap(). Para eso mapeé el archivo fuente en el modo MAP_PRIVATE (como solo quiero leer) y el archivo de destino en el modo MAP_SHARED (ya que tengo que volver a escribir el contenido modificado del archivo de destino).Cómo deshabilitar Copy-on-write y zero filled on demand para mmap()
Al hacer esto, he observado una penalización de rendimiento debido a muchas fallas de página menores que se producen debido a 2 razones. 1) Cero relleno bajo demanda al llamar a mmap (MAP_PRIVATE) para el archivo de origen. 2) Copia en escritura mientras llamas a mmap (MAP_SHARED) para el archivo de destino.
¿Hay alguna forma de deshabilitar el relleno cero bajo demanda y el método de escritura por copia?
Gracias, Harish
Me sorprende que vea una penalización de rendimiento para relleno cero, ¿cómo lo está midiendo? No desea deshabilitar COW, es fundamental para la forma en que funciona la memoria virtual y mejora el rendimiento. ¿Has considerado que usar 'write (2)' podría ser más eficiente para la copia? Especifique el mapa privado como el búfer para escribir. También evita el paso de expandir el nuevo archivo, ya que 'write (2)' lo hará por usted. – cdarke
Estoy midiendo el error de página menor por getrusage(). Muestra que hay casi 50000 fallas menores en la página para copiar 1gb de archivo con mmam() (casi 25000 para mmap (MAP_PRIVATE) y lo mismo para write mmap (MAP_SHARED)). Sí, he comprobado que write (2) es más eficiente que mmap() para copiar, pero creo que mmap() puede ser eficiente si deshabilitamos Zero-fill-on-demand y Copy-on-write. – Harish
Harish, marque 'syscalls 'madvice()' y 'mlock()'. Pueden afectar el número de fallas de página. Y para una copia de archivo rápida, compruebe syscall 'sendfile()'. – osgx