From: | Andrey Borodin <x4mmm(at)yandex-team(dot)ru> |
---|---|
To: | Nathan Bossart <nathandbossart(at)gmail(dot)com> |
Cc: | Andres Freund <andres(at)anarazel(dot)de>, Heikki Linnakangas <hlinnaka(at)iki(dot)fi>, Mats Kindahl <mats(at)timescale(dot)com>, Tom Lane <tgl(at)sss(dot)pgh(dot)pa(dot)us>, pgsql-hackers mailing list <pgsql-hackers(at)lists(dot)postgresql(dot)org> |
Subject: | Re: glibc qsort() vulnerability |
Date: | 2024-02-09 19:02:08 |
Message-ID: | 3D186C70-4BD3-4C2D-A915-981697F414CE@yandex-team.ru |
Views: | Raw Message | Whole Thread | Download mbox | Resend email |
Thread: | |
Lists: | pgsql-hackers |
> On 9 Feb 2024, at 21:32, Nathan Bossart <nathandbossart(at)gmail(dot)com> wrote:
> a lot
> of current use-cases require inspecting specific fields of structs
Yes, I'm proposing to pass to sorting routine not a comparator, but value extractor. And then rely on operators <,>,==.
In a pseudocode: instead of sort(array, (a,b)->a.field-b.field) use sort(array, x->x.field). And rely on "field" being comparable.
> If that can be made simple and elegant and
> demonstrates substantial improvements
I'll try to produce a PoC and measure it with Andres' intarray test.
> On 9 Feb 2024, at 23:40, Andres Freund <andres(at)anarazel(dot)de> wrote:
>
> We have some infrastructure for that actually, see sort_template.h. But
> perhaps we should define a static inline of the generic pg_qsort() even. OTOH,
> plenty places that'll just end up to a pointless amount of code emitted to
> sort ~5 elements on average.
I think there might be another benefit. It's easier to think about values order than function comparator that returns -1,0,+1...
>> I bet “call" is more expensive than “if".
>
> Not really in this case. The call is perfectly predictable - a single qsort()
> will use the same callback for every comparison, whereas the if is perfectly
> *unpredictable*. A branch mispredict is far more expensive than a correctly
> predicted function call.
Oh, make sense... I did not understand that. But does cpu predicts what instruction to fetch even after a call instruction? These cpus are really neat things... so, probably, yes, it does.
Best regards, Andrey Borodin.
From | Date | Subject | |
---|---|---|---|
Next Message | Andres Freund | 2024-02-09 19:03:46 | Re: GUC-ify walsender MAX_SEND_SIZE constant |
Previous Message | Andres Freund | 2024-02-09 18:59:15 | Re: failure in 019_replslot_limit |