Go to file
Norman Maurer feacf128ca Eliminate memory copy in ByteToMessageDecoder whenever possible
Motivation:

Currently when there are bytes left in the cumulation buffer we do a byte copy to produce the input buffer for the decode method. This can put quite some overhead on the impl.

Modification:

- Use a CompositeByteBuf to eliminate the byte copy.
- Allow to specify if a CompositeBytebug should be used or not as some handlers can only act on one ByteBuffer in an efficient way (like SslHandler :( ).

Result:

Performance improvement as shown in the following benchmark.

Without this patch:
[xxx@xxx ~]$ ./wrk-benchmark
Running 5m test @ http://xxx:8080/plaintext
  16 threads and 256 connections
  Thread Stats   Avg      Stdev     Max   +/- Stdev
    Latency    20.19ms   38.34ms   1.02s    98.70%
    Req/Sec   241.10k    26.50k  303.45k    93.46%
  1153994119 requests in 5.00m, 155.84GB read
Requests/sec: 3846702.44
Transfer/sec:    531.93MB

With the patch:
[xxx@xxx ~]$ ./wrk-benchmark
Running 5m test @ http://xxx:8080/plaintext
  16 threads and 256 connections
  Thread Stats   Avg      Stdev     Max   +/- Stdev
    Latency    17.34ms   27.14ms 877.62ms   98.26%
    Req/Sec   252.55k    23.77k  329.50k    87.71%
  1209772221 requests in 5.00m, 163.37GB read
Requests/sec: 4032584.22
Transfer/sec:    557.64MB
2015-01-09 15:55:51 +09:00
all [maven-release-plugin] prepare for next development iteration 2014-12-31 20:58:44 +09:00
buffer [maven-release-plugin] prepare for next development iteration 2014-12-31 20:58:44 +09:00
codec Eliminate memory copy in ByteToMessageDecoder whenever possible 2015-01-09 15:55:51 +09:00
codec-http Fix for Issue #3308 related to slice missing retain 2015-01-06 17:31:33 +01:00
codec-socks [maven-release-plugin] prepare for next development iteration 2014-12-31 20:58:44 +09:00
common Add the URL of the wiki for easier troubleshooting 2015-01-08 12:45:40 +09:00
example [maven-release-plugin] prepare for next development iteration 2014-12-31 20:58:44 +09:00
handler Eliminate memory copy in ByteToMessageDecoder whenever possible 2015-01-09 15:55:51 +09:00
license Remove license of deque as we not use it anymore 2014-08-04 12:21:33 +02:00
microbench [maven-release-plugin] prepare for next development iteration 2014-12-31 20:58:44 +09:00
tarball [maven-release-plugin] prepare for next development iteration 2014-12-31 20:58:44 +09:00
testsuite [maven-release-plugin] prepare for next development iteration 2014-12-31 20:58:44 +09:00
transport [maven-release-plugin] prepare for next development iteration 2014-12-31 20:58:44 +09:00
transport-native-epoll [maven-release-plugin] prepare for next development iteration 2014-12-31 20:58:44 +09:00
transport-rxtx [maven-release-plugin] prepare for next development iteration 2014-12-31 20:58:44 +09:00
transport-sctp [maven-release-plugin] prepare for next development iteration 2014-12-31 20:58:44 +09:00
transport-udt [maven-release-plugin] prepare for next development iteration 2014-12-31 20:58:44 +09: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:37:12 +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:18:14 +09:00
LICENSE.txt Relicensed to Apache License v2 2009-08-28 07:15:49 +00:00
NOTICE.txt Remove license of deque as we not use it anymore 2014-08-04 12:21:33 +02:00
pom.xml Fix broken OSGi version range for NPN and ALPN dependency 2015-01-03 11:51:12 +09:00
README.md Add a link to the 'native transports' page 2014-07-21 12:54:43 -07:00
run-example.sh Add logLevel property to enable different log levels for the examples. 2014-11-21 10:48:13 +09: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

The 'master' branch is where the development of the latest major version lives on. The development of all other major versions takes place in each branch whose name is identical to its major version number. For example, the development of 3.x and 4.x resides in the branch '3' and the branch '4' respectively.