Hi, all. There was a very strange phenomenon I couldn't explain. So I was wondering if you can help me.
I was trying to replace the linked list with a skip list in serializable
transaction object for faster conflict tracking. But the performance is bad.
So I used the instruction "rdtsc" to compare the speed of my skip list and the
original linked list. The skip list was about 1.5x faster.
The interesting thing is that if I added the instruction "rdstc" at the end of
the function "RWConflictExists",
the performance of the whole system was increased by at most 3 times!
Here is the result.
| benchmarks | without rdtsc | with rdtsc |
| simpe read/write | 4.91 | 14.16 |
| ssibench | 9.72 | 10.24 |
| tpcb | 26.45 | 26.38 |
( The simple read/write benchmark has the most number of conflicts. )
The patch is attached. All the difference of the two columns is with/without a
simple line of code:
__asm__ __volatile__ ("rdtsc");
But I don't know why this instruction will influence the performance so much!
BTW, after adding the "rdtsc" instruction, the performance is better than the
original version about 10% at most.
That means, the skip list can work!
Looking forward to your advices.
--
Sincerely
Mengxing Liu
skip-list-for-conflict-tracking.patch
Description: Binary data
-- Sent via pgsql-hackers mailing list ([email protected]) To make changes to your subscription: http://www.postgresql.org/mailpref/pgsql-hackers
