[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: OrderedScheduler and OrderedSafeExecutor

Il sab 24 mar 2018, 16:38 Matteo Merli <mmerli@xxxxxxxxxx> ha scritto:

> While profiling the allocations of a BookKeeper client (from current
> master) writing entries, I've noticed that there are multiple allocations
> per entry related to the OrderedScheduler.
> I think OrderedScheduler was introduced in 4.6 and now OrderedSafeExecutor
> is just an extension of OrderedScheduler as well.

Good catch
IMHO if you can find a way to simply existing classes and preserve BK
functionalities any change will be appreciated.

I know that they are 'limited private' classes but only users of them are
Pulsar and DL (which now has been merged to main codebase). This to say
that you have a full  vision about those classes.


> The main problem is that since OrderedScheduler supports both immediate and
> delayed execution, it uses a ScheduledThreadPoolExecutor per each bucket,
> plus some decorating wrappers.
> The ScheduledThreadPoolExecutor, needs a Priority queue and also always
> return future objects.
> From my memory snapshot I have counted 12 objects allocated (per addEntry
> operation) for a total of 472 bytes per each entry, all due the scheduled
> executor.
> I think the delayed execution is only used in unit tests. In critical paths
> we're only using the immediate task submission.
> I think it might be worth to refactor OrderedScheduler or
> OrderedSafeExecutor to avoid that overhead.
> Thoughts?
> Matteo
> --
> Matteo Merli
> <mmerli@xxxxxxxxxx>

-- Enrico Olivelli