
# Profile

## NAME

profile - scheduling configuration

## SYNOPSIS

A *profile* allows a set of high level scheduling priorities to be defined and
later applied to one or more threads. Each profile object defines a scheduling
configuration (though currently only thread priority is implemented). Once
created, the profile can be applied to one or more threads, which will then
adopt those settings.

## DESCRIPTION

Profile objects define a high level scheduling policy that can be applied to
threads. For example, an "audio processing" profile could be created with a high
scheduling priority, and then be applied to threads in media playback jobs.
Alternatively, a "background" profile could be created with a low scheduling
priority, and then be applied to threads in non-interactive jobs.

Policy objects are created with the [`zx_profile_create()`] syscall, passing in
a scheduling configuration. The returned profile may then be applied to one or
more threads using the [`zx_object_set_profile()`] syscall.

Because profiles give significant control of the behaviour of the [kernel
scheduler](/docs/concepts/kernel/kernel_scheduling.md), creating a profile requires the root
resource. Once created, profiles may be delegated freely, however.

Currently, only a single scheduler parameter `scheduler.priority` is supported,
which determines the priority of the thread used by Zircon's [kernel
scheduler](/docs/concepts/kernel/kernel_scheduling.md). [`zx_profile_create()`] describes how to
construct a profile object with a custom scheduler priority.

## SYSCALLS

 - [`zx_profile_create()`] - create a new profile object
 - [`zx_object_set_profile()`] - apply a profile to a thread

[`zx_profile_create()`]: /reference/syscalls/profile_create.md
[`zx_object_set_profile()`]: /reference/syscalls/object_set_profile.md
