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 (pgsql-hackers@postgresql.org) To make changes to your subscription: http://www.postgresql.org/mailpref/pgsql-hackers