Brendon Scheinman
2b33d57148
ck_rwcohort: Removed extra whitespace
12 years ago
Brendon Scheinman
cbfa095108
Merge branch 'master' of https://github.com/sbahra/ck
12 years ago
Samy Al Bahra
2ba3f59374
ck_spinlock: Migrate MCS to ck_pr_fence_X_Y.
...
This includes fixing acquire semantics on mcs_lock fast path.
This represents an additional fence on the fast path for
acquire semantics post-acquisition.
12 years ago
Samy Al Bahra
8540821f3f
ck_spinlock: Minor style changes to return statement.
12 years ago
Samy Al Bahra
08d13deaf4
ck_brlock: Migrate to ck_pr_fence_X_Y.
12 years ago
Samy Al Bahra
214d7aed66
ck_pr: Implement ck_pr_fence_atomic in MD ck_pr.
12 years ago
Samy Al Bahra
8320a4a6f4
ck_pr: Comment elaboration on ck_pr_fence_atomic semantics.
...
More specifically, note that in memory models where atomic
operations do not have serializing effects that atomic
read-modify-write operations are modeled as store operations.
12 years ago
Samy Al Bahra
3f06a4e23a
ck_rwlock: Use ck_pr_fence_atomic.
12 years ago
Samy Al Bahra
ffd22e57b8
ck_bytelock: Use ck_pr_fence_atomic.
12 years ago
Samy Al Bahra
a4220f2377
ck_pr: Remove ck_pr_fence_load_depends from GCC port.
12 years ago
Samy Al Bahra
d1dd6611ac
ck_pr: Add ck_pr_fence_atomic interface.
...
These operations serialize atomic-RMW operations with respect
to each other, loads and stores. In addition to this, the
load_depends implementations have been removed.
12 years ago
Samy Al Bahra
8face51e0d
ck_spinlock: Acquire semantics for anderson spinlock.
12 years ago
Samy Al Bahra
f87e0caf99
ck_bytelock: Migrate to ck_pr_fence_X_Y.
12 years ago
Samy Al Bahra
83bc7f9f54
ck_epoch: Migrate to ck_pr_fence_X_Y.
12 years ago
Samy Al Bahra
fe7e5ac5b1
ck_hp_stack: Migrate to ck_pr_fence_X_Y functions.
12 years ago
Samy Al Bahra
01f89ee691
ck_hp_fifo: Migrate to ck_pr_fence_X_Y functions.
12 years ago
Samy Al Bahra
b025722fbd
ck_brlock: Migrate to ck_pr_fence_X_Y interface.
12 years ago
Samy Al Bahra
5506ad2744
ck_pr: Move ck_pr_barrier to compiler port.
12 years ago
Samy Al Bahra
cc8c3fb2db
ck_pr/gcc: Fix style issue.
12 years ago
Samy Al Bahra
8311e9fcb4
ck_pr: Update GCC port and change ck_pr dependency path.
...
The compiler-specific ck_pr is now unconditionally included.
It currently implements things like compiler barriers.
12 years ago
Samy Al Bahra
44b769963f
ck_pr: ck_pr_fence_X_Y interface has been added.
...
ck_pr_fence_{load_load,store_store,load_store,store_load} operations
have been added. In addition to this, it is no longer the responsibility
of architecture ports to determine when to emit a specific fence. Instead,
the underlying port will always emit the necessary instructions to
enforce strict ordering. The higher-level include/ck_pr implementation will
enforce whether or not a fence is necessary to be emitted according to
the memory model specified by ck_md (CK_MD_{TSO,RMO,PSO}).
In other words, only ck_pr_fence_strict_* is implemented by the MD-ck_pr
port.
12 years ago
Brendon Scheinman
dcdc6dd100
ck_rwcohort: Fixed indentation and looping logic and added initial documentation
12 years ago
Brendon Scheinman
444df7dfe5
Merge branch 'master' of https://github.com/sbahra/ck
12 years ago
Samy Al Bahra
855a1472a8
ck_ht: Add ck_ht_reset_size_spmc operation.
...
The ck_ht_reset_size_spmc operation takes an additional argument
that allows the user to specify the size of the new generation
of the hashtable.
12 years ago
Samy Al Bahra
73531e9e48
ck_hs: Add ck_hs_reset_size operation.
...
The ck_hs_reset_size operation takes an additional argument
that allows the user to specify the size of the new generation
of the hashset.
12 years ago
Samy Al Bahra
4132ec4998
ck_epoch: Add ck_epoch_reclaim function.
...
This function allows for explicit execution of all
deferred callbacks in an epoch_record. The primary
motivation is currently for performance profiling
but there are other use-cases where best-effort
semantics could be applied.
12 years ago
Brendon Scheinman
cc4b248bcb
ck_rwcohort: Renamed ck_rwcohort namespace
12 years ago
Brendon Scheinman
e0f46e6045
merged from upstream repo
12 years ago
Brendon Scheinman
0d20391563
ck_rw_cohort: Added benchmark tests for reader-writer cohort locks
12 years ago
Brendon Scheinman
f693a16253
ck_rw_cohort: Added neutral reader-writer lock
12 years ago
Brendon Scheinman
21750b9321
ck_rw_cohort: Added read-preference logic and updated validation test to use it
12 years ago
Samy Al Bahra
1201e09577
ck_ring: Remove stale comment.
12 years ago
Brendon Scheinman
f93369c4fc
ck_rw_cohort: Removed backwards jump
12 years ago
Brendon Scheinman
a352b46d0b
ck_rw_cohort: renamed ck_rw_cohort namespace
12 years ago
Samy Al Bahra
011a9751a6
ck_queue: Add traversal-safe SPMC STAILQ.
12 years ago
Samy Al Bahra
5a13fddf70
ck_hp_fifo: Style fixes.
12 years ago
Samy Al Bahra
7980489eaf
ck_hp_stack: Style fixes.
12 years ago
Samy Al Bahra
5c483e3b1c
ck_hp: hp_acquire patterns require strict fences under TSO.
...
Several counter-examples were found which break in the
presence of store-to-load re-ordering. Strict fence
semantics are necessary.
Thanks to Paul McKenney for helpful discussions.
12 years ago
Samy Al Bahra
e827557ee9
ck_hs: Whitespace change.
12 years ago
Samy Al Bahra
d6fefccd6e
ck_pflock: Update comment, implementation is not so naive now.
12 years ago
Samy Al Bahra
676f8fed88
Merge branch 'cohort_trylock' of git://github.com/bscheinman/ck
12 years ago
Samy Al Bahra
878b8e6321
ck_ring: Correct CK_RING_SPMC_ENQUEUE_SIZE typo.
12 years ago
Samy Al Bahra
67381af3c5
ck_ring: Expose *_size variants to type-specialized ck_ring.
...
Added:
- CK_RING_ENQUEUE_SPSC_SIZE
- CK_RING_ENQUEUE_SPMC_SIZE
12 years ago
Samy Al Bahra
45f648bd33
ck_ring: Add *_size_* ck_ring enqueue operations.
...
These variants of ck_ring_enqueue_* return the snapshot of queue
length with respect to the linearization point. This can be used to
extract ring size without incurring additional cacheline invalidation
overhead from the writer.
12 years ago
Brendon Scheinman
646cb2cb06
ck_cohort_rw: Removed unused member variable
12 years ago
Samy Al Bahra
86884ed574
ck_fifo_mpmc: Fix NULL deference when re-using nodes.
...
If a FIFO entry is being re-used, it is possible for NULL
assignment to be triggered due to race with enqueue.
12 years ago
Samy Al Bahra
c4e50a193a
ck_fifo: Style fixes.
12 years ago
Brendon Scheinman
63bfa0d353
ck_cohort_rw: Reduced line wrapping
12 years ago
Brendon Scheinman
5e1b614108
ck_cohort_rw: Initial implementation with validation test.
...
I still need to implement benchmark tests and write documentation. The reader-writer cohort locks also required that I add a method to the existing ck_cohort framework to determine whether or not a cohort lock is currently in a locked state.
12 years ago
Brendon Scheinman
6441c90cfe
Merge branch 'master' of https://github.com/sbahra/ck
12 years ago
Brendon Scheinman
3c8728b214
ck_cohort: Added trylock support to cohort framework
12 years ago
Samy Al Bahra
4b9badd440
ck_cohort: Remove unnecessary whitespace.
12 years ago
Brendon Scheinman
62c121f500
ck_cohort: Added example code to man page
12 years ago
Samy Al Bahra
c393a97cb7
ck_pflock: Fix Copyright typo from original patch.
12 years ago
Samy Al Bahra
f6a53fd9de
ck_cohort: First-cut implementation of generalized cohort interface.
...
This work was contributed by Brendon Scheinman. This work is based
off "Lock Cohorting: A General Technique for Designing NUMA Locks".
12 years ago
Samy Al Bahra
060b922dc2
ck_pflock: Whitespace change.
...
Move acquire semantics comment block on read_unlock beneath
exit label.
12 years ago
Samy Al Bahra
aec2797d27
ck_pflock: Load acquire semantics are sufficient for read_unlock.
...
Also, make sure to implement acquire semantics if there are no
contending writers.
12 years ago
Samy Al Bahra
54845bb8e7
ck_pflock: Phase-fair read-write lock implementation.
...
John Wittrock has contributed a phase-fair reader-writer
lock implementation. These locks allow phase fairness
guarantees between readers and writers. This work includes
additional changes and clean-up.
Follow-up work is expected.
Thanks to John Wittrock for patches and Professor Gabriel
Parmer (http://www.seas.gwu.edu/~gparmer/ ) for advising.
12 years ago
Samy Al Bahra
7d3fd9d227
ck_fifo: Get rid of load_depends usage for now.
...
Until a target pops up with a requirement for load_depends(),
the cost is not worth it for now.
12 years ago
Samy Al Bahra
b7d258b219
ck_pr/gcc: ck_pr_fence_load_depends should be heavy-weight on catch-all target.
12 years ago
Samy Al Bahra
d09e48daed
ck_spinlock: Only enable trylock path for TSO architectures at the moment.
12 years ago
Samy Al Bahra
27d454248d
ck_spinlock: Add ticket lock with trylock operation.
...
Upon popular request, added a variant of the ticket spinlock
with trylock support. This is pending additional verification
on other architectures besides x86*. It is still unclear whether
this implementation will be the default as it is has slower
fast path.
Add trylock support to the ck_spinlock validation tests.
It currently only tests ck_spinlock_ticket_t trylock
functionality if available.
12 years ago
Joao Fernandes
086ebf7126
ck_pr: moving PPC32 to RMO.
...
Signed-off-by: Joao Fernandes <mail@joaofernandes.eu>
12 years ago
Samy Al Bahra
8c53de1e70
ck_rwlock: Add documentation on visibility semantics.
12 years ago
Samy Al Bahra
1ea5769fd4
ck_rwlock: Improve code legibility.
12 years ago
Samy Al Bahra
334b15e6e0
ck_bytelock: Acquire semantics on read.
12 years ago
Samy Al Bahra
038b3d816d
ck_rwlock: Forgot to add acquire on operation success.
12 years ago
Samy Al Bahra
0598307186
whitespace: Various style changes.
12 years ago
Abel Mathew
25658c4f5f
ck_queue: Fix CK_LIST_INSERT_HEAD.
...
CK_LIST_INSERT_HEAD was incorrectly managing prev
pointer on insertion to non-empty list. This bug
would cause erroneous behavior on CK_LIST_REMOVE
to non-head elements. Unit test will be updated
for this regression.
12 years ago
Samy Al Bahra
33a9222923
legal: Update Copyright statements.
12 years ago
Samy Al Bahra
d29ac5afdb
ck_bytelock: Fix downgrade path from writer to reader.
...
An off-by-one was introduced in downgrade path from writer.
This can cause deadlock if a writer downgrades from a write lock.
Pointed out by Jeffrey Birnbaum <jmb...@...>.
12 years ago
Samy Al Bahra
c4149c72b4
ck_ring: Use regular assignment in type specialized ck_ring initialization.
12 years ago
Samy Al Bahra
89cb712ffa
ck_ring: Memoize mask across all operations.
12 years ago
Samy Al Bahra
8519aaf771
ck_ring: Memoize mask for SPMC operations.
12 years ago
Samy Al Bahra
b54ae5c4ac
ck_ring: Add a work-around for compiler bug(s) in ck_ring_dequeue_spmc.
...
Both LLVM-backed compilers and GCC incorrectly treat
a barrier-sandwiched load as a loop invariant in dequeue_spmc.
Forcing volatile atomic load semantics generates the right
thing.
Thanks to Devon O'Dell and Abel Mathew for help in catching
this issue.
12 years ago
Samy Al Bahra
0631e396e0
ck_backoff: Replace ck_backoff_eb with ck_backoff_gb.
...
The distinction between additive/exponential implementation
and geometric implementation does little but confuse users.
The terminology used in ck_backoff now reflects terminology
used in literature.
ck_backoff_gb has been removed.
12 years ago
Samy Al Bahra
b37ce19976
ck_pr/x86_64: GCC will attempt immediate expansion on double.
...
Break out double functionality to not use immediate expansion
at all.
Pointed out by Abel Mathew <amathew@appnexus...>.
12 years ago
Samy Al Bahra
0c56b1b8c6
ck_epoch: Remember to mark entry availability on unregister.
...
Pointed out by Matt Johnson (johnso87@crhc....>.
12 years ago
Samy Al Bahra
93684f77c1
ck_pr: Use CK_CC_INLINE instead of inline keyword for ck_pr_barrier.
12 years ago
Samy Al Bahra
de0597d2aa
ck_bitmap: Add comment for ck_bitmap_size.
12 years ago
Samy Al Bahra
849f938973
ck_ring: Add parameterized version of ck_ring_trydequeue.
12 years ago
Samy Al Bahra
7a99585f9e
ck_ring: No need for volatile load on dequeue_spmc.
12 years ago
Samy Al Bahra
01dc51db65
ck_ring: Add trydequeue variant.
12 years ago
Samy Al Bahra
ca8be0858c
ck_pr: Re-include port selection logic.
12 years ago
Samy Al Bahra
1c7b8811c8
ck_pr/gcc: Remove useless assignment from volatile load.
12 years ago
Samy Al Bahra
a9ed19303f
ck_pr/gcc: Adopt const semantics for load/store in GCC port.
12 years ago
Samy Al Bahra
6de54d6aa5
ck_pr/x86_64: Use correct target for load_64_2.
12 years ago
Samy Al Bahra
12da4128ff
ck_pr: Adopt const qualifer for load/store.
...
We will adopt these semantics for the rest of _ptr
family at some point in the future as well.
12 years ago
Samy Al Bahra
055a7fd5db
ck_ring: Add wrapper functions for parameterized SPMC ring.
12 years ago
Samy Al Bahra
68b33e56d8
ck_ring: Add parameterized version of SPMC ring.
12 years ago
Samy Al Bahra
7f35cbee1b
ck_ring: Use SPSC enqueue as SPMC enqueue.
12 years ago
Samy Al Bahra
5d1d850f44
ck_ring: Adopt semantics identical to spmc counter semantics.
12 years ago
Samy Al Bahra
77a3bd3126
ck_ring: Move overflow check to producer side.
...
unsigned int-sized counters will be used on producer
and consumer side. This is necessary to allow a ring
to be used on multiple workloads.
12 years ago
Samy Al Bahra
d595bafea7
ck_ring: Serialize producer snapshot with respect to consumer.
12 years ago
Samy Al Bahra
d705e02b76
ck_ring: Replace MPMC variant with SPMC variant for starters.
...
Immediate use-case is SPMC. Next is MPSC, then I will generalize
to MPMC (unfortunately, I don't have an algorithm that avoids CAS2
yet for MPMC).
12 years ago
Samy Al Bahra
bb48f602ff
ck_ring: Add note regarding correctness so people don't both verifying it.
...
Original version is susceptible to several problems, it is whack.
12 years ago
Samy Al Bahra
68e6752e53
ck_ring: Due to popular request, add MPMC variants of enqueue/dequeue.
...
Fencing semantics are heavier-weight than they need to be.
12 years ago
Samy Al Bahra
957e4aec5d
ck_brlock: Fix typo.
12 years ago
Samy Al Bahra
b631e3aa23
ck_brlock: Enable FAS serialization only on x86.
...
Other architectures, even TSO ones, pay a heavier flush
cost.
12 years ago
Samy Al Bahra
2bdc231288
ck_brlock: Serialize on atomic operation on read acquisition.
...
10% improvement for reader acquisition latency on TSO architectures
implementing wait-free FAS.
12 years ago