[tor-bugs] #22210 [Core Tor/Tor]: circuit_is_acceptable is slow due to IP and fingerprint parsing

Tor Bug Tracker & Wiki blackhole at torproject.org
Wed May 10 09:31:00 UTC 2017


#22210: circuit_is_acceptable is slow due to IP and fingerprint parsing
--------------------------+------------------------------------
 Reporter:  teor          |          Owner:
     Type:  defect        |         Status:  new
 Priority:  Medium        |      Milestone:  Tor: 0.3.2.x-final
Component:  Core Tor/Tor  |        Version:  Tor: 0.2.8.12
 Severity:  Normal        |     Resolution:
 Keywords:  tor-hs        |  Actual Points:
Parent ID:                |         Points:  1
 Reviewer:                |        Sponsor:
--------------------------+------------------------------------

Comment (by arma):

 Replying to [ticket:22210 teor]:
 > 43.76 s   34.7%       1.30 s             connection_ap_can_use_exit
 > 39.51 s   31.3%       574.00 ms                   node_get_by_nickname
 > 38.93 s   30.9%       764.00 ms                    node_get_by_hex_id

 This case happens because they're hidden service descriptor lookups, so
 they're general (exit) streams yet they have conn->chosen_exit_name set.

 That's a surprising amount of time in hex_digest_nickname_decode(), but I
 guess with all the strlcpy's, etc, that it does, it shouldn't be that
 surprising.

 You're right that it's inefficient here, since the logic is "consider a
 given circuit, and then reparse what exit node this conn says it's for,
 and then see if that circuit ends at that exit node", and in theory we
 don't need to keep reparsing. I would be tempted to try to take a step
 farther back though and figure out if there's a way to call the broader
 "how's it going, are any streams ready to be attached to circuits yet"
 function more sparingly.

--
Ticket URL: <https://trac.torproject.org/projects/tor/ticket/22210#comment:3>
Tor Bug Tracker & Wiki <https://trac.torproject.org/>
The Tor Project: anonymity online


More information about the tor-bugs mailing list