a04daefbb1
This patch enables profiling (capturing function call trace like cProfile [1]) worker processes on the fly while service is running. User requests the oslo service process to start profiling by writing "prof()" command to backdoor socket, once the service (like neutron-server) finishes expected processing (example finishing API call), user again writes "prof()" command with file name as argument to dump the function calltrace stats. Stats file (in pstat format with user provided filename by adding .prof) will be generated in temp directory. For example, to profile neutron server process, 1) echo "prof()" | nc localhost 8002 2) Issue neutron command (or run rally scenarios tests) neutron net-create n1 neutron port-create --name p1 n1 neutron port-delete p1 neutron net-delete n1 3) echo "prof('neutron')" | nc localhost 8002 where 8002 is the port which we set like below in neutron.conf backdoor_port=8002 We can later print the stats from the trace file like below stats = pstats.Stats('/tmp/neutron.prof') stats.print_stats() The trace file will look like in (for above neutron API calls) [2]. We use Yappi with context set to greenlet [3] to profile greenlets. We can't use GreenletProfiler [4], which does the same [5] 1) as it is no more maintained 2) Also compiling yappi source inside GreenletProfiler is failing for python3. [1] https://docs.python.org/2/library/profile.html [2] https://gist.github.com/venkataanil/64d5e672bf0206dc151e73fc1058a983 [3] https://bitbucket.org/sumerc/yappi/pull-requests/3 [4] https://pypi.org/project/GreenletProfiler/ [5] https://emptysqua.re/blog/greenletprofiler/ Depends-On: Ibea0cdb732923f1b53d5cb6aeeb4041fb5973494 Change-Id: Id2418093494f1e233a653f6c73bd6894e4a40184 |
||
---|---|---|
.. | ||
add_reno-3b4ae0789e9c45b4.yaml | ||
add-timeout-looping-call-5cc396b75597c3c2.yaml | ||
profile-worker-5d3fd0f0251d62b8.yaml | ||
threadgroup-cancel-bd89d72f383a3d9b.yaml | ||
timer-args-f578c8f9d08b217d.yaml | ||
timer-stop_on_exception-9f21d7c4d6d1b0d9.yaml |