Run a Cygwin process with "higher" scheduler priority

Brian Inglis Brian.Inglis@Shaw.ca
Sun Oct 15 03:55:15 GMT 2023


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:
>>> On 2023-08-11 09:44, Cedric Blancher via Cygwin wrote:
>>>> How can we set the scheduler priority for a Cygwin process to "higher"
>>>> than normal on start?
>>>> Basically we want a Cygwin compatible script version of the Windows
>>>> task manager feature Name/PID--->Details--->Set priority--->Higher
>>> Pretend the system is BSD or Linux and web search e.g. SO for that capability,
>>> facility, or feature, then check Cygwin with Search Packages or:
>>> $ cygcheck -p usr/bin/nice
>>> Found 6 matches for usr/bin/nice
>> I know about nice and renice, but I don't see whether it is working or not.
>>> coreutils-debuginfo-8.26-2 - coreutils-debuginfo: Debug info for coreutils
>>> ...
>>> coreutils-9.0-1 - coreutils: GNU core utilities (includes fileutils, sh-utils
>>> and textutils)
>>> $ cygcheck -p usr/bin/renice
>>> Found 6 matches for usr/bin/renice
>>> util-linux-debuginfo-2.32.1-1 - util-linux-debuginfo: Debug info for util-linux
>>> util-linux-debuginfo-2.33.1-1 - util-linux-debuginfo: Debug info for util-linux
>>> util-linux-debuginfo-2.33.1-2 - util-linux-debuginfo: Debug info for util-linux
>>> util-linux-2.32.1-1 - util-linux: Collection of basic system utilities
>>> util-linux-2.33.1-1 - util-linux: Collection of basic system utilities
>>> util-linux-2.33.1-2 - util-linux: Collection of basic system utilities
>>> $ 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.
>>> 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

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`.

-- 
Take care. Thanks, Brian Inglis              Calgary, Alberta, Canada

La perfection est atteinte                   Perfection is achieved
non pas lorsqu'il n'y a plus rien à ajouter  not when there is no more to add
mais lorsqu'il n'y a plus rien à retirer     but when there is no more to cut
                                 -- Antoine de Saint-Exupéry


More information about the Cygwin mailing list