forked from KNEMC/KLALB
优化内存,提高队列和线程池性能。更新JCTOOL库
This commit is contained in:
@@ -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);
|
||||
}
|
||||
|
||||
|
||||
|
||||
Reference in New Issue
Block a user