This chapter includes:
The instrumented kernel emits trace events when:
- a partition's budget changes (including when the partition is created)
- a partition's name changes (i.e. when the partition is created)
- a thread runs--in wide mode, these events include the partition ID
and indicate whether or not the thread is running as critical
- a partition becomes bankrupt
In addition, all events include the partition ID and its budget.
You can use
traceprinter
to display the contents of the trace file.
You can also use the IDE to parse and display a trace file.
You can--and should--use the System Profiler to check your
system's latencies.
For more information, see the
IDE User's Guide.
The simplest way to test a system that uses adaptive partitioning is from
the command line.
Be sure to test your system in a fully loaded state, because that's
where problems are likely to occur.
Create a "hog" program that loops forever, and start it
in each partition.
Then do the following:
- Watch for bankruptcies, which you should consider to be programming
errors.
You can use
SchedCtl()
with the SCHED_APS_BNKR_* flags to control what happens
when a partition exhausts its critical budget.
This can range from delivering an event to rebooting the system.
For more information, see the Neutrino Library Reference.
- Make sure that all latencies are acceptable for your system.
- Use the
aps modify
command to change your partitions' budgets.
The new budgets come into effect at the beginning of the next
averaging window.
Since the window size is typically 100 ms, you can quickly try many
different combinations of budgets.
You can use adaptive partitioning to make it easier to debug an embedded
system by providing emergency access to it:
- during development -- create a partition and start
io-net
and
qconn
in it.
Then, if a runaway process ties up the system, you can use the IDE to
debug and query the system.
- during deployment -- create a partition and start io-net
and
inetd
in it.
If something goes wrong, you can
telnet
into the system.
In either case, if you don't need to use this partition, the scheduler
allocates its budget among the other partitions.
This gives you emergency access to the system without compromising performance.