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 參數會指定設定檔中的設定,然後 呼叫 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 的主人不會收到 阻塞性測試 但可能會收到來自其他執行緒的壓力 封鎖後)。

期限設定檔必須一律可以沿用。嘗試建立 不可沿用的期限設定檔會因 ZX_ERR_INVALID_ARGS 而失敗。

成功處理後,系統會傳回新設定檔的控制代碼。

權限

profile_rsrc 必須包含具有底數的資源種類 ZX_RESOURCE_KIND_SYSTEM ZX_RSRC_SYSTEM_PROFILE_BASE

呼叫端工作政策必須允許 ZX_POL_NEW_PROFILE

傳回值

成功時傳回 ZX_OK 和新設定檔的控制代碼 (透過「傳出」)。在 失敗時,系統會傳回負錯誤值。

錯誤

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 因記憶體不足而失敗。

另請參閱