| 
					
				 | 
			
			
				@@ -142,6 +142,12 @@ run `make test-network`. 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 We also have scripts to run integration tests using Stem.  To try them, set 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 `STEM_SOURCE_DIR` to your Stem source directory, and run `test-stem`. 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+Profiling Tor 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+------------- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+Ongoing notes about Tor profiling can be found at 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+https://pad.riseup.net/p/profiling-tor 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 Profiling Tor with oprofile 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 --------------------------- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -167,6 +173,55 @@ Here are some basic instructions 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				    * `opcontrol --dump;` 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				    * `opreport -l that_dir/*` 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  - Profit 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+Profiling Tor with perf 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+----------------------- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+This works with a running Tor, and requires root. 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+1. Decide how long you want to profile for. Start with (say) 30 seconds. If that 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+   works, try again with longer times. 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+2. Find the PID of your running tor process. 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+3. Run `perf record --call-graph dwarf -p <PID> sleep <SECONDS>` 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+     
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+   (You may need to do this as root.) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+       
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+   You might need to add `-e cpu-clock` as an option to the perf record line 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+   above, if you are on an older CPU without access to hardware profiling 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+   events, or in a VM, or something. 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+4. Now you have a perf.data file. Have a look at it with `perf report 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+   --no-children --sort symbol,dso` or `perf report --no-children --sort 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+   symbol,dso --stdio --header`. How does it look? 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+5a. Once you have a nice big perf.data file, you can compress it, encrypt it, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    and send it to your favorite Tor developers. 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+5b. Or maybe you'd rather not send a nice big perf.data file. Who knows what's 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    in that!? It's kinda scary. To generate a less scary file, you can use `perf 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    report -g > <FILENAME>.out`. Then you can compress that and put it somewhere 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    public. 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+Profiling Tor with gperftools aka Google-performance-tools 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+---------------------------------------------------------- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+This should work on nearly any unixy system. It doesn't seem to be compatible 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+with RunAsDaemon though. 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+Beforehand, install google-perftools. 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+1. You need to rebuild Tor, hack the linking steps to add `-lprofiler` to the 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+   libs. You can do this by adding `LIBS=-lprofiler` when you call `./configure`. 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+Now you can run Tor with profiling enabled, and use the pprof utility to look at 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+performance! See the gperftools manual for more info, but basically: 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+2. Run `env CPUPROFILE=/tmp/profile src/or/tor -f <path/torrc>`. The profile file 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+   is not written to until Tor finishes execuction. 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+3. Run `pprof src/or/tor /tm/profile` to start the REPL. 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 Generating and analyzing a callgraph 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 ------------------------------------ 
			 |