Tegra GPU Scheduling Improvements

Warning:

There is a conflict in environment variables when using the same terminal to build and flash the tools. Unset the TEGRA_TOP environmental variable before trying to flash, or use different terminals to build and flash.

NVIDIA® Tegra® GPU scheduling architecture addresses the quality of service (QoS) for several classes of work. The following table summarizes these classes of work.

Priority Description Workload

HIGH

Critical applications that must meet their rendering deadlines

Small workloads (executable within a display refresh cycle), typically 60 frames/second (fps)

MEDIUM

Well-behaved applications that are not known to cause channel reset

Small-to-medium workloads (may be spread across several refresh cycles)

LOW

Long-running or potentially rogue applications (e.g., WebGL contexts)

Small-to-large workloads

Scheduling Parameters

Applications can achieve the desired QoS by tweaking the following scheduling parameters:

  • timeslice: Specifies the maximum time a channel can use an engine uninterrupted.
  • runlist interleave frequency: Specifies the number of times a channel can appear on a runlist.
  • preemption type: Defines the preemption boundary and how a context is saved.

Previous Limitations

In the previous implementation, applications could set the timeslice (via a sysfs interface) and the preemption type, but the runlist interleave frequency was fixed at 1. This resulted in high-priority applications receiving only one scheduling point per iteration of all channels on the runlist. (For more information, see Runlist Interleave Frequency in this chapter). This implementation was insufficient to let high-priority applications reach their target frame rate.