[Author Prev][Author Next][Thread Prev][Thread Next][Author Index][Thread Index]

Tor is out

Tor fixes a lot of memory fragmentation problems that
were making the Tor process bloat especially on Linux; makes our TLS
handshake blend in better; sends "bootstrap phase" status events to the
controller, so it can keep the user informed of progress (and problems)
fetching directory information and establishing circuits; and adds a
variety of smaller features.

The big Tor relays on Linux who are having memory problems should try
this one out and let us know how it goes for you.

(Yes, the 0.2.0.x tree hasn't quite gone stable yet. But we wanted to
keep making progress while it finishes stabilizing.)


Changes in version - 2008-06-13
  o Major features:
    - More work on making our TLS handshake blend in: modify the list
      of ciphers advertised by OpenSSL in client mode to even more
      closely resemble a common web browser. We cheat a little so that
      we can advertise ciphers that the locally installed OpenSSL doesn't
      know about.
    - Start sending "bootstrap phase" status events to the controller,
      so it can keep the user informed of progress fetching directory
      information and establishing circuits. Also inform the controller
      if we think we're stuck at a particular bootstrap phase. Implements
      proposal 137.
    - Resume using OpenSSL's RAND_poll() for better (and more portable)
      cross-platform entropy collection again. We used to use it, then
      stopped using it because of a bug that could crash systems that
      called RAND_poll when they had a lot of fds open. It looks like the
      bug got fixed in late 2006. Our new behavior is to call RAND_poll()
      at startup, and to call RAND_poll() when we reseed later only if
      we have a non-buggy OpenSSL version.

  o Major bugfixes:
    - When we choose to abandon a new entry guard because we think our
      older ones might be better, close any circuits pending on that
      new entry guard connection. This fix should make us recover much
      faster when our network is down and then comes back. Bugfix on; found by lodger.

  o Memory fixes and improvements:
    - Add a malloc_good_size implementation to OpenBSD_malloc_linux.c,
      to avoid unused RAM in buffer chunks and memory pools.
    - Speed up parsing and cut down on memory fragmentation by using
      stack-style allocations for parsing directory objects. Previously,
      this accounted for over 40% of allocations from within Tor's code
      on a typical directory cache.
    - Use a Bloom filter rather than a digest-based set to track which
      descriptors we need to keep around when we're cleaning out old
      router descriptors. This speeds up the computation significantly,
      and may reduce fragmentation.
    - Reduce the default smartlist size from 32 to 16; it turns out that
      most smartlists hold around 8-12 elements tops.
    - Make dumpstats() log the fullness and size of openssl-internal
    - If the user has applied the experimental SSL_MODE_RELEASE_BUFFERS
      patch to their OpenSSL, turn it on to save memory on servers. This
      patch will (with any luck) get included in a mainline distribution
      before too long.
    - Never use OpenSSL compression: it wastes RAM and CPU trying to
      compress cells, which are basically all encrypted, compressed,
      or both.

  o Minor bugfixes:
    - Stop reloading the router list from disk for no reason when we
      run out of reachable directory mirrors. Once upon a time reloading
      it would set the 'is_running' flag back to 1 for them. It hasn't
      done that for a long time.
    - In very rare situations new hidden service descriptors were
      published earlier than 30 seconds after the last change to the
      service. (We currently think that a hidden service descriptor
      that's been stable for 30 seconds is worth publishing.)

  o Minor features:
    - Allow separate log levels to be configured for different logging
      domains. For example, this allows one to log all notices, warnings,
      or errors, plus all memory management messages of level debug or
      higher, with: Log [MM] debug-err [*] notice-err file /var/log/tor.
    - Add a couple of extra warnings to --enable-gcc-warnings for GCC 4.3,
      and stop using a warning that had become unfixably verbose under
      GCC 4.3.
    - New --hush command-line option similar to --quiet. While --quiet
      disables all logging to the console on startup, --hush limits the
      output to messages of warning and error severity.
    - Servers support a new URL scheme for consensus downloads that
      allows the client to specify which authorities are trusted.
      The server then only sends the consensus if the client will trust
      it. Otherwise a 404 error is sent back. Clients use this
      new scheme when the server supports it (meaning it's running or later). Implements proposal 134.
    - New configure/torrc options (--enable-geoip-stats,
      DirRecordUsageByCountry) to record how many IPs we've served
      directory info to in each country code, how many status documents
      total we've sent to each country code, and what share of the total
      directory requests we should expect to see.
    - Use the TLS1 hostname extension to more closely resemble browser
    - Lots of new unit tests.
    - Add a macro to implement the common pattern of iterating through
      two parallel lists in lockstep.

Attachment: signature.asc
Description: Digital signature