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

[tor-bugs] #4518 [Tor Relay]: assign_onionskin_to_cpuworker is too expensive



#4518: assign_onionskin_to_cpuworker is too expensive
-----------------------+----------------------------------------------------
 Reporter:  nickm      |          Owner:                    
     Type:  defect     |         Status:  new               
 Priority:  major      |      Milestone:  Tor: 0.2.2.x-final
Component:  Tor Relay  |        Version:                    
 Keywords:             |         Parent:                    
   Points:             |   Actualpoints:                    
-----------------------+----------------------------------------------------
 The function "assign_onionskin_to_cpuworker()" is 20% of CPU usage on
 Moritz's profile.  If that's so, the likeliest culprit is one of the
 functions getting inlined there: probably cull_wedged_cpuworkers, which
 does a linear walk over all the connections.

 (I'm guessing that connection_get_by_type_state, which also does a linear
 walk over all the connections, doesn't show up in the profile because, on
 a busy server, the average cpuworker is always busy, so
 assign_onionskin_to_cpuworker mostly gets called from cpuworker.c to
 assign an onionskin to a cpuworker that just became idle.)

 The easiest fix for this would be to only call cull_wedged_cpuworkers
 every N seconds, or every N invocations of
 assign_onionskin_to_cpuworker().  This is easy enough that I'm marking
 this one for 0.2.2

 If connection_get_by_type_state shows up in profiles, we can look into
 another data structure on connections.

-- 
Ticket URL: <https://trac.torproject.org/projects/tor/ticket/4518>
Tor Bug Tracker & Wiki <https://trac.torproject.org/>
The Tor Project: anonymity online
_______________________________________________
tor-bugs mailing list
tor-bugs@xxxxxxxxxxxxxxxxxxxx
https://lists.torproject.org/cgi-bin/mailman/listinfo/tor-bugs