  Scheduling real-time tasks that utilize GPUs with analyzable guarantees poses
a significant challenge due to the intricate interaction between CPU and GPU
resources, as well as the complex GPU hardware and software stack. While much
research has been conducted in the real-time research community, several
limitations persist, including the absence or limited availability of
preemption, extended blocking times, and/or the need for extensive
modifications to program code. In this paper, we propose two novel techniques,
namely the kernel thread and IOCTL-based approaches, to enable preemptive
priority-based scheduling for real-time GPU tasks. Our approaches exert control
over GPU context scheduling at the device driver level and enable preemptive
GPU scheduling based on task priorities. The kernel thread-based approach
achieves this without requiring modifications to user-level programs, while the
IOCTL-based approach needs only a single macro at the boundaries of GPU access
segments. In addition, we provide a comprehensive response time analysis that
takes into account overlaps between different task segments, mitigating
pessimism in worst-case estimates. Through empirical evaluations and case
studies, we demonstrate the effectiveness of the proposed approaches in
improving taskset schedulability and timeliness of real-time tasks. The results
highlight significant improvements over prior work, with up to 40\% higher
schedulability, while also achieving predictable worst-case behavior on Nvidia
Jetson embedded platforms.
