On 8 December 2015 at 12:42, Bill Fischofer <bill.fischo...@linaro.org>
wrote:

> This is an interesting topic.  I'd like to discuss this a bit during
> today's ODP public call.
>
> I think the issue is that while a ring is a very useful implementation
> construct its semantics are very SW centric.
>
But isn't the use case here SW centric?


> Perhaps there's opportunity here for a new Queue type that would permit an
> implementation to implement the queue API as a ring for additional
> performance?
>
I think it is a bad idea to overload the ODP queue with another type of
usage and implied implementation. Better to define a new ODP object.

What are the real requirements of the "ring" as used by the cuckoo hash
design? Enqueue/dequeue operations. Fixed size is OK? Storing arbitrary
objects (not just ODP events)?



>   The scheduler itself could use this since its use of queues is subject
> to the same issues.
>
> On Mon, Dec 7, 2015 at 11:39 PM, 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
>> 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.
>>
>>
>>         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.
>>
>> 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.
>>
>>
>>
>>
>>
>>
>> _______________________________________________
>> 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
>
>
_______________________________________________
lng-odp mailing list
lng-odp@lists.linaro.org
https://lists.linaro.org/mailman/listinfo/lng-odp

Reply via email to