ThreadPriorityPolicy settings for non-root users

David Holmes david.holmes at oracle.com
Thu Dec 20 11:05:39 UTC 2018


Hi Matthias,

The more I think about this the more I see it as a huge can of worms. 
There are very, very, limited usecases for managing the priority of 
individual threads within a running Java application. Adjusting the 
process priority/nice-ness is effective and much simpler.

Cheers,
David

On 20/12/2018 3:13 am, Baesken, Matthias wrote:
> 
> Hello ,
>    currently OpenJDK supports 2 ThreadPriorityPolicy settings,  0  (normal, the default) and 1,
> the so called "aggressive" mode :
> 
> "1 : Aggressive.                                                 "\
> "    Java thread priorities map over to the entire range of      "\
> "    native thread priorities. Higher Java thread priorities map "\
> "    to higher native thread priorities. This policy should be   "\
> "    used with care, as sometimes it can cause performance       "\
> "    degradation in the application and/or the entire system. On "\
> "    Linux this policy requires root privilege.")                 \
> 
> Currently  we check directly for root in os_bsd.cpp and os_linux.cpp (the text  in globals.hpp mentions only Linux which seems to be not fully correct):
> 
> if (geteuid() != 0) { ... } in function prio_init().
> 
> (looks like the check is not done for other platforms).
> 
> However the check for root (e.g. on Linux)  hinders users to set a ****lower priority**** for a thread (== increase the "niceness" level)
> when running as a non-root user  (there might be strange ways from outside the VM with calling scripts and renice but .... ).
> 
> 
> In older JDKs (e.g. JDK8) there was a "workaround" to use for example ThreadPriorityPolicy=2 to avoid the root-check,
> but this is not possible any more in recent JDKs (10/11) after the range check (0,1) has been introduced for the ThreadPriorityPolicy flag
> (and probably the old workaround was not a good one anyway because it was undocumented).
> 
> So do you think we could introduce another XX-flag  ( AllowAggressiveThreadPriorityPolicyForAllUsers, or some better name)
> that allows using the "aggressive" mode for non-root users ? Another option would be to add another mode 2 for ThreadPriorityPolicy
> that documents the behavior (like mode 1 but without root-user check).
> 
> If I get it right, even  setting  ***higher prios*** (lower niceness) is possible for non-root users on systems configured in an appropriate way
> (using the CAP_SYS_NICE capability).
> 
> But setting  lower prio / higher niceness is even possible for normal users NOW without special config, it is just disabled by the root-check
> which is very bad.
> 
> Best regards, Matthias
> 


More information about the hotspot-dev mailing list