<br><br><div><span class="gmail_quote">On 3/24/06, <b class="gmail_sendername">Luigi Rizzo</b> &lt;<a href="mailto:rizzo@icir.org">rizzo@icir.org</a>&gt; wrote:</span><blockquote class="gmail_quote" style="border-left: 1px solid rgb(204, 204, 204); margin: 0pt 0pt 0pt 0.8ex; padding-left: 1ex;">
followup, a patch implementing the profiling code is on Mantis,<br><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<a href="http://bugs.digium.com/view.php?id=6795">http://bugs.digium.com/view.php?id=6795</a><br><br>I would be grateful if some good soul could tell me what's
<br>the header file that defines rdtsc() for i586+ platforms<br>(it is in &lt;machine/cpufunc.h&gt; for FreeBSD) and whether<br>there is an equivalent high performance counter available<br>on other systems with different CPUs (
e.g. i486...)</blockquote><div><br>
You can get indepth working code for various cpus' performance counters
by perusing oprofile - <a href="http://oprofile.sourceforge.net/news/">http://oprofile.sourceforge.net/news/</a><br>
&nbsp;</div><br><blockquote class="gmail_quote" style="border-left: 1px solid rgb(204, 204, 204); margin: 0pt 0pt 0pt 0.8ex; padding-left: 1ex;">cheers<br>luigi<br><br>On Fri, Mar 24, 2006 at 01:19:43AM -0800, Luigi Rizzo wrote:
<br>&gt; i have decided to do a bit of profiling of the locking in asterisk,<br>&gt; and with a little bit of code (maybe 100 lines total)<br>&gt; implemented a simple 'show profile' command that lets you track<br>&gt; the time spent in various sections of code using the TSC timer.
<br>&gt; I will post the code once polished.<br>&gt;<br>&gt; Below, you see the output generated by putting (automatically)<br>&gt; wrappers around the various mutex_lock functions, slightly modified<br>&gt; so that we first do (and time) a trylock, and if it fails we then do
<br>&gt; the blocking operation (not timed to avoid counting time<br>&gt; where the CPU is doing other things).<br>&gt;<br>&gt; Note something interesting: i have no IAX devices connected, yet<br>&gt; iax2 does approx 200 mutex_lock per second.
<br>&gt; Each mutex lock in my case costs between 1000 and 2000 ticks<br>&gt; (it is a 2 GHz CPU).<br>&gt;<br>&gt; more data later...<br>&gt; if you have any ideas on places to profile, let me know.<br>&gt; the mechanism is good for counting time as well as events
<br>&gt; or other user-defined values.<br>&gt;<br>&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; cheers<br>&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; luigi<br>&gt;<br>&gt; *CLI&gt; show uptime<br>&gt; System uptime: 2 minutes, 54 seconds<br>&gt; *CLI&gt; show profile chan<br>&gt; profile values (183, allocated 190)
<br>&gt; -------------------<br>&gt;
item&nbsp;&nbsp;&nbsp;&nbsp;
scale&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;events&nbsp;&nbsp;
total_ticks&nbsp;&nbsp; avg_ticks&nbsp;&nbsp;event_name<br>&gt;&nbsp;&nbsp;&nbsp;&nbsp;
15: [&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
0]&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0
mtx_lock_chanvars.c<br>&gt;&nbsp;&nbsp;&nbsp;&nbsp; 36:
[&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
0]&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
43&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;47148&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
1096 mtx_lock_channel.c<br>&gt;&nbsp;&nbsp;&nbsp;&nbsp; 60:
[&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
0]&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;2&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
3480&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 1740
mtx_lock_chan_agent.c<br>&gt;&nbsp;&nbsp;&nbsp;&nbsp; 61:
[&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
0]&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0
mtx_lock_chan_features.c<br>&gt;&nbsp;&nbsp;&nbsp;&nbsp; 64:
[&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
0]&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;40773&nbsp;&nbsp;&nbsp;&nbsp;
40135552&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;984
mtx_lock_chan_iax2.c<br>&gt;&nbsp;&nbsp;&nbsp;&nbsp; 65:
[&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
0]&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0
mtx_lock_chan_local.c<br>&gt;&nbsp;&nbsp;&nbsp;&nbsp; 66:
[&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
0]&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;714&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;1013180&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
1419 mtx_lock_chan_mgcp.c<br>&gt;&nbsp;&nbsp;&nbsp;&nbsp; 67:
[&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
0]&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0
mtx_lock_chan_oss.c<br>&gt;&nbsp;&nbsp;&nbsp;&nbsp; 68:
[&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
0]&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
2729&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;3406424&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
1248 mtx_lock_chan_sip.c<br>&gt;&nbsp;&nbsp;&nbsp;&nbsp; 69:
[&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
0]&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;178&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
509808&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 2864
mtx_lock_chan_skinny.c<br>&gt;&nbsp;&nbsp;&nbsp;&nbsp; 70:
[&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
0]&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;357&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
513900&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 1439
mtx_lock_chan_zap.c<br>&gt;&nbsp;&nbsp;&nbsp;&nbsp; 76:
[&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
0]&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0
mtx_lock_app_chanisavail.c<br>&gt;&nbsp;&nbsp;&nbsp;&nbsp; 77:
[&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
0]&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0
mtx_lock_app_chanspy.c<br>&gt;&nbsp;&nbsp;&nbsp;&nbsp; 85:
[&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
0]&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0
mtx_lock_app_dumpchan.c<br>&gt;&nbsp;&nbsp;&nbsp;&nbsp;167:
[&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
0]&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0
mtx_lock_func_channel.c<br>&gt;<br>&gt; _______________________________________________<br>&gt; --Bandwidth and Colocation provided by <a href="http://Easynews.com">Easynews.com</a> --<br>&gt;<br>&gt; asterisk-dev mailing list
<br>&gt; To UNSUBSCRIBE or update options visit:<br>&gt;&nbsp;&nbsp;&nbsp;&nbsp;<a href="http://lists.digium.com/mailman/listinfo/asterisk-dev">http://lists.digium.com/mailman/listinfo/asterisk-dev</a><br>_______________________________________________
<br>--Bandwidth and Colocation provided by <a href="http://Easynews.com">Easynews.com</a> --<br><br>asterisk-dev mailing list<br>To UNSUBSCRIBE or update options visit:<br>&nbsp;&nbsp; <a href="http://lists.digium.com/mailman/listinfo/asterisk-dev">
http://lists.digium.com/mailman/listinfo/asterisk-dev</a><br></blockquote></div><br><br clear="all"><br>-- <br>Mike Taht<br>PostCards From the Bleeding Edge<br><a href="http://the-edge.blogspot.com">http://the-edge.blogspot.com
</a>