Creating scheduler partitions

On boot up, the system creates the initial partition, number 0, called System. The System partition initially has a budget of 100%. You can create partitions and set their budgets in your buildfile, with command-line utilities, or dynamically through the API defined in sys/sched_aps.h. When you create a partition, its budget is subtracted from its parent partition's budget.

To see which partitions you've created, use the aps show command. For more information about the aps utility, see aps.

Using a buildfile

To create a partition in your buildfile, add a line like this to the startup script:

sched_aps name budget
Note: If your system uses diskboot, be sure to create your partitions before running diskboot. Doing so lets you use /etc/rc.d/rc.local to launch programs in partitions. If you haven't created the partitions, and /etc/rc.d/rc.local tries to launch a program in a partition, the launching will fail.

For more information about launching programs when you boot, see the Controlling How Neutrino Starts chapter of the QNX Neutrino User's Guide.

You can also use the aps in your startup script to set security options. For example, to create a partition called Drivers with a CPU budget of 20% and then use our recommended security option, add these lines to your buildfile's startup script:

sched_aps Drivers 20
aps modify -s recommended

Using the command line

To create a partition from the command line or your /etc/rc.d/rc.local file, use the aps utility's create option. For example:

aps create -b15 DebugReserve

creates a partition named DebugReserve with a budget of 15%.

Note: When you create a partition, its budget is taken from its parent partition's budget. The parent partition is usually the system partition.

Using a program

To create a partition from a program, use the SCHED_APS_CREATE_PARTITION command to SchedCtl(). For example:

sched_aps_create_parms creation_data;

memset(&creation_data, 0, sizeof(creation_data));
creation_data.budget_percent = 15;
creation_data.critical_budget_ms = 0;
creation_data.name = "DebugReserve";

ret = SchedCtl( SCHED_APS_CREATE_PARTITION, &creation_data,
                sizeof(creation_data));
if (ret != EOK) {
   printf("Couldn't create partition \"%s\": %s (%d).\n",
            creation_data.name, strerror(errno), errno);
} else {
   printf ("The new partition's ID is %d.\n", creation_data.id);
}

Note that SchedCtl() puts the partition's ID in the sched_aps_create_parms structure.