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

Reply via email to