Re: SCHED_ULE & niceness / rtprio

From: Astrodog <astrodog_at_gmail.com>
Date: Mon, 21 Jan 2008 23:53:49 +0800
On Jan 21, 2008 8:24 PM, Yar Tikhiy <yar_at_comp.chem.msu.su> wrote:
>
> On Tue, Jan 01, 2008 at 06:56:59PM -1000, Jeff Roberson wrote:
> > On Tue, 20 Nov 2007, Kris Kennaway wrote:
> >
> > >Yar Tikhiy wrote:
> > >>Hi all,
> > >>
> > >>SCHED_ULE seems to do an unfair job to processes with low niceness
> > >>or with real-time priority.  Here are my observations:
> > >>
> > >>A few days ago I noticed that music (played by Totem, Gnome's default
> > >>player) would pause for a fraction of second each time I did something
> > >>in X/Gnome, such as switched between windows, clicked on a link in
> > >>the web browser, etc.  Then I found that music was jerky only if
> > >>the player ran with a negative niceness or a real-time priority:
> > >>As soon as I returned it to niceness 0 and normal priority, sound
> > >>became totally seamless notwithstanding my activity in X.
> > >>
> > >>The approximate value required for the effect to appear was niceness
> > >>as low as -5 or RT priority as high as 10; niceness -1 or rtprio 1
> > >>wasn't enough.
> > >>
> > >>Curious, I substituted SCHED_4BSD for SCHED_ULE in my otherwise
> > >>GENERIC kernel, and the jerkiness of sound was gone irrespective
> > >>of the niceness or RT priority of the player.
> > >>
> > >>To rule out other possible causes, I also tried kernels with SCHED_ULE
> > >>but without SMP or without debug stuff (INVARIANTS+WITNESS), but
> > >>the issue was there in both cases, unlike in the case of SCHED_4BSD.
> > >>
> > >>Of course, X+Gnome+stuff isn't the clearest environment for debugging
> > >>schedulers, but multimedia apps are rather sensitive to scheduling
> > >>quality.  This case should be rather obvious:  When I click in an
> > >>inactive window, some processes are woken that have been idle.
> > >>After that the high-priority player isn't scheduled long enough for
> > >>the hardware audo buffer to drain, although it would be scheduled
> > >>soon if it had normal priority.
> > >>
> > >>Did I hit a known issue?
> > >
> > >Others have reported it, but I don't know if Jeff has had time to
> > >investigate yet.
> > >
> >
> > I tried to reproduce this recently by running mplayer with various nice
> > values while scrolling around a lot in firefox.  This is on a 1.4ghz
> > machine.  I didn't encounter any problems.
>
> Well, scrolling around might not trigger the problem.  The issue might
> be seen, or heard, better when different processes are being woken up.
>
> > If anyone is having nice related problems with ULE I'd love a simple test
> > case that shows it.  I tried installing boinc which was mentioned in other
> > threads but had trouble contacting the servers and getting it setup.
> > Something simpler would be very beneficial.
>
> Today I've finally got a chance to update my workstation to the
> latest HEAD and try again in order to see if your last patch has
> any effect for my issue.  Alas, it doesn't, sorry.
>
> My environment: GNOME 2 out of the box, namely as installed from
> the gnome2-lite port.  That includes Firefox and Totem player.
>
> What I did: was switching between windows of different apps (Firefox,
> Terminal) via Alt+Tab, or between virtual desktops with some windows
> on them using mouse, while playing an mp3 tune in the Totem player.
>
> What I also noticed was that assigning an idle priority to the
> player makes the sound falter as well.  I.e., the sound is smooth
> only when the player runs at normal priority and zero, or numerically
> greater, niceness.
>
> Lastly, I think I've found a simpler test case.  Attached is a
> proglet that essentially simulates the load pattern by waking up
> periodically and doing dummy things.  In my case (1GHz CPU,) 4-6
> instances of it running in the background are enough to make the
> issue manifest itself:  When I assign an RT/idle priority or negative
> niceness to the player process, it starts to stutter, but as soon
> as I return the player process to normal priority & niceness, it
> plays fluently again.
>
> I haven't found a suitable detector other than a media player yet.
> However, in my case, madplay is as good as Totem in detecting the
> presumable scheduling problem, from which I infer that any audio
> player will do, including command-line ones.  Sorry, I can't test
> this against mplayer now as my ADSL line is temporarily down and I
> have to resort to dial-up, so downloading mplayer isn't an option
> for me now. :-)
>
> --
> Yar
>
> #include <stddef.h>
> #include <stdio.h>
> #include <stdlib.h>
> #include <time.h>
> #include <unistd.h>
>
> const int n = 10 * 1024 * 1024; /* how many bytes of RAM to burn */
> const int v = 0;                /* verbose flag */
>
> int
> main()
> {
>        struct timespec ts0, ts;
>        char *p;
>        long dn, ds;
>        int i;
>
>        for (;;) {
>                if (v)
>                        clock_gettime(CLOCK_MONOTONIC, &ts0);
>                if ((p = malloc(n)) != NULL) {
>                        for (i = 0; i < n; i++)
>                                p[i] = (char)(i % 53); /* just a prime number */
>                        free(p);
>                }
>                if (v) {
>                        clock_gettime(CLOCK_MONOTONIC, &ts);
>                        ds = ts.tv_sec - ts0.tv_sec;
>                        dn = ts.tv_nsec - ts0.tv_nsec;
>                        if (dn < 0) {
>                                ds--;
>                                dn += 1000 * 1000 * 1000L;
>                        }
>                        if (dn < 0 || ds < 0)
>                                abort();
>                        printf("last run took %ld.%09ld sec\n", ds, dn);
>                }
>                /* sleep 1-2 sec */
>                usleep(1000 * 1000L + random() % (1000 * 1000L));
>
>        }
> }
> _______________________________________________
> freebsd-current_at_freebsd.org mailing list
> http://lists.freebsd.org/mailman/listinfo/freebsd-current
> To unsubscribe, send any mail to "freebsd-current-unsubscribe_at_freebsd.org"
>

Just to be sure I understand this correctly... the player stutters
when you *decrease* its priority (Or increase its niceness) only?
Received on Mon Jan 21 2008 - 14:53:50 UTC

This archive was generated by hypermail 2.4.0 : Wed May 19 2021 - 11:39:26 UTC