summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorNick Mathewson <nickm@torproject.org>2017-11-17 09:26:11 -0500
committerNick Mathewson <nickm@torproject.org>2017-11-17 09:26:11 -0500
commit94dce246ee97884a546113827404a45d0f16c648 (patch)
tree4a920ae459af2725959bb075cb2f55744db91b9c
parentcfacd4424009a78b6a737cd17fdf2fec60b77374 (diff)
parentb98614f1af6ed10aa0e3cd00d5baf57fb534f574 (diff)
downloadtor-94dce246ee97884a546113827404a45d0f16c648.tar.gz
tor-94dce246ee97884a546113827404a45d0f16c648.zip
Merge branch 'maint-0.3.2'
-rw-r--r--changes/ticket241583
-rw-r--r--changes/ticket242543
-rw-r--r--doc/tor.1.txt34
-rw-r--r--src/or/scheduler.c24
4 files changed, 49 insertions, 15 deletions
diff --git a/changes/ticket24158 b/changes/ticket24158
new file mode 100644
index 0000000000..3cdc06afae
--- /dev/null
+++ b/changes/ticket24158
@@ -0,0 +1,3 @@
+ o Minor bugfixes (logging):
+ Only log about no longer having KIST support once. Fixes bug 24158; bugfix
+ on 0.3.2
diff --git a/changes/ticket24254 b/changes/ticket24254
new file mode 100644
index 0000000000..98d5d6bacd
--- /dev/null
+++ b/changes/ticket24254
@@ -0,0 +1,3 @@
+ o Documentation:
+ Add notes in man page regarding OS support for the various scheduler types.
+ Attempt to use less jargon in the scheduler section. Closes ticket 24254.
diff --git a/doc/tor.1.txt b/doc/tor.1.txt
index 725baaa643..e1c3cdaf98 100644
--- a/doc/tor.1.txt
+++ b/doc/tor.1.txt
@@ -791,27 +791,35 @@ GENERAL OPTIONS
restarting Tor. (Default: 0)
[[Schedulers]] **Schedulers** **KIST**|**KISTLite**|**Vanilla**::
- Specify the scheduler type that tor should use to handle outbound data on
- channels. This is an ordered list by priority which means that the first
- value will be tried first and if unavailable, the second one is tried and
- so on. It is possible to change thse values at runtime.
+ Specify the scheduler type that tor should use. The scheduler is
+ responsible for moving data around within a Tor process. This is an ordered
+ list by priority which means that the first value will be tried first and if
+ unavailable, the second one is tried and so on. It is possible to change
+ these values at runtime. This option mostly effects relays, and most
+ operators should leave it set to its default value.
(Default: KIST,KISTLite,Vanilla)
+
The possible scheduler types are:
+
- **KIST**: Kernel Informed Socket Transport. Tor will use the kernel tcp
- information stack per-socket to make an informed decision on if it should
- send or not the data. (Only available on Linux)
+ **KIST**: Kernel-Informed Socket Transport. Tor will use TCP information
+ from the kernel to make informed decisions regarding how much data to send
+ and when to send it. KIST also handles traffic in batches (see
+ KISTSchedRunInterval) in order to improve traffic prioritization decisions.
+ As implemented, KIST will only work on Linux kernel version 2.6.39 or
+ higher.
+
- **KISTLite**: Same as KIST but without kernel support which means that tor
- will use all the same mecanics as KIST but without the TCP information the
- kernel can provide.
+ **KISTLite**: Same as KIST but without kernel support. Tor will use all
+ the same mechanics as with KIST, including the batching, but its decisions
+ regarding how much data to send will not be as good. KISTLite will work on
+ all kernels and operating systems, and the majority of the benefits of KIST
+ are still realized with KISTLite.
+
- **Vanilla**: The scheduler that tor has always used that is do as much as
- possible or AMAP.
+ **Vanilla**: The scheduler that Tor used before KIST was implemented. It
+ sends as much data as possible, as soon as possible. Vanilla will work on
+ all kernels and operating systems.
[[KISTSchedRunInterval]] **KISTSchedRunInterval** __NUM__ **msec**::
- If KIST or KISTLite is used in Schedulers option, this control at which
+ If KIST or KISTLite is used in the Schedulers option, this controls at which
interval the scheduler tick is. If the value is 0 msec, the value is taken
from the consensus if possible else it will fallback to the default 10
msec. Maximum possible value is 100 msec. (Default: 0 msec)
diff --git a/src/or/scheduler.c b/src/or/scheduler.c
index 510c16b217..0bc827e276 100644
--- a/src/or/scheduler.c
+++ b/src/or/scheduler.c
@@ -171,6 +171,8 @@ STATIC smartlist_t *channels_pending = NULL;
*/
STATIC struct event *run_sched_ev = NULL;
+static int have_logged_kist_suddenly_disabled = 0;
+
/*****************************************************************************
* Scheduling system static function definitions
*
@@ -252,13 +254,31 @@ select_scheduler(void)
case SCHEDULER_KIST:
if (!scheduler_can_use_kist()) {
#ifdef HAVE_KIST_SUPPORT
- log_notice(LD_SCHED, "Scheduler type KIST has been disabled by "
- "the consensus or no kernel support.");
+ if (!have_logged_kist_suddenly_disabled) {
+ /* We should only log this once in most cases. If it was the kernel
+ * losing support for kist that caused scheduler_can_use_kist() to
+ * return false, then this flag makes sure we only log this message
+ * once. If it was the consensus that switched from "yes use kist" to
+ * "no don't use kist", then we still set the flag so we log once, but
+ * we unset the flag elsewhere if we ever can_use_kist() again.
+ */
+ have_logged_kist_suddenly_disabled = 1;
+ log_notice(LD_SCHED, "Scheduler type KIST has been disabled by "
+ "the consensus or no kernel support.");
+ }
#else /* !(defined(HAVE_KIST_SUPPORT)) */
log_info(LD_SCHED, "Scheduler type KIST not built in");
#endif /* defined(HAVE_KIST_SUPPORT) */
continue;
}
+ /* This flag will only get set in one of two cases:
+ * 1 - the kernel lost support for kist. In that case, we don't expect to
+ * ever end up here
+ * 2 - the consensus went from "yes use kist" to "no don't use kist".
+ * We might end up here if the consensus changes back to "yes", in which
+ * case we might want to warn the user again if it goes back to "no"
+ * yet again. Thus we unset the flag */
+ have_logged_kist_suddenly_disabled = 0;
new_scheduler = get_kist_scheduler();
scheduler_kist_set_full_mode();
goto end;