On 8 December 2015 at 06:39, HePeng <xnhp0...@icloud.com> wrote:

> Hi Maxim,
>         I implement a new version of cuckoo hash based on the ODP
> buffer/pool.
>
>         As I’ve mentioned earlier, the use of ring in cuckoo hash is like
> to the use of
> a container, e.g. a queue in C++ STL.  In current ODP implementation, I
> found that
> the ODP queue is implemented more likely a facility for transmitting
> objects, not
>
ODP queues are for storing ODP events and passing them from producer to
consumer (which may be SW threads and also HW blocks).


> a container to store objects. Look at the ODP queue enqueue interface:
>
>         int odp_queue_enq(odp_queue_t queue, odp_event_t ev);
>
> the *odp_event_t* is related to the events, but I only want to use
> odp_queue to
> storing and retrieving objects, any objects.
>
Using ODP HW abstractions (e.g. ODP queues, ODP pools) doesn't seem optimal
for storing any type of SW objects.


>
>
>         So I use ODP buffer/pool interfaces instead of ODP queue
> for the new cuckoo hash implementation.
>
>         However, compared to the previous implementation based on ring,
> this version
> suffers a serious performance degradation. The evaluation is carried out
> on a Intel
> servers. I test lookup time for 1000 lookups on a table storing 1 million
> items.
> The ODP buffer/pool version suffers at least a 2x performance degradation.
>
Which ODP implementation are you using? ODP/DPDK or linux-generic?


> This is the buffer/pool version, for 1M insert, and 1000 lookup time:
>
> Average insert time = 2.383836, lookup time = 0.000353,
>
> This is the ring version.
>
> Average insert time = 1.629115, lookup time = 0.000098
>
>         This performance degradation stems from the heavy implementation of
>  ODP buffer/pool. In the ring based one, all the key is stored in a big
> array, and
> the ring only stores the array indexes of each key. Keys are retrieved
> using array indexes.
> In the new one, I use ODP buffer to store the key content. Keys are
> retrieved by
> dereferencing a *odp_buffer_t*  handle.
>
>         With this high performance degradation, I suggest moving ring into
> the odp/api
> as a container implementation, and use the previous implementation of
> cuckoo hash.
>
Is the ODP (I think the heritage goes back to BSD) ring optimal for this?


>
>
>
>
>
>
> _______________________________________________
> lng-odp mailing list
> lng-odp@lists.linaro.org
> https://lists.linaro.org/mailman/listinfo/lng-odp
>
_______________________________________________
lng-odp mailing list
lng-odp@lists.linaro.org
https://lists.linaro.org/mailman/listinfo/lng-odp

Reply via email to