On Thu, May 01, 2025 at 04:08:06PM -0400, Tom Lane wrote:
> Nathan Bossart <nathandboss...@gmail.com> writes:
>> ... commit 3d0b4b1 recently added a non-locking
>> initial test in AArch64's TAS_SPIN, so I wonder if the ISB is still
>> appropriate.  It'd be interesting to see the performance difference of
>> removing the ISB with and without commit 3d0b4b1 applied.
> 
> Oh!  That's an excellent point.  The OP didn't mention if their tests
> were done before or after 3d0b4b1, but that might well matter.
> 
> I still think pgbench is a very blunt tool for this type of testing,
> though.  I recommend resurrecting the test_shm_mq-based hack discussed
> in the prior thread and seeing what that shows.

Well, I have interesting results.  This is all on a c8g.24xlarge (96 cores,
Neoverse-V2, Armv9.0-a).

For the first test_shm_mq test, I ran the following:

        SELECT test_shm_mq_pipelined(16384, 'xyzzy', 10000000, 1);
        SELECT test_shm_mq_pipelined(16384, 'xyzzy', 10000000, 2);
        SELECT test_shm_mq_pipelined(16384, 'xyzzy', 10000000, 4);
        ...

This gave me the following results (values are in seconds):

                w/o 3d0b4b1     w/ 3d0b4b1
                ISB     no ISB  ISB     no ISB
        1       1.4     1.6     1.5     1.6
        2       2.1     2.0     2.1     2.1
        4       3.2     3.5     3.3     3.5
        8       7.4     8.1     7.2     8.4
        16      18.0    35.9    22.7    23.4
        32      35.7    85.6    53.7    49.5
        64      85.1    ?       147.6   100.1

For the second test_shm_mq test, I ran at higher concurrency, so I had to
reduce the loop counts:

        SELECT test_shm_mq_pipelined(16384, 'xyzzy', 100000, 32);
        ...

That gave me the following:

                w/o 3d0b4b1     w/ 3d0b4b1
                ISB     no ISB  ISB     no ISB
        32      0.4     0.8     0.5     0.6
        64      2.0     4.8     1.3     1.1
        128     6.1     29.3    7.5     2.1
        256     43.0    66.4    24.4    4.5

Finally, I ran the pgbench select-only test with
pg_stat_statements.track_planning enabled (values are in thousands of
transactions per second):

        w/o 3d0b4b1     w/ 3d0b4b1
        ISB     no ISB  ISB     no ISB
        71.4    67.4    538.2   891.2

So...

* The ISB does seem to have a positive effect without commit 3d0b4b1
  applied.

* With commit 3d0b4b1 applied, removing the ISB seems to have a positive
  effect at high concurrencies.  This is especially pronounced in the
  pgbench test.

* With commit 3d0b4b1 applied, removing the ISB doesn't change much at
  lower concurrencies, and there might even be a small regression.

* At mostly lower concurrencies, commit 3d0b4b1 actually seems to regress
  some test_shm_mq tests.  Removing the ISB instruction appears to help in
  some cases, but not all.

-- 
nathan


Reply via email to