Messages in this thread | | | Date | Mon, 9 Oct 2017 06:08:27 -0700 | From | Davidlohr Bueso <> | Subject | Re: [PATCH v7 5/6] lib/dlock-list: Enable faster lookup with hashing |
| |
On Thu, 05 Oct 2017, Waiman Long wrote:
>Insertion and deletion is relatively cheap and mostly contention >free for dlock-list. Lookup, on the other hand, can be rather costly >because all the lists in a dlock-list will have to be iterated. > >Currently dlock-list insertion is based on the cpu that the task is >running on. So a given object can be inserted into any one of the >lists depending on what the current cpu is. > >This patch provides an alternative way of list selection. The caller >can provide a object context which will be hashed to one of the list >in a dlock-list. The object can then be added into that particular >list. Lookup can be done by iterating elements in the provided list >only instead of all the lists in a dlock-list.
Unless I'm misusing the api, I could not find a standard way of iterating a _particular_ list head (the one the dlock_list_hash() returned). This is because iterators always want the all the heads.
Also, in my particular epoll case I'd need the head->lock _not_ to be dropped after the iteration, and therefore is pretty adhoc. Currently we do:
dlist_for_each_entry() { // acquire head->lock for each list } // no locks held dlist_add()
I'm thinking perhaps we could have dlist_check_add() which passes a callback to ensure we want to add the node. The function could acquire the head->lock and not release it until the very end.
Thanks, Davidlohr
| |