Re: Streaming I/O, vectored I/O (WIP)
Nazir Bilal Yavuz <byavuz81@gmail.com>
From: Nazir Bilal Yavuz <byavuz81@gmail.com>
To: Thomas Munro <thomas.munro@gmail.com>
Cc: Heikki Linnakangas <hlinnaka@iki.fi>, Dilip Kumar <dilipbalaut@gmail.com>, Robert Haas <robertmhaas@gmail.com>,
pgsql-hackers <pgsql-hackers@postgresql.org>, Andres Freund <andres@anarazel.de>,
Melanie Plageman <melanieplageman@gmail.com>
Date: 2024-04-07T21:30:18Z
Lists: pgsql-hackers
Attachments
- 0001-Refactor-PinBufferForBlock-to-remove-if-checks-about.patch (text/x-patch) patch 0001
- 0002-Add-a-way-to-create-read-stream-object-by-using-SMgr.patch (text/x-patch) patch 0002
Hi, On Mon, 8 Apr 2024 at 00:01, Nazir Bilal Yavuz <byavuz81@gmail.com> wrote: > > Hi, > > On Sun, 7 Apr 2024 at 20:33, Nazir Bilal Yavuz <byavuz81@gmail.com> wrote: > > > > Hi, > > > > On Tue, 2 Apr 2024 at 11:40, Thomas Munro <thomas.munro@gmail.com> wrote: > > > > > > I had been planning to commit v14 this morning but got cold feet with > > > the BMR-based interface. Heikki didn't like it much, and in the end, > > > neither did I. I have now removed it, and it seems much better. No > > > other significant changes, just parameter types and inlining details. > > > For example: > > > > > > * read_stream_begin_relation() now takes a Relation, likes its name says > > > * StartReadBuffers()'s operation takes smgr and optional rel > > > * ReadBuffer_common() takes smgr and optional rel > > > > Read stream objects can be created only using Relations now. There > > could be read stream users which do not have a Relation but > > SMgrRelations. So, I created another constructor for the read streams > > which use SMgrRelations instead of Relations. Related patch is > > attached. > > After sending this, I realized that I forgot to add persistence value > to the new constructor. While working on it I also realized that > current code sets persistence in PinBufferForBlock() function and this > function is called for each block, which can be costly. So, I moved > setting persistence to the out of PinBufferForBlock() function. > > Setting persistence outside of the PinBufferForBlock() function (0001) > and creating the new constructor that uses SMgrRelations (0002) are > attached. Melanie noticed there was a 'sgmr -> smgr' typo in 0002. Fixed in attached. -- Regards, Nazir Bilal Yavuz Microsoft
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