优化内存,提高队列和线程池性能。更新JCTOOL库

This commit is contained in:
2026-11-06 12:16:25 +08:00
parent 3b73e2b613
commit 189b14a743
17 changed files with 231 additions and 502 deletions
+50 -30
View File
@@ -9,6 +9,7 @@ import java.util.concurrent.TimeUnit;
import org.kne.cloud.clock.AdjustedNanoClock;
import org.kne.cloud.clock.HighAccuracyClock;
import org.kne.cloud.clock.NTPTimestamps;
import org.kne.cloud.network.MultiProtocolSocketAddress;
import org.kne.cloud.network.SpeedLimiter;
import org.kne.cloud.network.ThreadTool;
@@ -16,6 +17,7 @@ import org.kne.cloud.network.klalb.*;
import org.kne.cloud.network.monitor.LinkStatus;
import org.kne.cloud.network.monitor.SpeedAndTrafficAndDelayMonitorDataImpl;
import org.kne.concurrent.ThreadParker;
import org.kne.math.Long128;
public class Kperf implements Runnable{
@@ -36,8 +38,8 @@ public class Kperf implements Runnable{
private volatile KLALBPacketLink link;
private LinkStatus status=new LinkStatus();
private SpeedAndTrafficAndDelayMonitorDataImpl monitor=new SpeedAndTrafficAndDelayMonitorDataImpl(HighAccuracyClock.SYSTEM_CLOCK);
private HighAccuracyClock sysclk =HighAccuracyClock.SYSTEM_CLOCK;
private SpeedAndTrafficAndDelayMonitorDataImpl monitor=new SpeedAndTrafficAndDelayMonitorDataImpl(sysclk);
private volatile boolean closed = false;
private volatile ThreadParker tlock=new ThreadParker();
@@ -200,7 +202,9 @@ public class Kperf implements Runnable{
while ((!link.isClosed()) && (!closed)) {
if (checkPingTimeSleep()) {
writePacketToKPL(new PINGPacket(System.nanoTime(),0, 0));
PINGPacket ping = new PINGPacket(sysclk.getCurrentTimeNTP64().longValue(), monitor.getOutSpeed(),
monitor.getInSpeed());
writePacketToKPL(ping);
}else {
KLALBPacket kpip = IsendDequeList.poll();
@@ -243,7 +247,17 @@ public class Kperf implements Runnable{
}
switch (kpp.getType()) {
case KLALBPacket.PING:
sendIPacket(new PONGPacket(((PINGPacket) kpp).getTime() ,kpp.getRcvtime(), System.nanoTime(),0, 0));
long pct = System.nanoTime() - kpp.getRcvtime();
Long128 curr = sysclk.getCurrentTimeNanos();
Long128 rcv = curr.subtract(pct);
Long128 local1281 = NTPTimestamps.nanosToNtp128BitTimestamp(curr);
PONGPacket pong = new PONGPacket(((PINGPacket) kpp).getTime(),
NTPTimestamps.ntp128To64(NTPTimestamps.nanosToNtp128BitTimestamp(rcv)).longValue(),
NTPTimestamps.ntp128To64(NTPTimestamps.nanosToNtp128BitTimestamp(curr)).longValue(),
monitor.getUploadBandwidth().calculateBandwidth(500000000L),
monitor.getDownloadBandwidth().calculateBandwidth(500000000L));
sendIPacket(pong);
break;
case KLALBPacket.PONG:
if (fst) {
@@ -260,37 +274,43 @@ public class Kperf implements Runnable{
tc.start();
fst = false;
}
PONGPacket png = (PONGPacket) kpp;
long ul = png.getRcvtime() - png.getTimepingsnd()-(png.getTimepongsnd()-png.getTimepingrcv());
Long128 local = sysclk.getCurrentTimeNanos();
Long128 local128 = NTPTimestamps.nanosToNtp128BitTimestamp(local);
long DsndDelayFactor0 = png.getTimepingrcv() - png.getTimepingsnd();
long DrcvDelayFactor0 = png.getRcvtime() - png.getTimepongsnd();
long DsndDelayFactor;
long DrcvDelayFactor;
Long128 psnd = NTPTimestamps.ntp128BitToNanosTimestamp(
NTPTimestamps.inferNtp64To128(png.getTimepingsnd(), local128));
// System.out.println("psnd"+NTPTimestamps.nanosSince1970ToString(
// NTPTimestamps.ntp128BitToNanosTimestamp( NTPTimestamps.inferNtp64To128(
// psnd,local128))));
Long128 prcv = NTPTimestamps.ntp128BitToNanosTimestamp(
NTPTimestamps.inferNtp64To128(png.getTimepingrcv(), local128));
// System.out.println("prcv"+NTPTimestamps.nanosSince1970ToString(
// NTPTimestamps.ntp128BitToNanosTimestamp( NTPTimestamps.inferNtp64To128(
// prcv,local128))));
Long128 posnd = NTPTimestamps.ntp128BitToNanosTimestamp(
NTPTimestamps.inferNtp64To128(png.getTimepongsnd(), local128));
// System.out.println("posnd"+NTPTimestamps.nanosSince1970ToString(
// NTPTimestamps.ntp128BitToNanosTimestamp( NTPTimestamps.inferNtp64To128(
// posnd,local128))));
adjnc.getLock().lock();
try {
adjnc.calibrate(png.getTimepongsnd() + ul / 2 - png.getRcvtime(), ul / 2);
DsndDelayFactor = DsndDelayFactor0 - adjnc.getDelta();
DrcvDelayFactor = DrcvDelayFactor0 + adjnc.getDelta();
if (DsndDelayFactor < 0) {
if (DrcvDelayFactor < 0) {
long DsndDelay = prcv.subtract(psnd).longValue();
long DrcvDelay = local.subtract(posnd).longValue();
// System.out.println(DsndDelay+" "+DrcvDelay);
} else {
adjnc.setDelta(adjnc.getDelta() + DsndDelayFactor);
DsndDelayFactor = DsndDelayFactor0 - adjnc.getDelta();
DrcvDelayFactor = DrcvDelayFactor0 + adjnc.getDelta();
}
} else {
if (DrcvDelayFactor < 0) {
adjnc.setDelta(adjnc.getDelta() - DrcvDelayFactor);
DsndDelayFactor = DsndDelayFactor0 - adjnc.getDelta();
DrcvDelayFactor = DrcvDelayFactor0 + adjnc.getDelta();
}
long rtt = DsndDelay + DrcvDelay;
if (DsndDelay >= 0 && DrcvDelay >= 0) {
monitor.recordUploadDelay(DsndDelay);
monitor.recordDownloadDelay(DrcvDelay);
//sysclk.adjustClock(Long128.valueOf( DsndDelay-DrcvDelay), 0.001);
} else {
long Dfallback = rtt / 2;
if (Dfallback >= 0) {
monitor.recordUploadDelay(Dfallback);
monitor.recordDownloadDelay(Dfallback);
}
} finally {
adjnc.getLock().unlock();
// sysclk.adjustClock(Long128.valueOf( DsndDelay-DrcvDelay), 0.1);
}