zx_profile_create

摘要

创建调度器配置文件。

声明

#include <zircon/syscalls.h>

zx_status_t zx_profile_create(zx_handle_t profile_rsrc,
                              uint32_t options,
                              const zx_profile_info_t* profile,
                              zx_handle_t* out);

说明

zx_profile_create() 会创建一个新的 profile 对象。

参数 profile 指定配置文件中的设置,而配置文件又可以反过来 将在调用 zx_object_set_profile() 时应用于线程。通过 profile 中的字段如下所示。options 必须为零。

#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)
#define ZX_PROFILE_INFO_FLAG_MEMORY_PRIORITY (1 << 4)

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 or
      // ZX_PROFILE_INFO_FLAG_MEMORY_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;

flags 字段除了指定 zx_profile_info_t 结构中的哪些字段包含有效值。值 在没有相应 flag 位设置的字段中被忽略。这样, 值为 0 且未设置字段进行区分的字段,即使 以后还会添加更多字段

ZX_PROFILE_INFO_FLAG_PRIORITYZX_PROFILE_INFO_FLAG_DEADLINE 指定 针对配置文件的 scheduling discipline,可以是“公平调度”( PRIORITY)或“截止时间安排”(适用于 DEADLINE。最多只能选择其中一个 同时选择多个学科。

ZX_PROFILE_INFO_FLAG_MEMORY_PRIORITY允许创建可应用于 VMAR,并且与任何与标志相关的调度均不兼容。选择回忆时 目前,只有优先级为 ZX_PRIORITY_DEFAULTZX_PRIORITY_HIGH 的含义是,其中 前者是所有 VMAR 最初都默认使用的,后者表示 应避免对已应用配置文件的对象发起回收。

默认情况下,个人资料在分配给某个 在具有指定所有者的 futex 中阻塞的线程(请参阅 zx_futex_wait())。 使用 ZX_PROFILE_INFO_FLAG_NO_INHERIT 创建的配置文件不会包含该模块。时间 在 futex 中分配了此类配置文件块的线程, Futex 的所有者不会因为屏蔽操作而受到任何直接资料压力 (不过,它们可能会收到来自其他线程的压力 在阻塞线程之后被阻塞)。

截止日期配置文件必须始终可继承。尝试创建 不可继承的截止时间配置文件将失败,并显示 ZX_ERR_INVALID_ARGS。

成功后,系统将返回新个人资料的句柄。

权限

profile_rsrc 必须具有基于基本的资源种类 ZX_RESOURCE_KIND_SYSTEM ZX_RSRC_SYSTEM_PROFILE_BASE

调用方作业政策必须允许 ZX_POL_NEW_PROFILE

返回值

成功时,返回 ZX_OK 和新配置文件的句柄(通过 out)。在 事件失败,则返回负的错误值。

错误

ZX_ERR_BAD_HANDLE profile_rsrc 不是有效的句柄。

ZX_ERR_ACCESS_DENIED profile_rsrc 不是配置文件资源。

ZX_ERR_INVALID_ARGS提供的一个或多个参数无效:

  • profileout 是无效的指针
  • flags 包含未知选项
  • flags 无法指定调度规则、CPU 亲和性掩码或 内存优先级
  • flags 同时指定了多个时间安排规则。
  • flags 将时间安排规则指定为截止时间,但配置文件 也被标记为“无继承”。
  • flags 指定调度规则和内存优先级。
  • options 不为零
  • Priority 是无效的优先级

ZX_ERR_NO_MEMORY 因内存不足而失败。

另请参阅