mmap()을 사용하여 cp (파일 복사) 명령을 구현 중입니다. MAP_PRIVATE (내가 읽고 싶을 때) 모드와 대상 파일을 MAP_SHARED 모드로 매핑했습니다 (대상 파일의 변경된 내용을 되돌릴 필요가 있기 때문에).mmap()에 대한 복사시 쓰기 및 0 채우기 비활성화 방법
2 개의 이유로 인해 발생하는 사소한 페이지 오류로 인해 성능이 저하되는 것을 관찰했습니다. 1) 소스 파일에 대해 mmap (MAP_PRIVATE)을 호출하는 동안 요청시 0으로 채 웁니다. 2) 대상 파일에 대해 mmap (MAP_SHARED)을 호출하는 동안 쓰기를 복사합니다.
Zero-fill-on-demand 및 Copy-On-Write를 비활성화하는 방법이 있습니까?
감사합니다, Harish
제로 채우기에 대한 성능 저하가있는 것을보고 놀랍습니다. 어떻게 측정합니까? COW를 비활성화하지 않으려는 경우, 가상 메모리가 작동하는 방식의 기본이며 성능이 향상됩니다. 'write (2)'를 사용하는 것이 복사본에 대해 더 효율적일 수 있다고 생각 했습니까? private 맵을 기입하는 버퍼로서 지정합니다. 'write (2)'는 새로운 파일을 확장하는 단계를 피한다. – cdarke
getrusage()로 부 페이지 오류를 측정하고 있는데 mmam() (읽기 mmap의 경우 약 25000 (MAP_PRIVATE) 및 쓰기 mmap (MAP_SHARED)의 경우)과 함께 1GB의 파일을 복사하는 약 50000 부 페이지 오류가 있음을 보여줍니다. 예, write (2)가 복사를 위해 mmap()보다 더 효율적인지 확인했지만, Zero-fill-on-demand와 Copy-on-write를 사용하지 않으면 mmap()이 효율적일 수 있다고 생각합니다. – Harish
Harish,'madvice()'와'mlock()'syscalls를 확인하십시오. 페이지 폴트 수에 영향을 미칠 수 있습니다. 그리고 빠른 파일 복사를 위해서 syscall'sendfile()'을 확인하십시오. – osgx