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 的預設項目,後者表示應避免在套用設定檔的物件上進行所有核心啟動重建。

根據預設,設定檔指派給某個執行緒後,會在該執行緒中封鎖由指派擁有者的執行緒 (請參閱 zx_futex_wait())。使用 ZX_PROFILE_INFO_FLAG_NO_INHERIT 建立的設定檔不會包含設定檔繼承設定。如果在與擁有者同時指派了這類設定檔區塊的執行緒,則代表擁有者並未收到封鎖執行緒的直接設定檔壓力 (但是他們可能會收到封鎖執行緒後封鎖的其他執行緒壓力)。

期限設定檔一律必須可繼承。嘗試建立不可繼承的期限設定檔將會失敗,並顯示 ZX_ERR_INVALID_ARGS。

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

權限

profile_rsrc 必須包含以 ZX_RSRC_SYSTEM_PROFILE_BASE 為底的資源種類 ZX_RESOURCE_KIND_SYSTEM

呼叫端工作政策必須允許 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 非零
  • 優先順序無效

ZX_ERR_NO_MEMORY 因記憶體不足而失敗。

另請參閱