Go to file
buchgr b88a980482 Change arena to thread cache mapping algorithm to be closer to ideal.
Motivation:
Circular assignment of arenas to thread caches can lead to less than optimal
mappings in cases where threads are (frequently) shutdown and started.

Example Scenario:
There are a total of 2 arenas. The first two threads performing an allocation
would lead to the following mapping:

Thread 0 -> Arena 0
Thread 1 -> Arena 1

Now, assume Thread 1 is shut down and another Thread 2 is started. The current
circular assignment algorithm would lead to the following mapping:

Thread 0 -> Arena 0
Thread 2 -> Arena 0

Ideally, we want Thread 2 to use Arena 1 though.

Presumably, this is not much of an issue for most Netty applications that do all
the allocations inside the eventloop, as eventloop threads are seldomly shut down
and restarted. However, applications that only use the netty-buffer package
or implement their own threading model outside the eventloop might suffer from
increased contention. For example, gRPC Java when using the blocking stub
performs some allocations outside the eventloop and within its own thread pool
that is dynamically sized depending on system load.

Modifications:

Implement a linear scan algorithm that assigns a new thread cache to the arena
that currently backs the fewest thread caches.

Result:

Closer to ideal mappings between thread caches and arenas. In order to always
get an ideal mapping, we would have to re-balance the mapping whenever a thread
dies. However, that's difficult because of deallocation.
2016-03-15 14:16:34 +01:00
all Add xml-maven-plugin to check indentation and fix violations 2016-02-29 09:46:32 +01:00
buffer Change arena to thread cache mapping algorithm to be closer to ideal. 2016-03-15 14:16:34 +01:00
codec Add DatagramPacketEncoder and DatagramPacketDecoder 2016-03-14 12:14:57 +01:00
codec-dns Add support for directly decoding/encoding DNS PTR Records 2016-03-08 14:59:46 +01:00
codec-haproxy [maven-release-plugin] prepare for next development iteration 2016-02-19 23:00:11 +01:00
codec-http Bug fix for HttpPostMultipartRequestDecoder part decoding with an invalid charset not reported as an ErrorDataDecoderException 2016-03-10 18:33:06 +01:00
codec-http2 HTTP/2 SimpleChannelPromiseAggregator don't fail fast 2016-03-14 11:00:21 -07:00
codec-memcache [maven-release-plugin] prepare for next development iteration 2016-02-19 23:00:11 +01:00
codec-mqtt [maven-release-plugin] prepare for next development iteration 2016-02-19 23:00:11 +01:00
codec-socks Add CharsetUtil.encoder/decoder() methods 2016-03-07 10:48:31 +00:00
codec-stomp [maven-release-plugin] prepare for next development iteration 2016-02-19 23:00:11 +01:00
codec-xml [maven-release-plugin] prepare for next development iteration 2016-02-19 23:00:11 +01:00
common Adding support for tcnative fedora flavour in uber jar 2016-03-15 13:56:41 +01:00
example Handle only those http requests that equal to adjusted websocket path 2016-03-04 08:36:14 +01:00
handler Adding support for tcnative fedora flavour in uber jar 2016-03-15 13:56:41 +01:00
handler-proxy [maven-release-plugin] prepare for next development iteration 2016-02-19 23:00:11 +01:00
license added support for Protobuf codec nano runtime 2016-01-19 21:39:17 +01:00
microbench Add xml-maven-plugin to check indentation and fix violations 2016-02-29 09:46:32 +01:00
resolver [maven-release-plugin] prepare for next development iteration 2016-02-19 23:00:11 +01:00
resolver-dns Fix potential infinite loop when resolving CNAME records 2016-03-07 15:12:26 +00:00
tarball [maven-release-plugin] prepare for next development iteration 2016-02-19 23:00:11 +01:00
testsuite [maven-release-plugin] prepare for next development iteration 2016-02-19 23:00:11 +01:00
testsuite-osgi Add xml-maven-plugin to check indentation and fix violations 2016-02-29 09:46:32 +01:00
transport Deprecate PromiseAggregator 2016-03-14 10:53:30 -07:00
transport-native-epoll Ensure connect promise is notifed before fireChannelActive() is called. Related to [#4927] 2016-03-14 14:18:11 +01:00
transport-rxtx [maven-release-plugin] prepare for next development iteration 2016-02-19 23:00:11 +01:00
transport-sctp Add xml-maven-plugin to check indentation and fix violations 2016-02-29 09:46:32 +01:00
transport-udt [maven-release-plugin] prepare for next development iteration 2016-02-19 23:00:11 +01:00
.fbprefs Updated Find Bugs configuration 2009-03-04 10:33:09 +00:00
.gitignore Add JVM crash logs to .gitignore 2014-05-18 21:36:54 +09:00
.travis.yml Travis CI branch whitelisting 2013-03-11 09:55:43 +09:00
CONTRIBUTING.md Move the pull request guide to the developer guide 2014-03-12 13:13:58 +09:00
LICENSE.txt Relicensed to Apache License v2 2009-08-28 07:15:49 +00:00
NOTICE.txt added support for Protobuf codec nano runtime 2016-01-19 21:39:17 +01:00
pom.xml Add junit timeout listener to print the full thread dump on test timeout 2016-03-04 10:47:11 +01:00
README.md Updating Branches to look section to match the current branching structure of the project 2016-03-10 22:08:01 +01:00
run-example.sh Add HTTP/2 Netty tiles example 2015-05-18 14:16:54 -07:00

Netty Project

Netty is an asynchronous event-driven network application framework for rapid development of maintainable high performance protocol servers & clients.

How to build

For the detailed information about building and developing Netty, please visit the developer guide. This page only gives very basic information.

You require the following to build Netty:

Note that this is build-time requirement. JDK 5 (for 3.x) or 6 (for 4.0+) is enough to run your Netty-based application.

Branches to look

Development of all versions takes place in each branch whose name is identical to <majorVersion>.<minorVersion>. For example, the development of 3.9 and 4.0 resides in the branch '3.9' and the branch '4.0' respectively.