Tôi đang thực hiện lệnh cp (tệp sao chép) bằng cách sử dụng mmap(). Vì vậy, tôi đã ánh xạ tệp nguồn ở chế độ MAP_PRIVATE (Vì tôi chỉ muốn đọc) và tệp đích ở chế độ MAP_SHARED (Vì tôi phải ghi lại nội dung đã thay đổi của tệp đích).Làm thế nào để Vô hiệu hóa Sao chép-ghi-ghi và không điền theo yêu cầu cho mmap()
Trong khi thực hiện việc này, tôi đã quan sát hình phạt hiệu suất do nhiều lỗi trang nhỏ xảy ra do 2 lý do. 1) Không điền theo yêu cầu trong khi gọi mmap (MAP_PRIVATE) cho tệp nguồn. 2) Sao chép khi viết trong khi gọi mmap (MAP_SHARED) cho tệp đích.
Có cách nào để tắt Zero-fill-on-demand và Copy-on-write không?
Cảm ơn, Harish
Tôi ngạc nhiên khi bạn thấy một hình phạt về hiệu suất cho số không điền, bạn đo lường nó như thế nào? Bạn không muốn vô hiệu hóa COW, nó là nền tảng cho cách thức hoạt động của bộ nhớ ảo và cải thiện hiệu suất. Bạn có nghĩ rằng việc sử dụng 'write (2)' có thể hiệu quả hơn cho bản sao không? Chỉ định bản đồ riêng tư làm bộ đệm để ghi. Nó cũng tránh được bước mở rộng tệp mới, vì 'write (2)' sẽ làm điều đó cho bạn. – cdarke
Tôi đang đo lỗi trang nhỏ bởi getrusage() Nó cho thấy có gần 50000 lỗi trang nhỏ để sao chép 1gb tệp với mmam() (gần 25000 cho mmap đọc (MAP_PRIVATE) và tương tự cho viết mmap (MAP_SHARED)). Có, tôi đã kiểm tra viết (2) hiệu quả hơn mmap() để sao chép nhưng tôi nghĩ mmap() có thể hiệu quả nếu chúng tôi vô hiệu hóa Zero-fill-on-demand và Copy-on-write. – Harish
Harish, kiểm tra 'madvice()' và 'mlock()' syscalls. Chúng có thể ảnh hưởng đến số lỗi trang. Và để sao chép tập tin nhanh, hãy kiểm tra syscall 'sendfile()'. – osgx