Hi guys.

Ignite configures all thread pools, selectors, etc. basing
on Runtime.availableProcessors() which seems not correct in containerized
environment. In Kubernetes with Docker that method returns CPU count of a
Node/machine, which is 64 in our particular case. But those 64 CPU and
their timings are shared between other stuff on the node like other Pods
and services. Appropriate value of available cores for Pod is usually
configured as CPU Resource and estimated basing on different things taking
performance into account. General idea, if you want to run several Pods on
the same node, they all should request less resources then the node
provides. So, we give 4-8 cores for Ignite instance in Kubernetes, but
Ignite's thread pools are configured like they get all 64 CPUs, and in turn
we get a lot of threads for the Pod with 4-8 cores available.

Now we manually set appropriate values for all available properties which
relate to thread pools.

Would it be correct to have one environment variable, say
IGNITE_CONCURRENCY_LEVEL which will be used as a reference value for those
configurations and by default equals to Runtime.availableProcessors()?

Thanks.

​
Arseny Kovalchuk

Senior Software Engineer at Synesis
skype: arseny.kovalchuk
mobile: +375 (29) 666-16-16
​LinkedIn Profile <http://www.linkedin.com/in/arsenykovalchuk/en>​

Reply via email to