On Wed, Nov 2, 2022 at 2:33 AM Justin Pryzby <pryzby@telsasoft.com> wrote:
> On Tue, Nov 01, 2022 at 08:36:18PM +1300, Thomas Munro wrote:
> > io_data_direct = whether to use O_DIRECT for main data files
> > io_wal_direct = ... for WAL
> > io_wal_init_direct = ... for WAL-file initialisation
>
> You added 3 booleans, but I wonder if it's better to add a string GUC
> which is parsed for comma separated strings. (By "better", I mean
> reducing the number of new GUCs - which is less important for developer
> GUCs anyway.)
Interesting idea. So "direct_io = data, wal, wal_init", or maybe that
should be spelled io_direct. ("Direct I/O" is a common term of art,
but we also have some more io_XXX GUCs in later patches, so it's hard
to choose...)
> DIO is slower, but not so much that it can't run under CI. I suggest to
> add an 099 commit to enable the feature during development.
Good idea, will do.
> Note that this fails under linux with fsanitize=align:
> ../src/backend/storage/file/buffile.c:117:17: runtime error: member access within misaligned address 0x561a4a8e40f8
fortype 'struct BufFile', which requires 4096 byte alignment
Oh, so BufFile is palloc'd and contains one of these. BufFile is not
even using direct I/O, but by these rules it would need to be
palloc_io_align'd. I will think about what to do about that...