Re: Streaming I/O, vectored I/O (WIP)
Heikki Linnakangas <hlinnaka@iki.fi>
From: Heikki Linnakangas <hlinnaka@iki.fi>
To: Thomas Munro <thomas.munro@gmail.com>
Cc: pgsql-hackers <pgsql-hackers@postgresql.org>,
Andres Freund <andres@anarazel.de>,
Melanie Plageman <melanieplageman@gmail.com>
Date: 2023-11-28T12:44:25Z
Lists: pgsql-hackers
On 28/11/2023 14:17, Thomas Munro wrote: > On Thu, Sep 28, 2023 at 7:33 AM Heikki Linnakangas <hlinnaka@iki.fi> wrote: >>> + /* Avoid a slightly more expensive kernel call if there is no benefit. */ >>> + if (iovcnt == 1) >>> + returnCode = pg_pread(vfdP->fd, >>> + iov[0].iov_base, >>> + iov[0].iov_len, >>> + offset); >>> + else >>> + returnCode = pg_preadv(vfdP->fd, iov, iovcnt, offset); >> >> How about pushing down this optimization to pg_preadv() itself? >> pg_readv() is currently just a macro if the system provides preadv(), >> but it could be a "static inline" that does the above dance. I think >> that optimization is platform-dependent anyway, pread() might not be any >> faster on some OSs. In particular, if the system doesn't provide >> preadv() and we use the implementation in src/port/preadv.c, it's the >> same kernel call anyway. > > Done. I like it, I just feel a bit bad about moving the p*v() > replacement functions around a couple of times already! I figured it > might as well be static inline even if we use the fallback (= Solaris > and Windows). LGTM. I think this 0001 patch is ready for commit, independently of the rest of the patches. In v2-0002-Provide-vectored-variants-of-FileRead-and-FileWri-1.patch, fd.h: > +/* Filename components */ > +#define PG_TEMP_FILES_DIR "pgsql_tmp" > +#define PG_TEMP_FILE_PREFIX "pgsql_tmp" > + These seem out of place, we already have them in common/file_utils.h. Other than that, v2-0002-Provide-vectored-variants-of-FileRead-and-FileWri-1.patch and v2-0003-Provide-vectored-variants-of-smgrread-and-smgrwri.patch look good to me. -- Heikki Linnakangas Neon (https://neon.tech)
Commits
-
Fix typos and incorrect type in read_stream.c
- 2ea4b2927722 17.0 landed
-
Use streaming I/O in pg_prewarm.
- 3a352df05e65 17.0 landed
-
Provide API for streaming relation data.
- b5a9b18cd0bc 17.0 landed
-
Provide vectored variant of ReadBuffer().
- 210622c60e1a 17.0 landed
-
Provide vectored variants of smgrread() and smgrwrite().
- 4908c5872059 17.0 landed
-
Provide multi-block smgrprefetch().
- b485ad7f07c8 17.0 landed
-
Provide vectored variants of FileRead() and FileWrite().
- 871fe4917e1e 17.0 landed
-
Provide helper for retrying partial vectored I/O.
- 0c6be59f5e34 17.0 landed
-
Optimize pg_readv/pg_pwritev single vector case.
- 15c9ac362993 17.0 landed
-
bufmgr: Support multiple in-progress IOs by using resowner
- 12f3867f5534 16.0 cited