Brian Inglis via Cygwin wrote:
On 2023-10-14 07:47, Eliot Moss via Cygwin wrote:
On 10/14/2023 7:39 AM, Cedric Blancher via Cygwin wrote:
On Fri, 11 Aug 2023 at 19:14, Brian Inglis wrote:
...
...
$ cygcheck -p usr/bin/chrt
Found 2 matches for usr/bin/chrt
util-linux-debuginfo-2.33.1-2 - util-linux-debuginfo: Debug info
for util-linux
util-linux-2.33.1-2 - util-linux: Collection of basic system utilities
$ cygcheck -p usr/bin/taskset
Found 2 matches for usr/bin/taskset
util-linux-debuginfo-2.33.1-2 - util-linux-debuginfo: Debug info
for util-linux
util-linux-2.33.1-2 - util-linux: Collection of basic system utilities
so you may need to install util-linux (coreutils is already
installed as a base
package for Cygwin) then:
$ man nice renice taskset chrt
chrt does not work, the syscalls for realtime seem to be not
implemented.
These are partly implemented, but sched_setscheduler() always fails with
ENOSYS because scheduler policy (SCHED_*) cannot be changed on Windows.
Changing priority only with sched_setparam() would work, but this is not
used by chrt.
You may need to run these from an elevated admin shell for other
user ids,
unowned processes, or higher (negative) priority.
It has been years since I tried these so can no longer remember if -20
corresponds to Windows "RealTime" or if you need to use PowerShell
to set that e.g.
$proc = Get-Process -ProcessName "..."
$proc.PriorityClass = "RealTime"
and that needs to be done from an elevated admin (Power)Shell.
Of course, never set that on any system except on a very idle, very
I/O bound,
well tested process, such as ntpd, that needs stably fast interrupt
service and
non-preemptible cpu access for ms every few seconds, preferably on
a single or
few cpus to which affinity is set.
Is there anything in /proc which can tell me the current *Windows*
scheduler priority level? Or a command line tool?
I recall getting taskset going in util-linux a while back, but I don't
recall working on priority related things. You could look into the
cygwin source code to see how Windows priorities relate to the priority
values in Cygwin. Then you may be able just to use /proc/[pid]/stat
read out what you want.
ISTR testing nice/renice, and found it was a simple priority mapping
to/from Unix to Windows Idle to RealTime (at the time, process
Affinity was not supported, so went with a PowerShell startup script
instead); see:
https://cygwin.com/git/?p=newlib-cygwin.git;a=blob;f=winsup/cygwin/sched.cc#l107
https://cygwin.com/git/?p=newlib-cygwin.git;a=blob;f=winsup/cygwin/sched.cc#l234
https://cygwin.com/git/?p=newlib-cygwin.git;a=blob;f=winsup/cygwin/sched.cc#l277
The above maps priorities for sched_*() API. The mapping for nice() and
get/setpriority() is done here:
https://cygwin.com/git/?p=newlib-cygwin.git;a=blob;f=winsup/cygwin/miscfuncs.cc;h=767384f#l110
They are documented in proc(5) /proc/PID/stat fields 18 priority and
19 nice typically 20 and 0, as shown by `top` PR and NI, shown by
`procps -l` as 80 and 0, and not shown by Cygwin `ps`.
On Cygwin, field 18 is always equal to (field_19 + 20). The priority
value returned by sched_getparam() is different and could be shown with
'chrt -p PID'.
The output from the command 'nice' without parameter may differ from
/proc/PID/stat field 19 because the latter always reinterprets the
current Windows prio class.
This script prints a table of 'nice' outputs, /proc/PID/stat fields 19
and 18, result of sched_getparam() and corresponding Windows prio class
for different 'nice -n ...' commands:
#!/bin/bash
echo "COMMAND : NICE STAT STPRI RTPRI WINPRI"
for i in {-21..20}; do
nice -n $i sh -e -c '
n=$(nice)
s=$(cut -d" " -f19 /proc/$$/stat)
p=$(cut -d" " -f18 /proc/$$/stat)
r=$(LC_MESSAGES=C chrt -p $$ | sed -n "s,^.*priority: ,,p")
case $r in
3) c="IDLE_PRIORITY_CLASS" ;;
9) c="BELOW_NORMAL_PRIORITY_CLASS" ;;
15) c="NORMAL_PRIORITY_CLASS" ;;
21) c="ABOVE_NORMAL_PRIORITY_CLASS" ;;
27) c="HIGH_PRIORITY_CLASS" ;;
32) c="REALTIME_PRIORITY_CLASS" ;;
*) c="?" ;;
esac
printf "nice -n %3d:%5d %5d %5d %5d %s\\n" \
"'$i'" "$n" "$s" "$p" "$r" "$c"
'
done
--
Regards,
Christian
--
Problem reports: https://cygwin.com/problems.html
FAQ: https://cygwin.com/faq/
Documentation: https://cygwin.com/docs.html
Unsubscribe info: https://cygwin.com/ml/#unsubscribe-simple