[dpdk-dev] [PATCH 0/4] Address reader-writer concurrency in rte_hash
Wang, Yipeng1
yipeng1.wang at intel.com
Fri Sep 28 01:45:31 CEST 2018
Hi Honnappa,
Reply inlined:
>-----Original Message-----
>
> Currently, reader-writer concurrency problems in rte_hash are
> addressed using reader-writer locks. Use of reader-writer locks
> results in following issues:
>
> 1) In many of the use cases for the hash table, writer threads
> are running on control plane. If the writer is preempted while
> holding the lock, it will block the readers for an extended period
> resulting in packet drops. This problem seems to apply for platforms
> with transactional memory support as well because of the algorithm
> used for rte_rwlock_write_lock_tm:
>
> static inline void
> rte_rwlock_write_lock_tm(rte_rwlock_t *rwl)
> {
> if (likely(rte_try_tm(&rwl->cnt)))
> return;
> rte_rwlock_write_lock(rwl);
> }
>
> i.e. there is a posibility of using rte_rwlock_write_lock in
> failure cases.
[Wang, Yipeng] In our test, TSX failure happens very rarely on a TSX platform. But we agree
that without TSX, the current rte_rwlock implementation may make the writer to
hold a lock for a period of time.
> 2) Reader-writer lock based solution does not address the following
> issue.
> rte_hash_lookup_xxx APIs return the index of the element in
> the key store. Application(reader) can use that index to reference
> other data structures in its scope. Because of this, the
> index should not be freed till the application completes
> using the index.
[Wang, Yipeng] I agree on this use case. But I think we should provide new API functions for deletion
to users who want this behavior,
without changing the meaning of current API if that is possible.
> Current code:
> Cores Lookup Lookup
> with add
> 2 474 246
> 4 935 579
> 6 1387 1048
> 8 1766 1480
> 10 2119 1951
> 12 2546 2441
>
> With this patch:
> Cores Lookup Lookup
> with add
> 2 291 211
> 4 297 196
> 6 304 198
> 8 309 202
> 10 315 205
> 12 319 209
>
[Wang, Yipeng] It would be good if you could provide the platform information on these results.
Another comment is as you know we also have a new extension to rte_hash to enable extendable
buckets and partial-key hashing. Thanks for the comments btw. Could you check if your lockless
scheme also applies to those extensions?
More information about the dev
mailing list