dev@grizzly.java.net

Re: [PATCH] adjust selector count on NIOTransportBuilder#setSelectorThreadPoolConfig

From: Mkrtchyan, Tigran <tigran.mkrtchyan_at_desy.de>
Date: Tue, 18 Mar 2014 18:14:49 +0100 (CET)

Hi Alexey,

looks ok, but I did not test it in production yet.

Tigran.

----- Original Message -----
> From: "Oleksiy Stashok" <oleksiy.stashok_at_oracle.com>
> To: dev_at_grizzly.java.net
> Sent: Saturday, March 15, 2014 6:27:42 AM
> Subject: Re: [PATCH] adjust selector count on NIOTransportBuilder#setSelectorThreadPoolConfig
>
> Ok, I've reworked it a bit
> https://github.com/GrizzlyNIO/grizzly-mirror/commit/be6193310b07b13c240b03e9e5c4f5079b24621c
>
> Thanks.
>
> WBR,
> Alexey.
>
> On 14.03.14 04:57, Mkrtchyan, Tigran wrote:
> >
> > I think it's broken. Check this two tests:
> >
> > @Test
> > public void testCustomThreadPoolSameThreadStrategy() throws Exception
> > {
> >
> > final int poolSize =
> > Math.max(Runtime.getRuntime().availableProcessors()/2, 1);
> > final ThreadPoolConfig poolCfg = ThreadPoolConfig.defaultConfig();
> > poolCfg.setCorePoolSize(poolSize).setMaxPoolSize(poolSize);
> >
> > final TCPNIOTransport tcpTransport =
> > TCPNIOTransportBuilder.newInstance()
> > .setReuseAddress(true)
> > .setIOStrategy(SameThreadIOStrategy.getInstance())
> > .setSelectorThreadPoolConfig(poolCfg)
> > .setWorkerThreadPoolConfig(null)
> > .build();
> > try {
> > tcpTransport.start();
> > } finally {
> > tcpTransport.shutdownNow();
> > }
> > }
> >
> > @Test
> > public void testCustomThreadPoolWorkerThreadStrategy() throws
> > Exception {
> >
> > final int selectorPoolSize =
> > Math.max(Runtime.getRuntime().availableProcessors()/2, 1);
> > final ThreadPoolConfig selectorPoolCfg =
> > ThreadPoolConfig.defaultConfig();
> > selectorPoolCfg.setCorePoolSize(selectorPoolSize).setMaxPoolSize(selectorPoolSize);
> >
> > final int workerPoolSize =
> > Runtime.getRuntime().availableProcessors() * 2 ;
> > final ThreadPoolConfig workerPoolCfg =
> > ThreadPoolConfig.defaultConfig();
> > workerPoolCfg.setCorePoolSize(workerPoolSize).setMaxPoolSize(workerPoolSize);
> >
> > final TCPNIOTransport tcpTransport =
> > TCPNIOTransportBuilder.newInstance()
> > .setReuseAddress(true)
> > .setIOStrategy(WorkerThreadIOStrategy.getInstance())
> > .setSelectorThreadPoolConfig(selectorPoolCfg)
> > .setWorkerThreadPoolConfig(workerPoolCfg)
> > .build();
> > try {
> > tcpTransport.start();
> > } finally {
> > tcpTransport.shutdownNow();
> > }
> > }
> >
> >
> > Tigran.
> >
> >
> >
> > ----- Original Message -----
> >> From: "Oleksiy Stashok" <oleksiy.stashok_at_oracle.com>
> >> To: dev_at_grizzly.java.net
> >> Sent: Friday, March 14, 2014 1:25:16 AM
> >> Subject: Re: [PATCH] adjust selector count on
> >> NIOTransportBuilder#setSelectorThreadPoolConfig
> >>
> >> Hi Tigran,
> >>
> >> I've commited this fix:
> >> https://github.com/GrizzlyNIO/grizzly-mirror/commit/55273b6750a191b113f67de515cefc0c96e45758
> >>
> >> with the following change [1], which still haven't reached github mirror.
> >>
> >> What do you think?
> >>
> >> WBR,
> >> Alexey.
> >>
> >>
> >> [1]
> >>
> >> Revisions:
> >> ----------
> >> fbef39556a11f8f0fc6b767ab56621473d2f7da0
> >>
> >>
> >> Modified Paths:
> >> ---------------
> >> modules/grizzly/src/main/java/org/glassfish/grizzly/nio/NIOTransport.java
> >>
> >>
> >> Diffs:
> >> ------
> >> ---
> >> a/modules/grizzly/src/main/java/org/glassfish/grizzly/nio/NIOTransport.java
> >> +++
> >> b/modules/grizzly/src/main/java/org/glassfish/grizzly/nio/NIOTransport.java
> >> @@ -196,7 +196,8 @@ public abstract class NIOTransport extends
> >> AbstractTransport
> >> public void setSelectorRunnersCount(final int selectorRunnersCount)
> >> {
> >> if (selectorRunnersCount > 0) {
> >> this.selectorRunnersCount = selectorRunnersCount;
> >> - if (kernelPoolConfig != null) {
> >> + if (kernelPoolConfig != null &&
> >> + kernelPoolConfig.getMaxPoolSize() <
> >> selectorRunnersCount) {
> >> kernelPoolConfig.setCorePoolSize(selectorRunnersCount)
> >> .setMaxPoolSize(selectorRunnersCount);
> >> }
> >> @@ -424,8 +425,8 @@ public abstract class NIOTransport extends
> >> AbstractTransport
> >> .setPoolName("grizzly-nio-kernel");
> >> }
> >> kernelPoolConfig.setMemoryManager(memoryManager);
> >> - if (kernelPoolConfig.getCorePoolSize() <
> >> selectorRunnersCnt)
> >> {
> >> - throw new IllegalStateException("The min threads
> >> count
> >> of the kernel ThreadPool has to be larger or equal to the
> >> selectorRunnersCount");
> >> + if (kernelPoolConfig.getMaxPoolSize() <
> >> selectorRunnersCnt)
> >> {
> >> + throw new IllegalStateException("The max threads
> >> count
> >> of the kernel ThreadPool has to be larger or equal to the
> >> selectorRunnersCount");
> >> }
> >> setKernelPool0(
> >> GrizzlyExecutorService.createInstance(
> >>
> >>
> >>
> >> On 13.03.14 01:32, Tigran Mkrtchyan wrote:
> >>> Signed-off-by: Tigran Mkrtchyan <tigran.mkrtchyan_at_desy.de>
> >>> ---
> >>> .../src/main/java/org/glassfish/grizzly/NIOTransportBuilder.java |
> >>> 5
> >>> +++++
> >>> 1 file changed, 5 insertions(+)
> >>>
> >>> diff --git
> >>> a/modules/grizzly/src/main/java/org/glassfish/grizzly/NIOTransportBuilder.java
> >>> b/modules/grizzly/src/main/java/org/glassfish/grizzly/NIOTransportBuilder.java
> >>> index 9cc98cf..8630c8b4 100644
> >>> ---
> >>> a/modules/grizzly/src/main/java/org/glassfish/grizzly/NIOTransportBuilder.java
> >>> +++
> >>> b/modules/grizzly/src/main/java/org/glassfish/grizzly/NIOTransportBuilder.java
> >>> @@ -149,6 +149,11 @@ public abstract class NIOTransportBuilder<T extends
> >>> NIOTransportBuilder> {
> >>> */
> >>> public T setSelectorThreadPoolConfig(final ThreadPoolConfig
> >>> threadPoolConfig) {
> >>> transport.setKernelThreadPoolConfig(threadPoolConfig);
> >>> + /*
> >>> + * selector runners count MUST not be greater than number of
> >>> threads in the pool
> >>> + */
> >>> + int selectorRunnersCount =
> >>> Math.min(threadPoolConfig.getMaxPoolSize(),
> >>> transport.getSelectorRunnersCount());
> >>> + transport.setSelectorRunnersCount(selectorRunnersCount);
> >>> return getThis();
> >>> }
> >>>
> >>
>
>