On Jan 28, 2021, at 3:31 PM, Michael Paquier <mich...@paquier.xyz<mailto:mich...@paquier.xyz>> wrote:
On Wed, Jan 27, 2021 at 09:18:48AM +0000, Paul Guo wrote: Second one is use copy_file_range() for the local rewind case to replace read()+write(). This introduces copy_file_range() check and HAVE_COPY_FILE_RANGE so other code could use copy_file_range() if needed. copy_file_range() was introduced In high-version Linux Kernel, in low-version Linux or other Unix-like OS mmap() might be better than read()+write() but copy_file_range() is more interesting given that it could skip the data copying in some file systems - this could benefit more on Linux fs on network-based block storage. Have you done some measurements? I did not test pg_rewind but for patch 2, I tested copy_fiile_range() vs read()+write() on XFS in Ubuntu 20.04.1 when working on the patches, Here is the test time of 1G file (fully populated with random data) copy. The test is a simple C program. copy_file_range() loop (actually it finished after one call) + fsync() 0m0.048s For read()+write() loop with read/write buffer size 32K + fsync() 0m5.004s For patch 1, it skips syncing less files so it surely benefits the performance.