forked from I2P_Developers/i2p.i2p
Transport: Raise bandwidth refiller thread priority
so I/O doesn't stall under high CPU load - Raise DH generator thread priority to keep DH building out of event pumper thread - Raise PRNG and YK generator thread priorites one notch - Set I2PThread priority in constructor Fixes problems mainly seen on Windows, which seems to be much more sensitive to priority settings
This commit is contained in:
@@ -56,7 +56,7 @@ public class AsyncFortunaStandalone extends FortunaStandalone implements Runnabl
|
|||||||
_isRunning = true;
|
_isRunning = true;
|
||||||
_refillThread = new I2PThread(this, "PRNG");
|
_refillThread = new I2PThread(this, "PRNG");
|
||||||
_refillThread.setDaemon(true);
|
_refillThread.setDaemon(true);
|
||||||
_refillThread.setPriority(Thread.MIN_PRIORITY+1);
|
_refillThread.setPriority(Thread.NORM_PRIORITY - 2);
|
||||||
_refillThread.start();
|
_refillThread.start();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@@ -91,7 +91,7 @@ class YKGenerator {
|
|||||||
return;
|
return;
|
||||||
_precalcThread = new I2PThread(new YKPrecalcRunner(MIN_NUM_BUILDERS, MAX_NUM_BUILDERS),
|
_precalcThread = new I2PThread(new YKPrecalcRunner(MIN_NUM_BUILDERS, MAX_NUM_BUILDERS),
|
||||||
"YK Precalc", true);
|
"YK Precalc", true);
|
||||||
_precalcThread.setPriority(Thread.MIN_PRIORITY);
|
_precalcThread.setPriority(Thread.NORM_PRIORITY - 2);
|
||||||
_isRunning = true;
|
_isRunning = true;
|
||||||
_precalcThread.start();
|
_precalcThread.start();
|
||||||
}
|
}
|
||||||
|
@@ -17,6 +17,8 @@ import java.util.concurrent.CopyOnWriteArraySet;
|
|||||||
* In case its useful later...
|
* In case its useful later...
|
||||||
* (e.g. w/ native programatic thread dumping, etc)
|
* (e.g. w/ native programatic thread dumping, etc)
|
||||||
*
|
*
|
||||||
|
* As of 0.9.21, I2PThreads are initialized to NORM_PRIORITY
|
||||||
|
* (not the priority of the creating thread).
|
||||||
*/
|
*/
|
||||||
public class I2PThread extends Thread {
|
public class I2PThread extends Thread {
|
||||||
/**
|
/**
|
||||||
@@ -31,36 +33,42 @@ public class I2PThread extends Thread {
|
|||||||
|
|
||||||
public I2PThread() {
|
public I2PThread() {
|
||||||
super();
|
super();
|
||||||
|
setPriority(NORM_PRIORITY);
|
||||||
//if ( (_log == null) || (_log.shouldLog(Log.DEBUG)) )
|
//if ( (_log == null) || (_log.shouldLog(Log.DEBUG)) )
|
||||||
// _createdBy = new Exception("Created by");
|
// _createdBy = new Exception("Created by");
|
||||||
}
|
}
|
||||||
|
|
||||||
public I2PThread(String name) {
|
public I2PThread(String name) {
|
||||||
super(name);
|
super(name);
|
||||||
|
setPriority(NORM_PRIORITY);
|
||||||
//if ( (_log == null) || (_log.shouldLog(Log.DEBUG)) )
|
//if ( (_log == null) || (_log.shouldLog(Log.DEBUG)) )
|
||||||
// _createdBy = new Exception("Created by");
|
// _createdBy = new Exception("Created by");
|
||||||
}
|
}
|
||||||
|
|
||||||
public I2PThread(Runnable r) {
|
public I2PThread(Runnable r) {
|
||||||
super(r);
|
super(r);
|
||||||
|
setPriority(NORM_PRIORITY);
|
||||||
//if ( (_log == null) || (_log.shouldLog(Log.DEBUG)) )
|
//if ( (_log == null) || (_log.shouldLog(Log.DEBUG)) )
|
||||||
// _createdBy = new Exception("Created by");
|
// _createdBy = new Exception("Created by");
|
||||||
}
|
}
|
||||||
|
|
||||||
public I2PThread(Runnable r, String name) {
|
public I2PThread(Runnable r, String name) {
|
||||||
super(r, name);
|
super(r, name);
|
||||||
|
setPriority(NORM_PRIORITY);
|
||||||
//if ( (_log == null) || (_log.shouldLog(Log.DEBUG)) )
|
//if ( (_log == null) || (_log.shouldLog(Log.DEBUG)) )
|
||||||
// _createdBy = new Exception("Created by");
|
// _createdBy = new Exception("Created by");
|
||||||
}
|
}
|
||||||
public I2PThread(Runnable r, String name, boolean isDaemon) {
|
public I2PThread(Runnable r, String name, boolean isDaemon) {
|
||||||
super(r, name);
|
super(r, name);
|
||||||
setDaemon(isDaemon);
|
setDaemon(isDaemon);
|
||||||
|
setPriority(NORM_PRIORITY);
|
||||||
//if ( (_log == null) || (_log.shouldLog(Log.DEBUG)) )
|
//if ( (_log == null) || (_log.shouldLog(Log.DEBUG)) )
|
||||||
// _createdBy = new Exception("Created by");
|
// _createdBy = new Exception("Created by");
|
||||||
}
|
}
|
||||||
|
|
||||||
public I2PThread(ThreadGroup g, Runnable r) {
|
public I2PThread(ThreadGroup g, Runnable r) {
|
||||||
super(g, r);
|
super(g, r);
|
||||||
|
setPriority(NORM_PRIORITY);
|
||||||
//if ( (_log == null) || (_log.shouldLog(Log.DEBUG)) )
|
//if ( (_log == null) || (_log.shouldLog(Log.DEBUG)) )
|
||||||
// _createdBy = new Exception("Created by");
|
// _createdBy = new Exception("Created by");
|
||||||
}
|
}
|
||||||
|
@@ -98,7 +98,7 @@ public class FIFOBandwidthLimiter {
|
|||||||
_lastStatsUpdated = now();
|
_lastStatsUpdated = now();
|
||||||
_refiller = new FIFOBandwidthRefiller(_context, this);
|
_refiller = new FIFOBandwidthRefiller(_context, this);
|
||||||
_refillerThread = new I2PThread(_refiller, "BWRefiller", true);
|
_refillerThread = new I2PThread(_refiller, "BWRefiller", true);
|
||||||
_refillerThread.setPriority(I2PThread.NORM_PRIORITY-1);
|
_refillerThread.setPriority(I2PThread.NORM_PRIORITY + 1);
|
||||||
_refillerThread.start();
|
_refillerThread.start();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@@ -470,7 +470,8 @@ public class DHSessionKeyBuilder {
|
|||||||
_log.debug("DH Precalc (minimum: " + _minSize + " max: " + _maxSize + ", delay: "
|
_log.debug("DH Precalc (minimum: " + _minSize + " max: " + _maxSize + ", delay: "
|
||||||
+ _calcDelay + ")");
|
+ _calcDelay + ")");
|
||||||
_builders = new LinkedBlockingQueue<DHSessionKeyBuilder>(_maxSize);
|
_builders = new LinkedBlockingQueue<DHSessionKeyBuilder>(_maxSize);
|
||||||
setPriority(Thread.MIN_PRIORITY);
|
if (!SystemVersion.isWindows())
|
||||||
|
setPriority(Thread.NORM_PRIORITY - 1);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
Reference in New Issue
Block a user