Well, looks like I’m a bit confused with what is meant under the “striped pool”.

Vladimir, referring to your explanation

> Yes, "striped pool" is a thread pool where every thread operate on a single
> queue.

please answer on the following:

- Does a queue belong to a specific cache partition? In other words, every 
partition will have its own processing thread which is similar to what HZ and 
VoltDB do.

- If the answer to the question above is negative then how do we decide where a 
specific cache message should fall for processing?


—
Denis

> On Dec 16, 2016, at 3:39 AM, Vladimir Ozerov <voze...@gridgain.com> wrote:
> 
> Andrey,
> 
> Yes, "striped pool" is a thread pool where every thread operate on a single
> queue. This is the only similarity with FJP, as we do not perform real
> fork-join in our pools. Having said that, I do not see why we might want to
> compare our pool with FJP.
> 
> As per throughput - it is improved because instead of accessing a
> single *BlockingQueue
> *based on *ReentrantLock*, every thread has separate queue. And it is
> designed in a way, that under load NIO threads usually enqueue tasks and
> worker threads dequeue tasks without blocking, and even without CAS-loops,
> thanks to MPSC semantics.
> 
> Vladimir.
> 
> On Fri, Dec 16, 2016 at 2:21 PM, Andrey Mashenkov <
> andrey.mashen...@gmail.com> wrote:
> 
>> Vladimir,
>> 
>> As I understand "striped pool" is a array of single-threaded pools. Do you
>> have an understanding why throughput increased up to 40%?
>> It looks like it is due to every thread has its own task queue.
>> 
>> As far as I know, there is ForkJoinPool in JDK, FJP implements
>> ExecutorService interface, has striped tasks queue, has task-stealing
>> mechanics.
>> 
>> Can we run Ignite performance tests b\w using "striped pool" and FJP?
>> 
>> On Fri, Dec 16, 2016 at 11:17 AM, Vladimir Ozerov <voze...@gridgain.com>
>> wrote:
>> 
>>> Folks,
>>> Can we move all discussions aside of pool config to separate threads,
>>> please? :-)
>>> 
>>> Dima,
>>> I heard your concern about configuration complexity. But I do not see any
>>> problem at all. Whether to use striped pool or not is a matter of
>>> fine-grained tuning. We will set sensible defaults (i.e. enabled striped
>>> pool), so 99% of users will never know that a concept of "stiped pool"
>> even
>>> exists.
>>> 
>>> Striped and non-striped approaches have their own pros and cons.
>>> 
>>> Striped:
>>> + Better overall throughput (up to +40% compared to non-striped);
>>> - Less predictable latency - user can have bad numbers even on moderate
>>> load (e.g. consider updates on a large affinity co-located object graph).
>>> Benchmarks demonstrate this clearly.
>>> - Higher memory footprint, because in striped mode we pre-start all the
>>> threads. On high-end machines it may end up in wasting of hundrends of
>>> megabytes of RAM.
>>> - As a result of previous point, it is not well-suited for clients, which
>>> may require small memory footprint and low startup time.
>>> 
>>> Non-striped:
>>> - Worse throughput due to very high contention on BlockingQueue.
>>> + No waste on idle threads.
>>> 
>>> I would propose the following final design for this:
>>> 
>>> - Introduce *"boolean systemThreadPoolStriped"* property;
>>> - Set it to *"true"* for servers by default;
>>> - Set it to *"false"* for clients by default.
>>> 
>>> Yakov,
>>> I still do not get your point about (system + public) pools approach.
>>> 
>>> Vladimir.
>>> 
>>> On Fri, Dec 16, 2016 at 9:29 AM, Yakov Zhdanov <yzhda...@apache.org>
>>> wrote:
>>> 
>>>>> In my view, we should hide most of such configuration intricacies from
>>>> users,
>>>> and select an appropriate thread pool for each task ourselves. Will
>> this
>>> be
>>>> possible?
>>>> 
>>>> We already do this. We take decision internally on where to route the
>>>> request.
>>>> 
>>>> SoE, my answers below.
>>>> 
>>>>> How did the striped pool show itself for transactional updates that
>>>> involve 2 phase commit? Any benefits or degradation?
>>>> 
>>>> Even better than for atomic - up to ~50% improvement.
>>>> 
>>>>> Here we should decide what’s more important for us - throughout or
>>>> latency. If to execute SQL queries in the striped pool using multiple
>>>> partitioned threads then, for sure, it will affect latency of other
>>>> operations that are sitting in the queue waiting for their time to be
>>>> processed but, on the other hand, the overall throughput of the
>> platform
>>>> should be improved because the operations will be less halted all the
>>> time
>>>> by synchronization needs.
>>>> 
>>>>> VoltDB decided to go for with the throughput while our current
>>>> architecture is mostly latency based.
>>>> 
>>>> What do you mean by "using several partition threads"? I am pretty sure
>>>> that if we do as you suggest we will have degradation here instead of
>>>> boost:
>>>> 
>>>> sql-query-put
>>>> after: 77,344.83
>>>> before: 53,578.78
>>>> delta: 30.73%
>>>> 
>>>> sql-query-put-offheap
>>>> after 32,212.30
>>>> before 25,322.43
>>>> delta 21.39%
>>>> 
>>>> --Yakov
>>> 
>> 
>> 
>> 
>> --
>> С уважением,
>> Машенков Андрей Владимирович
>> Тел. +7-921-932-61-82
>> 
>> Best regards,
>> Andrey V. Mashenkov
>> Cerr: +7-921-932-61-82
>> 

Reply via email to