Under linux 2.6.21 and dynticks you can notice that the interrupt count
is 50-70 interrupts per seconds higher when running audacious in idle
mode (no song playing):
vmstat 1 (without audacious):
procs -----------memory---------- ---swap-- -----io---- -system--
----cpu----
r b swpd free buff cache si so bi bo in cs us sy
id wa
0 0 16464 23452 78984 670780 0 1 110 149 139 738 25 6
64 5
0 0 16464 23452 78984 670780 0 0 0 0 72 208 6 0
94 0
0 0 16464 23452 78984 670780 0 0 0 0 49 130 6 0
94 0
0 0 16464 23452 78984 670780 0 0 0 0 65 328 5 0
95 0
0 0 16464 23452 78984 670780 0 0 0 0 49 120 5 0
95 0
0 0 16464 23452 78984 670780 0 0 0 0 65 182 5 0
95 0
0 0 16464 23452 78984 670780 0 0 0 0 45 117 6 0
94 0
0 0 16464 23452 78984 670780 0 0 0 0 77 194 5 0
95 0
0 0 16464 23452 78984 670784 0 0 0 0 55 2122 5 0
95 0
0 0 16464 23452 78988 670780 0 0 0 16 151 261 6 0
90 4
0 0 16464 23452 78988 670784 0 0 0 0 53 160 4 0
96 0
0 0 16464 23452 78988 670784 0 0 0 0 70 152 6 0
94 0
interrupts are (mostly) below 80 interrupts per seconds:
vmstat 1 (with audacious):
procs -----------memory---------- ---swap-- -----io---- -system--
----cpu----
r b swpd free buff cache si so bi bo in cs us sy
id wa
0 0 16464 18496 79032 671476 0 1 110 149 139 738 25 6
64 5
1 0 16464 18496 79032 671476 0 0 0 0 182 529 6 0
94 0
0 0 16464 18496 79032 671476 0 0 0 0 187 549 6 0
94 0
0 0 16464 18292 79044 671464 0 0 0 557 208 508 6 1
86 7
0 0 16464 18268 79044 671492 0 0 0 0 173 547 6 0
94 0
0 0 16464 18268 79044 671492 0 0 0 0 173 2425 5 1
95 0
0 0 16464 18268 79044 671492 0 0 0 0 185 566 7 1
93 0
2 0 16464 18268 79044 671492 0 0 0 0 165 476 5 0
95 0
0 0 16464 18300 79044 671492 0 0 0 0 189 554 7 0
94 0
0 0 16464 18300 79044 671492 0 0 0 0 164 492 5 0
95 0
0 0 16464 18300 79044 671492 0 0 0 0 185 2589 7 0
93 0
0 0 16464 18300 79044 671492 0 0 0 0 180 527 5 0
95 0
2 0 16464 18332 79044 671492 0 0 0 0 166 514 7 0
94 0
interrupt count is always above 150 interrupts per seconds.
As far as i understand, this is because of this loop in
src/audacious/controlsocket.c
static gpointer
ctrlsocket_func(gpointer arg)
{
fd_set set;
struct timeval tv;
struct sockaddr_un saddr;
gint fd, b, i;
gint info[3];
gint32 v[2];
PacketNode *pkt;
socklen_t len;
gfloat fval[11];
g_mutex_lock(status_mutex);
while (!started && going)
g_cond_wait(start_cond, status_mutex);
g_mutex_unlock(status_mutex);
while (ctrlsocket_is_going()) {
FD_ZERO(&set);
FD_SET(ctrl_fd, &set);
tv.tv_sec = 0;
tv.tv_usec = CTRLSOCKET_TIMEOUT;
len = sizeof(saddr);
if (select(ctrl_fd + 1, &set, NULL, NULL, &tv) <= 0)
continue;
if ((fd = accept(ctrl_fd, (struct sockaddr *) &saddr, &len)) == -1)
continue;
[and so on...]
The select() is the timeout offender. Am i correct?
Any ideas how to fix this "bug"?
with kind regards
thomas
_______________________________________________
Audacious mailing list
[email protected]
http://mail.atheme.org/mailman/listinfo/audacious