Re: Linux Kernel Patch; setpriority

From: Bill Davidsen (davidsen@tmr.com)
Date: Thu Mar 28 2002 - 16:19:11 EST


  Rather than expect people who have been following this to reread I'll
put this here. I believe the capability of nice(2) setting and restoring
is (a) very seldom useful given the new scheduler, and (b) can be done
with a bit of effort and no assult on SUS by doing the nice work in a nice
thread.

  Code is attached.

On Wed, 27 Mar 2002, Chris Wright wrote:

> * Stephen Baker (stbaker@cisco.com) wrote:
> >
> > This patch will allow a process or thread to changes it's priority
> > dynamically based on it's capabilities. In our case we wanted to use
> > threads with Linux. To have true priorities we need root to use
> > SCHED_FIFO or SCHED_RR; in many case root access is not allowed but we
> > still wanted priorities. So we started using setpriority to change a
> > threads priority. Now we used nice values from 19 to 0 which did not
> > require root access. In some cases a thread need to raise it's nice
> > level and this would fail. I also saw a note man renice(8) that said
> > this bug exists.
>
> hmm, SUS v3 seems to disagree.
>
> "Only a process with appropriate privileges can lower its nice value."
>
> and with this patch setpriority(2) is now inconsistent with nice(2)
> (albeit i don't know how much longer that interface will persist in arch
> independent portion of the kernel based on the comments surrounding it).

-- 
bill davidsen <davidsen@tmr.com>
  CTO, TMR Associates, Inc
Doing interesting things with little computers since 1979.

/* try changing nice(2) for a single thread */ #include <stdio.h> #include <unistd.h> #include <pthread.h> int pid; void part1(int *); pthread_mutex_t print_lock = PTHREAD_MUTEX_INITIALIZER; #define MAX_LOOP 100 main(int argc, char *argv[]) { int j, stat; volatile int i = 0; pthread_t thrd1; pid = getpid(); fprintf(stderr, "parent pid: %d\n", pid); pthread_create(&thrd1, NULL, (void *)part1, (void *)&i); /* note that I am not doing a damn thing here */ pthread_join(thrd1, NULL); fprintf(stderr, "Normal termination\n"); exit(0); } void part1(int *ix) { /* do one ps before nice(2) call */ system("ps l"); /* now be nice and try again */ fprintf(stderr, "\n--> nice\n"); nice(6); system("ps l"); } - To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/



This archive was generated by hypermail 2b29 : Sun Mar 31 2002 - 22:00:16 EST