Date: Wed, 29 Mar 2017 15:18:53 -0600 From: Warner Losh <imp@bsdimp.com> To: Eric van Gyzen <vangyzen@freebsd.org> Cc: "freebsd-hackers@freebsd.org" <freebsd-hackers@freebsd.org> Subject: Re: One Priority Per Run Queue Message-ID: <CANCZdfogvSXzHT33JxzvZ%2B0h8BjRetM=-vkPjzhyNJgznPhAnQ@mail.gmail.com> In-Reply-To: <1aafd6a2-828c-06f5-bdac-e4c953a403b5@FreeBSD.org> References: <1aafd6a2-828c-06f5-bdac-e4c953a403b5@FreeBSD.org>
next in thread | previous in thread | raw e-mail | index | archive | help
On Wed, Mar 29, 2017 at 2:00 PM, Eric van Gyzen <vangyzen@freebsd.org> wrote: > The FreeBSD schedulers assign four priorities to each run queue, making > those priorities effectively equal. This breaks POSIX real-time priorities. > > Applications that use real-time scheduling use sched_get_priority_min() > and sched_get_priority_max() [0] to determine the available range of > priorities, and then use simple arithmetic to assign relatively higher > or lower priorities. If an application configures two threads with > priorities MAX and MAX-1 (for example), POSIX says the thread at > priority MAX must be chosen if it is runnable. Since our implementation > puts these two priorities in the same run queue, it may choose either > thread, so it does not conform. > > The above functions currently return 0 and 31, respectively. One > solution would change max() to return 7 and change other code to > translate the 8 POSIX values into the 32 FreeBSD values. However, this > would also not conform, because "conforming implementations shall > provide a priority range of at least 32 priorities for this policy." [1] > > I propose that we assign one priority per run queue: > > https://reviews.freebsd.org/D10188 > > This would conform to POSIX. On a certain commercial block storage > product, this change made no difference in performance. Benchmarks of > buildworld on two different machines actually showed a tiny improvement > in performance. [2] > > Please test the above change, especially if you have an interesting > workload that might be sensitive to scheduler behavior. If you already > know this change would cause problems, please point me toward the details. > > Assigning 4 priorities per run queue also caused a recent portability > issue in ZFS, although that was fixed by r314058. How does this scheme prevent starvation of low priority processes? Or rather, how will this change after this change. Warner > [0] > http://pubs.opengroup.org/onlinepubs/9699919799/functions/sched_get_priority_max.html > > [1] > http://pubs.opengroup.org/onlinepubs/9699919799/functions/V2_chap02.html#tag_15_08_04_01 > > [2] http://www.vangyzen.net/FreeBSD/1ppq/1ppq.html > _______________________________________________ > freebsd-hackers@freebsd.org mailing list > https://lists.freebsd.org/mailman/listinfo/freebsd-hackers > To unsubscribe, send any mail to "freebsd-hackers-unsubscribe@freebsd.org"
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?CANCZdfogvSXzHT33JxzvZ%2B0h8BjRetM=-vkPjzhyNJgznPhAnQ>
