Processor acquisition of ownership of access coordinator for shared resource
Claim Score by NHIP
Abstract
A processor of an apparatus in an example upon a failure of an earlier attempt to directly acquire ownership of an access coordinator for a resource shared with one or more additional processors, locally determines an amount to delay a later attempt to directly acquire ownership of the access coordinator. Upon a failure of the later and/or a subsequent attempt to directly acquire ownership of the access coordinator the processor would enter into an indirect waiting arrangement for ownership of the access coordinator.

Term
2.5 yearsto projected expiry
Projected expiry 12 April 2029, counted from filing; an application has no term until it is granted.
- Priority and filed
- Published
- Today
- Projected expiry
20 claims: 3 independent, 17 dependent
- 1An apparatus, comprising:a processor that upon a failure of an earlier attempt to directly acquire ownership of an access coordinator for a resource shared with one or more additional processors, locally determines an amount to delay a later attempt to directly acquire ownership of the access coordinator, wherein upon a failure of the later and/or a subsequent attempt to directly acquire ownership of the access coordinator the processor would enter into an indirect waiting arrangement for ownership of the access coordinator.
- 10Broadest claimClaim Score 79, broad(NHIP)An apparatus, comprising:a processor that locally determines an amount of delay for an attempt by the processor to directly acquire ownership of an access coordinator for a resource shared with one or more additional processors, wherein upon a completion of the amount of delay the processor adjusts a heuristic based on an occurrence of success or failure of the attempt to directly acquire ownership of the access coordinator, to adapt a later attempt by the processor to directly acquire ownership of the access coordinator.
- 18An apparatus, comprising:a computer operating system that coordinates ownership of a spinlock for a resource shared among a plurality of processors;wherein upon an occurrence of owned status of the spinlock contemporaneous with a request for ownership of the spinlock by a plural set of processors of the plurality of processors, the computer operating system allows a plural subset number of processors of the plural set of processors to directly wait for ownership of the spinlock;wherein the computer operating system causes one or more additional processors of the plural set of processors in excess of the plural subset number of processors, to indirectly wait for ownership of the spinlock.
Independent claims3
67 paragraphs in 3 sections, as filed
BACKGROUND
0001Multithreaded computer programs and/or multiprocessor computer systems have multiple threads and/or processors that share use of a number of resources. Access coordination and/or synchronization serve to organize access by a plurality of the processors to one or more of the shared resources. A tool for access coordination and/or synchronization comprises a lock, for example, a spinlock.
0002A computer architecture employs a ticket-serving algorithm to implement spinlocks. Each lock comprises both a ticket variable and a serving value variable, which indicates the ticket value currently being served. For example, these variables initially comprise a same value, indicating that the particular lock is available.
0003Each processor that desires the lock takes the next available ticket. When a processor takes a ticket, the processor increments the value of the next available ticket. If the ticket value taken matches the serving value, then the processor owns the spinlock. If the ticket value is greater than the serving value, then the processor waits for a turn on the spinlock.
DESCRIPTION OF THE DRAWINGS
0004Features of exemplary implementations of the invention will become apparent from the description, the claims, and the accompanying drawings in which:
0005<figref idref="DRAWINGS">FIG. 1</figref> is a representation of an implementation of an apparatus that comprises a plurality of cells and one or more memory locations and/or fabrics according to a preferred embodiment of the invention.
0006<figref idref="DRAWINGS">FIG. 2</figref> is a representation of an exemplary logic flow stored and/or implemented at a main memory and performed and/or executed by an operating system of an implementation of the apparatus of <figref idref="DRAWINGS">FIG. 1</figref>.
0007<figref idref="DRAWINGS">FIG. 3</figref> is a representation an exemplary implementation of timed prearbitration as part of the exemplary logic flow of <figref idref="DRAWINGS">FIG. 2</figref>.
0008<figref idref="DRAWINGS">FIG. 4</figref> is a representation of an exemplary state flow for an exemplary plurality of processors of an implementation of the apparatus of <figref idref="DRAWINGS">FIG. 1</figref>.
DETAILED DESCRIPTION
0009Referring to the BACKGROUND section above, waiting for the lock causes cache misses for the waiting processors. The cache misses in turn cause bus contention. The waiting for the lock and missing of their caches by the processors each time the lock is released or looked at causes a slowdown in the system. An exemplary study of a thirty-two processor system determined that this cache missing causes a seven percent reduction in performance. Greater numbers of processors are expected to experience even worse performance reductions from this cache missing.
0010Exemplary multiprocessor systems comprise thirty-two or sixty-four logical processors. Many or all of the processors in an example contend on a same memory fabric in the computer system, such as when sharing access to resources. An access coordinator such as a lock in an example serves to protect, coordinate, and/or synchronize access to a shared resource. Different kinds of locks in an example serve to protect, coordinate, and/or synchronize access to a variety of shared resources. Exemplary locks that involve a processor spinning and/or waiting comprise one or more of spinlocks, read/write spinlocks, read/write blocking locks, adaptive locks, mutexes (mutual exclusion negotiators), condition variables, and semaphores.
0011Exemplary spinlock synchronization and/or access coordination in a multiprocessor system employs prearbitration to organize the computer processors in such a way as to have each processor interrogate a separate cache line and thus not interfere with each other. The system does incur an expense of cache missing by the processors during the setup of the prearbitration, to arrange for coordination of the processors. The bus traffic from the cache misses during the prearbitration setup reduces performance. As contention by the processors for the lock increases, the number of cache misses increases. This, in turn, reduces the efficiency of the lock, and increases bus contention. This feedback property makes overhead associated with the lock reach ever higher levels with increased bus contention.
0012The efforts involved in synchronization and/or access coordination of processes in computer systems may entail an expense in terms of making some percentage of the system unproductive for some time. The capabilities of the system for production of useful work may be increased through reduction of overhead associated with synchronization and/or access coordination. Computing power may be consumed in cache faults associated with the accessing of the memory used for the lock and/or access coordinator. Bus contention may cause system performance problems. For example, cumulative cache faults in the spinlock code may result in a loss of overall system performance of several percent. This loss of performance in an example may reduce the value of very expensive, very large computer systems.
0013System performance may be significantly impacted by delays in the acquisition of an access coordinator. When a particular spinlock in an example is under high contention and the average hold time of the spinlock is short, a small amount of additional latency in acquiring the lock can exacerbate the lock and/or bus contention. It may be desirable to reduce the latency of acquiring an access coordinator. It may be desirable to reduce processor utilization associated with access coordinators, and promote greater system throughput. It may be desirable to reduce cache misses that cause delays in retrieving the memory associated with the access coordinator, and reduce bus contention.
0014Turning to <figref idref="DRAWINGS">FIG. 1</figref>, an implementation of an apparatus <b>100</b> in an example comprises a plurality of cells and one or more memory locations and/or fabrics. The apparatus <b>100</b> in an example comprises one or more of a computing system, a multithreaded program computer system, and/or a multiprocessor computer system. The plurality of cells of the computing system as the apparatus <b>100</b> in an example comprises cells <b>102</b> and <b>104</b>. An exemplary memory fabric comprises memory fabric <b>106</b>. The memory fabric <b>106</b> in an example comprises one or more connections among and/or contents of shared memory resources of the cells <b>102</b> and <b>104</b>.
0015The cell <b>102</b> in an example comprises a plurality of processors, a plurality of memories, one or more buses, and/or one or more input devices. Exemplary processors comprise corresponding and/or respective processor cores and/or hardware threads, for example, where one or more hardware threads may run on one physical processor core. Exemplary processors comprise processors <b>108</b> and <b>110</b> with respective caches <b>112</b> and <b>114</b>. The processors <b>108</b> and <b>110</b> in an example share main memories <b>116</b> and <b>118</b>. The caches <b>112</b> and <b>114</b> comprise exemplary fast speed memories and the main memories <b>116</b> and <b>118</b> comprise exemplary moderate speed memories of the plurality of memories of the cell <b>102</b>. An exemplary bus comprises bus <b>120</b>. An exemplary input device comprises input device <b>122</b>. The bus <b>120</b> in an example serves to couple the memory fabric <b>106</b>, the caches <b>112</b>, <b>114</b>, the main memories <b>116</b>, <b>118</b>, and the input device <b>122</b>. The exemplary memory fabric <b>106</b> in an example serves to couple the bus <b>120</b> in cell <b>102</b> with one or more similar and/or analogous buses in one or more additional cells <b>104</b>, for example, to connect and/or couple exemplary main memories <b>116</b>, <b>118</b> with one or more similar and/or analogous main memories in one or more additional cells <b>104</b>.
0016The main memories <b>116</b>, <b>118</b> in the exemplary cell <b>102</b> in an example comprise and/or store objects, for example, an operating system <b>124</b>, wait_quanta <b>126</b> associated with a plurality, most, all, and/or each of the processors <b>108</b> and <b>110</b>, one or more access coordinators and/or locks <b>128</b>, and one or more shared resources <b>130</b>. The cell <b>104</b> in an example comprises analogous instances of the main memories <b>116</b>, <b>118</b> that comprise analogous instances of the wait_quanta <b>126</b>, the access coordinators and/or locks <b>128</b>, and the shared resources <b>130</b>. In one or more exemplary implementations, one or more features described herein in connection with one or more of the cells <b>102</b> and/or <b>104</b> and/or one or more parts thereof apply and/or are extendible analogously to the other and/or one or more other instances of cells in the apparatus <b>100</b>. In one or more exemplary implementations, one or more features described herein in connection with one or more of the processors <b>108</b> and/or <b>110</b> and/or one or more parts thereof apply and/or are extendible analogously to the other and/or one or more other instances of processors in the apparatus <b>100</b>. In one or more exemplary implementations, one or more features described herein in connection with one or more of the main memories <b>116</b> and/or <b>118</b> and/or one or more parts thereof apply and/or are extendible analogously to the other and/or one or more other instances of main memories in the apparatus <b>100</b>.
0017An exemplary operating system <b>124</b> views all of main memory <b>116</b>, <b>118</b> as a single, continuous range of memory locations, even though parts of the memory may be associated with different processors <b>108</b>, <b>110</b> and/or even different cells <b>102</b>, <b>104</b>. The operating system <b>124</b> in an example may be spread across memory locations in the memory associated with every processor <b>108</b>, <b>110</b> and/or every cell <b>102</b>, <b>104</b>.
0018In a further example, the operating system <b>124</b> is aware of the difference in access times between accesses to memory within the cell <b>102</b> and access to a different cell <b>104</b>. Certain structures may be allocated in the cell <b>102</b> as an exemplary local cell, for example, to benefit from the reduced latency and/or access delay. The memory of the local cell in an example comprises Cell Local Memory (CLM). The memory of the non-local cell in an example comprises Interleaved Memory (ILM). An exemplary implementation puts the wait_quanta <b>126</b> in the CLM, for example, to benefit from the reduced latency and/or access delay. Another exemplary implementation puts the wait_quanta <b>126</b> in the ILM. The shared resources <b>130</b> and/or locks <b>128</b> in an example may be stored in either CLM or ILM.
0019Exemplary processors <b>108</b> and <b>110</b> execute instructions from a single exemplary operating system <b>124</b>, or from a plurality of operating systems. The operating system <b>124</b> in an example employs an exemplary lock <b>128</b> to coordinate access to an exemplary shared resource <b>130</b>. In an exemplary implementation, a single operating system <b>124</b> resides in memory from all memory banks in all cells <b>102</b>, <b>104</b>. The operating system <b>124</b> in an example employs an exemplary wait_quantum <b>126</b> for a particular processor <b>108</b> or <b>110</b> to implement timed prearbitration, for example, timed_preArbitration at STEP <b>216</b> (<figref idref="DRAWINGS">FIGS. 2 and 3</figref>). An exemplary operating system <b>124</b> comprises timed prearbitration such as timed_preArbitration of STEP <b>216</b>. An exemplary implementation with a plurality of operating systems <b>124</b> comprises an environment in which the hardware has been divided into distinct partitions. Multiple operating systems <b>124</b> in an example need not necessarily fall on boundaries of the cells <b>102</b>, <b>104</b>. An exemplary implementation with separate operating systems <b>124</b> may employ a timed prearbitration algorithm and/or approach such as timed_preArbitration at STEP <b>216</b>, for example, on the locks <b>128</b> that are shared among the operating systems <b>124</b>.
0020Exemplary shared resources <b>130</b> comprise data structures, memory file systems, disks, displays, other I/O (input/output devices), memory, memory controllers, network controllers, measurement counters, busses, and system resources. For example, the shared resource <b>130</b> comprises any item in the apparatus <b>100</b> that is and/or must be referenced and/or modified by multiple processors <b>108</b>, <b>110</b>. The shared resource <b>130</b> may be shared among processors on different cells <b>102</b> and <b>104</b>, with the lock <b>128</b> controlling the access by processors on different cells <b>102</b> and <b>104</b>.
0021Exemplary logic flow <b>202</b> in an example applies to an individual processor <b>108</b> or <b>110</b> desirous of obtaining an individual lock <b>128</b>, as described herein. Exemplary access coordinators and/or locks <b>128</b> comprise one or more of spinlocks, read/write spinlocks, read/write blocking locks, adaptive locks, mutexes, condition variables, and semaphores. The description herein is extendible and/or applies analogously to each processor, a subset of processors, and/or most processors of a plurality of processors <b>108</b>, <b>110</b> and/or to each lock, a subset of locks, and/or most locks of a plurality and/or variety of locks <b>128</b> in a number, variety, and/or ranges of exemplary implementations of the apparatus <b>100</b>, as will be appreciated by those skilled in the art.
0022An exemplary consideration is the path that data takes between various types of memory and the processor that references it. As the path to the data becomes longer, the time required to reference it becomes longer. Exemplary fast references are from a processor (e.g., processor <b>108</b>) to the cache (e.g., cache <b>112</b>) nearest that processor. If the data requested is not in the local cache it is called a cache miss. A cache miss that is satisfied in the block of memory (e.g., main memory <b>116</b>) nearest the processor is less expensive in terms of delay in retrieving the data than references to other blocks of memory (e.g., main memory <b>118</b>). Longer still is the delay in retrieving data from other cells (e.g., cell <b>104</b>) in the computing system as the apparatus <b>100</b>.
0023An illustrative description of an exemplary operation of an implementation of the computing system as the apparatus <b>100</b> is presented, for explanatory purposes. Turning to <figref idref="DRAWINGS">FIG. 2</figref>, the operating system <b>124</b> in an example comprises and/or implements logic flow <b>202</b> that is stored in one or more exemplary main memories <b>116</b>, <b>118</b> and executed by one or more exemplary processors <b>108</b>, <b>110</b>. Each processor <b>108</b>, <b>110</b> and/or analogous other processors in an example may simultaneously, contemporaneously, and/or concurrently execute the logic flow <b>202</b>. In a further example, the processors <b>108</b> and <b>110</b> may at times execute the logic flow <b>202</b> in overlapping fashion and at other times execute the flow <b>202</b> in non-overlapping fashion.
0024At STEP <b>204</b>, a processor <b>108</b> or <b>110</b> in an example makes an initial attempt to acquire a spinlock as an exemplary access coordinator and/or lock <b>128</b>. STEP <b>204</b> in an example causes the processor to acquire a ticket (e.g., a number) while, at the same time, incrementing the next ticket value, for example, in an exemplary implementation of a ticket-serving algorithm, procedure, program, mechanism, application, code, and/or logic. If the ticket received matches the serving value for the spinlock, the processor in an example becomes the owner of the spinlock and exits at STEP <b>208</b>.
0025If the lock is not immediately available, the processor in an example proceeds to wait for the spinlock at STEP <b>210</b>. An exemplary difference between the ticket value received by the processor and the serving value, referred to as “diff” in the exemplary logic flow <b>202</b>, indicates how far back in line the processor is in the list of processors waiting for the lock. The processor in an example makes a determination of this difference at STEP <b>212</b>. At STEP <b>212</b>, if the difference is larger than or equal to a selectable and/or configurable number (N) of direct spinners for the plurality of processors, then the processor in an example proceeds to STEP <b>214</b>. At STEP <b>214</b>, if the difference is larger than N the processor in an example proceeds to exemplary timed prearbitration, for example, timed_preArbitration at STEP <b>216</b>, as described herein. The configurable number N in an example represents a desired number and/or limit on the number of direct spinners of the plurality of processors. At STEP <b>214</b>, if the difference is not larger than N, the processor in an example proceeds to STEP <b>218</b> where the processor in an example makes a determination to perform exemplary prearbitration, for example, preArbitration at STEP <b>220</b>, if the difference is greater than or equal to N. Exemplary preArbitration at STEP <b>220</b> organizes the processors in such a way as to have each processor interrogate a separate cache line and thus not interfere with each other. An exemplary cache line comprises a datum, a smallest increment of memory transferred to and from a memory cache, and/or an information size larger than a usual access requested by a processor instruction. For example, the cache line is typically larger than one memory “word.” The prearbitration at STEP <b>220</b> in an example arranges for the processors to access memory that will not fall on the same cache line as another processor, for example, to avoid two or more processors referencing different words in the same cache line and interfering with each other. For example, the prearbitration arranges all processors on all the cells. A further exemplary prearbitration arranges limited sets of processors selected from different cells. Exemplary partitions may serve to qualify selected processors from selected cells.
0026<figref idref="DRAWINGS">FIG. 3</figref> presents an exemplary implementation of timed_preArbitration as STEP <b>216</b>. STEP <b>216</b> in an example delays the processor from progressing to a next STEP <b>218</b> of acquiring the spinlock in the logic flow <b>202</b> (<figref idref="DRAWINGS">FIG. 2</figref>) by an amount of time proportional to the number of processors in front of this particular processor queued and/or lined up waiting for the spinlock. STEP <b>302</b> as an exemplary entry to STEP <b>216</b> in an example provides and/or passes two values as parameters. The first value in an example comprises the original difference value, for example, the difference between the ticket and serving values. The second value in an example comprises the ticket value for the particular processor. Upon eventual exit at STEP <b>320</b> from the procedure and/or STEP <b>216</b> as the timed_preArbitration, the return value in an example comprises the then-current difference between the ticket and serving values.
0027STEP <b>304</b> in an example makes a determination of the wait_time as an arithmetic progression by taking the difference between ticket and serving values (e.g., expressed as the passed parameter, diff) and multiplying the difference by an amount of time (e.g., expressed as wait_quantum <b>126</b> for the particular processor <b>108</b> or <b>110</b>). Other exemplary implementations of STEP <b>304</b> may employ other and/or non-linear algorithms to calculate the wait_time. An exemplary calculation employs a factor to increase or decrease the wait_time, for example, in connection with larger values of “diff” (difference between the ticket received by the processor and the serving value). On systems with more than one hardware thread per physical processor core, which may be referred to as hyper-threaded systems, the processor executing the timed_preArbitration of STEP <b>216</b> in an example voluntarily transfers control to another hardware thread on the same processor core, for example, instead of waiting for time to elapse.
0028At STEP <b>306</b>, the processor in an example checks the clock until this wait_time amount has elapsed. Upon the time elapsing, the processor at STEP <b>308</b> in an example makes a determination of the new distance between ticket and serving values and may adjust and/or adapt the wait_quantum <b>126</b> for the processor based on the result. Exemplary adjustment and/or adaptation of the wait_quantum <b>126</b> may employ a heuristic. An exemplary heuristic employs intelligence to make desirable, acceptable, and/or good choices. An exemplary adaptation changes future behavior based on past experience.
0029An exemplary desirable result is the distance to the front of the line is now in the range of one to N, where N is the configurable number of direct spinners. In this case in an example, no adjustment to the wait_quantum <b>126</b> is required and the processor will proceed through STEPS <b>310</b>, <b>312</b>, and <b>318</b> to the next STEP <b>218</b> of acquiring the spinlock in the exemplary logic flow <b>202</b>.
0030If instead the difference between ticket and serving values is zero at STEP <b>310</b>, then the current processor in an example is actually the owner of the spinlock. This may be undesirable in an example because the processor was not taking advantage of the ownership of the lock and therefore is extending the processor's time of ownership. STEP <b>310</b> in an example therefore proceeds to STEP <b>314</b> and the wait_quantum <b>126</b> in an example is reduced so that on subsequent attempts to wait for a spinlock the processor will wait less time before re-checking the position in line.
0031Should the difference between ticket and serving values be greater than N at STEP <b>312</b>, then the processor in an example proceeds to STEP <b>316</b>. STEP <b>316</b> in an example increases the wait_quantum <b>126</b> so that in subsequent attempts to wait for a spinlock the processor will spend more time in the wait state before checking the queue again.
0032STEP <b>316</b> in an example exits an exemplary implementation of STEP <b>216</b> through STEP <b>320</b> to proceed to STEP <b>218</b> (<figref idref="DRAWINGS">FIG. 2</figref>). In another example, STEP <b>316</b> proceeds to STEP <b>304</b>, for example, to repeat a waiting operation such as calculate the wait_time. The processor in an example upon a determination of premature attempt to acquire ownership of the access coordinator <b>128</b>, locally determines an increased amount to delay a subsequent attempt to directly acquire ownership of the access coordinator <b>128</b>. The delay for the attempt by the processor to directly acquire ownership of the access coordinator <b>128</b> in an example comprises a first delay portion and a second delay portion. The processor in an example upon completion of the first delay portion, locally determines that additional waiting is beneficial and makes a determination of the second delay portion. Upon completion of the second delay portion the processor in an example executes the later attempt to directly acquire ownership of the access coordinator <b>128</b>.
0033STEP <b>218</b> in an example makes a determination whether the ticket difference is greater than or equal to N. For example, when the waiting in timed_preArbitration at STEP <b>306</b> has resulted in a ticket difference still greater than N to exit at STEP <b>320</b>, STEP <b>218</b> in an example will proceed to STEP <b>220</b>.
0034The processor in an example, potentially after completing timed_preArbitration at STEP <b>216</b> and exemplary regular preArbitration at STEP <b>220</b>, proceeds to direct spinning at STEP <b>222</b>. The processor compares the ticket value obtained at STEP <b>204</b> with the then-current serving value and, if these values match, acquires the spinlock and exits the spinlock algorithm. If the values do not match, the processor repeats the comparison until they do match.
0035The wait_quantum <b>126</b> in an example is adaptive. An exemplary implementation of logic through STEPS <b>314</b> and <b>316</b> comprises a mechanism and/or approach of self-adaptation to change the wait_quantum <b>126</b> over time, for example, to improve and/or produce better results. An exemplary implementation considers better results to cause subsequent occasions of the particular processor <b>108</b> or <b>110</b> executing and/or proceeding to the timed_preArbitration of STEP <b>302</b>, to more often wait at STEP <b>306</b> for a desirable amount of time. The mechanism of adaptation in an example occurs on a per-processor basis, for example, to avoid additional bus traffic and/or to promote adaptation within a set of one or more tasks that may be associated with the particular process, for example, leading to access patterns different from other processors.
0036An exemplary wait_time at STEP <b>304</b> in an example comprises an amount of delay that most often causes the waiting processor to finish the wait STEP <b>306</b> at a time when the difference between ticket and serving values is between 1 and N, inclusive. An exemplary wait_time and therefore the optimal wait_quantum <b>126</b> in an example vary with the workload on the computing system as the apparatus <b>100</b>. As the workload on the system changes, an exemplary desirable wait_quantum <b>126</b> may increase or decrease. The processor executing the logic flow at timed_preArbitration STEP <b>216</b> in an example modifies the wait_quantum <b>126</b> to adjust to the new workload. An exemplary self-adapting implementation may select an amount by which the wait_quantum <b>126</b> is increased or decreased and/or may select limits above which and below which the wait_quantum <b>126</b> cannot be incremented or decremented, respectively.
0037The scope of a variable in an example refers to the range of effect of the variable. For example, a variable may affect, be limited, and/or relate to one or more objects and/or components, one or more processors, one or more cells, one or more subsets of items of the apparatus <b>100</b>, and/or the entire apparatus <b>100</b>, for example, as global scope. An exemplary scope of a variable may be selected to fit the characteristics of the computing system as the apparatus <b>100</b>. A narrow scope such as relating and/or matching one variable to one object and/or component in an example allows the variable to accurately describe the object and/or component but requires a larger amount of main memory, for example, one variable per object and/or component. For example, a narrow scope in an example relates and/or matches a variable to each lock <b>128</b>, for example, one variable per lock <b>128</b>. A wide scope such as relating and/or matching one variable to the entire apparatus <b>100</b> as global scope in an example reduces memory usage but does not provide a detailed and/or accurate relationship between the variable and the objects and/or components of the apparatus <b>100</b>. An intermediate scope such as relating and/or matching one variable for each processor <b>108</b>, <b>110</b> provides a compromise between memory usage and accuracy of the relationship between the variable and the objects and/or components being described. Additional exemplary intermediate scopes relate and/or match a variable to each cell <b>102</b>, <b>104</b>, thread, or process, for example, one variable per-cell <b>102</b>, <b>104</b>, per-thread, or per-process. One or more exemplary variables may serve in an implementation of the operating system <b>124</b> and/or be employable by the processors <b>108</b>, <b>110</b> to control one or more exemplary algorithms and/or approaches such as timed_preArbitration at STEP <b>216</b>, for example, on the locks <b>128</b>.
0038The scope of the variable wait_quantum <b>126</b> and associated increment, decrement, minimum, and maximum values for the wait_quantum <b>126</b> in an example may be selected from narrow, intermediate, or wide scopes. An exemplary scope for the wait_quantum variable is the processor, for example, one wait_quantum variable per processor. For example, the wait_quantum <b>126</b> applies to the exemplary processor <b>108</b>. An exemplary implementation that maintains a wait_quantum <b>126</b> per processor may reduce and/or minimize cache misses. In an exemplary implementation that employs a wait_quantum <b>126</b> per processor, a plurality, all, and/or substantially all of the locks <b>128</b> referenced by a processor may employ the same wait_quantum <b>126</b>.
0039An illustrative description of an exemplary operation of an implementation of the computing system as the apparatus <b>100</b> is presented, for explanatory purposes. Turning to <figref idref="DRAWINGS">FIG. 4</figref>, an exemplary state flow <b>402</b> comprises an exemplary maximum number of two (2) as the selectable and/or configurable number N of direct spinners of the plurality of processors. The description herein is extendible and/or applies analogously to a number, variety, and/or ranges of exemplary maximum numbers of direct spinners and/or numbers of processors in a number, variety, and/or ranges of exemplary implementations of the apparatus <b>100</b>, as will be appreciated by those skilled in the art. Exemplary numbers of direct spinners comprise 2, 3 or 4. Exemplary numbers of processors comprise <b>32</b> through <b>2048</b>.
0040The plurality of processors of the computing system as the apparatus <b>100</b> in an example comprises a number up to a selectable and/or configurable number P, for example, processors <b>108</b>, <b>110</b>, <b>404</b>, <b>406</b>, <b>408</b>, . . . , PROCESSOR<sub>P </sub>of an exemplary implementation of the apparatus <b>100</b>.
0041At STATE <b>410</b>, processor <b>108</b> in an example is the owner of an exemplary lock <b>128</b> having previously acquired ticket number <b>1000</b> at an initial state, at which the value of serving was also <b>1000</b>, as will be appreciated by those skilled in the art. At STATES <b>412</b>, <b>414</b>, <b>416</b>, <b>418</b>, <b>420</b> in an example processors <b>110</b>, <b>404</b>, <b>406</b>, <b>408</b>, PROCESSOR<sub>P </sub>in an example attempt to acquire the same lock <b>128</b> and therefore acquire tickets <b>1001</b>, <b>1002</b>, <b>1003</b>, <b>1004</b>, and <b>1005</b>, respectively.
0042Referring to <figref idref="DRAWINGS">FIGS. 2 through 4</figref>, processor <b>110</b> in an example at STATE <b>412</b> performs STEP <b>212</b> by comparing its ticket number (<b>1001</b>) to the serving value (<b>1000</b>) and proceeding to become a direct spinner at STATE <b>422</b> because the difference between ticket and serving (<b>1</b>) is not greater than or equal to N (e.g., 2). Processor <b>404</b> in an example at STATE <b>414</b> performs STEP <b>212</b> by comparing its ticket number (<b>1002</b>) to the serving value (<b>1000</b>) and proceeding to STEP <b>214</b> because the difference between ticket and serving is equal to N (e.g., 2). The processor <b>404</b> in an example then determines that the difference is not greater than N (e.g., 2) and so proceeds to STEP <b>218</b>. The processor <b>404</b> in an example branches to preArbitration STEP <b>220</b>. Processor <b>404</b> in an example then proceeds to direct spinning at STATE <b>424</b>.
0043Processor <b>406</b> in an example compares its ticket number (<b>1003</b>) to the serving value (<b>1000</b>) and proceeds to STEPS <b>212</b> and <b>214</b> because the difference (3) is greater than N (e.g., 2). At STEP <b>214</b> in an example processor <b>406</b> branches to timed_preArbitration STEP <b>216</b>. The processor <b>406</b> at STEP <b>304</b> in an example determines the wait_time to be 1* wait_quantum <b>126</b>. The processor <b>406</b> in an example then waits for this amount of time at STEP <b>306</b> and STATE <b>426</b>. After waiting for the wait_quantum <b>126</b>, the processor <b>406</b> at STEP <b>308</b> in an example determines the new difference between ticket and serving. While the processor <b>406</b> was waiting, the processor <b>108</b> in an example released the lock <b>128</b> and incremented the serving value to <b>1001</b> at STATE <b>428</b>. Therefore, when the processor <b>406</b> in an example recalculates the difference between ticket and serving, the difference at STATE <b>432</b> is 2. Processor <b>406</b> in an example then proceeds from STEP <b>310</b> to STEP <b>312</b> and STEP <b>318</b>, exiting STEP <b>216</b> to become a direct spinner.
0044Processor <b>110</b> in an example while spinning directly on the spinlock at STATE <b>422</b>, detects at STEP <b>222</b> that processor <b>108</b> has incremented the serving value to <b>1001</b> at STATE <b>428</b>. When processor <b>110</b> in an example detects this change in the state of the spinlock, the processor <b>110</b> exits the direct spinning STATE <b>422</b> and becomes the new owner of the spinlock at STATE <b>430</b>.
0045Processor <b>408</b> in an example takes ticket <b>1004</b> at STATE <b>418</b> before processor <b>108</b> has released the lock <b>128</b> at STATE <b>428</b>. The processor <b>408</b> at STEP <b>210</b> in an example calculates the difference between ticket and serving to be 4. Processor <b>408</b> in an example then branches to timed_preArbitration STEP <b>216</b>. The processor <b>408</b> in an example calculates the wait_time at STEP <b>304</b> to be 2 times the wait_quantum <b>126</b>. Therefore, at STATE <b>434</b> the processor <b>408</b> in an example waits twice as long as processor <b>406</b> waited at STATE <b>426</b>. At the end of the wait by the processor <b>408</b>, the processor <b>108</b> in an example has incremented the serving value to <b>1001</b> and the processor <b>110</b> has further incremented the serving value to <b>1002</b> at STATE <b>436</b>. The processor <b>408</b> at STATE <b>438</b> in an example calculates 2 to be the new difference between ticket and serving. The processor <b>408</b> in an example determines that the difference 2 is equal to N (e.g., 2) and proceeds to direct spinning.
0046PROCESSOR<sub>P </sub>in an example takes ticket <b>1005</b> at STATE <b>420</b> before processor <b>108</b> has released the lock <b>128</b>. PROCESSOR<sub>P </sub>in an example calculates the difference between ticket and serving to be 5. PROCESSOR<sub>P </sub>in an example calculates the wait_time at STEP <b>304</b> to be 3 times the wait_quantum <b>126</b>. At STATE <b>440</b> PROCESSOR<sub>P </sub>waits 3 times the wait_quantum <b>126</b>. At the end of that wait time in an example the serving value has been incremented to <b>1003</b>. Therefore, the difference between ticket and serving is 2, equal to N (e.g., 2), so PROCESSOR<sub>P </sub>also becomes a direct spinner.
0047Processors <b>404</b>, <b>406</b>, <b>408</b> and PROCESSOR<sub>P </sub>in an example each become owners of the spinlock at STATES <b>442</b>, <b>446</b>, <b>450</b> and <b>456</b>, respectively, in response to the previous owner of the spinlock releasing the lock and incrementing the serving value in an analogous manner to the way that processor <b>108</b> released the lock at STATE <b>428</b> and processor <b>110</b> became the owner of the lock at STATE <b>430</b>. Processors <b>110</b>, <b>404</b>, <b>406</b>, <b>408</b> and PROCESSOR<sub>P </sub>in an example each release the spinlock and increment the serving value at STATES <b>436</b>, <b>444</b>, <b>448</b>, <b>452</b> and <b>458</b> in an analogous manner to the way processor <b>108</b> released the lock at STATE <b>428</b>.
0048An exemplary implementation employs a selectable and/or configurable number N of direct spinners for a spinlock as an exemplary lock <b>128</b>. More than one processor may spin directly on the lock. With n-direct-spinners, a configurable number of waiters for a spinlock may be allowed to spin directly on the lock. Additional waiters may be routed to pre-arbitration. An exemplary benefit is a heavily-contended lock will always have a processor ready to take the lock as soon as the lock becomes available. An exemplary implementation employs timed-prearbitration for a significant performance win.
0049An exemplary implementation employs timed prearbitration as an exemplary strategy for delaying processors waiting for a highly-contended spinlock as an exemplary lock <b>128</b> for a certain amount of time before the processors actively spin on the spinlock. The processors in an example avoid cache misses that may occur if the processors contend directly on the spinlock. The processors in an example may avoid being routed to the pre-arbitration algorithm, procedure, program, mechanism, application, code, and/or logic completely. Exemplary timed prearbitration in an example employs a ticket-serving mechanism to adaptively and/or heuristically determine an appropriate amount of time for a processor to delay before contending for the spinlock. The amount of time the processor spends in delay may be proportional to a distance to the front of the line of waiting processors, as may be determined by the difference between the ticket and the serving values.
0050After the processor delays for a while in an example the processor rechecks the ticket and serving values and determines if the processor should go into pre-arbitration or spin directly on the spinlock. If the time spent in delay is desirable and/or acceptable, the processor in an example may often, typically, and/or usually find that spinning directly on the lock is appropriate, thus avoiding the trip to pre-arbitration and the cache misses that may occur there. An exemplary interaction with an exemplary n-direct-spinners technique allows multiple direct spinners to give the waiting processor more latitude to decide that the processor should spin directly on the lock. Exemplary n-direct-spinners together with timed-prearbitration in an example combine to make a significant reduction in cache misses during lock acquisition.
0051An exemplary implementation employs adjustment and/or adaptation of the delay quantum <b>126</b>, for example, dynamically, to fit an observed behavior of the computing system as the apparatus <b>100</b>. For example, statistics are collected to track whether the quantum <b>126</b> currently in use caused the delayed processor to be early, late, or just right with regard to lock availability when the delay is finished. If the processor finishes the delay loop early, then the processor in an example enters the pre-arbitration algorithm, procedure, program, mechanism, application, code, and/or logic. In an example in connection with this case, the delay quantum <b>126</b> is increased. If the processor is late in an example then the processor discovers that the lock became available, so the processor became the owner while the processor was in the delay loop. In an example in connection with this case, the quantum <b>126</b> is decreased. Otherwise in an example the processor finds that the processor delayed just enough to be at or near the front of the line and no adjustment to the quantum <b>126</b> is made.
0052An exemplary implementation employs a self-tuning algorithm, procedure, program, mechanism, application, code, and/or logic enables a computing system as the apparatus <b>100</b> to wring out as many extraneous cache misses as possible in spinlock synchronization algorithm, procedure, program, mechanism, application, code, and/or logic. An exemplary implementation is located at the heart of the operating system and thus impacts how all system processes and customer applications perform. An exemplary resulting performance boost enables large multi-processor computing systems to achieve ever higher throughput levels in industry standard benchmarks and customer applications. Additional system performance in an example equates directly to higher value to the customer, which is reflected in the price they are willing to pay for the system.
0053An exemplary implementation comprises a processor <b>108</b>, <b>110</b> that upon a failure of an earlier attempt to directly acquire ownership of an access coordinator <b>128</b> for a resource <b>130</b> shared with one or more additional processors <b>108</b>, <b>110</b>, locally determines an amount to delay a later attempt to directly acquire ownership of the access coordinator <b>128</b>. Upon a failure of the later and/or a subsequent attempt to directly acquire ownership of the access coordinator <b>128</b> the processor <b>108</b>, <b>110</b> would enter into an indirect waiting arrangement for ownership of the access coordinator <b>128</b>.
0054The processor <b>108</b>, <b>110</b>, upon the failure of the earlier attempt to directly acquire ownership of the access coordinator <b>128</b>, locally determines the amount to delay the later attempt to directly acquire ownership of the access coordinator <b>128</b>. Upon an occurrence of the failure of the later attempt to directly acquire ownership of the access coordinator <b>128</b> the processor <b>108</b>, <b>110</b> would enter into the indirect waiting arrangement for ownership of the access coordinator <b>128</b>. The processor <b>108</b>, <b>110</b>, upon the failure of the later attempt to directly acquire ownership of the access coordinator <b>128</b>, locally determines an amount to delay the subsequent attempt to directly acquire ownership of the access coordinator <b>128</b>. Upon an occurrence of the failure of the subsequent attempt to directly acquire ownership of the access coordinator <b>128</b> the processor <b>108</b>, <b>110</b> would enter into the indirect waiting arrangement for ownership of the access coordinator <b>128</b>.
0055The access coordinator <b>128</b> for the resource <b>130</b> comprises one or more spinlocks <b>128</b> and/or one or more blocking locks <b>128</b> on the resource <b>130</b>. A plurality of processors <b>108</b>, <b>110</b> comprises the processor <b>108</b>, <b>110</b> and the one or more additional processors <b>108</b>, <b>110</b>. The plurality of processors <b>108</b>, <b>110</b> operates under a modified ticket-serving with prearbitration arrangement. The processor <b>108</b>, <b>110</b> locally determines the amount to delay the later attempt to directly acquire ownership of the access coordinator <b>128</b> through employment of a proportional relationship between the amount and a difference between ticket and serving values for the processor <b>108</b>, <b>110</b> on the access coordinator <b>128</b> under the modified ticket-serving with prearbitration arrangement. The access coordinator <b>128</b> for the resource <b>130</b> comprises a single spinlock <b>128</b> on the resource <b>130</b>.
0056The processor <b>108</b>, <b>110</b>, upon success of the later attempt to directly acquire ownership of the access coordinator <b>128</b> avoids one or more cache misses that would be associated with an occurrence of entry of the processor <b>108</b>, <b>110</b> into the indirect waiting arrangement for ownership of the access coordinator <b>128</b>. The indirect waiting arrangement for ownership of the access coordinator <b>128</b> comprises prearbitration for ownership of the access coordinator <b>128</b>. The processor <b>108</b>, <b>110</b>, upon success of the later attempt to directly acquire ownership of the access coordinator <b>128</b> avoids one or more cache misses that would be associated with an occurrence of entry of the processor <b>108</b>, <b>110</b> into the prearbitration for ownership of the access coordinator <b>128</b>. The processor <b>108</b>, <b>110</b> heuristically determines the amount to delay the later attempt to directly acquire ownership of the access coordinator <b>128</b>.
0057An exemplary implementation comprises a processor <b>108</b>, <b>110</b> that locally determines an amount of delay for an attempt by the processor <b>108</b>, <b>110</b> to directly acquire ownership of an access coordinator <b>128</b> for a resource <b>130</b> shared with one or more additional processors <b>108</b>, <b>110</b>. Upon a completion of the amount of delay the processor <b>108</b>, <b>110</b> adjusts a heuristic based on an occurrence of success or failure of the attempt to directly acquire ownership of the access coordinator <b>128</b>, to adapt a later attempt by the processor <b>108</b>, <b>110</b> to directly acquire ownership of the access coordinator <b>128</b>.
0058The processor <b>108</b>, <b>110</b>, upon an occurrence of the later attempt to acquire the ownership of the access coordinator <b>128</b>, locally determines a different amount to delay a subsequent attempt to directly acquire ownership of the access coordinator <b>128</b>. The processor <b>108</b>, <b>110</b> employs the heuristic to locally determine the different amount to delay the subsequent attempt to directly acquire ownership of the access coordinator <b>128</b>. The processor <b>108</b>, <b>110</b>, upon a determination of unnecessary duration of preliminary ownership of the access coordinator <b>128</b>, locally determines a reduced amount to delay a subsequent attempt to directly acquire ownership of the access coordinator <b>128</b>.
0059The processor <b>108</b>, <b>110</b>, upon a determination of premature attempt to acquire ownership of the access coordinator <b>128</b>, locally determines an increased amount to delay a subsequent attempt to directly acquire ownership of the access coordinator <b>128</b>. The delay for the attempt by the processor <b>108</b>, <b>110</b> to directly acquire ownership of the access coordinator <b>128</b> comprises a first delay portion and a second delay portion. The processor <b>108</b>, <b>110</b>, upon completion of the first delay portion, locally determines that additional waiting is beneficial and makes a determination of the second delay portion. Upon completion of the second delay portion the processor <b>108</b>, <b>110</b> executes the later attempt to directly acquire ownership of the access coordinator <b>128</b>.
0060One or more attempts by the processor <b>108</b>, <b>110</b> to directly acquire ownership of the access coordinator <b>128</b> comprise the attempt by the processor <b>108</b>, <b>110</b> to directly acquire ownership of the access coordinator <b>128</b>. Upon an occurrence of failure of the one or more attempts to directly acquire ownership of the access coordinator <b>128</b>, the processor <b>108</b>, <b>110</b> would enter into an indirect waiting arrangement for ownership of the access coordinator <b>128</b>. The access coordinator <b>128</b> for the resource <b>130</b> comprises one or more spinlocks <b>128</b>, one or more read/write spinlocks <b>128</b>, one or more blocking locks <b>128</b>, one or more read/write blocking locks <b>128</b>, one or more adaptive locks <b>128</b>, one or more mutexes <b>128</b>, one or more condition variables <b>128</b>, and/or one or more semaphores <b>128</b> on the resource <b>130</b>.
0061An exemplary implementation comprises a computer operating system <b>124</b> that coordinates ownership of a spinlock <b>128</b> for a resource <b>130</b> shared among a plurality of processors. Upon an occurrence of owned status of the spinlock <b>128</b> contemporaneous with a request for ownership of the spinlock <b>128</b> by a plural set of processors <b>108</b>, <b>110</b> of the plurality of processors <b>108</b>, <b>110</b>, the computer operating system <b>124</b> allows a plural subset number of processors <b>108</b>, <b>110</b> of the plural set of processors <b>108</b>, <b>110</b> to directly wait for ownership of the spinlock <b>128</b>. The computer operating system <b>124</b> causes one or more additional processors <b>108</b>, <b>110</b> of the plural set of processors <b>108</b>, <b>110</b> in excess of the plural subset number of processors <b>108</b>, <b>110</b>, to indirectly wait for ownership of the spinlock <b>128</b>.
0062Upon an occurrence of owned status of the spinlock <b>128</b> contemporaneous with a request for ownership of the spinlock <b>128</b> by a single processor <b>108</b>, <b>110</b> of the plurality of processors <b>108</b>, <b>110</b>, the computer operating system <b>124</b> allows the single processor <b>108</b>, <b>110</b> to directly wait for ownership of the spinlock <b>128</b>. The plural subset number of processors <b>108</b>, <b>110</b> comprises the single processor <b>108</b>, <b>110</b> and multiple processors <b>108</b>, <b>110</b>. Upon an occurrence of owned status of the spinlock <b>128</b> contemporaneous with the single processor <b>108</b>, <b>110</b> directly waiting for ownership of the spinlock <b>128</b> and a request for ownership of the spinlock <b>128</b> by the multiple processors <b>108</b>, <b>110</b> and the one or more additional processors <b>108</b>, <b>110</b> of the plural set of processors <b>108</b>, <b>110</b>, the computer operating system <b>124</b> allows the single processor <b>108</b>, <b>110</b> and the multiple processors <b>108</b>, <b>110</b> to directly wait for ownership of the spinlock <b>128</b> and causes the one or more additional processors <b>108</b>, <b>110</b> to indirectly wait for ownership of the spinlock <b>128</b>.
0063An implementation of the apparatus <b>100</b> in an example comprises a plurality of components such as one or more of electronic components, mechanical components, hardware components, and/or computer software components. A number of such components can be combined or divided in an implementation of the apparatus <b>100</b>. An exemplary component of an implementation of the apparatus <b>100</b> employs and/or comprises a set and/or series of computer instructions written in or implemented with any of a number of programming languages, as will be appreciated by those skilled in the art.
0064An implementation of the apparatus <b>100</b> in an example encompasses an article. The article comprises one or more computer-readable signal-bearing media. The article comprises means in the one or more media for one or more exemplary and/or desirable functions, approaches, and/or procedures.
0065An implementation of the apparatus <b>100</b> in an example employs one or more computer readable signal bearing media. A computer-readable signal-bearing medium in an example stores software, firmware and/or assembly language for performing one or more portions of one or more implementations. An example of a computer-readable signal bearing medium for an implementation of the apparatus <b>100</b> comprises the recordable data storage medium of the one or more memory locations and/or fabrics, for example, the memory fabric <b>106</b>, the caches <b>112</b>, <b>114</b>, and/or the main memories <b>116</b>, <b>118</b>. A computer-readable signal-bearing medium for an implementation of the apparatus <b>100</b> in an example comprises one or more of a magnetic, electrical, optical, biological, and/or atomic data storage medium. For example, an implementation of the computer-readable signal-bearing medium comprises one or more floppy disks, magnetic tapes, CDs, DVDs, hard disk drives, and/or electronic memory. In another example, an implementation of the computer-readable signal-bearing medium comprises a modulated carrier signal transmitted over a network comprising or coupled with an implementation of the apparatus <b>100</b>, for instance, one or more of a telephone network, a local area network (“LAN”), a wide area network (“WAN”), the Internet, and/or a wireless network.
0066The steps or operations described herein are examples. There may be variations to these steps or operations without departing from the spirit of the invention. For example, the steps may be performed in a differing order, or steps may be added, deleted, or modified.
0067Although exemplary implementation of the invention has been depicted and described in detail herein, it will be apparent to those skilled in the relevant art that various modifications, additions, substitutions, and the like can be made without departing from the spirit of the invention and these are therefore considered to be within the scope of the invention as defined in the following claims.
Contents3
5 sheets
Sheet 1 Sheet 2 Sheet 3 Sheet 4 Sheet 5
Every citation, both ways
| Document | Relation | Office | Cited during |
|---|---|---|---|
| US2013014120A1 | Cited by | United States of America | Pre-grant |
| US2024256517A1 | Cited by | United States of America | Search report |
| US11269692B2 | Cited by | United States of America | Applicant |
| US10476863B1 | Cited by | United States of America | Search report |
| US9658936B2 | Cited by | United States of America | Applicant |
| US9542236B2 | Cited by | United States of America | Search report |
| US2014280347A1 | Cited by | United States of America | Pre-grant |
| US2012102223A1 | Cited by | United States of America | Pre-grant |
| US2013174166A1 | Cited by | United States of America | Pre-grant |
| US9804949B2 | Cited by | United States of America | Applicant |
| WO2015114642A1 | Cited by | World Intellectual Property Organization (WIPO) | International search |
| US9864676B2 | Cited by | United States of America | Applicant |
| US2012159242A1 | Cited by | United States of America | Pre-grant |
| US9323652B2 | Cited by | United States of America | Applicant |
| US8595567B2 | Cited by | United States of America | Search report |
| US12204520B2 | Cited by | United States of America | Search report |
| US9772927B2 | Cited by | United States of America | Applicant |
| US9665474B2 | Cited by | United States of America | Applicant |
| US9767006B2 | Cited by | United States of America | Applicant |
| US10310915B2 | Cited by | United States of America | Applicant |
| US10178031B2 | Cited by | United States of America | Applicant |
| US9323651B2 | Cited by | United States of America | Applicant |
| US9436589B2 | Cited by | United States of America | Applicant |
| US9864672B2 | Cited by | United States of America | Applicant |
| US11258784B2 | Cited by | United States of America | Applicant |
| US2013227529A1 | Cited by | United States of America | Pre-grant |
| US9940207B2 | Cited by | United States of America | Search report |
| US9158597B2 | Cited by | United States of America | Search report |
| US9515916B2 | Cited by | United States of America | Search report |
| US2001014905A1 | Cites | United States of America | Pre-grant |
| US2003200457A1 | Cites | United States of America | Pre-grant |
| US2005144330A1 | Cites | United States of America | Pre-grant |
| US2005166018A1 | Cites | United States of America | Pre-grant |
| US2008010408A1 | Cites | United States of America | Pre-grant |
| US4896257A | Cites | United States of America | Pre-grant |
| US5790813A | Cites | United States of America | Pre-grant |
| US5829033A | Cites | United States of America | Pre-grant |
| US5911052A | Cites | United States of America | Pre-grant |
| US5966543A | Cites | United States of America | Pre-grant |
| US5978874A | Cites | United States of America | Pre-grant |
| US5987549A | Cites | United States of America | Pre-grant |
| US6047316A | Cites | United States of America | Pre-grant |
| US6173442B1 | Cites | United States of America | Pre-grant |
| US6453354B1 | Cites | United States of America | Pre-grant |
| US6567873B1 | Cites | United States of America | Pre-grant |
| US6782440B2 | Cites | United States of America | Pre-grant |
| US6886162B1 | Cites | United States of America | Pre-grant |
| US6973455B1 | Cites | United States of America | Pre-grant |
| US7051026B2 | Cites | United States of America | Pre-grant |
| US7058948B2 | Cites | United States of America | Pre-grant |
| US7062615B2 | Cites | United States of America | Pre-grant |
| US7069330B1 | Cites | United States of America | Pre-grant |
| US7069560B1 | Cites | United States of America | Pre-grant |
| US7076624B2 | Cites | United States of America | Pre-grant |
| US7080143B2 | Cites | United States of America | Pre-grant |
2 members in 1 office
Priority claims2
| Document | Office | Kind | Date |
|---|---|---|---|
| 55210306 | United States of America | A | |
| US20060552103 | – | – | – |
Members2
| Document | Office | Kind | |
|---|---|---|---|
| US2008098180A1 | United States of America | A1 | |
| US7861042B2 | United States of America | B2 |
42 transactions on the USPTO file
Allowed after 2 non-final rejections.
- Non-final rejections
- 2
- Final rejections
- 0
- RCEs
- 0
- Appeals
- 0
Over time
Point at a mark for the transactionTransactions
| Event | Code | |
|---|---|---|
| Payment of Maintenance Fee, 12th Year, Large EntityM1553 | M1553 | |
| Payment of Maintenance Fee, 8th Year, Large EntityM1552 | M1552 | |
| Correspondence Address ChangeC.ADB | C.ADB | |
| Recordation of Patent Grant MailedPGM/ | PGM/ | |
| Patent Issue Date Used in PTA CalculationAllowedPTAC | PTAC | |
| Email NotificationEML_NTR | EML_NTR | |
| Issue Notification MailedAllowedWPIR | WPIR | |
| Dispatch to FDCD1935 | D1935 | |
| Application Is Considered Ready for IssuePILS | PILS | |
| Issue Fee Payment VerifiedN084 | N084 | |
| Issue Fee Payment ReceivedIFEE | IFEE | |
| Electronic ReviewELC_RVW | ELC_RVW | |
| Email NotificationEML_NTF | EML_NTF | |
| Mail Notice of AllowanceAllowedMN/=. | MN/=. | |
| Notice of Allowance Data Verification CompletedAllowedN/=. | N/=. | |
| Date Forwarded to ExaminerFWDX | FWDX | |
| Response after Non-Final ActionA... | A... | |
| Electronic ReviewELC_RVW | ELC_RVW | |
| Email NotificationEML_NTF | EML_NTF | |
| Mail Non-Final RejectionNon-final rejectionMCTNF | MCTNF | |
| Non-Final RejectionNon-final rejectionCTNF | CTNF | |
| Date Forwarded to ExaminerFWDX | FWDX | |
| Response after Non-Final ActionA... | A... | |
| Case Docketed to Examiner in GAUDOCK | DOCK | |
| Electronic ReviewELC_RVW | ELC_RVW | |
| Email NotificationEML_NTF | EML_NTF | |
| Mail Non-Final RejectionNon-final rejectionMCTNF | MCTNF | |
| Non-Final RejectionNon-final rejectionCTNF | CTNF | |
| Case Docketed to Examiner in GAUDOCK | DOCK | |
| Case Docketed to Examiner in GAUDOCK | DOCK | |
| Email NotificationEML_NTR | EML_NTR | |
| PG-Pub Issue NotificationPG-ISSUE | PG-ISSUE | |
| Case Docketed to Examiner in GAUDOCK | DOCK | |
| IFW TSS Processing by Tech Center CompleteTSSCOMP | TSSCOMP | |
| Application Dispatched from OIPEOIPE | OIPE | |
| Application Is Now CompleteCOMP | COMP | |
| Cleared by OIPE CSRL194 | L194 | |
| IFW Scan & PACR Auto Security ReviewSCAN | SCAN | |
| Information Disclosure Statement consideredIDSC | IDSC | |
| Electronic Information Disclosure StatementEIDS. | EIDS. | |
| Information Disclosure Statement (IDS) FiledWIDS | WIDS | |
| Initial Exam Team nnIEXX | IEXX |
4 recorded assignments at the USPTO, latest first
- Now
Now: Held by
VALTRUS INNOVATIONS LTD - 2021-11-18
Assignment of assignors interest.
- From
- OT PATENT ESCROW, LLC
- To
- VALTRUS INNOVATIONS LIMITED
Recorded 2021-11-18, Signed 2021-11-02
- 2021-01-26
Patent assignment, security interest, and lien agreement
Security interest- From
- HEWLETT PACKARD ENTERPRISE DEVELOPMENT LPHEWLETT PACKARD ENTERPRISE COMPANY
- To
- OT PATENT ESCROW, LLC
Recorded 2021-01-26, Signed 2021-01-15
- 2015-11-09
Assignment of assignors interest.
Ownership change- From
- HEWLETT-PACKARD DEVELOPMENT COMPANY LP
- To
- HEWLETT PACKARD ENTERPRISE DEVELOPMENT LP
Recorded 2015-11-09, Signed 2015-10-27
- 2006-10-23
Assignment of assignors interest.
Ownership change- From
- LARSON DOUGLAS VJOHNSON ROBERT
- To
- HEWLETT-PACKARD DEVELOPMENT COMPANY LP
Recorded 2006-10-23, Signed 2006-10-23
9 legal events, as the office reported them to INPADOC
Over the term
Point at a mark for the eventEvents
| Event | Code | |
|---|---|---|
| Maintenance fee paymentMAFP | MAFP | |
| AssignmentAS | AS | |
| AssignmentAS | AS | |
| AssignmentAS | AS | |
| Maintenance fee paymentMAFP | MAFP | |
| AssignmentAS | AS | |
| Fee paymentFPAY | FPAY | |
| Information on status: patent grantGrantedPATENTED CASESTCF | STCF | |
| AssignmentAS | AS |
Numbers
- Publication
- 20080098180
- Publication, DOCDB
- 2008098180
- Publication, EPODOC
- US2008098180
- Application
- 11552103
- Application, DOCDB
- 55210306
- Application, EPODOC
- US20060552103
Titles
- English
- PROCESSOR ACQUISITION OF OWNERSHIP OF ACCESS COORDINATOR FOR SHARED RESOURCE
Patent term adjustment
- A delay
- +630 daysthe office missed an examination deadline
- B delay
- +431 dayspendency past three years
- Overlap
- −159 daysdelays counted once
- Net adjustment
- 902 days
Classification
- CPC, 1
- G06F15/16
- IPC, 1
- G06F12 14
- USPC, 1
- 711150000