Re: [HACKERS] Parallel tuplesort (for parallel B-Tree index creation)
От | Peter Geoghegan |
---|---|
Тема | Re: [HACKERS] Parallel tuplesort (for parallel B-Tree index creation) |
Дата | |
Msg-id | CAH2-WznUFEW8sWEYVD40vFRF4Px6FEZSf7iSJuQh5NY_8AN6Yg@mail.gmail.com обсуждение исходный текст |
Ответ на | Re: [HACKERS] Parallel tuplesort (for parallel B-Tree index creation) (Peter Geoghegan <pg@bowt.ie>) |
Ответы |
Re: [HACKERS] Parallel tuplesort (for parallel B-Tree index creation)
|
Список | pgsql-hackers |
On Fri, Feb 2, 2018 at 4:31 PM, Peter Geoghegan <pg@bowt.ie> wrote: > On Fri, Feb 2, 2018 at 1:58 PM, Andres Freund <andres@anarazel.de> wrote: >> Not saying you're wrong, but you should include a comment on why this is >> a benign warning. Presumably it's some padding memory somewhere, but >> it's not obvious from the above bleat. > > Sure. This looks slightly more complicated than first anticipated, but > I'll keep everyone posted. I couldn't make up my mind if it was best to prevent the uninitialized write(), or to instead just add a suppression. I eventually decided upon the suppression -- see attached patch. My proposed commit message has a full explanation of the Valgrind issue, which I won't repeat here. Go read it before reading the rest of this e-mail. It might seem like my suppression is overly broad, or not broad enough, since it essentially targets LogicalTapeFreeze(). I don't think it is, though, because this can occur in two places within LogicalTapeFreeze() -- it can occur in the place we actually saw the issue on lousyjack, from the ltsReadBlock() call within LogicalTapeFreeze(), as well as a second place -- when BufFileExportShared() is called. I found that you have to tweak code to prevent it happening in the first place before you'll see it happen in the second place. I see no point in actually playing whack-a-mole for a totally benign issue like this, though, which made me finally decide upon the suppression approach. Bear in mind that a third way of fixing this would be to allocate logtape.c buffers using palloc0() rather than palloc() (though I don't like that idea at all). For serial external sorts, the logtape.c buffers are guaranteed to have been written to/initialized at least once as part of spilling a sort to disk. Parallel external sorts don't quite guarantee that, which is why we run into this Valgrind issue. -- Peter Geoghegan
Вложения
В списке pgsql-hackers по дате отправления: