<div>Hi,</div>  <div>Is it normally that high cost function call issue about event_queue_remove()?<BR>I profiles my program with gprof. I found the most spent time function call is event_queue_remove().</div>  <div>However, I only remove events when connection is closed (conn_drop()).<BR>There are two types events with flag EV_WRITE and (EV_READ | EV_PERSIST) in my program. And, there are about 250 connections and 250*2 events (read and write fd).</div>  <div>========================================================<BR>[Pseudo Code]</div>  <div>static void conn_drop(struct conn *c)<BR>{<BR>&nbsp;event_del(&amp;c-&gt;read_event);<BR>&nbsp;event_del(&amp;c-&gt;write_event);<BR>&nbsp;...<BR>}</div>  <div>static void conn_read(int fd, short what, void *d)<BR>{<BR>&nbsp;struct conn *c = (struct conn*) d;<BR>&nbsp; if( read successfully )<BR>&nbsp; {<BR>&nbsp;&nbsp;&nbsp; //do something<BR>&nbsp;&nbsp;&nbsp; if( we need reply in this time
 )<BR>&nbsp;&nbsp;&nbsp;event_add(&amp;c-&gt;write_event, NULL);<BR>&nbsp; }<BR>&nbsp; else conn_drop();</div>  <div>}</div>  <div>static void conn_write(int fd, short what, void *d)<BR>{<BR>&nbsp;struct conn *c = (struct conn*) d;<BR>&nbsp; if( write successfully )<BR>&nbsp; {<BR>&nbsp;&nbsp;&nbsp; //do something<BR>&nbsp; }</div>  <div>&nbsp; else conn_drop(); // never occur in this test</div>  <div>&nbsp; if( write was not completed)<BR>&nbsp;&nbsp;&nbsp; event_add(&amp;c-&gt;write_event, NULL); // reschedle</div>  <div>}</div>  <div>void accept_connection()<BR>{<BR>&nbsp;...<BR>&nbsp;struct conn *c = new (struct conn);<BR>&nbsp;event_set(&amp;c-&gt;read_event, c-&gt;fd, EV_READ | EV_PERSIST, conn_read, c);<BR>&nbsp;event_add(&amp;c-&gt;read_event, NULL);<BR>&nbsp;event_set(&amp;c-&gt;write_event, c-&gt;fd, EV_WRITE, conn_write, c);<BR>}</div>  <div>========================================================<BR>[ result of gprof are listed below]</div>  <div>Each sample
 counts as 0.01 seconds. (no list all!)<BR>&nbsp; %&nbsp;&nbsp; cumulative&nbsp;&nbsp; self&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; self&nbsp;&nbsp;&nbsp;&nbsp; total&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <BR>&nbsp;time&nbsp;&nbsp; seconds&nbsp;&nbsp; seconds&nbsp;&nbsp;&nbsp; calls&nbsp;&nbsp; s/call&nbsp;&nbsp; s/call&nbsp; name&nbsp;&nbsp;&nbsp; <BR>&nbsp; 8.65&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 0.34&nbsp;&nbsp;&nbsp;&nbsp; 0.34&nbsp;&nbsp;&nbsp; 85441&nbsp;&nbsp;&nbsp;&nbsp; 0.00&nbsp;&nbsp;&nbsp;&nbsp; 0.00&nbsp; event_queue_remove (No.1)<BR>&nbsp; 5.85&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 0.57&nbsp;&nbsp;&nbsp;&nbsp; 0.23&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; GetResource()&nbsp;(No.2)<BR>&nbsp; 3.05&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 1.91&nbsp;&nbsp;&nbsp;&nbsp; 0.12&nbsp;&nbsp;&nbsp;&nbsp;
 1225&nbsp;&nbsp;&nbsp;&nbsp; 0.00&nbsp;&nbsp;&nbsp;&nbsp; 0.00&nbsp; epoll_dispatch<BR>&nbsp; 1.40&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 2.62&nbsp;&nbsp;&nbsp;&nbsp; 0.06&nbsp;&nbsp;&nbsp; 30608&nbsp;&nbsp;&nbsp;&nbsp; 0.00&nbsp;&nbsp;&nbsp;&nbsp; 0.00&nbsp; conn_write(int, short, void*)<BR>&nbsp; 1.02&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 2.89&nbsp;&nbsp;&nbsp;&nbsp; 0.04&nbsp;&nbsp;&nbsp; 23800&nbsp;&nbsp;&nbsp;&nbsp; 0.00&nbsp;&nbsp;&nbsp;&nbsp; 0.00&nbsp; conn_read(int, short, void*)<BR>&nbsp; 0.89&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 3.04&nbsp;&nbsp;&nbsp;&nbsp; 0.04&nbsp;&nbsp;&nbsp; 85732&nbsp;&nbsp;&nbsp;&nbsp; 0.00&nbsp;&nbsp;&nbsp;&nbsp; 0.00&nbsp; event_queue_insert<BR>&nbsp; 0.64&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 3.36&nbsp;&nbsp;&nbsp;&nbsp; 0.03&nbsp;&nbsp;&nbsp; 58045&nbsp;&nbsp;&nbsp;&nbsp; 0.00&nbsp;&nbsp;&nbsp;&nbsp; 0.00&nbsp; event_add<BR>&nbsp; 0.25&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 3.73&nbsp;&nbsp;&nbsp;&nbsp; 0.01&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 76&nbsp;&nbsp;&nbsp;&nbsp;
 0.00&nbsp;&nbsp;&nbsp;&nbsp; 0.00&nbsp; conn_drop(connection*, char const*)<BR>&nbsp; 0.25&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 3.76&nbsp;&nbsp;&nbsp;&nbsp; 0.01&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 1&nbsp;&nbsp;&nbsp;&nbsp; 0.01&nbsp;&nbsp;&nbsp;&nbsp; 2.00&nbsp; event_base_loop<BR>&nbsp; 0.00&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 3.93&nbsp;&nbsp;&nbsp;&nbsp; 0.00&nbsp;&nbsp;&nbsp; 30771&nbsp;&nbsp;&nbsp;&nbsp; 0.00&nbsp;&nbsp;&nbsp;&nbsp; 0.00&nbsp; event_del<BR>&nbsp; 0.00&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 3.93&nbsp;&nbsp;&nbsp;&nbsp; 0.00&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 328&nbsp;&nbsp;&nbsp;&nbsp; 0.00&nbsp;&nbsp;&nbsp;&nbsp; 0.00&nbsp; server_accept(int, short, void*)<BR>========================================================<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Call graph (explanation follows)</div>  <div>granularity: each sample hit covers 2 byte(s) for 0.25% of 3.93 seconds</div>  <div>index % time&nbsp;&nbsp;&nbsp; self&nbsp; children&nbsp;&nbsp;&nbsp;
 called&nbsp;&nbsp;&nbsp;&nbsp; name<BR>-----------------------------------------------<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 0.01&nbsp;&nbsp;&nbsp; 1.99&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 1/1&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; event_loop [3]<BR>[4]&nbsp;&nbsp;&nbsp;&nbsp; 50.8&nbsp;&nbsp;&nbsp; 0.01&nbsp;&nbsp;&nbsp; 1.99&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 1&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; event_base_loop [4]<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 0.04&nbsp;&nbsp;&nbsp; 1.37&nbsp;&nbsp; 23800/23800&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; conn_read(int, short, void*) [5]<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 0.12&nbsp;&nbsp;&nbsp; 0.15&nbsp;&nbsp;&nbsp; 1225/1225&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; epoll_dispatch
 [14]<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 0.22&nbsp;&nbsp;&nbsp; 0.00&nbsp;&nbsp; 54756/85441&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; event_queue_remove [13]<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 0.06&nbsp;&nbsp;&nbsp; 0.00&nbsp;&nbsp; 30608/30608&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; conn_write(int, short, void*) [37]<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 0.00&nbsp;&nbsp;&nbsp; 0.00&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 10/30771&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; event_del [24]<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 0.00&nbsp;&nbsp;&nbsp; 0.00&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 10/85732&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; event_queue_insert [46]<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 0.00&nbsp;&nbsp;&nbsp;
 0.00&nbsp;&nbsp;&nbsp; 1225/2450&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; evsignal_recalc [160]<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 0.00&nbsp;&nbsp;&nbsp; 0.00&nbsp;&nbsp;&nbsp; 3675/3687&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; gettime [170]<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 0.00&nbsp;&nbsp;&nbsp; 0.00&nbsp;&nbsp;&nbsp; 2450/2450&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; event_tree_RB_MINMAX [171]<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 0.00&nbsp;&nbsp;&nbsp; 0.00&nbsp;&nbsp;&nbsp; 1225/1225&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; epoll_recalc [172]<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 0.00&nbsp;&nbsp;&nbsp; 0.00&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 10/10&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; event_tree_RB_NEXT
 [177]<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 0.00&nbsp;&nbsp;&nbsp; 0.00&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 10/10&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; event_tree_RB_REMOVE [178]<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 0.00&nbsp;&nbsp;&nbsp; 0.00&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 10/54780&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; event_active [169]<BR>-----------------------------------------------<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 0.12&nbsp;&nbsp;&nbsp; 0.00&nbsp;&nbsp; 30685/85441&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; event_del [24]<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 0.22&nbsp;&nbsp;&nbsp; 0.00&nbsp;&nbsp; 54756/85441&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; event_base_loop [4]<BR>[13]&nbsp;&nbsp;&nbsp;&nbsp; 8.7&nbsp;&nbsp;&nbsp; 0.34&nbsp;&nbsp;&nbsp;
 0.00&nbsp;&nbsp; 85441&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; event_queue_remove [13]<BR>-----------------------------------------------<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 0.00&nbsp;&nbsp;&nbsp; 0.00&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 10/30771&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; event_base_loop [4]<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 0.00&nbsp;&nbsp;&nbsp; 0.00&nbsp;&nbsp;&nbsp;&nbsp; 152/30771&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; conn_drop(connection*, char const*) [77]<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 0.00&nbsp;&nbsp;&nbsp; 0.13&nbsp;&nbsp; 30609/30771&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; epoll_dispatch [14]<BR>[24]&nbsp;&nbsp;&nbsp;&nbsp; 3.4&nbsp;&nbsp;&nbsp; 0.00&nbsp;&nbsp;&nbsp; 0.13&nbsp;&nbsp; 30771&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; event_del
 [24]<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 0.12&nbsp;&nbsp;&nbsp; 0.00&nbsp;&nbsp; 30685/85441&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; event_queue_remove [13]<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 0.01&nbsp;&nbsp;&nbsp; 0.00&nbsp;&nbsp; 30685/30685&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; epoll_del [83]<BR>-----------------------------------------------<BR></div><p>&#32;___________________________________________________ <br> 您的生活即時通 - 溝通、娛樂、生活、工作一次搞定! <br> http://messenger.yahoo.com.tw/