2021-05-20 | Noticeable CPU savings by optimizing several
of the innermost crypto loops. Devs will know what we are
talking about: Removed byte-masks from 24 bit shifted ints.
Converted loops to straightforward counted for-loops. Those
are treated special by the JVM: No safepoints inserted and
array bounds-checking optimized. |
2021-05-18 |
Bump to mainline 0.9.50. Again lots of
smaller CPU savers, most notably dropping Java concurrency
features on idempotent methods and the like. Router steered
away from peers with high retransmission rates bringing
retransmissions down about 50% compared to last release
without sacrificing throughput. |
2021-04-07 |
Lots of smaller CPU savers and some bug
fixes. Also introducing a smart MTU feature for SSU. We use
a MTU that is guaranteed to work with all peers, even those
that advertise a MTU they can not use, but when they get
through to us with larger packets, we use an optimized MTU
value equal or near to their size. |
2021-03-09 |
All-new SHA256 module with integrated caching
brings the biggest speed bump ever for I2Speed. Minimum 10%
CPU saved for any load profile. |
2021-02-19 |
Bump to mainline 0.9.49. Adds smaller memory
footprint for our ultrafast lockfree ring buffers. Further
improvements to UDP. As UDP runs much more traffic now you
will definitely want Java 15. Next full package to be
published when I2P goes 1.0. |
2020-12-04 |
Bump to mainline 0.9.48. Smaller tweaks plus
rollbacks for features now found in mainline. Remove UDP
double ACKing in cases where cost is higher than benefit.
Usually hits peers running 0.9.39 or older. |
2020-11-03 | Reworked the NTCP core engine ("NTCP
Pumper"). Saves up to 50% on looping, queueing, system
calls, CPU and a little bit of bandwidth. Outbound data
processed in much larger chunks. Several smaller tweaks that
you will also find in mainline 0.9.48 |
2020-10-02 |
Smaller tweaks. Most notably solved a SSU MTU
bug. Unfortunately your network peers must run a similar fix
for this to be fully effective - hope this will go mainline
in 0.9.48. |
2020-09-19 |
Make further use of the reduced CPU of the
new ECIES encryption. NTCP and SSU in/outbound are handled
by two threads each including decoding of inbound local
traffic. Outbound local traffic has been reverted to one
thread per I2CP client. This saves further CPU and provides
speed gains. On ARM32 we handle > 2 MBps in-/out for each
NTCP and SSU and > 1 MBps for every local client. As load patterns shifted with the new crypto along with higher transfer speeds, some new bottlenecks came up and have been adressed, most notably the handling of replies for delivery of outbound messages. |
2020-08-28 | Change the new crypto to also use
CPU-optimized crypto key pregeneration. Remove some features
that have been integrated into I2P mainline. Several smaller
tweaks. Do not longer ship installers with optimized
binaries as those are only needed for ElGamal backward
compatibility now. |
2020-05-22 | Released codebase that will go into the next
mainline I2P release. Moved searches and crypto key
pregeneration onto the job queue, where they are executed
when no more network traffic is queued. Several smaller
tweaks to reduce locking and context switches. |
2020-04-16 |
Now moved all functions reading inbound
traffic from local apps as well as the net to a single
central prioritized thread pool. All those functions may
invoke lengthy ElGamal processing and may stumble over locks
in the single high-level send function awkwardly named
"GetBids". This way we aim to prevent preemption by shortly
exceeding CPU capacity and reduce blocking while processing
a send. Result: Further reduction of context switches.
Single peer top speeds now > 900 KBps for TCP and >
600 KBps for UDP on Raspberry class machines. |
2020-03-16 |
|
2020-03-05 | Last small speedup to the thread pools.
Introduce pregeneration and lockless retrieval of most
frequently used random number types. Was frequently blocking
threads on every random bit. Fix I2P concurrency issues in
the FragmentHandler. |
2020-02-28 |
small tweaks to the thread pools. Enable full
parallel inbound processing on NTCP. If idle threads are
available, inbound messages are now only queued up behind
small messages (1K or less) currently processed instead of
time based logic before. Further improves metrics a bit.
Download from front page or through our update mechanism.
Updated source. |
2020-02-25-0.9.45 |
|
2020-02-13-0.9.44 |
Our base release. See Technical Overview and Developer corner. |