在 Java 中可以实现的当前最低 TCP 延迟是多少?
What are the current lowest TCP latencies one can accomplish in Java?
我们目前正在为处理 20 个同时连接的高性能 TCP 服务器使用多线程解决方案。我们的平均延迟 运行 大约 200 微秒每条消息,我们一直在努力驯服 GC activity,它可以产生 1 毫秒以上的异常值. Low latency is our utmost goal
对于此服务器,我们知道我们当前的数字很糟糕。我们正在评估单线程方法,因此我们可以让所有这 20 个连接由一个线程处理。
Java 中 TCP 延迟的当前下限是多少,换句话说,两台机器在 Java 中通过 10Gb 网络上的 TCP 套接字交换消息的速度有多快?
多线程服务器不是解决延迟的方法,200 微确实太高了。对于超低延迟网络应用程序,必须使用单线程、异步、非阻塞网络库。您可以在同一个反应器线程(即网络选择器)中轻松处理这 20 个套接字连接,这些线程可以固定到专用且隔离的 cpu 核心。此外,如果使用 Java,则必须使用留下零垃圾的网络库,因为清理 GC activity 很可能会阻塞关键反应器线程,从而引入您正在观察到的不良异常值。
为了让您了解 TCP 延迟,您可以查看 these benchmarks using CoralReactor,这是在 Java.[=12 中实现的超低延迟无垃圾网络库=]
Messages: 1,000,000 (size 256 bytes)
Avg Time: 2.15 micros
Min Time: 1.976 micros
Max Time: 64.432 micros
Garbage created: zero
75% = [avg: 2.12 micros, max: 2.17 micros]
90% = [avg: 2.131 micros, max: 2.204 micros]
99% = [avg: 2.142 micros, max: 2.679 micros]
99.9% = [avg: 2.147 micros, max: 3.022 micros]
99.99% = [avg: 2.149 micros, max: 5.604 micros]
99.999% = [avg: 2.149 micros, max: 7.072 micros]
请记住,2.15 微秒超过环回,因此我不考虑网络和 os/kernel 延迟。对于 10Gb 网络,256 字节大小消息的在线延迟从 NIC 到 NIC 至少为 382 纳秒。如果您使用的是支持内核旁路的网卡(即 SolarFlare 的 OpenOnLoad),那么 os/kernel 延迟应该非常低。
免责声明:我是 CoralReactor 的开发者之一。
我们目前正在为处理 20 个同时连接的高性能 TCP 服务器使用多线程解决方案。我们的平均延迟 运行 大约 200 微秒每条消息,我们一直在努力驯服 GC activity,它可以产生 1 毫秒以上的异常值. Low latency is our utmost goal
对于此服务器,我们知道我们当前的数字很糟糕。我们正在评估单线程方法,因此我们可以让所有这 20 个连接由一个线程处理。
Java 中 TCP 延迟的当前下限是多少,换句话说,两台机器在 Java 中通过 10Gb 网络上的 TCP 套接字交换消息的速度有多快?
多线程服务器不是解决延迟的方法,200 微确实太高了。对于超低延迟网络应用程序,必须使用单线程、异步、非阻塞网络库。您可以在同一个反应器线程(即网络选择器)中轻松处理这 20 个套接字连接,这些线程可以固定到专用且隔离的 cpu 核心。此外,如果使用 Java,则必须使用留下零垃圾的网络库,因为清理 GC activity 很可能会阻塞关键反应器线程,从而引入您正在观察到的不良异常值。
为了让您了解 TCP 延迟,您可以查看 these benchmarks using CoralReactor,这是在 Java.[=12 中实现的超低延迟无垃圾网络库=]
Messages: 1,000,000 (size 256 bytes)
Avg Time: 2.15 micros
Min Time: 1.976 micros
Max Time: 64.432 micros
Garbage created: zero
75% = [avg: 2.12 micros, max: 2.17 micros]
90% = [avg: 2.131 micros, max: 2.204 micros]
99% = [avg: 2.142 micros, max: 2.679 micros]
99.9% = [avg: 2.147 micros, max: 3.022 micros]
99.99% = [avg: 2.149 micros, max: 5.604 micros]
99.999% = [avg: 2.149 micros, max: 7.072 micros]
请记住,2.15 微秒超过环回,因此我不考虑网络和 os/kernel 延迟。对于 10Gb 网络,256 字节大小消息的在线延迟从 NIC 到 NIC 至少为 382 纳秒。如果您使用的是支持内核旁路的网卡(即 SolarFlare 的 OpenOnLoad),那么 os/kernel 延迟应该非常低。
免责声明:我是 CoralReactor 的开发者之一。