RFR(s): 8205580: PPC64: RTM: Don't retry lock on abort if abort was intentional
Gustavo Romero
gromero at linux.vnet.ibm.com
Mon Jun 25 08:24:13 UTC 2018
Hi,
Could the following change be reviewed please?
bug : https://bugs.openjdk.java.net/browse/JDK-8205580
webrev: http://cr.openjdk.java.net/~gromero/8205580/v1/
It changes the behavior of rtm_retry_lock_on_abort() by avoiding retry if abort
was a deliberate abort, i.e. caused by a 'tabort r0' instruction.
On Intel bit 1 in abort_status_Reg (which communicates the abort status) is
always clear when a 'xabort 0' instruction is executed in order to inform that a
transactional retry /can not/ succeed on retry. So rtm_retry_lock_on_abort() on
Intel, on finding bit 1 clear in abort_status_Reg, skips the retry (don't
retry).
Currently on Power rtm_retry_lock_on_abort() is just checking the persistent bit
(if set => skip) which /is not set/ by 'tabort r0'. Hence
rtm_retry_lock_on_abort() does retry to lock on an intentional abort caused by
'tabort'. It leads, for instance when -XX:RTMRetryCount=1, to the following
discrepancy between Intel and Power regarding the number of retries/aborts:
[Power]
# rtm locks total (estimated): 3
# rtm lock aborts : 3
# rtm lock aborts 0: 3
# rtm lock aborts 1: 3
# rtm lock aborts 2: 0
# rtm lock aborts 3: 0
# rtm lock aborts 4: 0
# rtm lock aborts 5: 0
[Intel]
# rtm locks total (estimated): 2
# rtm lock aborts : 2
# rtm lock aborts 0: 2
# rtm lock aborts 1: 2
# rtm lock aborts 2: 0
# rtm lock aborts 3: 0
# rtm lock aborts 4: 0
# rtm lock aborts 5: 0
So for -XX:RTMRetryCount=X:
on Power the number of aborts is: X*2+1 [1 first failure + 1 rtm_retry_lock_on_abort() + 1 rtm_retry_lock_on_busy()];
on Intel the number of aborts is: X+1 [1 first failure + 1 rtm_retry_lock_on_busy()]
This change fixes that discrepancy by using bit "Abort" in TEXASR register
(abort_status_Reg) that tells if a transaction was aborted due to a 'tabort'
instruction and skip the retry if such a bit is set.
It fixes the following tests:
+Passed: compiler/rtm/locking/TestRTMRetryCount.java
+Passed: compiler/rtm/locking/TestRTMAbortThreshold.java
Thank you and best regards,
Gustavo
More information about the ppc-aix-port-dev
mailing list