# Patent

## Title
TLB-walk controlled abort policy for hardware transactional memory

## Abstract

A system and method are disclosed for increasing large region transaction throughput by making informed determinations whether to abort a thread from a first core or a thread from a second core when a conflict is detected between the threads. Such a system and method allow resolution of conflicts between a first thread and a second thread. In certain embodiments, the system and method allow a requester to detect a conflict under specific circumstances and make an intelligent decision whether to abort the first thread, enter a wait state to give the first thread an opportunity to complete execution or, if possible, abort the second thread.

## Background
TECHNICAL FIELD
The disclosed embodiments relate generally to information processing systems. More specifically, the disclosed embodiments provide an improved system and method for protecting large regions within a hardware transactional memory without operating system support.
BACKGROUND
Virtual memory allows a processor to address a memory space that is larger than physical memory. The translation between physical memory and virtual memory is typically performed using page tables. Often several page table levels are employed, where each page table level helps in translating a part of the virtual address. For instructions that access memory, virtual addresses need to be translated to physical memory using the page tables. A Translation Lookaside Buffer (TLB) cache is common in processors to facilitate translations between the physical and virtual memory. TLBs are populated via different mechanisms, for example, for AMD64 type processor architecture, the processor employs a page-table walker that establishes required translations and fills the TLB.
If page tables change and a re-walk is desired, TLBs often need to be flushed to trigger a new page-table walk operation. This operation is usually desired when the operating system determines that the TLB entries should be filled again. The “walk” refers to the process of going through (i.e., walking) the page-table to establish a virtual to physical mapping. A page-table walker performs the page-table walk operation. The page-table walker sets ACCESSED/DIRTY bits depending on the access type (load/store) upon first access. Generally, the processor does not clear these bits. The operating system (OS) can use these bits to determine which memory pages have been accessed and how they have been accessed.
Shared-memory computer systems (e.g., computer systems that include multiple processors) allow multiple concurrent threads of execution to access shared memory locations. Unfortunately, writing correct multi-threaded programs is difficult due to the complexities of coordinating concurrent memory access. One approach to concurrency control between multiple threads of execution is transactional memory. In a transactional memory programming model, a programmer may designate a section of code (e.g., an execution path or a set of program instructions) as a “transaction,” which a transactional memory system should execute atomically with respect to other threads of execution. For example, if the transaction includes two memory store operations, then the transactional memory system ensures that all other threads may only observe either the cumulative effects of both memory operations or of neither, but not the effects of only one.
Various transactional memory systems have been proposed, including those implemented by software, by hardware, or by a combination thereof However, many traditional implementations are bound by various limitations. For example, hardware-based transactional memory (HTM) proposals sometimes impose limitations on the size of transactions supported (i.e., maximum number of speculative memory operations that can be executed before the transaction is committed). Often, this may be a product of limited hardware resources, such as the size of one or more speculative data buffers used to buffer speculative data during transactional execution.
One example of a transactional memory system is the Advanced Synchronization Facility (ASF) proposed by Advanced Micro Devices (AMD). The ASF allows user and system level code to modify a set of memory objects atomically without requiring expensive synchronization mechanisms. Unfortunately, in transactional memory systems such as the ASF, tracking large read sets requires large amounts of hardware resources.
Additionally, with transactional memory systems such as the ASF transactional memory system when a conflict occurs between a first thread and a second thread, almost always the first thread is aborted, according to ASF's requestor wins policy.
SUMMARY OF EMBODIMENTS
A system and method are disclosed for increasing transaction throughput by making informed determinations whether to abort a thread from a first core or a thread from a second core when a conflict is detected between the threads. Such a system and method allow resolution of conflicts between a first thread and a second thread. More specifically, in some embodiments, the system and method allow a requester to detect a conflict under specific circumstances and make an intelligent decision whether to abort the first thread, enter a wait state to give the first thread an opportunity to complete execution or, if possible, abort the second thread.
In some embodiments, the disclosure relates to an apparatus comprising a processor coupleable to a shared memory that is shared by one or more other processors, wherein the processor is configured to execute a section of code that includes a plurality of memory access operations to the shared memory and the processor comprising a large region protection module, the large region protection module configured to increase transaction throughput by making informed determinations whether to abort a thread from a first core or a thread from a second core when a conflict is detected between the threads.



BRIEF DESCRIPTION OF THE DRAWINGS
The disclosed embodiments may be better understood, and its numerous objects, features and advantages made apparent to those skilled in the art by referencing the accompanying drawings. The use of the same reference number throughout the several Figures designates a like or similar element.
FIG. 1 is a generalized block diagram showing components of a multi-processor computer system configured to implement an advanced synchronization facility, in accordance with some embodiments.
FIG. 2 is a block diagram showing a more detailed view of components comprising a processor, in accordance with some embodiments.
FIG. 3 is a general flow diagram showing a method for executing a transaction using an ASF, in accordance with some embodiments.
FIG. 4 is a general flow diagram showing a method for resolving conflicts between a first thread and a second thread, in accordance with some embodiments.
FIG. 5 is a generalized block diagram showing a computer system configured to implement various embodiments of an ASF.



DETAILED DESCRIPTION
Transactional memory systems may allow software threads in multi-threaded systems to access (read and/or write) a set of shared memory locations atomically with respect to other threads, without requiring the overhead and programming complexity associated with traditional synchronization mechanisms such as mutual-exclusion using locks. However, further techniques are necessary for increasing the efficiency of transactional memory systems.
According to some embodiments, various hardware mechanisms may be used to implement efficient transactional memory mechanisms, as described herein. In some embodiments, computationally inexpensive primitives (e.g., program instructions) are defined for instructing hardware to perform various synchronization functions, which may be used to synthesize higher-level synchronization mechanisms. The hardware mechanisms and/or program instructions may collectively be referred to as the Advanced Synchronization Facility (ASF).
In some embodiments, an existing processor architecture (e.g., x86) is augmented to implement ASF mechanisms. The remainder of this disclosure describes how the 64-bit x86 architecture AMD64 may be augmented with ASF mechanisms to implement transactional memory. However, these example embodiments are not intended to limit ASF mechanisms to this architecture alone and given the benefit of this disclosure, implementations of ASF mechanisms in other processor architectures will become evident to those skilled in the art.
FIG. 1 is a block diagram illustrating components of a multi-processor computer system configured to implement ASF, according to some embodiments. According to the illustrated embodiment, computer system 100 may include multiple processors, such as processors 110a and 110b. In some embodiments, processors 110 may comprise multiple physical or logical (e.g., SMT) cores and be coupled to each other and/or to shared memory 150 over interconnect 140. In some embodiments, different interconnects may be used, such as a shared system bus or a point-to-point network in various topographies (e.g., fully connected, torus, etc.).
According to the illustrated embodiment, each processor 110 may include one or more levels of memory caches 130. Levels of memory caches may be hierarchically arranged (e.g., L1 cache, L2 cache, L3 cache, etc.) and may be used to cache local copies of values stored in shared memory 150.
In some embodiments, memory caches 130 include cache coherence mechanisms 132. In some embodiments, cache-coherence mechanisms 132 implement a cache coherence communication protocol among the interconnected processors to ensure that the values contained in memory caches 130 of each processor 110 are coherent with values stored in shared memory 150 and/or in the memory caches 130 of other processors 110. Such protocols include the MESI (modified, exclusive, shared, invalid) cache coherence protocol and MOESI (modified, owned, exclusive, shared, invalid) cache coherence protocol. Cache coherence protocols may define a set of messages and rules by which processors may inform one another of modifications to shared data and thereby maintain cache coherence. For example, according to the MESI protocol, each block stored in a cache is marked as being in one of four states: modified, exclusive, shared, or invalid. A given protocol defines a set of messages and rules for sending and interpreting those messages, by which processors maintain the proper markings on each block. Depending on the state of a given cache block, a processor may be restricted from performing certain operations. For example, a processor may not execute program instructions that depend on a cache block that is marked as invalid. In some embodiments, cache coherence mechanisms are implemented in hardware, software, or a combination thereof Cache coherence messages may be may be communicated across interconnect 140 and may be broadcast or point-to-point.
The cache coherence mechanism 132 may further include HTM mechanisms 145. The HTM mechanisms 145 enable increasing transaction throughput by making informed determinations whether to abort a thread from a first core or a thread from a second core when a conflict is detected between the threads. Such a system and method allow resolution of conflicts between a first thread and a second thread. More specifically, in some embodiments, the HTM mechanisms 145 allow a requester to detect a conflict under specific circumstances and make an intelligent decision whether to abort the first thread, enter a wait state to allow the first thread an opportunity to complete execution or, if possible, abort the second thread.
FIG. 2 is a block diagram illustrating a more detailed view of components comprising a processor, such as processors 110, according to some embodiment. According to the illustrated embodiment of FIG. 2, processor 200 comprises register file 210, which may include various registers, each of which may be of any size (e.g., 16-bit, 32-bit, 64-bit, 128-bit, etc.). For example, register file 210 may include various known x86 registers, such as rSP register 212 (stack pointer), rIP register 214 (instruction pointer), rAX register 216 (accumulator register), and/or rFLAGS register 218 (flags register indicating processor state). In some embodiments, register file 210 may further comprise any number of general purpose registers 220 and/or floating point registers 222. In some embodiments, register file 210 includes one or more 128-bit registers, such as XMM registers 224. In some embodiments, register file 210 includes any number of other registers 226, which may be of various sizes.
According to the illustrated embodiment in FIG. 2, processor 200 includes memory caches 230 for storing local copies of values stored in shared memory 150 and includes cache-coherence mechanisms 232 for maintaining the consistency of those values across various copies dispersed within shared memory 150, the caches 230, and other caches. In some embodiments, processor 200 includes ASF mechanisms 240 for implementing transactional synchronization mechanisms, as described herein. In some embodiments, ASF mechanisms 240 include the data structures and/or logic to implement memory transactions, as described herein. In some embodiments, ASF mechanisms 240 include a locked line buffer 242, which may be used in case of an abort to roll back memory changes made by a partially executed transaction, as described below. In some embodiments, ASF mechanisms 240 include a nesting level register 244, which may hold a value indicating the depth to which the current transaction is nested in other transactions, as described below in more detail. In some embodiments ASF mechanisms 240 include a flag to indicate whether a transaction is active, such as transaction active flag 246. In some embodiments, ASF mechanisms 240 include a flag indicating a transactional mode, such as store-conditional mode flag 248, which may be set to indicate whether an executing transaction is executing in store-conditional mode or in another mode. In some embodiments, other flags and/or registers may be implemented in ASF mechanisms 240 in support of transactional execution.
According to the illustrated embodiment, ASF mechanisms 240 may include data structures and/or logic to implement a large region protection module 250 such as an HTM mechanism 145.
FIG. 3 is a general flow diagram illustrating a method for executing a transaction using ASF, according to some embodiments. According to the illustrated embodiment, ASF may allow software (e.g., a thread) to begin a transaction (i.e., a critical section of code) by executing a given instruction (or multiple instructions) indicating the start of a transaction, as in 310. In some embodiments, an ASF instruction (e.g., a SPECULATE instruction, a BEGIN instruction) is used to indicate the start of a critical section.
After beginning a transaction, the thread may execute a series of instructions comprising the transaction body, as in 320. Such instructions may include a number of memory access (read and/or write) operations, some number of which may designate that the accessed memory location should be protected. A thread may designate that a given memory location should be protected by using one or more declaratory instructions provided by ASF. ASF mechanisms may ensure that access to protected memory (as designated by declarator instructions) occur atomically with respect to all other concurrently executing threads in the system (i.e., all at once or not at all). For example, if the transaction includes multiple protected writes to memory, then ASF mechanisms may ensure that no other thread may observe the result of only a subset of those protected writes to memory. In some embodiments, if the transaction includes one or more protected memory read operations, then ASF mechanisms ensure that the transaction completes successfully only if no other thread has modified the protected read locations before the transaction has completed. In some embodiments, a “memory location” protected by a declarator operation may be of different sizes, such as that of a system dependent cache block or of another size.
In some embodiments, ASF only protects cache lines that have been specified using designated declarator instructions. In these embodiments, all other memory locations may remain unprotected and may be modified inside a critical section using standard x86 instructions. These modifications to unprotected memory may become visible to other processors immediately upon execution, for example, in program order. In some embodiments, a transaction body (e.g., instructions executed in 320) may comprise one or more other transactions (i.e., nested transactions).
In some embodiments, if one or more conditions of the transactional execution have been violated, the transaction aborts (as indicated by the affirmative exit from 330). In some embodiments, transactional attempts are aborted at any point because of contention with other processors, far control transfers (such as those caused by interrupt and faults), execution of explicit software ABORT instructions, insufficient hardware resources, other implementation-specific conditions, etc.
When a transactional attempt aborts, particular recovery actions may be taken depending on the mode of transactional execution. In some embodiments, for each transaction, ASF supports a rollback mode of execution and/or a store-conditional mode of execution. In some embodiments, the mode of execution determines what actions are performed in response to a transactional attempt being aborted. For example, in some embodiments, aborting a transaction in rollback mode causes execution to be “rolled back” to the start of the transaction while aborting a transactional attempt in store-conditional mode causes the transaction to continue but with transactional store operations not being performed (i.e., execution of transactional stores may be conditional on the transaction not having been aborted).
According to the illustrated embodiment, when a transaction executing in rollback mode aborts (as indicated by the affirmative exit from 340), ASF mechanisms may be configured to execute recovery actions, as in 350, which may include discarding modifications to the contents of the protected lines. By discarding such modifications, as in 350, ASF mechanisms may cause the modifications to be unobservable to other threads in the system, thereby complying by the atomicity property of the transaction. However, ASF mechanisms may be configured to not roll back modifications to unprotected memory, such as those performed using conventional x86 memory instructions. In some embodiments, the application programmer provides software for accommodating these unprotected modifications, such as software recovery routines configured to reenter an initialization sequence leading up to the critical section.
In some embodiments, the recovery actions of 350 may are configured to roll back only a subset of the system registers (e.g., rIP and rSP) rather than all registers. In these embodiments, software may therefore be written to not rely on the content of various registers when entering transactional execution (e.g., by ignoring the initial contents of some registers after an abort event and/or to not modifying various registers during transactional execution).
In some instances, before an interrupt or exception handler returns, operating system code or other processes may have executed in the interim. Furthermore, in some instances, other processes may have even executed ASF transactions that inspected and/or modified locations targeted by the interrupted transaction. In some embodiments, ASF mechanisms obviate these concerns by not maintaining any ASF-related state across context switches. Instead, in these embodiments, when the interrupted thread returns to the processor, ASF mechanisms may be configured to automatically abort and reattempt the transaction.
According to the illustrated embodiment, after executing some recovery action or actions, the thread may then reattempt the transaction, as indicated by the feedback loop from 350 to 310.
In some embodiments, an abort of a transaction executing in store-conditional mode (as indicated by the negative exit from 340) is handled differently from an abort of a transaction executing in rollback (as indicated by the affirmative exit from 340). For example, while an abort of a rollback mode transaction may automatically reset execution flow to the beginning of the critical section (or to other recovery code), an abort of a transaction in store-conditional mode may be handled by undoing or otherwise discarding changes made by the critical section to values in protected memory locations and then and “deactivating” the transaction, as in 360. In some embodiments, deactivating the transaction includes setting a status code indicating that an abort has occurred and/or that the transaction is no longer active. In store-conditional mode, after the transaction is deactivated (as in 360), the system may continue to execute the critical section without executing any store operations to protected memory locations (as in 370). For example, after the transaction is deactivated, subsequent store operations to protected memory locations may be treated as no-ops.
In some embodiments, when the aborted transaction completes, a status code is set in a register, such as rAX register 216 to indicate that the transaction was aborted. In some embodiments, the thread is configured to detect that an abort status code has been set and perform one or more recovery actions, as indicated by the feedback loop from 370 to 350. In some embodiments, the recovery actions of 350 is different for transactions that were aborted in store-conditional mode (i.e., from 370) than for those that were aborted in rollback mode (i.e., from 340). A more detailed discussion of transactions in rollback and store-conditional modes is provided below.
According to the illustrated embodiment, once the transaction body has been completed, the thread may execute one or more instructions indicating the end of the transaction to the ASF mechanisms, as in 380, such as a COMMIT instruction as discussed below. After committing the transaction, as in 380, the thread may continue execution, as in 390.
In some embodiments, ASF supports nesting of one or more transactions within one or more other transactions. For example, after a transaction is started as in 310 e.g., by executing a SPECULATE command), the instructions of the transaction body being executed in 320 may begin another transaction (e.g., by executing another SPECULATE command) before the first transaction completed. In this case, the second (“child”) transaction may be said to be “nested” within the first (“parent”) transaction. A transaction that is not nested within any other transaction may be referred to herein as a “top-level” transaction.
According to some embodiments, if one or more conditions of the transactional execution have been violated, then the transaction aborts (as indicated by the affirmative exit from 330). In some embodiments, transactional attempts are aborted at any point because of contention with other processors, far control transfers (such as those caused by interrupt and faults), execution of explicit software ABORT instructions, insufficient hardware resources, other implementation-specific conditions, etc.
Various ASF mechanisms may be used to monitor and/or enforce protected memory locations (e.g., protected cache blocks). In some embodiments, ASF mechanisms include an extension to one or more of the system's caches (e.g., memory caches 230), to indicate which cache lines (i.e., blocks) are protected. For example, in some embodiments, each line in a given cache includes a “protected” flag, which is set if the cache line is protected in a currently executing transaction and unset if it is not protected. In some embodiments, the protected flag includes one or more bits.
In some embodiments, ASF mechanisms for tracking protected cache lines include a locked line buffer. In these embodiments, when a value in a protected memory location is modified (e.g., using a LOCK MOV instruction), an entry may be made into the locked line buffer to indicate the cache block and the value it held before the modification. In these embodiments, in the event of an abort of the transaction, the entries of the locked line buffer may be used to restore the pre-transaction values of each protected cache line to the local cache. In these embodiments, the locked line buffer may participate in a cache coherence protocol of the system, as described below.
Instead of using a locked line buffer to undo memory stores as described above, various ASF implements may instead prevent store instructions to protected memory locations in a critical section from being written to cache and/or memory before the transaction is committed. In some embodiments, ASF is configured to keep all memory modifications in an internal store buffer and forward buffered values to subsequent load operations in the transaction. In these embodiments, once the transaction commits, ASF mechanisms may allow the buffered store operations in the internal store buffer to be written back to the cache.
Due to the fixed capacity of various ASF hardware components, various limitations may exist on the number of memory locations that may be simultaneously protected during a transaction (or set of nested transactions). For example, in some embodiments, an ASF implementation may specify that all protected memory locations simultaneously reside in a data cache (e.g., memory caches 230) for the duration of the critical section. In these embodiments, if a protected line is evicted from the cache during a transaction (e.g., due to capacity constraints), the critical section may be aborted. For example, a critical section that happened to reference N+1 memory locations that all mapped to the same set in an Nway associative data cache may fail to complete since at least one protected cache line would be evicted from cache when protected memory location N+1 is accessed. However, if a transaction performs a more distributed reference pattern, then it may be able to concurrently protect more memory locations than N before any one cache index is exceeded and a protected line is displaced from the data cache.
Capacity limitations other than cache associativity may exist. For example, in some embodiments, when a locked line buffer is used, the maximum number of concurrently protected modified memory locations is determined by the capacity of the locked line buffer. In another example, in some embodiments, when a store buffering scheme is used, ASF hardware capacity is dependent on the capacity of the store buffer (i.e., the maximum number of outstanding stores supported by the system pipeline).
In some embodiments, ASF mechanisms guarantee that a critical section will not fail due to insufficient hardware capacity as long as the number of protected locations does not exceed a given minimum guaranteed capacity. In some embodiments, this guarantee may be made regardless of where in the cacheable address space protected memory locations reside. For example, in some embodiments, when all protected memory locations simultaneously reside in a data cache, the minimum guaranteed capacity is dependent upon the data cache's associativity (i.e., size of associativity sets). In some embodiments, if a transaction exceeds the hardware capacity, then the transactional attempt may abort.
As described above, in some embodiments, if a transaction attempts to protect (using declarators) more memory locations (e.g., cache blocks) than the ASF implementation's capacity can support, the transaction is aborted. In some embodiments, the transaction is aborted in response to a fault being raised.
Transactional aborts may also be caused by conditions other than insufficient hardware capacity. For example, an abort may be caused by memory contention, that is, interference caused by another processor attempting to access protected memory locations. In some embodiments, ASF mechanisms are configured to detect cache coherence messages (e.g., invalidating and/or noninvalidating probes) that are relevant to one or more protected cache lines and determine whether the probe indicates that a data conflict exists. In response to detecting a data conflict, the ASF-mechanism may abort a transactional attempt. For example, consider a first thread executing in transactional mode and protecting a memory location (i.e., reading a memory location using a declarator instruction). If a second thread subsequently attempts a store to the protected memory location, then the processor executing the second thread may send an invalidating probe to the processor executing the first thread, in accordance with the particular cache coherence protocol deployed by the system. If the first processor receives the invalidating probe while the memory location is still protected (e.g., before the first thread commits its transaction or otherwise releases the memory location) then a data conflict may exist. In such an instance, ASF mechanisms may be configured to detect that the invalidating probe is relevant to a protected memory location and in response, abort the first thread's transaction.
According to some embodiments, a transaction is aborted if ASF mechanisms detect that an invalidating probe relevant to a protected cache line is received. In some embodiments, a transaction is aborted if ASF mechanisms detect that a non-invalidating probe relevant to a modified protected cache line is received.
In some embodiments, ASF mechanisms allows read watches for read only memory areas where either there is no access right check for PREFETCHW or a PREFETCHW_no_check instruction is defined. The PREFETCHW_no_check enables the ASF mechanisms to protect memory lines containing active page tables (i.e., memory lines accessed and updated by the page table walker of a processor). In some embodiments, the ASF mechanisms include an ASF_PROTECT_PT_AREA instruction which is similar to a LOCK MOV or PREFETCH instruction. The ASF_PROTECT_PT_AREA instruction walks page tables until a give level and issues a PREFETCH instruction of a target entry. The ASF_PROTECT_PT_AREA instruction includes a parameter that includes a virtual address in a target area (e.g., an ASF_PROTECT_PT_AREA mem parameter). The ASF_PROTECT_PT_AREA instruction also provides information regarding a known minimal protected area (e.g., a single page of undefined level). The ASF_PROTECTPT_AREA instruction also covers additional virtual area due to cache lines covering several page table entries or a potentially larger page size for a given address.
In some embodiments, the ASF_PROTECTPT_AREA instruction further includes a level parameter that describes a page table entry (PTE level (e.g., PTE:1), a page directory entry (PDE) level (e.g., PDE:2), a page directory pointer entry (PDPE) level (e.g., PDPE:3) and a page map level 4 entry (PML4E) level (e.g., PML4E:4). With this embodiment, the large object protection only occurs if the level matches with the actual page table.
In some embodiments, page boundary limits and page table mapping are adapted to coincide with the large object protection module 250. In these embodiments, a result level parameter is provided such as via a register. E.g., a parameter of 1 for 4K pages, 2 for 2M pages, etc. This embodiment also ensures that accessed and dirty bits are 0 to prevent a race with remote TLB shoot down.
FIG. 4 is a general flow diagram illustrating a flow chart of a method for resolving conflicts between a first thread and a second thread, according to some embodiments. Throughout the disclosure a first thread is referred to as Thread A. Thread A corresponds to the thread that typically executes first and initiates a memory transaction. A second thread is referred to as Thread B. Thread B corresponds to the thread that executes second (i.e., after Thread A) and touches memory in a way that potentially conflicts with the transaction set of Thread A. Thread B can itself execute a memory transaction or it can execute non-transactional code. Several Thread Bs can exist concurrently. In other words, several processors in a multi-processor system may execute code with characteristics of Thread B at the same time. A thread typically executes on a single processor; neither migration nor suspension is considered in the following discussion.
A Page Table Entry (PTE) is a single entry in the page table structure that is interpreted by the memory management unit of a processor for mapping virtual to physical memory. In some processor environments, such as the AMD 64 processor environments, four levels of PTEs may be chained, the last of which represents one memory page (4 KB). A translation look aside buffer (TLB) is a processor-local hardware cache for mappings between virtual to physical memory mappings (see PTE). A hardware transactional memory (HTM) system is a transaction system supporting multi-word atomic operations in main memory. ASF is a specific implementation of a HTM system.
In some embodiments, each PTE comprises a bit, referred to as a lock bit, that indicates whether a transaction is to be covered under the large transaction scheme. During execution of a transaction, Thread A sets the lock bit in the PTE to signify to Thread B that Thread A has protected the region covered by PTE in read mode (step 410). Thus indicating that Thread A has or will transitionally read from the region. For Thread B the lock bit indicates that it cannot do any write accesses to the memory region covered by the PTE.
Additionally, each local processor tracks whether it was the processor that switched on the lock bit in the PTE (step 420). The processors use a bit, referred to as an own bit, which is stored within the local TLB entry of the processor that corresponds to a PTE entry.
In operation, there are at least two variants via which a Thread A can acquire read access to a large region. In some embodiments, the PTE for the desired regions is placed into the local transactional read set. In these embodiments, Thread A uses a non-transactional access to switch the lock bit on within the PTE corresponding to the large region (e.g., by performing a hypertransport “atomic or” operation). The write operation then punches through the transaction and keeps the PTE only in the transactions read set. More specifically, normally, a write operation would upgrade a target line from the read set to the write set; however, this process is circumvented (i.e., punched through) to perform a non-transactional store.
In some embodiments, a normal non-transactional store is used to turn the lock bit on (e.g., via a hypertransport “atomic or” operation). After that, the PTE for the desired regions is placed into the local transactional read set. Next, the system accesses the page table entry to determine whether the lock bit is still set. This check of the lock bit within the page table entry after placing the desired regions into the local transactional read set address any issues that might arise do to a race condition between turning on the lock bit and placing the PTE for the desired regions into the local transactional set.
An ABA problem which can occur during synchronization when a location is read twice, has the same value for both reads and the value being the same is presumed to indicate that nothing has changed is avoided in the present disclosure. More specifically, because the present system had not previously used the content of the large region and any accesses after the commit are serialized, the system can be used with a third thread.
In operation, when Thread A starts to protect region (R1), Thread A assures that Thread B has to re-walk its page table for R1 to see the new lock bit. This is achieved by remote TLB shoot downs for region R1. When Thread B attempts to access a memory region covered by a PTE, Thread B performs a re-walk of the corresponding page table as the corresponding TLB entry has been removed. Thread B then detects the set lock bit in the PTE and detects a conflict if Thread B wanted to write to memory (read-write conflict). In some embodiments, Thread B may ignore the lock bit if it only wanted to read (rather than write) from this memory location (read-read conflict).
For a transparent remote TLB shoot down operation, a TLB shoot down operation is generally performed at the operating system level by sending inter processor interrupts (IPIs) to the operating system on remote cores. The operating system then functions on behalf of the sender of the request to flush TLB entries. This procedure usually requires both the sender and the recipient of the remote TLB shoot down operation to be in kernel space (i.e., executing within the operating system) at the time. In certain embodiments, transparent IPIs are sent from microcode, without entering kernel space on either the sender or the recipient. In this case, the IPI is handled by microcode also by the recipient by flushing TLB entries indicated by the virtual address that is provided as a parameter to the IPI. Additionally, in certain embodiments, as a security measure, the IPI message contains the corresponding physical address or an address space identifier to only allow threads from the same address space to influence each other (e.g., protection against a timing attack).
Once Thread B detects a conflict, Thread B has several choices how to react. In some embodiments, upon detecting a conflict, Thread B aborts Thread A by creating an actual conflict via the HTM (e.g., by clearing the lock bit in the relevant PTE). In some embodiments, upon detecting a conflict, Thread B locally spins/waits for some time to give Thread A a chance to conclude its transaction. With this choice, the waiting may actually increase system-wide throughput. In some embodiments, upon detecting a conflict, Thread B aborts itself if Thread B is executing a transaction. These embodiments may be preferable from a system-wide view point, as the Thread B transaction may be small and cheap to retry, while the Thread A transaction might be long-running and expensive to abort and retry. Note that the terms “small and cheap” and “long running and expensive” are relative terms comparing a relative cost between two transactions. Units of measurement are time, cycles and possibly energy used. For example Transaction B may cost 1000 cycles whereas transaction A may cost 1,000,000 cycles to run to completion. In some embodiments, the HTM mechanism 145 include a contention manager which implements a specific policy for determining which choice to apply. In some embodiments, if Thread B runs non-transactionally, then Thread B cannot abort itself and thus only the first two options are available. Returning to FIG. 4, once Thread A commits its transaction, then Thread A resets all lock bits in PTEs that were switched on by Thread A (step 430).
The HTM mechanism 145 also includes support for several large readers. A large reader is a transaction with a large working set that is fully or mostly used in a read-only fashion. In the present context a large reader refers to remote transactions that read a large target region R1.
In some embodiments, if a condition is present where several instances of Thread As want to protect the same region, the HTM mechanism includes a reference counting mechanism to ensure that only the last reader to commit clears the lock bit. Depending on the number of available free bits in PTEs, several readers may be directly supported. This counting mechanism may be saturating to detect overflow and allow a fallback mechanisms for clearing lock bits.
In case of overflow or if only a single bit is available, the HTM mechanism may leave the lock bits set on commit Clearing the lock bits would be the responsibility of the next user or of a background scrubbing mechanism. In some embodiments, a background scrubbing mechanism clears all PTEs at regular intervals which may rarely result in aborting some transactions (somewhat similar to a garbage collector). This approach is feasible for transactions that rarely touch the same memory regions or rare cases of counter saturation.
If the next user of a memory region needs to clear the lock bits, the next user would likely invest time into busy-waiting before actually clearing them, thus allowing potential other Thread As a chance to commit.
In some embodiments, a secondary shared data-structure is used in addition to the lock bits in the PTEs to track in more detail which processor is currently executing a transaction. This secondary shared data structure is rarely consulted, only if the lock bits in PTEs might contain stale information. This secondary shared data structure is configured to avoid aborting concurrent transactions. For example, a shared memory page may be used with one cache line designated to each processor (assuming cache lines are the unit of coherence used by the HTM mechanism). A single bit in each cache line indicates whether the corresponding processor is currently executing a transaction. In some embodiments, the address of the protected large region is hashed and mapped to specific bits in the cache line (similarly to a bloom filter). Thus, several large regions could be covered per processor.
It is not dangerous from a correctness point-of-view to clear lock bits in PTEs at arbitrary times as this will abort corresponding transactions and roll back their state. They can simply be restarted. Obviously one wants to minimize this type of interference to not hamper system-wide progress.
By providing such a system and method, the protection granularity for large regions is decreased from several pages (depending on PTE sizes and cache line sizes, typically 8 pages or 32 KB on an AMD64 type processor architecture) to a single page as only the single PTE is protected by the lock bit, under certain circumstances. However, this granularity reduction only holds as long no writing occurs to the PTE and the corresponding cache line. If the lock bit is forcibly removed (e.g., a Thread B aborts), this write operation will hit all PTEs in the corresponding cache line. Also, a second Thread A claiming a page close to the first one will abort the first Thread A if both PTEs share a cache line. Normal operations from Thread Bs that only read a PTE that shares a cache line with a locked PTE will not abort Thread A. In the present context, normal operations include stores as the system only reads from the PTE if and only if the dirty bit is already set. Here the reduced granularity works. Previously, protection relied on transactional state of the cache line that covered the PTE. As cache lines are typically larger than single PTEs, the neighboring PTEs with their associated regions were covered as well.
FIG. 5 illustrates one embodiment of a computer system configured to implement various embodiments of ASF, as described herein. Computer system 500 may be any of various types of devices, including, but not limited to, a personal computer system, desktop computer, laptop or notebook computer, mainframe computer system, handheld computer, workstation, network computer, a consumer device, application server, storage device, a peripheral device such as a switch, modem, router, etc., or in general any type of computing device.
Computer system 500 may include a plurality of processors 570, each of which may include multiple cores, any of which may be single or multi-threaded (e.g., simultaneous multi-processing, HyperthreadingTM, etc.). In some embodiments, processors 570 include dynamic scheduling mechanisms 572, such as those capable of delaying speculative stores in load/store queues 574 for implementing a speculative store buffer, as described herein. In some embodiments, processors 570 include various load, store, and/or load/store queues, such as 574, for holding inflight memory operations in the processor pipeline. Processors 570 may also include registers 576, such as rAX, rFLAGS or other special purpose registers, such as ones used for recording nesting depth, transactional mode, or status (active vs. inactive) of a transaction. In some embodiments, processors 570 include any number of ASF hardware transactional memory mechanisms 578, as described herein. For example, ASF mechanisms 578 may include a locked line buffer and/or hardware logic for monitoring memory locations protected by an active transaction. In some embodiments, processors 570 include cache coherence mechanisms 579, which may be used to implement different cache coherence protocols (e.g., MESI, MOESI, etc.) and may be used by ASF mechanisms to detect conflict aborts, as described herein.
The computer system 500 may also include one or more persistent storage devices 560 (e.g. optical storage, magnetic storage, hard drive, tape drive, solid state memory, etc.), which may store files, for example, by using a file system, such as file system 562. Computer system 500 may include one or more memories 510 (e.g., one or more of cache, SRAM, DRAM, RDRAM, EDO RAM, DDR RAM, SDRAM, Rambus RAM, EEPROM, etc.) shared by the multiple processors. Some embodiments may include fewer or additional components not illustrated in FIG. 5 (e.g., video cards, audio cards, additional network interfaces, peripheral devices, a network interface such as an ATM interface, an Ethernet interface, a Frame Relay interface, etc.).
Processors 570, storage device(s) 560, and shared memory 510 may be coupled to system interconnect 550. One or more of the system memories 510 may contain program instructions 520. Program instructions 520 may be encoded in platform native binary, any interpreted language such as JavaTM byte-code, or in any other language such as C/C++, JavaTM, etc or in any combination thereof.
Program instructions 520 may include program instructions executable to implement one or more ASF-based transactional memory applications 522. Each application 522 may be multithreaded and may be configured to utilize ASF transactional memory mechanisms. In some embodiments, one or more of applications 522 are configured to operate using both ASF transactional memory instructions as well as mutual exclusion locks, as described herein. In such embodiments, shared memory 510 may include various data structures and variables 530, any of which may be associated with one or more mutual exclusion locks 540.
In some embodiments, program instructions 520 and/or ASF-based transactional memory applications 522 is provided as an article of manufacture that may include a computer-readable storage medium having stored thereon instructions that may be used to program a computer system (or other electronic devices) to perform a process according to various embodiments. A computer-readable storage medium may include any mechanism for storing information in a form (e.g., software, processing application) readable by a machine (e.g., a computer). The machine-readable storage medium may include, but is not limited to, magnetic storage medium (e.g., floppy diskette); optical storage medium (e.g., CD-ROM); magneto-optical storage medium; read only memory (ROM); random access memory (RAM); erasable programmable memory (e.g., EPROM and EEPROM); flash memory; electrical, or other types of tangible medium suitable for storing program instructions. In addition, program instructions may be communicated using intangible media-optical, acoustical or other form of propagated signal (e.g., carrier waves, infrared signals, digital signals, etc.).
Additionally, some embodiments are fabricated using well know techniques that can implemented with a data processing system using code (e.g., Verilog, Hardware Description Language (HDL) code, etc.) stored on a computer usable medium. The code comprises data representations of the circuitry and components described herein that can be used to generate appropriate mask works for use in well known manufacturing systems to fabricate integrated circuits embodying aspects of the disclosed embodiments.
The flowcharts and block diagrams in the figures illustrate the architecture, functionality, and operation of possible implementations of systems, methods and computer program products according to the disclosed embodiments. In this regard, each block in the flowchart or block diagrams may represent a module, segment, or portion of code, which comprises one or more executable instructions for implementing the specified logical function(s). It should also be noted that, in some alternative implementations, the functions noted in the block may occur out of the order noted in the figures. For example, two blocks shown in succession may, in fact, be executed substantially concurrently, or the blocks may sometimes be executed in the reverse order, depending upon the functionality involved. It will also be noted that each block of the block diagrams and/or flowchart illustration, and combinations of blocks in the block diagrams and/or flowchart illustration, can be implemented by special purpose hardware-based systems that perform the specified functions or acts, or combinations of special purpose hardware and computer instructions.
The terminology used herein is for the purpose of describing particular embodiments only and is not intended to be limiting. As used herein, the singular forms “a,” “an” and “the” are intended to include the plural forms as well, unless the context clearly indicates otherwise. It will be further understood that the terms “comprises” and/or “comprising,” when used in this specification, specify the presence of stated features, integers, steps, operations, elements, and/or components, but do not preclude the presence or addition of one or more other features, integers, steps, operations, elements, components, and/or groups thereof.
The corresponding structures, materials, acts, and equivalents of all means or step plus function elements in the claims below are intended to include any structure, material, or act for performing the function in combination with other claimed elements as specifically claimed. The disclosed embodiments have been presented for purposes of illustration and description, but is not intended to be exhaustive or limited to the form disclosed. Many modifications and variations will be apparent to those of skill in the art without departing from the scope and spirit of the disclosed embodiments.
For example, the HTM mechanism 145 may be modified to enable transactions that may not be supported by ASF such as large write sets. Protecting large regions may be applicable to large write-sets if no version storage is required. This is the case, for example, for irrevocable transactions such as transactions that are guaranteed to complete. Usually there can only be one such transaction active in the system. But other transactions might execute concurrently. Those would have to be aborted in case of conflict.
Also, for example, the HTM mechanism 145 may be modified to support several page sizes. While the embodiments above are described with respect to last-level PTEs. Those may have any size supported by the architecture. When supporting several page sizes it would be desirable that all threads in a conflict domain use the same page tables. Additionally, the HTM mechanism 145 may be extended to also cover higher levels in the page table. For example, the HTM mechanism 145 might be extended to protect a 2 MB region despite not having a super page mapping for this area. For this modification, the meta-data is also tracked and marked at the desired level by all cores. Additionally, in certain embodiments, super-page mappings could be used without the overhead of the additional meta-data.
Having thus described the embodiments in detail, it will be apparent that modifications and variations are possible without departing from the scope of the embodiments defined in the appended claims.

## Claims

1. An apparatus comprising:
a processor coupleable to a shared memory that is shared by one or more other processors, wherein the processor is configured to execute transactional memory access operation to the shared memory; and
the processor comprising executable code for resolving conflicts between a first thread and a second thread, the executable code comprising instructions for:
setting a lock indication during execution of a transaction, the transaction acquiring access to a large region of the shared memory, the lock indication indicating to the first thread and the second thread that the first thread has protected the large region of the shared memory;
determining whether the lock indication is set during execution of the transaction;
on a condition that the second thread detects the set lock indication when executing another transaction, performing, by the second thread, one operation of a plurality of operations comprising aborting execution of the transaction executing on the first thread by creating a conflict between the first thread and the second thread or aborting execution of the another transaction of the second thread; and,
resetting the lock indication after execution of the transaction is committed.

2. The apparatus of claim 1 wherein:
a large region protection module comprises a hardware-based transactional memory (HTM) mechanism, the HTM mechanism setting the lock indication during execution of the transaction.

3. The apparatus of claim 1 wherein:
the lock indication is stored within a page table entry (PTE) corresponding to the large region of the shared memory.

4. The apparatus of claim 1 wherein:
after the first thread starts protecting the large region of the shared memory, a translation look aside buffer (TLB) shoot down operation is generated to cause the second thread attempts to perform re-walk operation of a page table.

5. A multiprocessor computer system comprising:
a shared memory; and
a plurality of processors coupled to the shared memory, each of the plurality of processors is configured to execute transactional memory access operation to the shared memory and each processor comprises executable code for resolving conflicts between a first thread and a second thread, the executable code comprising instructions for:
setting a lock indication during execution of a transaction, the transaction acquiring access to a large region of the shared memory, the lock indication indicating to the first thread and the second thread that the first thread has protected the large region of the shared memory;
determining whether the lock indication is set during execution of the transaction;
on a condition that the second thread detects the set lock indication when executing another transaction, performing, by the second thread, one operation of a plurality of operations comprising aborting execution of the transaction executing on the first thread by creating a conflict between the first thread and the second thread or aborting execution of the another transaction of the second thread; and,
resetting the lock indication after execution of the transaction is committed.

6. The multiprocessor computer system of claim 5 wherein:
a large region protection module comprises a hardware-based transactional memory (HTM) mechanism, the HTM mechanism setting the lock indication during execution of the transaction.

7. The multiprocessor computer system of claim 5 wherein:
the lock indication is stored within a page table entry (PTE) corresponding to the large region of the shared memory.

8. The multiprocessor computer system of claim 5 wherein:
after the first thread starts protecting the large region of the shared memory, a translation look aside buffer (TLB) shoot down operation is generated to cause the second thread attempts to perform re-walk operation of a page table.

9. In a system comprising a memory shared among a plurality of processors, a method comprising:
setting a lock indication during execution of a transaction, the transaction acquiring access to a large region of memory, the lock indication indicating to the first thread and the second thread that the first thread has protected the large region of memory;
determining whether the lock indication is set during execution of the transaction;
on a condition that the second thread detects the set lock indication when executing another transaction, performing, by the second thread, one operation of a plurality of operations comprising aborting execution of the transaction executing on the first thread by creating a conflict between the first thread and the second thread or aborting execution of the another transaction of the second thread; and,
resetting the lock indication after execution of the transaction is committed.

10. The method of claim 9 further comprising:
a large region protection module comprises a hardware-based transactional memory (HTM) mechanism, the HTM mechanism setting the lock indication during execution of the transaction.

11. The method of claim 9 wherein:
the lock indication is stored within a page table entry (PTE) corresponding to the large region of memory.

12. The method of claim 9 wherein:
after the first thread starts protecting the region of memory, a translation look aside buffer (TLB) shoot down operation is generated to cause the second thread attempts to perform re-walk operation of a page table.

13. A computer readable medium comprising code stored therein, said code being executable by a processor to fabricate a multiprocessor computer system, said multiprocessor computer system comprising:
a shared memory; and,
a plurality of processors coupled to the shared memory, each of the plurality of processors is configured to execute transactional memory access operation to the shared memory and each processor comprises executable code for resolving conflicts between a first thread and a second thread, the executable code comprising instructions for:
setting a lock indication during execution of a transaction, the transaction acquiring access to a large region of the shared memory, the lock indication indicating to the first thread and the second thread that the first thread has protected the large region of the shared memory;
determining whether the lock indication is set during execution of the transaction;
on a condition that the second thread detects the set lock indication when executing another transaction, performing, by the second thread, one operation of a plurality of operations comprising aborting execution of the transaction executing on the first thread by creating a conflict between the first thread and the second thread or aborting execution of the another transaction of the second thread; and,
resetting the lock indication after execution of the transaction is committed.

14. The computer readable medium of claim 13 wherein:
a large region protection module comprises a hardware-based transactional memory (HTM) mechanism, the HTM mechanism setting the lock indication during execution of the transaction.

15. The computer readable medium of claim 13 wherein:
the lock indication is stored within a page table entry (PTE) corresponding to the large region of the shared memory.

16. The computer readable medium of claim 13 wherein:
after the first thread starts protecting the large region of the shared memory, a translation look aside buffer (TLB) shoot down operation is generated to cause the second thread attempts to perform re-walk operation of a page table.