Home
Developer Resources
Technical Articles

QNX Technical Articles

QNX® Neutrino® Adaptive Partitioning Technology Development Kit 1.0.0 Release Notes

QNX® Neutrino® RTOS

Date of this edition: October 04, 2006

Target OS: QNX® Neutrino® 6.3.0 SP1, SP2, or SP3, with the QNX Neutrino Core OS 6.3.2 or 6.3.2A

Host OS: Microsoft Windows XP SP1 or SP2, 2000 SP4, or NT SP6a; Sun Solaris 7, 8, 9, or 10; QNX® Neutrino® 6.3.0 SP1, SP2, or SP3, with the QNX Neutrino Core OS 6.3.2 or 6.3.2A; Linux Red Hat 8, 9, or Enterprise WS 3 or 4

Contents

Throughout this document, you may see reference numbers associated with particular issues, changes, etc. When corresponding with our Technical Support staff about a given issue, please quote the relevant reference number. You might also find the reference numbers useful for tracking issues as they become fixed.

For the most up-to-date version of these release notes, go to our website, www.qnx.com, log into your myQNX account, and then go to the Download Center.

What's in this TDK?

This TDK contains the following:

libmod_aps.a
A library that supports the Adaptive Partitioning API. For more information, see <sys/sched_aps.h>.

Note: The libmod_aps.a module must be in the same directory as procnto.

aps
A utility that exercises the full Adaptive Partitioning API and lets you create partitions and run commands in them.

The following files are installed under $QNX_TARGET/:

  • armbe/bin/aps
  • armbe/boot/sys/libmod_aps.a
  • armle/bin/aps
  • armle/boot/sys/libmod_aps.a
  • mipsbe/bin/aps
  • mipsbe/boot/sys/libmod_aps.a
  • mipsle/bin/aps
  • mipsle/boot/sys/libmod_aps.a
  • ppcbe/bin/aps
  • ppcbe/boot/sys/libmod_aps.a
  • shle/bin/aps
  • shle/boot/sys/libmod_aps.a
  • x86/bin/aps
  • x86/boot/build/qnxbasedmaaps.build
  • x86/boot/sys/libmod_aps.a

Fixed issues

  • The multicore version of the Adaptive Partitioning scheduler now honors the runmask. (Ref# 28199)
  • We've corrected the small budget inaccuracies (about 2 percentage points) on non-x86 single-processor targets. (Ref# 27840)
  • The adaptive partitioning scheduler works well with multicore systems on PPC and slower x86 systems. On very fast targets, and on SH, MIPS, and ARM targets, the scheduler now correctly guarantees each partition's minimum budget. (Ref# 28533)
  • Using a runmask (for bound multiprocessing) with the adaptive partitioning scheduler no longer prevents partitions from getting their minimum guaranteed CPU budgets. (Ref# 28700, 28706)
  • The definition of the SIGEV_CLEAR_CRITICAL() macro is now correct in <sys/siginfo.h>. (Ref# 28621)

Known issues

  • You can't currently specify [module=aps] in a buildfile in the IDE. (Ref# 28234)

    Workaround: Export the buildfile from the IDE and manually edit it.

  • The System Profiler and other system tools in the IDE don't yet support APS instrumentation events.
  • Overload detection isn't implemented.
  • Adaptive partitioning isn't supported on the 386 and 486 x86 processors, due to the missing timebase counter on those processors. (Ref# 28080)
  • SCHED_RR threads might not round robin in partitions whose portion of the averaging window is smaller then one timeslice. For example, when the timeslice is 4 ms (the default) and the adaptive partitioning scheduler's window size is 100 ms (the default), then SCHED_RR threads in a 4% partition may not round-robin correctly. (Ref# 28035)
  • If you use adaptive partitioning and bound multiprocessing (BMP), some combinations of budgets might not be met. (Ref# 29408)
  • Threads in a zero-budget partition should run only when all other nonzero-budget partitions are idle. However, on SMP machines, zero-budget partitions may incorrectly run when some other partitions are demanding time. However, at all times, all partitions' minimum budgets are still guaranteed, and zero-budget partitions will not run if all nonzero-budget partitions are ready to run. (Ref# 29434)
  • On ARM targets, the 10 window and 100 window averages, as reported by the aps show -v command, are sometimes garbled. However, these have no effect on scheduling. (Ref# 27552)
  • The entry for SchedCtl() and SchedCtl_r() in the Neutrino Library Reference doesn't mention that the SCHED_APS_JOIN_PARTITION command indicates an error of EINVAL if the partition with the given ID doesn't exist. (Ref# 29298)
  • If you use ClockPeriod() to set the ticksize to a very small value, and you then invoke the SCHED_APS_PARTITION_STATS command to SchedCtl() at a very high frequency, the kernel might crash. (Ref# 29827)
  • If you use ClockPeriod() to set the ticksize to a very small value, and you then use the SCHED_APS_SET_PARMS command to SchedCtl() to change the scheduling window size, the kernel might crash. (Ref# 29832)

    Workaround: Don't set the ticksize to be less than 1/400 of the scheduling window size.

  • The Adaptive Partitioning User's Guide says that if you don't want a server to run in the client's partition, set the _NTO_CHF_FIXED_PRIORITY flag when the client creates its channel to the server. You should set this flag when the server creates its channel. (Ref# 29874)
  • When you create a new partition, its budget is subtracted from its parent partition's budget, not the System partition's budget. (Ref# 38609)
  • The Adaptive Partitioning User's Guide doesn't explain which partition any threads or processes that a server creates runs in:
    New threads
    If you receive a message from another partition, and you create a new thread in response, the child thread runs in the sender's partition until the child thread becomes receive-blocked. At that point, the child thread's partition is reset to be its creator's partition.
    New processes
    If you receive a message from another partition, and create a process in response, the process is created in the sender's partition. Any threads that the child process creates also run in the sender's partition.

    Setting _NTO_CHF_FIXED_PRIORITY when the server creates its channel also prevents its child processes or threads from running in the client's partition. (Ref# 29959)

Be sure to check the QNX Neutrino Core OS 6.3.2 release notes for related issues.

Documentation

The functionality provided by this TDK is described in the:

  • Adaptive Partitioning chapter of the System Architecture guide
  • Adaptive Partitioning User's Guide
  • aps entry in the Utilities Reference
  • SchedCtl() entry in the Neutrino Library Reference

Technical support

To obtain technical support for any QNX product, visit the Technical Support section in the Services area on our website (www.qnx.com). You'll find a wide range of support options, including our free web-based Developer Support Center.