Commit 8e388bc3 authored by Nick Mathewson's avatar Nick Mathewson 🦀
Browse files

Only call cull_wedged_cpuworkers once every 60 seconds.

The function is over 10 or 20% on some of Moritz's profiles, depending
on how you could.

Since it's checking for a multi-hour timeout, this is safe to do.

Fixes bug 4518.
parent 5a02406a
Loading
Loading
Loading
Loading

changes/bug4518

0 → 100644
+4 −0
Original line number Diff line number Diff line
  o Minor bugfixes (performance):
    - Avoid frequent calls to the fairly expensive cull_wedged_cpuworkers
      function. This was eating up hideously large amounts of time on some
      busy servers. Fixes bug 4518.
+12 −2
Original line number Diff line number Diff line
@@ -446,9 +446,19 @@ assign_onionskin_to_cpuworker(connection_t *cpuworker,
{
  char qbuf[1];
  char tag[TAG_LEN];
  time_t now = approx_time();
  static time_t last_culled_cpuworkers = 0;

  /* Checking for wedged cpuworkers requires a linear search over all
   * connections, so let's do it only once a minute.
   */
#define CULL_CPUWORKERS_INTERVAL 60

  if (last_culled_cpuworkers + CULL_CPUWORKERS_INTERVAL <= now) {
    cull_wedged_cpuworkers();
    spawn_enough_cpuworkers();
    last_culled_cpuworkers = now;
  }

  if (1) {
    if (num_cpuworkers_busy == num_cpuworkers) {