Re: micro-optimizing json.c

Поиск
Список
Период
Сортировка
От David Rowley
Тема Re: micro-optimizing json.c
Дата
Msg-id CAApHDvpjoRMrafos6N-Nkja+XSVE_mts7KY85=oy9kwZz-92=g@mail.gmail.com
обсуждение исходный текст
Ответ на micro-optimizing json.c  (Nathan Bossart <nathandbossart@gmail.com>)
Ответы Re: micro-optimizing json.c  (Tom Lane <tgl@sss.pgh.pa.us>)
Re: micro-optimizing json.c  (Nathan Bossart <nathandbossart@gmail.com>)
Список pgsql-hackers
On Fri, 8 Dec 2023 at 12:13, Nathan Bossart <nathandbossart@gmail.com> wrote:
> Here's a patch that removes a couple of strlen() calls that showed up
> prominently in perf for a COPY TO (FORMAT json) on 110M integers.  On my
> laptop, I see a 20% speedup from ~23.6s to ~18.9s for this test.

+ seplen = use_line_feeds ? sizeof(",\n ") - 1 : sizeof(",") - 1;

Most modern compilers will be fine with just:

seplen = strlen(sep);

I had to go back to clang 3.4.1 and GCC 4.1.2 to see the strlen() call
with that code [1].

With:

  if (needsep)
- appendStringInfoString(result, sep);
+ appendBinaryStringInfo(result, sep, seplen);

I might be neater to get rid of the if condition and have:

sep = use_line_feeds ? ",\n " : ",";
seplen = strlen(sep);
slen = 0;

...
for (int i = 0; i < tupdesc->natts; i++)
{
    ...
    appendBinaryStringInfo(result, sep, slen);
    slen = seplen;
    ...
}

David

[1] https://godbolt.org/z/8dq8a88bP



В списке pgsql-hackers по дате отправления:

Предыдущее
От: shveta malik
Дата:
Сообщение: Re: Synchronizing slots from primary to standby
Следующее
От: Thomas Munro
Дата:
Сообщение: Re: UBSan pointer overflow in xlogreader.c