IP Library Granted Patent US 7,904,668
Granted Patent B2
US 7,904,668 · App. 11/967,395 · Granted Mar 8, 2011

Optimistic semi-static transactional memory implementations

Assignee: Oracle America, Inc.
View Patent ↗
Loading inventors, assignments & file history…
Monitor This Case
Get email alerts when status or documents change.
Order Certified Copies
Most orders are placed with the USPTO same day — all within 24 business hours.
Order via The Patent Place →
Pre-filled with this patent's details
Quick Facts
Patent No.
US 7,904,668
App. No.
11/967,395
Granted
Mar 8, 2011
Kind
B2
Abstract

A lock-based software transactional memory (STM) implementation may determine whether a transaction's write-set is static (e.g., known in advance not to change). If so, and if the read-set is not static, the STM implementation may execute, or attempt to execute, the transaction as a semi-static transaction. A semi-static transaction may involve obtaining, possibly after incrementing, a reference version value against which to subsequently validate that memory locations, such as read-set locations, have not been modified concurrently with the semi-static transaction. The read-set locations may be validated while locks are held for the locations to be written (e.g., the write-set locations). After committing the modifications to the write-set locations and as part of releasing the locks, versioned write-locks associated with the write-set locations may be updated to reflect the previously obtained, or newly incremented, reference version value.

Claims (65)

1. A computer-implemented method, comprising:

determining that:

at least one of a plurality of shared memory locations to be read during processing a software transaction is not known in advance of said processing; and

each one of the plurality of shared memory locations to be written during said processing the software transaction is known in advance of said processing;

wherein each of the plurality of shared memory locations is associated with respective version value that is updated, based on a value of a version clock shared by the plurality of shared memory locations, when the shared memory locations is modified;

in response to said determining:

obtaining a current value of the version clock; and

locking each one of the plurality of shared memory locations that is to be written during said processing the software transaction; and

in response to said obtaining and said locking:

performing said processing the transaction to discover which of the plurality of shared memory locations is to be read during said processing the software transaction;

verifying that each one of the plurality of shared memory locations to be read during said processing the software transactions has not been modified since said obtaining; and

in response to said verifying, attempting to commit the software transaction, wherein said attempting comprises updating both:

the values stored in each of the plurality of shared memory locations to be written during said processing the software transaction; and

the respective version value associated with the shared memory location storing the updated value.

2. The method of claim 1 , wherein said verifying comprises determining that, for each of the plurality of shared memory locations to be read during said processing the software transaction, a corresponding current version value associated with the shared memory location is not greater than the value of the version clock that was current during said obtaining the current value of the version clock.

3. The method of claim 1 , further comprising verifying, prior to said attempting to commit the software transaction, that each one of the plurality of shared memory locations to be read during said processing the software transaction is not locked by another transaction execution.

4. The method of claim 1 , further comprising verifying that each of the plurality of shared memory locations to be read during said processing the software transaction is not also one of the plurality of shared memory locations to be written during said processing the software transaction.

5. The method of claim 1 , further comprising:

in response to determining that said attempting to commit the software transaction failed:

obtaining a new current value of the version clock; and

verifying that each one of the plurality of shared memory locations to be read during said processing the software transaction has not been modified since said obtaining the new current value of the version clock.

6. The method of claim 1 , wherein said determining that each one of the plurality of memory locations to be written during said processing the software transaction is known in advance of said processing the software transaction is based on a previous failed attempt to execute the software transaction.

7. The method of claim 6 , wherein said locking each one of the plurality of shared memory locations that is to be written during said processing the software transaction comprises reusing locks acquired during the previous failed attempt to execute the software transaction.

8. The method of claim 1 , wherein said obtaining the current value of the version clock comprises incrementing a value of the version clock and taking the incremented value of the version clock as the current of the version clock.

9. The method of claim 1 , wherein said updating the respective version value associated with the shared memory location storing the updated value is performed as part of releasing locks acquired during said locking.

10. The method of claim 9 , wherein said updating the respective version value associated with the shared memory location storing the updated value and said releasing the locks acquired during said locking are both performed using a single store operation to corresponding different bits of a single memory location.

11. A device, comprising:

a processor; and

a memory coupled to the processor, wherein the memory comprises program instructions executable by the processor to:

determine that:

at least one of a plurality of shared memory locations to be read during processing a software transaction is not known in advance of said processing; and

each one of the plurality of shared memory locations to be written during said processing the software transaction is known in advance of said processing;

wherein each of the plurality of shared memory locations is associated with a respective version value that is updated, based on a value of a version clock shared by the plurality of shared memory locations, when the shared memory location is modified;

in response to said determining:

obtain a current value of the version clock; and

lock each one of the plurality of shared memory locations that is to be written during said processing the software transaction; and

in response to said obtaining and said locking:

perform said processing the transaction to discover which of the plurality of shared memory locations is to be read during said processing the software transaction;

verifying that each one of the plurality of shared memory locations to be read during said processing the software transaction has not been modified since said obtaining; and

in response to said verifying attempt to commit the software transaction, wherein said attempting comprises updating both:

the values stored in each of the plurality of shared memory locations to be written during said processing software transaction; and

the respective version value associated with the shared memory location storing the updated value.

12. The device of claim 11 , wherein in said verifying comprises determining that, for each of the plurality of shared memory locations to be read during said processing the software transaction, a corresponding current version value associated with the shared memory location is not greater than the value of the version clock that was current during said obtaining the current value of the version clock.

13. The device of claim 11 , wherein the program instructions are further executable to:

in response to determining that said attempting to commit the software transaction failed:

obtain a new current value of the version clock; and

verify that each one of the plurality of shared memory locations to be read during said processing the software transaction has not been modified since said obtaining the new current value of the version clock.

14. The device of claim 11 , wherein said determining that each one of the plurality of memory locations to be written during said processing the software transaction is known in advance of said processing the software transaction is based on a previous failed attempt to execute the software transaction.

15. The device of claim 11 , wherein said locking each one of the plurality of shared memory locations that is to be written during said processing the software transaction comprises reusing locks acquired during the previous failed attempt to execute the software transaction.

16. The device of claim 11 , wherein said obtaining the current value of the version clock comprises incrementing a value of the version clock and taking the incremented value of the version clock as the current value of the version clock.

17. The device of claim 1 l, wherein said updating the respective version value associated with the shared memory location storing the updated value is performed as part of releasing locks acquired during said locking.

18. A computer-readable storage medium, comprising program instructions computer-executable to implement:

determining that:

at least one of a plurality of shared memory location to be read during processing a software transaction is not known in advance of said processing: and

each one of the plurality of shared memory locations to be written during said processing the software transaction is known in advance of said processing;

wherein each of the plurality of shared memory locations is associated with a respective version value that is updated, based on a value of a version clock shared by the plurality of shared memory locations, when the shared memory location is modified;

in response to said determining:

obtaining a current value of the version clock; and

locking each of the plurality of shared memory locations that is to be written during said processing the software transaction; and

in response to said obtaining and said locking:

performing said processing the transaction to discover which of the plurality of shared memory locations is to be read during said processing the software transaction;

verifying that each one of the plurality of shared memory locations to be read during said processing the software transaction has not been modified since said obtaining; and

in response to said verifying, attempting to commit the software transaction, wherein said attempting comprises updating both:

the value stored in each of the plurality of shared memory locations to be written during said processing the software transaction; and

the respective version value associated with the shared memory location storing the updated value.

Assignments (2)
MERGER AND CHANGE OF NAME Recorded Dec 16, 2015
From: ORACLE USA, INC.; SUN MICROSYSTEMS, INC.; ORACLE AMERICA, INC.
To: ORACLE AMERICA, INC.
Reel/Frame 037311/0056 →
ASSIGNMENT OF ASSIGNOR'S INTEREST Recorded Dec 31, 2007
From: SHAVIT, NIR N.; DICE, DAVID
To: SUN MICROSYSTEMS, INC.
Reel/Frame 020304/0333 →
Continuity (1)
Related Publication 20090172327A1 · Jul 2, 2009