Commit Graph

54 Commits

Author SHA1 Message Date
75359256b3 Introduce velocity.natives-tmpdir property for properly handling noexec /tmp 2019-11-29 14:27:27 -05:00
2f55912995 Graceful fallback when /tmp is amounted noexec on Linux
Fixes #260
2019-11-29 12:04:12 -05:00
af0903050d Make sure in-place AES respects reader index 2019-11-09 21:30:46 -05:00
d73496e8df Introduce zero memory-copy compression for regular Java native
The compression itself is zero-copy in most cases. However, the overhead
needed to copy a direct buffer into a heap buffer (and back) is still
present. If possible, use Linux for best performance.
2019-11-09 17:39:47 -05:00
6ff5cac4d3 Fix issues with decoding and Java fallback native 2019-10-19 23:56:44 -04:00
a16684564b Make AES crypto operations use one buffer
All AES implementations being used are 'copy safe', where the source and
destination arrays may be the same. Lets save ourself a copy and reap
the performance wins!
2019-10-19 19:55:02 -07:00
20559e059d Properly rethrow DataFormatException in Java 11+ compressor 2019-10-05 14:44:05 -04:00
7747679ee1 Implement optimized compression for Java 11+
Using the fact that the Java Deflater/Inflater API now supports
ByteBuffers as of Java 11, we can provide performance benefits equivalent
to the Velocity 1.0.x native compression on servers running Java 11+ on
non-macOS and non-Linux platforms (such as Windows).
2019-10-04 17:08:14 -04:00
e21c33d435 Switch to zlib-ng
zlib-ng boasts higher throughput than regular zlib, by combining patches
from Cloudflare, zlib, and ARM's improvements to zlib along with a more
modern codebase.

Profiling consistently shows that compression is the largest CPU expense
by far, so even a minor speed-up here is significant.
2019-09-08 23:30:28 -04:00
3a77068088 Slightly more accurate natives check 2019-09-07 00:15:10 -04:00
35856fec04 Merge branch 'dev/1.1.0' into natives-java-improvements
# Conflicts:
#	native/src/main/java/com/velocitypowered/natives/encryption/JavaVelocityCipher.java
2019-09-07 00:06:13 -04:00
dab9c9a382 Use Netty thread factory to take advantage of FastThreadLocal
This should reduce CPU usage slightly.
2019-07-02 02:19:52 -04:00
5a209a098c Fix memory leak in NativeVelocityCipher 2019-06-22 16:03:55 -04:00
5fa5d9567d Remove unused NativeConstants 2019-06-11 02:05:54 -04:00
ec32def592 Take advantage of pooled ByteBufs in Java cipher
ByteBufs are pooled in Velocity, so we can achieve lower memory usage
by using what Netty is going to provide to us for free.
2019-06-11 02:04:38 -04:00
b0736548a9 Strengthen check in JavaVelocityCompressor 2019-06-09 04:43:24 -04:00
b19d36e939 Strictly enforce packet size limits for incoming compressed packets 2019-06-09 04:25:13 -04:00
b881e9cf04 Do a small sanity check, however 2019-05-21 00:58:52 -04:00
821a7a45bc Small optimization for NativeVelocityCipher
Instead of going through the general process function, which does extra
checks to ensure that its arguments are sane, move "closer" to the action
by stripping down to the actual implementation.
2019-05-21 00:56:14 -04:00
961e3ece27 Fix DataFormatException with java decompression (#195) 2019-04-27 19:04:28 -04:00
1661cece2d An Easter basket bearing gifts! (#191)
* Delay switch to new server until after JoinGame is sent.

Unfortunately, in some cases (especially vanilla Minecraft) some login
disconnects are sent after ServerLoginSuccess but before JoinGame.
We've been using ServerLoginSuccess but it has caused too many problems.
Now Velocity will switch to a stripped-down version of the play session
handler until JoinGame is received. This handler does very little by
itself: it simply forwards plugin messages (for Forge) and waits for the
JoinGame packet from the server.

This is an initial version: only vanilla Minecraft 1.12.2 was tested.
However this is the way Waterfall without entity rewriting does server
switches (which, in turn, is inherited from BungeeCord).

* Move to Gradle 5 and Error Prone.
2019-04-24 14:36:49 -04:00
d8e7f87506 Forgot to update the JNI compile script for Linux. 2019-01-11 14:15:07 -05:00
9daa6c3a64 Prettify JNI stuff. 2019-01-11 14:13:13 -05:00
1ddeb85f60 Try to reduce JNI calls into compressor.
Comparatively speaking, JNI calls are very expensive, so we want to
reduce them as much as possible.
2019-01-10 21:10:00 -05:00
466d06216d Fix minor bug in JavaVelocityCipher 2018-12-30 11:08:13 -05:00
25773cd366 Fix typo, clarification, pre-size buffer in ensureCompatible(). 2018-12-30 07:18:19 -05:00
ae850443ad Fix build due to checkstyle 2018-12-30 06:50:44 -05:00
8588e7f1fe Optimize native handling further.
We now try to work within the boundaries given by the native. In the
case of Java natives, we work with byte arrays. With natives, always use
direct buffers.

However, the numbers do favor the natives, since they work with direct
byte buffers, without any copying. For the most part, this commit is
intended to improve the lives of Velocity users on Windows.
2018-12-30 06:16:04 -05:00
095a478440 Always ensure we don't pass a heap ByteBuf to the natives. 2018-12-30 04:53:47 -05:00
1c50922cba Make sure we can get memory addresses before we think about natives. 2018-12-30 04:33:10 -05:00
9bbe25fc90 Improve efficiency of Java implementation of natives. 2018-12-28 13:02:46 -05:00
2ab84f3775 Fix missing throws clause 2018-12-24 12:19:40 -05:00
e690d88fa0 Generic MBEDTLS_ROOT 2018-12-24 12:18:36 -05:00
41592afade Allow native crypto to always be selected.
This removes the need to patch Velocity to enable the native crypto
support, if compiled.
2018-12-23 23:02:51 -05:00
868976e09c Add Javadoc and remove all Checkstyle issues from API and natives. 2018-11-15 19:04:39 -05:00
1310cd2c53 Mix of Checkstyle and SonarLint. 2018-10-28 03:18:15 -04:00
25b5e00125 Reformat with Google code style and enforce Checkstyle.
Fixes #125
2018-10-27 23:45:36 -04:00
32829c5637 Checker Framework integration (#126) 2018-10-27 21:45:42 -04:00
50c27066e2 Import cleanup 2018-09-19 14:56:49 -04:00
fc48db62b5 Improve native initialization logic, again 2018-09-17 15:02:49 -04:00
e75ec71b32 Improve native initialization logic
This uses the double-check pattern as recommended in Effective Java.
2018-09-17 01:03:17 -04:00
168c36facf Bring to latest master 2018-08-25 01:13:00 -04:00
a37a0d6665 Merge branch 'master' into native-crypto
# Conflicts:
#	native/src/main/java/com/velocitypowered/natives/util/Natives.java
2018-08-25 01:12:26 -04:00
6a3a5a0458 minor shuffle to log messages 2018-08-12 01:36:37 -07:00
0c7815b6e9 Disable the natives test for now 2018-08-04 23:48:31 -04:00
8aa1fe524e Native cryptography support using mbed TLS 2018-08-04 23:46:41 -04:00
9438d087e2 Refactor cipher logic. 2018-08-04 00:09:25 -04:00
68d315d1d3 Improvements for natives. 2018-08-02 23:52:21 -04:00
b720b691de Revert experimental change 2018-08-02 14:22:42 -04:00
4bc4a1ec6a Use singular plurals, clean up some stuff. 2018-08-02 14:07:32 -04:00