Skip site navigation (1)Skip section navigation (2)
Date:      Wed, 29 Mar 2017 15:00:36 -0500
From:      Eric van Gyzen <vangyzen@FreeBSD.org>
To:        freebsd-hackers@freebsd.org
Subject:   One Priority Per Run Queue
Message-ID:  <1aafd6a2-828c-06f5-bdac-e4c953a403b5@FreeBSD.org>

next in thread | raw e-mail | index | archive | help
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.

Eric

[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



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?1aafd6a2-828c-06f5-bdac-e4c953a403b5>