Create a scheduler profile.
#include <zircon/syscalls.h> zx_status_t zx_profile_create(zx_handle_t root_job, uint32_t options, const zx_profile_info_t* profile, zx_handle_t* out);
zx_profile_create()
creates a new profile object.
The parameter profile specifies the settings in the profile, which in turn will be applied to threads when zx_object_set_profile()
is called. The fields of profile are shown below. options must be zero.
#define ZX_PROFILE_INFO_FLAG_PRIORITY (1 << 0) #define ZX_PROFILE_INFO_FLAG_CPU_MASK (1 << 1) #define ZX_PROFILE_INFO_FLAG_DEADLINE (1 << 2) #define ZX_PROFILE_INFO_FLAG_NO_INHERIT (1 << 3) typedef struct zx_profile_info { // A bitmask of ZX_PROFILE_INFO_FLAG_* values. Controls overall profile // options as well as determining which other fields below have been specified. // Other fields are considered unset. uint32_t flags; uint8_t padding1[4]; union { struct { // Scheduling priority. |flags| must have ZX_PROFILE_INFO_FLAG_PRIORITY set. int32_t priority; uint8_t padding2[20]; }; // Scheduling deadline. |flags| must have ZX_PROFILE_INFO_FLAG_DEADLINE set. zx_sched_deadline_params_t deadline_params; }; // CPUs that threads may be scheduled on. |flags| must have // ZX_PROFILE_INFO_FLAG_CPU_MASK set. zx_cpu_set_t cpu_affinity_mask; } zx_profile_info_t;
The flags
field controls overall profile options in addition to specifying which fields in the zx_profile_info_t
structure contain valid values. Values in fields without a corresponding flag
bit set will be ignored. This allows fields with values of 0
and unset fields to be distinguished, even if additional fields are added in future.
ZX_PROFILE_INFO_FLAG_PRIORITY
and ZX_PROFILE_INFO_FLAG_DEADLINE
specify the scheduling discipline
for the profile, either “fair scheduling” (for PRIORITY
) or “deadline scheduling” (for DEADLINE
. No more than one of these disciplines may be selected at the same time.
By default, profiles participate in profile inheritance when assigned to a thread which blocks in a futex with an assigned owner (see zx_futex_wait()
). Profiles created with the ZX_PROFILE_INFO_FLAG_NO_INHERIT
do not. When threads assigned with such a profile block in a futex with an owner, the owner of the futex receives no direct profile pressure from the blocking thread (however, they may receive pressure from a different thread blocked behind the blocking thread).
Deadline profiles must always be inheritable. Attempts to create a non-inheritable deadline profile will fail with ZX_ERR_INVALID_ARGS.
Upon success a handle for the new profile is returned.
root_job must be of type ZX_OBJ_TYPE_JOB and have ZX_RIGHT_MANAGE_PROCESS.
Caller job policy must allow ZX_POL_NEW_PROFILE.
Returns ZX_OK and a handle to the new profile (via out) on success. In the event of failure, a negative error value is returned.
ZX_ERR_BAD_HANDLE root_job is not a valid handle.
ZX_ERR_WRONG_TYPE root_job is not a job handle.
ZX_ERR_ACCESS_DENIED root_job does not have ZX_RIGHT_MANAGE_PROCESS right, or root_job is not a handle to the root job.
ZX_ERR_INVALID_ARGS One or more of the arguments provided were invalid:
ZX_ERR_NO_MEMORY Failure due to lack of memory.
zx_object_set_profile()
zx_futex_wait()()
]