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:
zzz
2015-07-05 12:08:33 +00:00
parent 98a4460bde
commit 113a8a52f3
5 changed files with 13 additions and 4 deletions

View File

@@ -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();
} }

View File

@@ -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();
} }

View File

@@ -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");
} }

View File

@@ -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();
} }

View File

@@ -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);
} }
/** /**