## page was renamed from Liblitmus == Real-Time Scheduling Policies == The kernel contains the following real-time scheduling policy implementations: * `PFAIR`, an implementation of the PD2 algorithm, * `PSN-EDF`, a partitioned EDF (P-EDF) implementation with support for the real-time locking protocols, * `GSN-EDF`, a global EDF (G-EDF) implementation with support for real-time locking protocols, * `C-EDF` (Clustered EDF), a hybrid of G-EDF and P-EDF, and * Linux, a placeholder policy that disables all real-time functionality added by the LITMUS^RT^ patch. Only one policy can be active at any time. Initially (i.e., during and after boot), the `Linux` policy is active. You can use the tool `showsched` (part of `liblitmus`) to display the name of the currently active policy. == Changing the Active Policy == You can use the tool `setsched` (part of `liblitmus`) to select a new plugin at run time. Only root can change the active policy, and only when there are no real-time tasks present. The script `setsched` depends on the `dialog` utility. If you do not have the `dialog` utility installed, then you can still use `setsched` by passing the desired scheduling policy as a command line parameter. For example, type `setsched PFAIR` to activate the `PFAIR` plugin. The list of loaded plugins is exported as `/proc/litmus/plugins/loaded`; the active plugin is reported as `/proc/litmus/active_plugin`. == Selecting the C-EDF Cluster Size == The `C-EDF` plugin can create clusters based on the cache topology. When the plugin is activated (see above), it configures clusters based on the value ("L1", "L2", "L3", or "ALL") last written to `/proc/litmus/plugins/C-EDF/cluster`. Note that the `C-EDF` plugin must be reloaded (for example by switching to the `Linux` plugin and back to `C-EDF`) to enact a change to the desired cluster size; changing the cluster size while `C-EDF` is active is not supported. == Writing Real-Time Tasks == The user space library that provides the LITMUS^RT^ API, `liblitmus`, contains two example real-time tasks (`base_task.c` and `base_mt_task.c`) that both illustrate how to use the API and provide a skeleton for real-time task development. To get started with development, please take a look at these example programs.