Re: Use pg_pwritev_with_retry() instead of write() in dir_open_for_write() to avoid partial writes?
Michael Paquier <michael@paquier.xyz>
From: Michael Paquier <michael@paquier.xyz>
To: Andres Freund <andres@anarazel.de>
Cc: Bharath Rupireddy <bharath.rupireddyforpostgres@gmail.com>, Alvaro Herrera <alvherre@alvh.no-ip.org>, Nathan Bossart <nathandbossart@gmail.com>, Thomas Munro <thomas.munro@gmail.com>, PostgreSQL Hackers <pgsql-hackers@lists.postgresql.org>
Date: 2023-02-20T05:33:22Z
Lists: pgsql-hackers
On Fri, Feb 17, 2023 at 09:31:14AM -0800, Andres Freund wrote: > On 2023-02-17 16:19:46 +0900, Michael Paquier wrote: >> But it looks like I misunderstood what this quote meant compared to >> what v3 does. It is true that v3 sets iov_len and iov_base more than >> needed when writing sizes larger than BLCKSZ. > > I don't think it does for writes larger than BLCKSZ, it just does more for > writes larger than PG_IKOV_MAX * BLCKSZ. But in those cases CPU time is going > to be spent elsewhere. Yep. >> Seems like you think that it is not really going to matter much to track >> which iovecs have been already initialized during the first loop on >> pg_pwritev_with_retry() to keep the code shorter? > > Yes. I'd bet that, in the unlikely case you're going to see any difference at > all, unconditionally initializing is going to win. > > Right now we memset() 8KB, and iterate over 32 IOVs, unconditionally, on every > call. Even if we could do some further optimizations of what I did in the > patch, you can initialize needed IOVs repeatedly a *lot* of times, before it > shows up... > > I'm inclined to go with my version, with the argument order swapped to > Bharath's order. Okay. That's fine by me. -- Michael
Commits
-
Revise pg_pwrite_zeros()
- ce340e530d1f 16.0 landed
-
Use pg_pwrite_zeros() in walmethods.c
- 28cc2976a9cf 16.0 landed
-
Introduce pg_pwrite_zeros() in fileutils.c
- 3bdbdf5d06f2 16.0 landed
-
Move pg_pwritev_with_retry() to src/common/file_utils.c
- 4ab8c81bd90a 16.0 landed
-
Restore pg_pread and friends.
- b6d8a60aba32 16.0 landed
-
Remove dead pread and pwrite replacement code.
- cf112c122060 16.0 cited