<< Previous Tip > Tips Table < Next Tip >>

Avanti Product Banner

Upgrading Low Priority
Threads on NetWare v4




Some older NLMs which were designed using NetWare v3 techniques rely upon ThreadSwitch() to reschedule their operation. This function places the thread at the end of the Run Queue behind other scheduled threads. While it provides the opportunity for other threads on the Run Queue to execute at least once, all threads are treated similarly with respect to processing priority.

Novell introduced a Low Priority Queue and a Delay List queue for threads in NetWare v4. Threads placed on these new queues only run when Run Queue activity is at a minimum or after a defined number of Run Queue thread switches have occurred. Compression, data migration, and some other internal NetWare functions use these new queues to minimize their load on the Server. However, NLM threads which continuously reschedule their operation through ThreadSwitch() limit the opportunity for the Low Priority Queue and Delay List queue threads to execute. The result is that some internal NetWare operations are hampered in their ability to schedule processing time slices.

In such cases, NetWare v4 will display the following alert message on the Server console:

    An NLM has been loaded that does not allow low priority threads to be run. Low priority threads are used for file compression, etc. Set 'Upgrade Low Priority Threads' to ON or unload the NLM.
Enabling (ON) this SET parameter will upgrade the internal NetWare threads to a higher priority, placing them on an equal status with the offending NLM. However, doing so may also increase the base CPU utilization at the Server since the normally background, low priority, internal operations are upgraded to a higher processing status.

The best solution for this situation is to identify the offending NLM then get an upgraded version which is designed for NetWare v4 and makes use of the ThreadSwitchWithDelay() function. This function, added to CLIB beginning with v3.11 rev D, insures that a minimum number of thread switches occur (default = 50) before the delayed thread is returned to the Run Queue.

An interim alternative is to append the following CLIB option to the end of the command line when loading the offending NLM:

    (CLIB_OPT)/Y

    Example: load [nlm_name] [standard_options] (CLIB_OPT)/Y

    Note: This option is format and case sensitive so it must be used exactly as shown.

This CLIB option, specific to NetWare v4, will upgrade any ThreadSwitch() functions used by the NLM to ThreadSwitchWithDelay(). It will not adversely impact the NLM's operation but will provide sufficient opportunity for the internal background, low priority operations to receive processing time.

Surprisingly, there are several, widely used commercial NLM products which have this design flaw that will cause the Upgrade Low Priority Threads console alert to appear. Even some early NLMs released by Novell supporting NetWare v4 can generate this alert. Needless to say, avanti's products are not among those which will.

Should you encounter this console alert, check with the developers of any third party NLMs which you may have installed to determine if the problem is known to them and if a later release is available. Alternately, try adding the (CLIB_OPT)/Y option to the NLM load command for all third party NLMs since it will not adversely affect the NLM if not needed.


This document is copyright © 1999 by avanti technology, inc.

<< Previous Tip > Tips Table < Next Tip >>