# scx_loader: A DBUS Interface for Managing sched-ext Schedulers `scx_loader` is a utility that provides a convenient DBUS interface for starting, stopping, and managing sched_ext schedulers. ## Features * **`StartScheduler` Method:** Launches a scheduler specified by its `scx_name` (e.g., "scx_rusty") and a scheduler mode (profile) represented as an unsigned integer. * **`StartSchedulerWithArgs` Method:** Starts a scheduler with its `scx_name` and allows passing arbitrary CLI arguments directly to the scheduler. * **`StopScheduler` Method:** Terminates the currently running scheduler. * **`SwitchScheduler` Method:** Stops the current scheduler and starts the specified scheduler with the given mode. * **`SwitchSchedulerWithArgs` Method:** Stops the current scheduler and starts the specified scheduler with the provided arguments. * **`CurrentScheduler` Property:** Returns the `scx_name` of the active scheduler or "unknown" if none is running. * **`SchedulerMode` Property:** Provides information about the currently active scheduler's mode (profile). * **`SupportedSchedulers` Property:** Lists the schedulers currently supported by `scx_loader`. ## Usage `scx_loader` interacts with schedulers through its DBUS interface. You can use tools like `dbus-send` or `gdbus` to communicate with it. **Examples using `dbus-send`:** * **Start a Scheduler:** ```bash dbus-send --system --print-reply --dest=org.scx.Loader /org/scx/Loader org.scx.Loader.StartScheduler string:scx_rusty uint32:0 ``` (This starts `scx_rusty` with scheduler mode 0) * **Start a Scheduler with Arguments:** ```bash dbus-send --system --print-reply --dest=org.scx.Loader /org/scx/Loader org.scx.Loader.StartSchedulerWithArgs string:scx_bpfland array:string:"-k","-c","0" ``` (This starts `scx_bpfland` with arguments `-k -c 0`) * **Stop the Current Scheduler:** ```bash dbus-send --system --print-reply --dest=org.scx.Loader /org/scx/Loader org.scx.Loader.StopScheduler ``` * **Switch Scheduler:** ```bash dbus-send --system --print-reply --dest=org.scx.Loader /org/scx/Loader org.scx.Loader.SwitchScheduler string:scx_lavd uint32:2 ``` (This switches to `scx_lavd` with scheduler mode 2) * **Switch Scheduler with Arguments:** ```bash dbus-send --system --print-reply --dest=org.scx.Loader /org/scx/Loader org.scx.Loader.SwitchSchedulerWithArgs string:scx_bpfland array:string:"-k","-c","0" ``` (This switches to `scx_bpfland` with arguments `-k -c 0`) * **Get the Currently Active Scheduler:** ```bash dbus-send --system --print-reply --dest=org.scx.Loader /org/scx/Loader org.freedesktop.DBus.Properties.Get string:org.scx.Loader string:CurrentScheduler ``` * **Get the Supported Schedulers:** ```bash dbus-send --system --print-reply --dest=org.scx.Loader /org/scx/Loader org.freedesktop.DBus.Properties.Get string:org.scx.Loader string:SupportedSchedulers ``` **Note:** Replace the example scheduler names and arguments with the actual ones you want to use. ## DBUS and Systemd Service `scx_loader` provides the `org.scx.Loader` DBUS service and is automatically started by `dbus-daemon` when an application calls into this service. Users and administrators do not need to manually start the `scx_loader` daemon. `scx_loader` is managed by the `scx_loader.service` systemd unit. This service is distinct from the `scx.service` unit, which is used to manage schedulers directly (without DBUS). ## Debugging In case of issues with `scx_loader`, you can debug the service using the following steps: 1. **Check the service status:** ```bash systemctl status scx_loader.service ``` 2. **View the service logs:** ```bash journalctl -u scx_loader.service ``` 3. **Enable debug logging:** You can temporarily enable debug logging by modifying the systemd service file: - Edit the service file: ```bash sudo systemctl edit scx_loader.service ``` - Add the following lines under the `[Service]` section: ``` Environment=RUST_LOG=trace ``` - Restart the service: ```bash sudo systemctl restart scx_loader.service ``` - Check the logs again for detailed debugging information. ## D-Bus Introspection XML `scx_loader` provides a D-Bus Introspection XML file that describes its interface. This file can be used by language bindings and tools to interact with the service. **Using the Introspection XML:** The introspection XML can be accessed in two ways: 1. **Through the D-Bus introspection interface:** ```bash dbus-send --system --print-reply --dest=org.scx.Loader /org/scx/Loader org.freedesktop.DBus.Introspectable.Introspect ``` This will output the XML describing the `scx_loader` interface. 2. **From the project repository:** The XML file is also available in the provided file `org.scx.Loader.xml`. You can then use this XML with tools like `gdbus-codegen` or other language-specific D-Bus bindings to generate code that interacts with `scx_loader`. For example, with `gdbus-codegen`, you can generate C code for the interface: ```bash gdbus-codegen --generate-c-code scx-loader-bindings org.scx.Loader.xml ``` This will produce header and source files that you can use to interact with `scx_loader` from your C code. ## Development Status `scx_loader` is under active development. Future improvements may include: * More robust error handling. * Configuration file.